<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3755010526029146864</id><updated>2012-02-01T11:45:00.884-05:00</updated><category term='BASH'/><category term='install'/><category term='Xen'/><category term='suite'/><category term='subdomain'/><category term='text editor'/><category term='hackety hack'/><category term='cello suite'/><category term='data structure'/><category term='lenny'/><category term='UTF'/><category term='contrapunctus'/><category term='mozart'/><category term='yaml2lilypond'/><category term='chopin'/><category term='UI'/><category term='canon'/><category term='art'/><category term='Windows'/><category term='measure'/><category term='Bach-Lehman'/><category term='syntax'/><category term='upgrade'/><category term='viola da spalla'/><category term='keePass'/><category term='cookie'/><category term='spelling'/><category term='chrome'/><category term='shortcut'/><category term='text label'/><category term='prolog'/><category term='brandenburg 5'/><category term='sixth comma'/><category term='audio'/><category term='psychology'/><category term='semitone'/><category term='mouse'/><category term='Git'/><category term='mystery'/><category term='ip6tables'/><category term='haskell'/><category term='cPanel'/><category term='fugue'/><category term='keyboard'/><category term='meantone'/><category term='accidental drag and drop'/><category term='united states'/><category term='well temperament'/><category term='intp'/><category term='laptop'/><category term='compress'/><category term='hymn'/><category term='Q2'/><category term='msysgit'/><category term='business'/><category term='missa brevis'/><category term='literate programming'/><category term='goldberg variations'/><category term='select'/><category term='SSH'/><category term='temperament'/><category term='refactor'/><category term='quarter comma'/><category term='security'/><category term='Rails'/><category term='harpsichord'/><category term='efficient'/><category term='ease'/><category term='Git Bash'/><category term='chamber music'/><category term='brandenburg'/><category term='language'/><category term='click lock'/><category term='cloud'/><category term='accident'/><category term='rare'/><category term='game'/><category term='lectionary'/><category term='minor semitone'/><category term='yaml'/><category term='obama'/><category term='swi-prolog'/><category term='emulator'/><category term='etch'/><category term='ruby shoes'/><category term='tonal music'/><category term='Dice'/><category term='speech'/><category term='DOSBox'/><category term='compose'/><category term='mp3'/><category term='rank'/><category term='_why'/><category term='testing'/><category term='art of fugue'/><category term='touchpad'/><category term='president'/><category term='blogging'/><category term='error'/><category term='prevent'/><category term='compiler'/><category term='endlessly rising canon'/><category term='ruby'/><category term='cheat sheet'/><category term='gallery'/><category term='well tempered clavier'/><category term='education'/><category term='major semitone'/><category term='loop'/><category term='symbolic link'/><category term='legacy'/><category term='song'/><category term='github'/><category term='intuitive'/><category term='drag and drop'/><category term='_why the lucky stiff'/><category term='TweakUI'/><category term='switch code'/><category term='LilyPond'/><category term='consonance'/><category term='agile'/><category term='pitch class set'/><category term='hand jitter'/><category term='shell'/><category term='electoral college'/><category term='browser'/><category term='computer'/><category term='tuning'/><category term='debian'/><category term='Victorian'/><category term='leo editor'/><category term='squeeze'/><category term='firewall'/><category term='agnus dei'/><category term='harmonic analysis'/><category term='sarge'/><category term='linux'/><category term='apache'/><category term='swahili'/><category term='counterpoint'/><category term='radio'/><category term='Pythagorean'/><category term='drawing'/><category term='linguistics'/><category term='election'/><category term='cygwin'/><category term='Bach'/><category term='howto'/><category term='programming'/><category term='politics'/><category term='landslide'/><category term='startup'/><category term='mass'/><category term='notation'/><category term='music'/><category term='lisp'/><category term='harmony'/><category term='OO'/><category term='chart'/><category term='book'/><category term='variation'/><category term='lean startup'/><category term='computer language'/><category term='cello'/><category term='outliner'/><category term='Puppy'/><category term='sub URI'/><category term='missa brevis in D'/><category term='unix'/><category term='bit rate'/><category term='natural language'/><category term='kernel'/><category term='history'/><category term='data entry'/><category term='Rails 3'/><category term='religion'/><category term='mathematics'/><category term='sheet music'/><category term='syntonic'/><category term='myers-briggs'/><category term='vote'/><category term='art and code symposium'/><category term='command line'/><category term='comma'/><category term='iptables'/><category term='writing'/><category term='ipv6'/><category term='Young temperament'/><category term='DOS'/><title type='text'>Notes from an intuitive programmer</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-2748686332156564707</id><published>2012-01-17T10:14:00.006-05:00</published><updated>2012-01-17T11:39:12.383-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compose'/><category scheme='http://www.blogger.com/atom/ns#' term='tonal music'/><category scheme='http://www.blogger.com/atom/ns#' term='psychology'/><category scheme='http://www.blogger.com/atom/ns#' term='harmony'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='religion'/><category scheme='http://www.blogger.com/atom/ns#' term='Victorian'/><category scheme='http://www.blogger.com/atom/ns#' term='song'/><category scheme='http://www.blogger.com/atom/ns#' term='select'/><category scheme='http://www.blogger.com/atom/ns#' term='hymn'/><title type='text'>`My song is love unknown' (hymn)</title><content type='html'>Recently, I heard a moving hymn, `&lt;a href="http://en.wikipedia.org/wiki/My_Song_Is_Love_Unknown"&gt;My song is love unknown&lt;/a&gt;' (1664) by &lt;a href="http://en.wikipedia.org/wiki/Samuel_Crossman"&gt;Samuel Crossman&lt;/a&gt; (1624-1683) and w/s found &lt;a href="http://www.telegraph.co.uk/culture/music/3668067/The-story-behind-the-hymn.html"&gt;this post&lt;/a&gt; by Rupert Christiansen (in U.K.'s The Telegraph) for a story behind it.&lt;br /&gt;&lt;br /&gt;Actually, what moved me was its tune,  &lt;a href="http://www.hymntime.com/tch/mid/l/o/v/love_unknown.mid"&gt;Love Unknown&lt;/a&gt; (1918) by &lt;a href="http://en.wikipedia.org/wiki/John_Ireland_%28composer%29"&gt;John Ireland&lt;/a&gt; (1879-1962). Set to it, some &lt;a href="http://christianity201.wordpress.com/2010/07/14/love-unknown/"&gt;contemporary churches&lt;/a&gt; know better the words, `&lt;a href="http://ehymnbook.org/CMMS/hymnSong.php?folder=p24&amp;amp;id=pd24418"&gt;Oft when of God we ask&lt;/a&gt;' by English Congregational minister &lt;a href="http://hymnopedia.com/Authors:Thomas_Toke_Lynch"&gt;Thomas Toke Lynch&lt;/a&gt; (1818-1871, more &lt;a href="http://www.hymnary.org/person/Lynch_TT"&gt;here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;During the 254 years that passed before Ireland wrote his, I wonder which tune the Crossman hymn used? There's currently no answer in Wikipedia's &lt;a href="http://en.wikipedia.org/wiki/My_Song_Is_Love_Unknown"&gt;article&lt;/a&gt;. I found a &lt;a href="http://www.hymntime.com/tch/htm/m/y/s/mysongis.htm"&gt;list&lt;/a&gt; of alternate tunes for the text, but all are of poorer quality IMO for the words compared to Ireland's; it seems no wonder he was inspired to compose it, perhaps!&lt;br /&gt;&lt;br /&gt;Crossman as a family name would seem to suggest to a boy, BTW, thinking about religion. However, that speculation remains unconfirmed by Wikipedia's article on &lt;a href="http://en.wikipedia.org/wiki/Samuel_Crossman"&gt;Crossman&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2012 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-2748686332156564707?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/2748686332156564707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2012/01/my-song-is-love-unknown.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2748686332156564707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2748686332156564707'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2012/01/my-song-is-love-unknown.html' title='`My song is love unknown&apos; (hymn)'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-6295306062054333255</id><published>2012-01-10T23:30:00.016-05:00</published><updated>2012-01-17T11:37:59.891-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='lean startup'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='computer language'/><category scheme='http://www.blogger.com/atom/ns#' term='ease'/><category scheme='http://www.blogger.com/atom/ns#' term='efficient'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails 3'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><category scheme='http://www.blogger.com/atom/ns#' term='data structure'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Lisp &amp; Ruby metaprogramming</title><content type='html'>I just reread Paul Graham's article, &lt;a href="http://www.paulgraham.com/avg.html"&gt;Beating the Averages,&lt;/a&gt; on Lisp being the most powerful computer programming language because of Lisp macros (which, BTW, are not like assembly language macros). It led me to the obvious perception that because Ruby lacks Lisp macros, metaprogramming in it is weaker than in Lisp.&lt;br /&gt;&lt;br /&gt;He explains the essence of Lisp macros: '[I]n general, for application software, you want to be using the most powerful ...language you can get, and using anything else is a mistake. ...Lisp code, after it's read by the parser, is made of data structures that you can traverse. If you understand how compilers work, [in Lisp you] write programs in the parse trees that get generated within the compiler when other languages are parsed. But these parse trees are fully accessible to your programs. You can write programs that manipulate them. In Lisp, these programs are called macros. [P]ower ...refers to features you could only get in [a] less powerful language by writing an interpreter for [a] more powerful language in it.'&lt;br /&gt;&lt;br /&gt;So, for someone who wants to know where to go next after Ruby, and thinks that,  in a Ruby code base, having a high proportion of metaprogramming code, like some say Rails 3 has these days, results in awkwardness, the next step is Lisp. Lisp apparently is perhaps a better metaprogramming language.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2012 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-6295306062054333255?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/6295306062054333255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2012/01/lisp-ruby-metaprogramming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6295306062054333255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6295306062054333255'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2012/01/lisp-ruby-metaprogramming.html' title='Lisp &amp; Ruby metaprogramming'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-2027557057977049023</id><published>2011-12-16T11:27:00.012-05:00</published><updated>2011-12-16T12:55:11.232-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='notation'/><category scheme='http://www.blogger.com/atom/ns#' term='loop'/><category scheme='http://www.blogger.com/atom/ns#' term='cookie'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><category scheme='http://www.blogger.com/atom/ns#' term='subdomain'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Chrome browser cookie exceptions, howto</title><content type='html'>Google's `fast, new' &lt;a href="http://en.wikipedia.org/wiki/Google_Chrome"&gt;Chrome&lt;/a&gt; browser has a development process that seems to fix problems rapidly.&lt;br /&gt;&lt;br /&gt;An unmet need in the user interface, however, is explicating (right on the page) how to enter domains for cookie handling exceptions.&lt;br /&gt;&lt;br /&gt;The proper way to be secure (although you may think differently) IMO follows:&lt;br /&gt;&lt;br /&gt;Wrench-Options-Under the Hood-Content Settings-Cookies.&lt;br /&gt;Select, `Block sites from setting any data'.&lt;br /&gt;Check, `Block third party cookies from being set'.&lt;br /&gt;Check, `Clear cookies and other site and plug-in data when I close my browser'.&lt;br /&gt;Click, `Manage Exceptions...'.&lt;br /&gt;Add and delete hostname patterns until you see what you like.&lt;br /&gt;&lt;br /&gt;The problem is, it gives no subdomain examples. Per one bug &lt;a href="http://code.google.com/p/chromium/issues/detail?id=90009"&gt;report&lt;/a&gt;, `the user cannot...figure out...the right' syntax to enter them. Without adding the right subdomains, navigating to blogger.com mysteriously redirects us in a loop.&lt;br /&gt;&lt;br /&gt;Its unusual wildcard syntax, for Google blogging, is:&lt;br /&gt;&lt;br /&gt;[*.]blogger.com&lt;br /&gt;[*.]google.com&lt;br /&gt;&lt;br /&gt;The brackets must be entered explicitly. In other words, they do not merely indicate &lt;a href="http://code.google.com/p/chromium/issues/detail?id=101221#c4"&gt;optional&lt;/a&gt; content.&lt;br /&gt;&lt;br /&gt;Some kind of, `"Learn more" link about the &lt;a href="http://code.google.com/p/chromium/issues/detail?id=90009#c6"&gt;pattern&lt;/a&gt; syntax would be awesome'.&lt;br /&gt;&lt;br /&gt;Explicitly also, one could enter all the relevant subdomains (which is appropriate for some domains):&lt;br /&gt;&lt;br /&gt;blogger.com&lt;br /&gt;www.blogger.com&lt;br /&gt;markdblackwell.blogspot.com&lt;br /&gt;google.com&lt;br /&gt;accounts.google.com&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-2027557057977049023?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/2027557057977049023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/12/chrome-browser-cookie-exceptions-howto.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2027557057977049023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2027557057977049023'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/12/chrome-browser-cookie-exceptions-howto.html' title='Chrome browser cookie exceptions, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-3069678316665862226</id><published>2011-12-13T12:29:00.002-05:00</published><updated>2011-12-16T11:26:19.992-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='psychology'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='lean startup'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Lean Startup book thoughts</title><content type='html'>Have you read &lt;a href="http://theleanstartup.com/"&gt;The Lean Startup&lt;/a&gt; by Eric Ries yet? good &lt;a href="http://en.wikipedia.org/wiki/Lean_Startup"&gt;summary&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;EVERYWHERE&lt;br /&gt;&lt;br /&gt;Entrepreneurs are everywhere, he says, even in large, stolid, companies -- true even of IBM! I hope they exist, where you are now. Disruptive innovation might come from competitors.&lt;br /&gt;&lt;br /&gt;WASTE&lt;br /&gt;&lt;br /&gt;Just now, in the Amazon preview, I read the book's introduction. I see the book's epilogue: 'Waste Not'. That is so key! (to me, also).&lt;br /&gt;&lt;br /&gt;Paraphrasing Ries: startup success, thus changing the world, is exciting. Let's not waste vision, passion and energy.&lt;br /&gt;&lt;br /&gt;ACCOUNTING&lt;br /&gt;&lt;br /&gt;'A new kind of accounting, designed for startups.' Like any accounting, it's good for measuring categories we want to watch, like how much is devoted to experimentation on customers.&lt;br /&gt;&lt;br /&gt;TEAMS&lt;br /&gt;&lt;br /&gt;Good to have '[c]ross-functional teams ... accountable to learning milestones ... instead of [specializing people in] ... functional departments.' Good to suggest things across functions. Good to set up a Lean Startup culture and systems.&lt;br /&gt;&lt;br /&gt;SOCIAL&lt;br /&gt;&lt;br /&gt;&lt;a href="http://leanstartupcircle.com/"&gt;Lean Startup circle&lt;/a&gt;&lt;br /&gt;&lt;a href="http://lean-startup.meetup.com/"&gt;Lean Startup at Meetup.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://leanstartup.pbworks.com/w/page/15765221/FrontPage"&gt;Lean Startup Wiki&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Good to connect socially with the Lean Startup people.&lt;br /&gt;&lt;br /&gt;SUMMER&lt;br /&gt;&lt;br /&gt;The book's graphs show manufacturing trending downward greatly these last ten years. With much borrowed money, he says we have been throwing our excess effort into many failed products. Hm, a recent Ries &lt;a href="http://www.startuplessonslearned.com/2011/08/winter-is-coming.html"&gt;post&lt;/a&gt; says we are in a software development 'summer', but sometime a 'winter' will come.&lt;br /&gt;&lt;br /&gt;LEARN&lt;br /&gt;&lt;br /&gt;'Startups exist to *learn* how to build a sustainable business.'&lt;br /&gt;&lt;br /&gt;With 'Build-Measure-Learn', steering to the 'destination[:] creating a thriving and world-changing business.' What a good idea!&lt;br /&gt;&lt;br /&gt;Are we developing our own companies on Lean Startup principles?&lt;br /&gt;&lt;br /&gt;BUSINESS&lt;br /&gt;&lt;br /&gt;Like 'Zappos' [experiment,] ... a clear, quantifiable outcome: either a sufficient number of customers would buy or they would not.'&lt;br /&gt;&lt;br /&gt;We might 'put [ourselves] in a position to interact with real customers and learn[.]' Right now, we could put a question on a website (and publicize it): are you (anyone browsing) interested in an app (of any kind) to do this?&lt;br /&gt;&lt;br /&gt;LEGACY&lt;br /&gt;&lt;br /&gt;He says plausible-sounding management theories, even seemingly reasonable (including legacy ones derived from manufacturing), are only as good as how well their predictions work.&lt;br /&gt;&lt;br /&gt;Legacy practices (of 'good market research', even 'solid strategy') don't work when there is extreme 'uncertainty'. '[C]haos ... doesn't work either.'&lt;br /&gt;&lt;br /&gt;'[N]ew product development ... routinely [and obviously now] requires ... [that which from a manufacturing perspective is] failure to plan adequately[,] failure properly to execute [the plan and a temporary] failure to deliver results ... on the way to greatness.' In other words, people (who learned the manufacturing paradigm) do resist.&lt;br /&gt;&lt;br /&gt;Ries, quoting Scott Cook, 'Moving leaders from playing Ceasar with their thumbs up and down on every idea to --instead --putting in the culture and systems so that teams can move and innovate at the speed of the innovation system.'&lt;br /&gt;&lt;br /&gt;Emphasizes he does not (just) do whatever customers say, interestingly, but focuses 'on what customers want (without asking them)'. That jibes with (my) experience: customers usually aren't good (naturally) doing breakthrough, useful, product imagining and creating.&lt;br /&gt;&lt;br /&gt;SCIENCE&lt;br /&gt;&lt;br /&gt;'Validated learning.' 'Scientific method.' It's great to see actual science entering into business management. BTW, science in general took a long time to overcome human nature and be adopted, just as (in particular) it did in business management.&lt;br /&gt;&lt;br /&gt;'[O]ne ... lesson ... of the scientific method: if you cannot fail, you cannot learn.'&lt;br /&gt;&lt;br /&gt;BOOK&lt;br /&gt;&lt;br /&gt;Ries highly recommends &lt;a href="http://www.amazon.com/dp/0976470705"&gt;The Four Steps to the Epiphany&lt;/a&gt;, 'the original book about customer development': dog-eared in his IMVU days.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-3069678316665862226?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/3069678316665862226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/12/lean-startup-book-thoughts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3069678316665862226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3069678316665862226'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/12/lean-startup-book-thoughts.html' title='Lean Startup book thoughts'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-3683666846396947188</id><published>2011-12-08T12:01:00.005-05:00</published><updated>2011-12-16T11:24:14.323-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='efficient'/><category scheme='http://www.blogger.com/atom/ns#' term='ease'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='psychology'/><category scheme='http://www.blogger.com/atom/ns#' term='data entry'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='shortcut'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>One-click registration on websites belonging to phone apps</title><content type='html'>Recently, gmail passed me this &lt;a href="http://join.cloudspokes.com/ruby.html"&gt;advert&lt;/a&gt; (just for example). It is for a programming competition site that (incidentally) offers one-click registration (you know, while signed into other prestigious sites).&lt;br /&gt;&lt;br /&gt;In most websites created for phone apps, user registration is better if it's one-click (in addition to signin). Sites (as above) do this in order to facilitate acting on impulse. (I'm not telling you anything you already don't know.)&lt;br /&gt;&lt;br /&gt;In just two clicks (total!), users can register at the new website (even before buying the phone app) while they are skimming (or reading) posts or articles about the phone app's general topic (or smartphone technology), from a link which mentions some jazzy, new, tech feature. Generating this kind of news is something popular bloggers love to do. And it increases the phone app's mindshare.&lt;br /&gt;&lt;br /&gt;Plausibly, in this way (huge) numbers of people would have an emotional commitment for trying-and-buying that phone app, and some would do so. If they are browsing in their smartphone, in one click they can purchase (and download) the app. Synergy! because websites are linked in ... well, a web.&lt;br /&gt;&lt;br /&gt;People who use information aggregators (some generated by grassroots online communities, like my friend M) would (in their instream) see links to this new website, and inform their friends the same way. Thus will social synergy cause an explosive chain reaction!&lt;br /&gt;&lt;br /&gt;One-click registration transfers (part of) the reputation of a very popular website, onto the new website.&lt;br /&gt;&lt;br /&gt;After a person has gone through the effort of deciding to register themselves (and their personal information) on a popular website, and thus trust it, they desire also to trust (on the web) wherever else that (particular) website automatically allows them to register.&lt;br /&gt;&lt;br /&gt;With the first website, we are in a 'community,' or have established a relationship. This leverages the natural human tendency to trust anyone referred to us, by a trusted other. Communities are a strong part of (genetically programmed) human nature.&lt;br /&gt;&lt;br /&gt;This level of referral trust seems even to exceed the trust from (simple) hyperlink clicking. Perhaps what is called, 'cognitive dissonance' also plays a part.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-3683666846396947188?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/3683666846396947188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/12/one-click-registration-on-websites.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3683666846396947188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3683666846396947188'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/12/one-click-registration-on-websites.html' title='One-click registration on websites belonging to phone apps'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-5644781486391201553</id><published>2011-12-02T15:24:00.003-05:00</published><updated>2011-12-02T15:36:51.261-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='cPanel'/><category scheme='http://www.blogger.com/atom/ns#' term='data entry'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails 3'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='drawing'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='gallery'/><title type='text'>Webmaster gallery</title><content type='html'>I made a picture &lt;a href="https://github.com/MarkDBlackwell/webmaster-gallery"&gt;gallery&lt;/a&gt; application for webmasters who use plain-vanilla web-hosting services (particularly those with cPanel).&lt;br /&gt;&lt;br /&gt;The webmaster uploads pictures, thumbnails and CSS to a directory, then runs the app in order to create and modify the picture descriptions. It handles later uploaded pictures just as well.&lt;br /&gt;&lt;br /&gt;It has been installed and run successfully (using cPanel).&lt;br /&gt;&lt;br /&gt;An art gallery (of the app's first client) is &lt;a href="http://www.meganamoss.com/webmas-gallery/"&gt;visible&lt;/a&gt; (actually the static pages generated).&lt;br /&gt;&lt;br /&gt;It is written in Rails 3.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-5644781486391201553?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/5644781486391201553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/12/webmaster-gallery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5644781486391201553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5644781486391201553'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/12/webmaster-gallery.html' title='Webmaster gallery'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-9160990757241403406</id><published>2011-11-17T18:06:00.015-05:00</published><updated>2011-11-17T19:48:04.283-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='well temperament'/><category scheme='http://www.blogger.com/atom/ns#' term='harpsichord'/><category scheme='http://www.blogger.com/atom/ns#' term='efficient'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach-Lehman'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='Young temperament'/><category scheme='http://www.blogger.com/atom/ns#' term='temperament'/><title type='text'>Bach-Lehman (and Young #1) using electronic tuner, howto</title><content type='html'>Here's how to use an electronic tuner to tune a harpsichord in Bradley Lehman's Bach temperament, as well as Thomas Young's. They sound so much better than equal temperament (even better than Vallotti)--everyone should try them!&lt;br /&gt;&lt;br /&gt;I found Lehman-Bach instructions (taking Vallotti as a starting point) in the section, `Easy way to tune it accurately and mostly electronically' (search for it) of his &lt;a href="http://larips.com/"&gt;homepage&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Yet, there is another way. His section, `Electronic device instructions for the Bach' at the bottom&lt;br /&gt;of &lt;a href="http://www-personal.umich.edu/%7Ebpl/larips/practical.html"&gt;`Practical temperament instructions by ear'&lt;/a&gt; also recommends we, &lt;a href="http://list.uiowa.edu/scripts/wa.exe?A2=ind0506&amp;amp;L=HPSCHD-L&amp;amp;T=0&amp;amp;O=D&amp;amp;P=55"&gt;`See the interesting method by David Hitchin'&lt;/a&gt;, who says his method is useful if one has the `Korg-OT12 or a similar tuner which provides for ET and the Pythagorean, Werkmeister III and Vallotti temperaments.'&lt;br /&gt;&lt;br /&gt;Dr. Lehman says the Thomas Young temperament he recommends (Young #1) `is not the more familiar "Young #2"; it is his first and better one...entirely symmetrical, and very simple...Young's #2 [the worse one] is technically [just] a transposition of the entire VALLOTTI temperament upward by a 5th.'&lt;br /&gt;&lt;br /&gt;I found these instructions in the `YOUNG #1 1799/1800' section of his &lt;a href="http://www-personal.umich.edu/%7Ebpl/larips/practical.html"&gt;`Practical temperament instructions by ear'&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;1. Tune all of VALLOTTI first.&lt;br /&gt;2. Nick F downward slightly so it's equally tempered between C and Bb.&lt;br /&gt;3. Nick B upward slightly so it's equally tempered between E and F#.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-9160990757241403406?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/9160990757241403406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/11/bach-lehman-and-young-1-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/9160990757241403406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/9160990757241403406'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/11/bach-lehman-and-young-1-using.html' title='Bach-Lehman (and Young #1) using electronic tuner, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-2454592659530000526</id><published>2011-11-14T06:57:00.014-05:00</published><updated>2011-11-14T09:32:03.509-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='notation'/><category scheme='http://www.blogger.com/atom/ns#' term='data entry'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><category scheme='http://www.blogger.com/atom/ns#' term='yaml'/><category scheme='http://www.blogger.com/atom/ns#' term='yaml2lilypond'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='measure'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='compose'/><category scheme='http://www.blogger.com/atom/ns#' term='efficient'/><category scheme='http://www.blogger.com/atom/ns#' term='LilyPond'/><category scheme='http://www.blogger.com/atom/ns#' term='text label'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='sheet music'/><title type='text'>Text-label your measures in LilyPond with YAML</title><content type='html'>Some music (especially some choral music) is somewhat irregular of measure length. Naturally with this kind of music, while entering (and editing, following one's musical sense), often measures will join or split. Then half of the measure numbers are thrown off. This is especially true of early music, and recent music whose source documents were prepared somewhat in a free way.&lt;br /&gt;&lt;br /&gt;Often, given multiple voice parts (or instruments), each, for various purposes, necessitates several source files in parallel (if working in LilyPond): such as for adjustments to piano or organ reductions. Many features not yet done (completely and automatically) well by LilyPond necessitate these additional parallel files.&lt;br /&gt;&lt;br /&gt;Whenever information is parallel, it requires careful synchronizing of all the measures (and measure lengths). What a bother!&lt;br /&gt;&lt;br /&gt;Obviously, if humans are checking and synchronizing something (with difficulty), this is a good opportunity for computers to do the work instead. In that situation, I wrote a computer program allowing measures to be labeled by (text) strings, instead of (only) by measure numbers.&lt;br /&gt;&lt;br /&gt;The program fills each measure (completely) with spacer rests (unless told otherwise). This eases synchronization, because you need only include measures with actual content.&lt;br /&gt;&lt;br /&gt;The program uses YAML as its data entry format. YAML's noise (the extra characters you enter) is very spare. It seems cleanest for entering LilyPond source (it interferes only minimally) yet allows measures to be labeled easily by text strings.&lt;br /&gt;&lt;br /&gt;Available on my GitHub (and written in Ruby), the program is called, &lt;a href="https://github.com/MarkDBlackwell/yaml2lilypond/zipball/master"&gt;'yaml2lilypond'&lt;/a&gt;. Recently, I successfully used it to engrave (typset) a large work--and it helped a lot!&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-2454592659530000526?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/2454592659530000526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/11/text-label-your-measures-in-lilypond.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2454592659530000526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2454592659530000526'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/11/text-label-your-measures-in-lilypond.html' title='Text-label your measures in LilyPond with YAML'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-367811509820335718</id><published>2011-11-12T09:10:00.007-05:00</published><updated>2011-12-16T11:26:19.996-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='psychology'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='lean startup'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Lean startup</title><content type='html'>Recently, a project owner I know read with interest the new book, &lt;a href="http://www.amazon.com/Lean-Startup-Entrepreneurs-Continuous-Innovation/dp/0307887898"&gt;The Lean Startup: How Today's Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses&lt;/a&gt;, by Eric Ries. It just came out September, 2011; his blog is &lt;a href="http://www.startuplessonslearned.com/"&gt;Startup Lessons Learned&lt;/a&gt;. Web searching for "lean startup" found:&lt;br /&gt;&lt;br /&gt;From &lt;a href="http://mycrains.crainsnewyork.com/blogs/executive-inbox/2011/11/taking-the-guesswork-out-of-startup-success/"&gt;`Taking the guesswork out of startup success'&lt;/a&gt; (by Anne Fisher):&lt;br /&gt;&lt;br /&gt;`“[S]tart...with a very basic, sloppy site, and...continually change it according to what users tell [you] they like and don’t like.” [E]very single week[,] invite customers in, plunk them down in front of computers, watch them use the site, and ask them questions about it. The (often surprising) answers then get built into the product.'&lt;br /&gt;&lt;br /&gt;From Jeff Shuman's comment #40 in &lt;a href="http://hbswk.hbs.edu/item/6659.html"&gt;`Teaching a “Lean Startup” Strategy'&lt;/a&gt; (by Carmen Nobel):&lt;br /&gt;&lt;br /&gt;`In Peter Drucker's 1985 book Innovation and Entrepreneurship, he noted that “When a new venture does succeed, (more often than not) it is in a market other than the one it was originally intended to serve, with products or services not (quite) those with which it had set out, bought in large part by customers it did not even think of (when started), and used for a host of purposes besides the ones for which the products were first designed.”'&lt;br /&gt;&lt;br /&gt;From &lt;a href="http://www.startuplessonslearned.com/2010/04/five-myths-about-lean-startup.html"&gt;`Four myths about the Lean Startup'&lt;/a&gt; (by Eric Ries):&lt;br /&gt;&lt;br /&gt;`Lean Startups...do not blindly do what customers tell them, nor do they mechanically attempt to optimize numbers. They use...actionable analytics as vehicles for learning...how to make their vision successful.'&lt;br /&gt;&lt;br /&gt;From &lt;a href="http://blogs.reuters.com/small-business/2010/04/27/top-5-myths-about-the-lean-startup/"&gt;`Top 5 myths about the lean startup'&lt;/a&gt; (by Eric Ries):&lt;br /&gt;&lt;br /&gt;`Lean startups are driven by a compelling vision, &lt;em&gt;and&lt;/em&gt; they are rigorous about testing each element of this vision against reality...with every tool available...They use customer development, split-testing, and in-depth analytics as vehicles for learning about how to make their vision successful. Along the way, they pivot away from the &lt;em&gt;elements&lt;/em&gt; of the vision that are delusional [emphasis added].'&lt;br /&gt;&lt;br /&gt;`Lean...refers to a process of building companies and products based on lean manufacturing principles, but applied to innovation. That process involves rapid hypothesis testing, learning about customers, and a disciplined approach to product development.'&lt;br /&gt;&lt;br /&gt;`[A] startup is [any] human institution creating a new product or service under conditions of extreme uncertainty.'&lt;br /&gt;&lt;br /&gt;From Brian Mcfarlane's comment:&lt;br /&gt;`getting out from behind you[r] computer and talking to real people will reward you with unresolved problems you may not of thought of to help you get to a product-market fit sooner.'&lt;br /&gt;&lt;br /&gt;From &lt;a href="http://gigaom.com/2009/08/11/the-promise-of-the-lean-startup/"&gt;`The Promise of the Lean Startup'&lt;/a&gt; (by Eric Ries):&lt;br /&gt;&lt;br /&gt;`In parallel to [the] work by the “solution team”...there is a new kind of “problem team”...that is asking the bigger questions, such as: Who will our customers be? What problem does our product solve for them? How many of them are there? And how will we reach them?'&lt;br /&gt;&lt;br /&gt;`The promise of the lean startup is that instead of building our companies according to myths, we can guide them with facts and the knowledge required to use those facts well. Or put another way, that we won’t waste our time building products or services that nobody wants.'&lt;br /&gt;&lt;br /&gt;`The ultimate goal of a lean startup is to identify where its vision intersects with what reality can accommodate...It tries out new ideas with a fraction of customers in order to prioritize using facts, not opinions. Its unit of progress is that of validated learning about its customers. [Thus] the practice of entrepreneurship can be put on solid, rigorous, footing.'&lt;br /&gt;&lt;br /&gt;`Instead of seeing process as a synonym for bureaucracy, it sees it as a synonym for discipline. Focusing all of its energy on only those activities that matter, it frees up time and energy for true productivity.'&lt;br /&gt;&lt;br /&gt;Other references:&lt;br /&gt;&lt;a href="http://kevindewalt.com/blog/2011/08/05/why-lean-startups-are-hard/"&gt;Why Lean Startups are Hard Part 1 – Our Genes Aren’t Lean&lt;/a&gt; - Kevin Dewalt&lt;br /&gt;&lt;a href="http://steveblank.com/2010/03/04/perfection-by-subtraction-the-minimum-feature-set/"&gt;Perfection By Subtraction – The Minimum Feature Set&lt;/a&gt; - Steve Blank&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-367811509820335718?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/367811509820335718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/11/lean-startup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/367811509820335718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/367811509820335718'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/11/lean-startup.html' title='Lean startup'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-5840232881884624068</id><published>2011-11-09T15:14:00.007-05:00</published><updated>2011-11-30T11:37:54.199-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firewall'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='ipv6'/><category scheme='http://www.blogger.com/atom/ns#' term='ip6tables'/><category scheme='http://www.blogger.com/atom/ns#' term='iptables'/><title type='text'>IPv6 aware, Linux iptables cloud hand firewall for Debian lenny, howto</title><content type='html'>Recently, I set up a Linux software firewall by hand for a virtual machine instance running Debian lenny.&lt;br /&gt;&lt;br /&gt;Reasonable, now or in the future, is concern about IPv6 traffic. &lt;a href="http://www.debian-administration.org/articles/622"&gt;'Is your firewall aware?'&lt;/a&gt; speaks of some danger: 'You might think that [using iptables to] disallow incoming connections to your server on port 22[,] except from a single trusted IP[,] is sufficient to stop connections hitting your machine, but if it is accessible over IPv6 you'll soon discover this isn't the case.'&lt;br /&gt;&lt;br /&gt;Many VM providers have not so far (completely) enabled IPv6. However, for anyone who has written their own firewall script, it is a good idea to be prepared beforehand for the event.&lt;br /&gt;&lt;br /&gt;The latest VM's, running on recent kernels, can use regular, IPv6-capable firewalls, though they are somewhat hard to find. For instance, the Debian package, 'shorewall6' implements an IPv6 firewall, which &lt;a href="http://www.shorewall.net/IPv6Support.html"&gt;'requires kernel 2.6.24 or later'&lt;/a&gt;. Per their FAQ, &lt;a href="http://www.shorewall.net/FAQ.htm#faq80a"&gt;'Linux kernels before 2.6.20 didn't support connection tracking for IPv6'&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My particular VM provider allows me only kernel 2.6.18. So, for my old kernel, I developed a fairly simple firewall script, with goals to:&lt;br /&gt;&lt;br /&gt;* Restrict sole use of my VM to a list of authorized, remote IP's&lt;br /&gt;* Block tunneling of IPv6 through IPv4, inbound and outbound&lt;br /&gt;* Ease establishing the same rules for IPv6 as for IPv4&lt;br /&gt;* Learn more about iptables firewalls, and&lt;br /&gt;* Learn something about IPv6&lt;br /&gt;&lt;br /&gt;This modular firewall script allows full and easy control over IP addresses, protocols and ports. It was derived, with additions, from James Turnbull's 'Bastion Host Iptables Script' (see References).&lt;br /&gt;&lt;br /&gt;In order to simplify, it leaves out denial of service (DOS) protection, because that seems unlikely in casual VM use. And, it assumes your VM's IP address is IPv4.&lt;br /&gt;&lt;br /&gt;It is impossible accidentally to be locked out, because VM providers naturally offer direct console access, independent of services running on the VM.&lt;br /&gt;&lt;br /&gt;The script is &lt;a href="https://github.com/MarkDBlackwell/cloud-iptables-firewall/zipball/master"&gt;available&lt;/a&gt; free of charge from my GitHub account.&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;Bastion Host Iptables Script: Appendix A (or chapter 2) of James Turnbull's book, _Hardening Linux_. For download, see http://www.apress.com.&lt;br /&gt;&lt;br /&gt;/etc/default/iptables&lt;br /&gt;/usr/src/linux/Documentation/filesystems/proc.txt&lt;br /&gt;/usr/src/linux/Documentation/networking/ip-sysctl.txt&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/6in4"&gt;6in4&lt;/a&gt; - Wikipedia&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/6to4"&gt;6to4&lt;/a&gt; - Wikipedia&lt;br /&gt;&lt;a href="http://madduck.net/blog/2008.04.02:adding-proper-ipv6-to-my-home-network/"&gt;Adding proper IPv6 to my home network&lt;/a&gt; - Martin F. Krafft&lt;br /&gt;&lt;a href="http://www.debian.org/doc/manuals/securing-debian-howto/ch4.en.html"&gt;After installation&lt;/a&gt; - Securing Debian manual - Debian&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Anything_In_Anything"&gt;Anything in anything&lt;/a&gt; - Wikipedia&lt;br /&gt;&lt;a href="http://www.5dollarwhitebox.org/wiki/index.php/Howtos_Basic_IPTables"&gt;Basic iptables&lt;/a&gt; - howtos - 5dollarwhitebox&lt;br /&gt;&lt;a href="http://www.howtoforge.com/linux_iptables_sarge"&gt;Basic iptables - Debian/RedHat&lt;/a&gt; (see comments) - HowToForge&lt;br /&gt;&lt;a href="http://linuxconfig.org/collection-of-basic-linux-firewall-iptables-rules"&gt;Collection of basic Linux firewall iptables rules&lt;/a&gt; - LinuxConfig&lt;br /&gt;&lt;a href="http://wiki.debian.org/DebianFirewall"&gt;Debian firewall&lt;/a&gt; - Debian&lt;br /&gt;&lt;a href="http://druid.caughq.org/projects/dfw/"&gt;Druidic firewall&lt;/a&gt; - I)ruid&lt;br /&gt;&lt;a href="http://easyfwgen.morizot.net/gen/index.php"&gt;Easy firewall generator for iptables&lt;/a&gt; - Scott Morizot&lt;br /&gt;&lt;a href="http://tldp.org/HOWTO/Linux+IPv6-HOWTO/proc-sys-net-ipv6..html"&gt;Entries in /proc/sys/net/ipv6/ - Linux IPv6 howto&lt;/a&gt; - TLDP&lt;br /&gt;&lt;a href="http://www.knowplace.org/pages/howtos/firewalling_with_netfilter_iptables.php"&gt;Firewalling with netfilter/iptables&lt;/a&gt; - Shane Tzen&lt;br /&gt;&lt;a href="http://wiki.debian.org/Firewalls"&gt;Firewalls&lt;/a&gt; - Debian&lt;br /&gt;&lt;a href="http://www.cerias.purdue.edu/about/history/coast_resources/firewalls/"&gt;Firewalls resources&lt;/a&gt; - Center for Education and Research in Information Assurance and Security (CERIAS)&lt;br /&gt;&lt;a href="http://www.debian-administration.org/tag/firewalls"&gt;Firewalls tag&lt;/a&gt; - DebianAdministration&lt;br /&gt;&lt;a href="http://www.pps.jussieu.fr/%7Ejch/software/ipv6-connectivity.html"&gt;Getting IPv6 connectivity under Linux&lt;/a&gt; - Juliusz Chroboczek&lt;br /&gt;&lt;a href="http://tools.ietf.org/html/draft-ietf-mext-firewall-vendor-05"&gt;Guidelines for firewall vendors regarding MIPv6 traffic&lt;/a&gt; - Internet Engineering Task Force&lt;br /&gt;&lt;a href="http://www.interhack.net/pubs/fwfaq/"&gt;Internet firewalls: frequently asked questions&lt;/a&gt;- Paul D. Robertson, et al&lt;br /&gt;&lt;a href="http://blog.dustintrammell.com/2008/06/27/the-internet-is-a-dirty-dirty-mistress/"&gt;The Internet is a dirty, dirty mistress&lt;/a&gt; - Dustin D. Trammell&lt;br /&gt;&lt;a href="http://www.networkworld.com/news/2009/071309-rogue-ipv6.html"&gt;Invisible IPv6 traffic poses serious network threat&lt;/a&gt; - Carolyn Duffy Marsan - Network World&lt;br /&gt;&lt;a href="http://www.cyberciti.biz/faq/ip6tables-ipv6-firewall-for-linux/"&gt;Ip6tables: IPv6 firewall for Linux&lt;/a&gt; - Vivek Gite&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Iptables"&gt;Iptables&lt;/a&gt; - Wikipedia&lt;br /&gt;&lt;a href="http://linux.die.net/man/8/iptables"&gt;Iptables(8) - Linux man page&lt;/a&gt; - Linux die.net&lt;br /&gt;&lt;a href="http://www.tty1.net/blog/2007-02-06-iptables-firewall_en.html"&gt;Iptables firewall&lt;/a&gt; - Thomas Pircher - TTY1&lt;br /&gt;&lt;a href="http://www.malibyte.net/iptables/scripts/fwscripts.html"&gt;Iptables firewall script &amp;amp; configuration files for Linux 2.4.x-2.6.x&lt;/a&gt; - Bob Sully&lt;br /&gt;&lt;a href="http://blogs.dixcart.com/public/technology/2010/08/iptables-firewall-set-up-for-clusters.html"&gt;Iptables/firewall setup for clusters&lt;/a&gt; - Richard Benson - Dixcart&lt;br /&gt;&lt;a href="https://help.ubuntu.com/community/IptablesHowTo"&gt;Iptables howto&lt;/a&gt; - Community documentation - Ubuntu&lt;br /&gt;&lt;a href="http://www.thegeekstuff.com/scripts/iptables-rules"&gt;Iptables rules&lt;/a&gt; - TheGeekStuff&lt;br /&gt;&lt;a href="http://www.debian-administration.org/tag/iptables"&gt;Iptables tag&lt;/a&gt; - DebianAdministration&lt;br /&gt;&lt;a href="http://www.frozentux.net/documents/iptables-tutorial/"&gt;Iptables tutorial&lt;/a&gt; - Oskar Andreasson - Frozentux&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/IPv6"&gt;IPv6&lt;/a&gt; - Wikipedia&lt;br /&gt;&lt;a href="http://www.bieringer.de/linux/IPv6/IPv6-HOWTO/IPv6-HOWTO-8.html"&gt;IPv6 &amp;amp; Linux howto&lt;/a&gt; - Peter Bieringer&lt;br /&gt;&lt;a href="http://www.melb.apana.org.au/wiki/IPv6ConfigurationForDebian"&gt;IPv6: Configuration for Debian&lt;/a&gt; - lenehan&lt;br /&gt;&lt;a href="http://www.sixxs.net/wiki/IPv6_Firewalling"&gt;IPv6 firewalling&lt;/a&gt; - Sixxs.net&lt;br /&gt;&lt;a href="http://www.getipv6.info/index.php/IPv6_Firewalls"&gt;IPv6 firewalls&lt;/a&gt; - GetIPv6&lt;br /&gt;&lt;a href="http://tldp.org/HOWTO/Linux+IPv6-HOWTO/systemcheck-kernel.html"&gt;IPv6-ready kernel - Linux IPv6 howto&lt;/a&gt; - TLDP&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/library/bb726956.aspx"&gt;IPv6 security considerations and recommendations&lt;/a&gt; - Microsoft&lt;br /&gt;&lt;a href="http://madduck.net/docs/ipv6/"&gt;IPv6 with Debian&lt;/a&gt; - Martin F. Krafft&lt;br /&gt;&lt;a href="http://www.debian-administration.org/articles/622"&gt;Is your firewall IPv6 aware?&lt;/a&gt; - Debian administration - Steve Kemp&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/ISATAP"&gt;ISATAP&lt;/a&gt; - Wikipedia&lt;br /&gt;&lt;a href="http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/x2228.html#AEN2236"&gt;Learn how to use IPp6tables&lt;/a&gt; - TLDP&lt;br /&gt;&lt;a href="http://links2world.sourceforge.net/doc/links2world-Firewall-HOWTO/index.html"&gt;Links2World howto&lt;/a&gt; - Links2World Firewall&lt;br /&gt;&lt;a href="http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html"&gt;Linux 2.4 packet filtering howto&lt;/a&gt; - Rusty Russell&lt;br /&gt;&lt;a href="http://www.cyberciti.biz/tips/linux-iptables-8-how-to-avoid-spoofing-and-bad-addresses-attack.html"&gt;Linux iptables avoid IP spoofing &amp;amp; bad addresses attacks&lt;/a&gt; - LinuxTitli&lt;br /&gt;&lt;a href="http://www.cyberciti.biz/tips/linux-iptables-10-how-to-block-common-attack.html"&gt;Linux iptables block common attacks howto&lt;/a&gt; - LinuxTitli&lt;br /&gt;&lt;a href="http://www.cyberciti.biz/tips/linux-iptables-how-to-specify-a-range-of-ip-addresses-or-ports.html"&gt;Linux iptables: how to specify a range of IP addresses or ports&lt;/a&gt; - Vivek Gite&lt;br /&gt;&lt;a href="http://www.bieringer.de/linux/IPv6/"&gt;Linux: IPv6&lt;/a&gt; - Peter Bieringer&lt;br /&gt;&lt;a href="http://tldp.org/HOWTO/Linux+IPv6-HOWTO/"&gt;Linux IPv6 howto&lt;/a&gt; - TLDP&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/List_of_IP_protocol_numbers"&gt;List of IP protocol numbers&lt;/a&gt; - Wikipedia&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Local_area_network"&gt;Local area network&lt;/a&gt; - Wikipedia&lt;br /&gt;&lt;a href="http://linux.die.net/man/8/miredo"&gt;Miredo(8) - Linux man page&lt;/a&gt; - Linux die.net&lt;br /&gt;&lt;a href="http://www.debian-administration.org/article/Restoring_iptables_Automatically_On_Boot"&gt;Restoring iptables automatically on boot&lt;/a&gt; - Jawnsy - DebianAdministration&lt;br /&gt;&lt;a href="http://www.debian-administration.org/article/655/Running_IPv6_in_practice"&gt;Running IPv6 in practice&lt;/a&gt; - Gribozavr - DebianAdministration&lt;br /&gt;&lt;a href="http://www.debian.org/doc/manuals/securing-debian-howto/ch4.en.html#s-network-secure"&gt;Securing network access&lt;/a&gt; - Securing Debian manual - Debian&lt;br /&gt;&lt;a href="http://www.definenull.com/content/how-setup-ubuntu-server-cloud-part-ii"&gt;Set up Ubuntu server in the cloud howto&lt;/a&gt; - dambrosio&lt;br /&gt;&lt;a href="http://links2world.sourceforge.net/doc/links2world-Firewall-HOWTO/ch03s03.html"&gt;The settings statement&lt;/a&gt; - Links2world Firewall&lt;br /&gt;&lt;a href="http://www.stevepedwards.com/firewalldoc.html"&gt;Shorewall firewall installation, configuration &amp;amp; understanding&lt;/a&gt; - Stephen P. Edwards&lt;br /&gt;&lt;a href="http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit"&gt;System run levels and init.d scripts&lt;/a&gt; - Debian&lt;br /&gt;&lt;a href="http://web.luchs.at/article.php?cat=2&amp;amp;aid=298"&gt;Teredo may render your firewall useless&lt;/a&gt; - René Pfeiffer&lt;br /&gt;&lt;a href="http://www.symantec.com/avcenter/reference/Teredo_Security.pdf"&gt;The Teredo protocol: tunneling past network security &amp;amp; other security implications&lt;/a&gt; (PDF) - James Hoagland - Symantec&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Teredo_tunneling"&gt;Teredo tunneling&lt;/a&gt; - Wikipedia&lt;br /&gt;&lt;a href="http://www.thegeekstuff.com/2010/02/top-5-best-linux-firewalls/"&gt;Top 5 best Linux firewalls&lt;/a&gt; - Ramesh Natarajan - TheGeekStuff&lt;br /&gt;&lt;a href="https://support.eapps.com/index.php?/Knowledgebase/Article/View/283/18/cloud-hosting-applications---using-iptables-to-secure-your-virtual-machine"&gt;Using iptables to secure your virtual machine - Cloud hosting applications&lt;/a&gt; - eApps&lt;br /&gt;&lt;a href="http://en.linuxreviews.org/Why_you_want_IPv6"&gt;Why you want IPv6&lt;/a&gt; - LinuxReviews&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-5840232881884624068?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/5840232881884624068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/11/ipv6-aware-cloud-iptables-hand-firewall.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5840232881884624068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5840232881884624068'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/11/ipv6-aware-cloud-iptables-hand-firewall.html' title='IPv6 aware, Linux iptables cloud hand firewall for Debian lenny, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-5632232176039619855</id><published>2011-10-28T09:36:00.008-04:00</published><updated>2011-11-30T13:47:40.862-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sarge'/><category scheme='http://www.blogger.com/atom/ns#' term='etch'/><category scheme='http://www.blogger.com/atom/ns#' term='squeeze'/><category scheme='http://www.blogger.com/atom/ns#' term='lenny'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='upgrade'/><category scheme='http://www.blogger.com/atom/ns#' term='Xen'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Debian squeeze VM experiment</title><content type='html'>This is regarding upgrading Debian on TekTonic.net, which has a Xen VM plan. See my  &lt;a href="http://markdblackwell.blogspot.com/2011/10/upgrade-xen-vm-debian-from-sarge-to.html"&gt;post&lt;/a&gt; for lenny.&lt;br /&gt;&lt;br /&gt;In squeeze, the failure of shell job control was debilitating, so I am sticking with lenny. Other things appeared to be okay, but did not actually work. Per:&lt;br /&gt;&lt;br /&gt;http://www.debian.org/releases/squeeze/i386/release-notes/ch-upgrading.en.html#upgrading-udev&lt;br /&gt;&lt;br /&gt;'The udev version in squeeze requires a kernel of version 2.6.26 ... Booting the 2.6.26 kernel from lenny with the udev from squeeze may result in a failure to correctly assign names to network devices, and will also fail to apply certain additional permissions to block devices (such as access by the disk group). The software itself will appear to be working, but some rules (for example, network-based rules) will not be loaded properly. It is therefore strongly recommended that you upgrade the kernel on its own at this point, to ensure a compatible kernel is available before upgrading udev.'&lt;br /&gt;&lt;br /&gt;This is just experimental.&lt;br /&gt;&lt;br /&gt;Upgrade lenny to squeeze, per:&lt;br /&gt;&lt;br /&gt;http://www.debian.org/releases/squeeze/i386/release-notes/ch-upgrading.en.html&lt;br /&gt;&lt;br /&gt;$ script -t 2&gt;/root/upgrade/lenny-to-squeeze.time -a /root/upgrade/lenny-to-squeeze.script&lt;br /&gt;&lt;br /&gt;Okay if package, 'locales' is not installed:&lt;br /&gt;&lt;br /&gt;$ dpkg-reconfigure locales&lt;br /&gt;$ dpkg --audit&lt;br /&gt;$ aptitude search "~ahold"&lt;br /&gt;$ dpkg --get-selections | grep hold&lt;br /&gt;&lt;br /&gt;Change lenny to squeeze:&lt;br /&gt;&lt;br /&gt;$ nano /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;Fetch new list:&lt;br /&gt;&lt;br /&gt;$ apt-get update&lt;br /&gt;$ apt-get upgrade&lt;br /&gt;$ exit&lt;br /&gt;&lt;br /&gt;File is /root/upgrade/lenny-to-squeeze.script&lt;br /&gt;&lt;br /&gt;Because squeeze seems scary, see if reboot works beforehand; got:&lt;br /&gt;&lt;br /&gt;/etc/network/options still exists and it will be IGNORED! README.Debian of netbase. ... (warning)&lt;br /&gt;FATAL: Could not load /lib/modules/2.6.18.8-xenU/modules.dep: No such file or directory&lt;br /&gt;&lt;br /&gt;Rebooted okay.&lt;br /&gt;&lt;br /&gt;$ script -t 2&gt;/root/upgrade/lenny-to-squeeze-2.time -a /root/upgrade/lenny-to-squeeze-2.script&lt;br /&gt;$ apt-get dist-upgrade&lt;br /&gt;&lt;br /&gt;Got:&lt;br /&gt;&lt;br /&gt;The following packages have unmet dependencies:&lt;br /&gt;insserv : Breaks: sysv-rc (&lt; 2.87dsf-3) but 2.86.ds1-61 is installed&lt;br /&gt;&lt;br /&gt;$ apt-get remove insserv&lt;br /&gt;$ exit&lt;br /&gt;&lt;br /&gt;File is /root/upgrade/lenny-to-squeeze-2.script&lt;br /&gt;&lt;br /&gt;Rebooted okay.&lt;br /&gt;&lt;br /&gt;$ login root&lt;br /&gt;&lt;br /&gt;Worked!&lt;br /&gt;&lt;br /&gt;Backup:&lt;br /&gt;&lt;br /&gt;$ cd /&lt;br /&gt;$ tar --create --one-file-system --file=/backup/full/upgraded-to-squeeze.tar bin boot etc home initrd lib opt root sbin selinux usr&lt;br /&gt;$ tar --list --file=/backup/full/upgraded-to-squeeze.tar root&lt;br /&gt;$ cd /backup/full&lt;br /&gt;$ gzip --best upgraded-to-squeeze.tar&lt;br /&gt;&lt;br /&gt;Shut down and offload the file, /backup/full/upgraded-to-squeeze.tar.gz.&lt;br /&gt;&lt;br /&gt;The next day, I did more.&lt;br /&gt;&lt;br /&gt;Good on upgrading to squeeze:&lt;br /&gt;&lt;br /&gt;http://mrngm.com/xen-on-debian-lenny-to-squeeze.html&lt;br /&gt;http://library.linode.com/troubleshooting/upgrade-to-debian-6-squeeze&lt;br /&gt;http://www.cyberciti.biz/faq/apt-get-upgrade-debian-lenny-5-to-debian-6-squeeze/&lt;br /&gt;&lt;br /&gt;Good to get the files first, per:&lt;br /&gt;&lt;br /&gt;http://www.howtoforge.com/upgrade-debian-lenny-to-squeeze-in-a-few-simple-steps#comment-27131&lt;br /&gt;&lt;br /&gt;$ apt-get dist-upgrade -d&lt;br /&gt;&lt;br /&gt;before doing:&lt;br /&gt;&lt;br /&gt;$ apt-get dist-upgrade&lt;br /&gt;&lt;br /&gt;'The udev version in squeeze requires a kernel of version 2.6.26 or newer', per:&lt;br /&gt;&lt;br /&gt;http://www.debian.org/releases/squeeze/i386/release-notes/ch-upgrading.en.html&lt;br /&gt;&lt;br /&gt;Tektonic uses Lilo, so Xen 3.2 doesn't have the grub2 problem (with a squeeze DomU).&lt;br /&gt;&lt;br /&gt;To do apt-get hold and unhold:&lt;br /&gt;&lt;br /&gt;http://forums.debian.net/viewtopic.php?t=240&lt;br /&gt;&lt;br /&gt;$ script -t 2&gt;/root/upgrade/lenny-to-squeeze-3.time -a /root/upgrade/lenny-to-squeeze-3.script&lt;br /&gt;&lt;br /&gt;Resolve upgrade conflict:&lt;br /&gt;&lt;br /&gt;$ apt-get remove initrd-tools&lt;br /&gt;&lt;br /&gt;Hold udev to lenny version for lenny's kernel:&lt;br /&gt;&lt;br /&gt;$ echo "udev hold" | dpkg --set-selections&lt;br /&gt;$ aptitude hold udev&lt;br /&gt;$ apt-get update&lt;br /&gt;$ apt-get upgrade&lt;br /&gt;&lt;br /&gt;Regarding obtaining Debian updates to squeeze, beyond the release:&lt;br /&gt;&lt;br /&gt;http://permalink.gmane.org/gmane.linux.debian.user.news/417&lt;br /&gt;&lt;br /&gt;and security updates:&lt;br /&gt;&lt;br /&gt;http://www.debian.org/security/&lt;br /&gt;&lt;br /&gt;Add to sources.list:&lt;br /&gt;&lt;br /&gt;deb http://ftp.us.debian.org/debian/ squeeze-updates main contrib non-free&lt;br /&gt;deb http://security.debian.org/ squeeze/updates main contrib non-free&lt;br /&gt;&lt;br /&gt;$ nano /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;$ apt-get update&lt;br /&gt;$ apt-get upgrade&lt;br /&gt;&lt;br /&gt;Mark upgradable and (g)o:&lt;br /&gt;&lt;br /&gt;$ aptitude&lt;br /&gt;$ exit&lt;br /&gt;&lt;br /&gt;File is /root/upgrade/lenny-to-squeeze-3.script&lt;br /&gt;&lt;br /&gt;To test bootability:&lt;br /&gt;&lt;br /&gt;$ shutdown -rf now&lt;br /&gt;&lt;br /&gt;This problem is caused by combining squeeze's udev with a too-old kernel:&lt;br /&gt;&lt;br /&gt;No bash job control, because, 'cannot set terminal process group (-1): Inappropriate ioctl for device'.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-5632232176039619855?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/5632232176039619855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/10/debian-squeeze-vm-experiment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5632232176039619855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5632232176039619855'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/10/debian-squeeze-vm-experiment.html' title='Debian squeeze VM experiment'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-4338971562451408770</id><published>2011-10-25T21:21:00.013-04:00</published><updated>2011-12-06T23:47:29.863-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sarge'/><category scheme='http://www.blogger.com/atom/ns#' term='etch'/><category scheme='http://www.blogger.com/atom/ns#' term='lenny'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='upgrade'/><category scheme='http://www.blogger.com/atom/ns#' term='Xen'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Upgrade Xen VM Debian from sarge to lenny, howto</title><content type='html'>Here's how to upgrade a Debian Linux distribution to 'lenny', on a cheap Xen VM plan such as TekTonic.net's, which (of Debian) offers only version 3.1 ('sarge').&lt;br /&gt;&lt;br /&gt;Upgrading to Debian 'squeeze' is inadvisable on TekTonic (until they offer an upgraded Linux kernel); please see my &lt;a href="http://markdblackwell.blogspot.com/2011/10/debian-squeeze-vm-experiment.html"&gt;experimental&lt;/a&gt; blog post.&lt;br /&gt;&lt;br /&gt;MISCELLANEOUS&lt;br /&gt;&lt;br /&gt;I used Tektonic's shell access (through SSH), without logging in further to the account, 'root'.&lt;br /&gt;&lt;br /&gt;One cannot change the date or time (apparently, as a DomU) under Xen. The command, 'date' appeared to work, but the time wasn't actually changed:&lt;br /&gt;&lt;br /&gt;$ date --set=HHMM&lt;br /&gt;&lt;br /&gt;My CPU is a 32-bit, dual-core AMD Opteron 242 (per, '/proc/cpuinfo').&lt;br /&gt;&lt;br /&gt;WITHIN SARGE&lt;br /&gt;&lt;br /&gt;First, upgrade within sarge, per &lt;a href="http://www.debian.org/releases/sarge/i386/release-notes/ch-upgrading.en.html"&gt;'[Sarge] upgrades from previous releases'&lt;/a&gt;, &lt;a href="http://www.debian.org/releases/etch/i386/release-notes/ap-old-stuff.en.html#s-old-upgrade"&gt;'[Etch] upgrading your sarge system'&lt;/a&gt; and &lt;a href="http://www.debian.org/distrib/archive"&gt;'Distribution archives'&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;$ mkdir /root/upgrade&lt;br /&gt;$ script -t 2&amp;gt;/root/upgrade/sarge-to-sarge-latest.time -a /root/upgrade/sarge-to-sarge-latest.script&lt;br /&gt;$ cd /&lt;br /&gt;&lt;br /&gt;Edit (see the command, below):&lt;br /&gt;1. Make sure the word, 'stable' is not in there. (If it is, change it to, 'sarge'.)&lt;br /&gt;&lt;br /&gt;2. Change http.us.debian.org/debian to archive.debian.org/debian/ .&lt;br /&gt;&lt;br /&gt;3. Comment out (with a leading '#', or remove) the non-us.debian.org/debian-non-US line.&lt;br /&gt;&lt;br /&gt;4. Comment out the security.debian.org line.&lt;br /&gt;&lt;br /&gt;$ nano /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;Here is the desired result:&lt;br /&gt;&lt;br /&gt;deb http://archive.debian.org/debian/ &amp;nbsp; sarge main contrib non-free&lt;br /&gt;&lt;br /&gt;Do this twice, to see error messages go away:&lt;br /&gt;&lt;br /&gt;$ aptitude update&lt;br /&gt;&lt;br /&gt;Then:&lt;br /&gt;&lt;br /&gt;$ aptitude install aptitude&lt;br /&gt;$ aptitude -f upgrade&lt;br /&gt;$ exit&lt;br /&gt;&lt;br /&gt;One should see the message, 'File is /root/upgrade/sarge-to-sarge-latest.script'.&lt;br /&gt;&lt;br /&gt;SARGE TO ETCH&lt;br /&gt;&lt;br /&gt;Next, upgrade from sarge to etch, per &lt;a href="http://www.debian.org/releases/etch/i386/release-notes/ch-upgrading.en.html"&gt;'Upgrades from previous releases'&lt;/a&gt; and &lt;a href="http://www.debian.org/releases/etch/i386/release-notes/ch-upgrading.en.html#s-upgrading_other"&gt;'Upgrading the rest of the system'&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;$ script -t 2&amp;gt;/root/upgrade/sarge-to-etch.time -a /root/upgrade/sarge-to-etch.script&lt;br /&gt;&lt;br /&gt;Edit, changing 'sarge' to 'etch':&lt;br /&gt;&lt;br /&gt;$ nano /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;Twice fetch the new list:&lt;br /&gt;&lt;br /&gt;$ aptitude update&lt;br /&gt;&lt;br /&gt;Then:&lt;br /&gt;&lt;br /&gt;$ aptitude install aptitude&lt;br /&gt;$ aptitude upgrade&lt;br /&gt;$ aptitude install initrd-tools&lt;br /&gt;$ aptitude --download-only dist-upgrade&lt;br /&gt;$ aptitude dist-upgrade&lt;br /&gt;$ exit&lt;br /&gt;&lt;br /&gt;One should see the message, 'File is /root/upgrade/sarge-to-etch.script'.&lt;br /&gt;&lt;br /&gt;ETCH TO LENNY&lt;br /&gt;&lt;br /&gt;Next, upgrade from etch to lenny, per &lt;a href="http://www.debian.org/releases/lenny/i386/release-notes/ch-upgrading.en.html"&gt;'Upgrades from previous releases'&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;$ script -t 2&amp;gt;/root/upgrade/etch-to-lenny.time -a /root/upgrade/etch-to-lenny.script&lt;br /&gt;$ dpkg --audit&lt;br /&gt;$ dpkg --get-selections | grep hold&lt;br /&gt;$ aptitude search "~ahold" | grep "^.h"&lt;br /&gt;&lt;br /&gt;Edit:&lt;br /&gt;1. Change 'etch' to 'lenny'.&lt;br /&gt;&lt;br /&gt;2. Change, 'archive.debian.org/debian/' to, 'ftp.us.debian.org/debian/'.&lt;br /&gt;&lt;br /&gt;$ nano /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;Fetch the new list:&lt;br /&gt;&lt;br /&gt;$ aptitude update&lt;br /&gt;&lt;br /&gt;To fix an error saying, &lt;a href="http://stackoverflow.com/questions/1139127/debian-apt-get-update-error-public-key-is-not-available-no-pubkey-id"&gt;'public key is not available'&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;$ aptitude install debian-archive-keyring&lt;br /&gt;$ aptitude install aptitude apt dpkg&lt;br /&gt;&lt;br /&gt;Make a request (in order to start aptitude working):&lt;br /&gt;&lt;br /&gt;$ aptitude search "?false"&lt;br /&gt;&lt;br /&gt;Then:&lt;br /&gt;&lt;br /&gt;$ aptitude update&lt;br /&gt;$ aptitude --download-only safe-upgrade&lt;br /&gt;&lt;br /&gt;Thrice, till nothing changes:&lt;br /&gt;&lt;br /&gt;$ aptitude safe-upgrade&lt;br /&gt;&lt;br /&gt;Then:&lt;br /&gt;&lt;br /&gt;$ aptitude --download-only dist-upgrade&lt;br /&gt;$ aptitude dist-upgrade&lt;br /&gt;&lt;br /&gt;POST-RELEASE &amp;amp; SECURITY&lt;br /&gt;&lt;br /&gt;Per:&lt;br /&gt;&lt;a href="http://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports"&gt;Updates &amp;amp; backports&lt;/a&gt; - Debian Reference - Debian.org&lt;br /&gt;&lt;a href="http://www.debian.org/News/2011/20110215"&gt;Debian volatile replaced by new updates suite&lt;/a&gt; - News - Debian.org&lt;br /&gt;&lt;br /&gt;Edit:&lt;br /&gt;1. Uncomment and change the security line (use '/', not '-'):&lt;br /&gt;&lt;br /&gt;deb http://security.debian.org/ &amp;nbsp; lenny/updates main contrib non-free&lt;br /&gt;&lt;br /&gt;2. Add post-release updates:&lt;br /&gt;&lt;br /&gt;deb http://volatile.debian.org/debian-volatile/ &amp;nbsp; lenny/volatile main contrib non-free&lt;br /&gt;&lt;br /&gt;$ nano /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;Fetch the new list:&lt;br /&gt;&lt;br /&gt;$ aptitude update&lt;br /&gt;&lt;br /&gt;Repeat till nothing changes:&lt;br /&gt;&lt;br /&gt;$ aptitude safe-upgrade&lt;br /&gt;&lt;br /&gt;Remove a now-unused, old file:&lt;br /&gt;&lt;br /&gt;$ rm -i /etc/network/options&lt;br /&gt;&lt;br /&gt;Then:&lt;br /&gt;&lt;br /&gt;$ exit&lt;br /&gt;&lt;br /&gt;One should see the message, 'File is /root/upgrade/etch-to-lenny.script'.&lt;br /&gt;&lt;br /&gt;BACKUP&lt;br /&gt;&lt;br /&gt;Back up:&lt;br /&gt;&lt;br /&gt;$ dpkg --get-selections "*" &amp;gt; /root/upgrade/dpkg-get-selections.txt&lt;br /&gt;$ cd /&lt;br /&gt;$ mkdir /backup&lt;br /&gt;$ mkdir /backup/full&lt;br /&gt;$ tar --create --one-file-system --file=/backup/full/upgraded-to-lenny.tar bin boot etc home lib opt root sbin selinux usr var/lib/apt/extended_states var/lib/aptitude/pkgstates var/lib/dpkg&lt;br /&gt;$ cd /backup/full&lt;br /&gt;$ gzip --best upgraded-to-lenny.tar&lt;br /&gt;&lt;br /&gt;Shut down:&lt;br /&gt;&lt;br /&gt;$ shutdown -h now&lt;br /&gt;&lt;br /&gt;One must, on HyperVM, also click, 'shutdown' in order for its File Manager to see any files. Navigate (in it) to, '/backup/full' and click the icon under, 'Dn' to offload the corresponding, '.gz' file, made by gzip.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-4338971562451408770?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/4338971562451408770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/10/upgrade-xen-vm-debian-from-sarge-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/4338971562451408770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/4338971562451408770'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/10/upgrade-xen-vm-debian-from-sarge-to.html' title='Upgrade Xen VM Debian from sarge to lenny, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-3274709892295790330</id><published>2011-09-28T23:35:00.002-04:00</published><updated>2011-09-28T23:49:48.998-04:00</updated><title type='text'>Node.js frontend to Rails</title><content type='html'>I have an intuition that Node.js can fruitfully front-handle user web requests, then pass them to Ruby/Rails, when doing this:&lt;br /&gt;&lt;br /&gt;* In the case that processing requests (from users) requires collecting information from elsewhere, like various web service APIs (very common, now!).&lt;br /&gt;&lt;br /&gt;Node.js would handle the (long) event queue thus generated, then send HTTP requests to Ruby/Rails, forging the sender in the header like the users'.&lt;br /&gt;&lt;br /&gt;Then, Ruby/Rails won't block for very long, only long enough for the database.&lt;br /&gt;&lt;br /&gt;Node.js could put the info anywhere, like the URL or in a fast database.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-3274709892295790330?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/3274709892295790330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/09/nodejs-frontend-to-rails.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3274709892295790330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3274709892295790330'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/09/nodejs-frontend-to-rails.html' title='Node.js frontend to Rails'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-7779072598446419981</id><published>2011-09-26T14:57:00.004-04:00</published><updated>2011-10-05T20:52:39.156-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dice'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Dice.com user data insecure</title><content type='html'>I've just signed up (again) to Dice.com, and noticed that Dice only checks the first 8 password characters.&lt;br /&gt;&lt;br /&gt;There is no description of a Dice password on the site, I believe.&lt;br /&gt;&lt;br /&gt;However, a good feature is that Dice passwords can contain:&lt;br /&gt;* Special characters like   ! $ % &amp;   (etc., except backticks `)&lt;br /&gt;* Bracket characters like  ? [ ] { } ( ) &lt; &gt;   (etc.)&lt;br /&gt;* Underline and minus:  _ -&lt;br /&gt;&lt;br /&gt;in addition to the (more) usual digits and to distinguishing upper- and ﻿lower-case ﻿letters.&lt;br /&gt;&lt;br /&gt;Using these, (Keepass informs me) Dice attains '53 bits of [password] quality,' which is not very much, in addition to a certain cleartext sniffing problem (see below).&lt;br /&gt;&lt;br /&gt;But who cares?&lt;br /&gt;&lt;br /&gt;EDIT: Dice confirmed they only use the first 8 characters of the password. They also pointed out (correctly) that their login form has an action which is https, so it normally uses SSL encryption.&lt;br /&gt;&lt;br /&gt;However, some people say that corporate or other sniffers can see, block, rewrite (using Perl or something) and resend to a Dice user the packets in their login page as Dice sends it out unsecured, making its form action contain (sometimes) another address, other than the https address their software intends!&lt;br /&gt;&lt;br /&gt;When the form is submitted (to the wrong address) they can see the Dice username or email, and the password. Then they can log into Dice using these credentials, and see whose resume it really is. If they want to.&lt;br /&gt;&lt;br /&gt;They say some banks even have this problem!&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;br /&gt;http://ask.metafilter.com/48531/are-http-forms-posted-thru-https-secure?&lt;br /&gt;http://www.perlmonks.org/?node_id=542038?&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-7779072598446419981?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/7779072598446419981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/09/dicecom-user-data-insecure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7779072598446419981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7779072598446419981'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/09/dicecom-user-data-insecure.html' title='Dice.com user data insecure'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-4282973156130825890</id><published>2011-09-22T10:39:00.002-04:00</published><updated>2011-09-22T16:55:01.572-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='intuitive'/><category scheme='http://www.blogger.com/atom/ns#' term='computer language'/><category scheme='http://www.blogger.com/atom/ns#' term='_why'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='_why the lucky stiff'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Learn You a Haskell for Great Good!</title><content type='html'>Following is a note I wrote to the author of a wonderful book:&lt;br /&gt;&lt;br /&gt;Hi, Miran Lipovača,&lt;br /&gt;&lt;br /&gt;Thanks for your wonderful, _Learn You a Haskell for Great Good!_. Just now, I am resuming reading it, after completing a project (in another language).&lt;br /&gt;&lt;br /&gt;For many people, it is important to be refreshed by beauty, as of mathematics in your book!&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-4282973156130825890?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/4282973156130825890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/09/learn-you-haskell-for-great-good.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/4282973156130825890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/4282973156130825890'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/09/learn-you-haskell-for-great-good.html' title='Learn You a Haskell for Great Good!'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-3448592341241757025</id><published>2011-09-16T09:24:00.004-04:00</published><updated>2011-09-16T10:08:45.428-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='syntonic'/><category scheme='http://www.blogger.com/atom/ns#' term='quarter comma'/><category scheme='http://www.blogger.com/atom/ns#' term='meantone'/><category scheme='http://www.blogger.com/atom/ns#' term='comma'/><category scheme='http://www.blogger.com/atom/ns#' term='consonance'/><category scheme='http://www.blogger.com/atom/ns#' term='linguistics'/><category scheme='http://www.blogger.com/atom/ns#' term='semitone'/><category scheme='http://www.blogger.com/atom/ns#' term='sixth comma'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='temperament'/><category scheme='http://www.blogger.com/atom/ns#' term='major semitone'/><category scheme='http://www.blogger.com/atom/ns#' term='minor semitone'/><category scheme='http://www.blogger.com/atom/ns#' term='Pythagorean'/><title type='text'>Meantone tuning systems</title><content type='html'>As you may know, interestingly, the tuning systems called quarter (1/4) and sixth (1/6) comma meantone differ, not only in their fractions, but also because their two commas (from which they calculate the fractions) are of different sizes (albeit somewhat close). To wit:&lt;br /&gt;&lt;br /&gt;The comma in 1/6-comma meantone has one size (the well-known difference between 12 pure fifths and 7 octaves: about 23.46 cents: called the Pythagorean comma), per:&lt;br /&gt;&lt;br /&gt;http://en.wikipedia.org/w/index.php?title=Pythagorean_comma&amp;oldid=431111470&lt;br /&gt;&lt;br /&gt;However, the comma in 1/4-comma meantone has another size (it is the difference between four pure fifths, C-G-D-A-E and two octaves, plus a pure major third, C-C-C-E: about 21.51 cents: called the syntonic comma). In other words, &lt;br /&gt;&lt;br /&gt;'The syntonic comma... is the difference between four justly tuned perfect fifths, and two octaves plus a justly tuned major third', per:&lt;br /&gt;&lt;br /&gt;http://en.wikipedia.org/w/index.php?title=Syntonic_comma&amp;oldid=440411458&lt;br /&gt;&lt;br /&gt;Interesting (linguistically, furthermore) is that 'mean-tone' is so-called, precisely because in that system, as you may remember, any major second (a 'tone') is found to be the 'mean' (the ordinary average, logarithmically) between the two notes of whatever size of major third it is we have, per p. (?) of Ross W. Duffin's _How Equal Temperament Ruined Harmony_.&lt;br /&gt;&lt;br /&gt;The interesting, following book quotation admittedly differs in meaning from the Wikipedia article, quoted next following.&lt;br /&gt;&lt;br /&gt;'[The] ratio between the major [whole] tone [is] 9:8 and the minor [whole] tone [is] 10:9[.] In meantone temperaments, the major and minor tones are made equal. In Pythagorean tuning, the minor tone is replaced by the major tone of 9:8. In quarter-comma meantone, the major and minor tones are made equal to the square root of 5:4.&lt;br /&gt;&lt;br /&gt;'In the previous, Pythagorean tuning, a major third was 5:4 (C3 to E3 in the harmonic series, based on the piano note, C1) and there were two whole tones. The major semitone was 9:8 (C4 to D4) and the minor semitone was 10:9 (D4 to E4). These two semitones are not the same size.&lt;br /&gt;&lt;br /&gt;'In any mean-tone tuning, however, these two semitones are averaged. This means that the two semitones have the same size, of 1/2 * sqrt( 5). This means that equal-temperament is a mean-tone tuning. Also, at first, people were rather shocked when the irrational square root of five disrupted the mathematically pure, small-whole number world of musical consonance.'&lt;br /&gt;&lt;br /&gt;Now, for the Wikipedia article:&lt;br /&gt;&lt;br /&gt;'In general, because the two semitones can be viewed as the difference between major and minor thirds, and the difference between major thirds and perfect fourths, tuning systems that match these just intervals closely will also distinguish between the two types of semitones and match their just intervals closely', per:&lt;br /&gt;&lt;br /&gt;http://en.wikipedia.org/w/index.php?title=Semitone&amp;oldid=450607863&lt;br /&gt;&lt;br /&gt;Another interesting and relevant Wikipedia article is:&lt;br /&gt;&lt;br /&gt;http://en.wikipedia.org/wiki/Meantone_temperament&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-3448592341241757025?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/3448592341241757025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/09/meantone-tuning-systems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3448592341241757025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3448592341241757025'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/09/meantone-tuning-systems.html' title='Meantone tuning systems'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-3181398625689594094</id><published>2011-08-28T13:50:00.004-04:00</published><updated>2011-08-28T14:28:35.232-04:00</updated><title type='text'>SoundCloud promotes your music compositions</title><content type='html'>Recently, I discovered a nice website, &lt;a href="http://soundcloud.com"&gt;SoundCloud&lt;/a&gt; which promotes (aurally, visually and socially) music that you compose.&lt;br /&gt;&lt;br /&gt;Or, you can use it to play a stream of compositions, by typing tags and search words.&lt;br /&gt;&lt;br /&gt;I searched for tag, '&lt;a href="http://soundcloud.com/tracks/search?q[genre_tags]=+%22Classical%22&amp;q[type]=&amp;q[duration]=&amp;advanced=1"&gt;classical&lt;/a&gt;', and keyword, 'experimental', and the resulting &lt;a href="http://soundcloud.com/tracks/search?q[fulltext]=experimental&amp;q[genre_tags]=+%22Classical%22&amp;q[type]=&amp;q[duration]=&amp;advanced=1"&gt;hits&lt;/a&gt; sound pretty nice!&lt;br /&gt;&lt;br /&gt;It's been out since 2007: recently 5 &lt;a href="http://en.wikipedia.org/wiki/SoundCloud#History"&gt;million&lt;/a&gt; registered users.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-3181398625689594094?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/3181398625689594094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/08/soundcloud-promotes-your-music.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3181398625689594094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3181398625689594094'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/08/soundcloud-promotes-your-music.html' title='SoundCloud promotes your music compositions'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-6940232955998096883</id><published>2011-08-24T07:51:00.023-04:00</published><updated>2011-10-26T08:56:33.085-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UTF'/><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='BASH'/><category scheme='http://www.blogger.com/atom/ns#' term='Git Bash'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='command line'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='literate programming'/><category scheme='http://www.blogger.com/atom/ns#' term='symbolic link'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='LilyPond'/><category scheme='http://www.blogger.com/atom/ns#' term='SSH'/><category scheme='http://www.blogger.com/atom/ns#' term='msysgit'/><title type='text'>Cygwin, msysGit and native Windows apps, howto</title><content type='html'>I use Debian and Windows XP -- the latter sometimes on a netbook, but principally on a fast desktop computer (it has a nice monitor). On Debian, I develop software in the normal way. But, when I'm on Windows, I have to resort to a variety of techniques.&lt;br /&gt;&lt;br /&gt;On a fast desktop computer, I use many native Windows apps (e.g. &lt;a href="http://en.wikipedia.org/wiki/7-Zip"&gt;7-Zip&lt;/a&gt; instead of &lt;a href="http://www.gnu.org/software/tar/"&gt;Tar&lt;/a&gt; with compression; in the Windows way). I use Cygwin apps where a good native Windows version is lacking.&lt;br /&gt;&lt;br /&gt;For example, previously I ran Cygwin's LilyPond till I noticed the niceness of the Windows version.&lt;br /&gt;&lt;br /&gt;But mostly on Cygwin I enjoy the Bash command line interface and its filesystem.&lt;br /&gt;&lt;br /&gt;My desktop's Git is through &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;, but the netbook has &lt;a href="http://code.google.com/p/msysgit/"&gt;msysGit&lt;/a&gt; (with its own version of Bash).&lt;br /&gt;&lt;br /&gt;With msysGit, so far, Bash's symbolic links aren't good -- if you make one, it actually copies the whole folder!&lt;br /&gt;&lt;br /&gt;I could try alternatives (suggested on MinGW's &lt;a href="http://www.mingw.org/wiki/MSYS"&gt;MSYS&lt;/a&gt; page) such as &lt;a href="http://www.mingw.org/node/30"&gt;Interix&lt;/a&gt; (also known as Microsoft's &lt;a href="http://wiki.tcl.tk/11329"&gt;SFU&lt;/a&gt; or SUA).&lt;br /&gt;&lt;br /&gt;Paths&lt;br /&gt;&lt;br /&gt;In order to maintain only one copy on the desktop of things like SSH keys (used by Git) I followed instructions to &lt;a href="http://software.jessies.org/salma-hayek/cygwin-setup.html"&gt;move&lt;/a&gt; my Cygwin user home directory to the same place as my Windows user home directory -- which worked just fine! (Additionally, I set LANG to en_US.UTF-8, as suggested.)&lt;br /&gt;&lt;br /&gt;Now, this command works just fine for me:&lt;br /&gt;&lt;br /&gt;ruby app/hello.rb&lt;br /&gt;&lt;br /&gt;I seem to recall that, for a while, it gave me an error, 'no such file'. Perhaps when I cleaned and upgraded my Cygwin installation (including my .bash* files) and then did a couple of reboots, the problem went away. (Don't you hate that?)&lt;br /&gt;&lt;br /&gt;Cygwin can run both Cygwin apps, and native Windows apps. For speed and maintainability reasons, it's good to minimize the programs installed into Cygwin, doing so only if no native Windows version will succeed there (or can conveniently be run outside it). For example, my RubyGems installation is a native Windows one.&lt;br /&gt;&lt;br /&gt;In Cygwin, the command, 'rake' (e.g.) might give you:&lt;br /&gt;&lt;br /&gt;No such file or directory -- /cygdrive/c/progra/ruby/1.8.7-p352/bin/rake (LoadError)&lt;br /&gt;&lt;br /&gt;even though it is found by, 'which rake':&lt;br /&gt;&lt;br /&gt;/cygdrive/c/progra/ruby/1.8.7-p352/bin/rake&lt;br /&gt;&lt;br /&gt;The solution (in Cygwin) is to type, 'rake.bat' (gem.bat, irb.bat, pik.bat, etc.).&lt;br /&gt;&lt;br /&gt;If desired, you can alias rake, gem, irb and pik as with Robert Wahler's Stack Overflow &lt;a href="http://stackoverflow.com/questions/3831131/rubygems-cygwin-posix-path-not-found-by-ruby-exe"&gt;answer&lt;/a&gt;, but just on the command line -- it doesn't normally work in Bash scripts. (E.g., 'alias rake=rake.bat' -- to reverse it: 'unalias rake'.)&lt;br /&gt;&lt;br /&gt;If you are having problems with native Windows programs still not finding files in Cygwin, you might want to look at one aspect of Cygwin filesystems (some sources say) which requires special handling.&lt;br /&gt;&lt;br /&gt;The documentation says (although sometimes I don't have to) passing filesystem paths (in Cygwin Bash) to native Windows apps (such as Ruby) is done one of two ways:&lt;br /&gt;&lt;br /&gt;One is to &lt;a href="http://cygwin.com/cygwin-ug-net/using.html#pathnames-win32"&gt;use native 'Win32' paths&lt;/a&gt; -- two examples follow, for which I made a Ruby test program ('app/hello.rb' containing only, 'p __FILE__'). They require at least one, escaped backslash:&lt;br /&gt;&lt;br /&gt;In (Cygwin's) current directory (using native Win32 paths):&lt;br /&gt;&lt;br /&gt;ruby '.\hello.rb'&lt;br /&gt;ruby .\\hello.rb&lt;br /&gt;&lt;br /&gt;Or in 'app', relative to the current directory:&lt;br /&gt;&lt;br /&gt;ruby 'app\hello.rb'&lt;br /&gt;ruby app\\hello.rb&lt;br /&gt;&lt;br /&gt;The other is to use &lt;a href="http://cygwin.com/cygwin-ug-net/using-utils.html#cygpath"&gt;cygpath&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;In the current directory (add, '-a' for the full path):&lt;br /&gt;&lt;br /&gt;ruby "`cygpath -m hello.rb`"&lt;br /&gt;&lt;br /&gt;Or in the relative directory, 'app' (recently, with one long path, I had to do it this way):&lt;br /&gt;&lt;br /&gt;ruby "`cygpath -m app/hello.rb`"&lt;br /&gt;&lt;br /&gt;Permissions&lt;br /&gt;&lt;br /&gt;Developing with both msysGit and Cygwin normally generates Unix permissions problems. Their Gits flip-flop the permission bits between '100777' (Cygwin) and '100644' (msysGit) on most files! Those with certain typically-executable extensions like .exe and .bat alternate between '100777' (Cygwin) and '100755' (msysGit).&lt;br /&gt;&lt;br /&gt;To avoid most of this problem, you can mount your Cygwin user home directory close to the msysGit method:&lt;br /&gt;&lt;br /&gt;/cygdrive/c/Documents\040and\040Settings/[user name] /home/[user name] ntfs binary,noacl,bind 0 0&lt;br /&gt;&lt;br /&gt;'noacl' tells Cygwin not to use the Access Control Lists found in Microsoft's NT tree. (BTW, as of Cygwin 1.7.9-1, 'posix=1' and 'nouser' are ignored here.)&lt;br /&gt;&lt;br /&gt;The exception is that Cygwin will look for '#!' at the beginning of files to set the executable bit; msysGit, as mentioned above, will look at extensions like .exe and .bat.&lt;br /&gt;&lt;br /&gt;In a development project, it might be useful to set write- and execute-permissions (at least the 'user' bits). If you want to manipulate permission bits further in your repository, you can &lt;a href="http://www.grumpydev.com/2011/01/19/switching-from-cygwin-to-msysgit-git-thinks-everything-has-been-modified/"&gt;tell&lt;/a&gt; msysGit (or even Cygwin Git) to ignore &lt;a href="http://kernel.org/pub/software/scm/git/docs/git-config.html"&gt;permission&lt;/a&gt; bit differences. Then you can &lt;a href="http://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod"&gt;set&lt;/a&gt; (see Jakub Narębski's answer) the (user?) &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html"&gt;execute&lt;/a&gt; bits:&lt;br /&gt;&lt;br /&gt;git update-index --chmod=+x [file paths]&lt;br /&gt;&lt;br /&gt;and reset them:&lt;br /&gt;&lt;br /&gt;git update-index --chmod=-x [file paths]&lt;br /&gt;&lt;br /&gt;before you do, 'git commit'.&lt;br /&gt;&lt;br /&gt;(Tested with Ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32], Cygwin 1.7.9-1.)&lt;br /&gt;&lt;br /&gt;BTW, to see what Cygwin version you are running:&lt;br /&gt;&lt;br /&gt;cygcheck -c cygwin&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cygwin.com/cygwin-ug-net/using-filemodes.html"&gt;file modes&lt;/a&gt; - Cygwin&lt;br /&gt;&lt;a href="http://cygwin.com/cygwin-ug-net/ntsec.html"&gt;NT Security&lt;/a&gt; - Cygwin&lt;br /&gt;&lt;a href="http://code.google.com/p/msysgit/issues/detail?id=164"&gt;file modes&lt;/a&gt; - msysGit&lt;br /&gt;&lt;a href="http://old.nabble.com/Cygwin-Everyone-group-permissions-and-Vista-%22shared-files%22-%28*not*-shared-folders%29-td19386749.html"&gt;discussion&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-6940232955998096883?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/6940232955998096883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/08/cygwin-and-native-windows-apps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6940232955998096883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6940232955998096883'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/08/cygwin-and-native-windows-apps.html' title='Cygwin, msysGit and native Windows apps, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-4267455095470246410</id><published>2011-08-13T09:34:00.009-04:00</published><updated>2011-10-26T08:58:22.448-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cheat sheet'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='BASH'/><category scheme='http://www.blogger.com/atom/ns#' term='command line'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>BASH (GNU shell for Unix) cheat sheet</title><content type='html'>While using the command-line shell, BASH (for Unixen, part of GNU (GNU's Not Unix), developed by FSF (Free Software Foundation), quite popular and superior), for a long time I employed just a few of its manipulation features for command lines -- just these, in fact:&lt;br /&gt;!$ - last command's last argument&lt;br /&gt;(C-r) - reverse search, through command history&lt;br /&gt;&lt;br /&gt;Recently, I have wanted to combine multiple arguments from multiple commands. To help me remember how, I used the technique of making a cheat sheet. Interestingly, BASH is similar to the text editor, Emacs (as well as Nano). Here is a sample:&lt;br /&gt;&lt;br /&gt;Key abbreviations:&lt;br /&gt;(C-) - Ctrl&lt;br /&gt;(M-) - Alt&lt;br /&gt;(newline) - Enter&lt;br /&gt;(rubout) - Backspace&lt;br /&gt;&lt;br /&gt;Move the cursor:&lt;br /&gt;(C-a) - beginning-of-line&lt;br /&gt;(C-e) - end-of-line&lt;br /&gt;(M-f) - forward-word&lt;br /&gt;(M-b) - backward-word&lt;br /&gt;&lt;br /&gt;Change text:&lt;br /&gt;(M-t) - transpose-words&lt;br /&gt;&lt;br /&gt;Kill and yank:&lt;br /&gt;(C-k) - kill-line&lt;br /&gt;(C-x rubout) - backward-kill-line&lt;br /&gt;(M-d) - kill-word&lt;br /&gt;(C-y) - yank&lt;br /&gt;&lt;br /&gt;Completing:&lt;br /&gt;(tab) - complete&lt;br /&gt;(M-/ M-/) - complete-filename&lt;br /&gt;(M-g) - glob-complete-word&lt;br /&gt;(M-?) - possible-completions&lt;br /&gt;(C-x /) - possible-filename-completions&lt;br /&gt;&lt;br /&gt;Miscellaneous:&lt;br /&gt;(C-_) - undo&lt;br /&gt;&lt;br /&gt;Event designators:&lt;br /&gt;(!-2) - command previous to last&lt;br /&gt;(!-2:1-2) - second previous commands's first and second arguments&lt;br /&gt;(!-2:0 !:3* !-2:2) - second previous command word plus its second argument, the last command's third and following arguments intervening&lt;br /&gt;&lt;br /&gt;There's &lt;a href="https://github.com/MarkDBlackwell/debian-bash-tool-scripts/blob/master/bash-cheat.txt"&gt;more&lt;/a&gt; on GitHub.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-4267455095470246410?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/4267455095470246410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/08/bash-gnu-shell-for-unix-cheat-sheet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/4267455095470246410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/4267455095470246410'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/08/bash-gnu-shell-for-unix-cheat-sheet.html' title='BASH (GNU shell for Unix) cheat sheet'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-5396504114227962154</id><published>2011-08-08T11:23:00.008-04:00</published><updated>2011-08-08T13:03:32.476-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>CSS selector objects and methods for testing in Ruby</title><content type='html'>Let's say, for a given web page, you are writing some tests. And, supposing, you want to test whether the page contains a single DIV, of CSS class, 'only'.&lt;br /&gt;&lt;br /&gt;And, you want to know whether the DIV (or the page) contains a single FORM, of CSS class, 'good-form'.&lt;br /&gt;&lt;br /&gt;And further, you want to know whether the FORM (or the page) contains (among other things) a single INPUT, of CSS class, 'my-input'.&lt;br /&gt;&lt;br /&gt;And further, whether that INPUT has CSS attribute, 'type=text'.&lt;br /&gt;&lt;br /&gt;So, a CSS selector, useful for finding that on a web page, would be:&lt;br /&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; div.only &gt; form.good-form &gt; input.my-input [type=text]&lt;br /&gt;&lt;br /&gt;Right?&lt;br /&gt;&lt;br /&gt;Maybe (in your test) specifying descendents instead of children would have a better flexibility, allowing later intervening DIV's (for instance). With this difference, the new CSS selector would be:&lt;br /&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; div.only&amp;nbsp; form.good-form&amp;nbsp; input.my-input [type=text]&lt;br /&gt;&lt;br /&gt;How might one like to specify these selectors, speculatively and ideally? Even better than the CSS selector strings in Ruby above might be... what?&lt;br /&gt;&lt;br /&gt;(A.) &amp;nbsp; HTML elements&lt;br /&gt;&lt;br /&gt;Well, it might be nice if code for DIV's could work simply like this:&lt;br /&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; D.class 'only'&lt;br /&gt;&lt;br /&gt;(Unfortunately, this would clobber Object#class, probably interfering with essential Ruby functionality elsewhere in our application.) We could compromise and give it a longer method name:&lt;br /&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; D.css_class 'only'&lt;br /&gt;&lt;br /&gt;(B.) &amp;nbsp; HTML Attributes&lt;br /&gt;&lt;br /&gt;A web page might also, in addition to an INPUT element carrying all of the desired attributes, supply some other INPUT with fewer of them, or indeed another kind of INPUT entirely.&lt;br /&gt;&lt;br /&gt;So, obviously, it is good to test for:&lt;br /&gt;&lt;br /&gt;o The desired number of INPUT's (in total), and&lt;br /&gt;o The presence of each INPUT, carrying all the attributes desired.&lt;br /&gt;&lt;br /&gt;In light of this, wouldn't it be nice if one easy method invocation could assert the unique presence of exactly one INPUT, plus its unique presence carrying a specific set of attributes?&lt;br /&gt;&lt;br /&gt;Another thing possibly useful might be checking the attributes one at a time; I don't know.&lt;br /&gt;&lt;br /&gt;The same would probably apply also to any other kind of HTML element having attributes.&lt;br /&gt;&lt;br /&gt;A seemingly good way to invoke the method would be:&lt;br /&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; attribute 'type', 'text', 'value', 'your name here'&lt;br /&gt;&lt;br /&gt;And, for unpaired attributes:&lt;br /&gt;&lt;br /&gt; &amp;nbsp;  &amp;nbsp; attribute 'hidden'&lt;br /&gt;&lt;br /&gt;So: how could these semantics really work? Here's an example, carrying the idea further:&lt;br /&gt;&lt;br /&gt;(C.) &amp;nbsp; An implementation&lt;br /&gt;&lt;br /&gt;# Fuller Example of Web Page Testing, Using CSS Selector Objects and Methods:&lt;br /&gt;&lt;br /&gt;module CssSelectorConstants; D,F,I = %w[ div form input ].map{|e| CssString e} end&lt;br /&gt;&lt;br /&gt;class SomeTestClass&lt;br /&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; extend CssSelectorConstants&lt;br /&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; def test_web_page&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; d_o = D.             css_class 'only'&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fg  = d_o.descend(F).css_class 'good-form'&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; im  = fg. descend(I).css_class 'my-input'&lt;br /&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; a_t = im.attribute 'type', 'text'&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; atv = im.attribute 'type', 'text', 'value', 'your name here'&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; av  = im.attribute                 'value', 'your name here'&lt;br /&gt;&lt;br /&gt;# There should be exactly one DIV, 'div.only':&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert_select d_o, 1 do&lt;br /&gt;&lt;br /&gt;# And within that, exactly one FORM, 'form.good-form':&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert_select fg, 1 do&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  I.e., exactly one:&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;   &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; div.only   form.good-form&lt;br /&gt;&lt;br /&gt;# And within that, exactly one INPUT, 'input.my-input':&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert_select im, 1&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  I.e., exactly one:&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;   &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; div.only   form.good-form   input.my-input&lt;br /&gt;&lt;br /&gt;# And exactly one INPUT, 'input.my-input[type=text]':&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert_select a_t, 1&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  I.e., exactly one:&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;   &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; div.only   form.good-form   input.my-input&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;   &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [type=text]&lt;br /&gt;&lt;br /&gt;# And exactly one INPUT, 'input.my-input[value=your name here]':&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert_select av, 1&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; I.e., exactly one:&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;   &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; div.only   form.good-form   input.my-input&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [value=your name here]&lt;br /&gt;&lt;br /&gt;# And exactly one INPUT, 'input.my-input[type=text,value=your name here]':&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert_select atv, 1&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; I.e., exactly one:&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;   &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; div.only   form.good-form   input.my-input&lt;br /&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [type=text,value=your name here]&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end #form&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end #div&lt;br /&gt; &amp;nbsp; &amp;nbsp;  end #def&lt;br /&gt;end #class&lt;br /&gt;&lt;br /&gt;See also:&lt;br /&gt;&lt;a href="https://github.com/MarkDBlackwell/css-selector"&gt;CSS selector objects &amp; methods&lt;/a&gt; (for Rails; GitHub)&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-5396504114227962154?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/5396504114227962154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/08/css-selector-objects-and-methods-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5396504114227962154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5396504114227962154'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/08/css-selector-objects-and-methods-for.html' title='CSS selector objects and methods for testing in Ruby'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-7727459689255697018</id><published>2011-07-27T13:41:00.016-04:00</published><updated>2011-07-29T12:08:35.661-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spelling'/><category scheme='http://www.blogger.com/atom/ns#' term='psychology'/><category scheme='http://www.blogger.com/atom/ns#' term='accident'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='brandenburg'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Open letter re: error in my post</title><content type='html'>I sent this letter to a friend, but others might find it interesting. [Elided name for privacy -- the letter starts ...] Hi!&lt;br /&gt;&lt;br /&gt;Thanks again for (verbally) informing me that I misspelled Brandenburg in a &lt;a href="http://markdblackwell.blogspot.com/2010/02/brandenberg-5-in-bach-lehman-tuning.html"&gt;post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As &lt;a href="http://en.wikipedia.org/wiki/George_Soros"&gt;George Soros&lt;/a&gt; (left-wing hedge fund owner and subsequent philanthropist) says, learning we have made a specific mistake causes joy and hope, because this knowledge is an opportunity to improve future outcomes. :)&lt;br /&gt;&lt;br /&gt;It's been a while (I know) but I have &lt;a href="http://markdblackwell.blogspot.com/2011/07/brandenburg-5-in-bach-lehman-tuning.html"&gt;corrected&lt;/a&gt; the post -- indeed, thanks!&lt;br /&gt;&lt;br /&gt;With warm regards,&lt;br /&gt;Mark D. Blackwell&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-7727459689255697018?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/7727459689255697018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/07/open-letter-to-friend-regarding-error-i.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7727459689255697018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7727459689255697018'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/07/open-letter-to-friend-regarding-error-i.html' title='Open letter re: error in my post'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-2686902559421311719</id><published>2011-07-27T13:24:00.005-04:00</published><updated>2011-07-27T14:31:47.618-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach-Lehman'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='brandenburg'/><category scheme='http://www.blogger.com/atom/ns#' term='counterpoint'/><category scheme='http://www.blogger.com/atom/ns#' term='brandenburg 5'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach'/><title type='text'>Brandenburg 5 in Bach-Lehman tuning</title><content type='html'>The following is a &lt;a href="http://markdblackwell.blogspot.com/2010/02/brandenberg-5-in-bach-lehman-tuning.html"&gt;re-post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Please &lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/Brandenberg/s00152-lehman-bach.mid"&gt;click&lt;/a&gt; to listen before reading further. Today, w/s Brandenburg MIDI turned up a top-page (Google) result, the fifth &lt;a href="http://en.wikipedia.org/wiki/Brandenburg_concertos"&gt;Brandenburg concerto&lt;/a&gt;, in D major, ('[o]ne of the lushest and most thrilling pieces ever written'--quotations are from Wikipedia), by &lt;a href="http://en.wikipedia.org/wiki/Johann_Sebastian_Bach"&gt;(Johann Sebastian) Bach&lt;/a&gt;, 'now regarded as the supreme composer of the Baroque [period, and] one of the greatest of all time', &lt;a href="http://www.topology.org/midi/brand/README.html"&gt;produced&lt;/a&gt; by &lt;a href="http://www.topology.org/midi/README.html"&gt;Alan Kennington&lt;/a&gt;, moderately, clearly and with great unity on a (single) &lt;a href="http://en.wikipedia.org/wiki/Musical_Instrument_Digital_Interface"&gt;MIDI&lt;/a&gt; instrument, the harpsichord.&lt;br /&gt;&lt;br /&gt;According to the artist, '[T]he performer needs to be able to bring out the music comprehensibly. When the music is at the right speed, it resonates in the listener. It generates a kind of excitement and pleasure... I believe that Baroque composers wanted their audience to feel pleasure... Bach was more interested in giving gentle pleasure[,] rather than a sudden rush of breathless excitement.'&lt;br /&gt;&lt;br /&gt;For this &lt;a href="http://www-personal.umich.edu/~bpl/larips/informal.html"&gt;very purpose&lt;/a&gt; I adjusted its tuning to &lt;a href="http://www-personal.umich.edu/~bpl/larips/"&gt;Bach- Lehman 1722&lt;/a&gt; temperament using &lt;a href="http://en.wikipedia.org/wiki/Scala_(program)"&gt;Scala&lt;/a&gt;, whose 'motto is INVENIT ET PERFICIT which means, "it finds and perfects"'. The result? My friend M agrees that this is a:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/Brandenberg/s00152-lehman-bach.mid"&gt;much more beautiful, second movement &lt;i&gt;(Affettuoso),&lt;/i&gt; in B minor&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For this, it is essential to use some good wave-table MIDI synthesizer software like Microsoft GS Wavetable SW Synth which is based on Roland wavetables.&lt;br /&gt;&lt;br /&gt;The Creative SoundBlaster SoundFont Synth and the QuickTime Music Synthesizer (at least on PC's) somehow blot out temperaments' emotional content, and they make this listening comparison meaningless.&lt;br /&gt;&lt;br /&gt;For comparison, the original:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/Brandenberg/s00152.mid"&gt;equal-tempered version&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I predict you shall be uncomfortable with it, now. As my friend &lt;a href="http://zymbelstern.blogspot.com/"&gt;M&lt;/a&gt; said, it seems 'like a terribly out of tune MIDI file'. Now we know it wasn't the MIDI system's fault.&lt;br /&gt;&lt;br /&gt;Also available are the&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/Brandenberg/s00151-lehman-bach.mid"&gt;first&lt;/a&gt; and &lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/Brandenberg/s00153-lehman-bach.mid"&gt;third&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;movements (both &lt;i&gt;Allegro&lt;/i&gt;) fully adjusted to Bach- Lehman 1722 tuning.&lt;br /&gt;&lt;br /&gt;(I have emailed Alan U. Kennington, Ph.D., and he granted permission for this use. His website states, 'All original material on the topology.org web site is Copyright (C) 1999-2009, &lt;a href="http://www.topology.org/"&gt;Alan U. Kennington&lt;/a&gt;. Permission is hereby granted for non-commercial reproduction of small portions of this material under the &lt;a href="http://www.topology.org/LICENCE.ak"&gt;Artistic Licence&lt;/a&gt;, provided that this copyright notice is attached.')&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-2686902559421311719?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/2686902559421311719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/07/brandenburg-5-in-bach-lehman-tuning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2686902559421311719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2686902559421311719'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/07/brandenburg-5-in-bach-lehman-tuning.html' title='Brandenburg 5 in Bach-Lehman tuning'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-7896994872559245882</id><published>2011-07-25T11:48:00.027-04:00</published><updated>2011-07-28T22:32:19.402-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TweakUI'/><category scheme='http://www.blogger.com/atom/ns#' term='click lock'/><category scheme='http://www.blogger.com/atom/ns#' term='hand jitter'/><category scheme='http://www.blogger.com/atom/ns#' term='prevent'/><category scheme='http://www.blogger.com/atom/ns#' term='touchpad'/><category scheme='http://www.blogger.com/atom/ns#' term='psychology'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='accidental drag and drop'/><category scheme='http://www.blogger.com/atom/ns#' term='laptop'/><category scheme='http://www.blogger.com/atom/ns#' term='drag and drop'/><category scheme='http://www.blogger.com/atom/ns#' term='accident'/><category scheme='http://www.blogger.com/atom/ns#' term='mouse'/><title type='text'>Prevent accidental drag and drop on touchpad laptops in Windows Explorer, howto</title><content type='html'>For convenience on many laptops, the touchpad functions like (left) clicking a mouse. However, in Windows Explorer, a classic problem occurs. We can drag and drop folders by mistake into other folders--they can get lost that way, or mess up our carefully organized tree.&lt;br /&gt;&lt;br /&gt;The solution is a distance, a threshold before accepting a drag (of a clicked mouse). We don't want natural hand jitter (visible at small resolutions) or accidental motion (while clicking) to be interpreted as a request to drag graphical objects around. This is well known--Windows has such a threshold. However, their default is 4 pixels!&lt;br /&gt;&lt;br /&gt;Some people's jitter is greater than others' (viz. Parkinson's disease); this default may be way too small to avoid the problem for touchpads, too.&lt;br /&gt;&lt;br /&gt;Using 40 pixels, I move past first two folders (or files, in Windows Explorer). Then before releasing the mouse, I pull back wherever, even the adjacent folder.&lt;br /&gt;&lt;br /&gt;There are two settings: horizontal and vertical. I set both the same--the horizontal is important, too, to prevent inadvertent mouse drags.&lt;br /&gt;&lt;br /&gt;HKEY_CURRENT_USER\Control Panel\Desktop&lt;br /&gt;DragHeight = "40"&lt;br /&gt;DragWidth = "40"&lt;br /&gt;&lt;br /&gt;Restart the computer for it to take effect.&lt;br /&gt;&lt;br /&gt;This setting allows windows also to be dragged conveniently. Drag a centimeter (half an inch) then back to your new, desired, fine location. The feeling is like a momentary slow response.&lt;br /&gt;&lt;br /&gt;If you wish, you can use Microsoft's &lt;a href="http://download.microsoft.com/download/f/c/a/fca6767b-9ed9-45a6-b352-839afb2a2679/TweakUiPowertoySetup.exe"&gt;TweakUI&lt;/a&gt; (a free-of-charge &lt;a href="http://windows.microsoft.com/en-US/windows/downloads/windows-xp"&gt;Windows XP download&lt;/a&gt;) to set these.&lt;br /&gt;&lt;br /&gt;You might enjoy playing with click-lock (on the mouse) for this problem, though it changes the user interface in a deep way, globally.&lt;br /&gt;&lt;br /&gt;I wonder if someone in the leadership structure of Microsoft might be big enough to admit--to themselves--they are continuing a mistake (whether small or important) that occurred some time in the past but was correct at one time, caused by an increase in monitor resolution (as others have said) and respond to some users' cries for help by changing this 4-pixel default? Because the key difficulty is in  admitting a mistake. Already they have enabled us to change our setting; it's merely avoiding a redecision about the default which is causing a problem in the wider world.&lt;br /&gt;&lt;br /&gt;The current state on this issue seems one of drifting inertia and big-company self-insulation. (Some of their &lt;a href="http://blogs.msdn.com/b/oldnewthing/archive/2009/04/10/9541813.aspx"&gt;attitude&lt;/a&gt; about it is visible on their Developer Network.)&lt;br /&gt;&lt;br /&gt;Ref:&lt;br /&gt;&lt;a href="http://forums.scotsnewsletter.com/index.php?showtopic=6650&amp;st=0&amp;p=172583&amp;#entry172583"&gt;Disable Drag And Drop In Windows Explorer?&lt;/a&gt; (from &lt;a href="http://blog.scotsnewsletter.com/"&gt;Scot's Newsletter&lt;/a&gt;'s Forum, editor of ComputerWorld)&lt;br /&gt;&lt;a href="http://www.howtogeek.com/howto/windows-vista/fixing-annoyances-stop-windows-from-copying-files-accidentally-when-ctrl-click-selecting/"&gt;Stop Windows copying files accidentally when Ctrl-click selecting&lt;/a&gt; (How-To Geek: &lt;a href="http://www.howtogeek.com/tag/windows/"&gt;more&lt;/a&gt;)&lt;br /&gt;&lt;a href="http://forum.soft32.com/windows/Prevent-Folder-Moving-ftopict379783.html"&gt;Prevent folder moving&lt;/a&gt; (see R. McCarty's answer)&lt;br /&gt;&lt;a href="http://answers.microsoft.com/en-us/office/forum/officeversion_other-outlook/how-to-disable-folder-drag-and-drop/7d547226-be8e-4206-a2e5-c30f0fc927ee"&gt;Click lock&lt;/a&gt; (see S. Goodkin's answer)&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-7896994872559245882?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/7896994872559245882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/07/stop-accidental-drag-and-drop-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7896994872559245882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7896994872559245882'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/07/stop-accidental-drag-and-drop-on.html' title='Prevent accidental drag and drop on touchpad laptops in Windows Explorer, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-5100877871066377191</id><published>2011-07-23T13:48:00.083-04:00</published><updated>2011-08-14T17:12:23.639-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literate programming'/><category scheme='http://www.blogger.com/atom/ns#' term='outliner'/><category scheme='http://www.blogger.com/atom/ns#' term='leo editor'/><category scheme='http://www.blogger.com/atom/ns#' term='text editor'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Installing Leo (Outlining Editor) on Windows, howto</title><content type='html'>&lt;em&gt;An introduction to Leo&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Looking at text editors recently, I found a &lt;a href="http://freemind.sourceforge.net/wiki/index.php?title=Alternatives_to_FreeMind&amp;amp;oldid=11887"&gt;recommendation&lt;/a&gt; for &lt;a href="http://webpages.charter.net/edreamleo/front.html"&gt;Leo&lt;/a&gt; ('Leonine Editor with Outlines', developed by Edward K. Ream).&lt;br /&gt;&lt;br /&gt;The (free) programmer's text editor and outliner (see Joe Orr's &lt;a href="http://www.3dtree.com/ev/e/sbooks/leo/sbframetoc_ie.htm"&gt;slideshow&lt;/a&gt;, or w/s Leo tutorial) improves software project readability, excitingly  -- but it's not only for programmers. Leo is a feature-rich, productivity-increasing tool.&lt;br /&gt;&lt;br /&gt;Using outlining is a fresh approach for the world of Literate Programming. It resolves the awkwardness, but easily fulfills the essence: it provides more readability, along with program code colocation with additional explanations, which helps prevent obsolescence.&lt;br /&gt;&lt;br /&gt;To start, all you have to do (A) is enter an idea about any section of your text and (B) incrementally develop (in Leo) an outline of your ideas, referring to sections of the text.&lt;br /&gt;&lt;br /&gt;Programmers need only (A) enter an idea about any (freely-chosen) section of their source code (e.g., its purpose) and (B) incrementally develop (in Leo) an outline of thoughts, referring to sections of the code.&lt;br /&gt;&lt;br /&gt;Additions you make, no matter how few, are a kind of Easy &lt;a href="http://en.wikipedia.org/wiki/Literate_programming"&gt;Literate Programming&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Even while using Leo, no other team members will feel impacted, even if they edit the same source files without it. In &lt;em&gt;no&lt;/em&gt; way does it hide the project source files inside its own folders or files, and it's compatible with version control systems, such as Git.&lt;br /&gt;&lt;br /&gt;How can Leo accomplish this? &lt;a href="http://webpages.charter.net/edreamleo/nutshell.html"&gt;Leo in a Nutshell&lt;/a&gt; explains. Ream's &lt;a href="http://slashdot.org/comments.pl?sid=38848&amp;amp;cid=4158746"&gt;view&lt;/a&gt; is worth reading also, on Slashdot.&lt;br /&gt;&lt;br /&gt;Leo is fairly mature and ready for use, long having had a 'small but extremely loyal group of users'&lt;sup&gt;[&lt;a href="http://texteditors.org/cgi-bin/wiki.pl?LEO"&gt;1&lt;/a&gt;]&lt;/sup&gt; in addition to the developer's personal use. Its architecture is extensible by scripting; upwards of 75 interesting plugins have been written. It has borrowed much from Emacs. Some of its voluminous documentation seems obsolete (however) or merely implementation-oriented.&lt;br /&gt;&lt;br /&gt;Presumably all Leo needs to know about the languages (even if  obscure) used on your project is the syntax of how to form block- and single-line comments.&lt;br /&gt;&lt;br /&gt;Leo opens a file by default (normally ~/.leo/workbook.leo, even on Windows) so if you want you can use it as a personal outlining planner.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Clones&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Leo's outlines have cloneable nodes (and subtrees), and therefore multiple views. This might be a simple idea; I'll give you two examples.&lt;br /&gt;&lt;br /&gt;For any given bug, a tree of relevant files can be collected (and cloned) and focused on without distraction. In the bug tree, as you edit those files, the ordinary hierarchy of files is being updated also (but not by special software). Since the nodes are cloned, you are editing the same files, not merely in essence but in actuality.&lt;br /&gt;&lt;br /&gt;Insofar as you make notes briefly while puzzling out a problem or solving a bug, naturally they are entered right there in the place provided: in the bug's file tree (or associated with it). Afterward, you collapse the bug's tree, left behind to help explain the solved bug to future readers (developers) whenever they might need it -- Easy Literate Programming.&lt;br /&gt;&lt;br /&gt;To explain something special to developers (readers) of the project, any files or folders (even sections of files) can be clone-arranged into a new tree structure (regardless of the layout of a project's filesystem).&lt;br /&gt;&lt;br /&gt;In particular, if you have written about several cross-cutting (e.g., aspect-oriented) concerns (say, a, b and c), or wish to explain them to other developers, then it's good to clone-arrange the relevant files (unless that's all the files) into trees belonging to those concerns, though the files actually reside elsewhere in the project's main organizational filesystem folders (say, w, x, y and z).&lt;br /&gt;&lt;br /&gt;It's an alternative to tagged filesystems in a way, but with explanations that grow organically -- it naturally produces a kind of manual, with an outlined table of contents.&lt;br /&gt;&lt;br /&gt;Here's how to install Leo on Windows XP in detail (for the non Python-familiar) the way I did, using some &lt;a href="http://webpages.charter.net/edreamleo/slides/installation/slide-001.html"&gt;installation&lt;/a&gt; instructions (or a &lt;a href="http://webpages.charter.net/edreamleo/installing.html"&gt;fuller&lt;/a&gt; version) on the website as a basis:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Leo prerequisites&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Leo requires Python 3 (or 2). Download and install minimally the latest Python-3 for Windows from &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;'s official website--I used 'python-3.2.1.msi'--to 'C:\progra\Python32'.&lt;br /&gt;&lt;br /&gt;For Python, and Register Extensions, Tcl/Tk and Utility Scripts, pick 'Will be installed on local hard drive'. For Documentation and Test Suite, pick 'Entire feature will be unavailable'.&lt;br /&gt;&lt;br /&gt;Download and install minimally the latest binary package for Windows containing QT-4, the 'cross-platform application and UI framework' and Python bindings, PyQT-4 from its &lt;a href="http://www.riverbankcomputing.co.uk/software/pyqt/download"&gt;developer&lt;/a&gt;'s website; I used 'PyQt-Py3.2-x86-gpl-4.8.4-1.exe'.&lt;br /&gt;&lt;br /&gt;Leo requires 'Qt runtime'. To ease uninstalling later, select 'Start Menu shortcuts'. Unselect everything else, including Documentation, Examples, QScintilla and the developer tools Developer, Qt, and SIP.&lt;br /&gt;&lt;br /&gt;When PyQt asks you to specify a 'Python installation folder', give the same folder as above, 'C:\progra\Python32'; the library goes there, in a subfolder.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Installing Leo&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Download and install the latest one-click installer for Windows (.exe) of Leo from its &lt;a href="http://sourceforge.net/projects/leo/files/Leo/4.9-final/"&gt;download&lt;/a&gt; page or possibly &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=3458&amp;amp;package_id=29106"&gt;here&lt;/a&gt;. Click where it says, 'Looking for the latest version'. I used 'LeoSetup-4.9-final-a.exe'.&lt;br /&gt;&lt;br /&gt;Leo may complain, 'Python not found,' but that's okay; we'll tell it later.&lt;br /&gt;&lt;br /&gt;Leave selected 'Leo', '.leo File Association' and 'Leo Start Menu' and click Next. For 'Destination Folder', give 'C:\progra\Leo-4.9-final' or the equivalent. For Python Folder, give the same folder as above, 'C:\progra\Python32'. Keeping the default Start Menu folder, 'Leo', click  Install and Finish.&lt;br /&gt;&lt;br /&gt;Open a command line window with Win+ R and go to the Leo program directory with 'cd \progra\leo*'. Type launchLeo.py. It should say something like, 'is Python 3: True', and a little while later (possibly a window) will ask you for, 'an id that identifies you uniquely'. After that, Leo's graphical window should pop up.&lt;br /&gt;&lt;br /&gt;From now on, you should be able to start Leo using the Windows Start menu.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Improving usability of Leo&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;With any folder menu in Windows Explorer, do Tools-Folder Options. Pick the File Types tab; move down and select the row that contains LEO in the Extensions column. Click the Advanced button; uncheck 'Confirm open after download'. Under Actions, make sure 'open' is selected and click the Edit button. Uncheck 'Use DDE' and into the box, 'Application used to perform action', paste:&lt;br /&gt;&lt;br /&gt;C:\progra\Python32\pythonw.exe C:\progra\Leo-4.9-final\launchLeo.py "%1"&lt;br /&gt;&lt;br /&gt;and click OK. (Double-quotes fix file and folder names that have embedded spaces, e.g. as you know, 'My Documents'.) Click OK again.&lt;br /&gt;&lt;br /&gt;Now if you click any Leo file, an instance should be loaded to edit it.&lt;br /&gt;&lt;br /&gt;The best documentation to read first is available by means of Menu-Help-Open quickstart.leo.&lt;br /&gt;&lt;br /&gt;&lt;sup&gt;[1]&lt;/sup&gt;&lt;a href="http://texteditors.org/cgi-bin/wiki.pl?LEO"&gt;Leo&lt;/a&gt; (Text editors wiki)&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Further introduction&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;o Leo&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webpages.charter.net/edreamleo/testimonials.html"&gt;Testimonial&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cvisual.com/office-productivity/leo-why-i-love.asp"&gt;Why I love Leo&lt;/a&gt; (Dan Rahmel)&lt;br /&gt;&lt;a href="http://webpages.charter.net/edreamleo/WhatIsLeo.html"&gt;What makes Leo special&lt;/a&gt;&lt;br /&gt;&lt;a href="http://webpages.charter.net/edreamleo/preface.html"&gt;Manual introduction&lt;/a&gt;&lt;br /&gt;&lt;a href="http://jtauber.com/blog/2004/05/15/using_the_leo_outliner_as_a_pim/"&gt;Blogpost: Using Leo as a personal information manager (PIM)&lt;/a&gt; (J.Tauber)&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Leo_%28text_editor%29"&gt;Leo (text editor)&lt;/a&gt; (Wikipedia)&lt;br /&gt;&lt;a href="http://groups.google.com/group/leo-editor/browse_thread/thread/3e75787223ee9303?pli=1"&gt;Ream's thoughts on Joe Orr's slideshow&lt;/a&gt;&lt;br /&gt;&lt;a href="http://webpages.charter.net/edreamleo/slides.html"&gt;Leo website slideshow&lt;/a&gt;&lt;br /&gt;&lt;a href="http://webpages.charter.net/edreamleo/intro.html"&gt;Introductory tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;o Solved by Leo&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wordyard.com/2006/07/31/outliners-trees-and-meshes/"&gt;Outliners, trees and meshes&lt;/a&gt; (Scott Rosenberg, author of &lt;em&gt;Dreaming in Code&lt;/em&gt;, etc.)&lt;br /&gt;&lt;a href="http://takingnotenow.blogspot.com/2008/09/outlines-and-meshes.html"&gt;Outlines and meshes&lt;/a&gt; (Taking Note, an anonymous blog)&lt;br /&gt;&lt;br /&gt;o Background: Outliners&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wordyard.com/2006/07/26/outliners/"&gt;Outliners then and now&lt;/a&gt; (Scott Rosenberg)&lt;br /&gt;&lt;a href="http://www.atpm.com/5.09/paradigm.shtml"&gt;MORE outliner&lt;/a&gt; (retrospective/review, ATPM.com)&lt;br /&gt;&lt;a href="http://www.tidbits.com/static/html/TidBITS-198.html#lnk5"&gt;MORE, dinosaur&lt;/a&gt; (retrospective/review, Matt Neuburg)&lt;br /&gt;&lt;br /&gt;o Background: Literate Programming&lt;br /&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?LiterateProgramming"&gt;LP&lt;/a&gt; (Ward Cunningham wiki)&lt;br /&gt;&lt;a href="http://www.literateprogramming.com/"&gt;[LP].com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://books.google.com/books?id=gOv4-rde_L8C&amp;amp;pg=PA16&amp;amp;lpg=PA16&amp;amp;dq=literate+programming+editor&amp;amp;source=bl&amp;amp;ots=PectuelON8&amp;amp;sig=vWnlpbv96dJMkmVE0IcWKriuntc&amp;amp;hl=en&amp;amp;ei=4to1TuDxLZCWtwf67ZCIDQ&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=10&amp;amp;ved=0CGQQ6AEwCTgK#v=onepage&amp;amp;q=literate%20programming%20editor&amp;amp;f=false"&gt;&lt;em&gt;Software design for engineers and scientists&lt;/em&gt;&lt;/a&gt; (J.A. Robinson, GoogleBooks from w/s literate programming editor)&lt;br /&gt;&lt;a href="http://pylit.berlios.de/literate-programming/index.html"&gt;LP&lt;/a&gt; (PyLit website)&lt;br /&gt;&lt;a href="http://infohost.nmt.edu/%7Eshipman/soft/litprog/"&gt;Lightweight LP&lt;/a&gt; with &lt;a href="http://www.nmt.edu/tcc/help/lang/python/examples/pyskip/pyskip.pdf"&gt;example&lt;/a&gt; (J.W.Shipman)&lt;br /&gt;&lt;a href="http://norbertlindenberg.com/lpw/index.html"&gt;LP Workshop&lt;/a&gt; (Mac program)&lt;br /&gt;&lt;a href="http://unspecified.wordpress.com/2010/06/04/literate-programming-is-a-terrible-idea/"&gt;LP is a terrible idea&lt;/a&gt; (Matt Giuca)&lt;br /&gt;&lt;a href="http://docs.google.com/viewer?a=v&amp;amp;q=cache:lq-LB9m1sFUJ:www.literateprogramming.com/bchilds1.pdf+literate+programming+editor&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEEShfRKTjIAtdx-tILbjAW4gY2odq-BJAVg13mAjylD-u0nDVhpLP2jiMz1JJDvshC_uRhhI8nsls6JsXTexvs-7Q_Yq6-8sH7XhIhzpuspu5bI1qJJvm9cTix-f1iYXuiMYgKCMk&amp;amp;sig=AHIEtbQeen7jO8VIihp4ngu_uKDXN8zDBg"&gt;LP, why?&lt;/a&gt; (Bart Childs)&lt;br /&gt;&lt;a href="http://www.cs.up.ac.za/cs/vpieterse/pub/XP2004_LP.pdf"&gt;LP to enhance agile methods&lt;/a&gt; (Vreda Pieterse: &lt;a href="http://www.cs.up.ac.za/cs/vpieterse/resrch.htm"&gt;publications&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;o Related, vaguely&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dig.csail.mit.edu/2005/ajar/ajaw/About.html"&gt;Tabulator: RDF semantic web browser&lt;/a&gt; (Tim Berners-Lee)&lt;br /&gt;&lt;a href="http://takingnotenow.blogspot.com/2008/09/bacon-on-instruments-of-mind.html"&gt;Bacon on instruments of the mind&lt;/a&gt; (Taking Note)&lt;br /&gt;&lt;br /&gt;&lt;em&gt;For more information&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;o On Leo&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webpages.charter.net/edreamleo/"&gt;All about Leo&lt;/a&gt;&lt;br /&gt;&lt;a href="http://webpages.charter.net/edreamleo/leoLinks.html"&gt;More Leo resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.jserv.com/jk_orr/xml/leo.htm"&gt;Joe Orr's Leo resource page&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.maphew.com/How_To/Installing_Leo_Editor_on_Windows"&gt;Installing Leo on Windows&lt;/a&gt; (Matt Wilkie)&lt;br /&gt;&lt;a href="http://www.haskell.org/pipermail/haskell-cafe/2009-November/068493.html"&gt;Develop in Haskell with Leo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;o General&lt;br /&gt;&lt;br /&gt;&lt;a href="http://texteditors.org/cgi-bin/wiki.pl?OutlinerFamily"&gt;Outliner editor family&lt;/a&gt; (Text editors wiki)&lt;br /&gt;&lt;a href="http://www.marktaw.com/reviews/Outliners.html"&gt;Outliners: comparison&lt;/a&gt; (Mark Wieczorek)&lt;br /&gt;&lt;a href="http://www.informatik.uni-trier.de/~ley/db/conf/xpu/index.html"&gt;XP/agile universe&lt;/a&gt; (conferences)&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-5100877871066377191?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/5100877871066377191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/07/installing-leo-outlining-editor-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5100877871066377191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5100877871066377191'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/07/installing-leo-outlining-editor-on.html' title='Installing Leo (Outlining Editor) on Windows, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-7584702319095955776</id><published>2011-07-11T15:17:00.066-04:00</published><updated>2011-08-24T08:10:41.555-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='mouse'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='shortcut'/><title type='text'>Unfamiliar Windows keyboard shortcuts</title><content type='html'>I like to open folders sometimes in a new window, sometimes the same window. It's difficult to right-click my particular computer mouse. Also, generally I prefer keyboard shortcuts.&lt;br /&gt;&lt;br /&gt;First I tried using Microsoft Windows Explorer's option which always opens a new window; soon I was frustrated, closing the many windows. (See Windows Explorer-Menu-Tools-Folder Options-General-Browse Folders.)&lt;br /&gt;&lt;br /&gt;To open the other view (folder or explorer) in a new window, I was motivated to find a shortcut: either with the keyboard or a left mouse click. Some research found many that were unfamiliar and quite useful.&lt;br /&gt;&lt;br /&gt;Here are my select keyboard and mouse shortcuts for Windows XP and later. You might not know all of them--I think you will find at least one excitingly useful!&lt;br /&gt;&lt;br /&gt;Abbreviations:&lt;br /&gt;App = Application key (AKA Menu key, context menu key)&lt;br /&gt;Win = Windows key (AKA Flag key, Meta key, MOD4, Start key, Super key, Windows logo key, WinKey)&lt;br /&gt;&lt;br /&gt;General:&lt;br /&gt;Alt+ Esc: Cycle programs in starting order&lt;br /&gt;Alt+ F6: Cycle windows of active program&lt;br /&gt;Alt+ PrintScreen: Capture program window (paste into Paint)&lt;br /&gt;Alt+ Shift+ Esc: Cycle programs in starting order, backward&lt;br /&gt;Alt+ Spacebar M Arrow: Move active window&lt;br /&gt;Alt+ Spacebar S Arrow: Resize active window&lt;br /&gt;App: Show context menu&lt;br /&gt;Ctrl+ Shift+ Esc: Task manager&lt;br /&gt;F6: Cycle screen elements (e.g., in SeaMonkey, go to address bar)&lt;br /&gt;Win: Show start menu&lt;br /&gt;Win+ Break: Show system properties&lt;br /&gt;Win+ D: Show desktop (toggle)&lt;br /&gt;Win+ E: Explore My Computer&lt;br /&gt;Win+ L: Lock/logon screen (switch user)&lt;br /&gt;Win+ M: Minimize all windows&lt;br /&gt;Win+ R: Run&lt;br /&gt;Win+ Shift+ M: Undo minimize all windows (also undo show desktop)&lt;br /&gt;Win+ Shift+ Tab Enter: Cycle programs in taskbar, backward&lt;br /&gt;Win+ Tab Enter: Cycle programs in taskbar&lt;br /&gt;Win+ U: Utility manager (accessibility)&lt;br /&gt;(Shift+ F10: same as App)&lt;br /&gt;&lt;br /&gt;Command-line window:&lt;br /&gt;Alt+ Spacebar E K (make selection) Enter: Select text&lt;br /&gt;Alt+ Spacebar E L Arrow: Scroll&lt;br /&gt;Alt+ Spacebar E P: Paste text&lt;br /&gt;&lt;br /&gt;Desktop:&lt;br /&gt;Alt+ Double-click: Show properties (single folder or file)&lt;br /&gt;Alt+ Enter: Show properties (multiple folders &amp; files)&lt;br /&gt;Enter: Open single selection in folder view (or last-selected)&lt;br /&gt;Shift+ Enter: Explore single selection (or last-selected)&lt;br /&gt;(App O: same as Enter; App X: same as Shift+ Enter)&lt;br /&gt;&lt;br /&gt;Multi-document program:&lt;br /&gt;Ctrl+ F4: Close active document&lt;br /&gt;&lt;br /&gt;... Icon of non-maximized document:&lt;br /&gt;Double-click: Close&lt;br /&gt;&lt;br /&gt;Windows Explorer (file chooser in other programs):&lt;br /&gt;Alt+ Double-click: Show properties (of single folder or file; except explore-view navigation pane)&lt;br /&gt;Alt+ Enter: Show properties (multiple folders &amp; files)&lt;br /&gt;Alt F W Enter: Create new folder&lt;br /&gt;Alt V E O: Show navigation pane (toggle)&lt;br /&gt;Ctrl+ Keypad '+': Fit columns&lt;br /&gt;F4: Show folder trail (toggle)&lt;br /&gt;Shift+ Click: Select from top to pointer&lt;br /&gt;&lt;br /&gt;Finally, to avoid right-clicking, here are the shortcuts I was looking for:&lt;br /&gt;&lt;br /&gt;... In explore view:&lt;br /&gt;App O: New folder-view window(s)&lt;br /&gt;Enter: Change to single selection; explore (some of) multiple selection in new windows&lt;br /&gt;(App X, Click Shift+ Double-click: same as Enter)&lt;br /&gt;&lt;br /&gt;... In folder view:&lt;br /&gt;Ctrl+ Enter: Open single (or some of multiple) selection in new window(s)&lt;br /&gt;Enter: Change to first-selected&lt;br /&gt;Shift+ Enter: Explore in new window(s)&lt;br /&gt;(App X, Click Shift+ Double-click: same as Shift+ Enter)&lt;br /&gt;&lt;br /&gt;Sources:&lt;br /&gt;http://www.computerhope.com/shortcut/windows.htm&lt;br /&gt;http://support.microsoft.com/kb/301583&lt;br /&gt;http://support.microsoft.com/kb/126449&lt;br /&gt;http://en.wikipedia.org/wiki/Windows_key&lt;br /&gt;http://en.wikipedia.org/wiki/Menu_key&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-7584702319095955776?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/7584702319095955776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/07/unfamiliar-useful-keyboard-mouse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7584702319095955776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7584702319095955776'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/07/unfamiliar-useful-keyboard-mouse.html' title='Unfamiliar Windows keyboard shortcuts'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-2178926602221797999</id><published>2011-06-11T13:33:00.066-04:00</published><updated>2011-12-18T20:39:33.102-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compose'/><category scheme='http://www.blogger.com/atom/ns#' term='lectionary'/><category scheme='http://www.blogger.com/atom/ns#' term='harmony'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='mass'/><category scheme='http://www.blogger.com/atom/ns#' term='Young temperament'/><category scheme='http://www.blogger.com/atom/ns#' term='song'/><title type='text'>Mass, songs I composed</title><content type='html'>I composed some music!&lt;br /&gt;&lt;br /&gt;Also, I &lt;a href="http://en.wikipedia.org/wiki/Music_engraving"&gt;engraved&lt;/a&gt; its sheet music. (Good-looking, if I say so myself. I would be happy to engrave anyone's music! Please email me [click my profile] for reasonable rates.)&lt;br /&gt;&lt;br /&gt;The following are free of charge (with the Creative Commons license):&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://en.wikipedia.org/wiki/Mass_%28music%29"&gt;mass setting&lt;/a&gt; in Latin. Its title is, `Missa Brevis, &lt;a href="http://en.wikipedia.org/wiki/Thomas_Young_%28scientist%29"&gt;Thomas Young&lt;/a&gt;'; its subtitle, `In a Sequence of Chords Inspired by His Harpsichord Temperament No. 1 of 1799, For Choir of Four Parts, Unaccompanied' (with optional organ). (Opus 1: May 2010, improved December 2011.)&lt;br /&gt;&lt;br /&gt;I attempted, with music, to express the emotions naturally present in the mass text (for a wide audience, not necessarily Christian).&lt;br /&gt;&lt;br /&gt;PDF &lt;a href="http://www.zymbelstern.com/mark/mass/missa-brevis.pdf"&gt;sheet&lt;/a&gt; music and MIDI are available. The movements are &lt;a href="http://www.zymbelstern.com/mark/mass/antiphon.mid"&gt;Antiphon&lt;/a&gt; (Asperges Me &amp;amp; Vidi Aquam--Latin &amp;amp; English), Kyrie (&lt;a href="http://www.zymbelstern.com/mark/mass/kyrieSixfold.mid"&gt;Sixfold&lt;/a&gt; &amp;amp; &lt;a href="http://www.zymbelstern.com/mark/mass/kyrieNinefold.mid"&gt;Ninefold&lt;/a&gt;), &lt;a href="http://www.zymbelstern.com/mark/mass/gloria.mid"&gt;Gloria&lt;/a&gt;, &lt;a href="http://www.zymbelstern.com/mark/mass/sanctus.mid"&gt;Sanctus&lt;/a&gt; &amp;amp; &lt;a href="http://www.zymbelstern.com/mark/mass/benedictus.mid"&gt;Benedictus&lt;/a&gt; and &lt;a href="http://www.zymbelstern.com/mark/mass/agnusDei.mid"&gt;Agnus Dei&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Two songs, both on Roman Catholic/Anglican/Episcopal Church &lt;a href="http://en.wikipedia.org/wiki/Lectionary"&gt;Lectionary&lt;/a&gt; texts (in English) for the &lt;a href="http://en.wikipedia.org/wiki/Feast_of_the_Sacred_Heart"&gt;Feast of the Sacred Heart&lt;/a&gt; (among other occasions, or for general use). (Opus 2: June 2010, improved December 2011.)&lt;br /&gt;&lt;br /&gt;My aim was to approximate the pitches of natural speech, as well as to express the emotion of the texts.&lt;br /&gt;&lt;br /&gt;They are for alto solo with tenor solo accompaniment (and optional keyboard):&lt;br /&gt;&lt;br /&gt;1. `Jesus Addressed' (from Lk. 15:3-5) with PDF &lt;a href="http://www.zymbelstern.com/mark/song/jesus-addressed/jesus-addressed.pdf"&gt;sheet&lt;/a&gt; music and MIDI, &lt;a href="http://www.zymbelstern.com/mark/song/jesus-addressed/jesus-addressed-piano.midi"&gt;with&lt;/a&gt; piano accompaniment and &lt;a href="http://www.zymbelstern.com/mark/song/jesus-addressed/jesus-addressed-voice.midi"&gt;without&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2. `It Is Rare' (from Rom. 5:7-8) with PDF &lt;a href="http://www.zymbelstern.com/mark/song/it-is-rare/it-is-rare.pdf"&gt;sheet&lt;/a&gt; music and MIDI, &lt;a href="http://www.zymbelstern.com/mark/song/it-is-rare/it-is-rare-piano.midi"&gt;with&lt;/a&gt; piano accompaniment and &lt;a href="http://www.zymbelstern.com/mark/song/it-is-rare/it-is-rare-voice.midi"&gt;without&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I improved the print layout of the songs December, 2011.&lt;br /&gt;&lt;br /&gt;The mass setting was inspired by (and is an homage to) Young's 1799 system of well-temperament (&lt;a href="http://markdblackwell.blogspot.com/2011/11/bach-lehman-and-young-1-using.html"&gt;Young #1&lt;/a&gt;, called `ideal' by Owen H. Jorgensen in his classic book &lt;a href="http://www.amazon.com/Tuning-Containing-Eighteenth-Century-Temperament-Nineteenth-Century/dp/0870132903"&gt;Tuning&lt;/a&gt; of 1991). It follows his temperament order of major thirds (which have roots C G=F D=Bb A=Eb E=Ab B=Db Gb), with CE purest-sounding and GbBb (in a sense, farthest away) the least pure-sounding (albeit the mass was written for equal-temperament).&lt;br /&gt;&lt;br /&gt;Thus the (mass's) overall sequence of chords is actually two simultaneous &lt;a href="http://en.wikipedia.org/wiki/Circle_of_fifths"&gt;circles of fifths&lt;/a&gt;. You can see an annotation of the chords in the &lt;a href="http://www.zymbelstern.com/mark/mass/missa-brevis.pdf"&gt;sheet&lt;/a&gt; music (their roots, as well as major or minor), revolving (usually) in both directions. The movements are thus unified, and I added harmonic coloration (and inversion) to make them enjoyable.&lt;br /&gt;&lt;br /&gt;Here is how I devised the mass's chord roots, in order of composition:&lt;br /&gt;&lt;br /&gt;The Kyrie sections (of the two Kyrie settings) revolve from C to Gb; the Christe sections are the reverse. (The Sixfold one was composed after Agnus Dei.)&lt;br /&gt;&lt;br /&gt;The Sanctus &amp; Benedictus setting (considered as a unit) offers Young's equalized third roots the other way: C F G Bb D Eb A Ab E Db B Gb.&lt;br /&gt;&lt;br /&gt;In the Gloria setting, the entire circle of fourths first revolves upward (on major chords) feeling like &lt;a href="http://en.wikipedia.org/wiki/Cadence_%28music%29#Authentic_cadence"&gt;classical&lt;/a&gt; resolution, then downward (with some text-appropriate, minor chords) feeling like &lt;a href="http://en.wikipedia.org/wiki/Cadence_%28music%29#Plagal_cadence"&gt;Plagal&lt;/a&gt; hymn resolution.&lt;br /&gt;&lt;br /&gt;In the Agnus Dei setting, two arcs of fifths intertwine, though one breaks order slightly (and is reversed): C G D A E B Gb and Ab Eb Bb F (Db). Thus there (emotionally) is a regular falling pattern: C Ab G Eb D Bb A F E Db B Gb. Interestingly, the last four match the (chord) roots of the Benedictus, which inspired me.&lt;br /&gt;&lt;br /&gt;Young's equalized third roots are presented simultaneously in the Antiphon setting, which revolves from C to Gb then reverses.&lt;br /&gt;&lt;br /&gt;To the Gloria, Sanctus, Benedictus and Agnus Dei settings (previously Anglican chant: full-measure chords) I added rhythm (as well as improving the overall print layout) December, 2011.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-2178926602221797999?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/2178926602221797999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/06/mass-and-songs-i-composed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2178926602221797999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2178926602221797999'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/06/mass-and-songs-i-composed.html' title='Mass, songs I composed'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-6954784919487525024</id><published>2011-03-23T17:00:00.007-04:00</published><updated>2011-12-02T13:57:57.355-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='cPanel'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails 3'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='sub URI'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='gallery'/><title type='text'>Install Rails 3 application to cPanel in sub-URI, howto</title><content type='html'>Recently, I successfully installed a Rails 3.0.3 &lt;a href="https://github.com/MarkDBlackwell/webmaster-gallery"&gt;application&lt;/a&gt; (using Ruby 1.8.7) on a plain-vanilla webhost with cPanel (which normally is restricted to Rails 2).&lt;br /&gt;&lt;br /&gt;It can be managed in the normal way (started and stopped) on cPanel's webpage, 'Manage Ruby on Rails Applications', because of additional code I wrote in the Rails app.&lt;br /&gt;&lt;br /&gt;Here's how I did it:&lt;br /&gt;&lt;br /&gt;o See the webhost's current Ruby version and gem environment (for your_user_name) with:&lt;br /&gt;&lt;br /&gt;cron&amp;gt; gem env&lt;br /&gt;&lt;br /&gt;(If shell access is unavailable, command lines can be run as one-time cron jobs by specifying (year) month, day, hour and minute.)&lt;br /&gt;&lt;br /&gt;o Ask the webhost to update if they don't have the latest RubyGems system software:&lt;br /&gt;&lt;br /&gt;root&amp;gt; gem update --system&lt;br /&gt;&lt;br /&gt;o Create a Ruby on Rails application (on the cPanel Ruby on Rails page) specifying application path, 'rails_apps/your_app_name'.&lt;br /&gt;&lt;br /&gt;o In cPanel's File Manager (with the option to show hidden files) navigate to $HOME/rails_apps/your_app_name and delete the contents just made. Upload your Rails 3 application (there, compressing with 'zip' gives the relative pathnames required by cPanel) and extract it.&lt;br /&gt;&lt;br /&gt;o Correct your cPanel user's gem environment by uploading to $HOME/.gemrc the following:&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;gem: --no-rdoc --no-ri&lt;br /&gt;&lt;br /&gt;# Note: a non-default value adds another gempath.&lt;br /&gt;# Is default for rubygems 1.5.2:&lt;br /&gt;gemhome: /home/your_user_name/.gem/ruby/1.8&lt;br /&gt;&lt;br /&gt;gempath:&lt;br /&gt;# Is default for rubygems 1.5.2:&lt;br /&gt;  - /home/your_user_name/.gem/ruby/1.8&lt;br /&gt;# Your app's vendor bundle:&lt;br /&gt;  - /home/your_user_name/rails_apps/your_app_name/vendor/bundle/ruby/1.8&lt;br /&gt;# Change this to the webhost's gem repository location:&lt;br /&gt;  - /usr/lib/ruby/gems/1.8&lt;br /&gt;&lt;br /&gt;o The webhost's cPanel Software/Services RubyGems page might be incorrect:&lt;br /&gt;&lt;br /&gt;oo It might say the location of your ruby gems is '/home/your_user_name/ruby/gems'. This is wrong; Rubygems software currently uses, '/home/your_user_name/.gem/ruby/1.8'.&lt;br /&gt;&lt;br /&gt;oo It might recommend adding a gem repository to the include path. This is unnecessary; don't add either of the following:&lt;br /&gt;&lt;br /&gt;$:.push("/home/your_user_name/ruby/gems")&lt;br /&gt;$:.push("/home/your_user_name/.gem/ruby/1.8")&lt;br /&gt;&lt;br /&gt;o Install the bundler gem:&lt;br /&gt;&lt;br /&gt;cron&amp;gt; gem install bundler&lt;br /&gt;&lt;br /&gt;o Generate Gemfile.lock with:&lt;br /&gt;&lt;br /&gt;cron&amp;gt; cd $HOME/rails_apps/your_app_name; bundle install --path vendor/bundle&lt;br /&gt;&lt;br /&gt;o Ask the webhost to install (in the system gem repository) any gems Bundler failed to install, for instance, when Bundler tries to compile native extensions, which fails for cPanel users. For me, this was:&lt;br /&gt;&lt;br /&gt;root&amp;gt; gem install mysql2&lt;br /&gt;&lt;br /&gt;o Replace the Bundler code in config/boot.rb with a fixed list of gems:&lt;br /&gt;&lt;br /&gt;=begin&lt;br /&gt;# Set up gems listed in the Gemfile.&lt;br /&gt;gemfile = File.expand_path('../../Gemfile', __FILE__)&lt;br /&gt;begin&lt;br /&gt;    ENV['BUNDLE_GEMFILE'] = gemfile&lt;br /&gt;    require 'bundler'&lt;br /&gt;    Bundler.setup&lt;br /&gt;    rescue Bundler::GemNotFound =&amp;gt; e&lt;br /&gt;    STDERR.puts e.message&lt;br /&gt;    STDERR.puts "Try running `bundle install`."&lt;br /&gt;    exit!&lt;br /&gt;end if File.exist?(gemfile)&lt;br /&gt;=end&lt;br /&gt;&lt;br /&gt;o To make the list, sort Gemfile.lock and keep only its highest version of each gem. My fixed list was:&lt;br /&gt;&lt;br /&gt;require 'rubygems'&lt;br /&gt;&lt;br /&gt;require 'mysql2'&lt;br /&gt;&lt;br /&gt;# Moved arel up, because otherwise got error:&lt;br /&gt;## /usr/lib/ruby/site_ruby/1.8/rubygems.rb:274:in `activate': can't activate arel (= 2.0.7, runtime) for [], already activated arel-2.0.8 for ["activerecord-3.0.3"] (Gem::LoadError)&lt;br /&gt;&lt;br /&gt;gem 'arel', '=2.0.7'&lt;br /&gt;&lt;br /&gt;gem 'abstract', '=1.0.0'&lt;br /&gt;gem 'actionmailer', '=3.0.3'&lt;br /&gt;gem 'actionpack', '=3.0.3'&lt;br /&gt;gem 'activemodel', '=3.0.3'&lt;br /&gt;gem 'activerecord', '=3.0.3'&lt;br /&gt;gem 'activeresource', '=3.0.3'&lt;br /&gt;gem 'activesupport', '=3.0.3'&lt;br /&gt;gem 'builder', '=2.1.2'&lt;br /&gt;gem 'erubis', '=2.6.6'&lt;br /&gt;gem 'i18n', '=0.5.0'&lt;br /&gt;gem 'mail', '=2.2.15'&lt;br /&gt;gem 'mime-types', '=1.16'&lt;br /&gt;gem 'polyglot', '=0.3.1'&lt;br /&gt;gem 'rack', '=1.2.1'&lt;br /&gt;gem 'rack-mount', '=0.6.13'&lt;br /&gt;gem 'rack-test', '=0.5.7'&lt;br /&gt;gem 'rails', '=3.0.3'&lt;br /&gt;gem 'railties', '=3.0.3'&lt;br /&gt;gem 'rake', '=0.8.7'&lt;br /&gt;gem 'thor', '=0.14.6'&lt;br /&gt;gem 'treetop', '=1.4.9'&lt;br /&gt;gem 'tzinfo', '=0.3.24'&lt;br /&gt;&lt;br /&gt;o Seamonkey's caching causes problems in testing. The setting, 'Menu-Edit-Preferences-Advanced-Cache-Compare the page in the cache to the page on the network', should be 'Every time I view the page'. This still did not prevent all old, cached pages even with page reloads. I recommend using another browser, such as Opera to test your application.&lt;br /&gt;&lt;br /&gt;o For my Rails 3 application, I used port 12009, one higher than cPanel's Mongel port for Rails (12008).&lt;br /&gt;&lt;br /&gt;o Besides the cPanel button, you can start the application yourself in the cPanel way by:&lt;br /&gt;&lt;br /&gt;cron&amp;gt; cd $HOME/rails_apps/your_app_name; /usr/bin/ruby /usr/bin/mongrel_rails start -p cPanel_Mongel_port; -d -e development -P log/mongrel.pid&lt;br /&gt;&lt;br /&gt;o When troubleshooting, you can also start the application yourself by:&lt;br /&gt;&lt;br /&gt;cron&amp;gt; cd $HOME/rails_apps/your_app_name; $HOME/.gem/ruby/1.8/bin/rails server webrick --port=Rails_3_port&lt;br /&gt;&lt;br /&gt;o In config/environment.rb, add this line at the top:&lt;br /&gt;&lt;br /&gt;unless (STARTED_BY_CPANEL='script/rails' != $PROGRAM_NAME)&lt;br /&gt;&lt;br /&gt;o and these lines at the bottom:&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;    load File.expand_path '../../monkey_patch_mongrel_1.1.5/start_webrick.rb', __FILE__&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;o Make a directory at the app root called, 'monkey_patch_mongrel_1.1.5'. Into it, place a file called 'dispatcher.rb' containing:&lt;br /&gt;&lt;br /&gt;## Work around Mongrel source file: mongrel-1.1.5/lib/mongrel/rails.rb: 148&lt;br /&gt;## require 'dispatcher'&lt;br /&gt;&lt;br /&gt;module ActionController&lt;br /&gt;    class AbstractRequest&lt;br /&gt;        def relative_url_root=&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;o Also place a file there called 'start_webrick.rb' containing:&lt;br /&gt;&lt;br /&gt;p Time.now, 'in '+__FILE__&lt;br /&gt;&lt;br /&gt;# Versions tested on:&lt;br /&gt;# Apache: 2.2.15&lt;br /&gt;# Architecture: x86_64&lt;br /&gt;# cPanel: 11.28.86&lt;br /&gt;# cPanel Pro: 1.0 (RC1)&lt;br /&gt;# Hosting package: Starter&lt;br /&gt;# Kernel: 2.6.9-89.31.1.ELsmp (Linux)&lt;br /&gt;# Mongrel: 1.1.5 (cPanel's)&lt;br /&gt;# MySQL: 5.1.45&lt;br /&gt;# Rails: 3.0.3&lt;br /&gt;# Ruby: 1.8.7 patchlevel 330&lt;br /&gt;&lt;br /&gt;module MyStartup&lt;br /&gt;    require 'pathname'&lt;br /&gt;&lt;br /&gt;    MY_RAILS_ENV=ENV['RAILS_ENV'] # Set by cPanel's Mongrel.&lt;br /&gt;&lt;br /&gt;    PROGRAM_FILE=Pathname(__FILE__).realpath&lt;br /&gt;    pfd=[]; PROGRAM_FILE.descend{|e| pfd &amp;lt;&amp;lt; e}&lt;br /&gt;    USER_HOME=pfd.at 1&lt;br /&gt;    APP_ROOT= pfd.at -3&lt;br /&gt;    SERVER='webrick'&lt;br /&gt;    PORT='12009'&lt;br /&gt;&lt;br /&gt;    ARGUMENTS="--environment=#{MY_RAILS_ENV} --port=#{PORT}"&lt;br /&gt;# For debugging, change to '':&lt;br /&gt;    REDIRECT_OUTPUT='&amp;gt; /dev/null'&lt;br /&gt;&lt;br /&gt;    class GemPathEntry&lt;br /&gt;        SYSTEM = Pathname('/').join *%w[ usr lib ruby gems 1.8 ]&lt;br /&gt;        USER = USER_HOME .join *%w[ .gem ruby 1.8 ]&lt;br /&gt;        APP_BUNDLE = APP_ROOT .join *%w[ vendor bundle ruby 1.8 ]&lt;br /&gt;    end&lt;br /&gt;    MY_GEM_HOME= GemPathEntry::USER&lt;br /&gt;    MY_GEM_PATH=[GemPathEntry::APP_BUNDLE, GemPathEntry::USER, GemPathEntry::SYSTEM].join ':'&lt;br /&gt;&lt;br /&gt;# We might need Bundler in system gems. Or, as working now, in user (.gem) gems; I don't remember.&lt;br /&gt;&lt;br /&gt;# The following line doesn't work because Bundler (1.0.10) "bundle install --binstubs" rewrites gem executables to invoke Bundler:&lt;br /&gt;## r = APP_ROOT.&lt;br /&gt;    r = GemPathEntry::APP_BUNDLE&lt;br /&gt;    RAILS_COMMAND=['exec',r.join(*%w[bin rails]),'server',SERVER,ARGUMENTS,REDIRECT_OUTPUT].join ' '&lt;br /&gt;&lt;br /&gt;    REQUIRED_ENVIRONMENT_VARIABLES=[&lt;br /&gt;            "HOME=#{ USER_HOME }",&lt;br /&gt;            "RAILS_ENV=#{ MY_RAILS_ENV }",&lt;br /&gt;            "GEM_HOME=#{ MY_GEM_HOME }",&lt;br /&gt;            "GEM_PATH=#{ MY_GEM_PATH }",&lt;br /&gt;            ].join ' '&lt;br /&gt;&lt;br /&gt;    def self.stop_process(name,pid,signal)&lt;br /&gt;        begin&lt;br /&gt;            p "I Stopping #{name} pid #{pid} at #{Time.now}"&lt;br /&gt;            Process.kill signal, pid&lt;br /&gt;            p "I #{Process.waitall.inspect}, #{name} finished at #{Time.now}"&lt;br /&gt;        rescue Errno::EINVAL, Errno::ESRCH&lt;br /&gt;            p "I No #{name} process #{pid}"&lt;br /&gt;        end&lt;br /&gt;# Got error, undefined local variable or method `pwa' with:&lt;br /&gt;## p pwa, "All child processes finished at #{Time.now}." unless (pwa=Process.waitall).empty?&lt;br /&gt;# Sometimes there are other processes, I don't know why; so wait for them.&lt;br /&gt;        pwa=Process.waitall&lt;br /&gt;        p "I #{pwa.inspect}, all child processes finished at #{Time.now}" unless pwa.empty?&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;# Rack (1.2.1) fails with Rails 3.0.3 and any Mongrel, although Webrick works, per:&lt;br /&gt;# https://github.com/rack/rack/issues/35&lt;br /&gt;&lt;br /&gt;    MONGREL_PID_FILE=APP_ROOT.join *%w[ log mongrel.pid ]&lt;br /&gt;&lt;br /&gt;    p Time.now&lt;br /&gt;    p "I Program name ($0) is #{$PROGRAM_NAME}"&lt;br /&gt;    p "I In #{PROGRAM_FILE}"&lt;br /&gt;    $LOAD_PATH.unshift APP_ROOT.join 'monkey_patch_mongrel_1.1.5'&lt;br /&gt;&lt;br /&gt;    unless WEBRICK_MONITOR_PID=Process.fork # Mongrel doesn't stop all threads, so we use a process.&lt;br /&gt;        p "I Starting Webrick monitor pid #{WEBRICK_MONITOR_PID} at #{Time.now} using command:"&lt;br /&gt;        p (c="export #{REQUIRED_ENVIRONMENT_VARIABLES}; cd #{APP_ROOT}; #{RAILS_COMMAND}")&lt;br /&gt;        Process.exec c unless WEBRICK_PID=Process.fork # Fork and replace another process.&lt;br /&gt;        p "I Starting Webrick pid #{WEBRICK_PID} at #{Time.now}"&lt;br /&gt;        Signal.trap 'TERM' do&lt;br /&gt;            stop_process 'Webrick', WEBRICK_PID, 'INT'&lt;br /&gt;        end&lt;br /&gt;        p "I #{Process.waitall.inspect}, Webrick finished (itself); stopping Mongrel at #{Time.now}"&lt;br /&gt;        unless File.exist? MONGREL_PID_FILE.to_s&lt;br /&gt;            p "I File '#{MONGREL_PID_FILE}' not found"&lt;br /&gt;        else&lt;br /&gt;            `#{s='mongrel_rails stop'}`&lt;br /&gt;            p "I '#{s}' finished at #{Time.now}"&lt;br /&gt;        end&lt;br /&gt;        Process.exit&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    Kernel.at_exit do # Handle being stopped by Mongrel.&lt;br /&gt;        stop_process 'Webrick monitor', WEBRICK_MONITOR_PID, 'TERM'&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;o The following rewrite rules require you to make this symlink:&lt;br /&gt;        /home/your_user_name/public_html/your_app_name -&amp;gt;&lt;br /&gt;        /home/your_user_name/rails_apps/your_app_name/public&lt;br /&gt;&lt;br /&gt;ln -s $HOME/rails_apps/your_app_name/public $HOME/public_html/your_app_name&lt;br /&gt;&lt;br /&gt;o At least in Rails 3.0.3, the following config/application.rb statement, which allows your application to generate the proper sub-URI URL's for its static assets such as images, requires an extra '/your_app_name' in the RewriteCond directive for most cached pages:&lt;br /&gt;&lt;br /&gt;        config.action_controller.asset_path=proc{|p| "/your_app_name#{p}"}&lt;br /&gt;&lt;br /&gt;o Note that cPanel users cannot change Apache's system-level configuration file (/usr/local/apache/conf/httpd.conf), for instance to add Alias directives, so the following applies:&lt;br /&gt;&lt;br /&gt;        'The most common situation in which mod_rewrite is the right tool is when the very best solution requires access to the server configuration files, and you don't have that access. Some configuration directives are only available in the server configuration file. So if you are in a hosting situation where you only have .htaccess files to work with, you may need to resort to mod_rewrite.' --from http://httpd.apache.org/docs/current/rewrite/avoid.html&lt;br /&gt;&lt;br /&gt;o The Pattern argument to RewriteRule must be without leading slash (it is stripped by Apache) or trailing slash. Its Substitution argument must have the leading slash.&lt;br /&gt;&lt;br /&gt;o Apache's directive, DirectorySlash redirects bare sub-URI requests to '/your_app_name/', since 'your_app_name' is a symlink to your application's directory, 'public'. Similarly, Apache normally redirects bare HTTP_HOST requests to '/' because 'public_html' is a directory.&lt;br /&gt;&lt;br /&gt;o Per: httpd-docs-2.2.14.en/mod/mod_rewrite.html#rewriterule&lt;br /&gt;        Per-directory Rewrites: When using the rewrite engine in .htaccess files the per-directory prefix (which always is the same for a specific directory) is automatically removed for the pattern matching and automatically added after the substitution has been done.&lt;br /&gt;&lt;br /&gt;o My file, 'public_html/.htaccess' has these directives regarding cache expiration:&lt;br /&gt;&lt;br /&gt;    # Requires mod_expires to be enabled.&lt;br /&gt;    &amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;    # Enable expirations.&lt;br /&gt;    ExpiresActive On&lt;br /&gt;    # Cache all files for 2 weeks after access (A).&lt;br /&gt;    ExpiresDefault A1209600&lt;br /&gt;    # Do not cache dynamically generated pages.&lt;br /&gt;    ExpiresByType text/html A1&lt;br /&gt;    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;&lt;br /&gt;o Apache's &amp;lt;if&amp;gt; directive is unavailable until version 2.3, per:&lt;br /&gt;        http://serverfault.com/questions/238832/how-should-i-use-the-if-directive-in-htaccess&lt;br /&gt;&lt;br /&gt;o Apache's FallbackResource directive is unavailable until version 2.2.16, per:&lt;br /&gt;        http://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource&lt;br /&gt;&lt;br /&gt;o Place this .htaccess file in your application's public directory:&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# Rails 3.0.3 cPanel Apache settings.&lt;br /&gt;#&lt;br /&gt;# Don't show directory listings for URLs which map to a directory.&lt;br /&gt;Options -Indexes&lt;br /&gt;# Set the default handler to none.&lt;br /&gt;DirectoryIndex&lt;br /&gt;# Don't follow symbolic links in this directory or below.&lt;br /&gt;Options -FollowSymLinks&lt;br /&gt;&lt;br /&gt;# Rewrite module.&lt;br /&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;RewriteEngine on&lt;br /&gt;# Per http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteoptions :&lt;br /&gt;RewriteOptions inherit&lt;br /&gt;RewriteBase /your_app_name&lt;br /&gt;&lt;br /&gt;# 1. Simplify the rules for your sub-URI by redirecting a missing subdomain to 'www.':&lt;br /&gt;&lt;br /&gt;RewriteCond %{HTTP_HOST} ^your_user_name\.com$ [NC]&lt;br /&gt;RewriteRule ^(.*)$ http://www.your_user_name.com/your_app_name/$1 [L,R=301]&lt;br /&gt;&lt;br /&gt;# 2. Rewrite your Rails application URI's to various files if they exist.&lt;br /&gt;&lt;br /&gt;# 2.1. Rewrite its page-cached URI's:&lt;br /&gt;&lt;br /&gt;# 2.1.1. Try to rewrite the sub-URI root URI to a file ('public/your_app_name.html') with path '/home/your_user_name/public_html/your_app_name/your_app_name.html':&lt;br /&gt;&lt;br /&gt;RewriteCond %{HTTP_HOST} ^www\.your_user_name\.com$ [NC]&lt;br /&gt;RewriteCond %{REQUEST_FILENAME}your_app_name.html -f&lt;br /&gt;#SHOW RewriteRule ^$ /your_app_name/your_app_name.html?dr=%{DOCUMENT_ROOT}&amp;amp;rf=%{REQUEST_FILENAME} [L,R=301]&lt;br /&gt;RewriteRule ^$ /your_app_name/your_app_name.html [L]&lt;br /&gt;&lt;br /&gt;# 2.1.2. Try to rewrite a sub-URI, non-root URI to a file with extension '.html' (under tree, 'public/your_app_name/') by prefixing '/home/your_user_name/public_html/your_app_name' and suffixing '.html':&lt;br /&gt;&lt;br /&gt;RewriteCond %{HTTP_HOST} ^www\.your_user_name\.com$ [NC]&lt;br /&gt;RewriteCond %{DOCUMENT_ROOT}/your_app_name%{REQUEST_URI}.html -f&lt;br /&gt;#SHOW RewriteRule ^(.+)$ /your_app_name/$1.html?dr=%{DOCUMENT_ROOT}&amp;amp;ru=%{REQUEST_URI}&amp;amp;rf=%{REQUEST_FILENAME} [L,R=301]&lt;br /&gt;RewriteRule ^(.+)$ /your_app_name/your_app_name/$1.html [L]&lt;br /&gt;&lt;br /&gt;# 3. Rewrite all other requests (except existing files) to the Rails port:&lt;br /&gt;&lt;br /&gt;RewriteCond %{HTTP_HOST} ^www\.your_user_name\.com$ [NC]&lt;br /&gt;RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;#SHOW RewriteRule ^(.*)$ /your_app_name/your_app_name.html?rf=%{REQUEST_FILENAME} [L,R=301]&lt;br /&gt;RewriteRule ^(.*)$ http://127.0.0.1:12009/your_app_name/$1 [L,P]&lt;br /&gt;&lt;br /&gt;&amp;lt;/IfModule&amp;gt;&lt;br /&gt;&lt;br /&gt;o References:&lt;br /&gt;    http://httpd.apache.org/docs/2.2/&lt;br /&gt;    http://httpd.apache.org/docs/2.2/mod/quickreference.html&lt;br /&gt;    http://httpd.apache.org/docs/2.2/rewrite/&lt;br /&gt;    http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html&lt;br /&gt;    http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html (simpler)&lt;br /&gt;    http://httpd.apache.org/docs/2.2/rewrite/vhosts.html&lt;br /&gt;    http://wiki.apache.org/httpd/WhenNotToUseRewrite&lt;br /&gt;    http://borkweb.com/story/apache-rewrite-cheatsheet&lt;br /&gt;    http://www.askapache.com/htaccess/crazy-advanced-mod_rewrite-tutorial.html&lt;br /&gt;&lt;br /&gt;o Then as a result, if you start your application, its cPanel Mongrel log in log/mongrel.log should look like this:&lt;br /&gt;&lt;br /&gt;** Daemonized, any open files are closed. Look at log/mongrel.pid and log/mongrel.log for info.&lt;br /&gt;** Starting Mongrel listening at 0.0.0.0:12008&lt;br /&gt;** Starting Rails with development environment...&lt;br /&gt;Wed Mar 23 12:29:15 -0700 2011&lt;br /&gt;"in /home/your_user_name/rails_apps/your_app_name/config/environment.rb"&lt;br /&gt;Wed Mar 23 12:29:15 -0700 2011&lt;br /&gt;"in /home/your_user_name/rails_apps/your_app_name/monkey_patch_mongrel_1.1.5/start_webrick.rb"&lt;br /&gt;Wed Mar 23 12:29:15 -0700 2011&lt;br /&gt;"I Program name ($0) is /usr/bin/mongrel_rails"&lt;br /&gt;"I In /home/your_user_name/rails_apps/your_app_name/monkey_patch_mongrel_1.1.5/start_webrick.rb"&lt;br /&gt;"I Starting Webrick monitor pid at Wed Mar 23 12:29:15 -0700 2011 using command:"&lt;br /&gt;"export HOME=/home RAILS_ENV=development GEM_HOME=/home/.gem/ruby/1.8 GEM_PATH=/home/your_user_name/rails_apps/your_app_name/vendor/bundle/ruby/1.8:/home/.gem/ruby/1.8:/usr/lib/ruby/gems/1.8; cd /home/your_user_name/rails_apps/your_app_name; exec /home/your_user_name/rails_apps/your_app_name/vendor/bundle/ruby/1.8/bin/rails server webrick --environment=development --port=12009 &amp;gt; /dev/null"&lt;br /&gt;"I Starting Webrick pid 15175 at Wed Mar 23 12:29:15 -0700 2011"&lt;br /&gt;** Rails loaded.&lt;br /&gt;** Loading any Rails specific GemPlugins&lt;br /&gt;** Signals ready. TERM =&amp;gt; stop. USR2 =&amp;gt; restart. INT =&amp;gt; stop (no restart).&lt;br /&gt;** Rails signals registered. HUP =&amp;gt; reload (without restart). It might not work well.&lt;br /&gt;** Mongrel 1.1.5 available at 0.0.0.0:12008&lt;br /&gt;** Writing PID file to log/mongrel.pid&lt;br /&gt;[2011-03-23 12:29:16] INFO WEBrick 1.3.1&lt;br /&gt;[2011-03-23 12:29:16] INFO ruby 1.8.7 (2009-06-12) [x86_64-linux]&lt;br /&gt;[2011-03-23 12:29:16] INFO WEBrick::HTTPServer#start: pid=15175 port=12009&lt;br /&gt;&lt;br /&gt;o If you use the cPanel button to stop your application, it should look like this:&lt;br /&gt;&lt;br /&gt;** TERM signal received.&lt;br /&gt;"I Stopping Webrick monitor pid 22436 at Wed Mar 23 12:47:43 -0700 2011"&lt;br /&gt;"I Stopping Webrick pid 22437 at Wed Mar 23 12:47:43 -0700 2011"&lt;br /&gt;[2011-03-23 12:47:43] INFO going to shutdown ...&lt;br /&gt;[2011-03-23 12:47:43] INFO WEBrick::HTTPServer#start done.&lt;br /&gt;"I [[22437, #&amp;lt;Process::Status: pid=22437,exited(0)&amp;gt;]], Webrick finished at Wed Mar 23 12:47:43 -0700 2011"&lt;br /&gt;"I [], Webrick finished (itself); stopping Mongrel at Wed Mar 23 12:47:43 -0700 2011"&lt;br /&gt;"I File '/home/your_user_name/rails_apps/your_app_name/log/mongrel.pid' not found"&lt;br /&gt;&lt;br /&gt;o If, from inside your application, you also want to stop cPanel's Mongrel server and Webrick (I did, because my application makes static pages), add this to one of your controllers:&lt;br /&gt;&lt;br /&gt;    WEBRICK_PID_PATH=App.root.join *%w[ tmp pids server.pid ]&lt;br /&gt;    WEBRICK_PID = begin&lt;br /&gt;        f=File.new WEBRICK_PID_PATH.to_s, 'r'&lt;br /&gt;        s=f.gets("\n").chomp "\n"&lt;br /&gt;        f.close&lt;br /&gt;        s.to_i if s.present?&lt;br /&gt;    rescue Errno::ENOENT&lt;br /&gt;        nil&lt;br /&gt;    end&lt;br /&gt;    application_PID=Process.pid&lt;br /&gt;&lt;br /&gt;    def stop_application(s)&lt;br /&gt;        logger.info "I #{s}; sending INT to application PID #{application_PID}"&lt;br /&gt;        Process.kill 'INT', application_PID&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def stop_server&lt;br /&gt;# Attempt to stop Webrick server gracefully by sending it SIGINT:&lt;br /&gt;        webrick_killed=false&lt;br /&gt;        if WEBRICK_PID.present? &amp;amp;&amp;amp; WEBRICK_PID &amp;gt; 0&lt;br /&gt;            begin&lt;br /&gt;                logger.info "I sending INT to Webrick PID #{WEBRICK_PID}; application PID is #{application_PID}"&lt;br /&gt;                Process.kill 'INT', WEBRICK_PID&lt;br /&gt;                webrick_killed=true&lt;br /&gt;            rescue Errno::EINVAL, Errno::ESRCH&lt;br /&gt;            end&lt;br /&gt;        end&lt;br /&gt;# Handle various unusual conditions:&lt;br /&gt;        s=case&lt;br /&gt;        when WEBRICK_PID.blank?&lt;br /&gt;            'No Webrick server.pid file found'&lt;br /&gt;        when (WEBRICK_PID &amp;lt;= 0)&lt;br /&gt;            "Bad value in Webrick server.pid file: #{WEBRICK_PID}"&lt;br /&gt;        when (WEBRICK_PID != application_PID)&lt;br /&gt;            "Server PID #{WEBRICK_PID} differs from application's: not Webrick?"&lt;br /&gt;        when (!webrick_killed)&lt;br /&gt;            "No process #{WEBRICK_PID}"&lt;br /&gt;# TODO: Handle hung Webrick server?&lt;br /&gt;        end&lt;br /&gt;        stop_application s if s&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;o If you stop Mongrel from within your application, it should look like this:&lt;br /&gt;&lt;br /&gt;[2011-03-23 12:30:46] INFO going to shutdown ...&lt;br /&gt;[2011-03-23 12:30:47] INFO WEBrick::HTTPServer#start done.&lt;br /&gt;"I [[15175, #&amp;lt;Process::Status: pid=15175,exited(0)&amp;gt;]], Webrick finished (itself); stopping Mongrel at Wed Mar 23 12:30:47 -0700 2011"&lt;br /&gt;** TERM signal received.&lt;br /&gt;"I Stopping Webrick monitor pid 15174 at Wed Mar 23 12:30:47 -0700 2011"&lt;br /&gt;"I Stopping Webrick pid 15175 at Wed Mar 23 12:30:47 -0700 2011"&lt;br /&gt;"I No Webrick process 15175"&lt;br /&gt;"I [[16266, #&amp;lt;Process::Status: pid=16266,exited(0)&amp;gt;]], all child processes finished at Wed Mar 23 12:30:47 -0700 2011"&lt;br /&gt;"I 'mongrel_rails stop' finished at Wed Mar 23 12:30:47 -0700 2011"&lt;br /&gt;"I [[15174, #&amp;lt;Process::Status: pid=15174,exited(0)&amp;gt;]], Webrick monitor finished at Wed Mar 23 12:30:47 -0700 2011"&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;a href="https://github.com/MarkDBlackwell/webmaster-gallery"&gt;Webmaster gallery&lt;/a&gt; - cPanel Rails 3 app - Mark D. Blackwell&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-6954784919487525024?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/6954784919487525024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/03/install-rails-3-application-to-cpanel_23.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6954784919487525024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6954784919487525024'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/03/install-rails-3-application-to-cpanel_23.html' title='Install Rails 3 application to cPanel in sub-URI, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-2557309109915513181</id><published>2011-03-11T12:25:00.016-05:00</published><updated>2011-11-01T10:40:44.983-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='Puppy'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='keePass'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Installing Keepassx on Puppy Linux, howto</title><content type='html'>Today I installed Keepassx, the 'open source password manager' (see http://www.keepassx.org/) on a computer running Puppy Linux (Quirky Retro 1.2).&lt;br /&gt;&lt;br /&gt;Keepassx is compatible with KeePass for Windows, as long as you use the 1.x series. Ports of the 2.x series probably require .NET (or Mono) to run; both are quite large (per http://keepass.info).&lt;br /&gt;&lt;br /&gt;Here's how I did it:&lt;br /&gt;o From Debian.org, I downloaded this package from Debian, selecting the binary for my architecture (i386):&lt;br /&gt;&lt;br /&gt;http://packages.debian.org/lenny/keepassx&lt;br /&gt;&lt;br /&gt;o In ROX-Filer, I installed it by clicking the package file.&lt;br /&gt;&lt;br /&gt;o Then I clicked 'console' on the desktop and typed, 'keepassx'. One by one, I got error messages for various missing libraries. Searching:&lt;br /&gt;&lt;br /&gt;http://www.debian.org/distrib/packages#search_contents&lt;br /&gt;&lt;br /&gt;I found the missing libraries in the following packages, which I then installed:&lt;br /&gt;&lt;br /&gt;http://packages.debian.org/lenny/libqt4-xml&lt;br /&gt;http://packages.debian.org/lenny/libqtgui4&lt;br /&gt;http://packages.debian.org/lenny/libqtcore4&lt;br /&gt;http://packages.debian.org/lenny/libaudio2&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-2557309109915513181?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/2557309109915513181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/03/keepassx-on-puppy.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2557309109915513181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2557309109915513181'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/03/keepassx-on-puppy.html' title='Installing Keepassx on Puppy Linux, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-7291781029344949578</id><published>2011-02-20T19:37:00.028-05:00</published><updated>2011-11-01T10:40:55.942-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer language'/><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='swi-prolog'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='Puppy'/><category scheme='http://www.blogger.com/atom/ns#' term='prolog'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Installing Prolog on Puppy Linux, howto</title><content type='html'>From the book, &lt;a href="http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X/"&gt;Seven Languages in Seven Weeks&lt;/a&gt;, I notice a trend toward specialty languages being glued together by Ruby, or any scripting language. We can use the right tool for the right purpose instead of one "sledgehammer" only! Some examples are Prolog for rules (or logic) and Io (w/s "io language") for parsing. &lt;br /&gt;&lt;br /&gt;Today I installed the package SWI Prolog, useful for developing in Prolog, the logic computer programming language, on a computer running Puppy Linux (Quirky Retro 1.2).&lt;br /&gt;&lt;br /&gt;Here's how I did it:&lt;br /&gt;&lt;br /&gt;o From Debian.org, download two 'lenny' packages:&lt;br /&gt;&lt;br /&gt;swi-prolog_5swi-prolog_5.6.58-2_i386.deb&lt;br /&gt;libgmp3c2_4.2.2+dfsg-3_i386.deb&lt;br /&gt;&lt;br /&gt;o In the ROX-Filer file manager, click their icons to install them.&lt;br /&gt;&lt;br /&gt;o Create a file, ~/.plrc containing the single line:&lt;br /&gt;&lt;br /&gt;:- set_prolog_flag(editor,'geany').&lt;br /&gt;&lt;br /&gt;o Within ~/my-documents, create and change to the directory, 'prolog'.&lt;br /&gt;&lt;br /&gt;o Associate the file extension, '.pl' with SWI Prolog. Create a file like 'any.pl'. Right-click it in ROX-Filer and edit the run command to be:&lt;br /&gt;&lt;br /&gt;urxvt -e swipl -s "$@"&lt;br /&gt;&lt;br /&gt;Now you can click on a file with extension '.pl' and it will be loaded by the interpreter.&lt;br /&gt;&lt;br /&gt;To make changes, type, 'edit.'. The interpreter will re-read the file when you close the editor. Type 'halt.' to end the session.&lt;br /&gt;&lt;br /&gt;One example to get you started: if you type 'alice.' into a file, and in the interpreter type 'alice.', it will respond with, 'true'.&lt;br /&gt;&lt;br /&gt;For further information, the SWI Prolog user manual is available off-line at:&lt;br /&gt;&lt;br /&gt;file:///usr/lib/swi-prolog/doc/Manual/index.html&lt;br /&gt;&lt;br /&gt;Their FAQ is:&lt;br /&gt;&lt;br /&gt;http://www.swi-prolog.org/FAQ/&lt;br /&gt;&lt;br /&gt;Some tutorials appropriate to beginners:&lt;br /&gt;&lt;br /&gt;http://www.bitwisemag.com/copy/programming/prolog/intro/firststeps.html&lt;br /&gt;http://www.learnprolognow.org/&lt;br /&gt;http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html&lt;br /&gt;http://www.doc.gold.ac.uk/~mas02gw/prolog_tutorial/prologpages/&lt;br /&gt;&lt;br /&gt;Copyright (c) 2011 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-7291781029344949578?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/7291781029344949578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2011/02/install-prolog-on-puppy-linux-quirky.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7291781029344949578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7291781029344949578'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2011/02/install-prolog-on-puppy-linux-quirky.html' title='Installing Prolog on Puppy Linux, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-5920093796804894356</id><published>2010-08-05T21:17:00.004-04:00</published><updated>2011-07-27T10:17:43.038-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='suite'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='fugue'/><category scheme='http://www.blogger.com/atom/ns#' term='counterpoint'/><category scheme='http://www.blogger.com/atom/ns#' term='cello'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach'/><category scheme='http://www.blogger.com/atom/ns#' term='viola da spalla'/><category scheme='http://www.blogger.com/atom/ns#' term='cello suite'/><title type='text'>Bach cello suites on viola da spalla</title><content type='html'>My favorite way to hear the Bach cello suites is on the viola da spalla: http://www.youtube.com/watch?v=081JUQ7f6Yo&lt;br /&gt;http://www.youtube.com/watch?v=VFZ0HHMIMn0#t=0m44s&lt;br /&gt;&lt;br /&gt;For more information:&lt;br /&gt;&lt;br /&gt;http://dictionary.die.net/viola da spalla&lt;br /&gt;http://en.wikipedia.org/wiki/Giovanni_Battista_Vitali&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-5920093796804894356?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/5920093796804894356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/08/bach-cello-suites-on-viola-da-spalla.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5920093796804894356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/5920093796804894356'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/08/bach-cello-suites-on-viola-da-spalla.html' title='Bach cello suites on viola da spalla'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-6384911399957122649</id><published>2010-07-20T11:14:00.009-04:00</published><updated>2011-07-27T10:16:57.597-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='myers-briggs'/><category scheme='http://www.blogger.com/atom/ns#' term='natural language'/><category scheme='http://www.blogger.com/atom/ns#' term='swahili'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><category scheme='http://www.blogger.com/atom/ns#' term='intp'/><title type='text'>Swahili</title><content type='html'>(January 20, 2010.) This morning, after leaving M's car to be worked on, I conversed with an INTP long-time slight acquaintance, who typically wears Moslem robes, while returning home by bus. He seated himself beside me, seemingly unawares.&lt;br /&gt;&lt;br /&gt;After surprised greetings, observing him reading Latin and Arabic alphabetical writing, I asked politely, "What are you reading?"&lt;br /&gt;&lt;br /&gt;He informed me, "&lt;a href="http://en.wikipedia.org/wiki/Swahili_language"&gt;Swahili&lt;/a&gt;", (the &lt;i&gt;lingua franca&lt;/i&gt; of central East Africa).&lt;br /&gt;&lt;br /&gt;I prompted him, "For long, I have wanted to learn Swahili. I just know one word: &lt;i&gt;Uhuru.&lt;/i&gt;"&lt;br /&gt;&lt;br /&gt;Pleased, as I predicted, he said, "That means, 'Freedom!'"&lt;br /&gt;&lt;br /&gt;I explained, "I have read the grammar is very interesting." He proceeded to teach, and from him, I learned:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Ni&lt;/i&gt; - I.&lt;br /&gt;&lt;i&gt;Ni na kula.&lt;/i&gt; - I am eating.&lt;br /&gt;&lt;i&gt;Ni na soma.&lt;/i&gt; - I am reading.&lt;br /&gt;&lt;i&gt;Ni da kula.&lt;/i&gt; - I will eat.&lt;br /&gt;&lt;i&gt;Ni li kula.&lt;/i&gt; - I ate.&lt;br /&gt;&lt;i&gt;Ni si na kula.&lt;/i&gt; - I am not eating.&lt;br /&gt;&lt;i&gt;Ni na kula chakula.&lt;/i&gt; - I am eating food.&lt;br /&gt;&lt;i&gt;Ni na kula chakula moto.&lt;/i&gt; - I am eating hot food.&lt;br /&gt;&lt;i&gt;Ni na kula chakula moto haraka.&lt;/i&gt; - I quickly am eating hot food.&lt;br /&gt;&lt;br /&gt;Thus far, it follows &lt;a href="http://www.google.com/search?q='Greenberg+word-order+correlations'"&gt;Greenbergian word-order correlations&lt;/a&gt;, in that adverbs are placed on the same side of verbs, as adjectives are of nouns. (Here, both 'hot' and 'quickly' come afterward.)&lt;br /&gt;&lt;br /&gt;More about &lt;a href="http://en.wikipedia.org/wiki/Swahili_language"&gt;Swahili&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Word_order"&gt;Word order&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I find it interesting, BTW, that we can communicate more easily with a fellow INTP, of limited English from Africa who is Moslem, than with a person from here, of some other Myers-Briggs type!&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-6384911399957122649?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/6384911399957122649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/07/swahili.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6384911399957122649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6384911399957122649'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/07/swahili.html' title='Swahili'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-2144617961341813406</id><published>2010-06-29T11:18:00.005-04:00</published><updated>2011-07-27T09:59:46.237-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='radio'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='audio'/><category scheme='http://www.blogger.com/atom/ns#' term='Q2'/><title type='text'>Q2 radio</title><content type='html'>I discovered an &lt;a href="http://www.wqxr.org/articles/q2-music/2009/oct/07/say-hello-q2/"&gt;all new-music&lt;/a&gt; classical radio station, &lt;a href="http://www.wqxr.org/q2/"&gt;Q2&lt;/a&gt;, from New York City! To listen, &lt;a href="http://www.wqxr.org/stream/q2/mp3.pls"&gt;click&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It just came online October, 2009 (Internet only) and streams a nice 128Kbps. A &lt;a href="http://www.wqxr.org/playlists/q2/"&gt;playlist&lt;/a&gt; is available. It has New York Philharmonic commissions from 12 to 4 o'clock.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-2144617961341813406?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/2144617961341813406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/06/q2-radio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2144617961341813406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2144617961341813406'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/06/q2-radio.html' title='Q2 radio'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-929841416963169110</id><published>2010-03-15T18:39:00.010-04:00</published><updated>2011-07-27T10:20:33.834-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='well tempered clavier'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach-Lehman'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='fugue'/><category scheme='http://www.blogger.com/atom/ns#' term='counterpoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach'/><title type='text'>Bach Well-Tempered Clavier in Bach-Lehman temperament</title><content type='html'>You might enjoy both books of Bach's Well-Tempered Clavier on harpsichord in &lt;a href="http://www.larips.com/"&gt;Bach/Lehman 1722&lt;/a&gt; temperament (from &lt;a href="http://www-personal.umich.edu/~bpl/"&gt;Bradley Lehman&lt;/a&gt;, A.Mus.D.), which feels to me like what Bach really used. You might like this temperament, too!&lt;br /&gt;&lt;br /&gt;If there is an immediate &lt;em&gt;emotional&lt;/em&gt; difference between the following two versions of Prelude in C major from Book I of The Well-Tempered Clavier by Bach then, good!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/WTK/bk1-C-prel-s00001.mid"&gt;Bach in equal temperament&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/WTK/02-bk1-C-prel-s00001-lehman-bach.mid"&gt;Bach in Bach-Lehman temperament&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Otherwise, your MIDI setup is not right somehow. You shouldn't bother to download books &lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/WTK/Kennington-WTK-readme.html"&gt;I&lt;/a&gt; and &lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/WTK/Tomita-WTK-readme=midi.html"&gt;II&lt;/a&gt; in their entirety.&lt;br /&gt;&lt;br /&gt;Available zip formats:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/WTK/Bach-WTK-major-by-third.zip"&gt;the major keys&lt;/a&gt; (the order is F C G Bb D Eb Ab F# A C# B E)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/WTK/Bach-WTK-minor-by-third.zip"&gt;the minor keys&lt;/a&gt; (the order is D A E G C B F Eb G# F# Bb C#)&lt;br /&gt;&lt;br /&gt;To start playing after downloading, just open the folders, select all the MIDI files, and drag them &lt;i&gt;en masse&lt;/i&gt; to a RealPlayer window.&lt;br /&gt;&lt;br /&gt;Toward answering the question, 'Which keys sound brightest?' here the pieces in the Well-Tempered Clavier are in order of increasing 'brightness': the size of the tonic chord's major third, essentially, after dividing major keys from minor.&lt;br /&gt;&lt;br /&gt;For sizes of major thirds and fifths in Bach-Lehman temperament, see &lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/WTK/triad-calculator-out-lehman-bach.txt"&gt;this chart&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For the detailed sorting decisions, see 'readme.txt' inside the major and minor key zip files.&lt;br /&gt;&lt;br /&gt;I tuned the MIDI files to Bach-Lehman temperament using the program, &lt;a href="http://www.huygens-fokker.org/scala/"&gt;Scala&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(For this, it is essential to use good wave-table MIDI synthesizer software like the Microsoft GS Wavetable SW Synth (which is based on Roland wavetables). The Creative (SoundBlaster) SoundFont Synth and the QuickTime Music Synthesizer (at least on PC's) somehow blot out temperaments' emotional content, and thus they make meaningless this listening comparison.)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.topology.org/midi/README.html"&gt;Alan Kennington&lt;/a&gt; and &lt;a href="http://www.mu.qub.ac.uk/tomita/"&gt;Yo Tomita&lt;/a&gt; have given me permission to reuse their MIDI realizations.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-929841416963169110?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/929841416963169110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/03/bach-well-tempered-clavier-bach-lehman.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/929841416963169110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/929841416963169110'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/03/bach-well-tempered-clavier-bach-lehman.html' title='Bach Well-Tempered Clavier in Bach-Lehman temperament'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-2362582476046909290</id><published>2010-02-19T18:19:00.010-05:00</published><updated>2011-07-27T10:21:14.992-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach-Lehman'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='contrapunctus'/><category scheme='http://www.blogger.com/atom/ns#' term='fugue'/><category scheme='http://www.blogger.com/atom/ns#' term='counterpoint'/><category scheme='http://www.blogger.com/atom/ns#' term='art of fugue'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach'/><title type='text'>Bach Contrapunctus (Art of Fugue)</title><content type='html'>I tuned to Bach-Lehman 1722 temperament a MIDI from the &lt;a href="http://www.mutopiaproject.org/cgibin/make-table.cgi?Instrument=String"&gt;Mutopia Project&lt;/a&gt; using harpsichord of most of Bach's &lt;i&gt;The &lt;a href="http://en.wikipedia.org/wiki/The_Art_of_Fugue"&gt;Art of Fugue&lt;/a&gt;&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;To hear, expand this &lt;a href="http://www.zymbelstern.com/mark/temperament/Bach/contrapunctus/Bach-contrapunctus.zip"&gt;zip file&lt;/a&gt;. Drag the files &lt;i&gt;en masse&lt;/i&gt; to RealPlayer's window (for example), sort its playlist of movements  (perhaps putting inversus before rectus), and enjoy!&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-2362582476046909290?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/2362582476046909290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/bach-contrapunctus-art-of-fugue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2362582476046909290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2362582476046909290'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/bach-contrapunctus-art-of-fugue.html' title='Bach Contrapunctus (Art of Fugue)'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-4071969718794239084</id><published>2010-02-09T19:36:00.031-05:00</published><updated>2011-07-27T10:21:34.253-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='variation'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach-Lehman'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='goldberg variations'/><category scheme='http://www.blogger.com/atom/ns#' term='fugue'/><category scheme='http://www.blogger.com/atom/ns#' term='counterpoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach'/><title type='text'>Goldberg Variations in Bach-Lehman tuning</title><content type='html'>I am listening excitedly to Bach's &lt;a href="http://en.wikipedia.org/w/index.php?title=Goldberg_Variations&amp;oldid=342585198"&gt;Goldberg Variations&lt;/a&gt; in G major (in a file I recently re-tuned) because they sound so good! They are now in the temperament used by Bach himself I believe, &lt;a href="http://www-personal.umich.edu/~bpl/larips/informal.html"&gt;Bach-Lehman 1722&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I invite you to listen to:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/goldberg/988-v25-lehman.mid"&gt;Variation 25 - Andante espressivo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, if you try the:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/goldberg/988-v25.mid"&gt;equal temperament version&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I believe you shall hear significantly less beauty, even unpleasantness!&lt;br /&gt;&lt;br /&gt;For this, it is essential to use some good wave-table MIDI synthesizer software like Microsoft GS Wavetable SW Synth which is based on Roland wavetables.&lt;br /&gt;&lt;br /&gt;The Creative SoundBlaster SoundFont Synth and the QuickTime Music Synthesizer (at least on PC's) somehow blot out temperaments' emotional content, and they make this listening comparison meaningless.&lt;br /&gt;&lt;br /&gt;Sometime, feast your ears and emotional system on the:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/goldberg/bwv988-lehman.mid"&gt;complete variations&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;on harpsichord, in Bach-Lehman 1722 temperament. (It may be better if you minimize the treble on your speakers or whatever. Credits:&lt;br /&gt;&lt;br /&gt;Goldberg Variations - by J.S. Bach - BWV 988.&lt;br /&gt;&lt;a href="http://www.jsbach.net/midi/midi_goldbergvariations.html"&gt;MIDI version&lt;/a&gt; by David J. Grossman, 1997.&lt;br /&gt;Bach-Lehman 1722 temperament version by Mark D. Blackwell, 2010.&lt;br /&gt;&lt;br /&gt;Interesting, from Mr. Grossman's website on the &lt;a href="http://www.jsbach.net/midi/artofmidi.html"&gt;Art of MIDI&lt;/a&gt;: 'Listening to a clean sequence of a Bach work, it is possible for the mind to add [its] own interpretation[;] one is able to listen to the work in such a way that [one's] own realization of the work comes through.'&lt;br /&gt;&lt;br /&gt;Following immediately at 1:09:21 are Bach's &lt;a href="http://en.wikipedia.org/w/index.php?title=Goldberg_Variations&amp;oldid=342585198#Canons_on_the_Goldberg_ground.2C_BWV_1087"&gt;Fourteen Canons on the First Eight Notes of the Goldberg Ground&lt;/a&gt; in G major - BWV 1087, which sound better, interestingly, in&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/goldberg/bwv1087.mid"&gt;equal temperament&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jsbach.net/midi/index.html"&gt;More Bach&lt;/a&gt; from David J. Grossman.&lt;br /&gt;&lt;br /&gt;(I have emailed &lt;a href="http://www.unpronounceable.com/dave/"&gt;David J. Grossman&lt;/a&gt;;, he granted permission for this use. His website &lt;a href="http://www.jsbach.net/index.html"&gt;states&lt;/a&gt;, 'All original material is copyrighted ©1999 (unpronounceable) Productions', and &lt;a href="http://www.jsbach.net/about.html"&gt;also states&lt;/a&gt;, 'All of these sequences were created with Cakewalk Pro Audio and are copyrighted ©1997. However, they are freely distributable and modif[i]able for any non-commercial purpose[,] as long as proper credit is given and the textual information in the files remains intact', and &lt;a href="http://www.jsbach.net/midi/artofmidi.html"&gt;also states&lt;/a&gt;, 'The original MIDI sequences at this site [are] copyrighted by myself but may be modified and redistributed[,] if: I am asked permission first and have given it, I am given partial credit for my original work, and they are not sold. Redistribution of my sequences in their unmodified form is allowed without explicit permission as long as no money is charged for them.')&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-4071969718794239084?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/4071969718794239084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/goldberg-variations-in-bach-lehman.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/4071969718794239084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/4071969718794239084'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/goldberg-variations-in-bach-lehman.html' title='Goldberg Variations in Bach-Lehman tuning'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-4825901640109371861</id><published>2010-02-09T16:28:00.012-05:00</published><updated>2011-07-27T10:21:53.302-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='mystery'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='chopin'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Chopin mystery</title><content type='html'>Here is a puzzle, involving a short piece by Chopin: &lt;a href="http://www.zymbelstern.com/mark/chopin/chopin-mystery.mid"&gt;Etude No. 3 in E [major] (Op. 10)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;realized by Katsuhiro Oguri.&lt;br /&gt;&lt;br /&gt;(For this, it is essential to use good wave-table MIDI synthesizer software like the Microsoft GS Wavetable SW Synth (which is based on Roland wavetables). The Creative (SoundBlaster) SoundFont Synth and the QuickTime Music Synthesizer (at least on PC's) somehow blot out temperaments' emotional content, and thus they make meaningless this listening comparison.)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/chopin/chopin.mid"&gt;Etude No. 3, but different&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first was better, right? but just how is it different? That is your problem to solve, ladies and gentlemen!&lt;br /&gt;&lt;br /&gt;Especially note the chromatic passage, starting at 1:50.&lt;br /&gt;&lt;br /&gt;How is it different? In other words, what makes it better?&lt;br /&gt;&lt;br /&gt;You will see the answer in a forthcoming post!&lt;br /&gt;&lt;br /&gt;If you still cannot put your finger on it, here is another piece:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/chopin/chpnimpu-mystery.mid"&gt;Impromptu in Gb [major] (Op. 51)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;realized by Robert Finley.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zymbelstern.com/mark/chopin/chpnimpu.mid"&gt;Impromptu in Gb, but different&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Especially note the passage (in Bb minor, I think), from 2:11 through 3:26.&lt;br /&gt;&lt;br /&gt;(Thanks to the &lt;a href="http://www.classicalmidiconnection.com/"&gt;The Classical MIDI Collection&lt;/a&gt; for the original Chopin MIDI's.)&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-4825901640109371861?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/4825901640109371861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/chopin-mystery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/4825901640109371861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/4825901640109371861'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/chopin-mystery.html' title='Chopin mystery'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-2680043701063031180</id><published>2010-02-06T15:01:00.047-05:00</published><updated>2011-07-28T22:28:57.248-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spelling'/><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='accident'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach-Lehman'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='brandenburg'/><category scheme='http://www.blogger.com/atom/ns#' term='counterpoint'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><category scheme='http://www.blogger.com/atom/ns#' term='brandenburg 5'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach'/><title type='text'>Brandenburg 5 in Bach-Lehman tuning</title><content type='html'>I have &lt;a href="http://markdblackwell.blogspot.com/2011/07/brandenburg-5-in-bach-lehman-tuning.html"&gt;re-posted&lt;/a&gt; this, correcting the URL spelling to 'Brandenburg'!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-2680043701063031180?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/2680043701063031180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/brandenberg-5-in-bach-lehman-tuning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2680043701063031180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/2680043701063031180'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/brandenberg-5-in-bach-lehman-tuning.html' title='Brandenburg 5 in Bach-Lehman tuning'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-6261293992915346493</id><published>2010-02-04T21:50:00.007-05:00</published><updated>2011-07-27T10:20:33.845-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach-Lehman'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach'/><title type='text'>Bach tuning vs. equal temperament</title><content type='html'>I am &lt;span style="font-style:italic;"&gt;so&lt;/span&gt; enjoying this beautiful tuning! A commenter said, 'The difference this temperament makes[,] compared with equal temperament[,] is like unstopping your ears.'&lt;br /&gt;&lt;br /&gt;Important especially for the fearful, as its video information says, 'the Bach/Lehman 1722... temperament sounds enough like equal [temperament] to fool just about anybody[.]'&lt;br /&gt;&lt;br /&gt;Further, 'and yet...it brings both more intensity and more relaxation to the music...&lt;br /&gt;&lt;br /&gt;'Equal temperament, by contrast, goes on and on with a relatively bland inoffensiveness...being less than inspiring, and encouraging "run-on"[,] uninflected performances... Why not tune instead with a subtle inequality, and let the intonation itself do part of the interpretive work?':&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/iMy-oTPD5mI&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/iMy-oTPD5mI&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-6261293992915346493?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/6261293992915346493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/bach-vs-equal-temperament.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6261293992915346493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6261293992915346493'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/bach-vs-equal-temperament.html' title='Bach tuning vs. equal temperament'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-7027973638440379599</id><published>2010-02-04T15:06:00.008-05:00</published><updated>2011-07-27T10:41:00.092-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='canon'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='endlessly rising canon'/><category scheme='http://www.blogger.com/atom/ns#' term='counterpoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Bach'/><title type='text'>Bach Endlessly Rising Canon</title><content type='html'>Do you remember Douglas Hofstadter in &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/G%C3%B6del%2C_Escher%2C_Bach"&gt;Gödel, Escher, Bach: an Eternal Golden Braid&lt;/a&gt;&lt;/i&gt; writing that Shepard tones (notes an octave apart which fade, so motion ultimately goes nowhere) could be combined with Bach's 'modulation', or 'endlessly rising', canon (number 5 of The Musical Offering) to avoid its problematic downward octave leaps? On YouTube just now, I discovered in 2008, &lt;a href="http://michaelmonroe.blogspot.com/2007/11/guide.html"&gt;Michael Monroe&lt;/a&gt; &lt;a href="http://mmmusing.blogspot.com/2008/03/canon-loop.html"&gt;created&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://monroemusic.home.comcast.net/modcan.mp3"&gt;just this!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;on MIDI guitars, and it's beautiful: quite smooth with the 'repeat' option on Windows Media player.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-7027973638440379599?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/7027973638440379599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/bach-endlessly-rising-canon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7027973638440379599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/7027973638440379599'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/02/bach-endlessly-rising-canon.html' title='Bach Endlessly Rising Canon'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-8128048402486784307</id><published>2010-01-27T17:03:00.035-05:00</published><updated>2011-11-01T10:44:30.321-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='switch code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='OO'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='refactor'/><title type='text'>Refactoring switch-code to objects, howto</title><content type='html'>Recently, I had an opportunity to suggest a refactoring of some switch-code (case-like statements) into objects. So... if the original source (in Ruby) were:&lt;br /&gt;&lt;br /&gt;case condition_variable&lt;br /&gt;when :condition_one&lt;br /&gt;&amp;nbsp; # This condition requires the most lines to handle, let us say.&lt;br /&gt;&amp;nbsp; &amp;lt;code for handling condition one&amp;gt;&lt;br /&gt;when :condition_two&lt;br /&gt;&amp;nbsp; &amp;lt;code&amp;gt;&lt;br /&gt;when :condition_three&lt;br /&gt;&amp;nbsp; &amp;lt;code&amp;gt;&lt;br /&gt;end #case&lt;br /&gt;&lt;br /&gt;The first increment of refactoring is as follows. See how it cleanly divides and documents the code for handling condition one? (An important part of refactoring-to-patterns is stopping when the ugliness no longer shouts!)&lt;br /&gt;&lt;br /&gt;class ConditionOne&lt;br /&gt;&amp;nbsp; def handle( &amp;lt;parameters for handling condition one&amp;gt; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;code for handling condition one&amp;gt;&lt;br /&gt;&amp;nbsp; end #def&lt;br /&gt;end #class&lt;br /&gt;case condition_variable&lt;br /&gt;when :condition_one&lt;br /&gt;&amp;nbsp; ConditionOne.new().handle( &amp;lt;arguments&amp;gt;)&lt;br /&gt;when :condition_two&lt;br /&gt;&amp;nbsp; &amp;lt;code&amp;gt;&lt;br /&gt;when :condition_three&lt;br /&gt;&amp;nbsp; &amp;lt;code&amp;gt;&lt;br /&gt;end #case&lt;br /&gt;&lt;br /&gt;If later a need is felt to refactor conditions two and three, another increment of refactoring is:&lt;br /&gt;&lt;br /&gt;condition = case condition_variable&lt;br /&gt;when :condition_one&lt;br /&gt;&amp;nbsp; ConditionOne.new( &amp;lt;arguments for condition one&amp;gt;)&lt;br /&gt;when :condition_two&lt;br /&gt;&amp;nbsp; ConditionTwo.new( &amp;lt;arguments for condition two&amp;gt;)&lt;br /&gt;when :condition_three&lt;br /&gt;&amp;nbsp; ConditionThree.new( &amp;lt;arguments for condition three&amp;gt;)&lt;br /&gt;end #case&lt;br /&gt;condition.handle()&lt;br /&gt;&lt;br /&gt;Some further refactoring leads to:&lt;br /&gt;&lt;br /&gt;i = [ :condition_one,&lt;br /&gt;&amp;nbsp; &amp;nbsp; :condition_two,&lt;br /&gt;&amp;nbsp; &amp;nbsp; :condition_three].&lt;br /&gt;&amp;nbsp; &amp;nbsp; index( condition_variable)&lt;br /&gt;arguments = [ # For condition...&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;arguments&amp;gt;], # one.&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;arguments&amp;gt;], # two.&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;arguments&amp;gt;]] # three.&lt;br /&gt;condition = [&lt;br /&gt;&amp;nbsp; &amp;nbsp; ConditionOne,&lt;br /&gt;&amp;nbsp; &amp;nbsp; ConditionTwo,&lt;br /&gt;&amp;nbsp; &amp;nbsp; ConditionThree].at( i).new( arguments.at( i))&lt;br /&gt;condition.handle()&lt;br /&gt;&lt;br /&gt;If a need is felt, further refactoring could subclass a class called, Condition.&lt;br /&gt;&lt;br /&gt;Actually, ConditionOne and its siblings want meaningful, specific names. See how this solves the problem of the code being too procedural?&lt;br /&gt;&lt;br /&gt;Sources &amp; further information:&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?AnalysisIsRefactoring"&gt;AnalysisIsRefactoring&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?CaseStatementsConsideredHarmful"&gt;CaseStatementsConsideredHarmful&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?HistoryOfRefactoring"&gt;HistoryOfRefactoring&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?PolymorphismVsSelectionIdiom"&gt;PolymorphismVsSelectionIdiom&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?RefactoringIsaRequirement"&gt;RefactoringIsaRequirement&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?RefactoringToPatterns"&gt;RefactoringToPatterns&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?RefactorLowHangingFruit"&gt;RefactorLowHangingFruit&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?RefactorMercilessly"&gt;RefactorMercilessly&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?SafelyRefactoringLegacyCode"&gt;SafelyRefactoringLegacyCode&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?SwitchStatement"&gt;SwitchStatement&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?SwitchStatementsSmell"&gt;SwitchStatementsSmell&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?WhatIsaFactor"&gt;WhatIsaFactor&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?WhyDidYouRefactorThat"&gt;WhyDidYouRefactorThat&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?WhyNotEnoughRefactoringHappens"&gt;WhyNotEnoughRefactoringHappens&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-8128048402486784307?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/8128048402486784307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/01/refactoring-switch-to-subclasses.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/8128048402486784307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/8128048402486784307'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/01/refactoring-switch-to-subclasses.html' title='Refactoring switch-code to objects, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-8320791021121514669</id><published>2010-01-14T02:25:00.014-05:00</published><updated>2011-07-27T10:47:11.321-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby shoes'/><category scheme='http://www.blogger.com/atom/ns#' term='intuitive'/><category scheme='http://www.blogger.com/atom/ns#' term='art and code symposium'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='drawing'/><category scheme='http://www.blogger.com/atom/ns#' term='legacy'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='_why'/><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='radio'/><category scheme='http://www.blogger.com/atom/ns#' term='_why the lucky stiff'/><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><category scheme='http://www.blogger.com/atom/ns#' term='hackety hack'/><title type='text'>_why the lucky stiff</title><content type='html'>Suddenly I am struck with sadness for our &lt;a href="http://www.rubyinside.com/why-the-lucky-stiff-is-missing-2278.html"&gt;loss&lt;/a&gt; of the highly creative _why the lucky stiff. (I discovered this while researching Ruby Shoes.) Not just in programming, but creative also in drawing and prose.&lt;br /&gt;&lt;br /&gt;There is more &lt;a href="http://ejohn.org/blog/eulogy-to-_why/"&gt;here&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff"&gt;here&lt;/a&gt; and &lt;a href="http://news.ycombinator.com/item?id=773108"&gt;here&lt;/a&gt;, and a cute &lt;a href="http://members.tripod.com/soccer_riot/famous.htm"&gt;sample&lt;/a&gt; of his early writing. Also, I found a _why-related, &lt;a href="http://www.rubyinside.com/why-the-lucky-stiff-links-2333.html"&gt;compilation blog post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;On last.fm, a &lt;a href="http://www.last.fm/music/Why+the+Lucky+Stiff"&gt;radio station&lt;/a&gt; in his name contains some strange and intelligent things.&lt;br /&gt;&lt;br /&gt;His June, 2009 talk on &lt;a href="http://vimeo.com/5047563"&gt;"Hackety Hack"&lt;/a&gt; at an ART &amp;&amp; CODE Symposium shows his general aim of convincing others (besides his own creative work) to expand the learning opportunities available to children for programming. Perhaps this was the original basis for his pseudonym? Perhaps the reason for his disappearance was promotion: to generate large-scale publicity for this worthy cause.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2010 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-8320791021121514669?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/8320791021121514669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2010/01/why-lucky-stiff.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/8320791021121514669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/8320791021121514669'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2010/01/why-lucky-stiff.html' title='_why the lucky stiff'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-1722091414470113754</id><published>2009-09-08T14:27:00.015-04:00</published><updated>2011-11-01T10:44:47.292-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DOS'/><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='DOSBox'/><category scheme='http://www.blogger.com/atom/ns#' term='emulator'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='legacy'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Old DOS games in Linux using DOSBox, howto</title><content type='html'>My friend, &lt;a href="http://zymbelstern.blogspot.com/"&gt;M&lt;/a&gt; loves old computer games, and she loves running DOS games in her Windows XP system using the emulator, &lt;a href="http://www.dosbox.com/"&gt;DOSBox&lt;/a&gt;. At a party with &lt;a href="http://postmodernquaker.wordpress.com/"&gt;friends&lt;/a&gt;, I was inspired to remark that possibly these games could be played on a Linux system. Specifically, I wondered whether DOS games could be run on UNIX systems using DOSBox. Subsequently, I discovered Debian's package, '&lt;a href="http://packages.debian.org/search?suite=all&amp;searchon=names&amp;keywords=dosbox"&gt;dosbox&lt;/a&gt;'. Being an x86 emulator, it is available for many architectures beside i386.&lt;br /&gt;&lt;br /&gt;I installed the lenny package, and I was pleased to find indeed that it ran well! Caveat: I do not have sound on my system at the moment, so I did not test that part. Following the advice of my friend, these are the steps I followed:&lt;br /&gt;&lt;br /&gt;o Make a directory for all your DOSBox games:&lt;br /&gt;&lt;br /&gt;mkdir ~/dos-box&lt;br /&gt;&lt;br /&gt;o Download a DOS game. My friend recommended the site, &lt;a href="http://www.classicdosgames.com/"&gt;Classic DOS games&lt;/a&gt;. (I downloaded &lt;a href="http://www.classicdosgames.com/genre/platform.html"&gt;Crystal Caves&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;o If the download is a zip file, decompress it (with 'unzip') into a subdirectory of dos-box.&lt;br /&gt;&lt;br /&gt;o Start DOSBox from the Start menu or from an X terminal (with 'dosbox').&lt;br /&gt;&lt;br /&gt;The following steps take place inside the DOSBox window, and are not UNIX commands:&lt;br /&gt;&lt;br /&gt;o As DOSBox's C: drive, select your DOSBox directory:&lt;br /&gt;&lt;br /&gt;mount c: ~/dos-box&lt;br /&gt;c:&lt;br /&gt;&lt;br /&gt;o Navigate (with 'cd') into the game's subdirectory.&lt;br /&gt;&lt;br /&gt;o Run the game's installation program, if it has one.&lt;br /&gt;&lt;br /&gt;o Follow the games's README instructions to run the game within DOSBox.&lt;br /&gt;&lt;br /&gt;o Enjoy!&lt;br /&gt;&lt;br /&gt;Copyright (c) 2009 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-1722091414470113754?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/1722091414470113754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2009/09/old-dos-games-in-linux-using-emulator.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/1722091414470113754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/1722091414470113754'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2009/09/old-dos-games-in-linux-using-emulator.html' title='Old DOS games in Linux using DOSBox, howto'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-1341470402858720217</id><published>2009-08-25T21:13:00.004-04:00</published><updated>2011-03-11T21:17:54.145-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='religion'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Religion book notes</title><content type='html'>For seekers today after religious solutions, a few relevant book notes: 'In most Western countries, people no longer like to speak much of "religion" (except at the difficult or symbolic moments of life) ...But the fashionable word is "spirituality," which has come to refer to a countless number of different realities, from relationship with God to simply the meaning one may give to life or to "things," including retreat from the world, the search for inner peace, overcoming the traps of the consumerist society, or even diving voluntarily and deliberately into the world of emotions. The Jewish or Christian origins have faded or simply disappeared and the idea of spirituality now covers almost everything imaginable that could "give a breath of life" or "give meaning."' -p.117&lt;br /&gt;&lt;br /&gt;'At the heart of the West, whose rhythms of life and myriad opportunities for diversion may unsettle even the strongest determination, practice may become a mechanical ritual, lifeless and without spirituality. Memory repeats the invocations and prayers, the lips say the words, the body goes through the motions, the hand gives, but the soul is absent. The ritual is not enough: life must be liberated.' -p.121&lt;br /&gt;&lt;br /&gt;'[Religious] education['s] first objective is the education of the heart, which links the consciousness with God and should awaken us to an awareness of our responsibilities toward ourselves, our bodies, our relatives, our communities, and the human family at large.' -p.129&lt;br /&gt;&lt;br /&gt;'It is impossible to flourish independently without having the spiritual and intellectual means to discover who one is, where one lives, and how to plan one's way of faithfulness. [A religious] message ...is not adequately served by an intellectual hodgepodge ...To educate is to provide the tools that will enable individuals to grow into independence' -p.129&lt;br /&gt;&lt;br /&gt;'A scattering of ...teachings, verses learned by heart, and values idealistically passed on do not necessarily forge a personality whose faith is deep, whose consciousness is alert, and whose mind is active and critical.' -p.132&lt;br /&gt;&lt;br /&gt;'[S]ome schools continue to serve up an education that pushes children toward the development of two contradictory personalities --one within a school that tries to provide a happy environment and where [religious] teaching and behavior have been inculcated, and the other outside school, where they end up getting lost without knowing how to use ethical references to establish their own ethical guideposts because they have not really been prepared to face life in society and to interact with others in it. Having been given a solid education in an artificial environment, the students are deeply fragile in real life: how many young people live torn between the two, how many feel "bad" or "guilty" because, having received so much knowledge at school, they feel unworthy because of not knowing how to live an integrated everyday life? Whose fault is it? They have often been instructed in the ideal, but they feel so ill educated and ill equipped in the real world.' -p.132&lt;br /&gt;&lt;br /&gt;'[T]oo many [religious people] behave rigidly and self-consciously and hide behind copying old models ...to prove their faithfulness to principles. But ...there is a great difference between historical models and universal principles, and today everything is proving that the formalistic imitation of models [from] an age other than one's own is in fact the betrayal of principles. In the area of education, this has serious consequences.' -p.133&lt;br /&gt;&lt;br /&gt;'[A] complete education program ...is not only a matter ...of passing on a knowledge of the scriptural sources that will illumine the heart with faith and build the mind for an understanding of self, humankind, and creation, but it also concerns providing a very deep knowledge of the cultural and social environment, of history and human beings; and, more broadly, mastering the general disciplines and sciences that will give [religious people] the means of living at home in their environment. These are the necessary prerequisites for harmony among faith, morality, reason, and life in the world.' -p.133&lt;br /&gt;&lt;br /&gt;'What is central ...is to understand the crucial importance of giving a sense of worth: to educate is to give all persons a sense both of their own value and of the value of what they do.' -p.137&lt;br /&gt;&lt;br /&gt;The quotations (not for Muslims only) are from &lt;a href="http://www.amazon.com/exec/obidos/ASIN/019517111X"&gt;&lt;em&gt;Western Muslims and the Future of Islam&lt;/em&gt;&lt;/a&gt;, Tariq Ramadan, 2004.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2009 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-1341470402858720217?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/1341470402858720217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2009/08/religion-book-notes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/1341470402858720217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/1341470402858720217'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2009/08/religion-book-notes.html' title='Religion book notes'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-8894537997316429133</id><published>2009-08-25T09:26:00.005-04:00</published><updated>2011-07-27T09:48:30.251-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='harmonic analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='harmony'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>All chords</title><content type='html'>Recently, I wrote a computer program to generate all the 2048 possible musical chords (from any given root after collapsing transpositions) in any twelve-note, equal-tempered octave system. Each chord's notes transpose into fair consonance by excluding major and minor seconds, minor ninths, and tritones. The above chords completely cover the inversions of the 351 chords, available after collapsing transpositions and inversions. For more background on why 351, see Wikipedia, &lt;a href="http://en.wikipedia.org/wiki/Necklace_(combinatorics)"&gt;Necklace (combinatorics)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I provide &lt;a href="http://www.zymbelstern.com/mark/2009/06/24/thirdsout-41-space.txt"&gt;details&lt;/a&gt; on all the chord necklaces and their inversions, including note names. A readable yet concise and rigorous scheme (that I created) was followed to provide a chord name for each inversion. A goal was matching common practice as much as possible. This provides a useful, searchable inversion chart. One might read a chord's description and play it manually, for instance on a piano.&lt;br /&gt;&lt;br /&gt;A provided &lt;a href="http://www.zymbelstern.com/mark/2009/07/14/thirdsout-descend-52.mid"&gt;MIDI file&lt;/a&gt; of these chords is more consonant when played on a capable electronic piano than by the usual FM (frequency modulation) synthesis: than for instance on a SoundBlaster computer sound card. RealPlayer shows elapsed time; for the QuickTime player, General MIDI synthesis (which may sound better, depending on your sound card) is available at least on PC's by selecting, 'Plug-in Settings/Audio/Default Music Synthesizer.' For listenability, the (MIDI) chord roots are made to descend, alternately by major and minor thirds.&lt;br /&gt;&lt;br /&gt;This is better than all the lists previously available of &lt;a href="http://en.wikipedia.org/wiki/Pitch_class"&gt;pitch-class&lt;/a&gt; (PC) sets because the process of finding and sorting normal forms is more computer-oriented: it is simply the largest binary number of all the (necklace) rotations. Along with this way of numbering notes, leftward from G, it collects similar-sounding PC sets (especially in their '0-inversion' chords) because this collation first looks at sevenths (F# and F) rather than seconds (Ab and A).&lt;br /&gt;&lt;br /&gt;Copyright (c) 2009 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-8894537997316429133?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/8894537997316429133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2009/08/all-chords.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/8894537997316429133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/8894537997316429133'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2009/08/all-chords.html' title='All chords'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-6597160473824168234</id><published>2009-04-15T18:42:00.015-04:00</published><updated>2011-07-27T10:50:19.671-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rare'/><category scheme='http://www.blogger.com/atom/ns#' term='tonal music'/><category scheme='http://www.blogger.com/atom/ns#' term='chamber music'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='select'/><category scheme='http://www.blogger.com/atom/ns#' term='sheet music'/><title type='text'>Rare, select chamber music (sheet music and MP3)</title><content type='html'>Here are some rare, excellent, beautiful, intelligent and select chamber music pieces of famous and once-famous old composers, culled by listening carefully to the sound samples on &lt;a href="http://www.editionsilvertrust.com"&gt;Edition Silvertrust&lt;/a&gt;'s website. They also publish &lt;a href="http://www.cobbettassociation.org/chamber-music-journal.htm"&gt;The Chamber Music Journal&lt;/a&gt;. I audited their full catalog of sheet music in two categories: quite a number of pieces! (I developed the list for some of my acquaintances with whom I play music, and have clarified the titles, somewhat. Originally, it may have been a recommendation from Delicious.com which led me to Edition Silvertrust, but I am not sure.)&lt;br /&gt;&lt;br /&gt;All the best, excellent pieces, and only the best ones, are on this list. This is only my educated opinion; and yet, I believe you should enjoy them if you heard them! But merely let me mention my extensive classical music background. I invite you to judge for yourself!&lt;br /&gt;&lt;br /&gt;========================&lt;br /&gt;String and clarinet quintets:&lt;br /&gt;&lt;br /&gt;Joseph Eybler (1765-1846), &lt;a href="http://www.editionsilvertrust.com/eybler-string-quintet.htm"&gt;String Quintet for Violin &amp; 2 Violas (or 2 Violins &amp; Viola), Cello &amp; Bass in D Major, Op.6 No.1&lt;/a&gt; (1801)&lt;br /&gt;&lt;br /&gt;Friedrich Dotzauer (1783-1860), &lt;a href="http://www.editionsilvertrust.com/dotzauer-string-quintet.htm"&gt;String Quintet for 2 Violins, Viola &amp; 2 Cellos in d minor, Op.134&lt;/a&gt; (1835)&lt;br /&gt;&lt;br /&gt;This one is operatic:&lt;br /&gt;Luigi Cherubini (1760-1842), &lt;a href="http://www.editionsilvertrust.com/cherubini-quintet.htm"&gt;String Quintet for 2 Violins, Viola &amp; 2 Cellos in e minor&lt;/a&gt; (1837)&lt;br /&gt;&lt;br /&gt;Johan Svendsen (1840-1911), &lt;a href="http://www.editionsilvertrust.com/svendsen-string-quintet-op5.htm"&gt;String Quintet in C Major, Op.5&lt;/a&gt; (1867)&lt;br /&gt;&lt;br /&gt;Charles Villiers Stanford (1852-1924), &lt;a href="http://www.editionsilvertrust.com/stanford-string-quintet.htm"&gt;String Quintet No.1 in F Major, Op.85&lt;/a&gt; (1903)&lt;br /&gt;&lt;br /&gt;Alexander Krein (1883-1951), &lt;a href="http://www.editionsilvertrust.com/krein-three-sketches-on-hebrew-themes.htm"&gt;Three Sketches on Hebrew Themes for Clarinet Quintet Op.12&lt;/a&gt; (1914)&lt;br /&gt;&lt;br /&gt;========================&lt;br /&gt;Piano quintets:&lt;br /&gt;&lt;br /&gt;Camille Saint-Saëns (1835-1921), &lt;a href="http://www.editionsilvertrust.com/saint-saens-piano-quintet-op14.htm"&gt;Piano Quintet in A Major, Op.14&lt;/a&gt; (1853)&lt;br /&gt;&lt;br /&gt;Elfrida Andrée (1841-1929), &lt;a href="http://www.editionsilvertrust.com/andree-piano-quintet.htm"&gt;Piano Quintet in e minor&lt;/a&gt; (1865)&lt;br /&gt;&lt;br /&gt;Giovanni Sgambati (1841-1914), &lt;a href="http://www.editionsilvertrust.com/sgambati-piano-quintet-1.htm"&gt;Piano Quintet No.1 in f minor, Op.4&lt;/a&gt; (1866)&lt;br /&gt;&lt;br /&gt;Friedrich Kiel (1821-1885), &lt;a href="http://www.editionsilvertrust.com/kiel-piano-quintet-1.htm"&gt;Piano Quintet No.1 in A Major, Op.75&lt;/a&gt; (1873-4)&lt;br /&gt;&lt;br /&gt;Hermann Goetz (1840-1876), &lt;a href="http://www.editionsilvertrust.com/goetz-piano-quintet.htm"&gt;Quintet for Violin, Viola, Cello, Bass &amp; Piano in c minor, Op.16&lt;/a&gt; (1874)&lt;br /&gt;&lt;br /&gt;Friedrich Gernsheim (1839-1916), &lt;a href="http://www.editionsilvertrust.com/gernsheim-piano-quintet-1.htm"&gt;Piano Quintet No.1 in d minor, Op.35&lt;/a&gt; (1877)&lt;br /&gt;&lt;br /&gt;Zdenek Fibich (1850-1950), &lt;a href="http://www.editionsilvertrust.com/fibich-piano-quintet.htm"&gt;Quintet for Violin, Clarinet &amp; Horn (or 2 Violins &amp; Viola), Cello &amp; Piano in D Major, Op.42&lt;/a&gt; (1893)&lt;br /&gt;&lt;br /&gt;Carl Frühling (1868-1937), &lt;a href="http://www.editionsilvertrust.com/fruhling-piano-quintet-Op.30.htm"&gt;Piano Quintet in f sharp minor, Op.30&lt;/a&gt; (1894)&lt;br /&gt;&lt;br /&gt;Salomon Jadassohn (1831-1902), &lt;a href="http://www.editionsilvertrust.com/jadassohn-piano-quintet-3.htm"&gt;Piano Quintet No.3 in g minor, Op.126&lt;/a&gt; (1895)&lt;br /&gt;&lt;br /&gt;Ermanno Wolf-Ferrari (1876-1948), &lt;a href="http://www.editionsilvertrust.com/wolf-ferrari-piano-quintet.htm"&gt;Piano Quintet in D flat Major, Op.6&lt;/a&gt; (1900)&lt;br /&gt;&lt;br /&gt;Wilhelm Berger (1861-1911), &lt;a href="http://www.editionsilvertrust.com/berger-piano-quintet.htm"&gt;Piano Quintet in f minor, Op.95&lt;/a&gt; (1904)&lt;br /&gt;&lt;br /&gt;Théodore Dubois (1837-1924), &lt;a href="http://www.editionsilvertrust.com/dubois-piano-quintet.htm"&gt;Quintet for Oboe (or Clarinet or Violin), Violin, Viola, Cello &amp; Piano in F Major&lt;/a&gt; (1904-5)&lt;br /&gt;&lt;br /&gt;Giuseppe Martucci (1856-1909), &lt;a href="http://www.editionsilvertrust.com/martucci-piano-quintet.htm"&gt;Piano Quintet in C Major, Op.45&lt;/a&gt; (year not found)&lt;br /&gt;&lt;br /&gt;Sergei Taneyev (1856-1915), &lt;a href="http://www.editionsilvertrust.com/taneyev-sergei-piano-quintet-Op.30.htm"&gt;Piano Quintet in g minor, Op.30&lt;/a&gt; (1910-11)&lt;br /&gt;&lt;br /&gt;========================&lt;br /&gt;Piano sextets:&lt;br /&gt;&lt;br /&gt;This one is not hard for piano (unlike the usual Glinka), because he intended his Italian doctor's daughter to play it:&lt;br /&gt;Mikhail Glinka (1804-57), &lt;a href="http://www.editionsilvertrust.com/glinka-sextet.htm"&gt;Grand Sextet for Piano, String Quartet &amp; Bass in E flat Major&lt;/a&gt; (1832)&lt;br /&gt;&lt;br /&gt;William Sterndale Bennett (1816-1875), &lt;a href="http://www.editionsilvertrust.com/bennett-sextet.htm"&gt;Sextet for Cello &amp; Bass (or 2 Cellos), 2 Violins, Viola &amp; Piano in f# minor, Op.8&lt;/a&gt; (1838)&lt;br /&gt;&lt;br /&gt;This one has fewer notes than usual for strings:&lt;br /&gt;Ludwig Thuille (1861-1907), &lt;a href="http://www.editionsilvertrust.com/thuille-sextet.htm"&gt;Sextet for Flute, Oboe, Clarinet, Horn, Bassoon &amp; Piano in B flat Major, Op.6&lt;/a&gt; (1888)&lt;br /&gt;&lt;br /&gt;Paul Juon (1872-1940), &lt;a href="http://www.editionsilvertrust.com/juon-divertimento.htm"&gt;Divertimento (Piano Sextet) for Flute, Oboe, Clarinet, Horn, Bassoon &amp; Piano, Op.51&lt;/a&gt; (1913)&lt;br /&gt;&lt;br /&gt;Copyright (c) 2009 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-6597160473824168234?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/6597160473824168234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2009/04/rare-select-chamber-music-sheet-music.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6597160473824168234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6597160473824168234'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2009/04/rare-select-chamber-music-sheet-music.html' title='Rare, select chamber music (sheet music and MP3)'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-3166000980794771782</id><published>2009-04-15T14:04:00.016-04:00</published><updated>2011-07-27T10:53:07.365-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='speech'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='compress'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='audio'/><category scheme='http://www.blogger.com/atom/ns#' term='bit rate'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>MP3 bit rates for various occasions</title><content type='html'>After listening for a couple of days carefully to MP3's made from a WAV file, which I recorded of a brass, choir and organ rehearsal, I came up with some rules of thumb about bit rates. I concluded that the following minimums are indistinguishable from the WAV file in capturing the music of their various types. They are expressed in the the usual thousands of bits per second, Kbps. iTunes, by the way, uses 128:&lt;br /&gt;&lt;br /&gt;Speech (without too many resulting artifacts) needs 56.&lt;br /&gt;(Hymns with) descant need 64.&lt;br /&gt;Brass instruments reduce the needed rate for choirs to 64.&lt;br /&gt;Choir a capella (they are rather pure tones, or maybe it is the harmony) needs 80.&lt;br /&gt;A single cantor (alto) needs 128.&lt;br /&gt;Propers (increased because the choir response pitches are slightly clustered) need 160.&lt;br /&gt;Hymns (depending on the organ stops) need 64 to 192.&lt;br /&gt;Organ (because of reed and string stops) needs 192.&lt;br /&gt;&lt;br /&gt;Copyright (c) 2009 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-3166000980794771782?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/3166000980794771782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2009/04/mp3-bitrates-for-various-occasions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3166000980794771782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/3166000980794771782'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2009/04/mp3-bitrates-for-various-occasions.html' title='MP3 bit rates for various occasions'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-6982859851013082710</id><published>2009-02-24T12:37:00.007-05:00</published><updated>2011-07-27T11:00:48.420-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compose'/><category scheme='http://www.blogger.com/atom/ns#' term='notation'/><category scheme='http://www.blogger.com/atom/ns#' term='harmonic analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='harmony'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='pitch class set'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>All-chords analysis</title><content type='html'>Interestingly, by the way, the set of all chords formable from the twelve Western tones, numbering almost 4096 (two to the twelfth power), collapses with the following method easily and automatically to the rather small size of 351 chords (see below).&lt;br /&gt;&lt;br /&gt;Symbol key:&lt;br /&gt;#: sharp&lt;br /&gt;( ): alternative&lt;br /&gt;,: and&lt;br /&gt;-: visual spacing&lt;br /&gt;=: same chord (collapsing transpositions and inversions)&lt;br /&gt;aug: augmented&lt;br /&gt;b: flat&lt;br /&gt;d: diminished&lt;br /&gt;d6: diminished, sixth chord&lt;br /&gt;I: major chord&lt;br /&gt;i: minor or diminished chord&lt;br /&gt;s: suspension&lt;br /&gt;x: without&lt;br /&gt;&lt;br /&gt;Symbols for intervals from the root (in the list always G) in chord names, but not in normalized notation:&lt;br /&gt;1,2,3,(4,5,6,7),9,11,13: unison, second, third, (fourth, fifth, sixth, seventh), ninth, eleventh, thirteenth&lt;br /&gt;maj, min: major, minor&lt;br /&gt;&lt;br /&gt;The default (i.e., without 'maj' or 'min') is the interval from G as found in the (blank) key signature of C major, because when C is the tonic, G chords are very prevalent. Thus sometimes we might need 'min2', 'min6', 'maj7', 'min9', 'maj11', or 'min13'. Minor thirds and augmented fourths (or diminished fifths) are respectively written as (Roman numerals in) lower case as well as 'd' for 'diminished'. Often ninths and elevenths are written 's2', 'smin2' or 's4'.&lt;br /&gt;&lt;br /&gt;To name chords without suspensions:&lt;br /&gt;Each chord has a root; otherwise, it can then be written as another chord. Here are the options for each variable, which is an interval upward from the root:&lt;br /&gt;2 min2&lt;br /&gt;3 min3 x3 null&lt;br /&gt;4 maj4&lt;br /&gt;5 min5 x5 null&lt;br /&gt;6 min6&lt;br /&gt;7 maj7 x7 null&lt;br /&gt;9 min9 x9 null&lt;br /&gt;10 min10&lt;br /&gt;11 maj11 x11 null&lt;br /&gt;12 min12&lt;br /&gt;13 min13&lt;br /&gt;&lt;br /&gt;Above, '-' indicates that the apparent option is unnecessary. Also, some variable options are implied: for any variable, N greater than the highest mentioned, 'null' means 'xN', otherwise it means 'N'. E.g., the name, i9 implies 7, but also x11.&lt;br /&gt;What about diminished chords? This is answered by min5, but what about id6? It is min3-min5-x7-x9-x11-13 or id13x7,9,11.&lt;br /&gt;It is simpler to say that all chords are 13th chords with various notes x'd out. Then, we would need x13 as well.&lt;br /&gt;The computer program might display only the normalized notation.&lt;br /&gt;&lt;br /&gt;For each root, the total number of combinations (outside of silence), the number of unique chord names, would be 3x3x3x3x2x3 (?) = 2 x 3^5 = 486. However, many of these are duplicates of chords with different roots.&lt;br /&gt;&lt;br /&gt;An attempt has been made to select the chord names of the more beautiful -sounding inversions. For chord names with suspensions, to sound beautiful, some suspensions are in the bass, e.g., 0,1,7 - idx3s5.&lt;br /&gt;&lt;br /&gt;Here are the number of chords for different numbers of tones evenly distributed in the octave:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pcy4JjaAYdE/SYesOWVL15I/AAAAAAAAAA0/8jG7VtS1Qvo/s1600-h/chord-space-size.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 274px;" src="http://2.bp.blogspot.com/_pcy4JjaAYdE/SYesOWVL15I/AAAAAAAAAA0/8jG7VtS1Qvo/s400/chord-space-size.JPG" alt="" id="BLOGGER_PHOTO_ID_5298392849137260434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;note-space-size chord-space-size&lt;br /&gt;1 1&lt;br /&gt;2 2&lt;br /&gt;3 3&lt;br /&gt;4 5&lt;br /&gt;5 7&lt;br /&gt;6 13&lt;br /&gt;7 19&lt;br /&gt;8 35&lt;br /&gt;9 59&lt;br /&gt;10 107&lt;br /&gt;11 187&lt;br /&gt;12 351&lt;br /&gt;13 631&lt;br /&gt;14 1181&lt;br /&gt;15 2191&lt;br /&gt;16 4115&lt;br /&gt;17 7711&lt;br /&gt;18 14601&lt;br /&gt;19 27595&lt;br /&gt;20 52487&lt;br /&gt;&lt;br /&gt;Here are the 351 transposition- and inversion -collapsed chords formable from the twelve Western tones:&lt;br /&gt;&lt;br /&gt;The total number of whole-tone scale chords is 13; the Agnus Dei has 7.&lt;br /&gt;&lt;br /&gt;Use maj11 instead of aug11; dim11 is okay; min5 instead of dim5. Change I...smin3 (except aug) to i...s3. Rooting all numbers covers pedal tones. Change all 'good's' into chords. Use 'Id' instead of 'idx3s3'?&lt;br /&gt;M=Agnus Dei chord, P=polytonal, W=whole tone scale chord, H=harmonic series, S=symmetrical&lt;br /&gt;normalized-notation - standard-name [(nonstandard-names)] - spelling [(nonstandard-spelling)] [ - (good: good-sounding spelling)]&lt;br /&gt;0 - ix3,5 - M (H) - (WS)&lt;br /&gt;0,6 - idx3 - M - (WS)&lt;br /&gt;0,5 - ix3 - M (H)&lt;br /&gt;0,4 - Ix5 - M (H) - (W)&lt;br /&gt;0,4,8 - 0-Iaug (=0-G B D#) - (WS good: G D# B)&lt;br /&gt;0,3 - ix5 - M (H)&lt;br /&gt;0,3,8 - i - M&lt;br /&gt;0,3,7 - I - M&lt;br /&gt;0,3,6 - id - M&lt;br /&gt;0,3,6,9 - id6 - M - (S)&lt;br /&gt;0,2 - i7x3,5 - M - (W)&lt;br /&gt;0,2,9 - i7x5 - M&lt;br /&gt;0,2,8 - I7x5 - M - (W)&lt;br /&gt;0,2,7 - ix3s4 - M&lt;br /&gt;0,2,6 - id7x3 - M - (W)&lt;br /&gt;0,2,6,9 - id7 - M&lt;br /&gt;0,2,6,8 - 0-Imaj11x5,9 2-idmin13x3,7,11 (=0-G B F C# =2-G Db 0-A Eb) - (WS good: G Eb A Db)&lt;br /&gt;0,2,5 - i7x3 - M&lt;br /&gt;0,2,5,9 - i7 - M&lt;br /&gt;0,2,5,8 - I7 - M (H)&lt;br /&gt;0,2,5,7 - i7x3s4 - M&lt;br /&gt;0,2,4 - 0-iaug7x3 2-i9x3,5 4-I9x5,7 (=0-G D# F =2-G F 0-A =4-G 0-B A) - (W good: F G D#)&lt;br /&gt;0,2,4,9 - I9x7 - M&lt;br /&gt;0,2,4,8 - Iaug7 - M - (W)&lt;br /&gt;0,2,4,7 - 0-i7min13x3,5,9 2-i9x3 4-I13x5,7,11 7-i11x7,9 (=0-G F C Eb =2-G D F 0-A =4-G 0-B A E =7-G Bb 0-D C)&lt;br /&gt;0,2,4,7,9 - 0-imin13x5,9 2-i11x3 4-I13x7,11 4-I96x7 7-i11x9 9-i13x3,7 (=0-G Bb F C Eb =2-G D F 0-A C =4-G 0-B D A E =4-G 0-B D E A =7-G Bb 0-D F C =9-G D A C 0-E)&lt;br /&gt;0,2,4,6 - 0-idmin13x3,9,11 2-imin13x3,5,11 4-I9x5 6-Imaj11x5,7 (=0-G Db F Eb =2-G F 0-A Eb =4-G 0-B F A =6-G B A 0-C#) - (W good: G A B F)&lt;br /&gt;0,2,4,6,9 - 0-idmin13x9,11 2-imin13x3,5 4-I9 6-Imaj1113x5,7 9-i13x7,9 (=0-G Bb Db F Eb =2-G F 0-A C Eb =4-G 0-B D F A =6-G B A C# E =9-G Bb D C 0-E)&lt;br /&gt;0,2,4,6,8 - 0-idmin13x3,9,11s3 2-idmin13x3,11 4-Iaug9 6-Imaj11x5 8-idmin13x3,7,11s3 (=0-G B Db F Eb =2-G Db F A Eb =4-G 0-B D# F A =6-G B F A C# =8-G B Db A 0-Eb)&lt;br /&gt;0,2,4,6,8,10 - 0-Iaug7maj11 (=0-G B D# F A C#) - (WS 'full whole tone scale' good: G B D# A C# F)&lt;br /&gt;0,1 - 0-imaj7x3,5 1-imin9x3,5,7 (=0-G F# =1-G 0-Ab)&lt;br /&gt;0,1,10 - 0-imaj79x3,5 1-imin9x5,7 10-id67x3,5 (=0-G F# A =1-G Bb 0-Ab =10-G E 0-F) - (good: F G E)&lt;br /&gt;0,1,9 - 0-imaj7x5 1-Imin9x5,7 9-iaug13x3,7,9,11 (=0-G Bb F# =1-G B 0-Ab =9-G D# 0-E) - (good: G F# Bb)&lt;br /&gt;0,1,8 - Imaj7x5 - M&lt;br /&gt;0,1,8,10 - Imaj79x5 - M&lt;br /&gt;0,1,7 - idx3s5 - M&lt;br /&gt;0,1,7,10 - 0-imaj711x3,5 1-idmin9x7 7-imaj1113x3,7,9 10-id67x5 (=0-G F# A C =1-G Bb Db 0-Ab =7-G 0-D C# E =10-G Bb E 0-F) - (good: G E Bb F, F G Bb E, G Bb F E, F E Bb G)&lt;br /&gt;0,1,7,9 - 0-imaj7x5s4 0-imaj711x5,9 1-idmin9x3,7s3 7-imaj11x3,9 9-iaug13x3,7,11 (=0-G Bb C F# =0-G Bb F# C =1-G B Db 0-Ab =7-G 0-D F C# =9-G D# A 0-E) - (good: G C Bb F#)&lt;br /&gt;0,1,6 - 0-idmaj7x3 1-imin9x3,7 6-id11x3,7,9 (=0-G Db F# =1-G D 0-Ab =6-G 0-Db C) - (good: G F# Db)&lt;br /&gt;0,1,6,10 - imin9x7 - M&lt;br /&gt;0,1,6,9 - 0-idmaj7 1-Imin9x7 6-id611x3,7,9 9-id6min13x5,7,9,11 (=0-G Bb Db F# =1-G B D 0-Ab =6-G 0-Db E C =9-G Bb E Eb) - (good: G F# Bb Db)&lt;br /&gt;0,1,6,8 - 0-Imaj7maj11x5,9 1-imin911x3,7 6-id11x3,9 8-imin13x3,7,11 (=0-G B F# C# =1-G D 0-Ab C =6-G 0-Db F C =8-G D A 0-Eb) - (good: G C# F# B, F# B G C#, F# B C# G)&lt;br /&gt;0,1,6,8,10 - 0-Imaj7maj11x5 1-imin911x7 6-idmin13x3,9 8-imin13x3,11 10-I13x5,11 (=0-G B F# A C# =1-G Bb D 0-Ab C =6-G 0-Db F C Eb =8-G D F A 0-Eb =10-G B 0-F A E) - (good: G Ab Bb C D)&lt;br /&gt;0,1,6,7 - 0-idmaj711x3,9 1-imin9maj11x3,7 1-idmin9x3,7s5 (=0-G Db F# C =1-G D 0-Ab C# =1-G Db D 0-Ab) - (S good: C Db F# G, F# Db C G)&lt;br /&gt;0,1,5 - 0-imaj7x3 1-imin9min13x3,5,7,11 5-I11x5,7,9 (=0-G D F# =1-G 0-Ab Eb =5-G B 0-C) - (good: D G F#)&lt;br /&gt;0,1,5,10 - 0-imaj79x3 1-imin9min13x5,7,11 5-I11x7,9 10-i13x3,5,9 (=0-G D F# A =1-G Bb 0-Ab Eb =5-G B D 0-C =10-G 0-F C E)&lt;br /&gt;0,1,5,9 - 0-imaj7 1-Iaugmin9x7 5-Iaug11x7,9 9-Iaug13x7,9,11 (=0-G Bb D F# =1-G B D# 0-Ab =5-G B D# 0-C =9-G B D# 0-E) - (good: G D F# Bb)&lt;br /&gt;0,1,5,8 - Imaj7 - M&lt;br /&gt;0,1,5,8,10 - 0-Imaj79 1-imin9min13x5,7 5-I13x7,9 8-imin13x9,11 10-i13x3,5 (=0-G B D F# A =1-G Bb 0-Ab C Eb =5-G B D 0-C E =8-G Bb D F 0-Eb =10-G 0-F A C E)&lt;br /&gt;0,1,5,7 - 0-imaj711x3,9 1-idmin9min13x3,7,11 5-I7x5s4 5-I11x5,9 7-imaj11x3,7 (=0-G D F# C =1-G Db 0-Ab Eb =5-G B 0-C F =5-G B F 0-C =7-G 0-D A C#)&lt;br /&gt;0,1,5,7,10 - 0-imaj711x3 1-idmin9min13x7,11 5-I11x9 5-I7s4 7-imaj1113x3,7 10-i13x5,9 (=0-G D F# A C =1-G Bb Db 0-Ab Eb =5-G B D F 0-C =5-G B 0-C D F =7-G 0-D A C# E =10-G Bb 0-F C E)&lt;br /&gt;0,1,5,7,9 - 0-imaj711x9 0-imaj7s4 1-idmin9min13x3,7,11s3 5-Iaug711x9 5-Iaug7s4 7-imaj11x3 9-Iaug13x7,11 (=0-G Bb D F# C =0-G Bb C D F# =1-G B Db 0-Ab Eb =5-G B D# F 0-C =5-G B 0-C D# F =7-G 0-D F A C# =9-G B D# A 0-E)&lt;br /&gt;0,1,5,6 - 0-imaj7maj11x3,9 1-imin9min13x3,7,11 5-Imaj7x5s4 6-idmin911x3,7 (=0-G D F# C# =1-G D 0-Ab Eb =5-G B 0-C F# =6-G 0-Db Ab C)&lt;br /&gt;0,1,5,6,10 - 0-imaj7maj11x3 1-imin9min13x7,11 5-Imaj711x9 5-Imaj7s4 6-idmin9min13x3,7 10-I13x5,9 (=0-G D F# A C# =1-G Bb D 0-Ab Eb =5-G B D F# 0-C =5-G B 0-C D F# =6-G 0-Db Ab C Eb =10-G B 0-F C E)&lt;br /&gt;0,1,4 - 0-iaugmaj7x3 1-imin913x3,5,7,11 4-ix5s3 (=0-G D# F# =1-G 0-Ab E =4-G Bb 0-B) - (good: F# D# G)&lt;br /&gt;0,1,4,10 - 0-iaugmaj79x3 1-imin913x5,7,11 4-ids3 10-id67x3 (=0-G D# F# A =1-G Bb 0-Ab E =4-G Bb 0-B Db =10-G Db E 0-F)&lt;br /&gt;0,1,4,9 - 0-imaj7min13x5,9,11 1-Imin913x5,7,11 4-is3 9-iaug13x3,7,9 (=0-G Bb F# Eb =1-G B 0-Ab E =4-G Bb 0-B D =9-G D# C 0-E)&lt;br /&gt;0,1,4,8 - 0-Iaugmaj7 1-imin913x3,5,7 4-imin13x5,7,9,11s3 8-Imin13x7,9,11 (=0-G B D# F# =1-G 0-Ab C E =4-G Bb 0-B Eb =8-G B D 0-Eb) - (good: F# D# B G)&lt;br /&gt;0,1,4,8,10 - 0-Iaugmaj79 1-imin913x5,7 4-idmin13x7,9,11s3 8-Imin13x9,11 10-imaj1113x3,5 (=0-G B D# F# A =1-G Bb 0-Ab C E =4-G Bb 0-B Db Eb =8-G B D F 0-Eb =10-G 0-F A C# E)&lt;br /&gt;0,1,4,7 - ids5 - M&lt;br /&gt;0,1,4,7,10 - id6min9x7 - M&lt;br /&gt;0,1,4,7,9 - 0-imaj7min13x5,9 1-id6min9x3,7s3 4-is3,6 4-i13x7,9,11s3 7-id7s5 9-iaug13x3,7 (=0-G Bb F# C Eb =1-G B Db E 0-Ab =4-G Bb 0-B D E =4-G Bb 0-B D E =7-G Bb Db 0-D F =9-G D# A C 0-E)&lt;br /&gt;0,1,4,7,8 - 0-Iaugmaj711x9 1-id6min911x3,7 4-Iaug13x7,9,11smin3 7-idmaj7s5 8-Imin9x7smin6 (=0-G B D# F# C =1-G Db E 0-Ab C =4-G Bb 0-B D# E =7-G Bb Db 0-D F# =8-G B D 0-Eb Ab)&lt;br /&gt;0,1,4,6 - 0-iaugmaj7maj11x3,9 1-imin9x3,7s6 1-imin913x3,7,11 4-i7x5s3 6-id11x3,7 (=0-G D# F# C# =1-G D E 0-Ab =1-G D 0-Ab E =4-G Bb 0-B F =6-G 0-Db A C)&lt;br /&gt;0,1,4,6,10 - 0-iaugmaj7maj11x3 1-imin9x7s6 4-id7s3 6-idmin13x3,7 10-Imaj1113x5,9 (=0-G D# F# A C# =1-G Bb D E 0-Ab =4-G Bb 0-B Db F =6-G 0-Db A C Eb =10-G B 0-F C# E)&lt;br /&gt;0,1,4,6,9 - 0-idmaj7min13x9,11 1-Imin9x7s6 4-i7s3 6-id611x3,7 9-id6min13x5,7,9 (=0-G Bb Db F# Eb =1-G B D E 0-Ab =4-G Bb 0-B D F =6-G 0-Db E A C =9-G Bb 0-E C Eb)&lt;br /&gt;0,1,4,6,8 - 0-Iaugmaj7maj11x9 1-imin913x3,7 4-Iaug7smin3 6-id11x3 8-Imin13x7,11 (=0-G B D# F# C# =1-G D 0-Ab C E =4-G Bb 0-B D# F =6-G 0-Db F A C =8-G B D A 0-Eb)&lt;br /&gt;0,1,4,6,8,10 - 0-Iaugmaj7maj11 1-imin913x7 4-idmin13x9,11s3 4-Iaugmaj11x9smin3 6-idmin13x3 8-Imin13x11 10-Imaj1113x5 (=0-G B D# F# A C# =1-G Bb D 0-Ab C E =4-G Bb 0-B Db F Eb =4-G Bb 0-B D# F C# =6-G 0-Db F A C Eb =8-G B D F A 0-Eb =10-G B 0-F A C# E)&lt;br /&gt;0,1,4,6,7 - 0-idmaj7min13x3,9 1-id6min9x3,7s5 4-id67x5s3 6-idmaj711x3 7-idmin9x7s5 (=0-G Db F# C Eb =1-G Db D E 0-Ab =4-G Bb 0-B E F =6-G 0-Db F# A C =7-G Bb Db 0-D Ab)&lt;br /&gt;0,1,4,6,7,10 - 0-idmaj7min13x3 1-id6min9x7s5 4-id67s3 4-imaj1113x5,9s3 (=0-G Db F# A C Eb =1-G Bb Db D E 0-Ab =4-G Bb 0-B Db E F =4-G Bb 0-B F C# E) - (S good: D G Bb Db E Ab)&lt;br /&gt;0,1,4,5 - 0-imaj7min13x3,9,11 1-iaugmin913x3,7,11 4-imaj7x5s3 5-Imin911x5,7 (=0-G D F# Eb =1-G D# 0-Ab E =4-G Bb 0-B F# =5-G B Ab 0-C) - (good: G Ab B C)&lt;br /&gt;0,1,4,5,10 - 0-imaj7min13x3,11 1-id6min9min13x5,7,11 4-idmaj7s3 5-Imin911x7 10-id611x3,9 (=0-G D F# A Eb =1-G Bb E 0-Ab Eb =4-G Bb 0-B Db F# =5-G B D Ab 0-C =10-G Db E 0-F C) - (good: C Ab D G B)&lt;br /&gt;0,1,4,5,9 - 0-imaj7min13x9,11 1-Iaugmin913x7,11 4-imaj7s3 5-Iaugmin911x7 9-Iaugmaj1113x7,9 (=0-G Bb D F# Eb =1-G B D# 0-Ab E =4-G Bb 0-B D F# =5-G B D# Ab 0-C =9-G B D# C 0-E)&lt;br /&gt;0,1,4,5,8 - 0-Imaj7min13x9,11 0-Imaj7min13x3,9,11s10 1-imin9min13x3,5,7s6 4-Iaugmaj7smin3 5-Imin913x5,7 8-imin13x7,9,11s3 (=0-G B D F# Eb =0-G D F# B Eb =1-G E 0-Ab C Eb =4-G Bb 0-B D# F# =5-G B Ab 0-C E =8-G Bb B D 0-Eb)&lt;br /&gt;0,1,4,5,8,10 - 0-Imaj7min13x11 1-id6min9min13x5,7 4-idmaj7min13x5,9,11s3 4-Iaugmaj7maj11x9smin3 5-Imin913x7 8-imin13x9,11s3 10-id611x3 (=0-G B D F# A Eb =1-G Bb E 0-Ab C Eb =4-G Bb 0-B Db F# Eb =4-G Bb 0-B D# F# C# =5-G B D Ab 0-C E =8-G Bb B D F Eb =10-G Db E 0-F A C)&lt;br /&gt;0,1,4,5,8,9 - 0-imaj7min13x9,11s3 1-Iaugmin913x7 (=0-G Bb B D F# Eb =1-G B D# 0-Ab C E) - (S)&lt;br /&gt;0,1,3 - 0-id6maj7x3,5 1-imin9x3,5 3-i9x5,7 (=0-G E F# =1-G F 0-Ab =3-G 0-Bb A) - (good: Ab G F)&lt;br /&gt;0,1,3,10 - 0-imaj713x3,5,11 1-imin9x5 3-i11x5,7 10-i13x3,9,11 (=0-G F# A E =1-G Bb F 0-Ab =3-G 0-Bb A C =10-G D 0-F E)&lt;br /&gt;0,1,3,9 - 0-id6maj7x5 1-Imin9x5 3-id9x7 9-id6min13x3,7,9,11 9-iaugmaj1113x3,7,9 (=0-G Bb E F# =1-G B F 0-Ab =3-G 0-Bb Db A =9-G Db 0-E Eb =9-G D# C# 0-E) - (good: G F B Ab, G F Ab B)&lt;br /&gt;0,1,3,8 - 0-Imaj713x5,9,11 1-imin911x3,5 3-i9x7 8-imin13x3,7,9 (=0-G B F# E =1-G F 0-Ab C =3-G 0-Bb D A =8-G D C 0-Eb)&lt;br /&gt;0,1,3,8,10 - 0-Imaj713x5,11 1-imin911x5 3-i11x7 8-imin13x3,9 10-i13x3,11 (=0-G B F# A E =1-G Bb F 0-Ab C =3-G 0-Bb D A C =8-G D F C 0-Eb 10-G D 0-F A E)&lt;br /&gt;0,1,3,8,9 - 0-id6maj7s3 0-imaj713x5,9,11s3 1-Imin911x5 3-id9x7s5 3-imaj11x7 8-imaj7min13x3,9 9-id6min9min13x3,7,11 9-iaugmin9maj1113x3,7 (=0-G Bb B E F# =0-G Bb B F# E =1-G B F 0-Ab C =3-G 0-Bb Db D A =3-G 0-Bb D A C# =8-G D F# C 0-Eb =9-G Db 0-E Ab Eb =9-G D# Ab C# 0-E)&lt;br /&gt;0,1,3,7 - 0-imaj713x3,5,9 1-idmin9x3 3-imin13x5,7,11 7-Imaj11x7,9 (=0-G F# C E =1-G Db F 0-Ab =3-G 0-Bb A Eb =7-G B 0-D C#)&lt;br /&gt;0,1,3,7,10 - idmin9 - M&lt;br /&gt;0,1,3,7,9 - 0-imaj713x5,9 1-idmin9x3s3 3-idmin13x7,11 7-Imaj11x9 9-iaugmaj1113x3,7 (=0-G Bb F# C E =1-G B Db F 0-Ab =3-G 0-Bb Db A Eb =7-G B 0-D F C# =9-G D# A C# 0-E) (good: G B C# D F)&lt;br /&gt;0,1,3,7,8 - 0-Imaj713x5,9 1-idmin911x3 3-imin13x7,11 7-Imaj7maj11x9 8-imin9min13x3,7 (=0-G B F# C E =1-G Db F 0-Ab C =3-G 0-Bb D A Eb =7-G B 0-D F# C# =8-G D Ab C 0-Eb)&lt;br /&gt;0,1,3,6 - imin9x3 - M&lt;br /&gt;0,1,3,6,10 - imin9 - M&lt;br /&gt;0,1,3,6,9 - 0-id6maj7 1-Imin9 3-id69 6-id611 9-id6min13 (=0-G Bb Db E F# =1-G B D F 0-Ab =3-G 0-Bb Db E A =6-G Bb 0-Db E C =9-G Bb Db 0-E Eb)&lt;br /&gt;0,1,3,6,8 - 0-Imaj7maj1113x5,9 0-id6maj7x3s3 1-imin911x3 3-i13x7,11 6-id11x9 8-imin13x3,7 (=0-G B F# C# E =0-G B Db E F# =1-G D F 0-Ab C =3-G 0-Bb D A E =6-G Bb 0-Db F C =8-G D A C 0-Eb)&lt;br /&gt;0,1,3,6,8,10 - 0-Imaj7maj1113x5 0-id6maj79x3s3 1-imin911 3-i13x7 6-idmin13x9 8-imin13x3 10-I13x11 (=0-G B F# A C# E =0-G B Db E F# A =1-G Bb D F 0-Ab C =3-G 0-Bb D A C E =6-G Bb 0-Db F C Eb =8-G D F A C 0-Eb =10-G B D 0-F A E)&lt;br /&gt;0,1,3,6,8,9 - 0-imaj7maj1113x5,9s3 0-id6maj7s3 1-Imin911 3-imaj1113x7 6-id611x9 8-imaj7min13x3 9-id6min9min13x7,11 (=0-G Bb B F# C# E =0-G Bb B Db E F# =1-G B D F 0-Ab C =3-G 0-Bb D A C# E =6-G Bb 0-Db E F C =8-G D F# A C 0-Eb =9-G Bb Db 0-E Ab Eb)&lt;br /&gt;0,1,3,6,7 - 0-id6maj711x3,9 1-imin9maj11x3 1-idmin9x3s5 3-iaug13x3,7,11smin3 6-idmaj711x9 7-Imin9maj11x7 (=0-G Db E F# C =1-G D F 0-Ab C# =1-G Db D F 0-Ab =3-G 0-Bb D# A E =6-G Bb 0-Db F# C =7-G B 0-D Ab C#)&lt;br /&gt;0,1,3,6,7,10 - 0-id6maj711x3 1-idmin9s5 3-iaug13x3,7smin3 6-idmaj7min13x9 7-Imin9maj1113x7 7-id6min9x3s3,5,7 10-i13x9,11s3 (=0-G Db E F# A C =1-G Bb Db D F 0-Ab =3-G 0-Bb D# A C E =6-G Bb 0-Db F# C Eb =7-G B 0-D Ab C# E =7-G B Db 0-D E Ab =10-G Bb B D 0-F E)&lt;br /&gt;0,1,3,6,7,9 - 0-id6maj711x3 1-Imin9maj11 3-id6min13x7,11 (=0-G Db E F# A C =1-G B D F 0-Ab C# =3-G 0-Bb Db E A Eb) - (S)&lt;br /&gt;0,1,3,5 - i9x5 - M&lt;br /&gt;0,1,3,5,10 - 0-imaj713x3,11 1-imin9min13x5,11 1-iaugmin9x3smin3 3-i11x5 5-I11x7 10-i13x3,9 (=0-G D F# A E =1-G Bb F 0-Ab Eb =1-G Bb D# F 0-Ab =3-G 0-Bb F A C =5-G B D A 0-C =10-G D 0-F C E)&lt;br /&gt;0,1,3,5,9 - 0-imaj713x3,9,11 1-Iaugmin9 3-id9 5-Iaug11x7 9-Iaugmaj1113x7,9 (=0-G Bb D F# E =1-G B D# F 0-Ab =3-G 0-Bb Db F A =5-G B D# A 0-C =9-G B D# C# 0-E)&lt;br /&gt;0,1,3,5,8 - 0-Imaj713x9,11 1-imin9min13x3,5 1-iaugmin911x3 3-i9 5-I13x5,7 8-imin13x7,9 (=0-G B D F# E =1-G F 0-Ab C Eb =1-G D# F 0-Ab C =3-G 0-Bb D F A =5-G B A 0-C E =8-G Bb D C 0-Eb) - (good: Bb G D F A, Bb F A D G, Bb D G A F)&lt;br /&gt;0,1,3,5,8,10 - 0-Imaj713x11 1-imin9min13x5 1-iaugmin911x3smin3 3-i11 5-I13x7 8-imin13x9 10-i13x3 (=0-G B D F# A E =1-G Bb F 0-Ab C Eb =1-G Bb D# F 0-Ab C =3-G 0-Bb D F A C =5-G B D A 0-C E =8-G Bb D F C 0-Eb =10-G D 0-F A C E)&lt;br /&gt;0,1,3,5,8,9 - 0-imaj713x9,11s3 1-Iaugmin911 3-id9s5 5-Iaug13x7 8-imaj7min13x9 9-Iaugmin9maj1113x7 9-id6min9min13x3,7,11s3 (=0-G Bb B D F# E =1-G B D# F 0-Ab C =3-G 0-Bb Db D F A =5-G B D# A 0-C E =8-G Bb D F# C 0-Eb =9-G B D# Ab C# 0-E =9-G B Db E Ab Eb)&lt;br /&gt;0,1,3,5,7 - I11x5 - M&lt;br /&gt;0,1,3,5,7,10 - 0-imaj713x3 1-idmin9min13x11 3-imin13x5 3-iaug11x3smin3 5-I11 7-Imaj1113x7 10-i13x9 (=0-G D F# A C E =1-G Bb Db F 0-Ab Eb =3-G 0-Bb F A C Eb =3-G 0-Bb D# F A C =5-G B D F A 0-C =7-G B 0-D A C# E =10-G Bb D 0-F C E)&lt;br /&gt;0,1,3,5,7,9 - 0-imaj713x9 1-idmin9min13x3,11s3 1-Iaugmin9maj11 3-idmin13x11 5-Iaug11 7-Imaj11 9-Iaugmaj1113x7 (=0-G Bb D F# C E =1-G B Db F 0-Ab Eb =1-G B D# F 0-Ab C# =3-G 0-Bb Db F A Eb =5-G B D# F A 0-C =7-G B 0-D F A C# =9-G B D# A C# 0-E)&lt;br /&gt;0,1,3,5,7,8 - 0-Imaj713x9 1-idmin9min13x3 3-imin13x11 5-I13x5 7-Imaj7maj11 8-imin9min13x7 (=0-G B D F# C E =1-G Db F 0-Ab C Eb =3-G 0-Bb D F A Eb =5-G B F A 0-C E =7-G B 0-D F# A C# =8-G Bb D Ab C 0-Eb)&lt;br /&gt;0,1,3,5,6 - 0-imaj7maj1113x3,9 1-imin9min13x3,11 3-id69x5 3-i13x5,11 5-Imaj711x5 6-idmin911x7 (=0-G D F# C# E =1-G D F 0-Ab Eb =3-G 0-Bb E F A =3-G 0-Bb F A E =5-G B F# A 0-C =6-G Bb 0-Db Ab C)&lt;br /&gt;0,1,3,5,6,10 - 0-imaj7maj1113x3 1-imin9min13x11 3-i13x5 5-Imaj711 6-idmin9min13x7 10-I13x9 (=0-G D F# A C# E =1-G Bb D F 0-Ab Eb =3-G 0-Bb F A C E =5-G B D F# A 0-C =6-G Bb 0-Db Ab C Eb =10-G B D 0-F C E)&lt;br /&gt;0,1,3,5,6,9 - 0-imaj7maj1113x9 1-Imin9min13x11 3-id69 5-Iaugmaj711 6-id6min911x7 9-Iaugmaj1113x7,9smin3 9-id6min13x7,9,11s3 (=0-G Bb D F# C# E =1-G B D F 0-Ab Eb =3-G 0-Bb Db E F A =5-G B D# F# A 0-C =6-G Bb 0-Db E Ab C =9-G Bb B D# C# 0-E =9-G Bb B Db 0-E Eb)&lt;br /&gt;0,1,3,5,6,8 - 0-Imaj7maj1113x9 1-imin9min13x3 3-i13x11 5-Imaj713x5 6-idmin911 8-imin13x7 (=0-G B D F# C# E =1-G D F 0-Ab C Eb =3-G 0-Bb D F A E =5-G B F# A 0-C E =6-G Bb 0-Db F Ab C =8-G Bb D A C 0-Eb)&lt;br /&gt;0,1,3,5,6,8,10 - 0-Imaj7maj1113 1-imin9min13 3-i13 5-Imaj713 6-idmin9min13 8-imin13 10-I13 (=0-G B D F# A C# E =1-G Bb D F 0-Ab C Eb =3-G 0-Bb D F A C E =5-G B D F# A 0-C E =6-G Bb 0-Db F Ab C Eb =8-G Bb D F A C 0-Eb =10-G B D 0-F A C E)&lt;br /&gt;0,1,3,4 - 0-iaugmaj713x3,9,11 1-imin913x3,5,11 3-imaj79x5 4-imin9x5,7s3 (=0-G D# F# E =1-G F 0-Ab E =3-G 0-Bb F# A =4-G Bb 0-B Ab)&lt;br /&gt;0,1,3,4,10 - 0-iaugmaj713x3,11 1-id6min9x5 1-imin913x5,11 3-imaj711x5 4-idmin9dim11x7 4-idmin9x7s3 10-imaj1113x3,9 (=0-G D# F# A E =1-G Bb E F 0-Ab =1-G Bb F 0-Ab E =3-G 0-Bb F# A C =4-G Bb Db Ab 0-B =4-G Bb 0-B Db Ab =10-G D 0-F C# E)&lt;br /&gt;0,1,3,4,9 - 0-iaugmaj713x3,9,11smin3 0-id6maj7min13x5,9,11 1-Imin913x5,11 3-idmaj79 4-imin9dim11x7 4-imin9x7s3 9-id6min13x3,7,9 (=0-G Bb D# F# E =0-G Bb E F# Eb =1-G B F 0-Ab E =3-G 0-Bb Db F# A =4-G Bb D Ab 0-B =4-G Bb 0-B D Ab =9-G Db 0-E C Eb)&lt;br /&gt;0,1,3,4,8 - 0-Iaugmaj713x9,11 1-imin913x3,5 3-imaj79 4-imin9min13x5,7,11s3 4-Iaugmin9x7smin3 8-Imin13x7,9 (=0-G B D# F# E =1-G F 0-Ab C E =3-G 0-Bb D F# A =4-G Bb 0-B Ab Eb =4-G Bb 0-B D# Ab =8-G B D C 0-Eb)&lt;br /&gt;0,1,3,4,8,10 - 0-Iaugmaj713x11 1-imin913x5 3-imaj711 4-idmin9min13x7,11s3 4-Iaugmin9maj11smin3 8-Imin13x9 10-imaj1113x3 (=0-G B D# F# A E =1-G Bb F 0-Ab C E =3-G 0-Bb D F# A C =4-G Bb 0-B Db Ab Eb =4-G Bb 0-B D# Ab C# =8-G B D F C 0-Eb =10-G D 0-F A C# E)&lt;br /&gt;0,1,3,4,8,9 - 0-Iaugmaj713x9,11smin3 0-id6maj7min13x5,9,11s3 1-Imin913x5 3-imaj7maj11 3-idmaj79s5 4-imin9min13x7,11s3 8-Imaj7min13x9 9-id6min9min13x3,7 (=0-G Bb B D# F# E =0-G Bb B E F# Eb =1-G B F 0-Ab C E =3-G 0-Bb D F# A C# =3-G 0-Bb Db D F# A =4-G Bb 0-B D Ab Eb =8-G B D F# C 0-Eb =9-G Db 0-E Ab C Eb)&lt;br /&gt;0,1,3,4,7 - 0-iaugmaj713x3,9 1-id6min9x3 3-imaj7min13x5,11 4-id6min9x5,7s3 7-ids3,5 (=0-G D# F# C E =1-G Db E F 0-Ab =3-G 0-Bb F# A Eb =4-G Bb 0-B E Ab =7-G Bb B Db 0-D)&lt;br /&gt;0,1,3,4,7,10 - 0-iaugmaj713x3 1-id6min9 3-imaj7min13x5 4-id6min9x7s3 7-id6s3,5 10-id67s5 (=0-G D# F# A C E =1-G Bb Db E F 0-Ab =3-G 0-Bb F# A C Eb =4-G Bb 0-B Db E Ab =7-G Bb B Db 0-D E =10-G Bb Db D E 0-F)&lt;br /&gt;0,1,3,4,7,9 - 0-iaugmaj713x3,9smin3 1-idmin913x3,11s3 3-idmaj7min13x11 4-imin913x7,11s3 7-id7s3,5 9-id6min13x3,7 (=0-G Bb D# F# C E =1-G B Db F 0-Ab E =3-G 0-Bb Db F# A Eb =4-G Bb 0-B D Ab E =7-G Bb B Db 0-D F =9-G Db 0-E A C Eb) - (P)&lt;br /&gt;0,1,3,4,7,8 - 0-Iaugmaj713x9 1-idmin913x3 3-imaj7min13x11 4-Iaugmin913x7,11smin3 7-idmaj7s3,5 8-Imin9min13x7 (=0-G B D# F# C E =1-G Db F 0-Ab C E =3-G 0-Bb D F# A Eb =4-G Bb 0-B D# Ab E =7-G Bb B Db 0-D F# =8-G B D Ab C 0-Eb) - (P)&lt;br /&gt;0,1,3,4,7,8,10 - 0-Iaugmaj713 1-idmin913 1-id67min911 3-imaj7min13 4-id6min9min13x7,11s3 7-imaj7maj1113x9s3 8-Imin9min13 10-imaj1113 10-id69s5 (=0-G B D# F# A C E =1-G Bb Db F 0-Ab C E =1-G Bb Db E F 0-Ab C =3-G 0-Bb D F# A C Eb =4-G Bb 0-B Db E Ab Eb =7-G Bb B 0-D F# C# E =8-G B D F Ab C 0-Eb =10-G Bb D 0-F A C# E =10-G Bb Db D E 0-F A) (P)&lt;br /&gt;0,1,3,4,6 - 0-iaugmaj7maj1113x3,9 1-imin913x3,11 3-id6maj79x5 4-imin9x5s3 6-id11x7 (=0-G D# F# C# E =1-G D F 0-Ab E =3-G 0-Bb E F# A =4-G Bb 0-B F Ab =6-G Bb 0-Db A C)&lt;br /&gt;0,1,3,4,6,10 - 0-iaugmaj7maj1113x3 1-imin913x11 3-id6maj711x5 4-idmin9s3 6-idmin13x7 10-Imaj1113x9 (=0-G D# F# A C# E =1-G Bb D F 0-Ab E =3-G 0-Bb E F# A C =4-G Bb 0-B Db F Ab =6-G Bb 0-Db A C Eb =10-G B D 0-F C# E)&lt;br /&gt;0,1,3,4,6,9 - 0-id6maj7min13x9,11 1-Imin913x11 3-id6maj7maj11x5 4-imin9s3 6-id611x7 9-id6min13x7,9 (=0-G Bb Db E F# Eb =1-G B D F 0-Ab E =3-G 0-Bb E F# A C# =4-G Bb 0-B D F Ab =6-G Bb Db E A C =9-G Bb Db 0-E C Eb)&lt;br /&gt;0,1,3,4,6,8 - 0-Iaugmaj7maj1113x9 1-imin913x3 3-imaj713x11 4-imin9min13x5,11s3 6-id11 8-Imin13x7 (=0-G B D# F# C# E =1-G D F 0-Ab C E =3-G 0-Bb D F# A E =4-G Bb 0-B F Ab Eb =6-G Bb 0-Db F A C =8-G B D A C 0-Eb)&lt;br /&gt;0,1,3,4,6,8,10 - 0-Iaugmaj7maj1113 1-imin913 3-imaj713 4-idmin9min13x11s3 6-idmin13 8-Imin13 10-Imaj1113 (=0-G B D# F# A C# E =1-G Bb D F 0-Ab C E =3-G 0-Bb D F# A C E =4-G Bb 0-B Db F Ab Eb =6-G Bb 0-Db F A C Eb =8-G B D F A C 0-Eb =10-G B D 0-F A C# E)&lt;br /&gt;0,1,3,4,6,8,9 - 0-Iaugmaj7maj1113x9smin3 1-Imin913 3-imaj7maj1113 4-imin9min13x11s3 6-id611 8-Imaj7min13 9-id6min9min13x7 (=0-G Bb B D# F# C# E =1-G B D F 0-Ab C E =3-G 0-Bb D F# A C# E =4-G Bb 0-B D F Ab Eb =6-G Bb 0-Db E F A C =8-G B D F# A C 0-Eb =9-G Bb Db 0-E Ab C Eb)&lt;br /&gt;0,1,3,4,6,7 - 0-id6maj7min13x3,9 1-imin9maj1113x3 3-iaugmaj713x3,11smin3 3-id6maj7min13x5,11 4-id6min9x5s3 4-imin913x5,11s3 6-idmaj711 7-imin9maj11x7s3 7-idmin9x7s3,5 (=0-G Db E F# C Eb =1-G D F 0-Ab C# E =3-G 0-Bb D# F# A E =3-G 0-Bb E F# A Eb =4-G Bb 0-B E F Ab =4-G Bb 0-B F Ab E =6-G Bb 0-Db F# A C =7-G Bb B 0-D Ab C# =7-G Bb B Db 0-D Ab)&lt;br /&gt;0,1,3,4,6,7,10 - 0-id6maj7min13x3 1-imin9maj1113 1-id6min9s5 3-iaugmaj713x3smin3 3-id6maj7min13x5 4-imin9maj1113x5s3 4-id6min9s3 6-idmaj7min13 7-imin9maj1113x7s3 7-id6min9x7s3,5 10-imaj1113x9s3 10-id67s3,5 (=0-G Db E F# A C Eb =1-G Bb D F 0-Ab C# E =1-G Bb Db D E F 0-Ab =3-G 0-Bb D# F# A C E =3-G 0-Bb E F# A C Eb =4-G Bb 0-B F Ab C# E =4-G Bb 0-B Db E F Ab =6-G Bb 0-Db F# A C Eb =7-G Bb B 0-D Ab C# E =7-G Bb B Db 0-D E Ab =10-G Bb B D 0-F C# E =10-G Bb B Db D E 0-F)&lt;br /&gt;0,1,3,4,6,7,9 - 0-id6maj7min13x9 1-Imin9maj1113 3-id6maj7min13x11 4-imin913x11s3 6-id6maj711 7-idmin9s3,5 7-imin9maj11s3 9-id6min13x7 (=0-G Bb Db E F# C Eb =1-G B D F 0-Ab C# E =3-G 0-Bb Db E F# A Eb =4-G Bb 0-B D F Ab E =6-G Bb 0-Db E F# A C =7-G Bb B Db 0-D F Ab =7-G Bb B 0-D F Ab C# =9-G Bb Db 0-E A C Eb)&lt;br /&gt;0,1,3,4,6,7,9,10 - 0-id6maj7min13 1-imin9maj1113s3 1-id6min9s3,5 (=0-G Bb Db E F# A C Eb =1-G Bb B D F 0-Ab C# E =1-G Bb B Db D E F 0-Ab) - (S 'sawtooth')&lt;br /&gt;0,1,2 - 0-imaj7x3,5s7 1-imaj7min9x3,5 2-imin9x3,5,7s9 (=0-G F F# =1-G F# 0-Ab =2-G Ab 0-A)&lt;br /&gt;0,1,2,10 - 0-imaj79x3,5s7 1-imaj7min9x5 2-Imin9x5,7s9 10-id6min13x3,5,9,11 (=0-G F F# A =1-G Bb F# 0-Ab =2-G B Ab 0-A =10-G E 0-F Eb) - (good: F# Ab G Bb)&lt;br /&gt;0,1,2,9 - 0-imaj7x5s7 1-Imaj7min9x5 2-imin911x3,5,7s9 9-imin13x3,7,9,11s13 (=0-G Bb F F# =1-G B F# 0-Ab =2-G Ab 0-A C =9-G D Eb 0-E)&lt;br /&gt;0,1,2,9,10 - 0-imaj79x5s7 1-imaj7min9x5s3 2-Imin911x5,7s9 9-imaj7min13x3,9,11s13 10-id6min9min13x3,5,11 (=0-G Bb F F# A =1-G Bb B F# 0-Ab =2-G B Ab 0-A C =9-G D F# Eb 0-E =10-G E 0-F Ab Eb)&lt;br /&gt;0,1,2,8 - 0-Imaj7x5s7 1-imaj7min911x3,5 2-idmin9x3,7s9 8-imaj11min13x3,7,9 (=0-G B F F# =1-G F# 0-Ab C =2-G Db Ab 0-A =8-G D C# 0-Eb)&lt;br /&gt;0,1,2,8,10 - 0-Imaj79x5s7 1-imaj7min911x5 2-Imin9maj11x5,7s9 8-imaj11min13x3,9 10-id6min13x3,5,11 (=0-G B F F# A =1-G Bb F# 0-Ab C =2-G B Ab 0-A C# =8-G D F C# 0-Eb =10-G E 0-F A Eb)&lt;br /&gt;0,1,2,8,9 - 0-imaj7x5s3,7 1-Imaj7min911x5 2-idmin911x3,7s9 8-imaj7maj11min13x3,9 9-imin9min13x3,7,11s13 (=0-G Bb B F F# =1-G B F# 0-Ab C =2-G Db Ab 0-A C =8-G D F# C# 0-Eb =9-G D Ab Eb 0-E)&lt;br /&gt;0,1,2,7 - 0-imaj711x3,5,9s7 1-idmaj7min9x3 2-imin9x3,7s9 7-imin13x3,7,9,11s13 (=0-G F F# C =1-G Db F# 0-Ab =2-G D Ab 0-A =7-G D Eb 0-E)&lt;br /&gt;0,1,2,7,10 - 0-imaj711x3,5s7 1-idmaj7min9 2-Imin9x7s9 7-id611x3,7,9s5 10-id6min13x5,9,11 (=0-G F F# A C =1-G Bb Db F# 0-Ab =2-G B D Ab 0-A =7-G Db 0-D E C =10-G Bb E 0-F Eb)&lt;br /&gt;0,1,2,7,9 - 0-imaj711x5,9s7 1-idmaj7min9x3s3 2-imin911x3,7s9 7-id11x3,9s5 9-imin13x3,7,11s13 (=0-G Bb F F# C =1-G B Db F# 0-Ab =2-G D Ab 0-A C =7-G Db 0-D F C =9-G D A Eb 0-E)&lt;br /&gt;0,1,2,7,9,10 - 0-imaj711x5s7 1-idmaj7min9s3 2-Imin911x7s9 7-id611x3,9s5 9-imaj7min13x3,11s13 10-id6min9min13x5,11 (=0-G Bb F F# A C =1-G Bb B Db F# 0-Ab =2-G B D Ab 0-A C =7-G Db 0-D E F C =9-G D F# A Eb 0-E =10-G Bb E 0-F Ab Eb)&lt;br /&gt;0,1,2,7,8 - 0-Imaj711x5,9s7 1-idmaj7min911x3 2-imin9maj11x3,7s9 7-idmaj711x3,9s5 8-idmin9min13x3,7,11s5 (=0-G B F F# C =1-G Db F# 0-Ab C =2-G D Ab 0-A C# =7-G Db 0-D F# C =8-G Db D Ab 0-Eb)&lt;br /&gt;0,1,2,7,8,10 - 0-Imaj711x5s7 1-idmaj7min911 2-Imin9maj11x7s9 7-id6maj711x3,9s5 8-idmin9min13x3,11s5 10-id6min13x5,11 (=0-G B F F# A C =1-G Bb Db F# 0-Ab C =2-G B D Ab 0-A C# =7-G Db 0-D E F# C =8-G Db D F Ab 0-Eb =10-G Bb E 0-F A Eb)&lt;br /&gt;0,1,2,6 - 0-idmaj7x3s7 1-imaj7min9x3 2-iaugmin9x3,7s9 6-id11x3,7,9s3 (=0-G Db F F# =1-G D F# 0-Ab =2-G D# Ab 0-A =6-G B 0-Db C)&lt;br /&gt;0,1,2,6,10 - 0-idmaj79x3s7 1-imaj7min9 2-Iaugmin9x7s9 6-idmin13x3,7,9s3 10-id6min13x3,5,9,11s3 (=0-G Db F F# A =1-G Bb D F# 0-Ab =2-G B D# Ab 0-A =6-G B 0-Db C Eb =10-G B E 0-F Eb)&lt;br /&gt;0,1,2,6,9 - 0-idmaj7s7 1-Imaj7min9 2-iaugmin911x3,7s9 6-id611x3,7,9s3 9-imin13x7,9,11s13 (=0-G Bb Db F F# =1-G B D F# 0-Ab =2-G D# Ab 0-A C =6-G B Db E C =9-G Bb D Eb 0-E)&lt;br /&gt;0,1,2,6,9,10 - 0-idmaj79s7 1-imaj7min9s3 2-Iaugmin911x7s9 6-id6min13x3,7,9s3 9-imaj7min13x9,11s13 10-id6min9min13x3,5,11s3 (=0-G Bb Db F F# A =1-G Bb B D F# 0-Ab =2-G B D# Ab 0-A C =6-G B 0-Db E C Eb =9-G Bb D F# Eb 0-E =10-G B E 0-F Ab Eb)&lt;br /&gt;0,1,2,6,8 - 0-idmaj7x3s3,7 1-imaj7min911x3 2-idmin9min13x3,7,11s9 6-id11x3,9s3 8-idmin13x3,7,11s5 (=0-G B Db F F# =1-G D F# 0-Ab C =2-G Db Ab 0-A Eb =6-G B 0-Db F C =8-G Db D A 0-Eb)&lt;br /&gt;0,1,2,6,8,10 - 0-idmaj79x3s3,7 1-imaj7min911 2-Iaugmin9maj11x7s9 6-Iaugmaj11x9,11s11 8-imaj11min13x3 10-id6min13x3,5,11s3 (=0-G B Db F F# A =1-G Bb D F# 0-Ab C =2-G B D# Ab 0-A C# =6-G B D# F C 0-C# =8-G D F A C# 0-Eb =10-G B E 0-F A Eb)&lt;br /&gt;0,1,2,6,8,9 - 0-idmaj7s3,7 1-Imaj7min911 2-idmin9min13x3,7s9 6-id611x3,9s3 8-idmaj7min13x3,11s5 9-imin9min13x7,11s13 (=0-G Bb B Db F F# =1-G B D F# 0-Ab C =2-G Db Ab 0-A C Eb =6-G B 0-Db E F C =8-G Db D F# A 0-Eb 9-G Bb D Ab Eb 0-E)&lt;br /&gt;0,1,2,6,7 - 0-idmaj711x3,9s7 1-imaj7min9maj11x3 2-imin9min13x3,7,11s9 6-idmaj711x3,9s3 7-idmin911x3,7s5 (=0-G Db F F# C =1-G D F# 0-Ab C# =2-G D Ab 0-A Eb =6-G B 0-Db F# C =7-G Db 0-D Ab C)&lt;br /&gt;0,1,2,6,7,10 - 0-idmaj711x3s7 1-imaj7min9maj11 2-Imin9min13x7,11s9 6-idmaj7min13x3,9s3 7-idmin9min13x3,7s5 10-id6min13x5,9,11s3 (=0-G Db F F# A C =1-G Bb D F# 0-Ab C# =2-G B D Ab 0-A Eb =6-G B 0-Db F# C Eb =7-G Db 0-D Ab C Eb =10-G Bb B E 0-F Eb)&lt;br /&gt;0,1,2,6,7,9 - 0-idmaj711x9s7 1-Imaj7min9maj11 2-imin9min13x3,7s9 6-id6maj711x3,9s3 7-idmin911x3s5 9-imin13x7,11s13 (=0-G Bb Db F F# C =1-G B D F# 0-Ab C# =2-G D Ab 0-A C Eb =6-G B 0-Db E F# C =7-G Db 0-D F Ab C =9-G Bb D A Eb 0-E)&lt;br /&gt;0,1,2,6,7,9,10 - 0-idmaj711s7 1-imaj7min9maj11s3 2-Imin9min13x7s9 6-id6maj7min9x3,9s3 7-id6min911s5 9-imaj7min13x11s13 10-id6min9min13x5,11s3 (=0-G Bb Db F F# A C =1-G Bb B D F# 0-Ab C# =2-G B D Ab 0-A C Eb =6-G B 0-Db E F# C Eb =7-G Db 0-D E F Ab C =9-G Bb D F# A Eb 0-E =10-G Bb B E 0-F Ab Eb) - (good: G B D F# Bb C# Ab)&lt;br /&gt;0,1,2,6,7,8 - 0-idmaj711x3,9s3,7 1-idmaj7min911x3s5 2-imin9maj11min13x3,7s9 (=0-G B Db F F# C =1-G Db D F# 0-Ab C =2-G D Ab 0-A C# Eb) - (S)&lt;br /&gt;0,1,2,5 - 0-imaj7x3s7 1-imaj7min9min13x3,5,11 2-imin913x3,5,7,11s9 5-i11x5,7,9s3 (=0-G D F F# =1-G F# 0-Ab Eb =2-G Ab 0-A E =5-G Bb B 0-C)&lt;br /&gt;0,1,2,5,10 - 0-imaj79x3s7 1-imaj7min9min13x5,11 2-Imin913x5,7,11s9 5-i11x7,9s3 10-id6min13x3,5,9 (=0-G D F F# A =1-G Bb F# 0-Ab Eb =2-G B Ab 0-A E =5-G Bb B D 0-C =10-G E 0-F C Eb)&lt;br /&gt;0,1,2,5,9 - 0-imaj7s7 1-Imaj7min9min13x5,11 2-imin913x3,5,7s9 5-imin13x5,7,9s3 9-Imin13x7,9,11s13 (=0-G Bb D F F# =1-G B F# 0-Ab Eb =2-G Ab 0-A C E =5-G Bb B 0-C Eb =9-G B D Eb 0-E)&lt;br /&gt;0,1,2,5,9,10 - 0-imaj79s7 1-imaj7min9min13x5,11s3 2-Imin913x5,7s9 5-imin13x7,9s3 9-Imaj7min13x9,11s13 10-id6min9min13x3,5 (=0-G Bb D F F# A =1-G Bb B F# 0-Ab Eb =2-G B Ab 0-A C E =5-G Bb B D 0-C Eb =9-G B D F# Eb 0-E =10-G E 0-F Ab C Eb)&lt;br /&gt;0,1,2,5,8 - 0-Imaj7s7 1-imaj7min9min13x3,5 2-id6min9x3,7s9 5-i13x5,7,9s3 8-idmin13x7,9,11s5 (=0-G B D F F# =1-G F# 0-Ab C Eb =2-G Db E Ab 0-A =5-G Bb B 0-C E =8-G Bb Db D 0-Eb)&lt;br /&gt;0,1,2,5,8,10 - 0-Imaj79s7 1-imaj7min9min13x5 2-id6min9x3,7s3,9 5-i13x7,9s3 8-idmin13x9,11s5 10-id6min13x3,5 (=0-G B D F F# A =1-G Bb F# 0-Ab C Eb =2-G B Db E Ab 0-A =5-G Bb B D 0-C E =8-G Bb Db D F 0-Eb =10-G E 0-F A C Eb)&lt;br /&gt;0,1,2,5,8,9 - 0-imaj7s3,7 1-Imaj7min9min13x5 2-id6min911x3,7s9 5-Iaug13x7,9smin3 8-idmaj7min13s5 9-Imin9min13x7,11s13 (=0-G Bb B D F F# =1-G B F# 0-Ab C Eb =2-G Db E Ab 0-A C =5-G Bb B D# 0-C E =8-G Bb Db D F# 0-Eb =9-G B D Ab Eb 0-E)&lt;br /&gt;0,1,2,5,7 - 0-imaj711x3,9s7 1-idmaj7min9min13x3,11 2-imin913x3,7,11s9 5-i11x5,9s3 7-id11x3,7s5 (=0-G D F F# C =1-G Db F# 0-Ab Eb =2-G D Ab 0-A E =5-G Bb B F 0-C =7-G Db 0-D A C)&lt;br /&gt;0,1,2,5,7,10 - 0-imaj711x3s7 1-idmaj7min9min13x11 2-Imin913x7,11s9 5-i11x9s3 7-id611x3,7s5 10-id6min13x5,9 (=0-G D F F# A C =1-G Bb Db F# 0-Ab Eb =2-G B D Ab 0-A E =5-G Bb B D F 0-C =7-G Db 0-D E A C =10-G Bb E 0-F C Eb)&lt;br /&gt;0,1,2,5,7,9 - 0-imaj711x9s7 1-idmaj7min9min13x3,11s3 2-imin913x3,7s9 5-Iaug11x9smin3 7-id11x3s5 9-Iaug13x7,11s5 (=0-G Bb D F F# C =1-G B Db F# 0-Ab Eb =2-G D Ab 0-A C E =5-G Bb B D# F 0-C =7-G Db 0-D F A C =9-G B D D# A 0-E)&lt;br /&gt;0,1,2,5,7,9,10 - 0-imaj711s7 1-idmaj7min9min13x11s3 2-Imin9x7s9 5-imin13x9s3 7-id611x3s5 9-Imaj7min13x11s13 10-id6min9min13x5 (=0-G Bb D F F# A C =1-G Bb B Db F# 0-Ab Eb =2-G B D Ab 0-A C E =5-G Bb B D F 0-C Eb =7-G Db 0-D E F A C =9-G B D F# A Eb 0-E =10-G Bb E 0-F Ab C Eb)&lt;br /&gt;0,1,2,5,7,8 - 0-Imaj7x9s7 1-idmaj7min9min13x3 2-imin9maj1113x3s9 5-i13x5,9s3 7-idmaj711x3s5 8-imin9maj11min13x7 (=0-G B D F F# C =1-G Db F# 0-Ab C Eb =2-G D Ab 0-A C# E =5-G Bb B F 0-C E =7-G Db 0-D F# A C =8-G Bb D Ab C# 0-Eb)&lt;br /&gt;0,1,2,5,7,8,10 - 0-Imaj711s7 1-idmaj7min9min13 2-Imin9maj1113x7s9 5-i13x9s3 7-id6maj711x3s5 8-idmin9min13x11s5 10-id6min13x5 (=0-G B D F F# A C =1-G Bb Db F# 0-Ab C Eb =2-G B D Ab 0-A C# E =5-G Bb B D F 0-C E =7-G Db 0-D E F# A C =8-G Bb Db D F Ab 0-Eb =10-G Bb E 0-F A C Eb)&lt;br /&gt;0,1,2,5,6 - 0-idmaj7x3s5,7 1-imaj7min9min13x3,11 2-iaugmin913x3,7,11s9 5-imaj711x5,9s3 6-idmin911x3,7s3 (=0-G Db D F F# =1-G D F# 0-Ab Eb =2-G D# Ab 0-A E =5-G Bb B F# 0-C =6-G B 0-Db Ab C)&lt;br /&gt;0,1,2,5,6,10 - 0-imaj7maj11x3s7 1-imaj7min9min13x11 2-Iaugmin913x7,11s9 5-imaj711x9s3 6-idmin9min13x3,7s3 10-id6min13x3,5,9s3 (=0-G D F F# A C# =1-G Bb D F# 0-Ab Eb =2-G B D# Ab 0-A E =5-G Bb B D F# 0-C =6-G B 0-Db Ab C Eb =10-G B E 0-F C Eb)&lt;br /&gt;0,1,2,5,6,9 - 0-imaj7maj11x9s7 1-Imaj7min9min13x11 2-iaugmin913x3,7s9 5-Iaugmaj711x9smin3 6-id6min911x3,7s3 9-imin13x7,9,11s3,13 (=0-G Bb D F F# C# =1-G B D F# 0-Ab Eb =2-G D# Ab 0-A C E =5-G Bb B D# F# 0-C =6-G B 0-Db E Ab C =9-G Bb B D Eb 0-E)&lt;br /&gt;0,1,2,5,6,9,10 - 0-imaj7maj11s7 1-imaj7min9min13x11s3 2-Iaugmin913x7s9 5-imaj7min13x9s3 6-id6min9min13x3,7s3 9-imaj7min13x9,11s3,13 10-id6min9min13x3,5s3 (=0-G Bb D F F# A C# =1-G Bb B D F# 0-Ab Eb =2-G B D# Ab 0-A C E =5-G Bb B D F# 0-C Eb =6-G B 0-Db E Ab C Eb =9-G Bb B D F# Eb 0-E =10-G B E 0-F Ab C Eb)&lt;br /&gt;0,1,2,5,6,8 - 0-Imaj7maj11x9s7 1-imaj7min9min13x3 2-id6min9min13x3,7,11s9 5-imaj713x5,9s3 6-idmin911x3s3 8-imaj11min13x7 (=0-G B D F F# C# =1-G D F# 0-Ab C Eb =2-G Db E Ab 0-A Eb =5-G Bb B F# 0-C E =6-G B Db F Ab C =8-G Bb D A C# 0-Eb)&lt;br /&gt;0,1,2,5,6,8,10 - 0-Imaj7maj11s7 1-imaj7min9min13 2-id6min9min13x3,7,11s3,9 5-imaj713x9s3 6-idmin9min13x3s3 8-imaj11min13 10-id6min13x3,5s3 (=0-G B D F F# A C# =1-G Bb D F# 0-Ab C Eb =2-G B Db E Ab 0-A Eb =5-G Bb B D F# 0-C E =6-G B 0-Db F Ab C Eb =8-G Bb D F A C# 0-Eb =10-G B E 0-F A C Eb)&lt;br /&gt;0,1,2,5,6,8,9 - 0-imaj7maj11x9s3,7 1-Imaj7min9min13 2-id6min9min13x3,7s9 5-Iaugmaj713x9smin3 6-id6min911x3s3 8-imaj7maj11min13 9-imin9min13x7,11s3,13 (=0-G Bb B D F F# C# =1-G B D F# 0-Ab C Eb =2-G Db E Ab 0-A C Eb =5-G Bb B D# F# 0-C E =6-G B 0-Db E F Ab C =8-G Bb D F# A C# 0-Eb =9-G Bb B D Ab Eb 0-E)&lt;br /&gt;0,1,2,5,6,7 - 0-idmaj711x9s5,7 1-idmaj7min9min13x3,11s5 2-imin9min13x3,7,11s9,13 5-imaj711x5,9s3,7 6-idmin911x3s3 7-imin9maj11x3,7s9,11 (=0-G Db D F F# C =1-G Db D F# 0-Ab Eb =2-G D Ab 0-A Eb E =5-G Bb B F F# 0-C =6-G B 0-Db F Ab C =7-G 0-D Ab A C C#)&lt;br /&gt;0,1,2,5,6,7,10 - 0-imaj7maj11x3s7,11 1-idmaj7min9min13x11s5 2-Imin9min13x7,11s9,13 5-imaj711x9s3,7 6-idmaj7min9min13x3s3 7-id6min911x3,7s5,9 10-id6min13x5,9s3 (=0-G D F F# A C C# =1-G Bb Db D F# 0-Ab Eb =2-G B D Ab 0-A Eb E =5-G Bb B D F F# 0-C =6-G B 0-Db F# Ab C Eb =7-G Db 0-D E Ab A C =10-G Bb B E 0-F C Eb)&lt;br /&gt;0,1,2,4 - 0-iaugmaj7x3s7 1-imaj7min913x3,5,11 2-imin9x3,5s9 4-i9x5,7s3 (=0-G D# F F# =1-G F# 0-Ab E =2-G F Ab 0-A =4-G Bb 0-B A)&lt;br /&gt;0,1,2,4,10 - 0-iaugmaj79x3s7 1-imaj7min913x5,11 2-Imin9x5s9 4-id9x7s3 10-id6min13x3,9,11 (=0-G D# F F# A =1-G Bb F# 0-Ab E =2-G B F Ab 0-A =4-G Bb 0-B Db A =10-G Db E 0-F Eb)&lt;br /&gt;0,1,2,4,9 - 0-iaugmaj7x3smin3,7 1-Imaj7min913x5,11 2-imin911x3,5s9 4-i9x7s3 9-imin13x3,7,9s13 (=0-G Bb D# F F# =1-G B F# 0-Ab E =2-G F Ab 0-A C =4-G Bb 0-B D A =9-G D C Eb 0-E)&lt;br /&gt;0,1,2,4,9,10 - 0-iaugmaj79smin3 1-imaj7min913x5,11s3 2-Imin911x5s9 4-imaj11x7s3 9-imaj7min13x3,9s13 10-id6min9min13x3,11 (=0-G Bb D# F F# A =1-G Bb B F# 0-Ab E =2-G B F Ab 0-A C =4-G Bb 0-B D A C# =9-G D F# C Eb 0-E =10-G Db E 0-F Ab Eb)&lt;br /&gt;0,1,2,4,8 - 0-Iaugmaj7s7 1-imaj7min913x3,5 2-idmin9x3s9 4-Iaug9x7smin3 8-Imaj11min13x7,9 (=0-G B D# F F# =1-G F# 0-Ab C E =2-G Db F Ab 0-A =4-G Bb 0-B D# A =8-G B D C# 0-Eb)&lt;br /&gt;0,1,2,4,8,10 - 0-Iaugmaj79s7 1-imaj7min913x5 2-idmin9x3s3,9 4-idmin13x7,11s3 9-Imaj11min13x9 10-id6min13x3,11 (=0-G B D# F F# A =1-G Bb F# 0-Ab C E =2-G B Db F Ab 0-A =4-G Bb 0-B Db A Eb =9-G B D F C# 0-Eb =10-G Db E 0-F A Eb)&lt;br /&gt;0,1,2,4,8,9 - 0-Iaugmaj7smin3,7 1-Imaj7min913x5 2-idmin911x3s9 4-imin13x7,11s3 8-Imaj7maj11min13x9 9-imin9min13x3,7s13 (=0-G Bb B D# F F# =1-G B F# 0-Ab C E =2-G Db F Ab 0-A C =4-G Bb 0-B D A Eb =8-G B D F# C# 0-Eb =9-G D Ab C Eb 0-E)&lt;br /&gt;0,1,2,4,7 - 0-iaugmaj711x3,9s7 1-idmaj7min913x3,11 2-imin9x3s9 4-id69x5,7s3 7-id11x7,9s5 (=0-G D# F F# C =1-G Db F# 0-Ab E =2-G D F Ab 0-A =4-G Bb 0-B E A =7-G Bb Db 0-D C)&lt;br /&gt;0,1,2,4,7,10 - 0-iaugmaj711x3s7 1-idmaj7min913x11 2-Imin9s9 4-id69x7s3 7-id611x7,9s5 10-id6min13x9,11 (=0-G D# F F# A C =1-G Bb Db F# 0-Ab E =2-G B D F Ab 0-A =4-G Bb 0-B Db E A =7-G Bb Db 0-D E C =10-G Bb Db E 0-F Eb)&lt;br /&gt;0,1,2,4,7,9 - 0-iaugmaj711x3,9smin3,7 1-idmaj7min913x3,11s3 2-imin911x3s9 4-i13x7,11s3 7-id11x9s5 9-imin13x3,7s13 (=0-G Bb D# F F# C =1-G B Db F# 0-Ab E =2-G D F Ab 0-A C =4-G Bb 0-B D A E =7-G Bb Db 0-D F C =9-G D A C Eb 0-E)&lt;br /&gt;0,1,2,4,7,9,10 - 0-iaugmaj711x3smin3,7 1-idmaj7min913x11s3 2-Imin911s9 4-imaj1113x7s3 7-id611x9s5 9-imaj7min13x3s13 10-id6min9min13x11 (=0-G Bb D# F F# A C =1-G Bb B Db F# 0-Ab E =2-G B D F Ab 0-A C =4-G Bb 0-B D A C# E =7-G Bb Db 0-D E F C =9-G D F# A C Eb 0-E =10-G Bb Db E 0-F Ab Eb)&lt;br /&gt;0,1,2,4,7,8 - 0-Iaugmaj711x9s7 1-idmaj7min913x3 2-imin9maj11x3s9 4-iaug13x7,11smin3 7-idmaj711x9s5 8-Imin9maj11min13 (=0-G B D# F F# C =1-G Db F# 0-Ab C E =2-G D F Ab 0-A C# =4-G Bb 0-B D# A E =7-G Bb Db 0-D F# C =8-G B D Ab C# 0-Eb)&lt;br /&gt;0,1,2,4,7,8,10 - 0-Iaugmaj711s7 1-idmaj7min913 2-Imin9maj11s9 4-id6min13x7,11s3 4-Iaugmaj1113x7smin3 7-id6maj711x9s5 8-Imin9maj11min13 10-id6min13x11 (=0-G B D# F F# A C =1-G Bb Db F# 0-Ab C E =2-G B D F Ab 0-A C# =4-G Bb 0-B Db E A Eb =4-G Bb 0-B D# A C# E =7-G Bb Db 0-D E F# C =8-G B D F Ab C# 0-Eb =10-G Bb Db E 0-F A Eb)&lt;br /&gt;0,1,2,4,7,8,9 - 0-Iaugmaj711x9smin3 1-idmaj7min913x3s3 2-idmin911x3s5,9 4-imin13x7,11s3,13 7-idmaj711x9s5,7 8-Imaj7min9maj11min13 9-imin9min13x3,7s9,13 (=0-G Bb B D# F F# C =1-G B Db F# 0-Ab C E =2-G Db D F Ab 0-A C =4-G Bb 0-B D A Eb E =7-G Bb Db 0-D F F# C =8-G B D F# Ab C# 0-Eb =9-G D Ab A C Eb 0-E)&lt;br /&gt;0,1,2,4,6 - 0-idmaj7min13x3,9,11s7 0-iaugmaj7maj11x3,9s7 1-imaj7min913x3,11 2-iaugmin9x3s9 4-i9x5s3 6-id11x3,7s3 (=0-G Db F F# Eb =0-G D# F F# C# =1-G D F# 0-Ab E =2-G D# F Ab 0-A =4-G Bb 0-B F A =6-G B 0-Db A C)&lt;br /&gt;0,1,2,4,6,10 - 0-idmaj7min13x3,11s7 0-iaugmaj7maj11x3s7 1-imaj7min913x11 2-Iaugmin9s9 4-id9s3 6-Iaugmaj11x7s11 6-idmin13x3,7s3 10-id6min13x3,9,11s3 (=0-G Db F F# A Eb =0-G D# F F# A C# =1-G Bb D F# 0-Ab E =2-G B D# F Ab 0-A =4-G Bb 0-B Db F A =6-G B D# A C 0-C# =6-G B Db A C Eb =10-G B Db E 0-F Eb)&lt;br /&gt;0,1,2,4,6,9 - 0-idmaj7min13x9,11s7 1-Imaj7min913x11 2-iaugmin911x3s9 4-i9s3 6-id611x3,7s3 9-imin13x7,9s13 (=0-G Bb Db F F# Eb =1-G B D F# 0-Ab E =2-G D# F Ab 0-A C =4-G Bb 0-B D F A =6-G B 0-Db E A C =9-G Bb D C Eb 0-E)&lt;br /&gt;0,1,2,4,6,9,10 - 0-idmaj7min13x11s7 1-imaj7min913x11s3 2-Iaugmin911s9 4-imaj11s3 6-id6min13x3,7s3 9-imaj7min13x9s13 10-id6min9min13x3,11s3 (=0-G Bb Db F F# A Eb =1-G Bb B D F# 0-Ab E =2-G B D# F Ab 0-A C =4-G Bb 0-B D F A C# =6-G B 0-Db E A C Eb =9-G Bb D F# C Eb 0-E =10-G B Db E 0-F Ab Eb)&lt;br /&gt;0,1,2,4,6,8 - 0-idmaj7min13x3,9,11s3,7 0-Iaugmaj7maj11x9s7 1-imaj7min913x3 2-idmin9min13x3,11s9 2-Iaugmin9maj11x3s9 4-Iaug9smin3 6-id11x3s3 8-idmin13x3,7,11s3,5 8-Imaj11min13x7 (=0-G B Db F F# Eb =0-G B D# F F# C# =1-G D F# 0-Ab C E =2-G Db F Ab 0-A Eb =2-G D# F Ab 0-A C# =4-G Bb 0-B D# F A =6-G B 0-Db F A C =8-G B Db D A 0-Eb =8-G B D A C# 0-Eb)&lt;br /&gt;0,1,2,4,6,8,10 - 0-Iaugmaj7maj11s7 0-idmaj7min13x3,11s3,7 1-imaj7min913 2-Iaugmin9maj11s9 2-idmin9min13x3,11s3,9 4-Iaugmaj11smin3 4-idmin13x11s3 6-idmin13x3s3 8-Imaj11min13 10-id6min13x3,11s3 (=0-G B D# F F# A C# =0-G B Db F F# A Eb =1-G Bb D F# 0-Ab C E =2-G B D# F Ab 0-A C# =2-G B Db F Ab 0-A Eb =4-G Bb 0-B D# F A C# =4-G Bb 0-B Db F A Eb =6-G B 0-Db F A C Eb =8-G B D F A C# 0-Eb =10-G B Db E 0-F A Eb)&lt;br /&gt;0,1,2,4,6,8,9 - 0-idmaj7min13x9,11s3,7 0-Iaugmaj7maj11x9smin3,7 1-Imaj7min913 2-idmin9min13x3s9 4-imin13x11s3 6-id611x3s3 8-Imaj7maj11min13 9-imin9min13x7s13 (=0-G Bb B Db F F# Eb =0-G Bb B D# F F# C# =1-G B D F# 0-Ab C E =2-G Db F Ab 0-A C Eb =4-G Bb 0-B D F A Eb =6-G B 0-Db E F A C =8-G B D F# A C# 0-Eb =9-G Bb D Ab C Eb 0-E)&lt;br /&gt;0,1,2,4,6,7 - 0-idmaj7min13x3,9s7 1-idmaj7min913x3,11s5 2-imin9min13x3,11s9 4-i13x5,11s3 6-idmaj711x3 7-idmin911x7s5 (=0-G Db F F# C Eb =1-G Db D F# 0-Ab E =2-G D F Ab 0-A Eb =4-G Bb 0-B F A E =6-G B 0-Db F# A C =7-G Bb Db 0-D Ab C)&lt;br /&gt;0,1,2,4,6,7,10 - 0-idmaj7min13x3s7 1-idmaj7min913x11s5 2-Imin9min13x11s9 4-id69s3 6-idmaj7min13x3s3 7-id6min911x7s5 10-id6min13x9,11s3 (=0-G Db F F# A C Eb =1-G Bb Db D F# 0-Ab E =2-G B D F Ab 0-A Eb =4-G Bb 0-B Db E F A =6-G B 0-Db F# A C Eb =7-G Bb Db 0-D E Ab C =10-G Bb B Db E 0-F Eb)&lt;br /&gt;0,1,2,4,6,7,9 - 0-idmaj7min13x9s7 1-idmaj7min913x3,11s3,5 2-imin9min13x3s9 4-i13x11s3 6-id6maj711x3s3 7-idmin911s5 9-imin13x7s13 (=0-G Bb Db F F# C Eb =1-G B Db D F# 0-Ab E =2-G D F Ab 0-A C Eb =4-G Bb 0-B D F A E =6-G B 0-Db E F# A C =7-G Bb Db 0-D F Ab C =9-G Bb D A C Eb 0-E)&lt;br /&gt;0,1,2,4,6,7,9,10 - 0-idmaj7min13s7 1-idmaj7min913x11s3,5 2-Imin9min13s9 4-imaj1113s3 6-id6maj7min13x3s3 6-Iaugmaj7maj1113s11 7-id6min911s5 7-imin9maj1113s11 9-imaj7min13s13 10-id6min9min13x11s3 (=0-G Bb Db F F# A C Eb =1-G Bb B Db D F# 0-Ab E =2-G B D F Ab 0-A C Eb =4-G Bb 0-B D F A C# E =6-G B 0-Db E F# A C Eb =6-G B D# F# A C C# E =7-G Bb Db 0-D E F Ab C =7-G Bb 0-D F Ab C C# E =9-G Bb D F# A C Eb 0-E =10-G Bb B Db E 0-F Ab Eb) - (good: G B D F# Bb Db E Ab)&lt;br /&gt;0,1,2,4,6,7,8 - 0-idmaj7min13x3,9s3,7 0-Iaugmaj7maj11x9s7,11 1-idmaj7min913x3s5 2-imin9maj11min13x3s9 4-Iaug13x11smin3 6-idmaj711x3s3,7 7-idmaj7min911s5 -Imin9maj11min13x7s9 (=0-G B Db F F# C Eb =0-G B D# F F# C C# =1-G Db D F# 0-Ab C E =2-G D F Ab 0-A C# Eb =4-G Bb 0-B D# F A E =6-G B 0-Db F F# A C =7-G Bb Db 0-D F# Ab C =8-G B D Ab A C# 0-Eb)&lt;br /&gt;0,1,2,4,6,7,8,10 - 0-Iaugmaj7maj11s7,11 0-idmaj7min13x3s3,7 1-idmaj7min913s5 1-id6maj7min911s5 1-imaj7min9maj1113s11 2-Imin9maj11min13s9 4-id6min13x11s3 (=0-G B D# F F# A C C# =0-G B Db F F# A C Eb =1-G Bb Db D F# 0-Ab C E =1-G Bb Db D E F# 0-Ab C =1-G Bb D F# 0-Ab C C# E =2-G B D F Ab 0-A C# Eb =4-G Bb 0-B Db E F A Eb) (S)&lt;br /&gt;0,1,2,4,5 - 0-imaj7min13x3,9,11s7 1-iaugmaj7min913x3,11 2-imin913x3,5,11s9 4-imaj79x5s3 5-imin911x5,7s3 (=0-G D F F# Eb =1-G D# F# 0-Ab E =2-G F Ab 0-A E =4-G Bb 0-B F# A =5-G Bb B Ab 0-C)&lt;br /&gt;0,1,2,4,5,10 - 0-imaj7min13x3,11s7 1-iaugmaj7min913x3,11smin3 2-Imin913x5,11s9 4-idmaj79s3 5-imin911x7,11s3 10-id6min13x3,9 (=0-G D F F# A Eb =1-G Bb D# F# 0-Ab E =2-G B F Ab 0-A E =4-G Bb 0-B Db F# A =5-G Bb B D Ab 0-C =10-G Db E 0-F C Eb)&lt;br /&gt;0,1,2,4,5,9 - 0-imaj7min13x9,11s7 1-Iaugmaj7min913x11 2-imin913x3,5s9 4-imaj79s3 5-Iaugmin911x7smin3 9-Imin13x7,9s13 (=0-G Bb D F F# Eb =1-G B D# F# 0-Ab E =2-G F Ab 0-A C E =4-G Bb 0-B D F# A =5-G Bb B D# Ab 0-C =9-G B D C Eb 0-E)&lt;br /&gt;0,1,2,4,5,9,10 - 0-imaj7min13x11s7 1-Iaugmaj7min913x11smin3 2-Imin913x5s9 4-imaj7maj11s3 5-imin9min13x7s3 9-Imaj7min13x9s13 10-id6min9min13x3 (=0-G Bb D F F# A Eb =1-G Bb B D# F# 0-Ab E =2-G B F Ab 0-A C E =4-G Bb 0-B D F# A C# =5-G Bb B D Ab 0-C Eb =9-G B D F# C Eb 0-E =10-G Db E 0-F Ab C Eb)&lt;br /&gt;0,1,2,4,5,8 - 0-Iaugmaj7s5,7 0-Imaj7min13x9,11s7 1-iaugmaj7min913x3 2-id6min9x3s9 4-Iaugmaj79smin3 5-imin913x5,7s3 8-idmin13x7,9,11s3,5 8-imaj11min13x7,9s3 (=0-G B D D# F F# =0-G B D F F# Eb =1-G D# F# 0-Ab C E =2-G Db E F Ab 0-A =4-G Bb 0-B D# F# A =5-G Bb B Ab 0-C E =8-G Bb B Db D 0-Eb =8-G Bb B D C# 0-Eb)&lt;br /&gt;0,1,2,4,5,8,10 - 0-Imaj7min13x11s7 1-iaugmaj7min913x3smin3 2-id6min9x3s3,9 4-idmaj7min13x11s3 4-Iaugmaj7maj11smin3 5-imin913x7s3 8-imaj11min13x9s3 8-Iaugmaj11x9smin3,5 8-idmin13x9,11s3,5 10-id6min13x3 (=0-G B D F F# A Eb =1-G Bb D# F# 0-Ab C E =2-G B Db E F Ab 0-A =4-G Bb 0-B Db F# A Eb =4-G Bb 0-B D# F# A C# =5-G Bb B D Ab 0-C E =8-G Bb B D F C# 0-Eb =8-G Bb B D 0-D# F C# =8-G Bb B Db D F 0-Eb =10-G Db E 0-F A C Eb)&lt;br /&gt;0,1,2,4,5,8,9 - 0-Iaugmaj7smin3,5,7 0-imaj7min13x9,11s3,7 1-Iaugmaj7min913 2-id6min911x3s9 4-imaj7min13x11s3 4-Iaugmaj79smin3,5 5-Iaugmin913x7smin3 8-idmaj7min13x9,11s3,5 8-imaj7maj11min13x9s3 9-Imin9min13x7s13 9-Iaugmin913x7s5 (=0-G Bb B D D# F F# =0-G Bb B D F F# Eb =1-G B D# F# 0-Ab C E =2-G Db E F Ab 0-A C =4-G Bb 0-B D F# A Eb =4-G Bb 0-B D D# F# A =5-G Bb B D# Ab 0-C E =8-G Bb B Db D F# 0-Eb =8-G Bb B D F# C# 0-Eb =9-G B D Ab C Eb 0-E =9-G B D D# Ab C 0-E)&lt;br /&gt;0,1,2,4,5,7 - 0-imaj7min13x3,9s7 0-iaugmaj711x3,9s5,7 1-id6maj7min9min13x11 1-iaugmaj7min9maj1113x3 2-imin913x3,11s9 4-imaj713x5,11s3 5-imin911x5s3 7-id11x7s5 7-imaj11x7s11 (=0-G D F F# C Eb =0-G D D# F F# C =1-G Db E F# 0-Ab Eb =1-G D# F# 0-Ab C# E =2-G D F Ab 0-A E =4-G Bb 0-B F# A E =5-G Bb B F Ab 0-C =7-G Bb Db 0-D A C =7-G Bb 0-D A C C#)&lt;br /&gt;0,1,2,4,5,7,10 - 0-imaj7min13x3s7 1-id6maj7min9min13x11 1-iaugmaj7min9maj1113x3smin3 2-Imin913x11s9 4-id6maj79s3 5-imin911s3 7-id611x7s5 7-imaj1113x7s11 10-id6min13x9 (=0-G D F F# A C Eb =1-G Bb Db E F# 0-Ab Eb =1-G Bb D# F# 0-Ab C# E =2-G B D F Ab 0-A E =4-G Bb 0-B Db E F# A =5-G Bb B D F Ab 0-C =7-G Bb Db 0-D E A C =7-G Bb 0-D A C C# E =10-G Bb Db E 0-F C Eb)&lt;br /&gt;0,1,2,4,5,7,9 - 0-imaj7min13x9s7 1-Iaugmaj7min9maj1113 1-id6maj7min9min13x3,11s3 2-imin913x3s9 4-imaj713x11s3 5-Iaugmin911smin3 7-id11s5 9-Imin13x7s13 9-Iaug13x7s5 (=0-G Bb D F F# C Eb =1-G B D# F# 0-Ab C# E =1-G B Db E F# 0-Ab Eb =2-G D F Ab 0-A C E =4-G Bb 0-B D F# A E =5-G Bb B D# F Ab 0-C =7-G Bb Db 0-D F A C =9-G B D A C Eb 0-E =9-G B D D# A C 0-E)&lt;br /&gt;0,1,2,4,5,7,9,10 - 0-imaj7min13s7 1-id6maj7min9min13x11s3 1-Iaugmaj7min9maj1113smin3 2-Imin913s9 4-id6maj79s3,5 4-imaj7maj1113s3 5-imin9min13s3 7-id611s5 7-imaj1113s11 9-Imaj7min13s13 9-Iaugmaj713s5 10-id6min9min13 (=0-G Bb D F F# A C Eb =1-G Bb B Db E F# 0-Ab Eb =1-G Bb B D# F# 0-Ab C# E =2-G B D F Ab 0-A C E =4-G Bb 0-B Db D E F# A =4-G Bb 0-B D F# A C# E =5-G Bb B D F Ab 0-C Eb =7-G Bb Db 0-D E F A C =7-G Bb 0-D F A C C# E =9-G B D F# A C Eb 0-E =9-G B D D# F# A C 0-E =10-G Bb Db E 0-F Ab C Eb)&lt;br /&gt;0,1,2,4,5,7,8 - 0-Imaj7min13x9s7 1-id6maj7min9min13x3 2-imin9maj1113x3s9 4-Iaugmaj713x11smin3 5-imin913x5s3 7-idmaj711s5 7-imaj7maj11s11 8-idmin9min13x7,11s3,5 8-imin9maj11min13x7s3 8-Iaugmin9maj11x7smin3,5 (=0-G B D F F# C Eb =1-G Db E F# 0-Ab C Eb =2-G D F Ab 0-A C# E =4-G Bb 0-B D# F# A E =5-G Bb B F Ab 0-C E =7-G Bb Db 0-D F# A C =7-G Bb 0-D F# A C C# =8-G Bb B Db D Ab 0-Eb =8-G Bb B D Ab C# 0-Eb =8-G Bb B D 0-D# Ab C#)&lt;br /&gt;0,1,2,4,5,7,8,10 - 0-Imaj7min13s7 1-id6maj7min9min13 2-Imin9maj1113s9 4-id6maj7min13x11s3 4-Iaugmaj7maj1113smin3 5-imin913s3 7-id6maj711s5 8-idmin9min13x11s3,5 8-Iaugmin9maj11smin3,5 8-imin9maj11min13s3 10-id6min13 10-iaugmaj1113x3smin3,11 (=0-G B D F F# A C Eb =1-G Bb Db E F# 0-Ab C Eb =2-G B D F Ab 0-A C# E =4-G Bb 0-B Db E F# A Eb =4-G Bb 0-B D# F# A C# E =5-G Bb B D F Ab 0-C E =7-G Bb Db 0-D E F# A C =8-G Bb B Db D F Ab 0-Eb =8-G Bb B D 0-D# F Ab C# =8-G Bb B D F Ab C# Eb =10-G Bb Db E 0-F A C Eb =10-G Bb D# 0-F A C C# E)&lt;br /&gt;0,1,2,4,5,7,8,9 - 0-imaj7min13x9s3,7 1-id6maj7min9min13x3s3 1-Iaugmaj7min9maj1113s11 2-id6min911x3s5,9 2-imin9maj1113x3s9,11 4-imaj7min13x11s3,13 4-Iaugmaj713x11smin3,5 5-Iaugmin913smin3 7-idmaj711s5,7 7-imaj7maj11s7,11 8-idmaj7min9min13x11s3,5 8-imaj7min9maj11min13s3 9-Imin9min13x7s9,13 9-Iaugmin913x7s5,9 (=0-G Bb B D F F# C Eb =1-G B Db E F# 0-Ab C Eb =1-G B D# F# 0-Ab C C# E =2-G Db D E F Ab 0-A C =2-G D F Ab 0-A C C# E =4-G Bb 0-B D F# A Eb E =4-G Bb 0-B D D# F# A E =5-G Bb B D# F Ab C E =7-G Bb Db 0-D F F# A C =7-G Bb 0-D F F# A C C# =8-G Bb B Db D F# Ab 0-Eb =8-G Bb B D F# Ab C# 0-Eb =9-G B D Ab A C Eb 0-E =9-G B D D# Ab A C 0-E)&lt;br /&gt;0,1,2,4,5,6 - 0-idmaj7min13x3,9,11s5,7 0-imaj7maj11min13x3,9s7 0-iaugmaj7maj11x3,9s5,7 1-imaj7min9min13x3,11s13 1-iaugmaj7min913x3,11s5 2-iaugmin913x3,11s9 4-imaj79x5s3,7 5-imaj7min911x5s3 6-idmin911x3,7s3,9 (=0-G Db D F F# Eb =0-G D F F# C# Eb =0-G D D# F F# C# =1-G D F# 0-Ab Eb E =1-G D D# F# 0-Ab E =2-G D# F Ab 0-A E =4-G Bb 0-B F F# A =5-G Bb B F# Ab 0-C =6-G B 0-Db Ab A C)&lt;br /&gt;0,1,2,4,5,6,10 - 0-idmaj7min13x3,11s5,7 0-iaugmaj7maj11x3s5,7 0-imaj7maj11min13x3s7 1-iaugmaj7min913x3,11smin3,5 1-imaj7min9min13x11s13 2-Iaugmin913x11s9 4-idmaj79s3,7 5-imaj7min911s3 6-idmin9min13x3,7s3,9 6-iaugmin9maj11x7s9,11 10-id6min13x3,9s3 10-iaugmaj1113x9s11 (=0-G Db D F F# A Eb =0-G D D# F F# A C# =0-G D F F# A C# Eb =1-G Bb D D# F# 0-Ab E =1-G Bb D F# 0-Ab Eb E =2-G B D# F Ab 0-A E =4-G Bb 0-B Db F F# A =5-G Bb B D F# Ab 0-C =6-G B 0-Db Ab A C Eb =6-G B D# Ab A C 0-C# =10-G B Db E 0-F C Eb =10-G B D# 0-F C C# E)&lt;br /&gt;0,1,2,4,5,6,9 - 0-idmaj7min13x9,11s5,7 0-imaj7maj11min13x9s7 1-Iaugmaj7min913x11s5 1-Imaj7min9min13x11s13 2-iaugmin913x3s9 4-imaj79s3,7 5-Iaugmaj7min911smin3 6-id6min911x3,7s3,9 9-Iaug13x7,9smin3,5 9-imin13x7,9s3,13 (=0-G Bb Db D F F# Eb =0-G Bb D F F# C# Eb =1-G B D D# F# 0-Ab E =1-G B D F# 0-Ab Eb E =2-G D# F Ab 0-A C E =4-G Bb 0-B D F F# A =5-G Bb B D# F# Ab 0-C =6-G B 0-Db E Ab A C =9-G Bb B D D# C 0-E =9-G Bb B D C Eb 0-E)&lt;br /&gt;0,1,2,4,5,6,9,10 - 0-idmaj7min13x11s5,7 0-imaj7maj11min13s7 1-Iaugmaj7min913x11smin3,5 1-imaj7min9min13x11s3,13 2-Iaugmin913s9 4-imaj7maj11s3,7 5-imaj7min9min13s3 6-id6min9min13x3,7s3,9 6-Iaugmin9maj1113x7s9,11 9-imaj7min13x9s3,13 9-Iaugmaj713x9smin3,5 10-id6min9min13x3s3 10-Iaugmin913s11 (=0-G Bb Db D F F# A Eb =0-G Bb D F F# A C# Eb =1-G Bb B D D# F# 0-Ab E =1-G Bb B D F# 0-Ab Eb E =2-G B D# F Ab 0-A C E =4-G Bb 0-B D F F# A C# =5-G Bb B D F# Ab 0-C Eb =6-G B 0-Db E Ab A C Eb =6-G B D# Ab A C 0-C# E =9-G Bb B D F# C Eb 0-E =9-G Bb B D D# F# C 0-E =10-G B Db E 0-F Ab C Eb =10-G B D# 0-F Ab C C# E)&lt;br /&gt;0,1,2,4,5,6,8 - 0-idmaj7min13x3,9,11s3,5,7 0-Iaugmaj7maj11x9s5,7 0-Imaj7maj11min13x9s7 1-iaugmaj7min913x3s5 1-imaj7min9min13x3s13 2-id6min9min13x3s9 2-iaugmin9maj1113x3s9 4-Iaugmaj79smin3,7 5-imaj7min913x5s3 6-idmin911x3s3,9 8-idmin13x7,11s3,5 8-Iaugmaj11x7smin3,5 8-imaj11min13x7s3 (=0-G B Db D F F# Eb =0-G B D D# F F# C# =0-G B D F F# C# Eb =1-G D D# F# 0-Ab C E =1-G D F# 0-Ab C Eb E =2-G Db E F Ab 0-A Eb =2-G D# F Ab 0-A C# E =4-G Bb 0-B D# F F# A =5-G Bb B F# Ab 0-C E =6-G B 0-Db F Ab A C =8-G Bb B Db D A 0-Eb =8-G Bb B D 0-D# A C# =8-G Bb B D A C# 0-Eb)&lt;br /&gt;0,1,2,4,5,6,8,10 - 0-idmaj7min13x3,11s3,5,7 0-Iaugmaj7maj11s5,7 0-Imaj7maj11min13s7 1-Iaugmaj7min913x3smin3,5 1-imaj7min9min13s13 2-id6min9min13x3,11s3,9 2-Iaugmin9maj1113s9 4-idmaj7min13x11s3,7 4-Iaugmaj7maj11smin3,7 5-imaj7min913s3 6-idmin9min13x3s3,9 6-Iaugmin9maj11s9,11 8-idmin13x11s3,5 8-Iaugmaj11smin3,5 8-imaj11min13s3 10-id6min13x3s3 10-Iaugmaj1113s11 (=0-G B Db D F F# A Eb =0-G B D D# F F# A C# =0-G B D F F# A C# Eb =1-G Bb D D# F# 0-Ab C E =1-G Bb D F# 0-Ab C Eb E =2-G B Db E F Ab 0-A Eb =2-G B D# F Ab 0-A C# E =4-G Bb 0-B Db F F# A Eb =4-G Bb 0-B D# F F# A C# =5-G Bb B D F# Ab 0-C E =6-G B 0-Db F Ab A C Eb =6-G B D# F Ab A C 0-C# =8-G Bb B Db D F A 0-Eb =8-G Bb B D 0-D# F A C# =8-G Bb B D F A C# 0-Eb =10-G B Db E 0-F A C Eb =10-G B D# 0-F A C C# E)&lt;br /&gt;0,1,2,4,5,6,8,9 - 0-idmaj7min13x9,11s3,5,7 0-Iaugmaj7maj11x9smin3,5,7 0-imaj7maj11min13x9s3,7 1-Iaugmaj7min913s5 1-Imaj7min9min13s13 2-id6min9min13x3s9 2-iaugmin9maj1113x3s9,11 4-imaj7min13x11s3,7 5-Iaugmaj7min913smin3 6-id6min911x3s3,9 8-imaj7maj11min13s3 9-Iaugmin913x7smin3,5 9-imin9min13x7s3,13 (=0-G Bb B Db D F F# Eb =0-G Bb B D D# F F# C# =0-G Bb B D F F# C# Eb =1-G B D D# F# 0-Ab C E =1-G B D F# 0-Ab C Eb E =2-G Db E F Ab 0-A C Eb =2-G D# F Ab 0-A C C# E =4-G Bb 0-B D F F# A Eb =5-G Bb B D# F# Ab 0-C E =6-G B 0-Db E F Ab A C =8-G Bb B D F# A C# 0-Eb =9-G Bb B D D# Ab C 0-E =9-G Bb B D Ab C Eb 0-E)&lt;br /&gt;0,1,2,4,5,6,8,9,10 - 0-imaj7maj11min13s3,7 1-Iaugmaj7min913smin3,5 1-imaj7min9min13s3,13 2-id6min9min13x3s3,9 2-Iaugmin9maj1113s9,11 (=0-G Bb B D F F# A C# Eb =1-G Bb B D D# F# 0-Ab C E =1-G Bb B D F# 0-Ab C Eb E =2-G B Db E F Ab 0-A C Eb =2-G B D# F Ab 0-A C C# E) - (S)&lt;br /&gt;0,1,2,3 -  - 1-G F F# 0-Ab - (good: G F# Ab F)&lt;br /&gt;0,1,2,3,10 -  - &lt;br /&gt;0,1,2,3,9 -  - &lt;br /&gt;0,1,2,3,9,10 -  - &lt;br /&gt;0,1,2,3,8 -  - &lt;br /&gt;0,1,2,3,8,10 -  - &lt;br /&gt;0,1,2,3,8,9 -  - &lt;br /&gt;0,1,2,3,8,9,10 -  -  - (good: G Bb D Ab C A C#)&lt;br /&gt;0,1,2,3,7 -  - &lt;br /&gt;0,1,2,3,7,10 -  - &lt;br /&gt;0,1,2,3,7,9 -  - &lt;br /&gt;0,1,2,3,7,9,10 -  - &lt;br /&gt;0,1,2,3,7,8 -  - &lt;br /&gt;0,1,2,3,7,8,10 -  - &lt;br /&gt;0,1,2,3,7,8,9 -  - &lt;br /&gt;0,1,2,3,6 -  - &lt;br /&gt;0,1,2,3,6,10 -  - &lt;br /&gt;0,1,2,3,6,9 -  - &lt;br /&gt;0,1,2,3,6,9,10 -  - &lt;br /&gt;0,1,2,3,6,8 -  - &lt;br /&gt;0,1,2,3,6,8,10 -  - &lt;br /&gt;0,1,2,3,6,8,9 -  - &lt;br /&gt;0,1,2,3,6,8,9,10 -  - &lt;br /&gt;0,1,2,3,6,7 -  - &lt;br /&gt;0,1,2,3,6,7,10 -  - &lt;br /&gt;0,1,2,3,6,7,9 -  - &lt;br /&gt;0,1,2,3,6,7,9,10 -  -  - (good: G B D F# Bb Db F Ab)&lt;br /&gt;0,1,2,3,6,7,8 -  - &lt;br /&gt;0,1,2,3,6,7,8,10 -  - &lt;br /&gt;0,1,2,3,6,7,8,9 -  -  - (S)&lt;br /&gt;0,1,2,3,5 -  - &lt;br /&gt;0,1,2,3,5,10 -  - &lt;br /&gt;0,1,2,3,5,9 -  - &lt;br /&gt;0,1,2,3,5,9,10 -  - &lt;br /&gt;0,1,2,3,5,8 -  - &lt;br /&gt;0,1,2,3,5,8,10 -  - &lt;br /&gt;0,1,2,3,5,8,9 -  - &lt;br /&gt;0,1,2,3,5,8,9,10 -  - &lt;br /&gt;0,1,2,3,5,7 -  - &lt;br /&gt;0,1,2,3,5,7,10 -  - &lt;br /&gt;0,1,2,3,5,7,9 -  - &lt;br /&gt;0,1,2,3,5,7,9,10 -  - &lt;br /&gt;0,1,2,3,5,7,8 -  - &lt;br /&gt;0,1,2,3,5,7,8,10 -  - &lt;br /&gt;0,1,2,3,5,7,8,9 -  - &lt;br /&gt;0,1,2,3,5,6 -  - &lt;br /&gt;0,1,2,3,5,6,10 -  - &lt;br /&gt;0,1,2,3,5,6,9 -  - &lt;br /&gt;0,1,2,3,5,6,9,10 -  - &lt;br /&gt;0,1,2,3,5,6,8 -  - &lt;br /&gt;0,1,2,3,5,6,8,10 -  -  - (H)&lt;br /&gt;0,1,2,3,5,6,8,9 -  - &lt;br /&gt;0,1,2,3,5,6,8,9,10 -  - &lt;br /&gt;0,1,2,3,5,6,7 -  - &lt;br /&gt;0,1,2,3,5,6,7,10 -  - &lt;br /&gt;0,1,2,3,5,6,7,9 -  - &lt;br /&gt;0,1,2,3,5,6,7,9,10 -  - &lt;br /&gt;0,1,2,3,5,6,7,8 -  - &lt;br /&gt;0,1,2,3,5,6,7,8,10 -  - &lt;br /&gt;0,1,2,3,4 -  - &lt;br /&gt;0,1,2,3,4,10 -  - &lt;br /&gt;0,1,2,3,4,9 -  - &lt;br /&gt;0,1,2,3,4,9,10 -  - &lt;br /&gt;0,1,2,3,4,8 -  - &lt;br /&gt;0,1,2,3,4,8,10 -  - &lt;br /&gt;0,1,2,3,4,8,9 -  - &lt;br /&gt;0,1,2,3,4,8,9,10 -  - &lt;br /&gt;0,1,2,3,4,7 -  - &lt;br /&gt;0,1,2,3,4,7,10 -  - &lt;br /&gt;0,1,2,3,4,7,9 -  - &lt;br /&gt;0,1,2,3,4,7,9,10 -  - &lt;br /&gt;0,1,2,3,4,7,8 -  - &lt;br /&gt;0,1,2,3,4,7,8,10 -  - &lt;br /&gt;0,1,2,3,4,7,8,9 -  - &lt;br /&gt;0,1,2,3,4,7,8,9,10 -  - &lt;br /&gt;0,1,2,3,4,6 -  - &lt;br /&gt;0,1,2,3,4,6,10 -  - &lt;br /&gt;0,1,2,3,4,6,9 -  -  - (good: G Bb D F Ab B A)&lt;br /&gt;0,1,2,3,4,6,9,10 -  - &lt;br /&gt;0,1,2,3,4,6,8 -  - &lt;br /&gt;0,1,2,3,4,6,8,10 -  - &lt;br /&gt;0,1,2,3,4,6,8,9 -  - &lt;br /&gt;0,1,2,3,4,6,8,9,10 -  - &lt;br /&gt;0,1,2,3,4,6,7 -  - &lt;br /&gt;0,1,2,3,4,6,7,10 -  - &lt;br /&gt;0,1,2,3,4,6,7,9 -  - &lt;br /&gt;0,1,2,3,4,6,7,9,10 -  - &lt;br /&gt;0,1,2,3,4,6,7,8 -  - &lt;br /&gt;0,1,2,3,4,6,7,8,10 -  - &lt;br /&gt;0,1,2,3,4,6,7,8,9 -  - &lt;br /&gt;0,1,2,3,4,6,7,8,9,10 -  -  - (S)&lt;br /&gt;0,1,2,3,4,5 -  - &lt;br /&gt;0,1,2,3,4,5,10 -  -  - (good: G Bb D Ab B A C, G Bb Db F# A Ab B, G Bb D A C Ab B)&lt;br /&gt;0,1,2,3,4,5,9 -  -  - (good: G Bb Db F Ab F# A, G Bb D F# A Ab B)&lt;br /&gt;0,1,2,3,4,5,9,10 -  - &lt;br /&gt;0,1,2,3,4,5,8 -  -  - (good: G Bb D F# A F Ab, G Bb D F Ab F# A)&lt;br /&gt;0,1,2,3,4,5,8,10 -  - &lt;br /&gt;0,1,2,3,4,5,8,9 -  - &lt;br /&gt;0,1,2,3,4,5,8,9,10 -  - &lt;br /&gt;0,1,2,3,4,5,7 -  -  - (good: G B D A# C# A C)&lt;br /&gt;0,1,2,3,4,5,7,10 -  - &lt;br /&gt;0,1,2,3,4,5,7,9 -  - &lt;br /&gt;0,1,2,3,4,5,7,9,10 -  - &lt;br /&gt;0,1,2,3,4,5,7,8 -  - &lt;br /&gt;0,1,2,3,4,5,7,8,10 -  - &lt;br /&gt;0,1,2,3,4,5,7,8,9 -  - &lt;br /&gt;0,1,2,3,4,5,7,8,9,10 -  - &lt;br /&gt;0,1,2,3,4,5,6 -  -  - (good: G Bb Db A C Ab B)&lt;br /&gt;0,1,2,3,4,5,6,10 -  - &lt;br /&gt;0,1,2,3,4,5,6,9 -  - &lt;br /&gt;0,1,2,3,4,5,6,9,10 -  - &lt;br /&gt;0,1,2,3,4,5,6,8 -  - &lt;br /&gt;0,1,2,3,4,5,6,8,10 -  - &lt;br /&gt;0,1,2,3,4,5,6,8,9 -  - &lt;br /&gt;0,1,2,3,4,5,6,8,9,10 -  - &lt;br /&gt;0,1,2,3,4,5,6,7 -  - &lt;br /&gt;0,1,2,3,4,5,6,7,10 -  - &lt;br /&gt;0,1,2,3,4,5,6,7,9 -  - &lt;br /&gt;0,1,2,3,4,5,6,7,9,10 -  - &lt;br /&gt;0,1,2,3,4,5,6,7,8 -  - &lt;br /&gt;0,1,2,3,4,5,6,7,8,10 -  - &lt;br /&gt;0,1,2,3,4,5,6,7,8,9 -  - &lt;br /&gt;0,1,2,3,4,5,6,7,8,9,10 -  - &lt;br /&gt;0,1,2,3,4,5,6,7,8,9,10,11 -  -  - (S)&lt;br /&gt;&lt;br /&gt;Copyright (c) 2009 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-6982859851013082710?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/6982859851013082710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2009/02/all-chords-analysis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6982859851013082710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6982859851013082710'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2009/02/all-chords-analysis.html' title='All-chords analysis'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pcy4JjaAYdE/SYesOWVL15I/AAAAAAAAAA0/8jG7VtS1Qvo/s72-c/chord-space-size.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-6632433652595178945</id><published>2009-01-16T13:22:00.014-05:00</published><updated>2011-07-27T11:03:41.982-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mozart'/><category scheme='http://www.blogger.com/atom/ns#' term='missa brevis'/><category scheme='http://www.blogger.com/atom/ns#' term='compose'/><category scheme='http://www.blogger.com/atom/ns#' term='harmonic analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='agnus dei'/><category scheme='http://www.blogger.com/atom/ns#' term='harmony'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='missa brevis in D'/><title type='text'>An harmonic analysis of Mozart's Agnus Dei from Missa Brevis in D (K.194)</title><content type='html'>I am pleased to have created and to post here a complete analysis of the harmony of Mozart's interesting Agnus Dei movement from Missa Brevis in D (K.194). 'Complete' means every note is included; no passing tones are excluded. However, trills are excluded.&lt;br /&gt;&lt;br /&gt;Explanation of notation:&lt;br /&gt;o In '(chord)/N', the component, '/N' indicates the bass note. E.g., 'b: F#/3' says the bass is A#. This is true even though b minor contains A-natural. Of course, all default accidentals are like the G chord in C major. The key determines the default roots of the chords, but not any other notes of the chords.&lt;br /&gt;o No interval from the root higher than a seventh appears in the bass; e.g., a hypothetical notation of 'G9/9' is replaced with, 'G9/2'.&lt;br /&gt;o Symbols:&lt;br /&gt;Raised or lowered from the current, major or minor scale:&lt;br /&gt;+: root is raised a half-step.&lt;br /&gt;-: root is lowered a half-step.&lt;br /&gt;( ): combines chords over time; e.g., in the notation, '(F G) C', the chord, 'C' consumes the same amount of time as the chord sequence, 'F G'.&lt;br /&gt;;: a separator for human readability; use in the center of measures.&lt;br /&gt;_: continue the latest chord.&lt;br /&gt;~: continue the latest chord.&lt;br /&gt;|: measure separator&lt;br /&gt;0: measure separator&lt;br /&gt;dim: diminished chord (the fifth from the root is diminished).&lt;br /&gt;m: minor chord. (Note that 'm' (e.g., Bm) is used only for minor thirds and only in letter-name chord names; the chord symbol, 'min' (e.g., Gmmin9, vmin9) is used only for other minor intervals both in the letter-name and in the roman-numeral chord names.)&lt;br /&gt;rest: silence.&lt;br /&gt;&lt;br /&gt;The harmony:&lt;br /&gt;The following measures are in 3/4 time:&lt;br /&gt;Adagio, solo (religious mood), 'Agnus Dei, Agnus Dei, qui tollis peccata, peccata mundi:'&lt;br /&gt;1-8: Bm 0 F#7/A# 0 Bm 0 F#7/A# 0 Bm G/B ~ 0 Gdim/A# F#/A# F#m/A 0 G#dim7 G#dim6 G7 0 Bdimx3s5/F# F#x5/A# REST 0&lt;br /&gt;| 1-8: b: i | V7/3 | i | V7/3 | i VI/3 _ | vid/3 V/3 v/3 | +vid7 +vid6 VI7 | idx3s5/5 Vx5/3 rest |&lt;br /&gt;&lt;br /&gt;tutti (crowd mood), 'miserere, miserere,'&lt;br /&gt;9-12: D 0 A7/C# 0 D 0 A7/C# 0&lt;br /&gt;9-12: D: I | V7/3 | I | V7/3 |&lt;br /&gt;&lt;br /&gt;13 beat 2 (group mood), 'miserere nobis.'&lt;br /&gt;13-16: D ~ Am/C 0 B7 ~ A#dim6 0 ~ Bx3s4 B 0 Ex3 ~ Cx5 Am F#dim7 D#dim6min9x7 0&lt;br /&gt;13-16: D: I _ v/3 | VI7 _ +vd6 | _ vix3s4 VI | iix3 _ -VIIx5 v iiid7 +id6min9x7 |&lt;br /&gt;13-16: D: I _ e: iv/3 | V7 _ +ivd6 | _ vx3s4 V | ix3 _ VIx5 iv iid7 +viid6min9x7 |&lt;br /&gt;&lt;br /&gt;letter A, solo (religious mood), 'Agnus Dei, Agnus Dei, qui tollis peccata, peccata mundi,'&lt;br /&gt;17-24: Em 0 B7/D# 0 Em 0 B7/D# 0 Em C/E ~ 0 Cdim/D# B/D# Bm/D 0 C#dim7 C#dim6 C7 0 Edimx3s5/B Bx5/D# REST 0&lt;br /&gt;17-24: e: i | V7/3 | i | V7/3 | i VI/3 _ | vid/3 V/3 v/3 | +vid7 +vid6 VI7 | idx3s5/5 Vx5/3 rest |&lt;br /&gt;&lt;br /&gt;tutti (crowd mood), 'miserere, miserere,'&lt;br /&gt;25-28: G 0 D7 ~ (Bmmin9 D7/A) 0 (G ~ ~ G9x7/A) G G/D 0 D7 ~ (Bmmin9 D7/A) 0&lt;br /&gt;25-28: G: I | V7 _ (iiimin9 V7/5) | (I _ _ I9x7/2) I I/5 | V7 _ (iiimin9 V7/5) |&lt;br /&gt;&lt;br /&gt;29 beat 2 (group mood), 'miserere nobis.'&lt;br /&gt;29-32: (G ~ ~ G9x7/A) G Dm/F 0 E7 ~ Adim/D# 0 D#dim6 Ex3s4 E 0 Ax3 ~ Fx5 Dm Bdim7 G#dim6min9x7 0&lt;br /&gt;29-32: G: (I _ _ I9x7/2) I v/3 | VI7 _ iid/5 | +vd6 vix3s4 VI | iix3 _ -VIIx5 v iiid7 +id6min9x7 |&lt;br /&gt;29-32: G: (I _ _ I9x7/2) I a: iv/3 | V7 _ id/5 | +ivd6 vx3s4 V | ix3 _ VIx5 iv iid7 +viid6min9x7 |&lt;br /&gt;&lt;br /&gt;letter B, solos (religious mood), 'Agnus Dei, Agnus Dei,' 36 beat 3 (group mood), 'qui'&lt;br /&gt;33-36: Am Am/E ~ ~ Am ~ 0 E7/G# 0 Am/E ~ Am 0 E7/G# ~ ~ ~ ~ E7 0&lt;br /&gt;33-36: a: i i/5 _ _ i _ | V7/3 | i/5 _ i | V7/3 _ _ _ _ V7 |&lt;br /&gt;&lt;br /&gt;'tollis peccata mundi,'&lt;br /&gt;37-40: Ax3s4/E Am/E ~ ~ ~ G7/F 0 F# ~ F#7 0 ~ ~ Bdim/F 0 F# ~ Gdim Gdim/Db Edim6 A#dim6 0&lt;br /&gt;37-40: a: ix3s4/5 i/5 _ _ _ VII7/7 | +VI _ +VI7 | _ _ iid/5 | +VI _ viid viid/5 vd6 +id6 |&lt;br /&gt;37-40: a: ix3s4/5 i/5 _ _ _ b: VI7/7 | V _ V7 | _ _ id/5 | V _ vid vid/5 ivd6 +viid6 |&lt;br /&gt;&lt;br /&gt;tutti (combined religious and (41 beat 2) crowd moods), 'Agnus Dei, Agnus Dei,'&lt;br /&gt;41-44: Bm Bm/F# ~ 0 F#7 ~ ~ F#7/E F#aug7 F#7/C# 0 Bm Bm/F# ~ 0 F#7 ~ ~ F#7/E F#aug7 F#7/C# 0&lt;br /&gt;41-44: b: i i/5 _ | V7 _ _ V7/7 Vaug7 V7/5 | i i/5 _ | V7 _ _ V7/7 Vaug7 V7/5 |&lt;br /&gt;&lt;br /&gt;45 beat 3 (group mood), 'qui tollis peccata mundi:'&lt;br /&gt;45-48: Bm ~ G/B 0 A#dim6 F#/A# F#m 0 G#dim6 ~ G7 0 Bdims5/F# F# REST 0&lt;br /&gt;45-48: b: i _ VI/3 | +viid6 V/3 v/3 | +vid6 _ VI7 | ids5/5 V rest |&lt;br /&gt;&lt;br /&gt;The following measures are in 4/4 time:&lt;br /&gt;Allegro moderato, letter C, solo (religious mood), 'dona nobis pacem, pacem,'&lt;br /&gt;49-50: Ax3,5 D F#mx5 Dx5 ; Ax3s4 ~ C#dim/G Dx5/F# 0 Em7x5/G ~ D/A G/B ; C#dim A7x3 Dx5 ~ 0&lt;br /&gt;49-50: D: vx3,5 I iiix5 Ix5 ; vx3s4 _ viid/5 Ix5/3 | ii7x5/3 _ I/5 IV/3 ; viid v7x3 Ix5 _ |&lt;br /&gt;&lt;br /&gt;tutti (religious mood, still), 'dona, dona nobis pacem,'&lt;br /&gt;51-52: G D A7/G D/F# 0 A7/C# D ; (D/A A) (_ A7/G ~ A7/E) 0&lt;br /&gt;51-52: D: IV I V7/7 I/3 | V7/3 I ; (I/5 V) (_ V7/7 _ V7/5) |&lt;br /&gt;&lt;br /&gt;solo (religious mood), 'dona nobis pacem, pacem,'&lt;br /&gt;53-54: Dx3 D F#mx5 Dx5 ; Ax3s4 ~ C#dim/G Dx5/F# 0 Em7x5/G ~ D/A G/B ; C#dim A7x3 Dx5 ~ 0&lt;br /&gt;53-54: D: ix3 I iiix5 Ix5 ; vx3s4 _ viid/5 Ix5/3 | ii7x5/3 _ I/5 IV/3 ; viid v7x3 Ix5 _ |&lt;br /&gt;&lt;br /&gt;tutti (group mood), 'dona nobis,'&lt;br /&gt;55: D A/C# E7/B A 0&lt;br /&gt;55: D: I V/3 A: V7/5 I |&lt;br /&gt;55: D: I A: I/3 V7/5 I |&lt;br /&gt;&lt;br /&gt;'dona nobis pacem,'&lt;br /&gt;56: (E7/D A/C#) (E7/B A) ; (A/E E) REST 0&lt;br /&gt;56: A: (V7/7 I/3) (V7/5 I) ; (I/5 V) rest |&lt;br /&gt;&lt;br /&gt;solos (person mood), 'dona pa-/dona'&lt;br /&gt;57: Ex3,5 ~ ; (Ex5/G# Ex3,5) (Ex5/G# E7x5/G# C#m/E E) 0&lt;br /&gt;57: A: vx3,5 _ ; (Vx5/3 vx3,5) (Vx5/3 V7x5/3 iii/3 V) |&lt;br /&gt;&lt;br /&gt;'(pa-)/nobis, nobis pacem, dona'&lt;br /&gt;58: A A/E E7x5/G# (C#mmin9x7/E E7) ; A A/E E7x5/G# (C#mmin9x7/E E7) 0&lt;br /&gt;58: A: I I/5 V7x5/3 (iiimin9x7/3 V7) ; I I/5 V7x5/3 (iiimin9x7/3 V7) |&lt;br /&gt;&lt;br /&gt;'-cem,/nobis, nobis'&lt;br /&gt;59: A ~ D/F# A/E ; Bm/D G#dim/B E/G# E7 0&lt;br /&gt;59: A: I _ IV/3 I/5 ; ii/3 viid/3 V/3 V7 |&lt;br /&gt;&lt;br /&gt;'pacem,'&lt;br /&gt;60: A Bm/D A/E E ; A A/E A/C# A 0&lt;br /&gt;60: A: I ii/3 I/5 V ; I I/5 I/3 I |&lt;br /&gt;&lt;br /&gt;tutti (crowd mood), 'dona pa-/dona'&lt;br /&gt;61: Ex3,5 ~ ; (E7x5/G# E7x3,5) (E7x5/G# ~ C#mmin9x7/E E7) 0&lt;br /&gt;61: A: vx3,5 _ ; (V7x5/3 v7x3,5) (V7x5/3 _ iiimin9x7/3 V7) |&lt;br /&gt;&lt;br /&gt;'(pa-)/nobis, nobis pacem, dona/nobis pa-'&lt;br /&gt;62: A A/E E7x5/G# (C#mmin9x7/E E7) ; A A/E E7x5/G# (C#mmin9x7/E E7) 0&lt;br /&gt;62: A: I I/5 V7x5/3 (iiimin9x7/3 V7) ; I I/5 V7x5/3 (iiimin9x7/3 V7) |&lt;br /&gt;&lt;br /&gt;'-cem,/dona nobis'&lt;br /&gt;63: A (Ax3 ~ Ex3s4/A A) D/F# Amaj7/E ; Bm7/D (G#dim ~ C#7min9x3/G# G#dim) E/G# E7 0&lt;br /&gt;63: A: I (ix3 _ vx3s4/4 I) IV/3 Imaj7/5 ; ii7/3 (viid _ iii7min9x3/5 viid) V/3 V7 |&lt;br /&gt;&lt;br /&gt;'pacem, dona'&lt;br /&gt;64: (Ax5 A) (D Bm/D) A/E E ; A (Ax3 ~ Ex3s4/A A) D/F# Amaj7/E 0&lt;br /&gt;64: A: (Ix5 I) (IV ii/3) I/5 V ; I (ix3 _ vx3s4/4 I) IV/3 Imaj7/5 |&lt;br /&gt;&lt;br /&gt;'nobis pa-'&lt;br /&gt;65: Bm7/D (G#dim ~ C#min9x3/G# G#dim) E/G# E7 ; (Ax5 A) (D Bm/D) A/E E 0&lt;br /&gt;65: A: ii7/3 (viid _ iiimin9x3/5 viid) V/3 V7 ; (Ix5 I) (IV ii/3) I/5 V |&lt;br /&gt;&lt;br /&gt;letter D, '-cem,' solos, 66 beat 3 (religious mood), 'dona nobis pa-'&lt;br /&gt;66-67: Ax3 Ax3/E Ax3,5 ~ ; Ax3 C#mx5 Ax5/C# Ax3/E 0 Ddimx3 Ex5 Ax5/C# Ax3/E ; (Dx5 Dmaj7x5/C#) (Bm D/A) G#dim7x3 ~ 0&lt;br /&gt;66-67: A: ix3 ix3/5 ix3,5 _ ; ix3 iiix5 Ix5/3 ix3/5 | ivdx3 Vx5 Ix5/3 ix3/5 ; (IVx5 IVmaj7x5/7) (ii IV/5) viid7x3 _ |&lt;br /&gt;&lt;br /&gt;'-cem,/' (person mood), 'dona nobis pacem, pacem,'&lt;br /&gt;68-69: A ~ C#mx5 Ax5 ; Ex3s4 ~ G#dim/D Ax5/C# 0 Bm7x5/D ~ A/E D/F# ; G#dim E7x3 A F#7/A# 0&lt;br /&gt;68-69: A: I _ iiix5 Ix5 ; vx3s4 _ viid/5 Ix5/3 | ii7x5/3 _ I/5 IV/3 ; viid v7x3 I VI7/3 |&lt;br /&gt;&lt;br /&gt;(religious mood: sad), 'dona nobis pa-' 71 beat 3 '-cem,/' (person mood: sad) 'dona'&lt;br /&gt;70-71: Bm Dx5 Bmx5 Bx3 ; A#dimx3 F#x5/A# Bmx5 Bx3 0 (Emx5/G Em7x5/G) (C#dim/G Em/G) Edim/G ~ ; Bm/F# Bm Dx5 Bmx5 0&lt;br /&gt;70-71: b: i IIIx5 ix5 ix3 ; +viidx3 Vx5/3 ix5 ix3 | (ivx5/3 iv7x5/3) (iid/5 iv/3) ivd/3 _ ; i/5 i IIIx5 ix5 |&lt;br /&gt;&lt;br /&gt;'nobis pacem,'&lt;br /&gt;72: F#x3s4 ~ A#dim/E Bmx5/D ; C#m7x5 ~ Bm/D Em 0&lt;br /&gt;72: b: vx3s4 _ +viid/5 ix5/3 ; iid7x5 _ i/3 iv |&lt;br /&gt;&lt;br /&gt;'pacem,' tutti, 73 beat 3 (group mood), 'pacem,'&lt;br /&gt;73: (A#dim/E F#7x3/E Bmx5/D Bmx5) ; tutti: D7 0&lt;br /&gt;73: b: (+viid/5 v7x3/7 ix5/3 ix5) ; tutti: G: V7 |&lt;br /&gt;&lt;br /&gt;letter E (crowd mood), 'dona nobis pacem,/dona nobis pa-/dona nobis/dona'&lt;br /&gt;74-75: Dx3,5 ~ ~ Gx3 ; Gx3s4 (!) ~ D7x5/F# G 0 D7x3s4/A ~ D7/A Gx5/B ; D7x3s4 ~ D7 Gx5 0&lt;br /&gt;74-75: G: vx3,5 _ _ ix3 ; ix3s4 (!) _ V7x5/3 I | v7x3s4/5 _ V7/5 Ix5/3 ; v7x3s4 _ V7 Ix5 |&lt;br /&gt;&lt;br /&gt;'dona, dona/(pa-)cem, do-/pacem, dona/nobis, dona'&lt;br /&gt;76: Am7/G ~ D7/F# G ; (Am7x5 Am9x5) (F#dim/A Am7x5) (Bmin9x3 Gmaj79x5/B) (F#dim/C F#dimmin9/C) 0&lt;br /&gt;76: G: ii7/7 _ V7/3 I ; (ii7x5 ii9x5) (viid/3 ii7x5) (iiimin9x3 Imaj79x5/3) (viid/5 viidmin9/5) |&lt;br /&gt;&lt;br /&gt;'(do-)/nobis pa-,' 77 beat 4 (group mood), '-na,/-cem,'&lt;br /&gt;77: D7/C (D11x5/C D7/C) G/B E7/D ; ~ (E11x5/D E7/D) A/C# A7/E 0&lt;br /&gt;77: G: V7/7 (V11x5/7 V7/7) I/3 VI7/7 ; _ (VI11x5/7 VI7/7) II/3 II7/5 |&lt;br /&gt;77: G: V7/7 (V11x5/7 V7/7) D: IV/3 II7/7 ; _ (II11x5/7 II7/7) V/3 V7/5 |&lt;br /&gt;&lt;br /&gt;'dona nobis pacem,'&lt;br /&gt;78: D (A7x3s4/E D/F#) Em/G G#dim7 ; D/A A (Ax3,5 A7x3,5/G) (F#mx5 A7x3/E) 0&lt;br /&gt;78: D: I (v7x3s4/5 I/3) ii/3 +ivd7 ; I/5 V (vx3,5 v7x3,5/7) (iiix5 v7x3/5) |&lt;br /&gt;&lt;br /&gt;solo (religious mood), 'dona nobis pacem, pacem,'&lt;br /&gt;79-80: Dx3 D F#mx5 Dx5 ; Ax3s4 ~ C#dim/G Dx5/F# 0 Em7x5/G ~ D/A G/B ; C#dim A7x3 Dx5 ~ 0&lt;br /&gt;79-80: D: ix3 I iiix5 Ix5 ; vx3s4 _ viid/5 Ix5/3 | ii7x5/3 _ I/5 IV/3 ; viid v7x3 Ix5 _ |&lt;br /&gt;&lt;br /&gt;tutti (religious mood still), 'dona nobis pacem, pacem,'&lt;br /&gt;81-82: G D A7/G D/F# 0 A7/C# D ; (D/A A) (Ax3,5 A7x3,5/G F#mx5 A7x3/E) 0&lt;br /&gt;81-82: D: IV I V7/7 I/3 | V7/3 I ; (I/5 V) (vx3,5 v7x3,5/7 iiix5 v7x3/5) |&lt;br /&gt;&lt;br /&gt;solo (religious mood), 'dona nobis pacem, pacem,'&lt;br /&gt;83-84: Dx3 Dm Fx5 Dmx5 ; Ax3s4 ~ C#dim/G Dmx5/F 0 Em7x5/G ~ Dm/A G/B ; C#dim A7x3 Dm ~ 0&lt;br /&gt;83-84: d: ix3 i IIIx5 ix5 ; vx3s4 _ +viid/5 ix5/3 | ii7x5/3 _ i/5 IV/3 ; +viid v7x3 i _ |&lt;br /&gt;&lt;br /&gt;tutti (group mood), 'dona nobis, dona nobis pacem,'&lt;br /&gt;85-86: A G#dim6 Gdim6 Dm/F 0 A7/C# (_ Dm) ; (Dm/A A) REST 0&lt;br /&gt;85-86: d: V +ivd6 ivd6 i/3 | V7/3 (_ i) ; (i/5 V) rest |&lt;br /&gt;&lt;br /&gt;solo (person mood), 'dona pa-/dona'&lt;br /&gt;87: Ax3,5 ; (Ax5/C# Ax3,5 (Ax5/C# A7x5/C#) (F#m/A A)) 0&lt;br /&gt;87: finally D: vx3,5 ; (Vx5/3 vx3,5 (Vx5/3 V7x5/3) (iii/3 V)) |&lt;br /&gt;&lt;br /&gt;'(pa-)/nobis, nobis pacem, dona'&lt;br /&gt;88: D D/A A7x5/C# (F#mmin9x7/A A7) ; D D/A A7x5/C# (F#mmin9x7/A A7) 0&lt;br /&gt;88: D: I I/5 V7x5/3 (iiimin9x7/3 V7) ; I I/5 V7x5/3 (iiimin9x7/3 V7) |&lt;br /&gt;&lt;br /&gt;'-cem,/dona nobis'&lt;br /&gt;89: D ~ G/B D/A ; Em/G C#dim/E A/C# A7 0&lt;br /&gt;89: D: I _ IV/3 I/5 ; ii/3 viid/3 V/3 V7 |&lt;br /&gt;&lt;br /&gt;'pacem,'&lt;br /&gt;90: Dx5 Emx5/G D/A A ; Dx3,5 Dx3/A F#mx5 D 0&lt;br /&gt;90: D: Ix5 iix5/3 I/5 V ; ix3,5 ix3/5 iiix5 I |&lt;br /&gt;&lt;br /&gt;tutti (combined person and (91 beat 3) crowd moods), 'dona pa-/dona'&lt;br /&gt;91: Ax3,5 ~ ; (A7x5/C# A7x3,5) (A7x5/C# ~ F#mmin9x7/A A7) 0&lt;br /&gt;91: D: vx3,5 _ ; (V7x5/3 v7x3,5) (V7x5/3 _ iiimin9x7/3 V7) |&lt;br /&gt;&lt;br /&gt;'(pa-)/nobis pa-/nobis, nobis pacem, dona'&lt;br /&gt;92: D D/A A7x5/C# (F#mmin9x7/A A7) ; D D/A A7x5/C# (F#mmin9x7/A A7) 0&lt;br /&gt;92: D: I I/5 V7x5/3 (iiimin9x7/3 V7) ; I I/5 V7x5/3 (iiimin9x7/3 V7) |&lt;br /&gt;&lt;br /&gt;'-cem,/dona nobis'&lt;br /&gt;93: D (Dx3 ~ Ax3s4/D D) G/B Dmaj7/A ; Em7/G (C#dim/E ~ F#min9x3/E C#dim/E) A/C# A7 0&lt;br /&gt;93: D: I (ix3 _ vx3s4/4 I) IV/3 Imaj7/5 ; ii7/3 (viid/3 _ iiimin9x3/7 viid/3) V/3 V7 |&lt;br /&gt;&lt;br /&gt;'pacem do-/dona'&lt;br /&gt;94: D Em/G D/A A ; Dx3 (Dx3 ~ Ax3s4/D D) G/B Dmaj7/A 0&lt;br /&gt;94: D: I ii/3 I/5 V ; ix3 (ix3 _ vx3s4/4 I) IV/3 Imaj7/5 |&lt;br /&gt;&lt;br /&gt;'-na/nobis pacem,' 96 beat 3 (group mood), 'dona'&lt;br /&gt;95-96: Em7/G (C#dim/E ~ F#min9x3/E C#dim/E) A/C# A7x5 ; D Bm Em7/G A 0 (Dx3 D (Ax3,5 A7x3,5) (F#mx5 A7x3/E)) ; D 0&lt;br /&gt;95-96: D: ii7/3 (viid/3 _ iiimin9x3/7 viid/3) V/3 V7x5 ; I vi ii7/3 V | (ix3 I (vx3,5 v7x3,5) (iiix5 v7x3/5)) ; I |&lt;br /&gt;&lt;br /&gt;'nobis pacem,'&lt;br /&gt;97: D/A ~ A7/G D/F# ; Em7/G ~ D/A G 0&lt;br /&gt;97: D: I/5 _ V7/7 I/3 ; ii7/3 _ I/5 IV |&lt;br /&gt;&lt;br /&gt;rit., 'pacem,' 98 beat 3 (religious mood), 'do-'&lt;br /&gt;98: A7/C# D A7 ~ 0&lt;br /&gt;98: D: V7/3 I V7 _ |&lt;br /&gt;&lt;br /&gt;'-na', a tempo, 99 beat 3 (group mood), 'pa-'&lt;br /&gt;99: G#dim7 REST Ax3s4 A7 0&lt;br /&gt;99: D: +ivd7 rest vx3s4 V7 |&lt;br /&gt;&lt;br /&gt;'-cem,' rit., 100 beat 3 (religious mood), 'do-'&lt;br /&gt;100: Bm REST A7 ~ 0&lt;br /&gt;100: D: vi rest V7 _ |&lt;br /&gt;&lt;br /&gt;'-na', a tempo, 101 beat 3 (group mood), 'pa-'&lt;br /&gt;101: G#dim7 REST Ax3s4 A 0&lt;br /&gt;101: D: +ivd7 rest vx3s4 V |&lt;br /&gt;&lt;br /&gt;'-cem, pa-', 102 beat 3 (religious mood in soprano, holding as others drop out) '-cem.'&lt;br /&gt;102: Dx3 A D REST ~/&lt;br /&gt;102: D: ix3 V I rest |/&lt;br /&gt;&lt;br /&gt;Comparisons of the harmony of various measures:&lt;br /&gt;i:&lt;br /&gt;25: G: I |&lt;br /&gt;60+: A: ; I I/5 I/3 I |&lt;br /&gt;66: A: ix3 ix3/5 ix3,5 _ ;&lt;br /&gt;i ii i v:&lt;br /&gt;60: A: I ii/3 I/5 V ;&lt;br /&gt;94: D: I ii/3 I/5 V ;&lt;br /&gt;90: D: Ix5 iix5/3 I/5 V ;&lt;br /&gt;i iii i:&lt;br /&gt;66+: A: ; ix3 iiix5 Ix5/3 ix3/5 |&lt;br /&gt;90+: D: ; ix3,5 ix3/5 iiix5 I |&lt;br /&gt;70: b: i IIIx5 ix5 ix3 ;&lt;br /&gt;71+: b: ; i/5 i IIIx5 ix5 |&lt;br /&gt;53-54: D: ix3 I iiix5 Ix5 ; vx3s4 _ viid/5 Ix5/3 | ii7x5/3 _ I/5 IV/3 ; viid v7x3 Ix5 _ |&lt;br /&gt;79-80: D: ix3 I iiix5 Ix5 ; vx3s4 _ viid/5 Ix5/3 | ii7x5/3 _ I/5 IV/3 ; viid v7x3 Ix5 _ |&lt;br /&gt;83-84: d: ix3 i IIIx5 ix5 ; vx3s4 _ +viid/5 ix5/3 | ii7x5/3 _ i/5 IV/3 ; +viid v7x3 i _ |&lt;br /&gt;68-69: A: I _ iiix5 Ix5 ; vx3s4 _ viid/5 Ix5/3 | ii7x5/3 _ I/5 IV/3 ; viid v7x3 I VI7/3 |&lt;br /&gt;i iv i:&lt;br /&gt;59: A: I _ IV/3 I/5 ; ii/3 viid/3 V/3 V7 |&lt;br /&gt;89: D: I _ IV/3 I/5 ; ii/3 viid/3 V/3 V7 |&lt;br /&gt;i iv ii:&lt;br /&gt;64: A: (Ix5 I) (IV ii/3) I/5 V ;&lt;br /&gt;i v:&lt;br /&gt;13: D: I _ v/3 |&lt;br /&gt;33-34: a: i i/5 _ _ i _ | V7/3 |&lt;br /&gt;35-36: a: i/5 _ i | V7/3 _ _ _ _ V7 |&lt;br /&gt;41-42: b: i i/5 _ | V7 _ _ V7/7 Vaug7 V7/5 |&lt;br /&gt;43-44: b: i i/5 _ | V7 _ _ V7/7 Vaug7 V7/5 |&lt;br /&gt;i v i:&lt;br /&gt;102: D: ix3 V I rest |&lt;br /&gt;97: D: I/5 _ V7/7 I/3 ;&lt;br /&gt;74+: G: ; ix3s4 (!) _ V7x5/3 I |&lt;br /&gt;i v i ii:&lt;br /&gt;78: D: I (v7x3s4/5 I/3) ii/3 +ivd7 ;&lt;br /&gt;i v i iv:&lt;br /&gt;63: A: I (ix3 _ vx3s4/4 I) IV/3 Imaj7/5 ; ii7/3 (viid _ iii7min9x3/5 viid) V/3 V7 |&lt;br /&gt;93: D: I (ix3 _ vx3s4/4 I) IV/3 Imaj7/5 ; ii7/3 (viid/3 _ iiimin9x3/7 viid/3) V/3 V7 |&lt;br /&gt;64+: A: ; I (ix3 _ vx3s4/4 I) IV/3 Imaj7/5 |&lt;br /&gt;94+: D: ; ix3 (ix3 _ vx3s4/4 I) IV/3 Imaj7/5 |&lt;br /&gt;i v i v:&lt;br /&gt;1-4: b: i | V7/3 | i | V7/3 |&lt;br /&gt;17-20: e: i | V7/3 | i | V7/3 |&lt;br /&gt;9-12: D: I | V7/3 | I | V7/3 |&lt;br /&gt;i v iii v:&lt;br /&gt;78+: D: ; I/5 V (vx3,5 v7x3,5/7) (iiix5 v7x3/5) |&lt;br /&gt;96: D: (ix3 I (vx3,5 v7x3,5) (iiix5 v7x3/5)) ; I |&lt;br /&gt;58: A: I I/5 V7x5/3 (iiimin9x7/3 V7) ; I I/5 V7x5/3 (iiimin9x7/3 V7) |&lt;br /&gt;62: A: I I/5 V7x5/3 (iiimin9x7/3 V7) ; I I/5 V7x5/3 (iiimin9x7/3 V7) |&lt;br /&gt;88: D: I I/5 V7x5/3 (iiimin9x7/3 V7) ; I I/5 V7x5/3 (iiimin9x7/3 V7) |&lt;br /&gt;92: D: I I/5 V7x5/3 (iiimin9x7/3 V7) ; I I/5 V7x5/3 (iiimin9x7/3 V7) |&lt;br /&gt;i vi iv:&lt;br /&gt;16: e: ix3 _ VIx5 iv iid7 +viid6min9x7 |&lt;br /&gt;32: a: ix3 _ VIx5 iv iid7 +viid6min9x7 |&lt;br /&gt;i vi v:&lt;br /&gt;5-8: b: i VI/3 _ | vid/3 V/3 v/3 | +vid7 +vid6 VI7 | idx3s5/5 Vx5/3 rest |&lt;br /&gt;21-24: e: i VI/3 _ | vid/3 V/3 v/3 | +vid7 +vid6 VI7 | idx3s5/5 Vx5/3 rest |&lt;br /&gt;i vi vii:&lt;br /&gt;45-48: b: i _ VI/3 | +viid6 V/3 v/3 | +vid6 _ VI7 | ids5/5 V rest |&lt;br /&gt;i vii:&lt;br /&gt;37: a: ix3s4/5 i/5 _ _ _ VII7/7 |&lt;br /&gt;ii i:&lt;br /&gt;50: D: ii7x5/3 _ I/5 IV/3 ;&lt;br /&gt;97+: D: ; ii7/3 _ I/5 IV |&lt;br /&gt;72+: b: ; iid7x5 _ i/3 iv |&lt;br /&gt;ii v:&lt;br /&gt;77+: D: ; II7/7 (II11x5/7 II7/7) V/3 V7/5 |&lt;br /&gt;ii v i:&lt;br /&gt;76: G: ii7/7 _ V7/3 I ;&lt;br /&gt;ii vii ii:&lt;br /&gt;76+: G: ;(ii7x5 ii9x5) (viid/3 ii7x5) (iiimin9x3 Imaj79x5/3) (viid/5 viidmin9/5) |&lt;br /&gt;ii vii iii:&lt;br /&gt;65: A: ii7/3 (viid _ iiimin9x3/5 viid) V/3 V7 ; (Ix5 I) (IV ii/3) I/5 V |&lt;br /&gt;95: D: ii7/3 (viid/3 _ iiimin9x3/7 viid/3) V/3 V7x5 ; I vi ii7/3 V |&lt;br /&gt;ii vii v:&lt;br /&gt;16: D: iix3 _ -VIIx5 v iiid7 +id6min9x7 |&lt;br /&gt;32: G: iix3 _ -VIIx5 v iiid7 +id6min9x7 |&lt;br /&gt;iv i:&lt;br /&gt;51: D: IV I V7/7 I/3 |&lt;br /&gt;81: D: IV I V7/7 I/3 |&lt;br /&gt;iv ii iv:&lt;br /&gt;71: b: (ivx5/3 iv7x5/3) (iid/5 iv/3) ivd/3 _ ;&lt;br /&gt;iv ii iv vii:&lt;br /&gt;67+: A: ; (IVx5 IVmaj7x5/7) (ii IV/5) viid7x3 _ |&lt;br /&gt;iv v:&lt;br /&gt;67: A: ivdx3 Vx5 Ix5/3 ix3/5 ;&lt;br /&gt;+iv&lt;br /&gt;15: e: +ivd6 vx3s4 V |&lt;br /&gt;31: a: +ivd6 vx3s4 V |&lt;br /&gt;99: D: +ivd7 rest vx3s4 V7 |&lt;br /&gt;101: D: +ivd7 rest vx3s4 V |&lt;br /&gt;v:&lt;br /&gt;38: b: V _ V7 |&lt;br /&gt;v i:&lt;br /&gt;30: a: V7 _ id/5 |&lt;br /&gt;39: b: V7 _ id/5 |&lt;br /&gt;74: G: vx3,5 _ _ ix3 ;&lt;br /&gt;75: G: v7x3s4/5 _ V7/5 Ix5/3 ;&lt;br /&gt;75+: G: ; v7x3s4 _ V7 Ix5 |&lt;br /&gt;v i iii:&lt;br /&gt;49: D: vx3,5 I iiix5 Ix5 ;&lt;br /&gt;v i v:&lt;br /&gt;98: D: V7/3 I V7 _ |&lt;br /&gt;52: D: V7/3 I ; (I/5 V) (_ V7/7 _ V7/5) |&lt;br /&gt;86: d: V7/3 (_ i) ; (i/5 V) rest |&lt;br /&gt;v i v i:&lt;br /&gt;56: A: (V7/7 I/3) (V7/5 I) ; (I/5 V) rest |&lt;br /&gt;v i v iii:&lt;br /&gt;82: D: V7/3 I ; (I/5 V) (vx3,5 v7x3,5/7 iiix5 v7x3/5) |&lt;br /&gt;v iii v:&lt;br /&gt;57: A: vx3,5 _ ; (Vx5/3 vx3,5) (Vx5/3 V7x5/3 iii/3 V) |&lt;br /&gt;87: D: vx3,5 ; (Vx5/3 vx3,5 (Vx5/3 V7x5/3) (iii/3 V)) |&lt;br /&gt;61: A: vx3,5 _ ; (V7x5/3 v7x3,5) (V7x5/3 _ iiimin9x7/3 V7) |&lt;br /&gt;91: D: vx3,5 _ ; (V7x5/3 v7x3,5) (V7x5/3 _ iiimin9x7/3 V7) |&lt;br /&gt;v iii v i:&lt;br /&gt;26-27: G: V7 _ (iiimin9 V7/5) | (I _ _ I9x7/2) I I/5 |&lt;br /&gt;28-29: G: V7 _ (iiimin9 V7/5) | (I _ _ I9x7/2) I v/3 |&lt;br /&gt;28-29: G: V7 _ (iiimin9 V7/5) | (I _ _ I9x7/2) I a: iv/3 |&lt;br /&gt;v +iv:&lt;br /&gt;14: e: V7 _ +ivd6 |&lt;br /&gt;v +iv iv:&lt;br /&gt;85: d: V +ivd6 ivd6 i/3 |&lt;br /&gt;v vi:&lt;br /&gt;40: b: V _ vid vid/5 ivd6 +viid6 |&lt;br /&gt;v vii:&lt;br /&gt;49+: D: ; vx3s4 _ viid/5 Ix5/3 |&lt;br /&gt;72: b: vx3s4 _ +viid/5 ix5/3 ;&lt;br /&gt;+v:&lt;br /&gt;15: D: +vd6 vix3s4 VI |&lt;br /&gt;31: G: +vd6 vix3s4 VI |&lt;br /&gt;vi:&lt;br /&gt;38: a: +VI _ +VI7 |&lt;br /&gt;vi ii:&lt;br /&gt;30: G: VI7 _ iid/5 |&lt;br /&gt;39: a: +VI7 _ iid/5 |&lt;br /&gt;vi v:&lt;br /&gt;100: D: vi rest V7 _ |&lt;br /&gt;vi +v:&lt;br /&gt;14: D: VI7 _ +vd6 |&lt;br /&gt;vi vii:&lt;br /&gt;40: a: +VI _ viid viid/5 vd6 +id6 |&lt;br /&gt;vii:&lt;br /&gt;50+: D: ; viid v7x3 Ix5 _ |&lt;br /&gt;70+: b: ; +viidx3 Vx5/3 ix5 ix3 |&lt;br /&gt;&lt;br /&gt;Mid-measure key changes:&lt;br /&gt;13: D: I _ e: iv/3 |&lt;br /&gt;29: G: (I _ _ I9x7/2) I a: iv/3 |&lt;br /&gt;37: a: ix3s4/5 i/5 _ _ _ b: VI7/7 |&lt;br /&gt;55: D: I V/3 A: V7/5 I |&lt;br /&gt;55: D: I A: I/3 V7/5 I |&lt;br /&gt;77: G: V7/7 (V11x5/7 V7/7) D: IV/3 II7/7 ;&lt;br /&gt;73: b: (+viid/5 v7x3/7 ix5/3 ix5) ; G: V7 |&lt;br /&gt;&lt;br /&gt;Copyright (c) 2009 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-6632433652595178945?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/6632433652595178945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2009/01/harmonic-analysis-of-mozarts-agnus-dei.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6632433652595178945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/6632433652595178945'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2009/01/harmonic-analysis-of-mozarts-agnus-dei.html' title='An harmonic analysis of Mozart&apos;s &lt;i&gt;Agnus Dei&lt;/i&gt; from &lt;i&gt;Missa Brevis&lt;/i&gt; in D (K.194)'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-978647094973043741</id><published>2009-01-16T13:16:00.019-05:00</published><updated>2011-07-27T11:03:41.987-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mozart'/><category scheme='http://www.blogger.com/atom/ns#' term='missa brevis'/><category scheme='http://www.blogger.com/atom/ns#' term='compose'/><category scheme='http://www.blogger.com/atom/ns#' term='notation'/><category scheme='http://www.blogger.com/atom/ns#' term='harmonic analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='agnus dei'/><category scheme='http://www.blogger.com/atom/ns#' term='harmony'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='missa brevis in D'/><category scheme='http://www.blogger.com/atom/ns#' term='pitch class set'/><title type='text'>A normalized chord notation &amp; naming based on Mozart's Agnus Dei from Missa Brevis in D (K.194)</title><content type='html'>This Christmas (2008), I sang Mozart's 'Missa Brevis in D (K.194)' and greatly enjoyed it! I am pleased now to be able to present the following, detailed and complete list I have created of the chords in the Agnus Dei movement. 'Complete' means every note is included; no passing tones are excluded. However, trills are excluded. I intend to write a computer program in some way involving these chords.&lt;br /&gt;&lt;br /&gt;The chords, harmonic function agnostic, are in a notation that automatically collapses all transpositions and inversions, which I created for the list. The twelve adjacent tones in an octave are numbered backward with this method, 0 to 11. Each chord is transposed until (in a computer sense) its combination of numbers is as low as possible ('normalized'). This collapses the transpositions and inversions. The number, '0' in the normalized notation does not necessarily mean the root of the chord. Sorting these chords, as you can see in the list, conveniently collects the categories of basic triads, diminished, and seventh chords.&lt;br /&gt;&lt;br /&gt;Here are the thirty-three (33) transposition- and inversion -collapsed chords of the Agnus Dei ordered by their normalized notation:&lt;br /&gt;&lt;br /&gt;normalized-notation - standard-name [(nonstandard-names)] - example&lt;br /&gt;0 - ix3,5 - G&lt;br /&gt;0,6 - idx3 (=I7x1,5) - G Db&lt;br /&gt;0,5 - ix3 - G D&lt;br /&gt;0,4 - Ix5 (=ix1) - G B&lt;br /&gt;0,3 - ix5 (=Ix1) - G Bb&lt;br /&gt;0,3,8 - i - G Bb D&lt;br /&gt;0,3,7 - I - G B D&lt;br /&gt;0,3,6 - id (=id6x3) - G Bb Db&lt;br /&gt;0,3,6,9 - id6 (=id13x7,9,11) - G Bb Db E&lt;br /&gt;0,2 - i7x3,5 - G F&lt;br /&gt;0,2,9 - i7x5 - G Bb F&lt;br /&gt;0,2,8 - I7x5 - G B F&lt;br /&gt;0,2,7 - ix3s4 (=i11x3,7,9 =i9x3,7 =ix3s2) - G C D&lt;br /&gt;0,2,6 - id7x3 - G Db F&lt;br /&gt;0,2,6,9 - id7 - G Bb Db F&lt;br /&gt;0,2,5 - i7x3 - G D F&lt;br /&gt;0,2,5,9 - i7 - G Bb D F&lt;br /&gt;0,2,5,8 - I7 - G B D F&lt;br /&gt;0,2,5,7 - i7x3s4 (=i11x3,9 =ix3s2,4 =ix3s2,6) - G C D F&lt;br /&gt;0,2,4,9 - I9x7 (=Is2) - G B D A&lt;br /&gt;0,2,4,8 - Iaug7 (=Iaug9x7) - G B D# F&lt;br /&gt;0,1,8 - Imaj7x5 - G B F#&lt;br /&gt;0,1,8,10 - Imaj79x5 - G B F# A&lt;br /&gt;0,1,7 - idx3s5 (=idmin9x3,7 =imaj711x3,5,9 =imaj7x3,5s4) - G Db D&lt;br /&gt;0,1,6,10 - imin9x7 (=I7x5s6) - G Bb D Ab&lt;br /&gt;0,1,5,8 - Imaj7 - G B D F#&lt;br /&gt;0,1,4,7 - ids5 (=id6min9x3,7) - G Bb Db D&lt;br /&gt;0,1,4,7,10 - id6min9x7 (=id13min9x7,11) - G Bb Db E Ab&lt;br /&gt;0,1,3,7,10 - idmin9 - G Bb Db F Ab&lt;br /&gt;0,1,3,6 - imin9x3 (=id6maj7x3 =ids4) - G D F Ab&lt;br /&gt;0,1,3,6,10 - imin9 - G Bb D F Ab&lt;br /&gt;0,1,3,5 - i9x5 (=i7x5s2) - G Bb F A&lt;br /&gt;0,1,3,5,7 - I11x5 - G B F A C&lt;br /&gt;&lt;br /&gt;Also, I created a (variant) system of chord naming which I believe suits the above list. For an example of the small difference, in the chord, G Bb Db E (which is 0,3,6,9) to avoid interpreting the interval G to E as a diminished seventh, because '6' is not needed for inversions which in this system go unnotated, the whole chord is called a 'd6, diminished sixth chord'. (This can be interpreted as a diminished triad, plus a major sixth above the root.) This naming as a diminished sixth chord avoids collisions with other seventh-chord nomenclature, and it more simply shows how to combine them with the major and minor seventh intervals (and higher) from the root. (However, when lacking a diminished fifth of the chord, sixths are written as the suspensions, 's6' and 'smin6'.)&lt;br /&gt;&lt;br /&gt;The chord symbols, 'I' and 'i' are exemplary here without attaching their roots to any degree of the scale.&lt;br /&gt;&lt;br /&gt;Following are the transposition- and inversion -collapsed chord names applicable to the Agnus Dei. Here are the standard chord names, arranged alphabetically:&lt;br /&gt;&lt;br /&gt;standard-name [(nonstandard-names)] - example - normalized-notation&lt;br /&gt;I - G B D - 0,3,7&lt;br /&gt;i - G Bb D - 0,3,8&lt;br /&gt;I11x5 - G B F A C - 0,1,3,5,7&lt;br /&gt;I7 - G B D F - 0,2,5,8&lt;br /&gt;i7 - G Bb D F - 0,2,5,9&lt;br /&gt;i7x3 - G D F - 0,2,5&lt;br /&gt;i7x3,5 - G F - 0,2&lt;br /&gt;i7x3s4 (=i11x3,9 =ix3s2,4 =ix3s2,6) - G C D F - 0,2,5,7&lt;br /&gt;I7x5 - G B F - 0,2,8&lt;br /&gt;i7x5 - G Bb F - 0,2,9&lt;br /&gt;i9x5 (=i7x5s2) - G Bb F A - 0,1,3,5&lt;br /&gt;I9x7 (=Is2) - G B D A - 0,2,4,9&lt;br /&gt;Iaug7 (=Iaug9x7) - G B D# F - 0,2,4,8&lt;br /&gt;id (=id6x3) - G Bb Db - 0,3,6&lt;br /&gt;id6 (=id13x7,9,11) - G Bb Db E - 0,3,6,9&lt;br /&gt;id6min9x7 (=id13min9x7,11) - G Bb Db E Ab - 0,1,4,7,10&lt;br /&gt;id7 - G Bb Db F - 0,2,6,9&lt;br /&gt;id7x3 - G Db F - 0,2,6&lt;br /&gt;idmin9 - G Bb Db F Ab - 0,1,3,7,10&lt;br /&gt;ids5 (=id6min9x3,7) - G Bb Db D - 0,1,4,7&lt;br /&gt;idx3 (=I7x1,5) - G Db - 0,6&lt;br /&gt;idx3s5 (=idmin9x3,7 =imaj711x3,5,9 =imaj7x3,5s4) - G Db D - 0,1,7&lt;br /&gt;Imaj7 - G B D F# - 0,1,5,8&lt;br /&gt;Imaj79x5 - G B F# A - 0,1,8,10&lt;br /&gt;Imaj7x5 - G B F# - 0,1,8&lt;br /&gt;imin9 - G Bb D F Ab - 0,1,3,6,10&lt;br /&gt;imin9x3 (=id6maj7x3 =ids4) - G D F Ab - 0,1,3,6&lt;br /&gt;imin9x7 (=I7x5s6) - G Bb D Ab - 0,1,6,10&lt;br /&gt;ix3 - G D - 0,5&lt;br /&gt;ix3,5 - G - 0&lt;br /&gt;ix3s4 (=i11x3,7,9 =i9x3,7 =ix3s2) - G C D - 0,2,7&lt;br /&gt;Ix5 (=ix1) - G B - 0,4&lt;br /&gt;ix5 (=Ix1) - G Bb - 0,3&lt;br /&gt;&lt;br /&gt;Some nonstandard alternative (discouraged) names for the same normalized chord might be included. Here are the twenty-two (22) nonstandard chord names, arranged alphabetically:&lt;br /&gt;&lt;br /&gt;nonstandard-name [['nonstandard'] (standard-name)] - example - normalized-notation&lt;br /&gt;i11x3,7,9 nonstandard (=ix3s4) - G D C - 0,2,7&lt;br /&gt;i11x3,9 nonstandard (=i7x3s4) - G D F C - 0,2,5,7&lt;br /&gt;I7x1,5 nonstandard (=idx3) - B F - 0,6&lt;br /&gt;i7x5s2 nonstandard (=i9x5) - G A Bb F - 0,1,3,5&lt;br /&gt;I7x5s6 nonstandard (=imin9x7) - G B E F - 0,1,6,10&lt;br /&gt;i9x3,7 nonstandard (=ix3s4) - G D A - 0,2,7&lt;br /&gt;Iaug9x7 nonstandard (=Iaug7) - G B D# A - 0,2,4,8&lt;br /&gt;id13min9x7,11 nonstandard (=id6min9x7) - G Bb Db Ab E - 0,1,4,7,10&lt;br /&gt;id13x7,9,11 nonstandard (=id6) - G Bb Db E - 0,3,6,9&lt;br /&gt;id6maj7x3 nonstandard (=imin9x3) - G Db E F# - 0,1,3,6&lt;br /&gt;id6min9x3,7 nonstandard (=ids5) - G Db E Ab - 0,1,4,7&lt;br /&gt;id6x3 nonstandard (=id) - G Db E - 0,3,6&lt;br /&gt;idmin9x3,7 nonstandard (=idx3s5) - G Db Ab - 0,1,7&lt;br /&gt;ids4 nonstandard (=imin9x3) - G Bb C Db - 0,1,3,6&lt;br /&gt;imaj711x3,5,9 nonstandard (=idx3s5) - G F# C - 0,1,7&lt;br /&gt;imaj7x3,5s4 nonstandard (=idx3s5) - G C F# - 0,1,7&lt;br /&gt;Is2 nonstandard (=I9x7) - G A B D - 0,2,4,9&lt;br /&gt;Ix1 nonstandard (=ix5) - B D - 0,3&lt;br /&gt;ix1 nonstandard (=Ix5) - Bb D - 0,4&lt;br /&gt;ix3s2 nonstandard (=ix3s4) - G A D - 0,2,7&lt;br /&gt;ix3s2,4 nonstandard (=i7x3s4) - G A C D - 0,2,5,7&lt;br /&gt;ix3s2,6 nonstandard (=i7x3s4) - G A D E - 0,2,5,7&lt;br /&gt;&lt;br /&gt;Copyright (c) 2009 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-978647094973043741?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/978647094973043741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2009/01/normalized-chord-notation-naming-based.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/978647094973043741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/978647094973043741'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2009/01/normalized-chord-notation-naming-based.html' title='A normalized chord notation &amp; naming based on Mozart&apos;s Agnus Dei from Missa Brevis in D (K.194)'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3755010526029146864.post-8263687974843574679</id><published>2009-01-10T11:01:00.027-05:00</published><updated>2011-07-27T11:08:06.095-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='obama'/><category scheme='http://www.blogger.com/atom/ns#' term='president'/><category scheme='http://www.blogger.com/atom/ns#' term='rank'/><category scheme='http://www.blogger.com/atom/ns#' term='electoral college'/><category scheme='http://www.blogger.com/atom/ns#' term='election'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><category scheme='http://www.blogger.com/atom/ns#' term='landslide'/><category scheme='http://www.blogger.com/atom/ns#' term='chart'/><category scheme='http://www.blogger.com/atom/ns#' term='united states'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><category scheme='http://www.blogger.com/atom/ns#' term='vote'/><title type='text'>Obama's landslide ranking among U.S. Electoral College first-term votes</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pcy4JjaAYdE/SXS4VXuerMI/AAAAAAAAAAk/CWs9gBPRDNs/s1600-h/e-c-chron.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 274px;" src="http://2.bp.blogspot.com/_pcy4JjaAYdE/SXS4VXuerMI/AAAAAAAAAAk/CWs9gBPRDNs/s400/e-c-chron.JPG" alt="" id="BLOGGER_PHOTO_ID_5293058139352902850" border="0" /&gt;&lt;/a&gt;Obama's 2008 landslide election achievement ranks a good 16th-best among the 34 first-term U.S. presidents. Over all 56 elected presidential terms, Obama ranks 32nd-best.&lt;br /&gt;&lt;br /&gt;The rankings seem important in measuring the 'mood of the country' regarding the immediately-previous president's policies. The size of the landslide may give some insight into how dissatisfied we were at the time. The rankings are expressed here as ratios formed from the number of Electoral College votes received, and the votes needed to win, rounded to three decimal places.&lt;br /&gt;&lt;br /&gt;Obama ranks below only the presidents: Washington, Reagan, Roosevelt (1932), Pierce, Monroe, Hoover, Eisenhower, Wilson, Harrison (1840), Bush (1988), Harding, Grant, Madison, Clinton, and Jackson.&lt;br /&gt;&lt;br /&gt;Obama ranks above the presidents: Taft, Polk, McKinley, Lincoln, Buchanan, Harrison (1888), Garfield, Van Buren, Kennedy, Taylor, Nixon, Carter, Cleveland, Jefferson, Adams (1796), Bush (2000), Hayes, and Adams (1824).&lt;br /&gt;&lt;br /&gt;On December 15, 2008, the Electoral College, comprising electors selected by each state, met together and voted. On January 8, 2009, "Vice President Dick Cheney, in his role as Senate president,"(A) "led a Senate delegation into the House chamber, along with teenage pages carrying two mahogany boxes containing the certified vote totals of each state."(B)&lt;br /&gt;&lt;br /&gt;"'Pursuant to the Constitution and laws of the United States, the Senate and House of Representatives are meeting in joint session to verify the certificates and count the votes of the electors of the several states,' Cheney intoned in opening the session."(B) He then "sat on the podium next to"(B) House Speaker Nancy Pelosi and "handed the certificates from each state's electors to the"(B) "four 'tellers,' two members each from the House and Senate,"(B) "to be read and tallied,"(B) who "then commenced reading the votes from each state."(B) After 30 minutes, Cheney announced that Congress had certified and tallied, finally, the Electoral College's votes from each state as reflected here.&lt;br /&gt;&lt;br /&gt;Here are the landslide rankings for all the elected, first-term presidents:&lt;br /&gt;&lt;br /&gt;year received needed-to-win name ratio rank&lt;br /&gt;1789 69 35 Washington 1.971 1&lt;br /&gt;1980 489 270 Reagan 1.811 2&lt;br /&gt;1932 472 266 Roosevelt 1.774 3&lt;br /&gt;1852 254 149 Pierce 1.705 4&lt;br /&gt;1816 183 109 Monroe 1.679 5&lt;br /&gt;1928 444 266 Hoover 1.669 6&lt;br /&gt;1952 442 266 Eisenhower 1.662 7&lt;br /&gt;1912 435 266 Wilson 1.635 8&lt;br /&gt;1840 234 148 Harrison 1.581 9&lt;br /&gt;1988 426 270 Bush 1.578 10&lt;br /&gt;1920 404 266 Harding 1.519 11&lt;br /&gt;1868 214 148 Grant 1.446 12&lt;br /&gt;1808 122 88 Madison 1.386 13&lt;br /&gt;1992 370 270 Clinton 1.370 14&lt;br /&gt;1828 178 131 Jackson 1.359 15&lt;br /&gt;2008 365 270 Obama 1.352 16&lt;br /&gt;1908 321 242 Taft 1.326 17&lt;br /&gt;1844 170 138 Polk 1.232 18&lt;br /&gt;1896 271 224 McKinley 1.210 19&lt;br /&gt;1860 180 152 Lincoln 1.184 20&lt;br /&gt;1856 174 149 Buchanan 1.168 21&lt;br /&gt;1888 233 201 Harrison 1.159 22&lt;br /&gt;1880 214 185 Garfield 1.157 23&lt;br /&gt;1836 170 148 Van Buren 1.149 24&lt;br /&gt;1960 303 269 Kennedy 1.126 25&lt;br /&gt;1848 163 146 Taylor 1.116 26&lt;br /&gt;1968 301 270 Nixon 1.115 27&lt;br /&gt;1976 297 270 Carter 1.100 28&lt;br /&gt;1884 219 201 Cleveland 1.090 29&lt;br /&gt;1800 73 70 Jefferson 1.043 30&lt;br /&gt;1796 71 69 Adams 1.029 31&lt;br /&gt;2000 271 270 Bush 1.004 32&lt;br /&gt;1876 185 185 Hayes 1.000 33&lt;br /&gt;1824 84 131 Adams 0.641 34&lt;br /&gt;&lt;br /&gt;Here are the landslide rankings of all the elected, presidential terms:&lt;br /&gt;&lt;br /&gt;year received needed-to-win name ratio rank&lt;br /&gt;1789 69 35 Washington 1.971 1&lt;br /&gt;1792 132 67 Washington 1.970 2&lt;br /&gt;1936 523 266 Roosevelt 1.966 3&lt;br /&gt;1820 231 118 Monroe 1.958 4&lt;br /&gt;1984 525 270 Reagan 1.944 5&lt;br /&gt;1972 520 270 Nixon 1.926 6&lt;br /&gt;1804 162 89 Jefferson 1.820 7&lt;br /&gt;1864 212 117 Lincoln 1.812 8&lt;br /&gt;1980 489 270 Reagan 1.811 9&lt;br /&gt;1964 486 270 Johnson 1.800 10&lt;br /&gt;1932 472 266 Roosevelt 1.774 11&lt;br /&gt;1956 457 266 Eisenhower 1.718 12&lt;br /&gt;1852 254 149 Pierce 1.705 13&lt;br /&gt;1940 449 266 Roosevelt 1.688 14&lt;br /&gt;1816 183 109 Monroe 1.679 15&lt;br /&gt;1928 444 266 Hoover 1.669 16&lt;br /&gt;1952 442 266 Eisenhower 1.662 17&lt;br /&gt;1912 435 266 Wilson 1.635 18&lt;br /&gt;1944 432 266 Roosevelt 1.624 19&lt;br /&gt;1872 286 177 Grant 1.616 20&lt;br /&gt;1840 234 148 Harrison 1.581 21&lt;br /&gt;1988 426 270 Bush 1.578 22&lt;br /&gt;1832 219 144 Jackson 1.521 23&lt;br /&gt;1920 404 266 Harding 1.519 24&lt;br /&gt;1868 214 148 Grant 1.446 25&lt;br /&gt;1924 382 266 Coolidge 1.436 26&lt;br /&gt;1904 336 239 Roosevelt 1.406 27&lt;br /&gt;1996 379 270 Clinton 1.404 28&lt;br /&gt;1808 122 88 Madison 1.386 29&lt;br /&gt;1992 370 270 Clinton 1.370 30&lt;br /&gt;1828 178 131 Jackson 1.359 31&lt;br /&gt;2008 365 270 Obama 1.352 32&lt;br /&gt;1908 321 242 Taft 1.326 33&lt;br /&gt;1900 292 224 McKinley 1.304 34&lt;br /&gt;1892 277 223 Cleveland 1.242 35&lt;br /&gt;1844 170 138 Polk 1.232 36&lt;br /&gt;1896 271 224 McKinley 1.210 37&lt;br /&gt;1860 180 152 Lincoln 1.184 38&lt;br /&gt;1812 128 109 Madison 1.174 39&lt;br /&gt;1856 174 149 Buchanan 1.168 40&lt;br /&gt;1888 233 201 Harrison 1.159 41&lt;br /&gt;1880 214 185 Garfield 1.157 42&lt;br /&gt;1836 170 148 Van Buren 1.149 43&lt;br /&gt;1948 303 266 Truman 1.139 44&lt;br /&gt;1960 303 269 Kennedy 1.126 45&lt;br /&gt;1848 163 146 Taylor 1.116 46&lt;br /&gt;1968 301 270 Nixon 1.115 47&lt;br /&gt;1976 297 270 Carter 1.100 48&lt;br /&gt;1884 219 201 Cleveland 1.090 49&lt;br /&gt;2004 286 270 Bush 1.059 50&lt;br /&gt;1800 73 70 Jefferson 1.043 51&lt;br /&gt;1916 277 266 Wilson 1.041 52&lt;br /&gt;1796 71 69 Adams 1.029 53&lt;br /&gt;2000 271 270 Bush 1.004 54&lt;br /&gt;1876 185 185 Hayes 1.000 55&lt;br /&gt;1824 84 131 Adams 0.641 56&lt;br /&gt;&lt;br /&gt;Here is the raw data about all of the presidential elections:&lt;br /&gt;&lt;br /&gt;year received needed-to-win name ratio&lt;br /&gt;1789 69 35 Washington 1.971&lt;br /&gt;1792 132 67 Washington 1.970&lt;br /&gt;1796 71 69 Adams 1.029&lt;br /&gt;1800 73 70 Jefferson 1.043&lt;br /&gt;1804 162 89 Jefferson 1.820&lt;br /&gt;1808 122 88 Madison 1.386&lt;br /&gt;1812 128 109 Madison 1.174&lt;br /&gt;1816 183 109 Monroe 1.679&lt;br /&gt;1820 231 118 Monroe 1.958&lt;br /&gt;1824 84 131 Adams 0.641&lt;br /&gt;1828 178 131 Jackson 1.359&lt;br /&gt;1832 219 144 Jackson 1.521&lt;br /&gt;1836 170 148 Van Buren 1.149&lt;br /&gt;1840 234 148 Harrison 1.581&lt;br /&gt;1844 170 138 Polk 1.232&lt;br /&gt;1848 163 146 Taylor 1.116&lt;br /&gt;1852 254 149 Pierce 1.705&lt;br /&gt;1856 174 149 Buchanan 1.168&lt;br /&gt;1860 180 152 Lincoln 1.184&lt;br /&gt;1864 212 117 Lincoln 1.812&lt;br /&gt;1868 214 148 Grant 1.446&lt;br /&gt;1872 286 177 Grant 1.616&lt;br /&gt;1876 185 185 Hayes 1.000&lt;br /&gt;1880 214 185 Garfield 1.157&lt;br /&gt;1884 219 201 Cleveland 1.090&lt;br /&gt;1888 233 201 Harrison 1.159&lt;br /&gt;1892 277 223 Cleveland 1.242&lt;br /&gt;1896 271 224 McKinley 1.210&lt;br /&gt;1900 292 224 McKinley 1.304&lt;br /&gt;1904 336 239 Roosevelt 1.406&lt;br /&gt;1908 321 242 Taft 1.326&lt;br /&gt;1912 435 266 Wilson 1.635&lt;br /&gt;1916 277 266 Wilson 1.041&lt;br /&gt;1920 404 266 Harding 1.519&lt;br /&gt;1924 382 266 Coolidge 1.436&lt;br /&gt;1928 444 266 Hoover 1.669&lt;br /&gt;1932 472 266 Roosevelt 1.774&lt;br /&gt;1936 523 266 Roosevelt 1.966&lt;br /&gt;1940 449 266 Roosevelt 1.688&lt;br /&gt;1944 432 266 Roosevelt 1.624&lt;br /&gt;1948 303 266 Truman 1.139&lt;br /&gt;1952 442 266 Eisenhower 1.662&lt;br /&gt;1956 457 266 Eisenhower 1.718&lt;br /&gt;1960 303 269 Kennedy 1.126&lt;br /&gt;1964 486 270 Johnson 1.800&lt;br /&gt;1968 301 270 Nixon 1.115&lt;br /&gt;1972 520 270 Nixon 1.926&lt;br /&gt;1976 297 270 Carter 1.100&lt;br /&gt;1980 489 270 Reagan 1.811&lt;br /&gt;1984 525 270 Reagan 1.944&lt;br /&gt;1988 426 270 Bush 1.578&lt;br /&gt;1992 370 270 Clinton 1.370&lt;br /&gt;1996 379 270 Clinton 1.404&lt;br /&gt;2000 271 270 Bush 1.004&lt;br /&gt;2004 286 270 Bush 1.059&lt;br /&gt;2008 365 270 Obama 1.352&lt;br /&gt;&lt;br /&gt;Sources:&lt;br /&gt;http://www.archives.gov/federal-register/electoral-college/votes/index.html&lt;br /&gt;(A) http://www.boston.com/news/nation/washington/articles/2009/01/09/\&lt;br /&gt;its_official_congress_certifies_obamas_victory/&lt;br /&gt;(B) http://news.yahoo.com/s/ap/20090108/ap_on_go_pr_wh/electoral_votes&lt;br /&gt;http://en.wikipedia.org/wiki/Electoral_College_(United_States)&lt;br /&gt;See also:&lt;br /&gt;http://www.electoral-vote.com/evp2008/Pres/ec_graph-2008.html&lt;br /&gt;http://www.outsidethebeltway.com/archives/obamas_landslide/&lt;br /&gt;http://www-personal.umich.edu/~mejn/election/2008/&lt;br /&gt;http://en.wikipedia.org/wiki/\&lt;br /&gt;List_of_United_States_presidential_elections_by_Electoral_College_margin&lt;br /&gt;&lt;br /&gt;Copyright (c) 2009 Mark D. Blackwell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3755010526029146864-8263687974843574679?l=markdblackwell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markdblackwell.blogspot.com/feeds/8263687974843574679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markdblackwell.blogspot.com/2009/01/obamas-landslide-ranking-among-us.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/8263687974843574679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3755010526029146864/posts/default/8263687974843574679'/><link rel='alternate' type='text/html' href='http://markdblackwell.blogspot.com/2009/01/obamas-landslide-ranking-among-us.html' title='Obama&apos;s landslide ranking among U.S. Electoral College first-term votes'/><author><name>Mark D. Blackwell</name><uri>http://www.blogger.com/profile/15999097238112264588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/-yAGHMYmy4S4/TY5Cll1NUAI/AAAAAAAAACs/Lqus66B3-r4/s220/mark-drawing5.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pcy4JjaAYdE/SXS4VXuerMI/AAAAAAAAAAk/CWs9gBPRDNs/s72-c/e-c-chron.JPG' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
