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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.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]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left: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:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding: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 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin: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;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

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

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

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

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
I have been working on converting the jtab javascript file to be Ukulele compatible. I believe that it is nearly ready. Since I do not know anything about guitars, I do not understand some items, such as base notes, base intervals, caged notes, base fret and alternate barred notes.

[[YouTube Site|http://www.youtube.com/watch?v=HiK6dOE8Lw4]]

Where is the Love?
Superman
She Will Be Loved
Collide
No One

Chords
<<jtab 'F C Dm Bb'>>

[[Strumming Pattern D X U U U X|http://www.youtube.com/watch?v=HiK6dOE8Lw4#t=1m50s]]

I'm Yours
[[Strumming Pattern D - X U U - X U U - X U U X|http://www.youtube.com/watch?v=HiK6dOE8Lw4#t=4m46s]]
<<player id=1 http://www.youtube.com/embed/i5IgAT79PK8 320 240>>
<<player id=2 http://www.youtube.com/embed/tCAXUgp0s2Y 320 240>>

<<uChord ntype:"cl" nota:"[Am][Em7][G][Am][Am][Em7][G][Am]">>

TG [Am]DUDU TTTT[Em7] D

<<uChord ntype:"cl" nota:"[Am] Ain't no sunshine when she's gone [Em7] [G][Am]">>
<<uChord ntype:"cl" nota:"[Am] It’s not warm when she's away [Em7] [G][Am]">>
<<uChord ntype:"cl" nota:"Ain't no sunshine when she's [Em7] gone ">>
<<uChord ntype:"cl" nota:"And she’s always gone too [Dm] long">>
<<uChord ntype:"cl" nota:"Anytime she goes a[Am]way [Em7] [G] [Am] ">>

<<uChord ntype:"cl" nota:"Wonder this time where's she's gone [Em7] [G][Am]">>
<<uChord ntype:"cl" nota:"Wonder if she's gone to stay [Em7] [G][Am]">>
<<uChord ntype:"cl" nota:"Ain't no sunshine when she's [Em7] gone ">>
<<uChord ntype:"cl" nota:"And this house just aint no [Dm] home">>
<<uChord ntype:"cl" nota:"Anytime she goes a[Am]way [Em7] [G] [Am] ">>

<<uChord ntype:"cl" nota:"[Am] I know I know ...">>
<<uChord ntype:"cl" nota:"I oughtaa [Am][C] leave the young thing [Em7]alone">>
<<uChord ntype:"cl" nota:"But there ain't no [Dm] sunshine ">>
<<uChord ntype:"cl" nota:"When she's [Am] gone [Em7][G][Am]">>

<<uChord ntype:"cl" nota:"[Am]Ain't no sunshine when she's gone [Em7][G][Am]">>
<<uChord ntype:"cl" nota:"[Am]Only darkness everyday [Em7][G][Am]">>
<<uChord ntype:"cl" nota:"Ain't no sunshine when she's [Em7] gone ">>
<<uChord ntype:"cl" nota:"And this house just aint no [Dm] home">>
<<uChord ntype:"cl" nota:"Anytime she goes a[Am]way [Em7] [G] [Am] ">>
<<uChord ntype:"cl" nota:"Anytime she goes away [Em7] [G] [Am] ">>
<<uChord ntype:"cl" nota:"Anytime she goes away [Em7] [G] [Am] ">>
<<uChord ntype:"cl" nota:"Anytime she goes away [Em7] [G] [Am] ">>
|<<uChord 'Am7 C#dim G7'>> Ain't she sweet| <<uChord 'Am7 C#dim G7'>> see her walkin down the street|
|<<uChord 'C E7 A7'>>well I ask you very confidentially| <<uChord 'D7 G7 C'>> Ain't she sweet|
|Am7 C#dim G7 Ain't she nice | Am7 C#dim G7 well look her over once or twice |
|C E7 A7 and I ask you very confidentially| D7 G7 C Ain't she nice|
|<<uChord 'F9'>> Just cast an eye | <<uChord 'C'>> in her direction |
|<<uChord 'F9'>> oh me oh my, | <<uChord 'C'>> aint that perfection |
|Am7 C#dim G7 I re - peat| Am7 C#dim G7 well dont you think thats kind of neat|
|C E7 A7 and I ask you very confidentially| D7 G7 C Ain't she sweet |
<<uChord 'D C G B A C# Bb F# Em'>>
Chords <<jtab "G C  D Em C G">>
<<jtab "G C D Am C D A">>
Strum: D UDU

//{{{
Verse 1
D                          G                D
You fill up my senses like a night in the forest,
                      G     A    G                  A
Like the mountains in springtime, like a walk in the rain.
         G                  A   G                D
Like a storm in the desert, like a sleepy blue ocean,
      G    A       G            A      D
You fill up my senses, Come fill me again

Verse 2
D             G    A            G             D      
Come let me love you, Let me give my life to you,
           A              G         G             A
Let me drown in your laughter, Let me die In  your arms,.
    G       A                       G          D 
Let me lay down beside you, Let me always be with you
 A              G    A    G        A        G
Come let me love you, Come love me again.
-----------------HUMMING----------------------
       G               D
Let me give my life to you,
 D         G   A   G       A         G
Come let me love you, Come love me again

//}}}


<<<
{{{
 G              C  D    Em      C            G
You fill up my senses, like a night in the forest.
 G                   C   D      Am     C           D
Like a mountain in springtime, like a walk in the rain.
 G                   C  D    Em      C           G
Like a storm in the desert, like a sleepy blue ocean.
 G              C  D    Am   D        G
You fill up my senses, come fill me again.
G           C   D    Em     C                G
Come let me love you, let me give my life for you.
G                     C   D    Am    C            D
Let me drown in your laughter, let me die in your arms.
G                C     D    Em      C            G
Let me lay down beside you, let me always be with you.
G            C   D    Am   D        G
Come let me love you, come love me again.
G              C  D    Em     C             G
You fill up my senses, like a night in the forest.
G                   C      D    Am     C           D
Like a mountain in spring time, like a walk in the rain.
G                   C  D    Em       C          G
Like a storm in the desert, like a sleepy blue ocean.
G              C  D    Am   D        G
You fill up my senses, come fill me again.
}}}
>>>
<<player id=1 http://www.youtube.com/embed/PlcygkKced4 320 240>>
<<player id=2 http://www.youtube.com/embed/5pNffwRhJQg 320 240>>
[[Song|http://www.youtube.com/watch?v=B1TXg0HNz1s#t=1m35s]]

Difficult with the Bb and quick changes

<<jtab 'F Bb G7 C7 F7'>>
<<jtab 'Bbm7 Bdim Gm'>>

<<jtab 'C#6'>>

Look for the [F]bare necessities
The simple [Bb]bare necessities
Forget about[F] your worries and your [G7]strife[C7]
I mean the [F]bare [F7]necessities
Old [Bb]Mother Nature's [Bdim]recipes
That [F]bring the bare [G7]necessities[C7] of [F]life

Wherever I [C7]wander, wherever I [F]roam
I couldn't be [C7]fonder of my big [F]home[F7]
The [F7]bees are [Bb]buzzin' in the [Bbm]tree
To make some [F]honey just for [Bdim]me

When you look under the rocks and plants
And take a glance at the fancy ants
Then maybe try a few

The bare [Gm]necessities of [C7]life will come to [F]you
They'll come to you!

Look for the bare necessities
The simple bare necessities
Forget about your worries and your strife
I mean the bare necessities 
That's why a bear can rest at ease
With just the bare necessities of life

Now when you pick a pawpaw
Or a prickly pear
And you prick a raw paw
Next time beware
Don't pick the prickly pear by the paw
When you pick a pear
Try to use the claw
But you don't need to use the claw
When you pick a pear of the big pawpaw
Have I given you a clue ?

The bare necessities of life will come to you
They'll come to you!

So just try and relax, yeah cool it
Fall apart in my backyard
'Cause let me tell you something little britches
If you act like that bee acts, uh uh
You're working too hard

And don't spend your time lookin' around
For something you want that can't be found
When you find out you can live without it
And go along not thinkin' about it
I'll tell you something true

The bare necessities of life will come to you
<<uChord in:"c" nota:"[C] [F][Am][G][G7]">>
[[Lyrics|http://www.lyrics007.com/Bob%20Dylan%20Lyrics/Blowing%20In%20The%20Wind%20Lyrics.html]]
<<uChord in:"cl" nota:"[C]How [F]many roads [C]must a [Am]man walk down">>

<<tiddler [[Practice Sheet - Blowin In the Wind]]>>

<<<
{{{
Blowing...
C        F            C        Am
How many roads must a man walk down,
C      F               G  -  G7
before you call him a man?
C        F           C          Am
How many seas must a white dove fly,
C          F             G  -  G7
before she sleeps in the sand?
C        F              C            Am
And how many times must a cannon ball fly,
C              F       G  -  G7 
before they're forever banned?

    F          G          C              Am
The xxxxxx, my xxxxxx, is xxxxxxx in xxx wind,
    F         G              C
the xxxxxx is xxxxxxx in xxx wind

C        F           C        Am
How xxxx years xxx x mountain xxxxx,
C            F             G  -  G7
before xx is xxxxxx xx the xxx
C        F              C      Am,
How xxxx years xxx xxxx people xxxxx,
C              F             G  -  G7
before xxxx amp xx allowed xx be xxxx
C        F           C            Am
How xxxx times xxx x man xxxx his xxxx,
       C            F            G  -  G7
xxx pretend xxxx he xxxx xxxxx amp x see

    F          G          C              Am
The xxxxxx, my xxxxxx, is xxxxxxx in xxx wind,
    F         G              C
the xxxxxx is xxxxxxx in xxx wind

C        F            C        Am
How xxxx times xxxx a xxx look xx,
C             F       G  -  G7
before xx can xxx the xxx
C        F         C       Am
How xxxx ears xxxx one xxx have,
C             F           G  -  G7
before xx can xxxx xxxxxx cry
C        F              C            Am
How xxxx deaths xxxx it xxxx xxxx he xxxxx,
C             F           G  -  G7
that xxx xxxx people xxxx died

    F          G          C              Am
The xxxxxx, my xxxxxx, is xxxxxxx in xxx wind,
    F         G              C
the xxxxxx is xxxxxxx in xxx wind

}}}
>>>
<<player http://www.youtube.com/embed/ZjxhPpJQEZ0#t=0m7s 320 240>>
Strum - Church Swing D-U D-U D-U D-U
<<uChord inst:"u" in:"cl" nota:'[G7] Blue Moon You [C]left me [Am]standing [Dm] along.'>> x 3
Without a love of my own
<<uChord 'F C Am Dm'>>

<<uChord 'F G C F G'>>

<<uChord 'Dm G7 C'>> x2
<<uChord 'Fm Bb Eb'>>
<<uChord 'G D7 G D7 G7'>>

[[Ukulele Underground Home|http://ukuleleunderground.com/]]
[[Ukulele Underground Forums|http://ukuleleunderground.com/forum/]]
[[Ukulele Mike YouTube Lessons|http://www.youtube.com/user/MusicTeacher2010]]
[[UU Resources|http://www.ukuleleunderground.com/forum/showthread.php?15464-Ukulele-Resources-%28Updated%29]]
[[Top 50 Ukulele Sites|http://www.boatpaddleukuleles.com/top50/]]
[[Ukulele Mikes Links|http://www.ukulelemikelynch.com/uke_links.htm]]
[[http://www.ukulelestrummers.com/|http://www.ukulelestrummers.com/]]
[[Easy Songs to Play|http://gotaukulele.blogspot.com/p/ukulele-song-sheets.html]]

[img[Main Channel|http://i2.ytimg.com/i/yAlwTH-8IRI5Kct453TL-A/1.jpg?v=8eaaf9][http://www.youtube.com/user/MusicTeacher2010]] [img[DisneyChannel|http://i4.ytimg.com/i/sxFuXOOpV4poeN8Q2YKm_w/1.jpg?v=932b3b][http://www.youtube.com/user/DisneyUkuleleMike]] [img[The Beatles|http://i4.ytimg.com/i/ot78P9fyRy_DNn1dmFE2Cw/1.jpg?v=8dfe53][http://www.youtube.com/user/BeatlesUkuleleMike]] [img[Endless Summer|http://i1.ytimg.com/i/4Tq9CihiOpH1Tkr4ra550g/1.jpg?v=94f86a][http://www.youtube.com/user/EndlessSummerUkulele]] [img[KUKE Radio|http://i2.ytimg.com/i/9wZH2JWVapjZ7dwu2dyuUg/1.jpg?v=9e6664][http://www.youtube.com/user/RadioStationKUKE]]
<<uChord "G C G D7">>

//{{{
G           C  G              D7   G
Hey, where did wo go   days when the rain came

          C    G             D7         G
Down in  the hollow    playing a new game

           C                G
Laughing, and a running, hey, hey

          D7     G       C
Skipping and a jumping in the misty morning fog,

    G       D7           C    D7             G         Em
with our hearts a thumpin' and you,  my brown eyed girl

C    D7        G    D7
You, my brown eyed girl

Whatever happened to Tuesday and so slow
Going down to the old mine
With a transistor radio
Standing in the sunlight laughing
Hiding behind a rainbow's wall
Slipping and a sliding
All aling the waterfall
With you, my brown eyed girl
You, my brown eyed girl

bridge:

D7
Do you remember when we used to sing

G         C       G      D7
Sha la la la la la la la te da   Just like that

G         C       G      D7         G
Sha la la la la la la la te da  la te da


Now that I'm all on my own
I saw you just the other day
My, how you have grown
Cast my memory back there Lord
Sometimes I'm overcome thinkin' 'bout it
Laughing and a running hey, hey
Behind the stadium
With you, my brown eyed girl
You, my brown eyed girl

Do you remember when we used to sing

D7   G          C
     Sha la la la la la la la
//}}}
[[Lyrics Source|http://www.cowboylyrics.com/tabs/morrison-van/brown-eyed-girl-9885.html]]
<<uChord 'C G7 C'>>

[C]As I was walking down the street, [G7]down the street, [C] down the street
A pretty girl I chanced to meet, [G7] under the silvery [C]moon.

<<uChord n:"D U & D U & D U & D U" in:"s">>

As I was walking down the street,
Down the street, down the street,
A pretty little gal I chanced to meet,
Oh, she was fair to see.

Buffalo Gals, won't you come out tonight,
Come out tonight, come out tonight.
Buffalo Gals, won't you come out tonight
And dance by the light of the moon.

I stopped her and we had a talk,
Had a talk, had a talk,
Her feet took up the whole sidewalk
And left no room for me.

Buffalo Gals, won't you come out tonight,
Come out tonight, come out tonight.
Buffalo Gals, won't you come out tonight
And dance by the light of the moon.

I asked her if she'd have a dance,

[ From: http://www.metrolyrics.com/buffalo-gals-lyrics-children.html ]

Have a dance, have a dance,
I thought that I might have a chance
To shake a foot with her.

Buffalo Gals, won't you come out tonight,
Come out tonight, come out tonight.
Buffalo Gals, won't you come out tonight
And dance by the light of the moon.

I danced with a gal with a hole in her stockin',
And her heel kept a-knockin', and her toes kept a-rockin'
I danced with a gal with a hole in her stockin'
And we danced by the light of the moon.

Buffalo Gals, won't you come out tonight,
Come out tonight, come out tonight.
Buffalo Gals, won't you come out tonight
And dance by the light of the moon.
<<uChord ntype:'cl' nota:'[C] [E7] [F] [Dm]'>>
<<uChord ntype:'cl' nota:'[G7] [C7] [F] [Fm]'>>
<<uChord ntype:'cl' nota:'[C] [G] [F] [G]'>>

Strum: D U X (Used in video)
Strum Alt1:  [[Swing Shuffle|Strumming]]
Strum Alt2: [[Calipso|Strumming]]

Why do you [C]build me up (Build me up)
[E7]Buttercup baby just to
[F]let me down (Let me down)
And [Dm]mess me around
And then [C]worst of all (Worst of all)
[E7]You never call baby
When you [F]say you will (Say you will)
But I [Dm]love you still
I need [C]you[G7] (I need you)
More than [C7]anyone darlin'
You know [F]that I have from [Fm]the start
So [C]build me up (Build me up)
[G]Buttercup
Don't break my [F]heart[C]

[C]I'll be over at [G]ten
You tell me [Gm7]time and [F]again
But you're [C]late
I wait [Dm]around and [G7]then
I [C]went to the [G]door
I can't [Gm7] take [F]anymore
It's [C]not you
You let me [Dm] down again

Baby Baby
Try to find a little time
And I'll make you happy
I'll be home
I'll be waiting beside the phone
Waiting for you.

Why do you build me up....
To you I'm a toy
But I could be the boy
You adore
If you'd just let me know
Although you're untrue
I'm attracted to you
All the more
Why do I need you so Baby Baby.....

ooh ooh ooh
Why do build me up .....


<<player http://www.youtube.com/embed/cWcdGTGg3pU 340 280>>
Intro: <<uChord "Am F C G">>

      Am               F
Baby girl whats your name?
            C                      G
Lemme talk to ya, lemme buy you a drink
     Am            F           C                G
Im t-pain you know me convict music NAPPY BOY ohh wee
            Am           F
I know the club close at 3
           C                         G
Whats the chances of you roll'n with me
            Am                    F
Back to the crib show you how I live
         C                       G
Lets get drunk 'n forget what we did


               Am        C
I'ma buy you a drink ooo wee
     F                      G
Oohh i'ma take you home with me
                   Am
I got money in the bank
                C
Shawty what you think 'bout that
F                       G
Ill be in the grey cadillac
                   Am  F    C      G
We in the bed like ooo oo
                   Am  F    C      G
We in the bed like ooo oo


[repeat the whole song]


Talk to me, I talk back
Lets talk money, I talk that
Crunk juice bottles, oakley shades
Shawty got class, oh behave
Lets get gone, walk it out (now walk it out)
Just like that thats what im talkin 'bout
We gon' have fun you gon' see
On that patrone you should get like me

(chorus)
I'ma buy you a drink ooo wee
Oohh i'ma take you home with me
I got money in the bank
Shawty what you think 'bout that
Find me in the grey cadillac
We in the bed like ooo oo
We in the bed like ooo oo

(yung joc)
Wont you meet me at the bar respect big pimpin
Tell me how you feel mama tell me what you sippin
A certified dime piece deserved louie one three
150 a shot, three for you and three for me
I'm checking your body language I love the conversation
And when you lick your lips I get a tingly sensation
Now we're both 'bout tipsy you say you're in the mood
All I need is 'bout an hour better yet maybe two
Lemme tell you how I live ferrari switch gears
When I whisper in your ear, your legs hit the chandilleer
Passion fruit and sex all in the atmosphere
I'ma let t-pain sing so he can make it clear

(chorus)
I'ma buy you a drink ooo wee
Oohh i'ma take you home with me
I got money in the bank
Shawty what you think 'bout that
Ill be in the grey cadillac
We in the bed like ooo oo
We in the bed like ooo oo

Let's get gone
Let's get gone
Walk it out (now walk it think about it, awww snap)
Now rock rock rock rock
You can do it all by yourself

(chorus)
I'ma buy you a drink ooo wee
Oohh i'ma take you home with me
I got money in the bank
Shawty what you think 'bout that
Ill be in the grey cadillac
We in the bed like ooo oo
We in the bed like ooo oo
<<jtab '

C Cm C7 
Cm7 Cdim Cmaj7 C6'>>

<<jtab '
Csus2 Csus4 Caug
C7+5 C7add5'>>

<<jtab '
 C# C#m C#7
C#m7 C#dim C#maj7 C#6'>>

<<jtab ' 
C#sus2 C#sus4 C#aug'>>
<<uChord n:'[C]Crazy, I`m [A7]crazy for feeling so lonely [Dm7] [Dm6]' in:'cl'>>
<<uChord n:'I`m [G]crazy, crazy for [G7]feeling so [C]blue [Gdim][Dm7][G7]' in:'cl'>>
Verse 1:

[C]Crazy, I'm [A7]crazy for feeling so [Dm]lonely [Dm7][Dm6]
I'm [G]crazy, crazy for [G7]feeling so [C]blue [Gdim][Dm7][G7]
[C]I knew you'd [A7]love me as long as you [Dm]wanted [Dm7][Dm6]
And then [G]someday you'd [G7]leave me for somebody [C]new [C7]

Bridge:

[F]Worry, why do I let myself [C]worry? [C7]
[D]Wond'ring [D7]what in the world did I [G]do? [Dm7][G7]

Verse 2:

[C]Crazy for [A7]thinking that my love could [Dm]hold you [Dm7][Dm6]
I'm [F7]crazy for [Em7]trying and [Dm7]crazy for [C9]crying
And I'm [Dm7]crazy for [G7]loving [C]you.

Bridge

Verse 2 
<<player http://www.youtube.com/embed/tJILXWjKyh0 360 240>>

<<uChord 'A G D E7 '>> x2

<<uChord 'A Bm7 G C F Gm7 A A6 '>>
<<player http://www.youtube.com/embed/l_nzYZNCD3I 360 240>>
<<uChord n:'Am G F Bm E7' in:'c'>>
Shuffle

[Am] All the leave are [G]Brown[F]
[G]And the sky is [Bm]grey[E7]
[E7]I've been for a [C][E7]Walk[Am]
On a [F]winters [Bm]Day[E7]
Ive been[E7] safe and [Am][G]warm[F]
If [G] I was in [Bm]LA[E7]
Califiornia [Am][G][F]Dreamin
On such[G] a winters [Bm]day [E7]




<<jtab 'Bb D7 G7 '>>
<<myAudio>>
[[Chordie|http://www.chordie.com/]]
[[Ultimate Guitar Tabs|http://www.ultimate-guitar.com/]] Well formatted for Tiddlers
A method used in strumming to mute the down strum creating a percussive sound during play. 

On the down strum, the fleshy part of the hand beneath the thumb makes contact with all the strings at the sound whole, muting the sound. The index finger may also hit the uke at the neck to add more percussion.

Although "Chunk" is the typical name, "Chuck", "Chnk", or "Hit" are often used to describe this technique. 

When writing a strumming pattern, an X is often used to show a chunk during strumming.
Eg. D X U U U X is {{Down-Chunk-Up-Up-Up-Chunk}}

<<comments>>
[[Circle of Fifths|http://randscullard.com/CircleOfFifths/]]
<html><div align="center"><iframe src="http://randscullard.com/CircleOfFifths/" frameborder="0" width="100%" height="540" zoom="75%"></iframe></div></html>
[[Most Common Chords Here|Most Common Chords]]
''Major''
<<uChord 'A Bb B C C# D'>>
<<uChord 'Eb E F F# G G#'>>

''Minor''
<<uChord 'Am Bbm Bm Cm C#m Dm'>>
<<uChord 'Ebm Em Fm F#m Gm G#m'>>

''Dom 7th''
<<uChord 'A7 Bb7 B7 C7 C#7 D7'>>
<<uChord 'Eb7 E7 F7 F#7 G7 G#7'>>
Convert song sheets that are in PDF format to DOC format. Easily copy lyrics and chords to tiddler.
<html><div align="center"><iframe src="http://www.pdftoword.com/Default.aspx" frameborder="0" width="100%" height="540"></iframe></div></html>
[[Online|http://www.pdftoword.com/Default.aspx]]
<<player http://www.youtube.com/embed/r01rjeTAwf8 320 240>>
<<uChord ntype:"cl" nota:'[G][Em][G][C] '>>
<<uChord ntype:"cl" nota:'[G][D7][G][D7] '>>
<<uChord ntype:"cl" nota:'[G][Em][G][C] '>>
<<uChord ntype:"cl" nota:'[G][D7][C][G] '>>
//{{{
Intro:
G  Em (x2)

Chorus 1:
G       Em                 G        C
 Cupid, draw back your bow, and let your arrow go;
G               D7                 G       D7
 Straight to my lover's heart, for me, for me.
G       Em                 G        C
 Cupid, please hear my cry, and let your arrow fly;
G               D7                 C    G
 Straight to my lover's heart, for me...

Verse 1:
     G                               D7
Now, I don't mean to bother you, but I'm in distress;
                                   G
There's danger of me losin' all of my happiness.
                              C
For I love a girl who doesn't know I exist;
D7                G
 And this you can fix. So...

Chorus 2:
G       Em                 G        C
 Cupid, draw back your bow, and let your arrow go;
G               D7                 G       D7
 Straight to my lover's heart, for me, for me.
G       Em                 G        C
 Cupid, please hear my cry, and let your arrow fly;
G               D7                 C    G
 Straight to my lover's heart, for me...

Verse 2:
     G                              D7
Now, Cupid, if your arrow makes her love strong for me,
                                G
I promise I will love her until eternity.
                                   C
I know, between the two of us, her heart we can steal;
D7              G
 Help me if you will. So...

Chorus 3:
G       Em                 G        C
 Cupid, draw back your bow, and let your arrow go;
G               D7                 G       D7
 Straight to my lover's heart, for me, for me.
G       Em                 G        C
 Cupid, please hear my cry, and let your arrow fly;
G               D7                 C    G
 Straight to my lover's heart, for me... Now...

Coda:
G                 Em       G              Em
 Cupid, don't you hear me, calling you? I need you.
G       Em         G         Em           G        Em
 Cupid, help me, I need you, Cupid, don't fail me...

(Fade)

//}}}
[[Guitar Tabs - Great Formatting|http://www.ultimate-guitar.com/]]
<<uChord 'D Dm D7'>>
<<uChord  'Dm7 Ddim Dmaj7 D6'>>
<<uChord  'Dsus2 Dsus4 Daug'>>
# Strumming
| Shuffle| <<myAudio id:1 mp3:'http://davidrschaller.servehttp.com/audio/shuffleStrum.mp3' title:'Basic Strum' artist:'David R. Schaller'>>|
| Swing Shuffle| <<myAudio id:2 mp3:'http://davidrschaller.servehttp.com/audio/swingShuffle.mp3' title:'Swing Shuffle' artist:'David R. Schaller'>>|
| Church Lick| <<myAudio id:3 mp3:'http://davidrschaller.servehttp.com/audio/churchLickStrum.mp3' title:'Church Lick' artist:'David R. Schaller'>>|
| Calipso| <<myAudio id:4 mp3:'http://davidrschaller.servehttp.com/audio/calipsoStrum.mp3' title:'CalipsoStrum' artist:'David R. Schaller'>>|
## [[D DUDU|Scarborough Fair]]
# Chord Progression [[Ref. Sheet|Most Common Chords]]
## C F G7
## G C D7
## D G A7
## F Bb C7 *Work on this!
# Scales
## C
# Picking
## 1-2-3-4-1-2-3 [[House of the Rising Sun]]
## 1-2-3-4-3-2 [[Scarborough Fair]]


Other:
#Strengthen Fingers via Stress Ball
/***
|''Name:''|DataTiddlerPlugin|
|''Version:''|1.0.6 (2006-08-26)|
|''Source:''|http://tiddlywiki.abego-software.de/#DataTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Description
Enhance your tiddlers with structured data (such as strings, booleans, numbers, or even arrays and compound objects) that can be easily accessed and modified through named fields (in JavaScript code).

Such tiddler data can be used in various applications. E.g. you may create tables that collect data from various tiddlers. 

''//Example: "Table with all December Expenses"//''
{{{
<<forEachTiddler
    where
        'tiddler.tags.contains("expense") && tiddler.data("month") == "Dec"'
    write
        '"|[["+tiddler.title+"]]|"+tiddler.data("descr")+"| "+tiddler.data("amount")+"|\n"'
>>
}}}
//(This assumes that expenses are stored in tiddlers tagged with "expense".)//
<<forEachTiddler
    where
        'tiddler.tags.contains("expense") && tiddler.data("month") == "Dec"'
    write
        '"|[["+tiddler.title+"]]|"+tiddler.data("descr")+"| "+tiddler.data("amount")+"|\n"'
>>
For other examples see DataTiddlerExamples.




''Access and Modify Tiddler Data''

You can "attach" data to every tiddler by assigning a JavaScript value (such as a string, boolean, number, or even arrays and compound objects) to named fields. 

These values can be accessed and modified through the following Tiddler methods:
|!Method|!Example|!Description|
|{{{data(field)}}}|{{{t.data("age")}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined {{{undefined}}} is returned.|
|{{{data(field,defaultValue)}}}|{{{t.data("isVIP",false)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined the defaultValue is returned.|
|{{{data()}}}|{{{t.data()}}}|Returns the data object of the tiddler, with a property for every field. The properties of the returned data object may only be read and not be modified. To modify the data use DataTiddler.setData(...) or the corresponding Tiddler method.|
|{{{setData(field,value)}}}|{{{t.setData("age",42)}}}|Sets the value of the given data field of the tiddler to the value. When the value is {{{undefined}}} the field is removed.|
|{{{setData(field,value,defaultValue)}}}|{{{t.setData("isVIP",flag,false)}}}|Sets the value of the given data field of the tiddler to the value. When the value is equal to the defaultValue no value is set (and the field is removed).|

Alternatively you may use the following functions to access and modify the data. In this case the tiddler argument is either a tiddler or the name of a tiddler.
|!Method|!Description|
|{{{DataTiddler.getData(tiddler,field)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined {{{undefined}}} is returned.|
|{{{DataTiddler.getData(tiddler,field,defaultValue)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined the defaultValue is returned.|
|{{{DataTiddler.getDataObject(tiddler)}}}|Returns the data object of the tiddler, with a property for every field. The properties of the returned data object may only be read and not be modified. To modify the data use DataTiddler.setData(...) or the corresponding Tiddler method.|
|{{{DataTiddler.setData(tiddler,field,value)}}}|Sets the value of the given data field of the tiddler to the value. When the value is {{{undefined}}} the field is removed.|
|{{{DataTiddler.setData(tiddler,field,value,defaultValue)}}}|Sets the value of the given data field of the tiddler to the value. When the value is equal to the defaultValue no value is set (and the field is removed).|
//(For details on the various functions see the detailed comments in the source code.)//


''Data Representation in a Tiddler''

The data of a tiddler is stored as plain text in the tiddler's content/text, inside a "data" section that is framed by a {{{<data>...</data>}}} block. Inside the data section the information is stored in the [[JSON format|http://www.crockford.com/JSON/index.html]]. 

//''Data Section Example:''//
{{{
<data>{"isVIP":true,"user":"John Brown","age":34}</data>
}}}

The data section is not displayed when viewing the tiddler (see also "The showData Macro").

Beside the data section a tiddler may have all kind of other content.

Typically you will not access the data section text directly but use the methods given above. Nevertheless you may retrieve the text of the data section's content through the {{{DataTiddler.getDataText(tiddler)}}} function.


''Saving Changes''

The "setData" methods respect the "ForceMinorUpdate" and "AutoSave" configuration values. I.e. when "ForceMinorUpdate" is true changing a value using setData will not affect the "modifier" and "modified" attributes. With "AutoSave" set to true every setData will directly save the changes after a setData.


''Notifications''

No notifications are sent when a tiddler's data value is changed through the "setData" methods. 

''Escape Data Section''
In case that you want to use the text {{{<data>}}} or {{{</data>}}} in a tiddler text you must prefix the text with a tilde ('~'). Otherwise it may be wrongly considered as the data section. The tiddler text {{{~<data>}}} is displayed as {{{<data>}}}.


''The showData Macro''

By default the data of a tiddler (that is stored in the {{{<data>...</data>}}} section of the tiddler) is not displayed. If you want to display this data you may used the {{{<<showData ...>>}}} macro:

''Syntax:'' 
|>|{{{<<}}}''showData '' [''JSON''] [//tiddlerName//] {{{>>}}}|
|''JSON''|By default the data is rendered as a table with a "Name" and "Value" column. When defining ''JSON'' the data is rendered in JSON format|
|//tiddlerName//|Defines the tiddler holding the data to be displayed. When no tiddler is given the tiddler containing the showData macro is used. When the tiddler name contains spaces you must quote the name (or use the {{{[[...]]}}} syntax.)|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|


!Revision history
* v1.0.6 (2006-08-26) 
** Removed misleading comment
* v1.0.5 (2006-02-27) (Internal Release Only)
** Internal
*** Make "JSLint" conform
* v1.0.4 (2006-02-05)
** Bugfix: showData fails in TiddlyWiki 2.0
* v1.0.3 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.2 (2005-12-22)
** Enhancements:
*** Handle texts "<data>" or "</data>" more robust when used in a tiddler text or as a field value.
*** Improved (JSON) error messages.
** Bugs fixed: 
*** References are not updated when using the DataTiddler.
*** Changes to compound objects are not always saved.
*** "~</data>" is not rendered correctly (expected "</data>")
* v1.0.1 (2005-12-13)
** Features: 
*** The showData macro supports an optional "tiddlername" argument to specify the tiddler containing the data to be displayed
** Bugs fixed: 
*** A script immediately following a data section is deleted when the data is changed. (Thanks to GeoffS for reporting.)
* v1.0.0 (2005-12-12)
** initial version

!Code
***/
//{{{
//============================================================================
//============================================================================
//                           DataTiddlerPlugin
//============================================================================
//============================================================================

// Ensure that the DataTiddler Plugin is only installed once.
//
if (!version.extensions.DataTiddlerPlugin) {



version.extensions.DataTiddlerPlugin = {
    major: 1, minor: 0, revision: 6,
    date: new Date(2006, 7, 26), 
    type: 'plugin',
    source: "http://tiddlywiki.abego-software.de/#DataTiddlerPlugin"
};

// For backward compatibility with v1.2.x
//
if (!window.story) window.story=window; 
if (!TiddlyWiki.prototype.getTiddler) {
	TiddlyWiki.prototype.getTiddler = function(title) { 
		var t = this.tiddlers[title]; 
		return (t !== undefined && t instanceof Tiddler) ? t : null; 
	};
}

//============================================================================
// DataTiddler Class
//============================================================================

// ---------------------------------------------------------------------------
// Configurations and constants 
// ---------------------------------------------------------------------------

function DataTiddler() {
}

DataTiddler = {
    // Function to stringify a JavaScript value, producing the text for the data section content.
    // (Must match the implementation of DataTiddler.parse.)
    //
    stringify : null,
    

    // Function to parse the text for the data section content, producing a JavaScript value.
    // (Must match the implementation of DataTiddler.stringify.)
    //
    parse : null
};

// Ensure access for IE
window.DataTiddler = DataTiddler;

// ---------------------------------------------------------------------------
// Data Accessor and Mutator
// ---------------------------------------------------------------------------


// Returns the value of the given data field of the tiddler.
// When no such field is defined or its value is undefined
// the defaultValue is returned.
// 
// @param tiddler either a tiddler name or a tiddler
//
DataTiddler.getData = function(tiddler, field, defaultValue) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler;
    }

    return DataTiddler.getTiddlerDataValue(t, field, defaultValue);
};


// Sets the value of the given data field of the tiddler to
// the value. When the value is equal to the defaultValue
// no value is set (and the field is removed)
//
// Changing data of a tiddler will not trigger notifications.
// 
// @param tiddler either a tiddler name or a tiddler
//
DataTiddler.setData = function(tiddler, field, value, defaultValue) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler+ "("+t+")";
    }

    DataTiddler.setTiddlerDataValue(t, field, value, defaultValue);
};


// Returns the data object of the tiddler, with a property for every field.
//
// The properties of the returned data object may only be read and
// not be modified. To modify the data use DataTiddler.setData(...) 
// or the corresponding Tiddler method.
//
// If no data section is defined a new (empty) object is returned.
//
// @param tiddler either a tiddler name or a Tiddler
//
DataTiddler.getDataObject = function(tiddler) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler;
    }

    return DataTiddler.getTiddlerDataObject(t);
};

// Returns the text of the content of the data section of the tiddler.
//
// When no data section is defined for the tiddler null is returned 
//
// @param tiddler either a tiddler name or a Tiddler
// @return [may be null]
//
DataTiddler.getDataText = function(tiddler) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler;
    }

    return DataTiddler.readDataSectionText(t);
};


// ---------------------------------------------------------------------------
// Internal helper methods (must not be used by code from outside this plugin)
// ---------------------------------------------------------------------------

// Internal.
//
// The original JSONError is not very user friendly, 
// especially it does not define a toString() method
// Therefore we extend it here.
//
DataTiddler.extendJSONError = function(ex) {
	if (ex.name == 'JSONError') {
        ex.toString = function() {
			return ex.name + ": "+ex.message+" ("+ex.text+")";
		};
	}
	return ex;
};

// Internal.
//
// @param t a Tiddler
//
DataTiddler.getTiddlerDataObject = function(t) {
    if (t.dataObject === undefined) {
        var data = DataTiddler.readData(t);
        t.dataObject = (data) ? data : {};
    }
    
    return t.dataObject;
};


// Internal.
//
// @param tiddler a Tiddler
//
DataTiddler.getTiddlerDataValue = function(tiddler, field, defaultValue) {
    var value = DataTiddler.getTiddlerDataObject(tiddler)[field];
    return (value === undefined) ? defaultValue : value;
};


// Internal.
//
// @param tiddler a Tiddler
//
DataTiddler.setTiddlerDataValue = function(tiddler, field, value, defaultValue) {
    var data = DataTiddler.getTiddlerDataObject(tiddler);
    var oldValue = data[field];
	
    if (value == defaultValue) {
        if (oldValue !== undefined) {
            delete data[field];
            DataTiddler.save(tiddler);
        }
        return;
    }
    data[field] = value;
    DataTiddler.save(tiddler);
};

// Internal.
//
// Reads the data section from the tiddler's content and returns its text
// (as a String).
//
// Returns null when no data is defined.
//
// @param tiddler a Tiddler
// @return [may be null]
//
DataTiddler.readDataSectionText = function(tiddler) {
    var matches = DataTiddler.getDataTiddlerMatches(tiddler);
    if (matches === null || !matches[2]) {
        return null;
    }
    return matches[2];
};

// Internal.
//
// Reads the data section from the tiddler's content and returns it
// (as an internalized object).
//
// Returns null when no data is defined.
//
// @param tiddler a Tiddler
// @return [may be null]
//
DataTiddler.readData = function(tiddler) {
    var text = DataTiddler.readDataSectionText(tiddler);
	try {
	    return text ? DataTiddler.parse(text) : null;
	} catch(ex) {
		throw DataTiddler.extendJSONError(ex);
	}
};

// Internal.
// 
// Returns the serialized text of the data of the given tiddler, as it
// should be stored in the data section.
//
// @param tiddler a Tiddler
//
DataTiddler.getDataTextOfTiddler = function(tiddler) {
    var data = DataTiddler.getTiddlerDataObject(tiddler);
    return DataTiddler.stringify(data);
};


// Internal.
// 
DataTiddler.indexOfNonEscapedText = function(s, subString, startIndex) {
	var index = s.indexOf(subString, startIndex);
	while ((index > 0) && (s[index-1] == '~')) { 
		index = s.indexOf(subString, index+1);
	}
	return index;
};

// Internal.
//
DataTiddler.getDataSectionInfo = function(text) {
	// Special care must be taken to handle "<data>" and "</data>" texts inside
	// a data section. 
	// Also take care not to use an escaped <data> (i.e. "~<data>") as the start 
	// of a data section. (Same for </data>)

    // NOTE: we are explicitly searching for a data section that contains a JSON
    // string, i.e. framed with braces. This way we are little bit more robust in
    // case the tiddler contains unescaped texts "<data>" or "</data>". This must
    // be changed when using a different stringifier.

	var startTagText = "<data>{";
	var endTagText = "}</data>";

	var startPos = 0;

	// Find the first not escaped "<data>".
	var startDataTagIndex = DataTiddler.indexOfNonEscapedText(text, startTagText, 0);
	if (startDataTagIndex < 0) {
		return null;
	}

	// Find the *last* not escaped "</data>".
	var endDataTagIndex = text.indexOf(endTagText, startDataTagIndex);
	if (endDataTagIndex < 0) {
		return null;
	}
	var nextEndDataTagIndex;
	while ((nextEndDataTagIndex = text.indexOf(endTagText, endDataTagIndex+1)) >= 0) {
		endDataTagIndex = nextEndDataTagIndex;
	}

	return {
		prefixEnd: startDataTagIndex, 
		dataStart: startDataTagIndex+(startTagText.length)-1, 
		dataEnd: endDataTagIndex, 
		suffixStart: endDataTagIndex+(endTagText.length)
	};
};

// Internal.
// 
// Returns the "matches" of a content of a DataTiddler on the
// "data" regular expression. Return null when no data is defined
// in the tiddler content.
//
// Group 1: text before data section (prefix)
// Group 2: content of data section
// Group 3: text behind data section (suffix)
//
// @param tiddler a Tiddler
// @return [may be null] null when the tiddler contains no data section, otherwise see above.
//
DataTiddler.getDataTiddlerMatches = function(tiddler) {
	var text = tiddler.text;
	var info = DataTiddler.getDataSectionInfo(text);
	if (!info) {
		return null;
	}

	var prefix = text.substr(0,info.prefixEnd);
	var data = text.substr(info.dataStart, info.dataEnd-info.dataStart+1);
	var suffix = text.substr(info.suffixStart);
	
	return [text, prefix, data, suffix];
};


// Internal.
//
// Saves the data in a <data> block of the given tiddler (as a minor change). 
//
// The "chkAutoSave" and "chkForceMinorUpdate" options are respected. 
// I.e. the TiddlyWiki *file* is only saved when AutoSave is on.
//
// Notifications are not send. 
//
// This method should only be called when the data really has changed. 
//
// @param tiddler
//             the tiddler to be saved.
//
DataTiddler.save = function(tiddler) {

    var matches = DataTiddler.getDataTiddlerMatches(tiddler);

    var prefix;
    var suffix;
    if (matches === null) {
        prefix = tiddler.text;
        suffix = "";
    } else {
        prefix = matches[1];
        suffix = matches[3];
    }

    var dataText = DataTiddler.getDataTextOfTiddler(tiddler);
    var newText = 
            (dataText !== null) 
                ? prefix + "<data>" + dataText + "</data>" + suffix
                : prefix + suffix;
    if (newText != tiddler.text) {
        // make the change in the tiddlers text
        
        // ... see DataTiddler.MyTiddlerChangedFunction
        tiddler.isDataTiddlerChange = true;
        
        // ... do the action change
        tiddler.set(
                tiddler.title,
                newText,
                config.options.txtUserName, 
                config.options.chkForceMinorUpdate? undefined : new Date(),
                tiddler.tags);

        // ... see DataTiddler.MyTiddlerChangedFunction
        delete tiddler.isDataTiddlerChange;

        // Mark the store as dirty.
        store.dirty = true;
 
        // AutoSave if option is selected
        if(config.options.chkAutoSave) {
           saveChanges();
        }
    }
};

// Internal.
//
DataTiddler.MyTiddlerChangedFunction = function() {
    // Remove the data object from the tiddler when the tiddler is changed
    // by code other than DataTiddler code. 
    //
    // This is necessary since the data object is just a "cached version" 
    // of the data defined in the data section of the tiddler and the 
    // "external" change may have changed the content of the data section.
    // Thus we are not sure if the data object reflects the data section 
    // contents. 
    // 
    // By deleting the data object we ensure that the data object is 
    // reconstructed the next time it is needed, with the data defined by
    // the data section in the tiddler's text.
    
    // To indicate that a change is a "DataTiddler change" a temporary
    // property "isDataTiddlerChange" is added to the tiddler.
    if (this.dataObject && !this.isDataTiddlerChange) {
        delete this.dataObject;
    }
    
    // call the original code.
	DataTiddler.originalTiddlerChangedFunction.apply(this, arguments);
};


//============================================================================
// Formatters
//============================================================================

// This formatter ensures that "~<data>" is rendered as "<data>". This is used to 
// escape the "<data>" of a data section, just in case someone really wants to use
// "<data>" as a text in a tiddler and not start a data section.
//
// Same for </data>.
//
config.formatters.push( {
    name: "data-escape",
    match: "~<\\/?data>",

    handler: function(w) {
            w.outputText(w.output,w.matchStart + 1,w.nextMatch);
    }
} );


// This formatter ensures that <data>...</data> sections are not rendered.
//
config.formatters.push( {
    name: "data",
    match: "<data>",

    handler: function(w) {
		var info = DataTiddler.getDataSectionInfo(w.source);
		if (info && info.prefixEnd == w.matchStart) {
            w.nextMatch = info.suffixStart;
		} else {
			w.outputText(w.output,w.matchStart,w.nextMatch);
		}
    }
} );


//============================================================================
// Tiddler Class Extension
//============================================================================

// "Hijack" the changed method ---------------------------------------------------

DataTiddler.originalTiddlerChangedFunction = Tiddler.prototype.changed;
Tiddler.prototype.changed = DataTiddler.MyTiddlerChangedFunction;

// Define accessor methods -------------------------------------------------------

// Returns the value of the given data field of the tiddler. When no such field 
// is defined or its value is undefined the defaultValue is returned.
//
// When field is undefined (or null) the data object is returned. (See 
// DataTiddler.getDataObject.)
//
// @param field [may be null, undefined]
// @param defaultValue [may be null, undefined]
// @return [may be null, undefined]
//
Tiddler.prototype.data = function(field, defaultValue) {
    return (field) 
         ? DataTiddler.getTiddlerDataValue(this, field, defaultValue)
         : DataTiddler.getTiddlerDataObject(this);
};

// Sets the value of the given data field of the tiddler to the value. When the 
// value is equal to the defaultValue no value is set (and the field is removed).
//
// @param value [may be null, undefined]
// @param defaultValue [may be null, undefined]
//
Tiddler.prototype.setData = function(field, value, defaultValue) {
    DataTiddler.setTiddlerDataValue(this, field, value, defaultValue);
};


//============================================================================
// showData Macro
//============================================================================

config.macros.showData = {
     // Standard Properties
     label: "showData",
     prompt: "Display the values stored in the data section of the tiddler"
};

config.macros.showData.handler = function(place,macroName,params) {
    // --- Parsing ------------------------------------------

    var i = 0; // index running over the params
    // Parse the optional "JSON"
    var showInJSONFormat = false;
    if ((i < params.length) && params[i] == "JSON") {
        i++;
        showInJSONFormat = true;
    }
    
    var tiddlerName = story.findContainingTiddler(place).id.substr(7);
    if (i < params.length) {
        tiddlerName = params[i];
        i++;
    }

    // --- Processing ------------------------------------------
    try {
        if (showInJSONFormat) {
            this.renderDataInJSONFormat(place, tiddlerName);
        } else {
            this.renderDataAsTable(place, tiddlerName);
        }
    } catch (e) {
        this.createErrorElement(place, e);
    }
};

config.macros.showData.renderDataInJSONFormat = function(place,tiddlerName) {
    var text = DataTiddler.getDataText(tiddlerName);
    if (text) {
        createTiddlyElement(place,"pre",null,null,text);
    }
};

config.macros.showData.renderDataAsTable = function(place,tiddlerName) {
    var text = "|!Name|!Value|\n";
    var data = DataTiddler.getDataObject(tiddlerName);
    if (data) {
        for (var i in data) {
            var value = data[i];
            text += "|"+i+"|"+DataTiddler.stringify(value)+"|\n";
        }
    }
    
    wikify(text, place);
};


// Internal.
//
// Creates an element that holds an error message
// 
config.macros.showData.createErrorElement = function(place, exception) {
    var message = (exception.description) ? exception.description : exception.toString();
    return createTiddlyElement(place,"span",null,"showDataError","<<showData ...>>: "+message);
};

// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
    ".showDataError{color: #ffffff;background-color: #880000;}",
    "showData");


} // of "install only once"
// Used Globals (for JSLint) ==============

// ... TiddlyWiki Core
/*global 	createTiddlyElement, saveChanges, store, story, wikify */
// ... DataTiddler
/*global 	DataTiddler */
// ... JSON
/*global 	JSON */
			

/***
!JSON Code, used to serialize the data
***/
/*
Copyright (c) 2005 JSON.org

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The Software shall be used for Good, not Evil.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

/*
    The global object JSON contains two methods.

    JSON.stringify(value) takes a JavaScript value and produces a JSON text.
    The value must not be cyclical.

    JSON.parse(text) takes a JSON text and produces a JavaScript value. It will
    throw a 'JSONError' exception if there is an error.
*/
var JSON = {
    copyright: '(c)2005 JSON.org',
    license: 'http://www.crockford.com/JSON/license.html',
/*
    Stringify a JavaScript value, producing a JSON text.
*/
    stringify: function (v) {
        var a = [];

/*
    Emit a string.
*/
        function e(s) {
            a[a.length] = s;
        }

/*
    Convert a value.
*/
        function g(x) {
            var c, i, l, v;

            switch (typeof x) {
            case 'object':
                if (x) {
                    if (x instanceof Array) {
                        e('[');
                        l = a.length;
                        for (i = 0; i < x.length; i += 1) {
                            v = x[i];
                            if (typeof v != 'undefined' &&
                                    typeof v != 'function') {
                                if (l < a.length) {
                                    e(',');
                                }
                                g(v);
                            }
                        }
                        e(']');
                        return;
                    } else if (typeof x.toString != 'undefined') {
                        e('{');
                        l = a.length;
                        for (i in x) {
                            v = x[i];
                            if (x.hasOwnProperty(i) &&
                                    typeof v != 'undefined' &&
                                    typeof v != 'function') {
                                if (l < a.length) {
                                    e(',');
                                }
                                g(i);
                                e(':');
                                g(v);
                            }
                        }
                        return e('}');
                    }
                }
                e('null');
                return;
            case 'number':
                e(isFinite(x) ? +x : 'null');
                return;
            case 'string':
                l = x.length;
                e('"');
                for (i = 0; i < l; i += 1) {
                    c = x.charAt(i);
                    if (c >= ' ') {
                        if (c == '\\' || c == '"') {
                            e('\\');
                        }
                        e(c);
                    } else {
                        switch (c) {
                            case '\b':
                                e('\\b');
                                break;
                            case '\f':
                                e('\\f');
                                break;
                            case '\n':
                                e('\\n');
                                break;
                            case '\r':
                                e('\\r');
                                break;
                            case '\t':
                                e('\\t');
                                break;
                            default:
                                c = c.charCodeAt();
                                e('\\u00' + Math.floor(c / 16).toString(16) +
                                    (c % 16).toString(16));
                        }
                    }
                }
                e('"');
                return;
            case 'boolean':
                e(String(x));
                return;
            default:
                e('null');
                return;
            }
        }
        g(v);
        return a.join('');
    },
/*
    Parse a JSON text, producing a JavaScript value.
*/
    parse: function (text) {
        var p = /^\s*(([,:{}\[\]])|"(\\.|[^\x00-\x1f"\\])*"|-?\d+(\.\d*)?([eE][+-]?\d+)?|true|false|null)\s*/,
            token,
            operator;

        function error(m, t) {
            throw {
                name: 'JSONError',
                message: m,
                text: t || operator || token
            };
        }

        function next(b) {
            if (b && b != operator) {
                error("Expected '" + b + "'");
            }
            if (text) {
                var t = p.exec(text);
                if (t) {
                    if (t[2]) {
                        token = null;
                        operator = t[2];
                    } else {
                        operator = null;
                        try {
                            token = eval(t[1]);
                        } catch (e) {
                            error("Bad token", t[1]);
                        }
                    }
                    text = text.substring(t[0].length);
                } else {
                    error("Unrecognized token", text);
                }
            } else {
                token = operator = undefined;
            }
        }


        function val() {
            var k, o;
            switch (operator) {
            case '{':
                next('{');
                o = {};
                if (operator != '}') {
                    for (;;) {
                        if (operator || typeof token != 'string') {
                            error("Missing key");
                        }
                        k = token;
                        next();
                        next(':');
                        o[k] = val();
                        if (operator != ',') {
                            break;
                        }
                        next(',');
                    }
                }
                next('}');
                return o;
            case '[':
                next('[');
                o = [];
                if (operator != ']') {
                    for (;;) {
                        o.push(val());
                        if (operator != ',') {
                            break;
                        }
                        next(',');
                    }
                }
                next(']');
                return o;
            default:
                if (operator !== null) {
                    error("Missing value");
                }
                k = token;
                next();
                return k;
            }
        }
        next();
        return val();
    }
};

/***
!Setup the data serialization
***/

DataTiddler.format = "JSON";
DataTiddler.stringify = JSON.stringify;
DataTiddler.parse = JSON.parse;

//}}}


<<player http://www.youtube.com/embed/fGCR8AOVyZw 360 240>>

<<uChord "D A Bm G D A F#m G">>
<<uChord "G D">>
<<uChord "G A G A G">>

<<uChord n:'F E7 C#7 C7 F D7 A7+5 D7'>>
<<uChord n:'Bb Bbm F C#7 C7'>>
<<uChord n:"D U D U" in:"s">>
<<uChord n:'A C#m Bm E7' in:'c'>>
<<jtab 'Eb Ebm Eb7 E Em E7'>>
<<jtab 'Ebm7 Ebdim Ebmaj7 Eb6 Em7 Edim Emaj7 E6'>>
<<jtab 'Ebsus2 Ebsus4 Ebaug Esus2 Esus4 Eaug'>>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<div macro='tiddler QuickEditToolbar'></div>
<!--}}}-->
<<uChord ntype:"cl" nota:"[F] [C] [F] [G7] [C] [F] [G7] [C] [G7] [C]">>
//{{{
Intro: [F] [C] [F] [G7] [C] [F] [G7] [C] [G7] [C]

[C] Well it's all right riding a[G7]round in the [F] breeze Well it's [C] all right if you live the [G7] life you [C] please [C] Well it's all right doing the [G7] best you [F] can
Well it's [C] all right as long as you [G7] lend a [C] hand

[F] You can sit around and wait for the [C] phone to ring (at the end of the line) [F] Waiting for someone to tell you [C] everything (at the end of the line)
[F] Sit around and wonder what to[C]morrow will bring (at the end of the line)
Maybe a [G7] diamond ring

Well it's [C] all right even if they [G7] say you're [F] wrong
Well it's [C] all right sometimes you [G7] gotta be [C] strong
[C] Well it's all right as long as you got [G7] somewhere to [F] lay
Well it's [C] all right everyday is [G7] judgment [C] day

[F] Maybe somewhere down the [C] road aways (at the end of the line)
[F] You'll think of me wonder where I [C] am these days (at the end of the line)
[F] Maybe somewhere down the road when [C] somebody plays (at the end of the line) [G7] Purple haze

Well it's [C] all right even when [G7] push comes to [F] shove
Well it's [C] all right if you got [G7] someone to [C] love
[C] Well it's all right everything'll [G7] work out [F] fine
Well it's [C] all right we're going to the [G7] end of the [C] line

[F] Don't have to be ashamed of the [C] car I drive (at the end of the line) [F] I'm glad to be here happy to [C] be alive (at the end of the line)
[F] It don't matter if you're [C] by my side (at the end of the line)
I'm [G7] satisfied

Well it's [C] all right even if you're [G7] old and [F] gray Well it's [C] all right you still got [G7] something to [C] say [C] Well it's all right remember to [G7] live and let [F] live Well it's [C] all right the best you can [G7] do is for[C]give

[C] Well it's all right riding a[G7]round in the [F] breeze Well it's [C] all right if you live the [G7] life you [C] please [C] Well it's all right even if the [G7] sun don't [F] shine
Well it's [C] all right we're going to the [G7] end of the [C] line

//}}}

<<jtab 'G D A E'>>
<<<
{{{
 	G	D	G	A	D	G	A	D	E	D	

D	                            A	                   G
Well it's alright, riding a	round in the 	breeze
 	D	A	D
 	Well it's alright, if you live the 	life you 	please
 	D	A	G
 	Well it's alright, doing the 	best you 	can
 	D	A	D
 	Well it's alright, as long as you 	lend a 	hand
 	G	D
 	You can sit around and wait for the 	phone to ring, At the end of the line
 	G	D
 	Waiting for someone to tell you 	everything, At the end of the line
 	G	D
 	Sit around and wonder what to	morrow'd bring, At the end of the line
 	A
Maybe a 	diamond ring
Well it's alright, even if they say you're wrong
Well it's alright, sometimes you gotta be strong
Well it's alright, as long as you got someone to lay
Well it's alright, every day is just one day
Maybe somewhere down the road a way, At the end of the line
You'll think of me and wonder where I am these days, At the end of the line
Maybe somewhere down the road when somebody plays, At the end of the line
Purple haze
Well it's alright, even if push comes to shove
Well it's alright, if you got someone to love
Well it's alright, everything'll work out fine
Well it's alright, we're going to the end of the line
Don't have to be ashamed of the car I drive, At the end of the line
I'm just glad to be here, happy to be alive, At the end of the line
And it don't matter if you're by my side, At the end of the line
I'm satisified
Well it's alright, even if you're old and gray
Well it's alright, you still got something to say
Well it's alright, remember to live and let live
Well it's alright, best you can do is forgive
Well it's alright, riding around in the breeze
Well it's alright, if you live the life you please
Well it's alright, even if the sun don't shine
Well it's alright, we're going to the end of the line
Opening to End of the Line
This opening uses different versions of common chords.
G(7th) - G on the 7th fret. This is a D chord slid up to the 7th fret.
D(2nd) - D on the 2nd fret. The usual D chord.
A(9th) - A on the 9th fret. This is a D chord slid up to the 9th fret.
D(10th) - D on the 10th fret. A barr chord. This is an F chord slid up to the
10th fret.
E(12th) - E on the 12th fret. This is an F chord slid up to the 12th fret.
D(14th) - D on the 14th fret. This is a D chord slid up to the 14th fret.
Play it like this:
G(7th) D(2nd)
G(7th) A(9th) D(10th)
G(7th) A(9th) D(10th) E(12th) D(14th)

G D  G  A  D  G  A  D  E  D
D                          A            G
Well xxxx xxxxxxx, xxxxxx around xx the xxxxxx
D                                  A        D
Well xxxx xxxxxxx, xx xxx xxxx the xxxx you xxxxxx
D                            A        G
Well xxxx xxxxxxx, xxxxx the xxxx you xxx
D                                 A      D
Well xxxx xxxxxxx, xx xxxx xx you xxxx a xxxx
G                                   D
You xxx xxx xxxxxx xxx xxxx xxx the phone xx xxxx, xx xxx xxx xx xxx xxxx
G                               D
Waiting xxx xxxxxxx xx xxxx you xxxxxxxxxx, xx xxx xxx xx xxx xxxx
G                            D
Sit xxxxxx xxx xxxxxx xxxx tomorrow'd xxxxx, xx xxx xxx xx xxx xxxx
        A
xxxxx x diamond xxxx
}}}
>>>

<<player http://www.youtube.com/watch?v=cwqhdRs4jyA>>
<<player http://www.youtube.com/embed/AV1jkoqqfd4#t=0m36s 360 240>>
<<uChord "F C G C">>
<<uStrum "D U D &">>
//{{{
Slow down, you  move too fast. 
You got to make the morning last. 
Just kickin down the cobble stones, 
lookin' for fun and Feelin' Groovy.

Hello lamppost, what cha knowin'.
I've come to watch your flowers growing.
Ain't cha got no rhymes for me?
Dootin' doodoo, Feeling Groovy.

Got no deeds to do, no promises to keep.
I'm dappled and drowsy and ready to sleep.
Let the morning time drop all its petals on me.
Life, I love you. All is groovy.
//}}}
[img[hand|http://davidrschaller.servehttp.com/images/fingerreference.png]]
Pattern used for "Yesterday"
<<player id=5 'http://www.youtube.com/embed/-cUAJise1yA#t=4m52s' 340 280>>
<html><div align="center"><iframe src="http://www.ukuleleunderground.com/forum/showthread.php?32058-the-very-first-song-you-played-on-ukulele" frameborder="0" width="100%" height="600"></iframe></div></html>
/***
|Name|FoldHeadingsPlugin|
|Source|http://www.TiddlyTools.com/#FoldHeadingsPlugin|
|Version|1.1.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|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.
<<<
!!!!!Revisions
<<<
2009.11.30 [1.1.2] corrected CSS 'text-weight' to 'font-weight'
2009.01.06 [1.1.1] removed hijack of scrollToSection() (see [[SectionLinksPlugin]] for equivalent code)
2008.11.17 [1.1.0] added hijack of 'scrollToSection()' function (see [[CoreTweaks]] and http://trac.tiddlywiki.org/ticket/784)
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
<<<
!!!!!Code
***/
//{{{
version.extensions.FoldHeadingsPlugin= {major: 1, minor: 1, revision: 2, date: new Date(2009,11,30)};

config.macros.foldHeadings = {
	guideText: "opened|closed className",
	showtip: "click to show '%0'",
	hidetip: "click to hide '%0'",
	showlabel: "more...",
	hidelabel: "[x]",
	html: "<span style='float:right;font-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;
			}
		}		
	}
}

if (story.scrollToSection) {
Story.prototype.foldheadings_scrollToSection=Story.prototype.scrollToSection;
Story.prototype.scrollToSection=function(title,section) {
	var e=this.foldheadings_scrollToSection.apply(this,arguments);
	// if scrolling to a folded section heading, click to expand it
	if (e && hasClass(e,'foldable') && e.nextSibling.style.display=='none') e.onclick();
}
}
//}}}
// //<<foldHeadings closed>>
[[Folk Songs|http://ukulelehunt.com/tag/folk/?which=Chords]]
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description

Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.

''Syntax:'' 
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]]  is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].

!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features: 
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) 
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features: 
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs: 
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features: 
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version

!Code
***/
//{{{

	
//============================================================================
//============================================================================
//		   ForEachTiddlerPlugin
//============================================================================
//============================================================================

// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {

if (!window.abego) window.abego = {};

version.extensions.ForEachTiddlerPlugin = {
	major: 1, minor: 0, revision: 8, 
	date: new Date(2007,3,12), 
	source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
	licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
	copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};

// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
	TiddlyWiki.prototype.forEachTiddler = function(callback) {
		for(var t in this.tiddlers) {
			callback.call(this,t,this.tiddlers[t]);
		}
	};
}

//============================================================================
// forEachTiddler Macro
//============================================================================

version.extensions.forEachTiddler = {
	major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};

// ---------------------------------------------------------------------------
// Configurations and constants 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler = {
	 // Standard Properties
	 label: "forEachTiddler",
	 prompt: "Perform actions on a (sorted) selection of tiddlers",

	 // actions
	 actions: {
		 addToList: {},
		 write: {}
	 }
};

// ---------------------------------------------------------------------------
//  The forEachTiddler Macro Handler 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler.getContainingTiddler = function(e) {
	while(e && !hasClass(e,"tiddler"))
		e = e.parentNode;
	var title = e ? e.getAttribute("tiddler") : null; 
	return title ? store.getTiddler(title) : null;
};

config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);

	if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params
	// Parse the "in" clause
	var tiddlyWikiPath = undefined;
	if ((i < params.length) && params[i] == "in") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "TiddlyWiki path expected behind 'in'.");
			return;
		}
		tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the where clause
	var whereClause ="true";
	if ((i < params.length) && params[i] == "where") {
		i++;
		whereClause = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the sort stuff
	var sortClause = null;
	var sortAscending = true; 
	if ((i < params.length) && params[i] == "sortBy") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "sortClause missing behind 'sortBy'.");
			return;
		}
		sortClause = this.paramEncode(params[i]);
		i++;

		if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
			 sortAscending = params[i] == "ascending";
			 i++;
		}
	}

	// Parse the script
	var scriptText = null;
	if ((i < params.length) && params[i] == "script") {
		i++;
		scriptText = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the action. 
	// When we are already at the end use the default action
	var actionName = "addToList";
	if (i < params.length) {
	   if (!config.macros.forEachTiddler.actions[params[i]]) {
			this.handleError(place, "Unknown action '"+params[i]+"'.");
			return;
		} else {
			actionName = params[i]; 
			i++;
		}
	} 
	
	// Get the action parameter
	// (the parsing is done inside the individual action implementation.)
	var actionParameter = params.slice(i);


	// --- Processing ------------------------------------------
	try {
		this.performMacro({
				place: place, 
				inTiddler: tiddler,
				whereClause: whereClause, 
				sortClause: sortClause, 
				sortAscending: sortAscending, 
				actionName: actionName, 
				actionParameter: actionParameter, 
				scriptText: scriptText, 
				tiddlyWikiPath: tiddlyWikiPath});

	} catch (e) {
		this.handleError(place, e);
	}
};

// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {

	var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);

	var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
	context["tiddlyWiki"] = tiddlyWiki;
	
	// Get the tiddlers, as defined by the whereClause
	var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
	context["tiddlers"] = tiddlers;

	// Sort the tiddlers, when sorting is required.
	if (parameter.sortClause) {
		this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
	}

	return {tiddlers: tiddlers, context: context};
};

// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
	return this.getTiddlersAndContext(parameter).tiddlers;
};

// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
//				  The following properties are supported:
//
//						place
//						whereClause
//						sortClause
//						sortAscending
//						actionName
//						actionParameter
//						scriptText
//						tiddlyWikiPath
//
//					All properties are optional. 
//					For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
	var tiddlersAndContext = this.getTiddlersAndContext(parameter);

	// Perform the action
	var actionName = parameter.actionName ? parameter.actionName : "addToList";
	var action = config.macros.forEachTiddler.actions[actionName];
	if (!action) {
		this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
		return;
	}

	var actionHandler = action.handler;
	actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};

// ---------------------------------------------------------------------------
//  The actions 
// ---------------------------------------------------------------------------

// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;

	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
		return;
	}

	// Perform the action.
	var list = document.createElement("ul");
	place.appendChild(list);
	for (var i = 0; i < tiddlers.length; i++) {
		var tiddler = tiddlers[i];
		var listItem = document.createElement("li");
		list.appendChild(listItem);
		createTiddlyLink(listItem, tiddler.title, true);
	}
};

abego.parseNamedParameter = function(name, parameter, i) {
	var beginExpression = null;
	if ((i < parameter.length) && parameter[i] == name) {
		i++;
		if (i >= parameter.length) {
			throw "Missing text behind '%0'".format([name]);
		}
		
		return config.macros.forEachTiddler.paramEncode(parameter[i]);
	}
	return null;
}

// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;
	if (p >= parameter.length) {
		this.handleError(place, "Missing expression behind 'write'.");
		return;
	}

	var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
	p++;

	// Parse the "begin" option
	var beginExpression = abego.parseNamedParameter("begin", parameter, p);
	if (beginExpression !== null) 
		p += 2;
	var endExpression = abego.parseNamedParameter("end", parameter, p);
	if (endExpression !== null) 
		p += 2;
	var noneExpression = abego.parseNamedParameter("none", parameter, p);
	if (noneExpression !== null) 
		p += 2;

	// Parse the "toFile" option
	var filename = null;
	var lineSeparator = undefined;
	if ((p < parameter.length) && parameter[p] == "toFile") {
		p++;
		if (p >= parameter.length) {
			this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
			return;
		}
		
		filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
		p++;
		if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
			p++;
			if (p >= parameter.length) {
				this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
				return;
			}
			lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
			p++;
		}
	}
	
	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
		return;
	}

	// Perform the action.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
	var count = tiddlers.length;
	var text = "";
	if (count > 0 && beginExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
	
	for (var i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		text += func(tiddler, context, count, i);
	}
	
	if (count > 0 && endExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);

	if (count == 0 && noneExpression) 
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
		

	if (filename) {
		if (lineSeparator !== undefined) {
			lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
			text = text.replace(/\n/mg,lineSeparator);
		}
		saveFile(filename, convertUnicodeToUTF8(text));
	} else {
		var wrapper = createTiddlyElement(place, "span");
		wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
	}
};


// ---------------------------------------------------------------------------
//  Helpers
// ---------------------------------------------------------------------------

// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
	return {
		place : placeParam, 
		whereClause : whereClauseParam, 
		sortClause : sortClauseParam, 
		sortAscending : sortAscendingParam, 
		script : scriptText,
		actionName : actionNameParam, 
		actionParameter : actionParameterParam,
		tiddlyWikiPath : tiddlyWikiPathParam,
		inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
		viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
	};
};

// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of 
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
	if (!idPrefix) {
		idPrefix = "store";
	}
	var lenPrefix = idPrefix.length;
	
	// Read the content of the given file
	var content = loadFile(this.getLocalPath(path));
	if(content === null) {
		throw "TiddlyWiki '"+path+"' not found.";
	}
	
	var tiddlyWiki = new TiddlyWiki();

	// Starting with TW 2.2 there is a helper function to import the tiddlers
	if (tiddlyWiki.importTiddlyWiki) {
		if (!tiddlyWiki.importTiddlyWiki(content))
			throw "File '"+path+"' is not a TiddlyWiki.";
		tiddlyWiki.dirty = false;
		return tiddlyWiki;
	}
	
	// The legacy code, for TW < 2.2
	
	// Locate the storeArea div's
	var posOpeningDiv = content.indexOf(startSaveArea);
	var posClosingDiv = content.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
		throw "File '"+path+"' is not a TiddlyWiki.";
	}
	var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
	
	// Create a "div" element that contains the storage text
	var myStorageDiv = document.createElement("div");
	myStorageDiv.innerHTML = storageText;
	myStorageDiv.normalize();
	
	// Create all tiddlers in a new TiddlyWiki
	// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
	var store = myStorageDiv.childNodes;
	for(var t = 0; t < store.length; t++) {
		var e = store[t];
		var title = null;
		if(e.getAttribute)
			title = e.getAttribute("tiddler");
		if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
			title = e.id.substr(lenPrefix);
		if(title && title !== "") {
			var tiddler = tiddlyWiki.createTiddler(title);
			tiddler.loadFromDiv(e,title);
		}
	}
	tiddlyWiki.dirty = false;

	return tiddlyWiki;
};


	
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
// 
//	 (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
	var script = context["script"];
	var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
	var fullText = (script ? script+";" : "")+functionText+";theFunction;";
	return eval(fullText);
};

// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
	var result = [];
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
	tiddlyWiki.forEachTiddler(function(title,tiddler) {
		if (func(tiddler, context, undefined, undefined)) {
			result.push(tiddler);
		}
	});
	return result;
};

// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
	var message = "Extra parameter behind '"+actionName+"':";
	for (var i = firstUnusedIndex; i < parameter.length; i++) {
		message += " "+parameter[i];
	}
	this.handleError(place, message);
};

// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? -1 
			   : +1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? +1 
			   : -1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
	// To avoid evaluating the sortClause whenever two items are compared 
	// we pre-calculate the sortValue for every item in the array and store it in a 
	// temporary property ("forEachTiddlerSortValue") of the tiddlers.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
	var count = tiddlers.length;
	var i;
	for (i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
	}

	// Do the sorting
	tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);

	// Delete the temporary property that holds the sortValue.	
	for (i = 0; i < tiddlers.length; i++) {
		delete tiddlers[i].forEachTiddlerSortValue;
	}
};


// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
	displayMessage(message);
};

// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
	var message ="<<"+macroName;
	for (var i = 0; i < params.length; i++) {
		message += " "+params[i];
	}
	message += ">>";
	displayMessage(message);
};


// Internal.
//
// Creates an element that holds an error message
// 
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
	var message = (exception.description) ? exception.description : exception.toString();
	return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};

// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
	if (place) {
		this.createErrorElement(place, exception);
	} else {
		throw exception;
	}
};

// Internal.
//
// Encodes the given string.
//
// Replaces 
//	 "$))" to ">>"
//	 "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
	var reGTGT = new RegExp("\\$\\)\\)","mg");
	var reGT = new RegExp("\\$\\)","mg");
	return s.replace(reGTGT, ">>").replace(reGT, ">");
};

// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
// 
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
	// Remove any location part of the URL
	var hashPos = originalPath.indexOf("#");
	if(hashPos != -1)
		originalPath = originalPath.substr(0,hashPos);
	// Convert to a native file format assuming
	// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
	// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
	// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
	// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
	var localPath;
	if(originalPath.charAt(9) == ":") // pc local file
		localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
		localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(7));
	else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(5));
	else // pc network file
		localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");	
	return localPath;
};

// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
	".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
	"forEachTiddler");

//============================================================================
// End of forEachTiddler Macro
//============================================================================


//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
	var n =  prefix.length;
	return (this.length >= n) && (this.slice(0, n) == prefix);
};



//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
	var n = suffix.length;
	return (this.length >= n) && (this.right(n) == suffix);
};


//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
	return this.indexOf(substring) >= 0;
};

//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or 
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == item) {
			return i;
		}
	}
	return -1;
};

//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false. 
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
	return (this.indexOf(item) >= 0);
};

//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements 
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (this.contains(items[i])) {
			return true;
		}
	}
	return false;
};


//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
// 
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null] 
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (!this.contains(items[i])) {
			return false;
		}
	}
	return true;
};


} // of "install only once"

// Used Globals (for JSLint) ==============
// ... DOM
/*global 	document */
// ... TiddlyWiki Core
/*global 	convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, 
			displayMessage, endSaveArea, hasClass, loadFile, saveFile, 
			startSaveArea, store, wikify */
//}}}


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/

C                                     D7
I see you driving round town with the girl I love

             F            C
And I'm like "Forget you!"  Ooo ooo ooo

C                               D7
I guess the change in my pocket wasn't enough

              F             C
And I'm like "Forget you, and Forget her too."

C                    D7      
If I was richer, I'd still be with ya

F                         C
Now ain't that some shit (Ain't that some shit)

C                                           D7
And though there's pain in my chest I still wish you the best

       F
With a "Forget you"


C                                      D7
I said I'm sorry...I can't afford a Ferrari

    F                                    C
But that don't mean I can't get you there

C                                   D7
I guess he's an Xbox...and I'm more Atari

        F                            C
But the way you play your game ain't fair


C                        D7
I pity the foooooool who falls in love with you

   F                         C
Oh shit she's a gold digger, just thought you should know nigga

C            D7
Ooooooooo, I got some news for you

F
You can go run and tell your boyfriend


C                                     D7
I see you driving round town with the girl I love

             F            C
And I'm like "Forget you!"  Ooo ooo ooo

C                               D7
I guess the change in my pocket wasn't enough

              F             C
And I'm like "Forget you, and Forget her too."

C                    D7
If I was richer, I'd still be with ya

F                         C
Now ain't that some shit (Ain't that some shit)

C                                           D7
And though there's pain in my chest I still wish you the best

       F
With a "Forget you"


C                   D7      F
Now I know I had to borrow, beg and steal and lie and cheat

C                           D7
Tryin to keep ya, tryin' to please ya

      F                                 C
Cause being in love with your ass ain't cheap


C                        D7
I pity the foooooool who falls in love with you

   F                         C
Oh shit she's a gold digger, just thought you should know nigga

C            D7
Ooooooooo, I got some news for you

F
Ooh, I really hate your ass right now


C                                     D7
I see you driving round town with the girl I love

             F            C
And I'm like "Forget you!"  Ooo ooo ooo

C                               D7
I guess the change in my pocket wasn't enough

              F             C
And I'm like "Forget you, and Forget her too."

C                    D7      
If I was richer, I'd still be with ya

F                         C
Now ain't that some shit (Ain't that some shit)

C                                           D7
And though there's pain in my chest I still wish you the best

       F
With a "Forget you"

Bridge chords:  Em  Am  Dm  G

/***
<<checkForDataTiddlerPlugin>>
|''Name:''|FormTiddlerPlugin|
|''Version:''|1.0.6 (2007-06-24)|
|''Source:''|http://tiddlywiki.abego-software.de/#FormTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''Macros:''|formTiddler, checkForDataTiddlerPlugin, newTiddlerWithForm|
|''Requires:''|DataTiddlerPlugin|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Description
Use form-based tiddlers to enter your tiddler data using text fields, listboxes, checkboxes etc. (All standard HTML Form input elements supported).

''Syntax:'' 
|>|{{{<<}}}''formTiddler'' //tiddlerName//{{{>>}}}|
|//tiddlerName//|The name of the FormTemplate tiddler to be used to edit the data of the tiddler containing the macro.|

|>|{{{<<}}}''newTiddlerWithForm'' //formTemplateName// //buttonLabel// [//titleExpression// [''askUser'']] {{{>>}}}|
|//formTemplateName//|The name of the tiddler that defines the form the new tiddler should use.|
|//buttonLabel//|The label of the button|
|//titleExpression//|A (quoted) JavaScript String expression that defines the title (/name) of the new tiddler.|
|''askUser''|Typically the user is not asked for the title when a title is specified (and not yet used). When ''askUser'' is given the user will be asked in any case. This may be used when the calculated title is just a suggestion that must be confirmed by the user|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

For details and how to use the macros see the [[introduction|FormTiddler Introduction]] and the [[examples|FormTiddler Examples]].

!Revision history
* v1.0.6 (2007-06-24)
** Fixed problem when using SELECT component in Internet Explorer (thanks to MaikBoenig for reporting)
* v1.0.5 (2006-02-24)
** Removed "debugger;" instruction
* v1.0.4 (2006-02-07)
** Bug: On IE no data is written to data section when field values changed (thanks to KenGirard for reporting)
* v1.0.3 (2006-02-05)
** Bug: {{{"No form template specified in <<formTiddler>>"}}} when using formTiddler macro on InternetExplorer (thanks to KenGirard for reporting)
* v1.0.2 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.1 (2005-12-22)
** Features: 
*** Support InternetExplorer
*** Added newTiddlerWithForm Macro
* v1.0.0 (2005-12-14)
** initial version

!Code
***/
//{{{

//============================================================================
//============================================================================
//						FormTiddlerPlugin
//============================================================================
//============================================================================

if (!window.abego) window.abego = {};

abego.getOptionsValue = function(element,i) {
	var v = element.options[i].value;
	if (!v && element.options[i].text)
		v = element.options[i].text;
	return v;
};

version.extensions.FormTiddlerPlugin = {
	major: 1, minor: 0, revision: 5,
	date: new Date(2006, 2, 24), 
	type: 'plugin',
	source: "http://tiddlywiki.abego-software.de/#FormTiddlerPlugin"
};

// For backward compatibility with v1.2.x
//
if (!window.story) window.story=window; 
if (!TiddlyWiki.prototype.getTiddler) TiddlyWiki.prototype.getTiddler = function(title) { return t = this.tiddlers[title]; return (t != undefined && t instanceof Tiddler) ? t : null; } 

//============================================================================
// formTiddler Macro
//============================================================================

// -------------------------------------------------------------------------------
// Configurations and constants 
// -------------------------------------------------------------------------------

config.macros.formTiddler = {
	// Standard Properties
	label: "formTiddler",
	version: {major: 1, minor: 0, revision: 4, date: new Date(2006, 2, 7)},
	prompt: "Edit tiddler data using forms",

	// Define the "setters" that set the values of INPUT elements of a given type
	// (must match the corresponding "getter")
	setter: {  
		button:				function(e, value) {/*contains no data */ },
		checkbox:			function(e, value) {e.checked = value;},
		file:				function(e, value) {try {e.value = value;} catch(e) {/* ignore, possibly security error*/}},
		hidden:				function(e, value) {e.value = value;},
		password:			function(e, value) {e.value = value;},
		radio:				function(e, value) {e.checked = (e.value == value);},
		reset:				function(e, value) {/*contains no data */ },
		"select-one":		function(e, value) {config.macros.formTiddler.setSelectOneValue(e,value);},
		"select-multiple":	function(e, value) {config.macros.formTiddler.setSelectMultipleValue(e,value);},
		submit:				function(e, value) {/*contains no data */},
		text:				function(e, value) {e.value = value;},
		textarea:			function(e, value) {e.value = value;}
	},

	// Define the "getters" that return the value of INPUT elements of a given type
	// Return undefined to not store any data.
	getter: {  
		button:				function(e, value) {return undefined;},
		checkbox:			function(e, value) {return e.checked;},
		file:				function(e, value) {return e.value;},
		hidden:				function(e, value) {return e.value;},
		password:			function(e, value) {return e.value;},
		radio:				function(e, value) {return e.checked ? e.value : undefined;},
		reset:				function(e, value) {return undefined;},
		"select-one":		function(e, value) {return config.macros.formTiddler.getSelectOneValue(e);},
		"select-multiple":	function(e, value) {return config.macros.formTiddler.getSelectMultipleValue(e);},
		submit:				function(e, value) {return undefined;},
		text:				function(e, value) {return e.value;},
		textarea:			function(e, value) {return e.value;}
	}
};


// -------------------------------------------------------------------------------
// The formTiddler Macro Handler 
// -------------------------------------------------------------------------------

config.macros.formTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	if (!config.macros.formTiddler.checkForExtensions(place, macroName)) {
		return;
	}
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params

	// get the name of the form template tiddler
	var formTemplateName = undefined;
	if (i < params.length) {
		formTemplateName = params[i];
		i++;
	}

	if (!formTemplateName) {
		config.macros.formTiddler.createErrorElement(place, "No form template specified in <<" + macroName + ">>.");
		return;
	}


	// --- Processing ------------------------------------------

	// Get the form template text. 
	// (This contains the INPUT elements for the form.)
	var formTemplateTiddler = store.getTiddler(formTemplateName);
	if (!formTemplateTiddler) {
		config.macros.formTiddler.createErrorElement(place, "Form template '" + formTemplateName + "' not found.");
		return;
	}
	var templateText = formTemplateTiddler.text;
	if(!templateText) {
		// Shortcut: when template text is empty we do nothing.
		return;
	}

	// Get the name of the tiddler containing this "formTiddler" macro
	// (i.e. the tiddler, that will be edited and that contains the data)
	var tiddlerName = config.macros.formTiddler.getContainingTiddlerName(place);

	// Append a "form" element. 
	var formName = "form"+formTemplateName+"__"+tiddlerName;
	var e = document.createElement("form");
	e.setAttribute("name", formName);
	place.appendChild(e);

	// "Embed" the elements defined by the templateText (i.e. the INPUT elements) 
	// into the "form" element we just created
	wikify(templateText, e);

	// Initialize the INPUT elements.
	config.macros.formTiddler.initValuesAndHandlersInFormElements(formName, DataTiddler.getDataObject(tiddlerName));
}


// -------------------------------------------------------------------------------
// Form Data Access 
// -------------------------------------------------------------------------------

// Internal.
//
// Initialize the INPUT elements of the form with the values of their "matching"
// data fields in the tiddler. Also setup the onChange handler to ensure that
// changes in the INPUT elements are stored in the tiddler's data.
//
config.macros.formTiddler.initValuesAndHandlersInFormElements = function(formName, data) {
	// config.macros.formTiddler.trace("initValuesAndHandlersInFormElements(formName="+formName+", data="+data+")");

	// find the form
	var form = config.macros.formTiddler.findForm(formName);
	if (!form) {
		return;
	}

	try {
		var elems = form.elements;
		for (var i = 0; i < elems.length; i++) {
			var c = elems[i];
		
			var setter = config.macros.formTiddler.setter[c.type];
			if (setter) {
				var value = data[c.name];
				if (value != null) {
					setter(c, value);
				}
				c.onchange = onFormTiddlerChange;
			} else {
				config.macros.formTiddler.displayFormTiddlerError("No setter defined for INPUT element of type '"+c.type+"'. (Element '"+c.name+"' in form '"+formName+"')");
			}
		}
	} catch(e) {
		config.macros.formTiddler.displayFormTiddlerError("Error when updating elements with new formData. "+e);
	}
}


// Internal.
//
// @return [may be null]
//
config.macros.formTiddler.findForm = function(formName) {
	// We must manually iterate through the document's forms, since
	// IE does not support the "document[formName]" approach

	var forms = window.document.forms;
	for (var i = 0; i < forms.length; i++) {
		var form = forms[i];
		if (form.name == formName) {
			return form;
		}
	}

	return null;
}


// Internal.
//
config.macros.formTiddler.setSelectOneValue = function(element,value) {
	var n = element.options.length;
	for (var i = 0; i < n; i++) {
		element.options[i].selected = abego.getOptionsValue(element,i) == value;
	}
}

// Internal.
//
config.macros.formTiddler.setSelectMultipleValue = function(element,value) {
	var values = {};
	for (var i = 0; i < value.length; i++) {
		values[value[i]] = true;
	}
	
	var n = element.length;
	for (var i = 0; i < n; i++) {
		element.options[i].selected = !(!values[abego.getOptionsValue(element,i)]);
	}
}

// Internal.
//
config.macros.formTiddler.getSelectOneValue = function(element) {
	var i = element.selectedIndex;
	return (i >= 0) ? abego.getOptionsValue(element,i) : null;
}

// Internal.
//
config.macros.formTiddler.getSelectMultipleValue = function(element) {
	var values = [];
	var n = element.length;
	for (var i = 0; i < n; i++) {
		if (element.options[i].selected) {
			values.push(abego.getOptionsValue(element,i));
		}
	}
	return values;
}



// -------------------------------------------------------------------------------
// Helpers 
// -------------------------------------------------------------------------------

// Internal.
//
config.macros.formTiddler.checkForExtensions = function(place,macroName) {
	if (!version.extensions.DataTiddlerPlugin) {
		config.macros.formTiddler.createErrorElement(place, "<<" + macroName + ">> requires the DataTiddlerPlugin. (You can get it from http://tiddlywiki.abego-software.de/#DataTiddlerPlugin)");
		return false;
	}
	return true;
}

// Internal.
//
// Displays a trace message in the "TiddlyWiki" message pane.
// (used for debugging)
//
config.macros.formTiddler.trace = function(s) {
	displayMessage("Trace: "+s);
}

// Internal.
//
// Display some error message in the "TiddlyWiki" message pane.
//
config.macros.formTiddler.displayFormTiddlerError = function(s) {
	alert("FormTiddlerPlugin Error: "+s);
}

// Internal.
//
// Creates an element that holds an error message
// 
config.macros.formTiddler.createErrorElement = function(place, message) {
	return createTiddlyElement(place,"span",null,"formTiddlerError",message);
}

// Internal.
//
// Returns the name of the tiddler containing the given element.
// 
config.macros.formTiddler.getContainingTiddlerName = function(element) {
	return story.findContainingTiddler(element).id.substr(7);
}

// -------------------------------------------------------------------------------
// Event Handlers 
// -------------------------------------------------------------------------------

// This function must be called by the INPUT elements whenever their
// data changes. Typically this is done through an "onChange" handler.
//
function onFormTiddlerChange (e) {
	// config.macros.formTiddler.trace("onFormTiddlerChange "+e);

	if (!e) var e = window.event;

	var target = resolveTarget(e);
	var tiddlerName = config.macros.formTiddler.getContainingTiddlerName(target);
	var getter = config.macros.formTiddler.getter[target.type];
	if (getter) {
		var value = getter(target);
		DataTiddler.setData(tiddlerName, target.name, value);
	} else {
		config.macros.formTiddler.displayFormTiddlerError("No getter defined for INPUT element of type '"+target.type+"'. (Element '"+target.name+"' used in tiddler '"+tiddlerName+"')");
	}
}

// ensure that the function can be used in HTML event handler
window.onFormTiddlerChange = onFormTiddlerChange;


// -------------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// -------------------------------------------------------------------------------

setStylesheet(
	".formTiddlerError{color: #ffffff;background-color: #880000;}",
	"formTiddler");


//============================================================================
// checkForDataTiddlerPlugin Macro
//============================================================================

config.macros.checkForDataTiddlerPlugin = {
	// Standard Properties
	label: "checkForDataTiddlerPlugin",
	version: {major: 1, minor: 0, revision: 0, date: new Date(2005, 12, 14)},
	prompt: "Check if the DataTiddlerPlugin exists"
}

config.macros.checkForDataTiddlerPlugin.handler = function(place,macroName,params) {
	config.macros.formTiddler.checkForExtensions(place, config.macros.formTiddler.label);
}



//============================================================================
// newTiddlerWithForm Macro
//============================================================================

config.macros.newTiddlerWithForm = {
	// Standard Properties
	label: "newTiddlerWithForm",
	version: {major: 1, minor: 0, revision: 1, date: new Date(2006, 1, 6)},
	prompt: "Creates a new Tiddler with a <<formTiddler ...>> macro"
}

config.macros.newTiddlerWithForm.handler = function(place,macroName,params) {
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params

	// get the name of the form template tiddler
	var formTemplateName = undefined;
	if (i < params.length) {
		formTemplateName = params[i];
		i++;
	}

	if (!formTemplateName) {
		config.macros.formTiddler.createErrorElement(place, "No form template specified in <<" + macroName + ">>.");
		return;
	}

	// get the button label
	var buttonLabel = undefined;
	if (i < params.length) {
		buttonLabel = params[i];
		i++;
	}

	if (!buttonLabel) {
		config.macros.formTiddler.createErrorElement(place, "No button label specified in <<" + macroName + ">>.");
		return;
	}

	// get the (optional) tiddlerName script and "askUser"
	var tiddlerNameScript = undefined;
	var askUser = false;
	if (i < params.length) {
		tiddlerNameScript = params[i];
		i++;

		if (i < params.length && params[i] == "askUser") {
			askUser = true;
			i++;
		}
	}

	// --- Processing ------------------------------------------

	if(!readOnly) {
		var onClick = function() {
			var tiddlerName;
			if (tiddlerNameScript) {
				try {
					tiddlerName = eval(tiddlerNameScript);
				} catch (ex) {
				}
			}
			if (!tiddlerName || askUser) {
				tiddlerName = prompt("Please specify a tiddler name.", askUser ? tiddlerName : "");
			}
			while (tiddlerName && store.getTiddler(tiddlerName)) {
				tiddlerName = prompt("A tiddler named '"+tiddlerName+"' already exists.\n\n"+"Please specify a tiddler name.", tiddlerName);
			}

			// tiddlerName is either null (user canceled) or a name that is not yet in the store.
			if (tiddlerName) {
				var body = "<<formTiddler [["+formTemplateName+"]]>>";
				var tags = [];
				store.saveTiddler(tiddlerName,tiddlerName,body,config.options.txtUserName,new Date(),tags);
				story.displayTiddler(null,tiddlerName,1);
			}
		}

		createTiddlyButton(place,buttonLabel,buttonLabel,onClick);
    }
}

//}}}


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
<<uChord 'Am F Dm7 Bm7b5 E'>>
[Am][Am][F][F]
[Dm7][Dm7][Bm7b5][E]
[Am]Let the geek in the pink take a stab at it
[F]If you like the way I'm thinkin' baby, wink at it
[Dm7]I may be skinny at times but I'm fat full of rhymes
[C]Pass me the mic [G]and I'm a grab at it
[Am]Isn't it delicious crazy way what I'm kissin'
[F]'Cause baby listen to this don't wanna miss it while it's hittin'
[Dm7]Sometimes you gotta fit in to get in
[C]But don't ever [G]quit 'cause soon I'm gonna let you in

[Am]I don't care about what you might think [F] about me
You get [Dm7]by without me if you want [Bm7b5] [E]
I could be the [Am]one to take you home
Baby I could [F]rock the night alone
If we never get [Dm7]down it wouldn`t be a let down
But sugar don't [Bm7b5]forget what you already know[E]
That I could be the [Am]one to turn you out
We could be the [F]talk across the town
Don't judge me by the [Dm7]colour, confuse it for another
You might [C]regret what you let slip away[G]
Like the geek in the pink[Am] [F]
Link the geek in the pink[Dm7] [Bm7b5] [E]
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>>

This is a starter [[TiddlyWiki]] with the jTab Guitar Chord and Tab Notation plugin already installed. Just copy this complete HTML file and you are ready to start using TiddlyWiki with jTab support built in. For more information on jTab, including the finer details of notation, see http://jtab.tardate.com

To add guitar tab to a Tiddler page, simply use the jtab macro. It takes a single parameter, which is the tab notation for it to render into pictures.

A very simple example:
//{{{
<<jtab 'C F G /'>>
//}}}
Is automatically rendered as:
<<jtab 'C F G /'>>

I certainly am having fun playing around with my uke. I was ready a forum posing which included setting goals. I am going to post a few ideas here.
* Choose and play a song flawlessly with perfect chord progression with 2 weeks. 2/6/11
* Select a song that is easy to sing along with and play at the same time.
* Attend every Uke Jam session at Aloha Snow. First Sat every month except July.
* Be an active member of the uke community. Through forums or other gatherings. Perhaps have the Jam folks create an official club / group.
* Learn from others.
* Practice everyday.
* Share what I learn for others
<<player http://www.youtube.com/embed/T2NEU6Xf7lM 660 480>>
<<uChord 'C Am Em'>>
intro:
 |C  Am|C  Am|

1st:
     C                 Am 
I’ve heard there was a secret chord
     C                   Am
That David played and it pleased the Lord
    F                G             C        G
But you don’t really care for music do you?

   C                   F           G
It goes like this, the fourth, the fifth
    Am              F
The minor fall, the major lift
    G                 Em        Am
The baffled King composing Hallelujah

     F           Am
Hallelujah, hallelujah
     F           C-G-C-C
Hallelujah, hallelujah

2nd:
Your faith was strong but you needed proof
You saw her bathing on the roof
Her beauty in the moonlight overthrew you

She tied you to a kitchen chair
She broke your throne, and she cut your hair
And from your lips she drew the hallelujah

Hallelujah, hallelujah
Hallelujah, hallelujah

3rd:
Maybe I’ve been here before
I know this room, I’ve walked this floor
I used to live alone before I knew you

I’ve seen your flag on the marble arch
Love is not a victory march
It’s a cold and it’s a broken hallelujah

Hallelujah, hallelujah
Hallelujah, hallelujah

5th:
There was a time when you let me know
What’s real and going on below
But now you never show it to me, do you?

And remember when I moved in you
The Holy Dark was moving too
And every breath we drew was hallelujah

Hallelujah, hallelujah
Hallelujah, hallelujah

6th:
Maybe there’s a God above
And all I ever learned from love
Was how to shoot at someone who outdrew you

And it’s not a cry you can hear at night
It’s not somebody who’s seen the light
It’s a cold and it’s a broken hallelujah
     F           Am
Hallelujah, hallelujah
     F           C-G
Hallelujah, hallelujah
     F           Am
Hallelujah, hallelujah
     F           C-G-C
Hallelujah, hallelujah
[Am/C] [G] [Am] [Am/C] [G] [Am]
[Am] [F] [G] [C] [Am] [F] [G] [C] [Am] [F] [G] [C] [Am/C] [G] [Am] [Am/C] [G] [Am]

[Am] I wanna [F]live[G] I wanna [C] give
<<uChord nota:'[Am] jI wanna [F]live[G] I wanna [C] give' in:'cl'>>
[Am] I've been a [F] miner for a [G] heart of [C] gold
<<uChord nota:'[Am] Ive been a [F] miner for a [G] heart of [C] gold' in:'cl'>>
 [Am] It's these ex[F]pressions [G] I never [C] give [Am/C] That keep me searchin for a [C] heart of gold [F] And I'm gettin old [C]
[Am/C] That keep me searchin for a [C] heart of gold
[F] And I'm gettin old [C]

[Am] [F] [G] [C] [Am] [F] [G] [C] [Am] [F] [G] [C] [Am/C] [G] [Am]

[Am] I've been to [F] Hollywood [G] I've been to [C] Redwood
[Am] I crossed the [F] ocean for a [G] heart of [C] gold [Am] I've been in [F] my mind [G] it's such a [C] fine line [Am/C] That keeps me searching for a [C] heart of gold [F] And I'm getting old [C]
[Am/C] That keeps me searching for a [C] heart of gold
[F] And I'm getting old [C]

[Am] [F] [G] [C] [Am] [F] [G] [C] [Am] [F] [G] [C]

[Am/C] Keep me searchin for a [G] heart of [Am] gold [Am/C] You keep me searchin and I'm [G] growin [Am] old [Am/C] Keep me searchin for a [G] heart of [Am] gold [Am/C] I've been a miner for a [C] heart of gold [F] [C]
<<player http://www.youtube.com/embed/DeueRLwdogY 360 240>>
<<uChord 'D G E7 Bm7 A G A A7 F C'>>
D D U - U D U
[D]Here comes the sun, [G]here comes the [E7]sun,
and I say[D] it's all right
[Bm7 A G A A7]

[D]Little darling, it's been a [G]long cold lonely [A7]winter
[D]Little darling, it feels like [G]years since it's been [A7]here

Here comes the sun, here comes the sun
and I say it's all right

Little darling, the smiles returning to the faces
Little darling, it seems like years since it's been here
Here comes the sun, here comes the sun
and I say it's all right

[F]Sun, [C]sun, [G]sun, here it [D]comes...[A7]
D           D        D                   D DU - UDU
Sun, sun, sun, here it comes...
Sun, sun, sun, here it comes...
Sun, sun, sun, here it comes...
Sun, sun, sun, here it comes...

Little darling, I feel that ice is slowly melting
Little darling, it seems like years since it's been clear
Here comes the sun, here comes the sun,
and I say it's all right
It's all right 
<<uChord nota:'C F F G Am' in:'c' out:'c' s:'l">>
<<uChord nota:'[C] [F] [F] [G] [Am]' s:'l">>
Strumming Pattern [C]D XUUX [F] D XUUX D XUUX [G] D XU [Am] D XUUX - DU XU XU XU
<<player http://www.youtube.com/embed/GKlouR-grok#t=03m18s 320 240>>

[Intro]
One two three uh!

[Verse One - Andre 3000]
My baby don't mess around
Because she loves me so
And this I know for shooo..
Uh, But does she really wanna
But can't stand to see me
Walk out the dooor..
Don't try to fight the feelin'
Because the thought alone is killing me right nooww..
Uh, thank god for mom and dad
For sticking two together
'Cause we don't know hooowww...
UH!

[Chorus:]
Heeeyyy... Yaaaaaaa..
Heeyy Yaaaaaaaa..
Heeeyyy... Yaaaaaaa..
Heeyy Yaaaaaaaa..
Heeeyyy... Yaaaaaaa..
Heeyy Yaaaaaaaa..
Heeeyyy... Yaaaaaaa..
Heeyy Yaaaaaaaa..

[Verse Two - Andre 3000]
You think you've got it
Ohh, you think you've got it
But got it just don't get it
Till' there's nothing at
AaaaaaaaAAAAAAAaaaaaaAAAAAAaaaaaallllll..
We get together
Ohh, we get together
But seperate's always better when there's feelings
InvooooooOOOOOOOoooooooOOOOOOooooooOOOOOlved
If what they say is "Nothing is forever"
Then what makes, Then what makes, Then what makes
Then what makes, Then what makes LOOVVEEE?
(Love exception) So why you, why you
Why you, why you, why you are we so in denial
When we know we're not happy heeeerrreeee...
Y'all don't want me here you just wanna dance

[Chorus]
Heeeyyy... Yaaaaaaa.. (OHH OH)
Heeyy Yaaaaaaaa.. (OHH OH)
Heeeyyy... Yaaaaaaa.. (Don't want to meet your daddy, OHH OH)
Heeyy Yaaaaaaaa.. (Just want you in my Caddy OHH OH)
Heeeyyy... Yaaaaaaa.. (OHH OH, don't want to meet yo' mama OHH OH)
Heeyy Yaaaaaaaa.. (Just wan't to make you cumma OHH OH)
Heeeyyy... Yaaaaaaa.. (I'm, OHH OH I'm, OHH OH)
Heeyy Yaaaaaaaa.. (I'm just being honest OHH OH, I'm just being honest)

[Bridge - Andre 3000]
Hey, alright now
Alright now fellas, (YEAH!)
Now what's cooler than bein' cool?
(ICE COLD!) I can't hear ya'
I say what's cooler than bein' cool?
(ICE COLD!) whooo...
Alright, alright, alright, alright
Alright, alright, alright, alright
Alright, alright, alright, alright
Alright, alright, Ok now ladies, (YEAH!)
And we gon' break this thing down in just a few seconds
Now don't have me break this thang down for nothin'
Now I wanna see y'all on y'all baddest behavior
Lend me some suga', I am your neighbor ahh here we go!
Shake it, shake, shake it, shake it (OHH OH)
Shake it, shake it, shake, shake it, shake it, shake it (OHH OH)
Shake it, shake it like a Polaroid Picture, shake it, shake it
Shh you got to, shake it, shh shake it, shake it, got to shake it
(Shake it Suga') shake it like a Poloroid Picture

[Verse Three - Andre 3000 (Repeating "Shake it" in background)]
Now while Beyonce's and Lucy Lui's
And baby dolls, get on the floor
(Get on the floor)
You know what to dooo..
You know what to dooo..
You know what to do!

[Chorus]
Heeeyyy... Yaaaaaaa.. (OHH OH)
Heeyy Yaaaaaaaa.. (OHH OH)
Heeeyyy... Yaaaaaaa.. (OHH OH)
Heeyy Yaaaaaaaa.. (Uh oh, Hey Ya)
Heeeyyy... Yaaaaaaa.. (OHH OH)
Heeyy Yaaaaaaaa.. (Uh, uh, OHH OH)
Heeeyyy... Yaaaaaaa.. (OHH OH)
Heeyy Yaaaaaaaa.. (OHH OH)

[Chorus continues until fade]
CHORDS USED IN THIS SONG
<<uChord "Bm F# A E G D Em Bm7">>
	"Hotel California" by the Eagles
Verse:

[Bm]On a dark desert highway, [F#]cool wind in my hair
[A]Warm smell of colitas [E]rising up through the air
[G]Up ahead in the distance, [D]I saw a shimmering light
[Em]My head grew heavy and my sight grew dim
[F#]I had to stop for the night

[Bm]There she stood in the door[F#]way; I heard the mission bell
[A]And I was thinking to myself this could [E]be heaven or this could be hell
[G]Then she lit up a candle, [D]and she showed me the way
[Em]There were voices down the corridor, [F#]I thought I heard them say

Chorus:

[G]Welcome to the Hotel Cali[D]fornia.
Such a [Em]lovely place, such a [Bm7]lovely face
[G]Plenty of room at the Hotel Cali[D]fornia
[Em]Any time of year (any time of year) you [F#]can find it here

Her mind is Tiffany twisted, She got a mercedes benz
She got a lot of pretty pretty pretty boys that she calls friends
How they danced in the court yard sweet summer sweat
Some dance to remember
Some dance to forget

So I called up the captain; Please bring me my wine (he said)
We haven't had that spirit here since 1969
And still those voice are calling from far away
Wake you up in the middle of the night
Just to hear them say

Chorus:

Welcome to the Hotel California
Such a lovely place, such a lovely face
Livin' it up at the Hotel California
What a nice surprise
Bring your alibis

Mirrors on the ceiling; the pink champagne on ice (an she said)
We are all just prisoners here , of our own device
And in the master's chambers, They gathered for the feast
They stab it with their steely knives but they
just can't kill the beast

Last thing I remember, I was running for the door
I had find the passage back to the place I was before
"Relax" said the night man; we are programmed to receive
You can check out anytime you like
But you can never leave... 
<<uChord 'Am C D F Am C E7 /'>>
There is a *house in *New *Orleans - They *call the *Rising *Sun /
<<uChord 'Am C D F Am E7 Am E7'>>
And it's *been the *ruin of *many a poor *boy - And *God I *know I'm *one

Finger Pick 4-3-2-1-4-3-2
<<uChord n:"D & D U D" in:'s'>>

My mother was a tailor
She sewed my new bluejeans
My father was a gamblin' man
Down in New Orleans

Now the only thing a gambler needs
Is a suitcase and trunk
And the only time he's satisfied
Is when he's on a drunk

------ organ solo ------

Oh mother tell your children
Not to do what I have done
Spend your lives in sin and misery
In the House of the Rising Sun

Well, I got one foot on the platform
The other foot on the train
I'm goin' back to New Orleans
To wear that ball and chain

Well, there is a house in New Orleans
They call the Rising Sun
And it's been the ruin of many a poor boy
And God I know I'm one

<<player http://www.youtube.com/v/lC9aKa64A9g?version=3 320 240>>
[[Mike|http://www.youtube.com/user/MusicTeacher2010?feature=mhum#p/u/107/lC9aKa64A9g]]
Author: Uncle Rod
# Select a SONG to master.
# Create a PRACTICE SHEET with chords but NO lyrics.
## Write out the chord sequence of the song (intro, body, ending) as it is “phrased” on the Song Sheet.
## Draw chord diagrams for unfamiliar chords, but only at their first occurrence.
# Strum through the CHORD SEQUENCE,  your practice sheet, without referencing the melody of the song.
## Strum each chord 3 or 4 times and focus your effort on learning the chords in their order and making smooth transitions from chord to chord.  
## Your goal is to play through the Practice Sheet “perfectly”, without interruptions, strumming each chord only once or twice, without looking at your fingers. 
# After reaching the goal for Step 3, hum or whistle the MELODY as you play through the Practice Sheet.  You’ll be working out where to make the chord changes in relation to the melody, NOT the lyrics… yet.  Do this at least 3 to 5 times no matter how awkward, uncomfortable, or difficult it may be. This is ear training. 
# Put the Practice Sheet away and return to the original Song sheet. Your goal is to ACCOMPANY YOURSELF SINGING THE SONG.  If the chords seem to be coming at you too quickly, slow down.
# Experiment with strumS & rhythms. 
## ALWAYS work on strumming LAST. 
# Select another Song in a different Key OR learn the same Song in different Keys.
## Select songs from each of these Keys: C, F, G, A, & D or transpose the song into these Keys.
## After mastering 10 to 15 songs, you may STOP using this Method and simply learn songs directly from Song Sheets.  That’s why it’s a “Disposable Method”.

Chord arrangements from:
Uncle Rod’s ‘Ukulele Song Book  2009,
( rohiguchi@gmail.com )
<<player http://www.youtube.com/embed/M5LS---oX7Y 320 240>>
<<uChord ntype:"cl" nota:"[C] [F] [G7] [C] [F] [G7]">>

Intro: [C] [F] [G7] [C] [F] [G7]

I [C] don't know what it is that makes me [Am] love you so
I [C] only know I never want to [Am] let you go
Cause [F] you started [G7] something [Dm] can't you [G7] see
That [C] ever since we met you've had a [Am] hold on me
It [F] happens to be [G7] true I [Dm] only wanna [G7] be with [C] you [F] [G7]

<<uChord ntype:cl nota:"[D7] [Dm]">>

It [C] doesn't matter where you go or [Am] what you do
I [C] want to spend each moment of the [Am] day with you
[F] Look what has [G7] happened with [Dm] just one [G7] kiss
I [C] never knew that I could be in [Am] love like this
It's [F] crazy but it's [G7] true I [Dm] only wanna [G7] be with [C] you

<<uChord ntype:"cl" nota:"[A] [C] [F] [C]">>
[Ab] You stopped and smiled at me and [C] asked me if I [F] cared to [C] dance
[G7] I fell into your open arms [D7] I didn't stand a [G7]chance now listen honey

[C] I just wanna be beside you [Am] everywhere
As [C] long as we’re together honey [Am] I don’t care
Cause [F] you started [G7] something [Dm] can't you [G7] see
That [C] ever since we met you've had a [Am] hold on me
It [F] happens to be [G7] true I [Dm] only wanna [G7] be with [C] you

Instumental: [C] [Am] [C] [Am] [F] [G7] [Dm] [G7] [C] [Am] [F] [G7] [Dm] [G7] [C] [Ab] You stopped and smiled at me and [C] asked me if I [F] cared to [C] dance
[G7] I fell into your open arms [D7] I didn't stand a [G7]chance now listen honey

[C] I just wanna be beside you [Am] everywhere
As [C] long as we’re together honey [Am] I don’t care
Cause [F] you started [G7] something [Dm] can't you [G7] see
That [C] ever since we met you've had a [Am] hold on me
It [F] happens to be [G7] true I [Dm] only wanna [G7] be with [C] you

[F] No matter no matter what you [G] do I [F] only wanna [G7] be with you
[F] No matter, no matter what you [G] do I [F] only wanna [G] be with [C] you
Bob Marley and the Wailers
<<player http://www.youtube.com/embed/OfXLPFt0Gq0 360 240>>
<<uChord "Dm Gm Dm Dm Gm">>
//{{{
[Dm]  I shot the Sheriff [Gm] but I didn’t shoot no [Dm] deputy [Dm] I shot the Sheriff [Gm] but I didn’t shoot no [Dm] deputy [Gm] All a[Am]round in my [Dm] hometown
[Gm] They're [Am] trying to track me [Dm] down
[Gm] They [Am] say they want to bring me [Dm] in guilty
For the [Gm] killing of a [Am] depu[Dm]ty
For the [Gm] life of a [Am] depu[Dm]ty	But I say (riff)

[Dm]  I shot the Sheriff [Gm] but I swear it was in [Dm] self-defence [Dm] I shot the Sheriff [Gm] and they say it is a [Dm] capital offence [Gm] Sheriff [Am] John Brown always [Dm] hated me
[Gm] For [Am] what I don't [Dm] know
[Gm] Every [Am] time I [Dm] plant a seed
He said [Gm] kill it be[Am]fore it [Dm] grows
He said [Gm] kill them be[Am]fore they [Dm] grow	And so (riff) [Dm] I shot the Sheriff [Gm] but I swear it was in [Dm] self-defence
[Dm]  I shot the Sheriff [Gm] but I swear it was in [Dm] self-defence
[Gm] Freedom [Am] came my way [Dm] one day
[Gm] And I [Am] started out of [Dm] town
[Gm] All of a [Am] sudden I saw [Dm] Sheriff John Brown
[Gm] Aiming to [Am] shoot me [Dm] down
So I [Gm] shot I [Am] shot I shot him [Dm] down 	But I say (riff) [Dm] I shot the Sheriff [Gm] but I did not shoot the [Dm] deputy
[Dm]  I shot the Sheriff [Gm] but I did not shoot the [Dm] deputy
[Gm] Reflexes [Am] got the [Dm] better of me
[Gm] And what is to [Am] be must [Dm] be
[Gm] Every [Am] day the bucket goes [Dm] to the well
[Gm] But one [Am] day the bottom [Dm] will drop out
[Gm7] One [Am] day the bottom [Dm] will drop out 	I say (riff) [Dm] I shot the Sheriff [Gm] but I did not shoot the [Dm] deputy
[Dm]  I shot the Sheriff [Gm] but I did not shoot no [Dm] deputy
//}}}
<<uChord n:'D U D U' in:'s'>>
<<uChord n:'[F]I`d like to teach the world to sing in perfect harmony' in:'cl'>>
<<uChord "F F7 Bb Dm G7 C7 A7 Bdim">>
//{{{
INTRO: F F7 Bb Bdim F C7 F + C7
F                              F7    Bb                F
I’ve been working on the rail-road, all the livelong day.
F                         Dm                 G7              C7
I’ve been working on the rail-road, just to pass the time a-way.
C7                        F         Bb                        A7
Can’t you hear the whistle blowing RISE UP so early in the morn?
Bb                          F           C7               F 
Can’t you hear the captain shouting, “Dinah, blow your horn”?
F                F7       Bb            G7
Dinah, won’t you blow?  Dinah, won’t you blow?
C7                        F   C7  F    
Dinah won’t you blow your ho--o--orn?
F                 F7      Bb               G7
Dinah, won’t you blow?  Dinah, won’t you blow?
C7                                    F
Dinah won’t you blow your horn?
F
Someone’s in the kitchen with Dinah.
F                                      G7       C7 
Someone’s in the kitchen, I kno-o--o-ow.
F                        F7              Bb Bdim/1212
Someone’s in the kitchen with Di--nah,
F                        C7       F           C7
Strummin’ on the old ban-jo.   And singin’ …
F                                                    G7    C7
Fee, fie, fiddly i - o, fee, fie, fiddly i - o-o- -o-o
F       F7   Bb     Bdim   F                    C7        F   (Bb-F)
Fee, fie, fiddly i - o,         strummin’ on the old ban-jo.
//}}}
Uncle Rod’s ‘Ukulele Song Book  2009, ( rohiguchi@gmail.com )
	"If I Had a Million Dollars" by the Barenaked Ladies

[G] If I had a million dollars
[C]If I had a [G]mil[D]lion [G]dollars
I'd buy you a house
I would [C] buy you a [G] house
[G] If I had a million dollars
[C]If I had a [G]mil[D]lion [G]dollars
I'd buy you furniture for your house
Maybe a nice chesterfield [D] or an [G] ottoman
[G] If I had a million dollars
[C]If I had a [G]mil[D]lion [G] dollars
I'd buy you a K-Car
A nice reliant [D] automo[G]bile
[G] If I had a million dollars I'd buy your [D]lo-- [D6][D7][D6][D]ve. [G] Oh...

Chorus:

[C]If I had a [G]mil[D]lion [G]dollars
[G/D] I'd build a tree fort [G/C] in [G]our [C]yard.
[C]If I had a [G]mil[D]lion [G]dollars
[G/D]You could help, it wouldn't [G/C]be [G] that [C]hard.
[C]If I had a [G]mil[D]lion [G]dollars
Maybe we could put a refrigerator in there.
Wouldn't that be fabulous?

[G] If I had a million dollars
[C]If I had a [G]mil[D]lion [G]dollars
I'd buy you a fur coat
But not a [C]real fur coat that's [G]cruel
[G] If I had a million dollars
[C]If I had a [G]mil[D]lion [G]dollars
I'd buy you an exotic pet
Like a [D]llama or an [G]emu
If I had a million dollars
[C]If I had a [G]mil[D]lion [G]dollars
I'd buy you John Merrick's remains
All them [D]crazy elephant [G] bones
[G] If I had a million dollars I'd buy your [D]lo-- [D6][D7][D6][D]ve.

Chorus:

[C]If I had a [G]mil[D]lion [G]dollars
[G/D]We wouldn't have to [G/C]walk [G] to the [C]store
[C]If I had a [G]mil[D]lion [G]dollars
[G/D]We'd take a limousine 'cause [G/C]it [G]costs [C]more
[C]If I had a [G]mil[D]lion [G]dollars
We wouldn't have to eat Kraft Dinners.
But we would eat Kraft Dinner. Of course we would, we'd just eat more.
And buy really expensive ketchup with it.
That's right, all the fanciest Dijon Ketchup. Mmmmmm.

[G] If I had a million dollars
[C]If I had a [G]mil[D]lion [G]dollars
I'd buy you a green dress
But not a real green [D] dress, that's [G]cruel
[G] If I had a million dollars
[C]If I had a [G]mil[D]lion [G]dollars
I'd buy you some art
[D]Picasso or a [G]Garfunkel
If I had a million dollars
[C]If I had a [G]mil[D]lion [G]dollars
I'd buy you a monkey
Haven't you always [D]wanted a [G]monkey?
[G] If I had a million dollars I'd buy your [D]lo-- [D6][D7][D6][D]ve. [G] Oh...

[C]If I had a [G]mil[D]lion [G]dollars, If I had a million dollars
[C]If I had a [G]mil[D]lion [G]dollars, If I had a million dollars
[G]I'd be rich. 
[[UU Lesson|http://ukuleleunderground.com/2009/02/uke-lesson-15-island-in-the-sun/]]

<<uChord n:'Em Am7 D G C A7'>>

Em <<uChord n:'D X' in:'s'>>
A7 <<uChord n:'U D X' in:'s'>>
D <<uChord n:'U U X' in:'s'>>
G <<uChord n:'U D X' in:'s'>>
Calipso Strum <<myAudio id:"4" title:"Calipso Strum" mp3:"http://davidrschaller.servehttp.com/audio/calipsoStrum.mp3"  artist:'David R. Schaller'>>

|<<uChord n:'[C]Down the way where [F] the nights are gay' in:'cl'>>|<<uChord n:'[G7] And the sun shines daily on the [C]mountaintop' in:'cl'>>|
|<<uChord n:'[C]I took a trip on [F]a sailing ship' in:'cl'>>|<<uChord n:'[G7]But when I reached [C]Jamaica I made a stop' in:'cl'>>|
|<<uChord n:'[C]But I`m sad to say [Dm]I`m on my way' in:'cl'>>|<<uChord n:'[G7]Won`t be back [C]for many a day' in:'cl'>>|
|<<uChord n:'[C]My heart is down my head is [Dm]spinning around' in:'cl'>>|<<uChord n:'[G7]I had to leave a little [C]girl in Kingston town' in:'cl'>>|

<<player http://www.youtube.com/embed/UcM1Nsqho74 360 240>>
<<player id=1 http://www.youtube.com/embed/tncG7tebvYs 360 240>>
<<uStrum "D & D U D U">>
<<uChord "D F Am G">>

<<uChord ntype:"cl" nota:"[Am] [G] [Am] [G]">>
<<uChord ntype:"cl" nota:" [F] [C] [Bb] [Am]">>

Picking T4 I M T3 I M
//{{{
[Am] Nights in white [G] satin [Am] never reaching the [G] end
[F] Letters I've [C] written [Bb] never meaning to [Am] send
[Am] Beauty I'd [G] always missed [Am] With these eyes be[G]fore
[F] Just what the [C] truth is, [Bb] I can't say any [Am] more

Cause I [D] love you yes I [F] love you
Oh how I [Am] love you [G] I [Am] love you [G]

[Am] Gazing at [G] people [Am] some hand in [G] hand
[F] Just what I'm [C] going through [Bb] they can't under[Am]stand [Am] Some try to [G] tell me [Am] thoughts they cannot de[G]fend [F] Just what you [C] want to be [Bb] you'll be in the [Am] end

Cause I [D] love you yes I [F] love you
Oh how I [Am] love you [G] I [Am] love you [G] Instrumental:
Am	G	F	E7	Am	G	F	E7

Am	F	Am	F Dm	E7		Dm		E7
Am	G	F	Am	G	Am	G Repeat verse 1 and chorus x 2
//}}}
<<player id=2 http://www.youtube.com/embed/9muzyOd4Lh8 360 240>>
<<jtab 'G D Am C'>>
[G]Mama [D]take this badge [Am]from me
[G]I can't [D]use it [C]anymore
[G]It's getting [D]dark too [Am]dark to see
[G]Feels like [D]I'm knockin' on [C]heaven's door

[G]Knock-knock-[D]knockin' on [Am]heaven's door
[G]Knock-knock-[D]knockin' on heaven's [C]door
[G]Knock-knock-[D]knockin' on heaven's [Am]door
[G]Knock-knock-[D]knockin' on heaven's [C]door

Mama put my guns in the ground
I can't shoot them anymore
That cold black cloud is comin' down
Feels like I'm knockin' on heaven's door

Knock-knock-knockin' on heaven's door
Knock-knock-knockin' on heaven's door
Knock-knock-knockin' on heaven's door
Knock-knock-knockin' on heaven's door

"You just better start sniffin' your own
rank subjugation jack 'cause it's just you
against your tattered libido, the bank and
the mortician, forever man and it wouldn't
be luck if you could get out of life alive"*
Knock-knock-knockin' on heaven's door
//{{{
config.macros.launchForm= {};

config.macros.launchForm.handler = function (place, macroName, params, wikifier, paramString, tiddler)
{
     if (params.length == 1){
           notation = params[0];
     }else{
           var prms = paramString.parseParams(null, null, true);
          
     }
        newwindow2=window.open('','name','height=200,width=500');
	var tmp = newwindow2.document;
	tmp.write(store.getTiddler('uChordForm').text);
	tmp.close();
   
};
//}}}
<<uChord nota:'[F]Love me tender [G7]love me sweet' in:'cl'>>
<<uChord nota:'[C7]never let me [F]go. You have made my [G7]life complete,' in:'cl'>>
<<uChord nota:'[C7]and I love you [F]so.' in:'cl'>>

<<uChord nota:'[F]Love me [A7]tender, [Dm]love me [F7]true.' in:'cl'>>
<<uChord nota:'[Bb]all my [Bbm]dreams full [F]fill.' in:'cl'>>
<<uChord nota:'For my [D7]darlin [G7]I love you, [C7] and I always [F]will' in:'cl'>>
[[GettingStarted]]

[[Song Book]]
[[Tools]]
[[Practice]]
[[Practice Sheets]]
[[Bookmarks]]

[[Right-Click Download|http://davidrschaller.servehttp.com/journal/index.html]]

[[TW Wiki|http://tiddlywiki.org/wiki/Main_Page]]
[[Custom Macros|http://tiddlywikiguides.org/index.php?title=Getting_started_with_custom_macros]]

  <script src="js/prototype.js" type="text/javascript"></script>
  <script src="js/raphael.js" type="text/javascript"></script>
  <script src="js/uChord.js" type="text/javascript"></script>


  <script src="js/audio-player.js" type="text/javascript"></script>
  <script src="js/myAudio.js" type="text/javascript"></script>


  <script src="js/soundmanager2.js" type="text/javascript"></script>
<script type="text/javascript">
soundManager.url = 'swf/';
soundManager.debugMode = false;
soundManager.debugFlash = false;
</script>
[[Metronome Online|http://www.metronomeonline.com/]]
<<player http://www.metronomeonline.com/flash/metronome.swf 351 380>>
cG48AG7MMEY
Thumbnail4:33 Add to Added to queue
"GOING HOME" from Dvorak's "NEW WORLD SYMPHONY" - UKULELE SOLO ARRANGEMENT by MICHAEL LYNCH
1,823 views
4 days ago
cG48AG7MMEY

F86UD3dDp_c
Thumbnail5:17 Add to Added to queue
DO RE MI from "THE SOUND OF MUSIC" - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
803 views
4 days ago
F86UD3dDp_c

2jq4qTCWrsM
Thumbnail8:15 Add to Added to queue
MY FAVORITE THINGS from "THE SOUND OF MUSIC" - UKULELE TUTORIAL / LESSON by "UKULELE MIKE"
1,506 views
6 days ago
2jq4qTCWrsM

l3hg7Oll10Q
Thumbnail3:14 Add to Added to queue
RIVER OF DREAMS - UKULELE SOLO INSTRUMENTAL by MICHAEL LYNCH
5,045 views
2 weeks ago
l3hg7Oll10Q
SVLtX83ySf4
Thumbnail9:03 Add to Added to queue
I'VE GOT MY LOVE TO KEEP ME WARM by Irving Berlin - UKULELE TUTORIAL / LESSON by UKULELE MIKE
1,887 views
2 weeks ago
SVLtX83ySf4
6my2ywCGZ_c
Thumbnail2:47 Add to Added to queue
AMAZING GRACE - UKULELE SOLO ARRANGEMENT by MICHAEL LYNCH
1,439 views
2 weeks ago
6my2ywCGZ_c
sRNd5u0IzbQ
Thumbnail2:59 Add to Added to queue
ODE TO JOY - Theme & Variations - UKULELE SOLO Arranged by MICHAEL LYNCH
1,810 views
3 weeks ago
sRNd5u0IzbQ
Z0S71CF-MVM
Thumbnail2:57 Add to Added to queue
LORD OF ALL HOPEFULNESS - An Old Irish Air - UKULELE SOLO by MICHAEL LYNCH
1,795 views
4 weeks ago
Z0S71CF-MVM
D9aqM4ChsLY
Thumbnail2:18 Add to Added to queue
GREENSLEEVES - UKULELE SOLO ARRANGEMENT by MICHAEL LYNCH
3,728 views
1 month ago
D9aqM4ChsLY
IB0EHnHfEEw
Thumbnail1:56 Add to Added to queue
COVENTRY CAROL - UKULELE SOLO ARRANGEMENT by MICHAEL LYNCH
1,545 views
1 month ago
IB0EHnHfEEw
zz1R8JyPSrM
Thumbnail2:19 Add to Added to queue
UP ON THE HOUSETOP - SOLO UKULELE ARRANGEMENT by MICHAEL LYNCH
608 views
1 month ago
zz1R8JyPSrM
8ZAAxq93v-k
Thumbnail2:01 Add to Added to queue
WINTER WONDERLAND - UKULELE SOLO ARRANGEMENT by MICHAEL LYNCH
727 views
1 month ago
8ZAAxq93v-k
87IwyFVewKQ
Thumbnail1:58 Add to Added to queue
WHITE CHRISTMAS UKULELE SOLO (Chord / Melody Version) by MICHAEL LYNCH
630 views
1 month ago
87IwyFVewKQ
GoNnxynMVWM
Thumbnail3:04 Add to Added to queue
WHITE CHRISTMAS - UKULELE SOLO ARRANGEMENT by MICHAEL LYNCH
1,524 views
1 month ago
GoNnxynMVWM
-mEJamsctlo
Thumbnail2:38 Add to Added to queue
O TANNENBAUM - UKULELE SOLO ARRANGEMENT by MICHAEL LYNCH
2,280 views
1 month ago
-mEJamsctlo
nNdA46B3jvw
Thumbnail2:18 Add to Added to queue
GOOD KING WENCESLAS - UKULELE SOLO ARRANGEMENT by MICHAEL LYNCH
1,512 views
1 month ago
nNdA46B3jvw
DLgzOXm675k
Thumbnail2:33 Add to Added to queue
PAT - A - PAN Burgundian Carol - UKULELE SOLO ARRANGEMENT by MICHAEL LYNCH
450 views
1 month ago
DLgzOXm675k
q6lK66wHVi0
Thumbnail3:28 Add to Added to queue
PEACE IS A SONG CALLED CHRISTMAS: written, performed and sung by MICHAEL B. LYNCH
1,720 views
1 month ago
q6lK66wHVi0
WY-iDVn7qbE
Thumbnail3:20 Add to Added to queue
SILENT NIGHT - UKULELE SOLO: Arranged & Performed by MICHAEL LYNCH
1,929 views
1 month ago
WY-iDVn7qbE
kxYoTVUnFKk
Thumbnail9:27 Add to Added to queue
HOME FOR THE HOLIDAYS - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,504 views
2 months ago
kxYoTVUnFKk
oMIy_TGRicI
Thumbnail4:53 Add to Added to queue
SANTA CLAUS IS COMING TO TOWN - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,703 views
2 months ago
oMIy_TGRicI
EVlXh8lhLXU
Thumbnail3:30 Add to Added to queue
HOLLY JOLLY CHRISTMAS - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,869 views
2 months ago
EVlXh8lhLXU
RxHy7ygMXvM
Thumbnail5:41 Add to Added to queue
IT MUST HAVE BEEN OL SANTA CLAUS - UKULELE TUTORIAL / LESSON by UKULELE MIKE
747 views
2 months ago
RxHy7ygMXvM
q3FRiRkAcvw
Thumbnail3:38 Add to Added to queue
STILL, STILL, STILL - UKULELE SOLO Arranged & Performed by Michael Lynch
572 views
2 months ago
q3FRiRkAcvw
y8DQvDOYoNM
Thumbnail4:48 Add to Added to queue
ALL GOOD GIFTS: Composed and Performed by Michael Lynch
577 views
2 months ago
y8DQvDOYoNM
Y7XxzCmo6lw
Thumbnail5:59 Add to Added to queue
THIS IS THE TIME - Music and Lyrics by Mike Lynch
378 views
2 months ago
Y7XxzCmo6lw
bNIyGrX4yGI
Thumbnail3:27 Add to Added to queue
O LITTLE TOWN OF BETHLEHEM - UKULELE SOLO ARRANGED & PERFORMED by MICHAEL LYNCH
800 views
2 months ago
bNIyGrX4yGI
nmp1wCy9Uek
Thumbnail2:47 Add to Added to queue
O COME LITTLE CHILDREN - UKULELE SOLO ARRANGED & PERFORMED by MICHAEL LYNCH
871 views
2 months ago
nmp1wCy9Uek
AQJaKwm-3lU
Thumbnail3:03 Add to Added to queue
ANGELS WE HAVE HEARD ON HIGH - SOLO UKULELE ARRANGEMENT by MICHAEL LYNCH
2,628 views
2 months ago
AQJaKwm-3lU
RIRHd9PchIw
Thumbnail5:11 Add to Added to queue
TIPS & ADVICE - C Major Chromatic Scale Excercise - Taught by "UKULELE MIKE"
2,965 views
2 months ago
RIRHd9PchIw
2CO7zryA668
Thumbnail6:05 Add to Added to queue
TIPS & ADVICE - BARRE CHORD EXCERCISES - Taught by "UKULELE MIKE"
2,422 views
2 months ago
2CO7zryA668
hlLNQ35C7GM
Thumbnail3:07 Add to Added to queue
AWAY IN A MANGER - UKULELE SOLO by MICHAEL LYNCH ("UKULELE MIKE")
1,452 views
2 months ago
hlLNQ35C7GM
X2o8LDc7Zg8
Thumbnail3:36 Add to Added to queue
WE THREE KINGS - UKULELE SOLO by MICHAEL LYNCH ("UKULELE MIKE")
1,260 views
2 months ago
X2o8LDc7Zg8
HKzrljKrttI
Thumbnail2:19 Add to Added to queue
WHAT CHILD IS THIS? - SOLO UKULELE ARRANGEMENT by "UKULELE MIKE"
4,742 views
2 months ago
HKzrljKrttI
doRZO-oSUfc
Thumbnail1:18 Add to Added to queue
UKULELE MIKE EVENTS SCHEDULE ANNOUNCEMENT
2,603 views
3 months ago
doRZO-oSUfc
THpezQQ2AHc
Thumbnail6:07 Add to Added to queue
TIPS & ADVICE - FINGERPICKING TECHNIQUE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,712 views
3 months ago
THpezQQ2AHc
pJme1gtN1SM
Thumbnail5:35 Add to Added to queue
CHORD FINGERING TIPS OCT. 2010 - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,810 views
3 months ago
pJme1gtN1SM
3BJmn-POqzU
Thumbnail6:25 Add to Added to queue
CAN YOU FEEL THE LOVE TONIGHT? - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,850 views
3 months ago
3BJmn-POqzU
YBp0Q4YPKQQ
Thumbnail5:06 Add to Added to queue
TWILIGHT TIME - UKULELE TUTORIAL / LESSON by "UKULELE MIKE"
2,466 views
3 months ago
YBp0Q4YPKQQ
NbLV2482ZaM
Thumbnail6:13 Add to Added to queue
WHERE HAVE ALL THE FLOWERS GONE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,753 views
3 months ago
NbLV2482ZaM
z76tSSIXiHo
Thumbnail8:38 Add to Added to queue
THE PRAYER by David Foster & Carole Bayer Sager - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,638 views
3 months ago
z76tSSIXiHo
wrHKhwJj0p8
Thumbnail4:26 Add to Added to queue
MERRY XMAS WAR IS OVER - A UKULELE TUTORIAL / LESSON by "UKULELE MIKE"
4,672 views
3 months ago
wrHKhwJj0p8
T-lVKEDBUj8
Thumbnail7:56 Add to Added to queue
DO YOU HEAR WHAT I HEAR? - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,882 views
3 months ago
T-lVKEDBUj8
2UgLf9kjxJU
Thumbnail3:36 Add to Added to queue
Flying Purple People Eater for the Ukulele : Ukulele Lesson / Tutorial by "UKULELE MIKE"
6,117 views
5 months ago
2UgLf9kjxJU
xvKFX1oPiW0
Thumbnail4:10 Add to Added to queue
The Monster Mash for the Ukulele: Ukulele Lesson / Tutorial by "Ukulele Mike"
10,104 views
5 months ago
xvKFX1oPiW0
8b28xeVL8Dk
Thumbnail5:40 Add to Added to queue
FOR NO ONE by Lennon & McCartney - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,261 views
5 months ago
8b28xeVL8Dk
LlLa3wmJdgE
Thumbnail7:06 Add to Added to queue
SUMMERTIME by George Gershwin for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
8,437 views
5 months ago
LlLa3wmJdgE
U0C4TOKUVCw
Thumbnail3:06 Add to Added to queue
CHERRY BLOSSOMS - ORIGINAL UKULELE INSTRUMENTAL by "UKULELE MIKE"
6,014 views
5 months ago
U0C4TOKUVCw
A4yAdK4oyDM
Thumbnail3:07 Add to Added to queue
PANIS ANGELICUS by Cesar Franck for UKULELE - by "UKULELE MIKE"
5,505 views
6 months ago
A4yAdK4oyDM
xN2o93BlBWE
Thumbnail3:04 Add to Added to queue
FINLANDIA by Jean Sibelius - UKULELE SOLO ARRANGEMENT by "UKULELE MIKE"
11,445 views
6 months ago
xN2o93BlBWE
bYmtFIlX274
Thumbnail3:42 Add to Added to queue
CLOSE TO YOU for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
7,387 views
7 months ago
bYmtFIlX274
mj_R2qCB5Hk
Thumbnail3:30 Add to Added to queue
OBLADI OBLADA for UKULELE - INSPIRATION FOR THE "UKULELE BOY" by "UKULELE MIKE"
5,448 views
7 months ago
mj_R2qCB5Hk
ctks5Hxetjo
Thumbnail8:55 Add to Added to queue
YESTERDAY by Paul McCartney for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
15,378 views
7 months ago
ctks5Hxetjo
Lh7kCHjinXw
Thumbnail6:10 Add to Added to queue
WHEN YOU WISH UPON A STAR for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
9,009 views
7 months ago
Lh7kCHjinXw
uPgpJ1IeDvA
Thumbnail4:41 Add to Added to queue
SHE'S GOT A WAY ABOUT HER for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,382 views
7 months ago
uPgpJ1IeDvA
RQKZQ3u7cdo
Thumbnail4:51 Add to Added to queue
TITANIC - Camp Song for Ukulele - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
13,156 views
7 months ago
RQKZQ3u7cdo
YnCx5MI113c
Thumbnail7:07 Add to Added to queue
THE CANDY MAN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,601 views
7 months ago
YnCx5MI113c
6cVAbiJkzVg
Thumbnail3:22 Add to Added to queue
I'D LIKE TO TEACH THE WORLD TO SING for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,246 views
7 months ago
6cVAbiJkzVg
x5x3D4_EYeU
Thumbnail8:22 Add to Added to queue
EL CONDOR PASA - UKULELE INSTRUMENTAL - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
18,853 views
7 months ago
x5x3D4_EYeU
o97eFS-s_W0
Thumbnail7:30 Add to Added to queue
MR. BOJANGLES by Jerry Jeff Walker for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,284 views
7 months ago
o97eFS-s_W0
TzM5oLB5Ew8
Thumbnail5:24 Add to Added to queue
UKULELE ROCK 'N' ROLL - ORIGINAL UKULELE INSTRUMENTAL by "UKULELE MIKE"
7,201 views
7 months ago
TzM5oLB5Ew8
3bBuqF6IIC0
Thumbnail6:29 Add to Added to queue
ME AND BOBBY MCGEE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
7,414 views
7 months ago
3bBuqF6IIC0
ZjxhPpJQEZ0
Thumbnail5:12 Add to Added to queue
BLUE MOON for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
10,136 views
7 months ago
ZjxhPpJQEZ0
SFc0rmhzSpQ
Thumbnail5:12 Add to Added to queue
CATCH THE WIND by DONOVAN for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,775 views
7 months ago
SFc0rmhzSpQ
Xu1RjVqJSlc
Thumbnail6:07 Add to Added to queue
HALLELUJAH for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
40,625 views
8 months ago
Xu1RjVqJSlc
Asxd5Jy50oY
Thumbnail7:45 Add to Added to queue
VINCENT by Don McLean for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,854 views
8 months ago
Asxd5Jy50oY
DgfqArU4EOE
Thumbnail4:44 Add to Added to queue
M.T.A. by THE KINGSTON TRIO for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,176 views
8 months ago
DgfqArU4EOE
jN_7972m9rI
Thumbnail5:07 Add to Added to queue
FOR ME AND MY GAL for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,182 views
8 months ago
jN_7972m9rI
PB-TT5WTZR8
Thumbnail5:01 Add to Added to queue
THE TIME OF MY LIFE by David Cook for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
7,395 views
8 months ago
PB-TT5WTZR8
yCfTh71H0sk
Thumbnail5:29 Add to Added to queue
SWEET CAROLINE by Neil Diamond for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
13,145 views
8 months ago
yCfTh71H0sk
dNpwi0lG-dQ
Thumbnail4:00 Add to Added to queue
SPAGHETTI BLUES for the UKULELE in F Maj - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,155 views
8 months ago
dNpwi0lG-dQ
kqbO7DHrHMA
Thumbnail4:53 Add to Added to queue
LOUIE LOUIE by the KINGSMEN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
7,522 views
8 months ago
kqbO7DHrHMA
NR8aZi02zbQ
Thumbnail6:37 Add to Added to queue
THE "HEAVENLY RIFF" FOR THE UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
12,793 views
8 months ago
NR8aZi02zbQ
JSJGFp31s_0
Thumbnail5:14 Add to Added to queue
THE MAN AND THE MOUNTAIN - 30th Anniversary of the Eruption Of Mt. St. Helens
2,499 views
8 months ago
JSJGFp31s_0
fwV96QkZn40
Thumbnail4:30 Add to Added to queue
UKULELE BLUES IN G - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
18,391 views
8 months ago
fwV96QkZn40
Vq72qMubQAE
Thumbnail2:02 Add to Added to queue
SMOKIN' RIFF FOR THE UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
9,128 views
8 months ago
Vq72qMubQAE
KtLW_2TJoas
Thumbnail4:14 Add to Added to queue
BATTLE OF NEW ORLEANS for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,647 views
8 months ago
KtLW_2TJoas
R7gYR3QDLE4
Thumbnail3:47 Add to Added to queue
LET ME CALL YOU SWEETHEART for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,167 views
8 months ago
R7gYR3QDLE4
YMbDMb6FrMI
Thumbnail9:22 Add to Added to queue
I'LL SEE YOU IN MY DREAMS for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
9,267 views
8 months ago
YMbDMb6FrMI
jOwoSJKS7Ok
Thumbnail7:18 Add to Added to queue
SISTERS OF SOUL - A UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
24,416 views
8 months ago
jOwoSJKS7Ok
66HBboUvvPo
Thumbnail3:28 Add to Added to queue
PEARLY SHELLS & THE HUKILAU SONG performed by Kindergarten & First Grade of Christ The King School
3,309 views
9 months ago
66HBboUvvPo
YVYahrk-AWs
Thumbnail3:39 Add to Added to queue
PHANTOM OF THE OPERA for UKULELE - Performed by my 6th Grade Ukulele Band
2,521 views
9 months ago
YVYahrk-AWs
GRZwfVYDMXk
Thumbnail6:55 Add to Added to queue
PACHELBEL CANON and STAIRWAY TO HEAVEN - My 7th Grade Bell Choir - Spring Review 2010
4,388 views
9 months ago
GRZwfVYDMXk
jEddP8UX7zo
Thumbnail6:33 Add to Added to queue
WON'T YOU COME HOME BILL BAILEY? - for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,126 views
9 months ago
jEddP8UX7zo
ZdbG4bSPUCs
Thumbnail9:42 Add to Added to queue
ODE TO JOY by Beethoven for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
11,374 views
9 months ago
ZdbG4bSPUCs
FGxYs4g9aiM
Thumbnail7:20 Add to Added to queue
DEVIL AND THE DEEP BLUE SEA for the Ukulele - UKULELE LESSON / TUTORIAL BY "UKULELE MIKE"
3,225 views
9 months ago
FGxYs4g9aiM
2nyO395jvFg
Thumbnail3:44 Add to Added to queue
SUNSHINE RIFF for the Ukulele - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,225 views
9 months ago
2nyO395jvFg
8MQcfsaJiG8
Thumbnail4:35 Add to Added to queue
OVER THE RAINBOW - UKULELE STRUM EXPLAINED - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
57,676 views
9 months ago
8MQcfsaJiG8
53R1IlQZqVY
Thumbnail9:38 Add to Added to queue
CHARLESTON - UKULELE SOLO LESSON / TUTORIAL by "UKULELE MIKE"
15,495 views
9 months ago
53R1IlQZqVY
MeYj_KkGYN4
Thumbnail7:37 Add to Added to queue
MY OLD KENTUCKY HOME for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,492 views
9 months ago
MeYj_KkGYN4
tnxvU9Ah9V0
Thumbnail7:14 Add to Added to queue
TIP TOE THROUGH THE TULIPS for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
7,615 views
9 months ago
tnxvU9Ah9V0
tNxxn6fZ8-A
Thumbnail8:08 Add to Added to queue
CRAZY G (FIRST SECTION) for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
12,327 views
9 months ago
tNxxn6fZ8-A
HD90BURlpk8
Thumbnail5:10 Add to Added to queue
CRAZY G for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,752 views
9 months ago
HD90BURlpk8
FItwsLMkNEg
Thumbnail2:08 Add to Added to queue
TAKE ME OUT TO THE BALL GAME for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,634 views
9 months ago
FItwsLMkNEg
MauY4VrVu3E
Thumbnail5:23 Add to Added to queue
WALTZING MATILDA for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,173 views
9 months ago
MauY4VrVu3E
rMEGqFyZSoQ
Thumbnail5:25 Add to Added to queue
BYE BYE BLACKBIRD for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,670 views
9 months ago
rMEGqFyZSoQ
uSDyn4Koneg
Thumbnail4:20 Add to Added to queue
BYE BYE BLUES for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,213 views
9 months ago
uSDyn4Koneg
aEgmcXrGVmE
Thumbnail5:14 Add to Added to queue
MY BLUE HEAVEN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,709 views
9 months ago
aEgmcXrGVmE
2OePIPGFUDY
Thumbnail4:50 Add to Added to queue
BLUE SKIES by IRVING BERLIN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,695 views
9 months ago
2OePIPGFUDY
bj1zO86cy2I
Thumbnail4:08 Add to Added to queue
SINGIN' IN THE RAIN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,306 views
9 months ago
bj1zO86cy2I
oBCGq2SbGPo
Thumbnail4:41 Add to Added to queue
WHEN YOU'RE SMILING for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,697 views
9 months ago
oBCGq2SbGPo
qjHJByXcMFg
Thumbnail3:03 Add to Added to queue
TONIGHT YOU BELONG TO ME for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
9,046 views
9 months ago
qjHJByXcMFg
cAE6TVc-EF0
Thumbnail7:25 Add to Added to queue
UKULELE LADY for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,921 views
9 months ago
cAE6TVc-EF0
tLr861VlcAM
Thumbnail4:44 Add to Added to queue
FIVE FOOT TWO for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,587 views
9 months ago
tLr861VlcAM
s-JlTP46BbM
Thumbnail3:11 Add to Added to queue
I'VE BEEN WORKING ON THE RAILROAD for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,620 views
10 months ago
s-JlTP46BbM
yHRvnY8wwto
Thumbnail5:10 Add to Added to queue
HE'S GOT THE WHOLE WORLD IN HIS HANDS for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,242 views
10 months ago
yHRvnY8wwto
Uo2wOsoadwE
Thumbnail4:06 Add to Added to queue
JINGLE BELLS for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,043 views
10 months ago
Uo2wOsoadwE
gT1ldEF6Oos
Thumbnail4:06 Add to Added to queue
ARE YOU SLEEPING? (Frère Jacques) for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,143 views
10 months ago
gT1ldEF6Oos
YgiWJ9zzj48
Thumbnail3:15 Add to Added to queue
OH SUSANNAH for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,009 views
10 months ago
YgiWJ9zzj48
GIW-cMUlTMQ
Thumbnail4:01 Add to Added to queue
THIS LITTLE LIGHT OF MINE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,773 views
10 months ago
GIW-cMUlTMQ
pEtelTMKlPM
Thumbnail2:31 Add to Added to queue
C, Am & F CHORDS A BASIC LESSON / TUTORIAL for the UKULELE by "UKULELE MIKE"
2,787 views
10 months ago
pEtelTMKlPM
YziJRJFNfdc
Thumbnail9:26 Add to Added to queue
VIDEO THAT INSPIRED "UKULELE BOY" - I'M YOURS - Taught by "UKULELE MIKE"
37,103 views
10 months ago
YziJRJFNfdc
AlQDAAn5KNQ
Thumbnail3:32 Add to Added to queue
WHEN IRISH EYES ARE SMILING for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,594 views
10 months ago
AlQDAAn5KNQ
lC9aKa64A9g
Thumbnail8:13 Add to Added to queue
HOUSE OF THE RISING SUN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
40,970 views
10 months ago
lC9aKa64A9g
uWHZc-xo9aI
Thumbnail5:33 Add to Added to queue
SOMEWHERE OVER THE RAINBOW for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
205,727 views
10 months ago
uWHZc-xo9aI
elTDFX9r_9k
Thumbnail3:17 Add to Added to queue
IF YOU'RE HAPPY AND YOU KNOW IT for the UKULELE - UKULELE LESSON - TUTORIAL by "UKULELE MIKE"
3,609 views
10 months ago
elTDFX9r_9k
rxku3NiHSWc
Thumbnail5:18 Add to Added to queue
TEDDY BEAR'S PICNIC for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,313 views
10 months ago
rxku3NiHSWc
3irQx5Ub2q8
Thumbnail3:32 Add to Added to queue
BY THE LIGHT OF THE SILVERY MOON for the UKULELE - UKULELE LESSONS / TUTORIAL by "UKULELE MIKE"
4,757 views
10 months ago
3irQx5Ub2q8
v1gC9CFcs4U
Thumbnail6:43 Add to Added to queue
SILENT NIGHT for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,791 views
10 months ago
v1gC9CFcs4U
-n9_PlRhEqM
Thumbnail8:36 Add to Added to queue
UKULELE MIKE TALKS ABOUT HIS UKES - "UKULELE MIKE" - Mike Lynch
12,483 views
10 months ago
-n9_PlRhEqM
l1oUap5p_IQ
Thumbnail3:23 Add to Added to queue
REPOST OF VIDEO MESSAGE FROM "UKULELE MIKE" 7-17-2009
2,148 views
10 months ago
l1oUap5p_IQ
o70y9MDWS4Q
Thumbnail3:41 Add to Added to queue
CLEMENTINE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE" - Michael Lynch
4,481 views
10 months ago
o70y9MDWS4Q
rLay8gAueBg
Thumbnail5:11 Add to Added to queue
HOME ON THE RANGE for UKULELE - UKULELE LESSON - TUTORIAL by "UKULELE MIKE"
2,858 views
10 months ago
rLay8gAueBg
k1iEYbvml0k
Thumbnail4:25 Add to Added to queue
BICYCLE BUILT FOR TWO (DAISY BELL) for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,817 views
10 months ago
k1iEYbvml0k
J_dIPS9R8kU
Thumbnail4:18 Add to Added to queue
4 VERY USEFUL STRUMS IN 4/4 TIME for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
27,319 views
10 months ago
J_dIPS9R8kU
hu6nE_Mifeg
Thumbnail5:19 Add to Added to queue
VERY USEFUL 3/4 STRUMS for the UKULELE - UKULELE LESSONS / TUTORIAL by "UKULELE MIKE"
8,219 views
10 months ago
hu6nE_Mifeg
LYYCChmhEfk
Thumbnail9:56 Add to Added to queue
BASIC CHORDS FOR 4 COMMON KEYS for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
9,468 views
10 months ago
LYYCChmhEfk
mdmpMEacN5k
Thumbnail5:36 Add to Added to queue
TUNE YOUR UKE TO YOUR UKE by "UKULELE MIKE"
2,551 views
10 months ago
mdmpMEacN5k
IhVeBNeucYg
Thumbnail1:23 Add to Added to queue
QUICK TUNE-UP the UKULELE by "UKULELE MIKE"
4,225 views
10 months ago
IhVeBNeucYg
XRGm5wexto4
Thumbnail7:54 Add to Added to queue
TUNING THE UKULELE by "UKULELE MIKE"
4,824 views
10 months ago
XRGm5wexto4
59EPwfOey0U
Thumbnail2:56 Add to Added to queue
G7th CHORD & SHUFFLE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,987 views
10 months ago
59EPwfOey0U
H5NMQlDWFOc
Thumbnail3:46 Add to Added to queue
THE LION SLEEPS TONIGHT for the UKULELE - UKULELE LESSONS / TUTORIALS by "UKULELE MIKE"
44,480 views
10 months ago
H5NMQlDWFOc
KEQj7BTJLNg
Thumbnail8:34 Add to Added to queue
SLOOP JOHN B for the UKULELE - UKULELE LESSONS / TUTORIAL by "UKULELE MIKE"
7,106 views
10 months ago
KEQj7BTJLNg
VrDz5Vk2XJw
Thumbnail4:26 Add to Added to queue
CAROLINA IN THE MORNING for the UKULELE - UKULELE LESSON - TUTORIAL by "UKULELE MIKE"
2,825 views
10 months ago
VrDz5Vk2XJw
wtM8H0QQVXg
Thumbnail3:16 Add to Added to queue
SWING LOW SWEET CHARIOT for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,158 views
10 months ago
wtM8H0QQVXg
uyXAAXVaRoU
Thumbnail5:03 Add to Added to queue
12 BAR BLUES for the UKULELE - UKULELE LESSONS / TUTORIAL by "UKULELE MIKE"
23,578 views
10 months ago
uyXAAXVaRoU
pYdTCSgdv4g
Thumbnail2:23 Add to Added to queue
ON MOONLIGHT BAY for UKULELE - UKULELE LESSONS / TUTORIAL by "UKULELE MIKE"
3,306 views
10 months ago
pYdTCSgdv4g
h09MCyDUeWI
Thumbnail9:32 Add to Added to queue
SCARBOROUGH FAIR for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
9,287 views
10 months ago
h09MCyDUeWI
DJC75aML62E
Thumbnail4:20 Add to Added to queue
MORNING HAS BROKEN for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,484 views
10 months ago
DJC75aML62E
JC5LuOyo-0k
Thumbnail4:39 Add to Added to queue
OH DANNY BOY for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
10,169 views
10 months ago
JC5LuOyo-0k
dnA3T8uuuoY
Thumbnail4:03 Add to Added to queue
YOU ARE MY SUNSHINE for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
31,597 views
10 months ago
dnA3T8uuuoY
5G6X1wNqizI
Thumbnail7:27 Add to Added to queue
UKULELE BARRE CHORD LESSON - UKULELE LESSON / TUTORIAL BY "UKULELE MIKE"
5,275 views
10 months ago
5G6X1wNqizI
uQHjSIBvRzo
Thumbnail5:24 Add to Added to queue
MICHAEL ROW THE BOAT ASHORE for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,812 views
10 months ago
uQHjSIBvRzo
GVaSzUBCYEE
Thumbnail5:09 Add to Added to queue
OH SHENANDOAH for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,710 views
10 months ago
GVaSzUBCYEE
Zj-xa9sLNyY
Thumbnail9:57 Add to Added to queue
AMAZING GRACE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
29,773 views
10 months ago
Zj-xa9sLNyY
aT6mCQO5hKk
Thumbnail8:49 Add to Added to queue
UKULELE BLUES IMPROVISATION - Taught by "UKULELE MIKE"
28,562 views
10 months ago
aT6mCQO5hKk
ibU0p3KQh4k
Thumbnail3:32 Add to Added to queue
PARIS NOCTURNE - ORIGINAL UKULELE COMPOSITION BY "UKULELE MIKE"
11,534 views
10 months ago
ibU0p3KQh4k
5QptdcF13ro
Thumbnail7:45 Add to Added to queue
TRAVIS PICKING for the Ukulele by "UKULELE MIKE"
6,688 views
1 year ago 

71sJONAA08M
Thumbnail5:40 Add to Added to queue
FOR NO ONE by Lennon & McCartney - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,131 views
5 months ago
71sJONAA08M
7NUAXeQioR0
Thumbnail5:10 Add to Added to queue
PLEASE PLEASE ME for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,472 views
8 months ago
7NUAXeQioR0
9GG5VezCvzk
Thumbnail9:22 Add to Added to queue
I'LL SEE YOU IN MY DREAMS for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,084 views
8 months ago
9GG5VezCvzk
J2ZscNWNbTQ
Thumbnail7:20 Add to Added to queue
DEVIL AND THE DEEP BLUE SEA as performed by GEORGE HARRISON
2,402 views
8 months ago
J2ZscNWNbTQ
3mKdhkOZVpo
Thumbnail4:00 Add to Added to queue
I SAW HER STANDING THERE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,699 views
9 months ago
3mKdhkOZVpo
Qservdg0BfI
Thumbnail8:25 Add to Added to queue
DO YOU WANNA KNOW A SECRET? - for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
7,388 views
9 months ago
Qservdg0BfI
Ohb66-rpGsw
Thumbnail5:54 Add to Added to queue
EVERY LITTLE THING for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,378 views
9 months ago
Ohb66-rpGsw
igh--A-124M
Thumbnail8:20 Add to Added to queue
IF I FELL by The Beatles for Ukulele - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
14,063 views
9 months ago
igh--A-124M
2YF5oqw-elk
Thumbnail5:58 Add to Added to queue
FROM ME TO YOU for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,625 views
9 months ago
2YF5oqw-elk
zHzksR96QaE
Thumbnail8:26 Add to Added to queue
I'M LOOKING THROUGH YOU for the Ukulele - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,109 views
9 months ago
zHzksR96QaE
rAgI_jQWObk
Thumbnail9:14 Add to Added to queue
TILL THERE WAS YOU as done by The Beatles - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
10,243 views
10 months ago
rAgI_jQWObk
47zIx-rbU8Q
Thumbnail5:49 Add to Added to queue
AIN'T SHE SWEET for the UKULELE as done by the BEATLES - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
9,195 views
10 months ago
47zIx-rbU8Q
bfjFA3XasCM
Thumbnail4:18 Add to Added to queue
ROLL OVER BEETHOVEN - R&B UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE'
5,312 views
10 months ago
bfjFA3XasCM
z1QVl2mPyuI
Thumbnail3:34 Add to Added to queue
MOTHER NATURE'S SON for the UKULELE - UKULELE LESSONS / TUTORIAL by "UKULELE MIKE"
2,669 views
10 months ago
z1QVl2mPyuI
f7JyXBjf2e4
Thumbnail4:02 Add to Added to queue
I WANNA HOLD YOUR HAND for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
8,599 views
10 months ago
f7JyXBjf2e4
9LnREUaLLsw
Thumbnail9:43 Add to Added to queue
IN MY LIFE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
10,520 views
10 months ago
9LnREUaLLsw
MkrLw_9LBZo
Thumbnail6:52 Add to Added to queue
IMAGINE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
15,677 views
10 months ago
MkrLw_9LBZo
OYp779YlzHo
Thumbnail5:54 Add to Added to queue
AND I LOVE HER for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,099 views
10 months ago
OYp779YlzHo
Q96RlsP-mM8
Thumbnail4:26 Add to Added to queue
MERRY XMAS (WAR IS OVER) for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,416 views
10 months ago
Q96RlsP-mM8
7TRXfRHszEE
Thumbnail3:46 Add to Added to queue
ALL YOU NEED IS LOVE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
8,226 views
10 months ago
7TRXfRHszEE
-cUAJise1yA
Thumbnail8:55 Add to Added to queue
YESTERDAY by the Beatles for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
31,318 views
10 months ago
-cUAJise1yA
hRH2jR9HXtc
Thumbnail8:10 Add to Added to queue
MICHELLE by the Beatles for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
9,900 views
10 months ago
hRH2jR9HXtc
6mdM7X-8Hn4
Thumbnail3:11 Add to Added to queue
SHE LOVES YOU for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,369 views
10 months ago
6mdM7X-8Hn4
T_Wa1axN9Ys
Thumbnail3:46 Add to Added to queue
LITTLE HELP FROM MY FRIENDS for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,499 views
10 months ago
T_Wa1axN9Ys
Ls5mV7fVHcY
Thumbnail5:40 Add to Added to queue
P.S. I LOVE YOU for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,108 views
10 months ago
Ls5mV7fVHcY
PO4kQ55L39M
Thumbnail2:52 Add to Added to queue
EIGHT DAYS A WEEK for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,852 views
10 months ago
PO4kQ55L39M
O9wdnjBqYq4
Thumbnail6:57 Add to Added to queue
HERE, THERE AND EVERYWHERE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,922 views
10 months ago
O9wdnjBqYq4
rDokuQisn2Q
Thumbnail4:40 Add to Added to queue
BLACKBIRD for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
15,887 views
10 months ago
rDokuQisn2Q
YeTJeacAC-o
Thumbnail5:56 Add to Added to queue
LET IT BE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
16,070 views
10 months ago
YeTJeacAC-o
IzNR41YLja4
Thumbnail3:34 Add to Added to queue
PENNY LANE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
7,618 views
10 months ago
IzNR41YLja4
QvA71Pg_6f0
Thumbnail3:30 Add to Added to queue
OBLADI-OBLADA for the UKULELE - INSPIRATION FOR THE "UKULELE BOY" taught by "UKULELE MIKE"
14,986 views
10 months ago
QvA71Pg_6f0
5IO_XwuOrLo
Thumbnail9:34 Add to Added to queue
HARD DAY'S NIGHT for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,745 views
10 months ago
5IO_XwuOrLo
k8BSFr_tXhU
Thumbnail3:16 Add to Added to queue
I'VE JUST SEEN A FACE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,405 views
10 months ago
k8BSFr_tXhU
jjY8OFmNybU
Thumbnail5:35 Add to Added to queue
HEY JUDE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
26,941 views
10 months ago
jjY8OFmNybU
dTMW1HvbVQA
Thumbnail4:16 Add to Added to queue
OCTOPUSES GARDEN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,473 views
10 months ago
dTMW1HvbVQA
Q06MEYc2_tE
Thumbnail3:03 Add to Added to queue
DANCE TONIGHT for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,264 views
10 months ago
Q06MEYc2_tE
DeueRLwdogY
Thumbnail3:12 Add to Added to queue
HERE COMES THE SUN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
46,526 views
10 months ago
DeueRLwdogY
OD5Ywup4-TE
Thumbnail3:49 Add to Added to queue
THE YELLOW SUBMARINE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,694 views
10 months ago
OD5Ywup4-TE
-2YmmW3vPyE
Thumbnail2:49 Add to Added to queue
SOMETHING for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,544 views
10 months ago
-2YmmW3vPyE
zaqTO2y-l3E
Thumbnail2:04 Add to Added to queue
HERE, THERE, AND EVERYWHERE for the UKULELE - UKULELE LESSON by "UKULELE MIKE"
1,196 views
10 months ago
zaqTO2y-l3E
TOWDUc3BF7c
Thumbnail3:16 Add to Added to queue
HELP by the Beatles for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,293 views
10 months ago
TOWDUc3BF7c
LzYnQQSnHtU
Thumbnail4:06 Add to Added to queue
I WILL for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,165 views
10 months ago
LzYnQQSnHtU
HsrJbuoiNG4
Thumbnail4:42 Add to Added to queue
GOOD DAY SUNSHINE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,303 views
10 months ago
HsrJbuoiNG4
IRsLwkhhC_o
Thumbnail5:22 Add to Added to queue
ELEANOR RIGBY for the UKULELE - UKULELE LESSON /. TUTORIAL by "UKULELE MIKE"
4,465 views
10 months ago
IRsLwkhhC_o
dy0N7unQDHU
Thumbnail4:25 Add to Added to queue
ALL MY LOVING for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
9,829 views
10 months ago
dy0N7unQDHU
YzjCuODkyWw
Thumbnail2:48 Add to Added to queue
CAN'T BUY ME LOVE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,750 views
10 months ago
YzjCuODkyWw
r82fxvGM3RY
Thumbnail8:30 Add to Added to queue
DAY TRIPPER for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,570 views
10 months ago 

kWMtgip-dLM
Thumbnail3:20 Add to Added to queue
CALENDAR GIRL - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,801 views
4 months ago
kWMtgip-dLM
hWaxCzduKws
Thumbnail6:06 Add to Added to queue
I STILL HAVN'T FOUND WHAT I'M LOOKING FOR : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,816 views
4 months ago
hWaxCzduKws
J9wDdCBj9Pw
Thumbnail6:34 Add to Added to queue
DEFYING GRAVITY for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
865 views
4 months ago
J9wDdCBj9Pw
zxG5KljyvrA
Thumbnail4:05 Add to Added to queue
MONDAY, MONDAY for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
560 views
4 months ago
zxG5KljyvrA
4H_WQ2LsYJs
Thumbnail9:26 Add to Added to queue
I'M YOURS for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,230 views
4 months ago
4H_WQ2LsYJs
Q_uw1rbvkb4
Thumbnail6:27 Add to Added to queue
TURN AROUND for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
673 views
4 months ago
Q_uw1rbvkb4
tFQkSKQgbo4
Thumbnail2:59 Add to Added to queue
DO YOU BELIEVE IN MAGIC for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
860 views
4 months ago
tFQkSKQgbo4
qXeotCMJ5pg
Thumbnail4:28 Add to Added to queue
MAGIC for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
528 views
4 months ago
qXeotCMJ5pg
kaHcNlV_GVo
Thumbnail4:24 Add to Added to queue
I BELIEVE IN MUSIC for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,230 views
4 months ago
kaHcNlV_GVo
N1x-1L-6-b0
Thumbnail3:30 Add to Added to queue
I CAN SEE CLEARLY NOW for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,774 views
4 months ago
N1x-1L-6-b0
rpJUjW9P040
Thumbnail5:12 Add to Added to queue
YOU RAISE ME UP for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,317 views
4 months ago
rpJUjW9P040
CLroOqddNX0
Thumbnail3:47 Add to Added to queue
BLACK HORSE AND THE CHERRY TREE for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
805 views
4 months ago
CLroOqddNX0
LnSf4Qc53as
Thumbnail3:48 Add to Added to queue
MY HEART WILL GO ON for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
998 views
4 months ago
LnSf4Qc53as
TmAiAzYIRt0
Thumbnail6:44 Add to Added to queue
THE CLIMB for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
735 views
4 months ago
TmAiAzYIRt0
npi_s5BQLOA
Thumbnail4:11 Add to Added to queue
DUST IN THE WIND for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,901 views
4 months ago
npi_s5BQLOA
tncG7tebvYs
Thumbnail7:03 Add to Added to queue
NIGHTS IN WHITE SATIN for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,112 views
4 months ago
tncG7tebvYs
Un7PDHXBovk
Thumbnail5:05 Add to Added to queue
I'M A BELIEVER for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,324 views
4 months ago
Un7PDHXBovk
Z8zvP3EA-wQ
Thumbnail5:56 Add to Added to queue
PAINT IT BLACK for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,988 views
4 months ago
Z8zvP3EA-wQ
__aSiSV_uzc
Thumbnail5:18 Add to Added to queue
THE GAMBLER for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
905 views
4 months ago
__aSiSV_uzc
6xYbu_XKUxI
Thumbnail4:39 Add to Added to queue
I'M IN THE MOOD FOR LOVE for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
596 views
4 months ago
6xYbu_XKUxI
c8vybh4k97k
Thumbnail6:07 Add to Added to queue
PENNIES FROM HEAVEN for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
631 views
4 months ago
c8vybh4k97k
Ce33j0BMhAQ
Thumbnail4:22 Add to Added to queue
SECRET AGENT MAN for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
730 views
4 months ago
Ce33j0BMhAQ
ASYAi763LHw
Thumbnail3:37 Add to Added to queue
EVERYDAY for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
881 views
4 months ago
ASYAi763LHw
36qGAFSR6bk
Thumbnail6:12 Add to Added to queue
IN THE MOOD for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,327 views
4 months ago
36qGAFSR6bk
G8xFjnM35Oc
Thumbnail6:49 Add to Added to queue
MISTER SANDMAN for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,109 views
4 months ago
G8xFjnM35Oc
HeNr-GYCSNI
Thumbnail6:34 Add to Added to queue
UNCHAINED MELODY for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,134 views
4 months ago
HeNr-GYCSNI
A5Qs2IqwExU
Thumbnail6:56 Add to Added to queue
MOON RIVER for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,304 views
4 months ago
A5Qs2IqwExU
QGCUGVE11XU
Thumbnail5:44 Add to Added to queue
SPIDERMAN for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,786 views
4 months ago
QGCUGVE11XU
u6sbfx3lMgQ
Thumbnail5:12 Add to Added to queue
BEYOND THE SEA for the UKULELE : UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,185 views
4 months ago
u6sbfx3lMgQ
HNLAt17Ggng
Thumbnail4:21 Add to Added to queue
FLY ME TO THE MOON for the UKULELE: UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,787 views
4 months ago 

RQzQQublBkE
Thumbnail8:51 Add to Added to queue
FOREVER IN BLUE JEANS for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,175 views
8 months ago
RQzQQublBkE
PkmjFmWPkdo
Thumbnail3:42 Add to Added to queue
CLOSE TO YOU by The Carpenters for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,458 views
8 months ago
PkmjFmWPkdo
2LIfEYLf17k
Thumbnail4:53 Add to Added to queue
LOUIE LOUIE by the KINGSMEN for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,478 views
8 months ago
2LIfEYLf17k
7CJtZpbQMkg
Thumbnail5:32 Add to Added to queue
A SUMMER SONG for the Ukulele - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,330 views
8 months ago
7CJtZpbQMkg
kZUtWGpOFpI
Thumbnail2:43 Add to Added to queue
ON TOP OF SPAGHETTI for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,206 views
8 months ago
kZUtWGpOFpI
CkBoBoZYieo
Thumbnail6:37 Add to Added to queue
THE "HEAVENLY" RIFF for UKULELE - UKULELE LESSON / TUTORIAL BY "UKULELE MIKE"
3,615 views
8 months ago
CkBoBoZYieo
usH3LrkmRbU
Thumbnail9:22 Add to Added to queue
I'LL SEE YOU IN MY DREAMS for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,636 views
8 months ago
usH3LrkmRbU
UDK384r4Nvk
Thumbnail3:54 Add to Added to queue
YOU'VE GOT A FRIEND IN ME for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
11,073 views
8 months ago
UDK384r4Nvk
eg3qLl3ZVSU
Thumbnail2:23 Add to Added to queue
MOONLIGHT BAY for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,426 views
8 months ago
eg3qLl3ZVSU
phs5nMDxI14
Thumbnail4:06 Add to Added to queue
THE UNICORN SONG for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,475 views
8 months ago
phs5nMDxI14
tJILXWjKyh0
Thumbnail4:15 Add to Added to queue
CALIFORNIA GIRLS for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
12,820 views
8 months ago
tJILXWjKyh0
4Gvc03e-bQQ
Thumbnail4:02 Add to Added to queue
TIE ME KANGAROO DOWN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,700 views
8 months ago
4Gvc03e-bQQ
hgQ5mCcHy_s
Thumbnail3:03 Add to Added to queue
WHAT A DAY FOR A DAYDREAM for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,859 views
8 months ago
hgQ5mCcHy_s
H0bK2SabbBc
Thumbnail5:13 Add to Added to queue
TOP OF THE WORLD for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,317 views
8 months ago
H0bK2SabbBc
8slojOTfs8Y
Thumbnail4:38 Add to Added to queue
MELE KALIKIMAKA for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
11,751 views
8 months ago
8slojOTfs8Y
OjUqV3isZFo
Thumbnail4:41 Add to Added to queue
WHEN YOUR SMILING for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,150 views
8 months ago
OjUqV3isZFo
cbJgm0iHw5g
Thumbnail5:31 Add to Added to queue
BUILD ME UP BUTTERCUP for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
10,393 views
8 months ago
cbJgm0iHw5g
GVrgZW0BNW8
Thumbnail5:33 Add to Added to queue
SOMEWHERE OVER THE RAINBOW for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
12,010 views
8 months ago
GVrgZW0BNW8
hfaStgBDnog
Thumbnail8:34 Add to Added to queue
SLOOP JOHN B for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,428 views
8 months ago
hfaStgBDnog
FpcHG4iOPUo
Thumbnail3:43 Add to Added to queue
SURFIN SAFARI for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,645 views
8 months ago
FpcHG4iOPUo
nxbpo9_7uAU
Thumbnail4:16 Add to Added to queue
OCTOPUSES GARDEN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,635 views
8 months ago
nxbpo9_7uAU
PLY5arJ61m4
Thumbnail7:25 Add to Added to queue
UKULELE LADY for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,499 views
8 months ago
PLY5arJ61m4
gNXqTfLA4QI
Thumbnail3:03 Add to Added to queue
DANCE TONIGHT for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,025 views
8 months ago
gNXqTfLA4QI
STAXzcPebHU
Thumbnail3:46 Add to Added to queue
FAME for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
954 views
8 months ago
STAXzcPebHU
C_9Q88mZP5k
Thumbnail3:12 Add to Added to queue
HERE COMES THE SUN for the UKULELE - UKULELE PERFORMANCE by "UKULELE MIKE"
4,297 views
8 months ago
C_9Q88mZP5k
zSw97rEH6BM
Thumbnail4:54 Add to Added to queue
MARGARITIVILLE for the UKULELE - UKULELE LESSON / UKULELE TUTORIAL by "UKULELE MIKE"
3,533 views
8 months ago
zSw97rEH6BM
_XR9uZGaISs
Thumbnail5:12 Add to Added to queue
BEYOND THE SEA for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,386 views
8 months ago
_XR9uZGaISs
3GSqRIe-qc4
Thumbnail3:03 Add to Added to queue
TONIGHT YOU BELONG TO ME for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,773 views
8 months ago
3GSqRIe-qc4
-YoBAiC3PVk
Thumbnail2:48 Add to Added to queue
WHAT A WONDERFUL WORLD for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
7,341 views
8 months ago
-YoBAiC3PVk
c-cC5RMk4cA
Thumbnail3:30 Add to Added to queue
OBLADI-OBLADA for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,592 views
8 months ago
c-cC5RMk4cA
fGCR8AOVyZw
Thumbnail6:53 Add to Added to queue
DON'T STOP BELIEVIN' for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE'
8,597 views
8 months ago
fGCR8AOVyZw
aL7l_dz0SQ4
Thumbnail5:25 Add to Added to queue
THE HONEY TREE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
495 views
8 months ago
aL7l_dz0SQ4
sOYgtaYFJhc
Thumbnail4:03 Add to Added to queue
YOU ARE MY SUNSHINE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,854 views
8 months ago
sOYgtaYFJhc
n-8AUcxS8PA
Thumbnail6:45 Add to Added to queue
WALKING ON SUNSHINE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKUKEKE MIKE"
4,234 views
8 months ago
n-8AUcxS8PA
A-3_52LY0Yg
Thumbnail5:47 Add to Added to queue
KOKOMO for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,875 views
8 months ago
A-3_52LY0Yg
-gqVxjAaI88
Thumbnail4:38 Add to Added to queue
I'LL BE THERE FOR YOU for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,129 views
8 months ago
-gqVxjAaI88
XJFFJnrkIxs
Thumbnail5:07 Add to Added to queue
WHITE SANDY BEACH for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,683 views
8 months ago
XJFFJnrkIxs
v49ah-fjCjQ
Thumbnail9:59 Add to Added to queue
AMERICAN PIE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,996 views
8 months ago
v49ah-fjCjQ
YtJrPczapxs
Thumbnail3:49 Add to Added to queue
THE YELLOW SUBMARINE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,476 views
8 months ago
YtJrPczapxs
l_nzYZNCD3I
Thumbnail3:04 Add to Added to queue
CALIFORNIA DREAMIN for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
5,547 views
8 months ago
l_nzYZNCD3I
YE3kQD-mfWc
Thumbnail2:47 Add to Added to queue
THE HUKILAU SONG for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,661 views
8 months ago
YE3kQD-mfWc
ZDSQCX9IZK0
Thumbnail4:41 Add to Added to queue
RAINBOW CONNECTION for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,266 views
8 months ago
ZDSQCX9IZK0
DXgdW1QcGTQ
Thumbnail3:45 Add to Added to queue
JOY TO THE WORLD for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
1,292 views
8 months ago
DXgdW1QcGTQ
ERRBHlvvv-0
Thumbnail3:32 Add to Added to queue
PEARLY SHELLS for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,775 views
8 months ago
ERRBHlvvv-0
jn76T2F_Uvs
Thumbnail3:13 Add to Added to queue
SURFIN' USA for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,762 views
8 months ago
jn76T2F_Uvs
Re0wquxBzHc
Thumbnail4:28 Add to Added to queue
HAPPY TOGETHER for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE'
3,806 views
8 months ago
Re0wquxBzHc
CMFXTqPYMrg
Thumbnail6:34 Add to Added to queue
WIPE OUT for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,639 views
8 months ago
CMFXTqPYMrg
B1TXg0HNz1s
Thumbnail3:31 Add to Added to queue
THE BARE NECESSITIES for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,637 views
8 months ago
B1TXg0HNz1s
YZTZjvoOh-8
Thumbnail7:44 Add to Added to queue
SURFER GIRL for the UKULELE - LESSON / TUTORIAL by "UKULELE MIKE"
2,140 views
8 months ago
YZTZjvoOh-8
sS2AcI3k2y8
Thumbnail8:13 Add to Added to queue
YELLOW BIRD for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,015 views
8 months ago
sS2AcI3k2y8
AV1jkoqqfd4
Thumbnail2:14 Add to Added to queue
FEELING GROOVY by SIMON & GARFUNKEL for the UKULELE - by "UKULELE MIKE"
3,512 views
8 months ago 

hvHkhcCcQ-Q
Thumbnail6:25 Add to Added to queue
CAN YOU FEEL THE LOVE TONIGHT? - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,554 views
3 months ago
hvHkhcCcQ-Q
CabO6FBDIQQ
Thumbnail4:18 Add to Added to queue
IT'S A SMALL WORLD for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,898 views
8 months ago
CabO6FBDIQQ
1EqLzuDIR80
Thumbnail2:17 Add to Added to queue
A WHALE OF A TALE for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,197 views
8 months ago
1EqLzuDIR80
z_bOa4Z07Vk
Thumbnail5:15 Add to Added to queue
CHIM CHIM CHEREE from Mary Poppins for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,231 views
8 months ago
z_bOa4Z07Vk
0qT8fgBmQiE
Thumbnail5:42 Add to Added to queue
COLORS OF THE WIND for the UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,919 views
8 months ago
0qT8fgBmQiE
heHqUP2Cyl0
Thumbnail4:39 Add to Added to queue
ZIP A DEE DOO DAH for the Ukulele - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
3,110 views
8 months ago
heHqUP2Cyl0
ebnTOh9UCPU
Thumbnail4:41 Add to Added to queue
RAINBOW CONNECTION for the Ukulele - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,119 views
8 months ago
ebnTOh9UCPU
aA4jhrGs7mY
Thumbnail3:54 Add to Added to queue
YOU'VE GOT A FRIEND IN ME for Ukulele - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
7,102 views
8 months ago
aA4jhrGs7mY
paZcHZBU37k
Thumbnail3:31 Add to Added to queue
THE BARE NECESSITIES for Ukulele - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
4,164 views
8 months ago
paZcHZBU37k
3Wr8I2tveNU
Thumbnail6:10 Add to Added to queue
WHEN YOU WISH UPON A STAR for Ukulele - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
2,840 views
8 months ago
3Wr8I2tveNU
JqTIdLJTtQU
Thumbnail7:45 Add to Added to queue
UNDER THE SEA for UKULELE - UKULELE LESSON / TUTORIAL by "UKULELE MIKE"
6,870 views
8 months ago 
<<player http://www.youtube.com/embed/U9GzVSDWZ9E 320 240>>
<<uChord "G Am D C Bm Em A7 D7">>

<<uChord "G Am D C G">>
<<uChord "G Bm Em A7 D Dsus4 D">>
Strum D DUDU
//{{{
G 	           Am	D        C    G
Morning has broken, like the first morning,
G                Bm Em    A7        D Dsus4 D
Blackbird has spoken, Like the first bird.
G 	           Am	G                   Em A
Praise for the singing, Praise for the m	orning,
D                     G	C      D7    G Gsus4 G 
Praise for them spring	ing, Fresh from the world.  	 	 	 	 	 	 	 	

G 	           Am	D        C    G
Sweet's the rain's new fall, sunlight from heaven,
G                Bm Em    A7        D Dsus4 D
Like the first dewfall, on the first grass.
G 	             C              G     Em A
Praise for the sweetness, o	f the wet garden,
D                     G	C      D7    G Gsus4 G
Sprung in completeness, w	here his feet pass.  	 	 	 	 	 	 	 	

chords not correct below
 	C	Dm	G	F	C
M	ine is the sunli	ght, m	ine is the m	orn	ing,
 	Em	Am	D	G
Born of the o	ne l	ight, E	den saw p	lay.
 	C	F	C	Am	D
P	raise with ela	tion, p	raise every m	orn	ing,
 	G	C	F	G7	C	C	F	G	E	Am	F	G	C
G	od's recrea	ti	on, o	f the new d	ay.  	 	 	 	 	 	 	 	

 	C	Dm	G	F	C
M	orning has brok	en, l	ike the first m	orni	ng,
 	Em	Am	D	G
Blackbird has s	pok	en, L	ike the first b	ird.
 	C	F	C	Am	D
P	raise for the s	inging, P	raise for the m	orn	ing,
 	G	C	F	G7	C	C	F	G	E	Am	F	G	C
P	raise for them s	pring	ing, F	resh from the w	orld.  	 	 	 	 	 	 	 	
//}}}


<<player id=1 http://www.youtube.com/embed/e0TInLOJuUM 320 240>>
<<player id=2 http://www.youtube.com/embed/DJC75aML62E 320 240>>
Key of F <<uChord n:'F Bb C7 / Dm' s:'l'>>
Key of C <<uChord n:'C F G7 / Am' s:'l'>>
Key of G <<uChord n:'G C D7 / Em' s:'l'>>
Key of D <<uChord n:'D G A7 / Bm' s:'l'>>

[[Ukulele Mike|http://www.youtube.com/user/MusicTeacher2010#p/u/28/LYYCChmhEfk]]
<<player http://www.youtube.com/embed/JC5LuOyo-0k#t=0m50s 360 240>>
All chords in this song: <<uChord 'C C7 F Am G7'>>
D-DU D-DU 'Church-lick strum'
Note: There are some quick changes.
Rating: 5/10
<<uChord n:
'Oh [C]Danny boy, [C7]the pipes, the pipes [F]are calling' in:cl>>
<<uChord n:
'From glen to [C]glen, and [Am]down the [G7]mountain side' in:cl>>
<<uChord n:
'The summers [C]gone, and all [C7]the flowers are [F]dying' in:cl>>
<<uChord n:
'Tis you, [C]tis you [G7]must go and [C]I must bide.' in:cl>>
<<uChord 'G7 Am F C'>>[G7]But come ye [Am]back when [F]summer's in the [C]meadow
<<uChord 'G7 Am F G7'>>Or [G7]when the [Am]valley's [F]hushed and white with [G7]snow
<<uChord 'C F C F'>>'Tis I'll be [C]there in [F]sunshine or in [C]shadow[F]
<<uChord 'C F G7 C'>>Oh Danny [C]boy, oh Danny [F]boy, I [G7]love you [C]so.

And if you come, when all the flowers are dying
And I am dead, as dead I well may be
You'll come and find the place where I am lying
And kneel and say an "Ave" there for me.

And I shall hear, tho' soft you tread above me
And all my dreams will warm and sweeter be
If you'll not fail to tell me that you love me
I'll simply sleep in peace until you come to me.

I'll simply sleep in peace until you come to me. 
<<uChord "Am Dsus2 F7 G">>
intro: Am  Dsus2  Fmaj7  G


Am              Dsus2    
  Is it getting better        
Fmaj7                   G
     Or do you feel the same
Am                Dsus2             
  Will it make it easier on you now
Fmaj7                      G
     you've got someone to blame


         C        Am        
you say   one love  one life
Fmaj7                  C
     when its one need  in the night
        Am
one love  we get to share it 
Fmaj7                         C              Am  Dsus2 Fmaj7 G
     it leaves you baby if you dont care for it


Am           Dsus2     
  Did I disappoint you
Fmaj7                            G
     Or leave a bad taste in your mouth
Am                       Dsus2   
  You act like you never had love
Fmaj7                          G
     and you want me to go without


         C        Am       
Well it's too late  tonight
Fmaj7                       C
     to drag the past out into the light
                    Am
We're one, but we're  not the same
         Fmaj7                    C              
We get to     carry each other carry each other
  Am  Dsus2 Fmaj7 G
one


Am                          Dsus2
  Have you come here for forgiveness?
Fmaj7                           G
     Have you come to raise the dead?
Am                           Dsus2
  Have you come here to play Jesus
Fmaj7                      G     
     To the lepers in your head?


C                  Am
 Did I ask too much  more than a lot
Fmaj7                            C
     You gave me nothing now it's all I got
                   Am
We're one but we're  not the same
       Fmaj7                        C
Well we     hurt each other then we do it again


       C                   Am
You Say Love is a temple, Love a higher law
 C                 Am
Love is a temple, Love the higher law
    C                    G
You ask me to enter, but then you make me crawl
		         Fmaj7
And I can't be holding on     to what you got
		     C           Am
When all you got is hurt one love  one blood
Fmaj7                    C
     One life you got to do what you should
        Am               Fmaj7       C 
One life  with each other     Sisters brothers
                  Am
One life but we're  not the same
         Fmaj7                    C           
We get to     carry each other carry each other
  C  Am  Fmaj7  C     C  Am  Fmaj7  C
One    One          One    One
[[What Uke Players Really Want To Know|https://www.smashwords.com/books/download/37988/1/null/0/0/what-ukulele-players-really-want-to-know.pdf]]
<<uChord 'G D C D7'>>
[G]Strike up the music the band has begun [D]The Pennsylvania Polka
[D]Pick out your partner and join in the fun [G]The Pennsylvania Polka
[G]It started in Scranton. It's now number one [C] It's bound to entertain ya
Everybody [D7]has a [G] mania to do [D7] the polka from [G]Pennsylvania

[C]While they're dancing
Everybody's cares are quickly gone
Sweet romancing
This goes on and on until the dawn.
They're so carefree
Gay with laughter, happy as can be
They stop to have a beer
Then the crowd begins to cheer
They kiss and then they start to dance again.

Strike up the music the band has begun
The Pennsylvania Polka
Pick out your partner and join in the fun
The Pennsylvania Polka
It started in Scranton. It's now number one
It's bound to entertain ya
Everybody has a mania to do the polka from Pennsylvania.
/***
|Name|PlayerPlugin|
|Source|http://www.TiddlyTools.com/#PlayerPlugin|
|Version|1.1.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Embed a media player in a tiddler|
!!!!!Usage
<<<
{{{<<player [id=xxx] [type] [URL] [width] [height] [autoplay|true|false] [showcontrols|true|false] [extras]>>}}}

''id=xxx'' is optional, and specifies a unique identifier for each embedded player.  note: this is required if you intend to display more than one player at the same time.

''type'' is optional, and is one of the following: ''windows'', ''realone'', ''quicktime'', ''flash'', ''image'' or ''iframe''.  If the media type is not specified, the plugin automatically detects Windows, Real, QuickTime, Flash video or JPG/GIF images by matching known file extensions and/or specialized streaming-media transfer protocols (such as RTSP:).  For unrecognized media types, the plugin displays an error message.

''URL'' is the location of the media content

''width'' and ''height'' are the dimensions of the video display area (in pixels)

''autoplay'' or ''true'' or ''false'' is optional, and specifies whether the media content should begin playing as soon as it is loaded, or wait for the user to press the "play" button.  Default is //not// to autoplay.

''showcontrols'' or ''true'' or ''false'' is optional, and specifies whether the embedded media player should display its built-in control panel (e.g., play, pause, stop, rewind, etc), if any.  Default is to display the player controls.

''extras'' are optional //pairs// of parameters that can be passed to the embedded player, using the {{{<param name=xxx value=yyy>}}} HTML syntax.

''If you use [[AttachFilePlugin]] to encode and store a media file within your document, you can play embedded media content by using the title of the //attachment tiddler//'' as a parameter in place of the usual reference to an external URL.  When playing an attached media content, you should always explicitly specify the media type parameter, because the name used for the attachment tiddler may not contain a known file extension from which a default media type can be readily determined.
<<<
!!!!!Configuration
<<<
Default player size:
width: <<option txtPlayerDefaultWidth>> height: <<option txtPlayerDefaultHeight>>
<<<
!!!!!Examples
<<<
+++[Windows Media]...
Times Square Live Webcam
{{{<<player id=1 http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx>>}}}
<<player id=1 http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx>>
===
+++[RealOne]...
BBC London: Live and Recorded news
{{{<<player id=2 http://www.bbc.co.uk/london/realmedia/news/tvnews.ram>>}}}
<<player id=2 http://www.bbc.co.uk/london/realmedia/news/tvnews.ram>>
===
+++[Quicktime]...
America Free TV: Classic Comedy
{{{<<player id=3 http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov>>}}}
<<player id=3 http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov>>
===
+++[Flash]...
Asteroids arcade game
{{{<<player id=4 http://www.80smusiclyrics.com/games/asteroids/asteroids.swf 400 300>>}}}
<<player id=4 http://www.80smusiclyrics.com/games/asteroids/asteroids.swf 400 300>>
Google Video
{{{<<player id=5 flash http://video.google.com/googleplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DoQAAAIVnUNP6GYRY8YnIRNPe4Uk5-j1q1MVpJIW4uyEFpq5Si0hcSDuig_JZcB9nNpAhbScm9W_8y_vDJQBw1DRdCVbXl-wwm5dyUiiStl_rXt0ATlstVzrUNC4fkgK_j7nmse7kxojRj1M3eo3jXKm2V8pQjWk97GcksMFFwg7BRAXmRSERexR210Amar5LYzlo9_k2AGUWPLyRhMJS4v5KtDSvNK0neL83ZjlHlSECYXyk%26sigh%3Dmpt2EOr86OAUNnPQ3b9Tr0wnDms%26begin%3D0%26len%3D429700%26docid%3D-914679554478687740&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer%3Fcontentid%3De7e77162deb04c42%26second%3D5%26itag%3Dw320%26urlcreated%3D1144620753%26sigh%3DC3fqXPPS1tFiUqLzmkX3pdgYc2Y&playerId=-91467955447868774               400 326>>}}}
<<player id=5 flash http://video.google.com/googleplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DoQAAAIVnUNP6GYRY8YnIRNPe4Uk5-j1q1MVpJIW4uyEFpq5Si0hcSDuig_JZcB9nNpAhbScm9W_8y_vDJQBw1DRdCVbXl-wwm5dyUiiStl_rXt0ATlstVzrUNC4fkgK_j7nmse7kxojRj1M3eo3jXKm2V8pQjWk97GcksMFFwg7BRAXmRSERexR210Amar5LYzlo9_k2AGUWPLyRhMJS4v5KtDSvNK0neL83ZjlHlSECYXyk%26sigh%3Dmpt2EOr86OAUNnPQ3b9Tr0wnDms%26begin%3D0%26len%3D429700%26docid%3D-914679554478687740&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer%3Fcontentid%3De7e77162deb04c42%26second%3D5%26itag%3Dw320%26urlcreated%3D1144620753%26sigh%3DC3fqXPPS1tFiUqLzmkX3pdgYc2Y&playerId=-91467955447868774               400 326>>
YouTube Video
{{{<<player id=6 flash http://www.youtube.com/v/OdT9z-JjtJk 400 300>>}}}
<<player id=6 flash http://www.youtube.com/v/OdT9z-JjtJk 400 300>>
===
+++[Still Images]...
GIF (best for illustrations, animations, diagrams, etc.)
{{{<<player id=7 image images/meow.gif auto auto>>}}}
<<player id=7 image images/meow.gif auto auto>>
JPG (best for photographs, scanned images, etc.)
{{{<<player id=8 image images/meow2.jpg 200 150>>}}}
<<player id=8 image images/meow2.jpg 200 150>>
===
<<<
!!!!!Revisions
<<<
2008.05.10 [1.1.4] in handlers(), immediately return if no params (prevents error in macro).  Also, refactored auto-detect code to make type mapping configurable.
2007.10.15 [1.1.3] in loadURL(), add recognition for .PNG (still image), fallback to iframe for unrecognized media types
2007.08.31 [1.1.2] added 'click-through' link for JPG/GIF images
2007.06.21 [1.1.1] changed "hidecontrols" param to "showcontrols" and recognize true/false values in addition to 'showcontrols', added "autoplay" param (also recognize true/false values), allow "auto" as value for type param
2007.05.22 [1.1.0] added support for type=="iframe" (displays src URL in an IFRAME)
2006.12.06 [1.0.1] in handler(), corrected check for config.macros.attach (instead of config.macros.attach.getAttachment) so that player plugin will work when AttachFilePlugin is NOT installed.  (Thanks to Phillip Ehses for bug report)
2006.11.30 [1.0.0] support embedded media content using getAttachment() API defined by AttachFilePlugin or AttachFilePluginFormatters.  Also added support for 'image' type to render JPG/GIF still images
2006.02.26 [0.7.0] major re-write.  handles default params better.  create/recreate player objects via loadURL() API for use with interactive forms and scripts.
2006.01.27 [0.6.0] added support for 'extra' macro params to pass through to object parameters
2006.01.19 [0.5.0] Initial ALPHA release
2005.12.23 [0.0.0] Started
<<<
!!!!!Code
***/
//{{{
version.extensions.PlayerPlugin= {major: 1, minor: 1, revision: 4, date: new Date(2008,5,10)};

config.macros.player = {};
config.macros.player.html = {};
config.macros.player.handler= function(place,macroName,params) {
	if (!params.length) return; // missing parameters - do nothing
	var id=null;
	if (params[0].substr(0,3)=="id=") id=params.shift().substr(3);
	var type="";
	if (!params.length) return; // missing parameters - do nothing
	var p=params[0].toLowerCase();
	if (p=="auto" || p=="windows" || p=="realone" || p=="quicktime" || p=="flash" || p=="image" || p=="iframe")
		type=params.shift().toLowerCase();
	var url=params.shift(); if (!url || !url.trim().length) url="";
	if (url.length && config.macros.attach!=undefined) // if AttachFilePlugin is installed
		if ((tid=store.getTiddler(url))!=null && tid.isTagged("attachment")) // if URL is attachment
			url=config.macros.attach.getAttachment(url); // replace TiddlerTitle with URL
	var width=params.shift();
	var height=params.shift();
	var autoplay=false;
	if (params[0]=='autoplay'||params[0]=='true'||params[0]=='false')
		autoplay=(params.shift()!='false');
	var show=true;
	if (params[0]=='showcontrols'||params[0]=='true'||params[0]=='false')
		show=(params.shift()!='false');
	var extras="";
	while (params[0]!=undefined)
		extras+="<param name='"+params.shift()+"' value='"+params.shift()+"'> ";
	this.loadURL(place,id,type,url,width,height,autoplay,show,extras);
}

if (config.options.txtPlayerDefaultWidth==undefined) config.options.txtPlayerDefaultWidth="100%";
if (config.options.txtPlayerDefaultHeight==undefined) config.options.txtPlayerDefaultHeight="480"; // can't use "100%"... player height doesn't stretch right :-(

config.macros.player.typeMap={
	windows: ['mms', '.asx', '.wvx', '.wmv', '.mp3'],
	realone: ['rtsp', '.ram', '.rpm', '.rm', '.ra'],
	quicktime: ['.mov', '.qt'],
	flash: ['.swf', '.flv'],
	image: ['.jpg', '.gif', '.png'],
	iframe: ['.htm', '.html', '.shtml', '.php']
};

config.macros.player.loadURL=function(place,id,type,url,width,height,autoplay,show,extras) {

	if (id==undefined) id="tiddlyPlayer";
	if (!width) var width=config.options.txtPlayerDefaultWidth;
	if (!height) var height=config.options.txtPlayerDefaultHeight;
	if (url && (!type || !type.length || type=="auto")) { // determine type from URL
		u=url.toLowerCase();
		var map=config.macros.player.typeMap;
		for (var t in map) for (var i=0; i<map[t].length; i++)
			if (u.indexOf(map[t][i])!=-1) var type=t;
	}
	if (!type || !config.macros.player.html[type]) var type="none";
	if (!url) var url="";
	if (show===undefined) var show=true;
	if (!extras) var extras="";
	if (type=="none" && url.trim().length) type="iframe"; // fallback to iframe for unrecognized media types

	// adjust parameter values for player-specific embedded HTML
	switch (type) {
		case "windows":
			autoplay=autoplay?"1":"0"; // player-specific param value
			show=show?"1":"0"; // player-specific param value
			break;
		case "realone":
			autoplay=autoplay?"true":"false";
			show=show?"block":"none";
			height-=show?60:0; // leave room for controls
			break;
		case "quicktime":
			autoplay=autoplay?"true":"false";
			show=show?"true":"false";
			break;
		case "image":
			show=show?"block":"none";
			break;
		case "iframe":
			show=show?"block":"none";
			break;
	}

	// create containing div for player HTML
	// and add or replace player in TW DOM structure
	var newplayer = document.createElement("div");
	newplayer.playerType=type;
	newplayer.setAttribute("id",id+"_div");
	var existing = document.getElementById(id+"_div");
	if (existing && !place) place=existing.parentNode;
	if (!existing)
		place.appendChild(newplayer);
	else {
		if (place==existing.parentNode) place.replaceChild(newplayer,existing)
		else { existing.parentNode.removeChild(existing); place.appendChild(newplayer); }
	}

	var html=config.macros.player.html[type];
	html=html.replace(/%i%/mg,id);
	html=html.replace(/%w%/mg,width);
	html=html.replace(/%h%/mg,height);
	html=html.replace(/%u%/mg,url);
	html=html.replace(/%a%/mg,autoplay);
	html=html.replace(/%s%/mg,show);
	html=html.replace(/%x%/mg,extras);
	newplayer.innerHTML=html;
}
//}}}

// // Player-specific API functions: isReady(id), isPlaying(id), toggleControls(id), showControls(id,flag)

//{{{
// status values:
// Windows: 0=Undefined, 1=Stopped, 2=Paused, 3=Playing, 4=ScanForward, 5=ScanReverse
//          6=Buffering, 7=Waiting, 8=MediaEnded, 9=Transitioning, 10=Ready, 11=Reconnecting
// RealOne: 0=Stopped, 1=Contacting, 2=Buffering, 3=Playing, 4=Paused, 5=Seeking
// QuickTime: 'Waiting', 'Loading', 'Playable', 'Complete', 'Error:###'
// Flash: 0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete
config.macros.player.isReady=function(id)
{
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') return !((p.playState==0)||(p.playState==7)||(p.playState==9)||(p.playState==11));
	if (d.playerType=='realone') return (p.GetPlayState()>1);
	if (d.playerType=='quicktime') return !((p.getPluginStatus()=='Waiting')||(p.getPluginStatus()=='Loading'));
	if (d.playerType=='flash') return (p.ReadyState>2);
	return true;
}
config.macros.player.isPlaying=function(id)
{
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') return (p.playState==3);
	if (d.playerType=='realone') return (p.GetPlayState()==3);
	if (d.playerType=='quicktime') return (p.getPluginStatus()=='Complete');
	if (d.playerType=='flash') return (p.ReadyState<4);
	return false;
}
config.macros.player.showControls=function(id,flag) {
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') { p.ShowControls=flag; p.ShowStatusBar=flag; }
	if (d.playerType=='realone') { alert('show/hide controls not available'); }
	if (d.playerType=='quicktime')      // if player not ready, retry in one second
		{ if (this.isReady(id)) p.setControllerVisible(flag); else setTimeout('config.macros.player.showControls("'+id+'",'+flag+')',1000); }
	if (d.playerType=='flash') { alert('show/hide controls not available'); }
}
config.macros.player.toggleControls=function(id) {
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') var flag=!p.ShowControls;
	if (d.playerType=='realone') var flag=true; // TBD
	if (d.playerType=='quicktime') var flag=!p.getControllerVisible();
	if (d.playerType=='flash') var flag=true; // TBD
	this.showControls(id,flag);
}
config.macros.player.fullScreen=function(id) {
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') p.DisplaySize=3;
	if (d.playerType=='realone') p.SetFullScreen();
	if (d.playerType=='quicktime') { alert('full screen not available'); }
	if (d.playerType=='flash') { alert('full screen not available'); }
}
//}}}

// // Player HTML

//{{{
// placeholder (no player)
config.macros.player.html.none=' \
	<table id="%i%" width="%w%" height="%h%" style="background-color:#111;border:0;margin:0;padding:0;"> \
	<tr style="background-color:#111;border:0;margin:0;padding:0;"> \
	<td width="%w%" height="%h%" style="background-color:#111;color:#ccc;border:0;margin:0;padding:0;text-align:center;"> \
	&nbsp; \
	%u% \
	&nbsp; \
	</td></tr></table>';
//}}}

//{{{
// JPG/GIF/PNG still images
config.macros.player.html.image='\
	<a href="%u%" target="_blank"><img width="%w%" height="%h%" style="display:%s%;" src="%u%"></a>';
//}}}

//{{{
// IFRAME web page viewer
config.macros.player.html.iframe='\
	<iframe id="%i%" width="%w%" height="%h%" style="display:%s%;background:#fff;" src="%u%"></iframe>';
//}}}

//{{{
// Windows Media Player
// v7.1 ID: classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6
// v9	ID: classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95
config.macros.player.html.windows=' \
	<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;width:%w%;height:%h%px;" \
		classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" \
		codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" \
		align="baseline" border="0" \
		standby="Loading Microsoft Windows Media Player components..." \
		type="application/x-oleobject"> \
		<param name="FileName" value="%u%"> <param name="ShowControls" value="%s%"> \
		<param name="ShowPositionControls" value="1"> <param name="ShowAudioControls" value="1"> \
		<param name="ShowTracker" value="1"> <param name="ShowDisplay" value="0"> \
		<param name="ShowStatusBar" value="1"> <param name="AutoSize" value="1"> \
		<param name="ShowGotoBar" value="0"> <param name="ShowCaptioning" value="0"> \
		<param name="AutoStart" value="%a%"> <param name="AnimationAtStart" value="1"> \
		<param name="TransparentAtStart" value="0"> <param name="AllowScan" value="1"> \
		<param name="EnableContextMenu" value="1"> <param name="ClickToPlay" value="1"> \
		<param name="InvokeURLs" value="1"> <param name="DefaultFrame" value="datawindow"> \
		%x% \
		<embed src="%u%" style="margin:0;padding:0;width:%w%;height:%h%px;" \
			align="baseline" border="0" width="%w%" height="%h%" \
			type="application/x-mplayer2" \
			pluginspage="http://www.microsoft.com/windows/windowsmedia/download/default.asp" \
			name="%i%" showcontrols="%s%" showpositioncontrols="1" \
			showaudiocontrols="1" showtracker="1" showdisplay="0" \
			showstatusbar="%s%" autosize="1" showgotobar="0" showcaptioning="0" \
			autostart="%a%" autorewind="0" animationatstart="1" transparentatstart="0" \
			allowscan="1" enablecontextmenu="1" clicktoplay="0" invokeurls="1" \
			defaultframe="datawindow"> \
		</embed> \
	</object>';
//}}}

//{{{
// RealNetworks' RealOne Player
config.macros.player.html.realone=' \
	<table width="%w%" style="border:0;margin:0;padding:0;"><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \
	<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \
		CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \
		<PARAM NAME="CONSOLE" VALUE="player"> \
		<PARAM NAME="CONTROLS" VALUE="ImageWindow"> \
		<PARAM NAME="AUTOSTART" Value="%a%"> \
		<PARAM NAME="MAINTAINASPECT" Value="true"> \
		<PARAM NAME="NOLOGO" Value="true"> \
		<PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \
		<PARAM NAME="SRC" VALUE="%u%"> \
		%x% \
		<EMBED width="%w%" height="%h%" controls="ImageWindow" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;" \
			name="%i%" \
			src="%u%" \
			console=player \
			maintainaspect=true \
			nologo=true \
			backgroundcolor=#333333 \
			autostart=%a%> \
		</OBJECT> \
	</td></tr><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \
	<object id="%i%_controls" width="%w%" height="60" style="margin:0;padding:0;display:%s%" \
		CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \
		<PARAM NAME="CONSOLE" VALUE="player"> \
		<PARAM NAME="CONTROLS" VALUE="All"> \
		<PARAM NAME="NOJAVA" Value="true"> \
		<PARAM NAME="MAINTAINASPECT" Value="true"> \
		<PARAM NAME="NOLOGO" Value="true"> \
		<PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \
		<PARAM NAME="SRC" VALUE="%u%"> \
		%x% \
		<EMBED WIDTH="%w%" HEIGHT="60" NOJAVA="true" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;display:%s%" \
			controls="All" \
			name="%i%_controls" \
			src="%u%" \
			console=player \
			maintainaspect=true \
			nologo=true \
			backgroundcolor=#333333> \
		</OBJECT> \
	</td></tr></table>';
//}}}

//{{{
// QuickTime Player
config.macros.player.html.quicktime=' \
	<OBJECT ID="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \
		CLASSID="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" \
		CODEBASE="http://www.apple.com/qtactivex/qtplugin.cab"> \
		<PARAM name="SRC" VALUE="%u%"> \
		<PARAM name="AUTOPLAY" VALUE="%a%"> \
		<PARAM name="CONTROLLER" VALUE="%s%"> \
		<PARAM name="BGCOLOR" VALUE="#333333"> \
		<PARAM name="SCALE" VALUE="aspect"> \
		<PARAM name="SAVEEMBEDTAGS" VALUE="true"> \
		%x% \
		<EMBED name="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \
			SRC="%u%" \
			AUTOPLAY="%a%" \
			SCALE="aspect" \
			CONTROLLER="%s%" \
			BGCOLOR="#333333" \
			EnableJavaSript="true" \
			PLUGINSPAGE="http://www.apple.com/quicktime/download/"> \
		</EMBED> \
	</OBJECT>';
//}}}

//{{{
// Flash Player
config.macros.player.html.flash='\
	<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \
		classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" \
		codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"> \
		<param name="movie" value="%u%"> \
		<param name="quality" value="high"> \
		<param name="SCALE" value="exactfit"> \
		<param name="bgcolor" value="333333"> \
		%x% \
		<embed name="%i%" src="%u%" style="margin:0;padding:0;" \
			height="%h%" width="%w%" quality="high" \
			pluginspage="http://www.macromedia.com/go/getflashplayer" \
			type="application/x-shockwave-flash" scale="exactfit"> \
		</embed> \
	</object>';
//}}}
<<plugins>>
<<list filter "[tag[practice]] [sort[-Title]]">> 
<<uChord ntype:"cl" nota:"[F] [C] [Bb] [Am]">>
<<uStrum "D & D U D U">>
!C F C F G7 F G7 Am G7 Am G7 F G7 F C F C
//{{{
F    Bb     F     G7-C7
F    F7     Bb   Bdim F   G7     C7      F

C7     F      C7     F-F7
F7     Bb    Bbm F  Bdim
Gm    C7   F
//}}}
[[Blowin in the Wind]]
//{{{
3X
C      F       C       Am
C      F       G  -  G7

F      G       C       Am
F      G       C
//}}}
<<list filter "[tag[practice sheet]] [sort[-Title]]">> 
<<uChord ntype:"c" nota:"Bm G Bm C G">>
<<uChord ntype:"c" nota:"C G Em A7 D7">>
<<<
{{{

G                     Bm     C                 G
Puff, the magic dragon lived by the sea

G                     Bm     C                 G
And frolicked in the autumn mist in a land called Honalee,

G                 Bm     C                       G
Little Jackie Paper loved that rascal Puff,

        C                                 G         Em         A7             D7
And brought him strings and sealing wax and other fancy stuff. Oh

G                     Bm     C                 G
Puff, the magic dragon lived by the sea

G                     Bm     C                 G                           D7
And frolicked in the autumn mist in a land called Honah Lee,

G                     Bm     C                 G
Puff, the magic dragon lived by the sea

G                     Bm     C                 G                           D7
And frolicked in the autumn mist in a land called Honah Lee.

G                              Bm           C                          G
Together they would travel on a boat with billowed sail

         C                   G          Em           A7                 D7
And Jackie kept a lookout perched on Puff’s gigantic tail,

G                       Bm                 C                            G
Noble kings and princes would bow whenever they came,

C                          G              Em            A7             D7         G
Pirate ships would lower their flags when Puff roared out his name. oh!

Puff, the magic dragon lived by the sea
And frolicked in the autumn mist in a land called Honah Lee,
Puff, the magic dragon lived by the sea
And frolicked in the autumn mist in a land called Honah Lee.

A dragon lives forever but not so little boys
Painted wings and giant rings make way for other toys.
One grey night it happened, Jackie Paper came no more
And Puff that mighty dragon, he ceased his fearless roar.

His head was bent in sorrow, green scales fell like rain,
Puff no longer went to play along the cherry lane.
Without his life-long friend, Puff could not be brave,
So Puff that mighty dragon, he slipped into his cave. oh!

Puff, the magic dragon lived by the sea
And frolicked in the autumn mist in a land called Honah Lee,
Puff, the magic dragon lived by the sea
And frolicked in the autumn mist in a land called Honah Lee. 
}}}
>>>
<<player http://www.youtube.com/embed/P0DK-0fIKCw 360 240>>

<<uChord ntype:"cl" nota:"[A] [G] [D] [E] [F#]">>

//{{{
A  G  D  D    A  D  G  G    G  A  D  D    G  A  D  D    D  D
(intro)

D     D  D  D          D              D         D    D
Midnight,    and I'm a-waiting on the twelve-oh-five
 D           D              D              D/E - D/F#  G*  G*  G*  G*
Hoping it'll take me just a little farther down the line
D     D  D  D              D          D      D    D
Moonlight,   you're just a heartache in disguise;   Won't you
D                  D                D          D/E - D/F#  G*  G*  G*  G*
keep my heart from breaking if it's only for a very short time

A                G         D     D    A                D       G    G
Playing with the queen of hearts,     knowing it ain't really smart
     G              A     D   D         G     A         D   D   
The joker ain't the only fool    who'll do anything for you
A           G      D    D    A                D         G    G
Laying out another lie,      thinking 'bout a life of crime
G                A        D   D    G        A         D   D     D  D
That's what I'll have to do     to keep me away from you

Honey, you know it makes you mad
Why is everybody telling everybody what you have done
Baby, I know it makes you sad
But when they're handing out the heartaches you know you got to have you some

Playing with the queen of hearts, knowing it ain't really smart
The joker ain't the only fool who'll do anything for you
Laying out another lie, thinking 'bout a life of crime
That's what I'll have to do to keep me away from you

B  A  E  E    B  E  A  A    A  B  E  E    A  B  E  E    A  B  E  E
(guitar solo, key of E; next verse goes back to key of D)

Lovers, I know you've had a few
But hide your heart beneath the covers and tell 'em they're the only one
And others, they know just what I'm going through
And it's a-hard to be a lover when you say you're only in it for fun

Playing with the queen of hearts, knowing it ain't really smart
The joker ain't the only fool who'll do anything for you

(back to key of E, like guitar solo:)
n.c.             n.c.       n.c.  n.c.    n.c.         n.c.        n.c.   A
Playing with the queen of hearts,     and knowing it ain't really smart
    A               B     E   E         A     B         E   E
The joker ain't the only fool    who'll do anything for you
B           A      E    E    B                E         A    A
Laying out another lie,      thinking 'bout a life of crime
A                B        E   E    A        B         E   E
That's what I'll have to do     to keep me away from you

B   A   E   E     B                A          E    E
//}}}
This package provides a toolbar of interactive 'power tools' that you can use while editing a tiddler to quickly insert TiddlyWiki tiddler links, images, macros, etc. or common formatting sequences directly into tiddler content, as well as perform other functions (such as find/replace, sort, split, convert, etc.) that can be used to modify the current tiddler's source content in a variety of ways.

<<tiddler QuickEditToolbar with: show>>
!!!!!Installation:
<<<
Individual ~QuickEdit buttons are defined in separate tiddlers (e.g., [[QuickEdit_replace]]) that have also been //transcluded// into a single toolbar definition named [[QuickEditToolbar]].  You can edit this definition to add, remove, or rearrange the toolbar buttons to best suit your needs, and then embed the [[QuickEditToolbar]] tiddler into your document's [[EditTemplate]], like this:
{{{
<div macro='tiddler QuickEditToolbar'></div>
}}}
Next, in order to support some of the formatting 'shortcuts' provided by the toolbar, add a reference to the shortcuts CSS class definitions in your [[StyleSheet]]:
{{{
[[StyleSheetShortcuts]]
}}}
By default, the QuickEdit toolbar is hidden until you enable it by using the ''toggleQuickEdit'' command, which you can add to the ~EditToolbar definition in [[ToolbarCommands]]:
{{{
|EditToolbar|... toggleQuickEdit ...|
}}}
You can also toggle the ~QuickEdit toolbar display via a single checkbox option that can be added to [[SideBarOptions]] (or any other desired location):
{{{
<<option chkShowQuickEdit>> show QuickEdit toolbar
}}}
Note: You can 'hard-code' the ''chkShowQuickEdit'' setting, so that the toolbar will be //initially// displayed, by creating a tiddler (e.g., ConfigTweaks), tagged with <<tag systemConfig>>, containing:
{{{
config.options.chkShowQuickEdit=true;
}}}
Alternatively, if you want the toolbar to //always// be displayed, regardless of the option setting, you can add a special keyword, ''show'', to the [[EditTemplate]] syntax, like this:
{{{
<div macro='tiddler QuickEditToolbar with: show'></div>
}}}
<<<
/***
|Name|QuickEditPlugin|
|Source|http://www.TiddlyTools.com/#QuickEditPlugin|
|Documentation|http://www.TiddlyTools.com/#QuickEditPlugin|
|Version|2.4.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Support functions for ~QuickEdit package: styles, utility functions, and 'toggleQuickEdit' command|
!!!!!Revisions
<<<
2009.06.11 [2.4.3] added keyup() function to abbreviate listbox handling for CR and ESC
2009.05.07 [2.4.2] added processed() function to abbreviate event handler code
2008.09.07 [2.4.1] added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.17 [2.4.0] copied code from StickyPopupPlugin to remove dependency
2008.05.12 [2.3.0] added "toggleQuickEdit" command handler (replaces inline script command)
2008.01.11 [2.2.0] converted from inline script
2007.03.29 [1.0.0] initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.QuickEditPlugin= {major: 2, minor: 4, revision: 3, date: new Date(2009,6,11)};

// SET STYLESHEET
setStylesheet("\
.quickEdit a { border:2px outset ButtonFace; padding:0px 3px !important; \
	-moz-border-radius:.5em; -webkit-border-radius:.5em; \
	-moz-appearance:button !important; -webkit-appearance:push-button !important; \
	background-color:ButtonFace; color:ButtonText !important;  \
	line-height:200%; font-weight:normal; } \
.quickEdit a:hover { border: 2px inset ButtonFace; background-color:ButtonFace; }\
", "quickEditStyles");

// REMOVE COOKIE
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

// UTILITY FUNCTIONS
config.quickEdit = {
	processed: function(ev) { ev=ev||window.event;
		ev.cancelBubble=true;
		if(ev.stopPropagation) ev.stopPropagation();
		return false;
	},
	keyup: function(ev){ var k=(ev||window.event).keyCode;
		if (k==13) this.onclick();
		if (k==27) Popup.remove();
	},
	getField: function(where) {
		var here=story.findContainingTiddler(where); if (!here) return null;
		var e=story.getTiddlerField(here.getAttribute("tiddler"),"text");
		if (e&&e.getAttribute("edit")=="text") return e;
		return null;
	},
	setSelection: function(where,newtext) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,newtext);
		return false;
	},
	wrapSelection: function(where,before,after) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,before+config.quickEdit.getSelection(e)+after);
		return false;
	},
	getSelection: function(e) {
		var seltext="";
		if (e&&e.setSelectionRange)
			seltext=e.value.substr(e.selectionStart,e.selectionEnd-e.selectionStart);
		else if (document.selection) {
			var range = document.selection.createRange();
			if (range.parentElement()==e) seltext=range.text
		}
		return seltext;
	},
	promptForFilename: function(msg,path,file) {
		if(window.Components) { // moz
			try {
				netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
				var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
				var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
				picker.init(window, msg, nsIFilePicker.modeOpen);
				var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
				thispath.initWithPath(path);
				picker.displayDirectory=thispath;
				picker.defaultExtension='jpg';
				picker.defaultString=file;
				picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterImages);
				if (picker.show()!=nsIFilePicker.returnCancel)
					var result="file:///"+picker.file.persistentDescriptor.replace(/\\/g,'/');
			}
			catch(e) { alert('error during local file access: '+e.toString()) }
		}
		else { // IE
			try { // XP only
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.Filter='All files|*.*|JPG files|*.jpg|GIF files|*.gif|PNG files|*.png|';
				s.FilterIndex=1; // default to JPG
				s.InitialDir=path;
				s.FileName=file;
				if (s.showOpen()) var result=s.FileName;
			}
			catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
		}
		return result;
	}
}
//}}}

//{{{
if (config.options.chkShowQuickEdit===undefined) config.options.chkShowQuickEdit=false;
config.commands.toggleQuickEdit = {
	hideReadOnly: true,
	getText: function() { return config.options.chkShowQuickEdit?'\u221Aquickedit':'quickedit'; },

	tooltip: 'show QuickEdit toolbar buttons',
	handler: function(event,src,title) {
		var opt='chkShowQuickEdit';
		config.options[opt]=!config.options[opt];
		config.macros.option.propagateOption(opt,"checked", config.options[opt],"input");
		if (config.options[opt]) saveOptionCookie(opt);	else removeCookie(opt);
		src.innerHTML=config.commands.toggleQuickEdit.getText();
		story.forEachTiddler(function(t,e){if (story.isDirty(t)) refreshElements(e);});
		return false;
	}
};
//}}}

// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
	// if click is in a sticky popup, ignore it so popup will remain visible
	var e = ev ? ev : window.event; var target = resolveTarget(e);
	var p=target; while (p) {
		if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
		else p=p.parentNode;
	}
	if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
		Popup.onDocumentClick(ev);
	return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
/%
|Name|QuickEditToolbar|
|Source|http://www.TiddlyTools.com/#QuickEditToolbar|
|Version|2.4.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.2|
|Type|transclusion|
|Requires|QuickEditPlugin|
|Optional|QuickEdit_*|
|Description|format/insert TiddlyWiki content using toolbar buttons|

Usage:
* install [[QuickEditPlugin]] (runtime support functions)

* add the toolbar to [[EditTemplate]]:
	<div macro='tiddler QuickEditToolbar with: show'></div>

* 'show' (optional) forces the toolbar to always be displayed or,
  omit keyword and use <<option chkShowQuickEdit>> setting

* selected QuickEdit buttons can also be added individually to the
  regular tiddler toolbar by adding references directly in [[EditTemplate]]:
	<span class='toolbar' macro='tiddler QuickEdit_...'></span>

* see [[QuickEditPackage]] for additional installation options

%/{{hidden fine center quickEdit{
<<tiddler {{ // show/hide toolbar
	var here=story.findContainingTiddler(place); if (here) var tid=here.getAttribute('tiddler');
	var show='$1'!='$'+'1'||config.options.chkShowQuickEdit||tid=='QuickEditToolbar'; 
	place.style.display=show?'block':'none';
'';}}>>/%

TOOLBAR DEFINITION - add, remove, or re-order items as desired:
= = = = = = = = = =
%/<<tiddler QuickEdit_format>>/%
%/<<tiddler QuickEdit_align>>/%
%/<<tiddler QuickEdit_color>>/%
%/<<tiddler QuickEdit_font>>/%
%/<<tiddler QuickEdit_custom>>/%
%/ &nbsp;/% (SPACER)
%/<<tiddler QuickEdit_replace>>/%
%/<<tiddler QuickEdit_split>>/%
%/<<tiddler QuickEdit_sort>>/%
%/<<tiddler QuickEdit_convert>>/%
%/ &nbsp;/% (SPACER)
%/<<tiddler QuickEdit_link>>/%
%/<<tiddler QuickEdit_insert>>/%
%/<<tiddler QuickEdit_macro>>/%
%/<<tiddler QuickEdit_image>>/%
%/}}}
/%
|Name|QuickEdit_align|
|Source|http://www.TiddlyTools.com/#QuickEdit_align|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - text alignment|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="align text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select text alignment...','');
	s.options[s.length]=new Option('left','left');
	s.options[s.length-1].title='{{left{...}}}';
	s.options[s.length]=new Option('center','center');
	s.options[s.length-1].title='{{center{...}}}';
	s.options[s.length]=new Option('right','right');
	s.options[s.length-1].title='{{right{...}}}';
	s.options[s.length]=new Option('justify','justify');
	s.options[s.length-1].title='{{justify{...}}}';
	s.options[s.length]=new Option('float left','floatleft');
	s.options[s.length-1].title='{{floatleft{...}}}';
	s.options[s.length]=new Option('float right','floatright');
	s.options[s.length-1].title='{{floatright{...}}}';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		config.quickEdit.wrapSelection(this.button,'{{'+this.value+'{','}}}');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>align</a></html>
/%
|Name|QuickEdit_color|
|Source|http://www.TiddlyTools.com/#QuickEdit_color|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - text/background color|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="text/background color - @@color:#RGB;background-color:#RGB;...@@"
onclick="var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
 	p.style.padding='2px';
	function hex(d) { return '0123456789ABCDEF'.substr(d,1); }
	var fg=createTiddlyElement(p,'select'); fg.button=this;
	fg.style.width='12em';
	fg.options[0]=new Option('text color...','');
	fg.options[1]=new Option('\xa0 or enter a value','_ask');
	fg.options[2]=new Option('\xa0 or use default color','');
	for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
		var label=hex(r)+hex(g)+hex(b);
		fg.options[fg.length]=new Option(label,'#'+label);
		fg.options[fg.length-1].style.color='#'+label;
	}
	fg.onchange=function(){ var val=this.value;
		if (val=='_ask') { val=prompt('Enter a CSS color value');
		if (!val||!val.length) return false; }
		this.options[0].value=val; this.options[0].text=val.length?'text: '+val:'text color...';
		var bg=this.nextSibling;
		for (var i=3;i<bg.options.length;i++) bg.options[i].style.color=val;
		var preview=this.nextSibling.nextSibling.nextSibling;
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
		var fg=this.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.nextSibling.value; if (bg.length) bg='background-color:'+bg+';';
		if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
		removeChildren(preview); wikify(t,preview);
		this.selectedIndex=0; return false;
	};
	var bg=createTiddlyElement(p,'select'); bg.button=this;
	bg.style.width='12em';
	bg.options[0]=new Option('background color...','');
	bg.options[1]=new Option('\xa0 or enter a value','_ask');
	bg.options[2]=new Option('\xa0 or use default color','');
	for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
		var label=hex(15-r)+hex(15-g)+hex(15-b);
		bg.options[bg.length]=new Option(label,'#'+label);
		bg.options[bg.length-1].style.backgroundColor='#'+label;
	}
	bg.onchange=function(){ var val=this.value;
		if (val=='_ask') { val=prompt('Enter a CSS color value');
		if (!val||!val.length) return false; }
		this.options[0].value=val;
		this.options[0].text=val.length?'background: '+val:'background color...';
		var fg=this.previousSibling;
		for (var i=3;i<fg.options.length;i++) fg.options[i].style.backgroundColor=val;
		var preview=this.nextSibling.nextSibling;
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
		var fg=this.previousSibling.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.value; if (bg.length) bg='background-color:'+bg+';';
		if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
		removeChildren(preview); wikify(t,preview);
		this.selectedIndex=0; return false;
	};
	var b=createTiddlyElement(p,'input',null,null,null,{type:'button'}); b.button=this;
	b.value='ok'; b.style.width='4em';
	b.onclick=function() {
		var fg=this.previousSibling.previousSibling.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.previousSibling.value; if (bg.length) bg='background-color:'+bg+';';
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (fg.length||bg.length) config.quickEdit.setSelection(this.button,'@@'+fg+bg+t+'@@');
		Popup.remove(); return false;
	};
	var preview=createTiddlyElement(p,'div',null,'viewer'); var s=preview.style;
	s.border='1px solid'; s.margin='2px'; s.width='24em'; s.padding='3px'; s.MozBorderRadius='3px';
	s.overflow='hidden'; s.textAlign='center'; s.whiteSpace='normal';
	var t=config.quickEdit.getSelection(config.quickEdit.getField(this));
	wikify(t.length?t:'~AaBbCcDdEeFfGgHhIiJj 1234567890',preview);
	Popup.show();
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>color</a></html>
/%
|Name|QuickEdit_convert|
|Source|http://www.TiddlyTools.com/#QuickEdit_convert|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - convert between comma/tab-separated and TW table format|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="convert between comma/tab-separated and TW table format"
onclick="var e=config.quickEdit.getField(this);
	if (e) e.focus(); var txt=config.quickEdit.getSelection(e);
	if (txt.indexOf(',')+txt.indexOf('\t')+txt.indexOf('|')==-3) {
		alert('Please select text containing tabs, commas, or TiddlyWiki table syntax.');
		return false;
	}
	var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a converter...','');
	if (txt.indexOf(',')!=-1) {
		s.options[s.length]=new Option('commas -> table','commasToTable');
		s.options[s.length]=new Option('commas -> tabs','commasToTabs');
	}
	if (txt.indexOf('\t')!=-1) {
		s.options[s.length]=new Option('tabs -> table','tabsToTable');
		s.options[s.length]=new Option('tabs -> commas','tabsToCommas');
	}
	if (txt.indexOf('|')!=-1) {
		s.options[s.length]=new Option('table -> tabs','tableToTabs');
		s.options[s.length]=new Option('table -> commas','tableToCommas');
	}
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
	        var e=config.quickEdit.getField(this.button); if (!e) return false;
		e.focus(); var txt=config.quickEdit.getSelection(e);
		switch(this.value) {
			case 'tabsToTable':
				txt=txt.replace(/\t/g,'|').replace(/^|$/g,'|');
				txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,'');
				break;
			case 'tableToTabs':
				txt=txt.replace(/\t/g,' ').replace(/\|/g,'\t');
				txt=txt.replace(/^\t/g,'').replace(/\t$/g,'');
				txt=txt.replace(/\n\t/g,'\n').replace(/\t\n/g,'\n');
				break;
			case 'commasToTable':
				txt=txt.replace(/,/g,'|').replace(/^|$/g,'|');
				txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,''); 
				break;
			case 'tableToCommas':
				txt=txt.replace(/,/g,' ').replace(/\|/g,',');
				txt=txt.replace(/^,/g,'').replace(/,$/g,''); 
				txt=txt.replace(/\n,/g,'\n').replace(/,\n/g,'\n'); 
				break;
			case 'tabsToCommas':
				txt=txt.replace(/\t/g,',');
				break;
			case 'commasToTabs':
				txt=txt.replace(/,/g,'\t');
				break;
		}
		replaceSelection(e,txt);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>convert</a></html>
/%
|Name|QuickEdit_custom|
|Source|http://www.TiddlyTools.com/#QuickEdit_custom|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - custom defined formats|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

!help
Reminders:

Custom formats are stored as an "HR-separated list" in [[QuickEdit_customList]], where the first line of each list item is the text 'label' to show in the droplist, followed by one or more lines of wiki content to be inserted into the tiddler source.

Substitution markers can be used to dynamically insert values into the formatted output: $1 inserts the tiddler editor's current selected text. $[[message|default value]] interactively prompts for a value to be inserted. $[[message|$1]] uses the selected text as the default value. $[[message|{{javascript}}]] calculates the default value using javascript code.
!end help

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="custom defined formats"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a custom format...','');
	var items=store.getTiddlerText('QuickEdit_customList','').split('\n----\n');
	for (var i=0; i<items.length; i++) {
		if (!items[i].length) continue; var lines=items[i].split('\n');
		var label=lines.shift(); var val=lines.join('\n');
		s.options[s.length]=new Option(label,val); s.options[s.length-1].title=val;
	}
	s.options[s.length]=new Option('[Edit custom formats...]','_edit');
	s.options[s.length-1].title='add/change custom format definitions...';
	s.size=Math.min(s.length,15);
	s.onclick=function(){ if (!this.value.length) return;
		if (this.value=='_edit') {
			alert(store.getTiddlerText('QuickEdit_custom##help'));
			story.displayTiddler(story.findContainingTiddler(this.button),
				'QuickEdit_customList',DEFAULT_EDIT_TEMPLATE);
		} else {
		        var e=config.quickEdit.getField(this.button); if (!e) return false;
			e.focus(); var txt=config.quickEdit.getSelection(e);
			replaceSelection(e, this.value.replace(/\$\x31/g,txt)
				.replace(/\$\[\[[^\]]+\]\]/g, function(t){
					x=t.substr(3,t.length-5).split('|');
					var msg=x[0]; var def=x[1]||'';
					if (def.startsWith('{{')) {
						try{def=eval(def.substr(2,def.length-4))} catch(ex){showException(ex)}
					}
					return prompt(msg,def)||'';
				})
			);
		}
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>custom</a></html>
timestamp
$[[enter a date|{{new Date().formatString('DDD, MMM DDth, YYYY hh12:0mm:0ssam')}}]]
----
scrollbox
@@display:block;height:10em;overflow:auto;$[[enter scrolling content|$1]]@@@@display:block;text-align:right;^^scroll for more...^^@@
----
nested slider
+++[$1]<<tiddler $1>>===
----
big red
@@font-size:36pt;color:red;$1@@
----
/%
|Name|QuickEdit_font|
|Source|http://www.TiddlyTools.com/#QuickEdit_font|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - select font family|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="set font-family CSS attribute - @@font-family:facename;...@@"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a font family...','');
	var fonts=store.getTiddlerText('QuickEdit_fontList','').split('\n');
	for (var i=0; i<fonts.length; i++) {
		if (!fonts[i].length) continue;
		s.options[s.length]=new Option(fonts[i],fonts[i]);
		s.options[s.length-1].style.fontFamily=fonts[i];
	}
	s.options[s.length]=new Option('[Edit font list...]','_edit');
	s.options[s.length-1].title='enter fonts, one per line...';
	s.size=Math.min(s.length,15);
	s.onclick=function(){
		if (this.value=='_edit')
			story.displayTiddler(story.findContainingTiddler(this.button),'QuickEdit_fontList',DEFAULT_EDIT_TEMPLATE);			
		else
			config.quickEdit.wrapSelection(this.button,'@@font-family:\x22'+this.value+'\x22;','@@');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>font</a></html>
Arial,helvetica,sans-serif
Times New Roman,times,serif
Courier,monospaced
/%
|Name|QuickEdit_format|
|Source|http://www.TiddlyTools.com/#QuickEdit_format|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - basic text formats, headings, blockquotes, etc.|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="plain text (remove ALL formatting)" accesskey="P" 
onclick="var e=config.quickEdit.getField(this); if (e) e.focus(); var txt=config.quickEdit.getSelection(e);
	config.quickEdit.setSelection(e,wikifyPlainText(txt)); return false;"
>&nbsp;~&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="''bold''" accesskey="B"
onclick="config.quickEdit.wrapSelection(this,'\x27\x27','\x27\x27'); return false;"
>&nbsp;B&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="//italics//" accesskey="I" 
onclick="config.quickEdit.wrapSelection(this,'//','//'); return false;"
>&nbsp;I&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="__underline__" accesskey="U" 
onclick="config.quickEdit.wrapSelection(this,'__','__'); return false;"
>&nbsp;U&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="--strikethrough--" accesskey="S" 
onclick="config.quickEdit.wrapSelection(this,'--','--'); return false;"
>&nbsp;S&nbsp;</a></html>/%

%/ &nbsp;/%  SPACER

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="format text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select text format...','');
	s.options[s.length]=new Option('CSS class wrapper','{{$1{,}}},Enter a CSS classname');
	s.options[s.length-1].title='CSS class wrapper - {{classname classname etc{...}}}';
	s.options[s.length]=new Option('inline CSS styles','@@$1,@@,Enter CSS (attribute:value;attribute:value;...;)');
	s.options[s.length-1].title='inline CSS styles - @@attr:value;attr:value;...@@';
	s.options[s.length]=new Option('heading 1','\n!,\n');
	s.options[s.length-1].title='H1 heading - !';
	s.options[s.length]=new Option('heading 2','\n!!,\n');
	s.options[s.length-1].title='H2 heading - !!';
	s.options[s.length]=new Option('heading 3','\n!!!,\n');
	s.options[s.length-1].title='H3 heading - !!!';
	s.options[s.length]=new Option('heading 4','\n!!!!,\n');
	s.options[s.length-1].title='H4 heading - !!!!';
	s.options[s.length]=new Option('heading 5','\n!!!!!,\n');
	s.options[s.length-1].title='H5 heading - !!!!!';
	s.options[s.length]=new Option('blockquote','\n\<\<\<\n,\n\<\<\<\n');
	s.options[s.length-1].title='indented blockquote - \<\<\<';
	s.options[s.length]=new Option('monospaced','{{{,}}}');
	s.options[s.length-1].title='inline monospaced text - {{{...}}}';
	s.options[s.length]=new Option('plain text','\n{{{\n,\n}}}\n');
	s.options[s.length-1].title='multi-line monospaced text box - {{{...}}}';
	s.options[s.length]=new Option('superscript','^^,^^');
	s.options[s.length-1].title='^^superscript^^';
	s.options[s.length]=new Option('subscript','~~,~~');
	s.options[s.length-1].title='~~subscript~~';
	s.options[s.length]=new Option('HTML','<html>,<\x2fhtml>');
	s.options[s.length-1].title='HTML syntax - <html>...<\x2fhtml>';
	s.options[s.length]=new Option('comment','/%,%/');
	s.options[s.length-1].title='comment (hidden content) - /%...%/';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		var parts=this.value.split(',');
		var prefix=parts[0]; var suffix=parts[1]; var ask=parts[2];
		if (ask) {
			var val=prompt(ask); if (!val) { Popup.remove(); return false; }
			prefix=prefix.replace(/\$1/g,val); suffix=suffix.replace(/\$1/g,val);
		}
		config.quickEdit.wrapSelection(this.button,prefix,suffix);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>format</a></html>
/%
|Name|QuickEdit_image|
|Source|http://www.TiddlyTools.com/#QuickEdit_image|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - embed an image|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
	title="embed an image (jpg/gif/png) - [img[tooltip|URL]] or [img[tooltip|path/to/file.ext]]"
	onclick="var fn=config.quickEdit.promptForFilename(
		'Enter/select an image file',getLocalPath(document.location.href),'');
	if (!fn) return false;  /* cancelled by user */
	var h=document.location.href; var p=decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1));
	if (fn.startsWith(p)) fn=fn.substr(p.length); /* use RELATIVE path/filename.ext */
	var tip=prompt('Enter a tooltip for this image',''); if (!tip) tip=''; else tip+='|';
	return config.quickEdit.setSelection(this,'[img['+tip+fn+']]');"
>image</a></html>
/%
|Name|QuickEdit_insert|
|Source|http://www.TiddlyTools.com/#QuickEdit_insert|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - insert content from another tiddler or external file|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="insert content from another tiddler or external file"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';

	var s2=createTiddlyElement(p,'select'); s2.title='filter by tag';
	s2.options[0]=new Option('filter by tag...','');
	s2.options[s2.length]=new Option('[all tiddlers]','');
	var tags=store.getTags();
	for (var t=0; t<tags.length; t++) s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);
	s2.onchange=function(){
		var tag=this.value;
		var tids=tag.length?store.reverseLookup('tags',tag,true):store.reverseLookup('tags','excludeLists');
		var list=this.nextSibling.nextSibling;
		while (list.length) list.options[0]=null;
		var prompt='select a tiddler or file...';
		if (tag.length) prompt='select a tagged tiddler ['+tids.length+' matches]...';
		list.options[0]=new Option(prompt,'');
		if (!tag.length) list.options[list.length]=new Option('[browse for file...]','_file');
		for (var t=0; t<tids.length; t++) {
			list.options[list.length]=new Option(tids[t].title,tids[t].title);
			list.options[list.length-1].title=tids[t].getSubtitle();
		}
		list.size=Math.min(list.length,10);
		list.selectedIndex=0; list.focus();
		this.style.width=list.offsetWidth+'px';
		if (!tag.length) this.selectedIndex=0;
	};
	createTiddlyElement(p,'br');

	var s=createTiddlyElement(p,'select'); s.button=this;
	s.title='select a tiddler or file';
	s.options[0]=new Option('select a tiddler or file...','');
	s.options[s.length]=new Option('[browse for file...]','_file');
	var tids=store.reverseLookup('tags','excludeLists');
	for (var t=0; t<tids.length; t++) {
		s.options[s.length]=new Option(tids[t].title,tids[t].title);
		s.options[s.length-1].title=tids[t].getSubtitle();
	}
	s.size=Math.min(s.length,10);
	s.onclick=function(){ if (!this.value.length) return false;
		if (this.value=='_file') {
			var fn=config.quickEdit.promptForFilename(
				'Enter/select a text file',getLocalPath(document.location.href),'');
			if (!fn) return false; /* cancelled by user */
			var txt=loadFile(getLocalPath(fn));
			if (!txt) { alert('Error: unable to read contents from \0027'+fn+'\0027'); return; }
		}
		else var txt=store.getTiddlerText(this.value);
		if (!txt) {
			displayMessage(this.value+' not found');
			this.selectedIndex=0; this.focus();
			return false;
		}
		config.quickEdit.setSelection(this.button,txt);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s2.style.width=s.offsetWidth+'px';
	s.focus();
	return config.quickEdit.processed(event);"
>insert</a></html>
/%
|Name|QuickEdit_link|
|Source|http://www.TiddlyTools.com/#QuickEdit_link|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - link to tiddler or external file|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="add a link to a tiddler or external file - [[link text|TiddlerName]]"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';

	var s2=createTiddlyElement(p,'select'); s2.title='filter by tag';
	s2.options[0]=new Option('filter by tag...','');
	s2.options[s2.length]=new Option('[all tiddlers]','');
	var tags=store.getTags();
	for (var t=0; t<tags.length; t++) s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);
	s2.onchange=function(){
		var tag=this.value;
		var tids=tag.length?store.reverseLookup('tags',tag,true):store.reverseLookup('tags','excludeLists');
		var list=this.nextSibling.nextSibling;
		while (list.length) list.options[0]=null;
		var prompt='select a tiddler or file...';
		if (tag.length) prompt='select a tagged tiddler ['+tids.length+' matches]...';
		list.options[0]=new Option(prompt,'');
		if (!tag.length) list.options[list.length]=new Option('[browse for file...]','_file');
		for (var t=0; t<tids.length; t++) {
			list.options[list.length]=new Option(tids[t].title,tids[t].title);
			list.options[list.length-1].title=tids[t].getSubtitle();
		}
		list.size=Math.min(list.length,10);
		list.selectedIndex=0; list.focus();
		this.style.width=list.offsetWidth+'px';
		if (!tag.length) this.selectedIndex=0;
	};
	createTiddlyElement(p,'br');

	var s=createTiddlyElement(p,'select'); s.button=this;
	s.title='select a tiddler or file';
	s.options[0]=new Option('select a tiddler or file...','');
	s.options[s.length]=new Option('[browse for file...]','_file');
	var tids=store.reverseLookup('tags','excludeLists');
	for (var t=0; t<tids.length; t++) {
		s.options[s.length]=new Option(tids[t].title,tids[t].title);
		s.options[s.length-1].title=tids[t].getSubtitle();
	}
	s.size=Math.min(s.length,10);
	s.onclick=function(){ if (!this.value.length) return false;
		var title=this.value; var txt=title;
		if (title=='_file') {
			title=config.quickEdit.promptForFilename('Select a file',
				getLocalPath(document.location.href),'');
			if (!title) { this.selectedIndex=0; this.focus(); return false; }
			var txt=title.substr(title.lastIndexOf('/')+1);
		}
		var txt=prompt('Enter the text to display for this link',txt);
		if (!txt) { this.selectedIndex=0; this.focus(); return false; }
		config.quickEdit.setSelection(this.button,'[['+txt+'|'+title+']]');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s2.style.width=s.offsetWidth+'px';
	s.focus();
	return config.quickEdit.processed(event);"
>link</a></html>
/%
|Name|QuickEdit_macro|
|Source|http://www.TiddlyTools.com/#QuickEdit_macro|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - embed a macro with 'guide text'|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

Note:
Optional 'guideText' can be used to add suggested defaults/placeholders for specific macro parameters.
Add guideText to your own plugin-defined macros using:
	config.macros.macroName.guideText='guide text goes here';

%/<<tiddler {{
	/* define guide text for a few common TW core macros */
	config.macros.edit.guideText='fieldname #rows';
	config.macros.view.guideText='fieldname (link,wikified,date) format';
	config.macros.slider.guideText='cookie TiddlerName label tooltip';
	config.macros.option.guideText='(txtCookieName,chkCookieName)';
	config.macros.tiddler.guideText='TiddlerName with: params...';
	''; /* must return blank to suppress output */ }}>>/%

%/<html><hide linebreaks><a href='javascript:;' class='tiddlyLink' tabindex='-1' 
title='add a macro - \<\<macroName ...\>\>'
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a macro...','');
	var macros=[]; for (var m in config.macros) if (config.macros[m].handler) macros.push(m); macros.sort();
	for (var i=0; i<macros.length; i++) { var m=macros[i];
		var help=config.macros[m].guideText; if (!help) help=''; else help=' '+help;
		s.options[s.length]=new Option(m,m+help);
		s.options[s.length-1].title='\<\<'+m+help+'\>\>';
	}
	s.size=Math.min(s.length,15);
	s.onclick=function(){ if (!this.value.length) return;
		config.quickEdit.setSelection(this.button,'\<\<'+this.value+'\>\>');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>macro</a></html>
/%
|Name|QuickEdit_replace|
|Source|http://www.TiddlyTools.com/#QuickEdit_replace|
|Version|2.4.5|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - find/replace selected text with replacement text|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar
!!!Revisions
<<<
2010.12.26 2.4.5 fix use getField(this) to support hijacks by editSectionPlugin
<<<
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="find/replace selected text with replacement text"
onclick="var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
	var e=config.quickEdit.getField(this);
	var s=config.quickEdit.getSelection(e); 
	var t=createTiddlyElement(p,'input'); t.onfocus=function(){this.select()};
	t.value=s.length?s:'enter target text';
	var r=createTiddlyElement(p,'input'); r.onfocus=function(){this.select()};
	r.value='enter replacement text';
	var b=createTiddlyElement(p,'button',null,null,'?');
	b.style.width='2em';
	b.title='FIND/FIND NEXT target text';
	b.root=this;
	b.onclick=function(ev) { /* FIND */
		var e=config.quickEdit.getField(this.root);
		var t=this.previousSibling.previousSibling;
		var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		e.focus();
		if (e.setSelectionRange) { /* MOZ */
			var newstart=e.value.indexOf(tv,e.selectionStart+1);
			if (newstart==-1) newstart=e.value.indexOf(tv); /* wrap around */
			if (newstart==-1) { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); return; }
			e.setSelectionRange(newstart,newstart+tv.length);
			var linecount=e.value.split('\n').length;
			var thisline=e.value.substr(0,e.selectionStart).split('\n').length;
			e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);
		} else if (document.selection) { /* IE */
			var range=document.selection.createRange();
			if(range.parentElement()==e) {
				range.collapse(false);
				var found=false; try{found=range.findText(v,e.value.length,4)}catch(e){}
				if (found) range.select();
				else { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); }
			}
		}
	};
	b=createTiddlyElement(p,'button',null,null,'=');
	b.style.width='2em';
	b.title='REPLACE selected text';
	b.root=this;
	b.onclick=function(ev) { /* REPLACE */
		var e=config.quickEdit.getField(this.root);
		var t=this.previousSibling.previousSibling.previousSibling;
		var r=this.previousSibling.previousSibling;
		var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		if (   (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
		    || (document.selection && document.selection.createRange().text==''))
			this.previousSibling.click(); /* no selection... do FIND first */
		if (   (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
		    || (document.selection && document.selection.createRange().text==''))
			{ t.focus(); return; } /* still no selection... goto target input */
		e.focus(); replaceSelection(e,rv);
	};
	b=createTiddlyElement(p,'button',null,null,'+');
	b.style.width='2em';
	b.title='REPLACE selected text AND FIND NEXT target text';
	b.onclick=function(ev) { /* REPLACE and FIND NEXT */
		this.previousSibling.click();
		this.previousSibling.previousSibling.click();
	};
	b=createTiddlyElement(p,'button',null,null,'!');
	b.style.width='2em';
	b.title='REPLACE ALL occurrences of target text';
	b.root=this;
	b.onclick=function(ev) { /* REPLACE ALL */
		var e=config.quickEdit.getField(this.root);
		var t=this.previousSibling.previousSibling.previousSibling.previousSibling.previousSibling;
		var r=this.previousSibling.previousSibling.previousSibling.previousSibling;
		var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		if (!tv.length) { alert('Please enter the target text'); t.focus(); return; }
		var m='This will replace all occurrences of:\n\n'+tv+'\n\nwith:\n\n'+rv+'\n\nAre you sure?';
		if (!confirm(m)) { r.focus(); r.select(); return; }
		e.value=e.value.replace(new RegExp(tv.escapeRegExp(),'gm'),rv);
		e.focus(); e.select(); Popup.remove();
	};
	Popup.show();
	if (!s.length) {t.focus();t.select()} else {r.focus();r.select()}
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>replace</a></html>
/%
|Name|QuickEdit_sort|
|Source|http://www.TiddlyTools.com/#QuickEdit_sort|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - sort lines of text|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="sort lines of text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select sort order...','');
	s.options[s.length]=new Option('ascending','A');
	s.options[s.length-1].title='ascending';
	s.options[s.length]=new Option('descending','D');
	s.options[s.length-1].title='descending';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		var e=config.quickEdit.getField(this.button); if (!e) return false;
		var lines=config.quickEdit.getSelection(e).split('\n').sort();
		if (this.value=='D') lines=lines.reverse();
		replaceSelection(e,lines.join('\n'));
		e.focus();
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>sort</a></html>
/%
|Name|QuickEdit_split|
|Source|http://www.TiddlyTools.com/#QuickEdit_split|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - move selection to new tiddler and insert link, embedded tiddler, or slider|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

Based on ideas originally developed by YannPerrin
(http://yann.perrin.googlepages.com/twkd.html#easySlicer)

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="move selection to new tiddler and insert link, embedded tiddler, or slider"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	p.style.whiteSpace='nowrap';
	var i=createTiddlyElement(p,'input');
	i.defaultValue='Enter a new tiddler title';
	i.onfocus=function(){this.select()};
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select type...','');
	s.options[0].title='select split type';
	s.options[1]=new Option('link','link');
	s.options[1].title='replace with [[TiddlerName]]';
	s.options[2]=new Option('embed','embed');
	s.options[2].title='replace with \<\<tiddler TiddlerName\>\>';
	s.options[3]=new Option('slider','slider');
	s.options[3].title='replace with \<\<slider \u0022\u0022 [[TiddlerName]] [[label]] [[tooltip]]\>\>';
	s.onchange=function(){
		if (s.previousSibling.value==s.previousSibling.defaultValue)
			{ alert('A tiddler title is required'); s.selectedIndex=0; s.previousSibling.focus(); return false; }
		var tid=s.previousSibling.value;
		if (store.tiddlerExists(tid) && !confirm(config.messages.overwriteWarning.format([tid])))
			{ s.previousSibling.focus(); return false; }
		switch(s.value) {
			case 'link':
				var newtxt='[['+tid+']]';
				break;
			case 'embed':
				var newtxt='\<\<tiddler [['+tid+']]\>\>';
				break;
			case 'slider':
				var label=prompt('Enter a slider label',tid);
				if (!label) { Popup.remove(); return false; }
				var tip=prompt('Enter a slider tooltip',label);
				if (!tip) { Popup.remove(); return false; }
				var newtxt='\<\<slider \u0022\u0022 [['+tid+']] [['+label+']] [['+tip+']]\>\>';
				break;
		}
		var txt=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		store.saveTiddler(tid,tid,txt,config.options.txtUserName,new Date(),[],{});
		story.displayTiddler(story.findContainingTiddler(this.button),tid);
		config.quickEdit.setSelection(this.button,newtxt);
		Popup.remove(); return false;
	};
	Popup.show();
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>split</a></html>
<<player http://www.youtube.com/embed/bQstQST1GiM 320 280>>
<<jtab 'G C G D'>>
<<jtab 'Bm Em Am'>>
Strum D X U U X
Intro: (G) (Em) (G) (D)

(G) Listen to the rhythm of the (C) falling rain
(G) Telling me just what a fool I've (D) been
I (G) wish that it would go and let me (C) cry in vein
and (G) let me be A-(D)-lone A-(G)-gain (D)

The (G) only girl I care about is (C) gone away
(G) Looking for a brand new (D) start
But (G) little does she know that when she (C) left that day
A-(G)- long with her she (D) took my (G) heart

(C) Rain please tell me now does (Bm) that seem fair
For (C) her to steal my heart away when (G) she don't care
I (Em) can't love another when my (Am) heart is some-(D) where far a-(G) -way (D)

The (G) only girl I care about is (C) gone away
(G) Looking for a brand new (D) start
But (G) little does she know that when she (C) left that day
A-(G)- long with her she (D) took my (G) heart (D)

Instrumental

(C) Rain won't you tell her that I (Bm) love her so
(C) Please ask the sun to set her (G) heart a glow
(Em) Rain in her heart and let eh (Am) love we (D) knew start to (G) grow  (D)

(G) Listen to the rhythm of the (C)  falling rain
(G) Telling me just what a fool I've (D) been
I (G) wish that it would go and let (C) me cry in vein
and(G)  let me be A-(D)-lone A-(G)-gain (D)

O (G) listen to the (Em) falling rain, (G) pitter patter pitter (Em) patter
<<jtab 'G C D'>>

"Ring of Fire" by Johnny Cash

[G]Love is a [C]burning [G]thing
And it makes a [C]fiery [G]ring
Bound by [C]wild de[G]sire
I fell into a [C]ring of [G]fire

[D]I fell in to a [C]burning ring of [G]fire
I went [D]down, down, down
And the [C]flames went [G]higher

And it [G]burns, burns, burns
The [C]ring of [G]fire
The [C]ring of [G]fire

[G]The taste of [C]love is [G]sweet
When hearts like [C]ours [G]meet
I fell for you [C]like a [G]child
Oh but the [C]fire went [G]wild

[D]I fell in to a [C]burning ring of [G]fire
I went [D]down, down, down
And the [C]flames went [G]higher

And it [G]burns, burns, burns
The [C]ring of [G]fire
The [C]ring of [G]fire

[G]And it burns, burns, burns
The [C]ring of [G]fire
The [C]ring of [G]fire 
<<uChord "Am G Am D Am C G Am">>
<<audioMacro id:"5" label:"Mike Strumming" url:"http://davidrschaller.servehttp.com/audio/SF_Strumming.mp3">>D DU DU
<<audioMacro id:"4" label:"Arpeggio PPIMIP" url:"http://davidrschaller.servehttp.com/audio/arpeggio-PPIMIP.mp3">> 4 3 2 1 2 3
<<player id=1 "http://www.youtube.com/embed/h09MCyDUeWI#t=6m9s" 320 240>>
Chord Progression 
A A A A G A A
A D A A A 
C C G G 
A G G A

<<uChord ntype:"cl" nota:"Are you [Am] going to [G]Scarborough [Am]Fair">>
<<uChord ntype:"cl" nota:"[Am]Parsley sage [D]rosemary and [Am]thyme">>
<<uChord ntype:"cl" nota:"Remember [C]me to one who lives [G]there">>
<<uChord ntype:"cl" nota:"[Am]She once [G]was a true love of [Am]mine">>

//{{{

Tell her to make me a cambric shirt
Parsley sage rosemary and thyme
Without any seam or fine needle 	work
And 	then she'll 	be a true love of 	mine

Will you reap it with sickle of leather
Parsley sage rosemary and thyme
And tie it 	all up with a peacock's feather
Or never be a true love of mine

Will you find me an acre of land
Parsley sage rosemary and thyme
Between the sea foam and the sea sand
Or never be a true love of mine

Will you plough it with a lamb's horn
 	G	Em	G	A	Em
 	 Parsley 	sage 	rose	mary and 	thyme
 	G	D
And sow it all 	over with one pepper	corn
 	Em	D	Em
Or 	never 	be a true love of 	mine

 	Em	D	Em
 	Tell her to wash it in 	yonder dry 	well
 	G	Em	G	A	Em
 	 Parsley 	sage 	rose	mary and 	thyme
 	G	D
Where water ne'er 	sprung, nor drop of rain 	fell
 	Em	D	Em
And 	then she'll 	be a true love of 	mine

 	Em	D	Em
 	Tell her to dry it 	on yonder 	thorn
 	G	Em	G	A	Em
 	 Parsley 	sage 	rose	mary and 	thyme
 	G	D
Which never 	bore blossom since Adam was 	born
 	Em	D	Em
And 	then she'll 	be a true love of 	mine

 	Em	D	Em
 	When you've done and 	finished your 	work
 	G	Em	G	A	Em
 	 Parsley 	sage 	rose	mary and 	thyme
 	G	D
Then come to 	me for your cambric 	shirt
 	Em	D	Em
And 	you shall 	be a true love of 	mine
//}}}

Full Lesson
<<player id=2 http://www.youtube.com/embed/h09MCyDUeWI 320 240>>
<<uChord 'G  Dsus4  Am  Em'>>
VERSE 1:
[G]Since you've been [D]Gone, [Am]I feel my life [Em]slipping away.
[G]I look to the [D]sky, [Am]and everything is [Em]turning gray.
[G]All I made was [D]one mistake, [Em]how much more will I [F]have to pay.

[C]Why can't you [G][D]think it over.  [C][E]Why can't you [D][F#]forget about the [D]past?
[G]When love makes a [D]sound babe, [Am]a heart needs a [C]second chance.
[G]Don't put me [D]down babe, [Am]can't you see I love [D]you.
[G]Since you've been gone  I've [D]been in a trance.
[Am]This heart needs a [Em]second chance.
[Am]Don't say it's over, I [C]just can't say goodbye.[G]
<<uChord 'Dsus4  Am  Em  D'>>
[G]So this is [D]love, [Am]standing in the [Em]pouring rain.
[G]I've called on [D]you.  [Am]'Cause she never [Em]meant a thing.
[G]All I know I ain't [D]got the right [Em]to ask you to [F]sympathize.  But ... (to CHORUS)

BRIDGE: (lead-in: G  D/F#  Em)
D                  G                   Em
I never loved her.  I never needed her.
                           C   G/B   Am
She was willing and that's all there is to say.
               C/G                          D
Don't forsake me, please don't leave me now.
G      D                  Am
A heart needs a second chance.

INSTRUMENTAL: C  G  D  Am  D  G  D  Am  Em  Am  C

FINAL VERSE/CHORUS:
G                 G/D             C/E             D/F#
Please forgive me and forget it.  I was wrong and I admit it.
G            G/D           C/E             D/F#
Why can't we talk it over, why can't we forget about,
   D                   G       D                      Am
forget about the past.  A heart needs a second chance.
     C                       G       D                      Am
When love makes a sound babe, a heart needs a second chance.
     C                   G
Don't put me down babe.  Since you've been gone,
    D                 Am                    Em
I've been in a trance.  This heart needs a second chance.
Am                     C                      G
Don't say it's over, I just can't say goodbye.

REPEAT AND FADE: (lead-in: D)
G      D                 Am         C
A heart needs a second chance.  When love makes a sound babe.
G/Am/F C		       G/Am
Baby,  I'm hot just like your oven
	     F/C	
I need some lovin'
   G/Am/F C			   G/Am
And baby,  I can't hold it much longer
             F		        C
It’s getting stronger and stronger
G		Am
When I get this feeling I want
F      C
Sexual healing
G/Am      F/C
Sexual healing
G	 Am	     F/C
It makes me feel so fine
G	  Am		F/C
It helps to relieve my mind
G/Am	  F     C
Sexual healing, is good for us
G/Am		F
Sexual healing is something that is so very good for me

C	  Em
Whenever these blue tear drops are falling, oh no
F		  D	       F
And my emotional stability is leaving me
C			Em
But there is something I can do
	  F			    D		F
Oh I can get on the telephone and call you up baby
C	  Em
Darling I know you'll be there to relieve me
F            D			F
The love you give to me will free me
C	    Em
So if you don't know the things you're dealing
  F
Well I can tell you darling, oh it's
D      F
Sexual healing..

G	    Am
Get up, get up, get up, get up
F		 C
Let's make love tonight
G            Am
Wake up, wake up, wake up, wake up
F		  C
'Cause you do it right

G    Am     F  C
Heal me, my darling
G    Am     F  C
Heal me, my darling
G    Am     F  C
Heal me, my darling
G    Am     F  C
Heal me, my darling

<<jtab 'G Gmaj7 Em G7'>>
<<jtab 'C D C D'>>
D D D DU / D - D DU
[G]She's got a [Gmaj7]way [Em]about [G7]her 
[C]I don't know what it is, but I know [D]that I can't [C]live without [D]her
<<jtab 'G Gmaj7 Em G7'>>

She's got a way of pleasin' 
[C]I don't know [Gm7]what it is, [C]but there doesn't Anywhere ...

<<player http://www.youtube.com/v/uPgpJ1IeDvA?version=3 320 240>>
<<uChord "C C7 F C D7 G7">>
<<uChord 'C C7 F E7'>>
//{{{
C                     C7
Show me the way to go home.
      F               C
I'm tired, & I wanna go to bed.
	                                                              
I had a little drink about an hour ago,
      D7             G7
& it went right to my head.
  C             C7
Wherever I may roam,
     F           E7
on land or sea or foam,
               C                    
you can always hear me singin' this song:
    G7                    C          G7
1. Show me the way to go home.  Oh… (to top)
     G7                   C          G7
2. Show me the way to go home.  Oh… (to top)
    G7      
3. Show me the way to go (x2)
                        C    ( G7 – C! )
Show me the way to go home.

Uncle Rod’s ‘Ukulele Song Book  2009, ( rohiguchi@gmail.com )
//}}}
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>

Uke with A Smile!
David's Ukulele Journey
/***
|Name|SnapshotPlugin|
|Source|http://www.TiddlyTools.com/#SnapshotPlugin|
|Documentation|http://www.TiddlyTools.com/#SnapshotPluginInfo|
|Version|1.4.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|save or print HTML+CSS image of rendered document content|
This plugin provides a macro as well as tiddler toolbar commands to create a file or browser window containing the //rendered// CSS-and-HTML that is currently being displayed for selected elements of the current document.
!!!!!Documentation
>see [[SnapshotPluginInfo]]
!!!!!Configuration
<<<
<<option chkSnapshotHTMLOnly>> output HTML only (omit CSS)
<<<
!!!!!Revisions
<<<
2011.01.03 1.4.2 added snapshotSaveViewer toolbar command
2010.12.15 1.4.1 added 'snapshot' class to wrapper
|please see [[SnapshotPluginInfo]] for additional revision details|
2008.04.21 1.0.0 initial release - derived from [[NewDocumentPlugin]] with many improvements...
<<<
!!!!!Code
***/
//{{{
version.extensions.SnapshotPlugin= {major: 1, minor: 4, revision: 2, date: new Date(2011,1,3)};

if (config.options.chkSnapshotHTMLOnly===undefined)
	config.options.chkSnapshotHTMLOnly=false;

config.macros.snapshot = {
	snapLabel: "save a snapshot",
	printLabel: "print a snapshot",
	snapPrompt: "save an HTML image",
	printPrompt: "print an HTML image",
	hereID: "here",
	viewerID: "viewer",
	storyID: "story",
	allID: "all",
	askID: "ask",
	askTiddlerID: "askTiddler",
	askDOMID: "askDOM",
	askMsg: "select an element...",
	hereItem: "tiddler: '%0'",
	viewerItem: "tiddler: '%0' (content only)",
	storyItem: "story column (one file)",
	storyFilesItem: "story column (multiple files)",
	allItem: "entire document",
	tiddlerItem: "select a tiddler...",
	IDItem: "select a DOM element by ID...",
	HTMLItem: "[%0] output HTML only (omit CSS)",
	fileMsg: "select or enter a target path/filename",
	defaultFilename: "snapshot.html",
	okmsg: "snapshot written to %0",
	failmsg: "An error occurred while creating %0",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var printing=params[0]&&params[0]=="print"; if (printing) params.shift();
		params = paramString.parseParams("anon",null,true,false,false);
		var id=getParam(params,"id","here");
		var label=getParam(params,"label",printing?this.printLabel:this.snapLabel);
		var prompt=getParam(params,"prompt",printing?this.printPrompt:this.snapPrompt);
		var btn=createTiddlyButton(place,label,prompt, function(ev){
			this.setAttribute("snapID",this.getAttribute("startID"));
			config.macros.snapshot.go(this,ev)
		});
		btn.setAttribute("startID",id);
		btn.setAttribute("snapID",id);
		btn.setAttribute("printing",printing?"true":"false");
		btn.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
	},
	go: function(here,ev) {
		var cms=config.macros.snapshot; // abbreviation
		var id=here.getAttribute("snapID");
		var printing=here.getAttribute("printing")=="true";
		var HTMLOnly=here.getAttribute("HTMLOnly")=="true";

		if (id==cms.askID||id==cms.askTiddlerID||id==cms.askDOMID) {
			cms.askForID(here,ev);
		} else if (id==cms.storyID) {
			story.forEachTiddler(function(t,e) {
				var out=cms.getsnap(e,e.id,printing,HTMLOnly);
				if (printing) cms.printsnap(out);
				else cms.savesnap(out,e.getAttribute('tiddler')+'.html');
			});
		} else {
			if (id==cms.allID) id="contentWrapper";
			var snapElem=document.getElementById(id);
			if (id==cms.hereID || id==cms.viewerID)
				var snapElem=story.findContainingTiddler(here);
			if (snapElem && hasClass(snapElem,"tiddler") && (id==cms.viewerID || HTMLOnly)) {
				// find viewer class element within tiddler element
				var nodes=snapElem.getElementsByTagName("*");
				for (var i=0; i<nodes.length; i++)
					if (hasClass(nodes[i],"viewer")) { snapElem=nodes[i]; break; }
			}
			if (!snapElem) // not in a tiddler or no viewer element or unknown ID
				{ e.cancelBubble=true; if(e.stopPropagation)e.stopPropagation(); return(false); }
			// write or print snapshot
			var out=cms.getsnap(snapElem,id,printing,HTMLOnly);
			if (printing) cms.printsnap(out); else cms.savesnap(out);
		}
		return false;
	},
	askForID: function(here,ev) {
		var ev = ev ? ev : window.event; 
		var cms=config.macros.snapshot; // abbreviation
		var id=here.getAttribute("snapID");
		var indent='\xa0\xa0\xa0\xa0';
		var p=Popup.create(here); if (!p) return false; p.className+=' sticky smallform';
		var s=createTiddlyElement(p,'select'); s.button=here;
		if (id==cms.askID) {
			s.options[s.length]=new Option(cms.askMsg,cms.askID);
			var tid=story.findContainingTiddler(here);
			if(tid) { 
				var title=tid.getAttribute("tiddler");
				if (here.getAttribute("HTMLOnly")!="true")
					s.options[s.length]=new Option(indent+cms.hereItem.format([title]),cms.hereID);
				s.options[s.length]=new Option(indent+cms.viewerItem.format([title]),cms.viewerID);
			}
			s.options[s.length]=new Option(indent+cms.tiddlerItem,cms.askTiddlerID);
			s.options[s.length]=new Option(indent+cms.IDItem,cms.askDOMID);
			s.options[s.length]=new Option(indent+cms.storyItem,"tiddlerDisplay");
			s.options[s.length]=new Option(indent+cms.storyFilesItem,cms.storyID);
			s.options[s.length]=new Option(indent+cms.allItem,"contentWrapper");
		}
		if (id==cms.askDOMID) {
			s.options[s.length]=new Option(cms.IDItem,cms.askDOMID);
			var elems=document.getElementsByTagName("*");
			var ids=[];
			for (var i=0;i<elems.length;i++)
				if (elems[i].id.length && elems[i].className!="animationContainer")
					ids.push(elems[i].id);
			ids.sort();
			for (var i=0;i<ids.length;i++) s.options[s.length]=new Option(indent+ids[i],ids[i]);
		}
		if (id==cms.askTiddlerID) {
			s.options[s.length]=new Option(cms.tiddlerItem,cms.askTiddlerID);
			var elems=document.getElementsByTagName("div");
			var ids=[];
			for (var i=0;i<elems.length;i++) { var id=elems[i].id;
				if (id.length && id.substr(0,story.idPrefix.length)==story.idPrefix && id!="tiddlerDisplay")
					ids.push(id);
			}
			ids.sort();
			for (var i=0;i<ids.length;i++) s.options[s.length]=new Option(indent+ids[i].substr(story.idPrefix.length),ids[i]);
		}
		s.options[s.length]=new Option(cms.HTMLItem.format([here.getAttribute("HTMLOnly")=="true"?"\u221a":"_"]),cms.HTMLItem);
		s.onchange=function(ev){
			var ev = ev ? ev : window.event; 
			var cms=config.macros.snapshot; // abbreviation
			var here=this.button;
			if (this.value==cms.HTMLItem) {
				config.options.chkSnapshotHTMLOnly=!config.options.chkSnapshotHTMLOnly;
				here.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
				config.macros.option.propagateOption("chkSnapshotHTMLOnly","checked",
					config.options.chkSnapshotHTMLOnly,"input");
			} else
				here.setAttribute("snapID",this.value);
			config.macros.snapshot.go(here,ev);
			return false;
		};
		Popup.show();
		ev.cancelBubble=true;
		if(ev.stopPropagation)ev.stopPropagation();
		return false;
	},
	getpath: function() {
		// get current path
		var path=getLocalPath(window.location.href);
		var slashpos=path.lastIndexOf("/");
		if (slashpos==-1) slashpos=path.lastIndexOf("\\"); 
		if (slashpos!=-1) path=path.substr(0,slashpos+1); // trim filename
		return path;
	},
	getsnap: function(snapElem,id,printing,HTMLOnly) {
		var cms=config.macros.snapshot; // abbreviation
		var out='<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" />';
		if (printing)
			out+='<base href="file:///'+cms.getpath().replace(/\\/g,'/')+'"></base>\n';
		if (!HTMLOnly) {
			var styles=document.getElementsByTagName('style');
			var fmt='<style>\n/* stylesheet=%0 */\n%1\n\n</style>\n';
			for(var i=0; i < styles.length; i++)
				out+=fmt.format([styles[i].getAttribute('id'),styles[i].innerHTML]);
		}
		out+='</head>\n';

		var elems=snapElem.getElementsByTagName('input');
		for (var i=0; i<elems.length; i++) { var e=elems[i];
			if (e.type=='text')		e.defaultValue=e.value;
			if (e.type=='checkbox')	 	e.defaultChecked=e.checked;
			if (e.type=='radiobutton')	e.defaultChecked=e.checked;
		}
		var elems=snapElem.getElementsByTagName('textarea');
		for (var i=0; i<elems.length; i++)	elems[i].defaultValue=elems[i].value;

		var fmt='<body>\n\n<div class="snapshot %0">%1</div>\n\n</body>\n';
		out+=fmt.format([(id==cms.viewerID?'tiddler viewer':''),snapElem.innerHTML]);

		return '<html>\n'+out+'</html>';
	},
	printsnap: function(out) {
		var win=window.open("","_blank","");
		win.document.open();
		win.document.writeln(out);
		win.document.close();
		win.focus(); // bring to front
		win.print(); // trigger print dialog
	},
	savesnap: function(out,target) {
		var cms=config.macros.snapshot; // abbreviation
		// make sure we are local
		if (window.location.protocol!="file:")
			{ alert(config.messages.notFileUrlError); return; }
		var target=target||cms.askForFilename(cms.fileMsg,cms.getpath(),cms.defaultFilename);
		if (!target) return; // cancelled by user
		// if specified file does not include a path, assemble fully qualified path and filename
		var slashpos=target.lastIndexOf("/"); if (slashpos==-1) slashpos=target.lastIndexOf("\\");
		if (slashpos==-1) {
			var h=document.location.href;
			var cwd=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1)));
			target=cwd+target;
		}
		var link="file:///"+target.replace(/\\/g,'/'); // link for message text
		var ok=saveFile(target,convertUnicodeToUTF8(out));
		var msg=ok?cms.okmsg.format([target]):cms.failmsg.format([target]);
		displayMessage(msg,link);
	},
	askForFilename: function(msg,path,file) {
		if(window.Components) { // moz
			try {
				netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
				var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
				var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
				picker.init(window, msg, nsIFilePicker.modeSave);
				var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
				thispath.initWithPath(path);
				picker.displayDirectory=thispath;
				picker.defaultExtension='html';
				picker.defaultString=file;
				picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
				if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;
			}
			catch(e) { alert('error during local file access: '+e.toString()) }
		}
		else { // IE
			try { // XP/Vista only
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
				s.FilterIndex=3; // default to HTML files;
				s.InitialDir=path;
				s.FileName=file;
				if (s.showOpen()) var result=s.FileName;
			}
			catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
		}
		return result;
	}
};
//}}}

// // TOOLBAR DEFINITIONS
//{{{
config.commands.snapshotSave = {
	text: "snap",
	tooltip: config.macros.snapshot.snapPrompt,
	handler: function(ev,src,title) {
		src.setAttribute("snapID","ask");
		src.setAttribute("printing","false");
		src.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
		config.macros.snapshot.go(src,ev);
		return false;
	}
};
config.commands.snapshotSaveViewer = {
	text: "snap",
	tooltip: config.macros.snapshot.snapPrompt,
	handler: function(ev,src,title) {
		src.setAttribute("snapID","viewer");
		src.setAttribute("printing","false");
		src.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
		config.macros.snapshot.go(src,ev);
		return false;
	}
};
config.commands.snapshotPrint = {
	text: "print",
	tooltip: config.macros.snapshot.printPrompt,
	handler: function(ev,src,title) {
		src.setAttribute("snapID","ask");
		src.setAttribute("printing","true");
		src.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
		config.macros.snapshot.go(src,ev);
		return false;
	}
};
config.commands.snapshotPrintViewer = {
	text: "print",
	tooltip: config.macros.snapshot.printPrompt,
	handler: function(ev,src,title) {
		src.setAttribute("snapID","viewer");
		src.setAttribute("printing","true");
		src.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
		config.macros.snapshot.go(src,ev);
		return false;
	}
};
//}}}

// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
	// if click is in a sticky popup, ignore it so popup will remain visible
	var e = ev ? ev : window.event; var target = resolveTarget(e);
	var p=target; while (p) {
		if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
		else p=p.parentNode;
	}
	if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
		Popup.onDocumentClick(ev);
	return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
<<list filter "[tag[song]] [sort[-Title]]">> 
<html>
<form method="post" action="http://www.ukulele-tabs.com/search-uke-chords.html" target="_blank">Ukulele Tabs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="text" class="search_input" name="find" size="25" autocomplete="off" /><input type="hidden" name="field" value="s"><input type="hidden" name="searching" value="yes" />
<input type="submit" value="Search" class="search_submit" /></form>
<form action="http://www.ultimate-guitar.com/search.php"  target="_blank">
Ultimate Guitar Tabs<input size="25" name="value" id="search_input" autocomplete="off" class="searchinp">
<input type="hidden" name="search_type" value="title" /><input class="submit" type="submit" value="Search"></form>

<form action="http://www.ukulelesongs.com/ukulele_search.php" id="cse-search-box"  target="_blank">
  <div>
    <input type="hidden" name="cx" value="partner-pub-2267135083079281:55wr4odez15" />
    <input type="hidden" name="cof" value="FORID:11" />
    <input type="hidden" name="ie" value="ISO-8859-1" />
    Ukulele Songs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
<input type="text" name="q" size="25" autocomplete="off" />
    <input type="submit" name="sa" value="Search" />
  </div>

</form>



</html>
[[DrUke|http://www.doctoruke.com/beginners.html]]
[[DrUke More|http://www.doctoruke.com/songs.html]]
[[Scorpex|http://www.scorpex.net/Uke/]]
<<player http://www.youtube.com/embed/QGCUGVE11XU 360 240>>
<<uChord 'Dm Gm Dm A7 Dm'>>
<<uChord 'C7 F A7 Dm'>>
<<uChord 'C7 F Bb A7'>>
//{{{
Spiderman
by Bob Harris
	"Spiderman" by Bob Harris

Verse 1:

[Em]Spiderman, Spiderman
Does whatever a spider can
[Am]Spins a web, any size
[Em]Catches thieves just like flies
Look [B7]Out! Here comes the Spider[Em]man

Verse 2:

[Em]Is he strong? Listen bud
He's got radioactive blood
[Am]Can he swing from a thread?
[Em]Take a look overhead
Hey, [B7]there! There goes the Spider[Em]man

Bridge:

In the [D7]chill of [G]night
At the [B7]scene of a [Em]crime
Like a [D7]streak of [G]light
He ar[C6]rives just in [B7]time

Verse 3:

[Em]Spiderman, Spiderman
Friendly neighborhood Spiderman
[Am]Wealth and fame he's ignored
[Em]Action is his reward.

Ending:

To [B7]him, life is a great big [Em]bang up
[B7]Whenever there's a [Em]hang up
[B7]You'll find the Spider [Em]man!
//}}}
<<player http://www.youtube.com/embed/1xkkhLhsP4A 360 240>>
[[TAB|tabs/heavenlyriff.pdf]]
<<myAudio id:"1" title:"Shuffle Strum" mp3:"http://davidrschaller.servehttp.com/audio/shuffleStrum.mp3" artist:'David R. Schaller'>> DUDUDUDU Straight 8th notes 
<<myAudio id:"2" title:"Swing Shuffle Strum" mp3:"http://davidrschaller.servehttp.com/audio/swingShuffle.mp3" artist:'David R. Schaller'>> DU DU DU DU 
<<myAudio id:"3" title:"Church Lick Strum" mp3:"http://davidrschaller.servehttp.com/audio/churchLickStrum.mp3"  artist:'David R. Schaller'>>   D-DU D-DU D-DU D-DU 
<<myAudio id:"4" title:"Calipso Strum" mp3:"http://davidrschaller.servehttp.com/audio/calipsoStrum.mp3"  artist:'David R. Schaller'>>   D--DU-UDU 

Ukulele Mike Tutorial
<<player http://www.youtube.com/embed/J_dIPS9R8kU 320 240>>

Other Strumming Patterns:
<html><div align="center"><iframe src="http://www.ezfolk.com/uke/Tutorials/Strumming/strumming.html" frameborder="0" width="100%" height="600"></iframe></div></html>
[[StyleSheetShortcuts]]
<<launchForm>>

<<formTiddler uChordForm>><data>{"in":"c"}</data>

<html><div id="testForm">This is a test</div></html>
<html>
<span id="fooBar">&nbsp;</span>
</html>
<<makeButton>>
Change current content in div located in Test tiddler

<html>
<script>
jQuery("#testForm").html("<b>Most Awesome!</b>");
</script>
</html>
//{{{
<<uChord ntype:"c" nota:"C | D / F || G">> No brackets or lyrics needed when ntype is c

<<uChord nota:"Bb D F">> When ntype not specified, defaults to c

<<uChord ntype:"cl" nota:"Have a [F]nice [C] day.[F] Sounds good [C#] to [Bb]me!">>
//}}}

<<uChord ntype:"c" nota:"C | D / F || G">> No brackets or lyrics needed when ntype is c

<<uChord nota:"Bb D F">> When ntype not specified, defaults to c

<<uChord ntype:"cl" nota:"aaaaaaa[F]bbbbb">>

<<uChord ntype:"cl" nota:"{notation and or lyrics}">>
[[The Naked Flea|http://www.nalt.com/nakedflea/pdfs/first_chords.pdf]]

D7 / G7 / C /// D7 / G7 / C ///
<<uChord ntype:'cl' nota:'[D7] / [G7] / [C] / / / [D7] / [G7] / [C] / / /'>>

G7 / D7 / F /// G7 / D7 / F ///
<<uChord ntype:'cl' nota:'[G7] / [D7] / [F] / / / [G7] / [D7] / [F] / / /'>>

<<snapshot label:'Print This' prompt:'Ok to Print?' id:ask>>
Artist: Bruno Mars
Album: Doo-Wops and Hooligans
<<player http://www.youtube.com/embed/3FZtN7T5PXM#t=0m15s 360 240>>
<<uChord 'G Bm C'>>
//{{{

CHORUS:
G                  D         C
Today I don't feel like doing anything
G            D        C
I just wanna lay in my bed
G                       D
Don't feel like picking up my phone
C
So leave a message at the tone
G                       Bm       C      
Cause today I swear I'm not doing anything

VERSE 1:

    G                             D
Uh, I'm gonna kick my feet up and stare at the fan
C
Turn the TV on, Throw my hand in my pants
G              Bm       C                  
Nobody's gonna tell me I can't, nah

G                               D
I'll be lying on the couch just chillin in my snuggie
C
Click to MTV so they can teach me how to dougie
G                  D              C
Cause in my castle I'm the freakin man

PRE-CHORUS:

       Am
Oh Oh, yes I said it
Bm
I said it
C                 D              
I said it cause I can

CHORUS:
G                  D         C
Today I don't feel like doing anything
G            D        C
I just wanna lay in my bed
G                       D
Don't feel like picking up my phone
C
So leave a message at the tone
G                       Bm       C      
Cause today I swear I'm not doing anything

Nothing at all
G       D
Ooh hoo ooh hoo
C
Hoo ooh ooh, Nothing at all
G       D
Ooh hoo ooh hoo
C
Hoo ooh ooh

VERSE 2:

G                           D
Tomorrow I wake up, do some P90X
C
With a really nice girl have some really nice sex
G                      D              C   
And she's gonna scream out, "this is great" (Oh my god this is great)
G                              D
I might mess around and get my college degree
C
I bet my old man will be so proud of me
G                  Bm          C
I'm sorry pops you just have to wait

PRE-CHORUS:

       Am
Oh Oh, yes I said it
Bm
I said it
C                 D              
I said it cause I can

CHORUS:
G                  D         C
Today I don't feel like doing anything
G            D        C
I just wanna lay in my bed
G                       D
Don't feel like picking up my phone
C
So leave a message at the tone
G                       Bm       C      
Cause today I swear I'm not doing anything

BRIDGE:

     Am                 D
No I ain't gonna comb my hair
        G              D
Cause I ain't going anywhere
C           Bm         G
No no no no no no no no nooo
          Am                  D
I'll just strut in my birthday suit
    G                   D
And let everything hang loose
C                   Bm                 G      Em
Yeah yeah yeah yeah yeah yeah yeah yeah yeahhh

CHORUS:
    G                  D         C
Ohh,Today I don't feel like doing anything
G            D        C
I just wanna lay in my bed
G                       D
Don't feel like picking up my phone
C
So leave a message at the tone
G                       Bm       C      
Cause today I swear I'm not doing anything

Nothing at all
G       D
Ooh hoo ooh hoo
C
Hoo ooh ooh, Nothing at all
G       D
Ooh hoo ooh hoo
C
Hoo ooh ooh
           G
Nothing at all

//}}}
<<uChord 'G C G D7'>>
<<audioMacro id:"2" label:"Swing Shuffle Strum" url:"http://davidrschaller.servehttp.com/audio/swingShuffle.mp3">> DU DU DU DU 

(A-weema-weh, a-weema-weh, a-weema-weh, a-weema-weh)
(A-weema-weh, a-weema-weh, a-weema-weh, a-weema-weh)

In the [G]jungle, the [C]mighty jungle
The [G]lion sleeps [D7]tonight
In the jungle the quiet jungle
The lion sleeps tonight

Near the village 
the peaceful village
The lion sleeps tonight
Near the village the quiet village
The lion sleeps tonight

Hush my darling don't fear my darling
The lion sleeps tonight
Hush my darling don't fear my darling
The lion sleeps tonight


<<player http://www.youtube.com/embed/H5NMQlDWFOc 320 240>>

[[Online 81 Uke Mike-The Lion Sleeps Tonight|http://www.youtube.com/user/MusicTeacher2010?feature=mhum#p/u/125/H5NMQlDWFOc]]
<<jtab 'C G7 F G C Cm7'>>

<<<
{{{
 	C                      G7          F               G       C   
Some say love, it is a river, that drowns the 	tender reed
 	C	                G7	        F	         G	    C
Some say love, it is a razor, that leads your  soul to bleed
 	        Cmaj7	F                                      G7
Some say 	love it is a 	hunger, an endless aching 	need
 	C	        G	         F	          C
I say love it is a 	flower and 	you its only seed

 	C                      G7	            F	    G	          C
It's the heart afraid of 	breaking that never learns to dance
 	C	                 G7             F	  G	       C
It's the dream afraid of waking that never takes a chance
 	Em	                      Am7	      F	             G
It's the one, who won't be taken who cannot seem to give
 	    C	                G	        F	G	      C
And the soul afraid of 	dying that 	never learns to live

 	       C	                   G7          	F	     G	           C
When the night has been too lonely and the	road has been too long
 	C	                    G7	      F     G 	C
And you find that love is only for the lucky and the strong
 	Em	                Am7	       F	              G
Just remember in the 	winter for 'neath the bitter snow
 	C	                        G	                  F	    G	               C
Lies the seed that with the sun's love, in the spring becomes the rose
}}}
>>>
Intro
-----

G, Cm, Fm, G7



Verse 01
--------
G                       Cm
I was so high I did not recognize
		       Fm
The fire burning in her eyes
               G7
The chaos that controlled my mind
G                            Cm
whispered goodbye as she got on a plane
	    Fm
Never to return again
                 G7
But always in my heart


Chorus
------
 Cm  Fm       Bb        Eb
This love has taken its toll on me
 Cm          Fm      Bb           Eb
She said Goodbye too many times before
    Cm  Fm       Bb          Eb
And her heart is breaking in front of me
 Cm       Fm           Bb              Ab     G
I have no choice cause I won't say goodbye anymore


Cm, Fm, G7


Verse 02
--------
G                           Cm
I tried my best to feed her appetite
                Fm
Keep her coming every night
                    G7
So hard to keep her satisfied
G                             Cm
Kept playing love like it was just a game
              Fm
Pretending to feel the same
                     G7
Then turn around and leave again  (oh!)


Chorus
------
 Cm  Fm       Bb        Eb
This love has taken its toll on me
 Cm          Fm      Bb           Eb
She said Goodbye too many times before
    Cm  Fm       Bb          Eb
And her heart is breaking in front of me
 Cm       Fm           Bb              Ab     G
I have no choice cause I won't say goodbye anymore

Cm, Fm, G7


Bridge
------
Fm
I'll fix these broken things
Ebmaj7
Repair your broken wings
G7                          Cm
And make sure everything's alright (it's alright)
Fm
My pressure on her hips
Ebmaj7
Sinking my fingertips
G
Into every inch of you
G7
Cause I know that's what you want me to do


Chorus
------
 Cm  Fm       Bb        Eb
This love has taken its toll on me
 Cm          Fm      Bb           Eb
She said Goodbye too many times before
    Cm  Fm       Bb          Eb
And her heart is breaking in front of me
 Cm       Fm           Bb              Ab     G
I have no choice cause I won't say goodbye anymore
 Cm  Fm       Bb        Eb
This love has taken its toll on me
 Cm          Fm      Bb           Eb
She said Goodbye too many times before
    Cm  Fm       Bb          Eb
And her heart is breaking in front of me
 Cm       Fm           Bb              Ab     G
I have no choice cause I won't say goodbye anymore
 Cm  Fm       Bb        Eb
This love has taken its toll on me
 Cm          Fm      Bb           Eb
She said Goodbye too many times before
    Cm  Fm       Bb          Eb
And her heart is breaking in front of me
 Cm       Fm           Bb              Ab     G
I have no choice cause I won't say goodbye anymore


End
---
<<player http://www.youtube.com/embed/mgP4kT5-9Cc#t=3m47s 320 240>>
<<uChord 'Bm D Em A F C Dm B'>>

<<<
{{{
(Bm)       (D)        Bm         D
This was a triumph
Bm           D          Bm       D        Bm
I’m making a note here: huge success
Em               A             D    Bm    D   
It’s hard to overstate my satisfaction
Bm       D       Bm       D
Aperture Science
Bm            D      Bm       D       Bm 
We do what we must because we can
Em              A
For the good of all of us
Bbm7
Except the ones who are dead
F                    C           Bb       F
But there’s no sense crying over every mistake
F                C               Bb         F
You just keep on trying till you run out of cake
Gm                   C            F           Dm
And the science gets done and you make a neat gun
B                      A      D    Bm   D 
For the people who are still alive

Bm           D         Bm         D
I’m not even angry
Bm        D     Bm         D        Bm
I’m being so sincere right now
Em              A                  D        Bm    D 
Even though you broke my heart and killed me
Bm             D       Bm       D
And tore me to pieces
Bm              D      Bm    D       Bm 
And threw every piece into a fire
Em                A
As they burned it hurt because
Bbm7
I was so happy for you
F                   C           Bb        F
Now these points of data make a beautiful line
F                C             Bb         F
And we’re out of beta, we’re releasing on time
Gm                C                F                 Dm
So I’m glad I got burned, think of all the things we learned
B                      A      D    Bm   D 
For the people who are still alive

Bm           D         Bm         D
Go ahead and leave me
Bm             D      Bm     D        Bm
I think I’d prefer to stay inside
Em                A               D        Bm    D 
Maybe you’ll find someone else to help you
Bm          D       Bm       D
Maybe Black Mesa
Bm         D        Bm      D       Bm 
That was a joke, ha ha, fat chance
Em          A
Anyway this cake is great
Bbm7
It’s so delicious and moist
F                C                    Bb         F
Look at me still talking when there’s science to do
F               C                 Bb           F
When I look out there it makes me glad I’m not you
Gm                  C             F              Dm
I’ve experiments to run, there is research to be done
B                     A      D    Bm   D 
On the people who are still alive

       Bm        D         Bm     D
And believe me I am still alive
          Bm          D          Bm     D
I’m doing science and I’m still alive
       Bm            D          Bm     D
I feel fantastic and I’m still alive
                 Bm         D         Bm     D
And while you’re dying I’ll be still alive
                Bm          D         Bm     D
And when you’re dead I will be still alive
D      Bm
Still alive
D      Bm
Still alive
}}}
>>>
|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields syncing permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler toggleQuickEdit|
<<list filter "[tag[tool]]">> 
<html><div align="center"><iframe src="http://www.boatpaddleukuleles.com/top50/" frameborder="0" width="100%" height="540" zoom="100%"></iframe></div></html>
<html><div align="center"><iframe src="http://ukebuddy.com" frameborder="0" width="100%" height="600"></iframe></div></html>
Includes the jtab macro to build tabs and chord refs.

I started this tiddler in order to bring as much knowledge that I learn from learning about the ukulele to one place.
So far, I noticed that everyone making a video includes information about how to tune a ukulele. There is probably 100's of videos on the subject. I am not sure if I would want to make another. 
Simply, if you can afford a tuner, around $25, it is probably a good investment. If you only play at home and don't plan on going on the road for a while, there are simple options. First are web site tool that generate the sound.
Then there is a guitar tuner application that is freely downloaded that actually analyzes the sound of your instrument and displays the value on a gauge. Why not, its free.


pronounced oo coo lay lay

''Ukulele Types''
saprano, concert, tenor, baratone. (& super versions with longer neck for each)

''Parts of a Ukulele''
Head, neck, Body
Strings, nut, frets

Strings numbered from bottom to top 1,2,3,4
Frets 1-from head, 2, 3, 4 etc.
Fingers numbered 1-pointer, 2-middle, 3-ring

''Technique: //Holding a Ukulele//''

''Technique: //Tuning//''
Standard tuning G-C-E-A (Good Cooks Eat Alot)

''Technique: //Strumming//''
Strum over the fret board where the neck meets the body, not over the sound hole.
[[Strumming|http://www.ezfolk.com/uke/Tutorials/Strumming/strumming.html]]

''Technique: //Chunking//''
Muting sound by placing hand over all strings after strumming down.

''Technique: //Picking//''

''Technique: //Hammer On//''

''Technique: //Pull Off//''

''Technique: //Slide//''


__Chords__
The first chords to learn are subjectively the easiest chords.
C - F - G
In the word of music, songs will follow a chord progression. The common chord progression is 1 - 4- 5 (1-C,2-D,3-E,4-F,5-G)

Practice changing chords smoothly from C to G, G to F, F to G and G to C.  Use a basic strum pattern to begin with. Possibly the DU-DU-DU-DU would work well. This practice should become natural to where you aren't looking at the ukulele

Other chords helpful when learning: G7 A- A7 C7

Tough keys are B D E B- D- E- B7
<html><div align="center"><iframe src="http://www.ukulelemikelynch.com/uke_links.htm" frameborder="0" width="100%" height="540" zoom="100%"></iframe></div></html>
[img[Main Channel|http://i2.ytimg.com/i/yAlwTH-8IRI5Kct453TL-A/1.jpg?v=8eaaf9][http://www.youtube.com/user/MusicTeacher2010]] [img[DisneyChannel|http://i4.ytimg.com/i/sxFuXOOpV4poeN8Q2YKm_w/1.jpg?v=932b3b][http://www.youtube.com/user/DisneyUkuleleMike]] [img[The Beatles|http://i4.ytimg.com/i/ot78P9fyRy_DNn1dmFE2Cw/1.jpg?v=8dfe53][http://www.youtube.com/user/BeatlesUkuleleMike]] [img[Endless Summer|http://i1.ytimg.com/i/4Tq9CihiOpH1Tkr4ra550g/1.jpg?v=94f86a][http://www.youtube.com/user/EndlessSummerUkulele]] [img[KUKE Radio|http://i2.ytimg.com/i/9wZH2JWVapjZ7dwu2dyuUg/1.jpg?v=9e6664][http://www.youtube.com/user/RadioStationKUKE]]


__Specific Songs__


2010-03-27
[[Scarborough Fair|http://www.youtube.com/user/MusicTeacher2010?feature=mhum#p/u/131/h09MCyDUeWI]]
<<uChord 'Am G D C'>>
3-4 Time: D-DU-DU

[[81 The Lion Sleeps Tonight|http://www.youtube.com/user/MusicTeacher2010?feature=mhum#p/u/125/H5NMQlDWFOc]]
<<uChord 'G C G D7'>>


<<player http://www.youtube.com/embed/-Q6nKP10j4s 360 240>>
<<uChord 'Am Em7 F G'>>
Sometimes when this place gets kind of empty
Sound of their breath fades with the light
I think about the loveless fascination
Under the Milky Way tonight

Lower the curtain down on Memphis
Lower the curtain down all right
I got no time for private consultation
Under the Milky Way tonight

CHORUS: <<uChord 'G F'>>
Wish I knew what you were looking for
Might have known what you would find
Wish I knew what you were looking for
Might have known what you would find

And it's something quite peculiar
Something shimmering and white
Leads you here despite your destination
Under the Milky Way tonight

CHORUS

Under the Milky way tonight..
Under the Milky Way tonight... 
<<player http://www.youtube.com/embed/JqTIdLJTtQU 360 240>>
<<uChord 'A E7 A'>>
<<uChord 'C E7 A7 A7+5 D7 / G G7'>>
<<uChord 'C E7 A7 A7+5 D7 G7 C /'>>
<<uChord 'C7 C7+5 F / D7 / G G7'>>
Strum D D UDU

<<<
{{{
 	E	A	A7
We'll meet a	gain, don't know wh	ere, don't know w	hen,
 	D	D7	G	C	-	F	-	C	-	G
but I k	now we'll meet ag	ain some s	unny d	ay	. 	  	  	  	  	 
 	C	E	A	A7
 	Keep smiling th	rough just like y	ou always 	do,

(chorus)
 	D	D7	G	C	-	F	-	C
Till the b	lue skies drive the d	ark clo	uds far a	wa	y,	  	  	 
 	Csus	C	Csus	C
And will you p	lease say he	llo to the 	folks that I k	now,
 	F
 	tell 'em that I won't be long,
 	D	D7	D	D7
And they'll be h	appy to k	now that as y	ou who saw me g	o
 	G	G7
And I was	 singing this s	ong,
 	E	A	A7
We'll meet a	gain, don't know wh	ere, don't know w	hen,
 	D	D7	G	C	-	F	-	C	-	G
But I k	now we'll meet ag	ain some s	unny d	ay	. 	  	  	  	  	 

(verse 2)
 	E
Yeah, we'll meet ag	ain,
 	A	A7
I don't know wh	ere, and I don't know 	when,
 	D	D7	G	C	-	F	-	C	-	G
But I d	o know that we'll	 meet agai	n some	 s	un	ny	 d	ay	. 	 
 	C	E	A
 	So honey, keep 	on smiling thro	ugh,
 	A7
Just like you always 	do,

(chorus)
 	D	D7	G	C	-	F	-	C
Till the bl	ue skies drive the d	ark clouds	 far a	wa	y,	  	  	 
 	Csus	C	Csus	C
And would you p	lease say he	llo to all the f	olks that I k	now,
 	F
 	And tell 'em that I won't be long,
 	D	D7	D	D7
They'll be h	appy to k	now that as y	ou who saw me 	go,
 	G	G7
I was	 singing this s	ong,
 	C	E	A	A7
 	We'll meet ag	ain, don't know wh	ere, don't know w	hen,
 	D	D7	G	C	-	F	-	C
And I k	now we'll m	eet again s	ome sunny d	ay	. 	  	  	 
}}}
>>>
<<jtab 'F C Dm Bb'>>
<<uStrum "D & X & U U U X">>
[[Strumming: D - X - U U U X|http://www.youtube.com/watch?v=HiK6dOE8Lw4#t=1m50s]]

People killin', people dyin'
Children hurt and you hear them cryin'
Can you practice what you preach
And would you turn the other cheek

Father, Father, Father help us
Send us some guidance from above
'Cause people got me, got me questionin'
Where is the love (Love)

Where is the love (The love)
Where is the love (The love)
Where is the love
The love, the love
<<jtab 'F Bb Bbm C7 '>>
<<uChord 'C C#dim Dm F G7'>>
<<uChord 'Dm G7 C Csus4 C'>>
<<uChord 'C7 F Fm'>>
<<uChord 'Fm C G7 C Csus4 C'>>
With Just Four Strings We can build a world of peace ...
<<uChord 'G6 G Gsus2 A7'>>
<<player id=1 'http://www.youtube.com/embed/-cUAJise1yA#t=0m41s' 360 34>>

<<uChord n:'C E7 Am G F G7 D7 Dm' size:'l'>>
|<<uChord n:'[C]Yesterday All my [E7]troubles seemed [Am]so far [G]away[F]' in:'cl'>>|<<uChord n:'[F]Now it [G7]looks as though theyre [C]here to stay' in:'cl'>>|
|<<uChord n:'[G]Oh [Am] I [D7]Believe  in [F]Yes [C]ter [C]day' in:'cl'>>||
|<<uChord n:'[C]Suddenly Im not [E7]half the man [Am]I used to be[G]' in:'cl'>>|<<uChord n:'[F]Theres a [G7]shadow hanging [C]over me ' in:'cl'>>|
|<<uChord n:'[G]Oh [Am]Yesterday [D7]came [F]Sud  [C]den  [C]ly' in:'cl'>>||
|<<uChord n:'[E7]Why she [Am]had  [G]to   [F]go' in:'cl'>>|<<uChord n:'[Am]I dont [Dm]know She [G7]wouldnt [C]say' in:'cl'>>|
|<<uChord n:'[E7]I said [Am]some [G]thing [F]wrong' in:'cl'>>|<<uChord n:'[Am]Now I [Dm]long for [G7]Yester [C]day' in:'cl'>>|

<<player id=2 'http://www.youtube.com/embed/-cUAJise1yA#t=0m41s' 340 280>>
<<player http://www.youtube.com/embed/rpJUjW9P040?#t=1m9s 320 240>>

<<uChord 'C F C C | C F G G'>>
<<uChord 'F F C + F | C G7 C'>>
<<uChord 'Am F C + G | Am F C - G' >>
<<uChord 'C F C + F | C G7 C'>>
<<uChord 'F + C'>> 
<<uChord nin:'s' notation:'D D U D'>>
When I am down and, oh my soul, so weary;
When troubles come and my heart burdened be;
Then, I am still and wait here in the silence,
Until you come and sit awhile with me.
.You raise me up, so I can stand on mountains;
You raise me up, to walk on stormy seas;
I am strong, when I am on your shoulders;
You raise me up... To more than I can be.
.
There is no life - no life without its hunger;
Each restless heart beats so imperfectly;
But when you come and I am filled with wonder,
Sometimes, I think I glimpse eternity.
.
.
You raise me up... To more than I can be. 
<<player id=2 'http://www.youtube.com/embed/dnA3T8uuuoY#t=0m46s' 360 34 true true>>
<<audioMacro id:"1" label:"Sunshine" url:"http://davidrschaller.servehttp.com/audio/Sunshine.mp3">>


<<uChord 'C C7 F G7'>>
<<audioMacro id:"2" label:"Swing Shuffle Strum" url:"http://davidrschaller.servehttp.com/audio/swingShuffle.mp3">> D U - D U - D U - D U
<<uChord n:'D U & D U' in:'s'>>
You Are My [C]Sunshine My only sunshine.[C7]
You make me [F]happy When skies are [C]grey.[C7]
You'll never [F]know, dear, How much I [C]love you.
Please [C]don't take my [G7]sunshine [C]away

The other nite, dear,
As I lay sleeping
I dreamed I held you in my arms.
When I awoke, dear,
I was mistaken
And I hung my head and cried.

You are my sunshine,
My only sunshine.
You make me happy
When skies are grey.
You'll never know, dear,
How much I love you.
Please don't take my sunshine away.

I'll always love you
And make you happy
If you will only say the same
But if you leave me
To love another
You'll regret it all some day;

You are my sunshine,
My only sunshine.
You make me happy
When skies are grey.
You'll never know, dear,
How much I love you.
Please don't take my sunshine away.

You told me once, dear
You really loved me
And no one else could come between
But now you've left me
And love another
You have shattered all my dreams;

You are my sunshine,
My only sunshine.
You make me happy
When skies are grey.
You'll never know, dear,
How much I love you.
Please don't take my sunshine away.

Louisiana my Louisiana
the place where I was borne.
White fields of cotton
-- green fields clover,
the best fishing
and long tall corn;

You are my sunshine,
My only sunshine.
You make me happy
When skies are grey.
You'll never know, dear,
How much I love you.
Please don't take my sunshine away.
Crawfish gumbo and jambalaya
the biggest shrimp and sugar cane,
the finest oysters
and sweet strawberries
from Toledo Bend to New Orleans;

You are my sunshine,
My only sunshine.
You make me happy
When skies are grey.
You'll never know, dear,
How much I love you.
Please don't take my sunshine away.


<<player id=3 http://www.youtube.com/embed/dnA3T8uuuoY#t=0m43s 320 240>>
<<player id=2 'http://www.youtube.com/embed/aA4jhrGs7mY' 320 240>>

<<uChord nota:'[C] [C7] [F] [F#dim] [G7] [E7] [Am]' in:'c'>>
//{{{
config.macros.audioMacro= {};

config.macros.audioMacro.handler = function (place,macroName,params,wikifier,paramString,tiddler){ 
   // macro requires 3 params: id, label and url
   var prms = paramString.parseParams(null, null, true);
   var btnid = getParam(prms, "id");
   var btnlabel = getParam(prms, "label");
   var audioURL= getParam(prms, "url");
   var isPlaying = 0; 

  soundManager.url = 'http://davidrschaller.servehttp.com/swf/';

   // Create the sound object
   soundManager.createSound({
        id: 'mySound'+btnid,
        url: audioURL,
        onfinish: function() {
              buttonnode.setAttribute('value',btnlabel);
              isPlaying = 0;
         },
        whileplaying: function() {
             buttonnode.setAttribute('value','Stop ['+this.position+']');
        }
    });

   // Create the button
   var buttonnode= document.createElement("input");
   buttonnode.setAttribute('type','button');
   buttonnode.setAttribute('name',btnid);
   buttonnode.setAttribute('value',btnlabel);
   place.appendChild(buttonnode);  
   
   buttonnode.onclick = function () {

        if (!isPlaying)
        {
           soundManager.play('mySound'+btnid);
           buttonnode.setAttribute('value','Stop');
           isPlaying = 1;
         }else{
            soundManager.stop('mySound'+btnid);
            buttonnode.setAttribute('value',btnlabel);
            buttonnode.setAttribute('value',btnlabel);
            isPlaying = 0;
   	}
   }
}

//}}}
//{{{
config.macros.jtab = {
  handler: function (place, macroName, params, wikifier, paramString, tiddler)
  {
      var tokens = params[0];
      var el = createTiddlyElement( place, 'div', '', 'jtab', tokens );
      jtab.render(el, tokens );
  }
};
//}}}
//{{{
config.macros.myAudio= {};

config.macros.myAudio.handler = function (place, macroName, params, wikifier, paramString, tiddler)
{
     if (params.length == 0){
          myAudio.about();
     }else if ( paramString == 'about'){
           myAudio.about();
     }else if ( paramString == 'help'){
           myAudio.help();
     }else{
    var prms = paramString.parseParams(null, null, true);
    id = getParam(prms, "id");
    mp3 = getParam(prms, "mp3");
    if (getParam(prms, "title")!=null) {title= getParam(prms, "title");}else{title = 'unknown';}
    if (getParam(prms, "artist")!=null){artist= getParam(prms, "artist");}else{artist= 'unknown';}

    if (id != null && mp3 != null){
     var element = createTiddlyElement( place, 'p', 'audioplayer_'+id, 'apcss', 'This will be the player.');
    myAudio.play(element, id, mp3, title, artist);
    }else{
       myAudio.help();
    }
   }
}
//}}}
Display About Dialog:
//{{{
<<myAudio>>
//}}}

Help Dialog is displayed if id and/or mp3 parameters do not exist
//{{{
<<myAudio play my song>>
//}}}

myAudio Macro Format:
//{{{
<<myAudio id:'1' mp3:'http://url2/file.mp3' [title:'Song Title'] [artist:'Song Artist']>>
//}}}

Example of myAudio macro:
//{{{
<<myAudio id:'1' mp3:'http://url2/file.mp3' [title:'Song Title'] [artist:'Song Artist']>>
//}}}
I Am A Pilgrim
<<myAudio id:'1' mp3:'http://davidrschaller.servehttp.com/audio/pilgrim118.mp3' title:'I Am A Pilgrim' artist:'Ken Middleton'>>

!One
This and that

!Two
The other

!!Three
More stuff

<<foldHeadings closed tool>>
//{{{
config.macros.popup= {};
config.macros.popup.handler = function (place, macroName, params, wikifier, paramString, tiddler)
{
    alert (params[0]);
};
//}}}
//{{{
config.macros.uChord= {};

config.macros.uChord.handler = function (place, macroName, params, wikifier, paramString, tiddler)
{
     var notation = null;
     var n = null;
     var nin = 'c';
     var out = 'c';
     var s = 's';
     var inst = 'u';
     if (params.length == 1){
           notation = params[0];
     }else{
           var prms = paramString.parseParams(null, null, true);
           if (getParam(prms, "notation")!=null)     {notation = getParam(prms, "notation");}
           if (getParam(prms, "nota")!=null)     {notation = getParam(prms, "nota");}
           if (getParam(prms, "n")!=null)     {notation = getParam(prms, "n");}
           if (getParam(prms, "in") != null)           {nin = getParam(prms, "in");}
           if (getParam(prms, "out") != null)         {out = getParam(prms, "out");}
           if (getParam(prms, "s") != null)            {s = getParam(prms, "s");}
           if (getParam(prms, "size") != null)            {s = getParam(prms, "size");}
           if (getParam(prms, "inst") != null)         {inst = getParam(prms, "inst");}
           if (getParam(prms, "out") == null && nin == 'cl') {out = 'cl';}

     }
     if (notation != null){
       var el = createTiddlyElement( place, 'div', '', 'uChord', notation);
       uChord.execute(el, notation, nin, out, s, inst);
      }else{
          uChord.alertHTMLBox(uChord.Strings.AboutDialog);
      }
};
//}}}
/***
|''Name''|uChord Plugin Documentation|
|''Description''|Graphically display a strumming pattern for the ukulele|
|''Icon''|<...>|
|''Author''|David R. Schaller|
|''Version''|1.0|
|''Date''|1/28/2011|
|''CoreVersion''|2.6|
|''Requires''|Raphael.js|
|''Feedback''|davidrschaller@hotmail.com|
|''Documentation''|This Tiddler contains the documentation for this plugin|
|''Keywords''|strum|
!Description
  The uStrumPlugin provides a mechanism to graphically display a strumming pattern for stringed instruments, such as the ukulele, guitar, etc. 
!Notes
  It is expected that the functionality of this plugin will be integrated within the uChord plugin at a later date.
!Usage
//{{{
<<uStrum 'notation'>>
//}}}
!!Parameters
  One parameter is required. A string notation of a strum or strumming pattern.
!!Examples
//{{{
<<uStrum 'D X & U U U X'>>
//}}}
<<uStrum 'D X & U U U X'>>
!Configuration
  Markup head script to include references to external javascript required
!Revision History
  2011.01.28 Release
!To Do
 Reduce the graphic output size.
***/
<html>
<table>
<form>
<tr>
<td colspan="2" style="text-align:center">
Display Chords / Lyrics / Strumming Pattern
</td>
</tr>
<tr>
<td>Notation</td>
<td><input type="text" size="30" name="notation"></td>
</tr>
<tr>
<td>Notation Type</td>
<td>Chords<input type="radio" name="in" value="c" checked>Chords & Lyrics<input type="radio" name="in" value="cl">Strum<input type="radio" name="in" value="cl">
</tr>
<tr>
<td>Output</td>
<td>Chords<input type="radio" name="out" value="c" checked>Chords & Lyrics<input type="radio" name="out" value="cl">
</tr>
<tr>
<td>Size</td>
<td>Small<input type="radio" name="size" value="s" checked>Large<input type="radio" name="size" value="l">
</tr>
</form>

</html>