<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkMNSH05fip7ImA9WhRVEkk.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143</id><updated>2012-01-10T17:08:19.326-07:00</updated><category term="ruby" /><category term="poem" /><category term="mup" /><category term="gravitons" /><category term="unenforceable-law" /><category term="thanksgiving" /><category term="change" /><category term="conversion" /><category term="learning-curve" /><category term="organizing" /><category term="upgrade" /><category term="site-design" /><category term="test" /><category term="lazy" /><category term="familysearch" /><category term="git" /><category term="cheap-experimentation" /><category term="rack" /><category term="person-link" /><category term="family" /><category term="email" /><category term="open" /><category term="unicode" /><category term="slack" /><category term="new-familysearch" /><category term="byline" /><category term="prayer" /><category term="merge" /><category term="version-control" /><category term="rubyconf" /><category term="dry" /><category term="drawing" /><category term="reality" /><category term="years" /><category term="programming" /><category term="tracking" /><category term="in-control" /><category term="ann" /><category term="music" /><category term="self-review" /><category term="atheism" /><category term="intellij" /><category term="fshelper" /><category term="faith" /><category term="joy" /><category term="links" /><category term="blog" /><category term="state" /><category term="genealogy" /><category term="rootstech" /><category term="mwrc" /><category term="integration" /><category term="rollout" /><category term="church" /><category term="build" /><category term="promises" /><category term="belief" /><category term="software" /><category term="twitter" /><category term="innovation" /><category term="modularity" /><category term="pain" /><category term="demand" /><category term="fun" /><category term="ubuntu" /><category term="architecture" /><category term="why" /><category term="writing" /><category term="markets" /><category term="management" /><category term="tight-loop" /><title>Deliberate Thinking</title><subtitle type="html">Thoughts and comments by John Sumsion about life and software.&lt;br&gt;
&lt;a href="http://lds.org/scriptures/bofm/alma/34.38?lang=eng#37"&gt;&lt;u&gt;Alma 34:38&lt;/u&gt;&lt;/a&gt; Live in thanksgiving daily, for the many mercies and blessings which he doth bestow upon you.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://deliberate-thinking.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/deliberate-thinking" /><feedburner:info uri="blogspot/deliberate-thinking" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/3.0/" /><entry gd:etag="W/&quot;CkMAQX44eSp7ImA9WhRVEkw.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-7858156440577807356</id><published>2012-01-10T07:46:00.001-07:00</published><updated>2012-01-10T08:47:20.031-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-10T08:47:20.031-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="joy" /><category scheme="http://www.blogger.com/atom/ns#" term="cheap-experimentation" /><category scheme="http://www.blogger.com/atom/ns#" term="dry" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Awesome CLI gem: Commandable</title><content type="html">&lt;div&gt;
Ever wanted to drive your ruby code with a CLI? &amp;nbsp;Well, the &lt;a href="https://rubygems.org/gems/commandable"&gt;commandable gem&lt;/a&gt; makes it easy.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
At first, I struggled with &lt;a href="http://www.ruby-doc.org/stdlib-1.9.3/libdoc/optparse/rdoc/OptionParser.html"&gt;OptionParser&lt;/a&gt; in the stdlib, but I had to duplicate my option handling across CLI code and method invocation. &amp;nbsp;Then OptionParser didn't handle required parameters at all, requiring me to do required parameters in a non-DRY way. &amp;nbsp; Also, OptionParse doesn't do sub-commands, git-style, which I needed for the new git plugin I'm working on.&lt;br /&gt;
&lt;br /&gt;
When I saw the &lt;a href="https://rubygems.org/gems/pickled_optparse"&gt;pickled_optparse gem&lt;/a&gt; (from &lt;a href="https://github.com/mikbe"&gt;Mike Bethany&lt;/a&gt;), it appeared to solve the missing 'required parameter' feature. &amp;nbsp;And the &lt;a href="https://rubygems.org/gems/subcommand"&gt;subcommand gem&lt;/a&gt; seemed to allow for subcommands with their own options, git-style. &amp;nbsp;However, the duplication across option definition and method invocation was still present. &amp;nbsp;And even subcommand required you to hook up the command to the class/method that needed to be called.&lt;br /&gt;
&lt;br /&gt;
Finally I found that the author of pickled_optparse had totally rethought CLI in ruby with his commandable gem. &amp;nbsp;And I &lt;i&gt;really&amp;nbsp;&lt;/i&gt;like what he did.&lt;br /&gt;
&lt;br /&gt;
Now there is no real additional logic AT ALL in order to hook your ruby class up to the command line. &amp;nbsp;Now my option handling code will be in the place it belongs, in the code that is &lt;i&gt;doing&lt;/i&gt; the command that I invoked from the command line.&lt;br /&gt;
&lt;br /&gt;
The main awesomeness here is that commandable &lt;i&gt;pushes&lt;/i&gt;&amp;nbsp;the CLI code into the appropriate place in your ruby class -- it makes it hard to scatter CLI code all over the place.&lt;br /&gt;
&lt;br /&gt;
My only beef with the gem are the following points:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;it comes with colors enabled by default (unusual for a CLI)&lt;/li&gt;
&lt;li&gt;it clears the screen by default when displaying help (when colors are enabled, &lt;i&gt;very&lt;/i&gt;&amp;nbsp;unusual and annoying for a CLI)&lt;/li&gt;
&lt;li&gt;it appears to be hard to do global options like: "cmd --global subcommand [args]"&lt;/li&gt;
&lt;li&gt;there is no support for parsing command CLI-style options into ruby hashes, but this is a minor nit, because that's what OptionParser is for, and it's easy to use inside the method&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
I &lt;a href="https://github.com/mikbe/commandable/pull/2"&gt;fixed a problem&lt;/a&gt; where the screen was cleared even if you disabled colors, and I've &lt;a href="https://github.com/jdsumsion/commandable/commit/73f0a7ec4d89c84c2577880d96c73775f2bfd17c"&gt;pushed it up to my fork&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Here is my hello world that shows commandable in action:&lt;br /&gt;
&lt;div&gt;
&lt;script src="https://gist.github.com/1589675.js?file=foo.rb"&gt;&lt;/script&gt;&lt;/div&gt;
&lt;br /&gt;
And here's the output for a few representative cases:&lt;br /&gt;
&lt;div&gt;
&lt;script src="https://gist.github.com/1589675.js?file=output.txt"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-7858156440577807356?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/02uGu_kVGmU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/7858156440577807356/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2012/01/stawesome-cli-gem-commandable.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7858156440577807356?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7858156440577807356?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/02uGu_kVGmU/stawesome-cli-gem-commandable.html" title="Awesome CLI gem: Commandable" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2012/01/stawesome-cli-gem-commandable.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MGRX45fSp7ImA9WhRWF0o.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-5359019655100849231</id><published>2012-01-04T22:37:00.002-07:00</published><updated>2012-01-05T06:50:24.025-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-05T06:50:24.025-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open" /><category scheme="http://www.blogger.com/atom/ns#" term="change" /><category scheme="http://www.blogger.com/atom/ns#" term="genealogy" /><category scheme="http://www.blogger.com/atom/ns#" term="markets" /><title>Open Genealogy Alliance</title><content type="html">The manifesto posted at &lt;a href="http://opengenalliance.org/"&gt;opengenalliance.org&lt;/a&gt; is something that I can very much support.&lt;br /&gt;
&lt;br /&gt;
As part of &lt;a href="http://rootstech.org/"&gt;RootsTech 2012&lt;/a&gt;, I'm going to sign up for an open hour to talk about open content licenses. &amp;nbsp;Anyone who has an interest in this topic, please get in touch with me and we can collaborate on the presentation.&lt;br /&gt;
&lt;br /&gt;
I wonder what it will take to get some more visible &amp;amp; material signs of support from archives, libraries, societies, museums, or genealogical content companies on that site.&lt;br /&gt;
&lt;br /&gt;
Something like the &lt;a href="http://www.opencontentalliance.org/contributors/"&gt;contributors&lt;/a&gt; listed on &lt;a href="http://opencontentalliance.org/"&gt;opencontentalliance.org&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Perhaps a link to the &lt;a href="http://www.kk.org/thetechnium/archives/2008/01/better_than_fre.php"&gt;Better Than Free&lt;/a&gt; article is in order. &amp;nbsp;My personal resources are small, but if there is any kind of material support I can give to the opengenalliance.org effort, I want to do so.&lt;br /&gt;
&lt;br /&gt;
Here are a few examples I could find of license information on open content sites (some related to genealogy, some not):&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.geni.com/company/terms_of_use"&gt;http://www.geni.com/company/terms_of_use&lt;/a&gt;&amp;nbsp;(search for "Proprietary Rights in Content")&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.genealogywiki.org/index.cfm/home/copyrightNotice"&gt;http://www.genealogywiki.org/index.cfm/home/copyrightNotice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.werelate.org/wiki/Help:FAQ#Can_I_copyright_the_information_that_I_contribute_to_WeRelate.3F"&gt;http://www.werelate.org/wiki/Help:FAQ#Can_I_copyright_the_information_that_I_contribute_to_WeRelate.3F&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sinclairgenealogy.info/creative-commons"&gt;http://www.sinclairgenealogy.info/creative-commons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wikimediafoundation.org/wiki/Terms_of_use"&gt;http://wikimediafoundation.org/wiki/Terms_of_use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://openlibrary.org/developers/licensing"&gt;http://openlibrary.org/developers/licensing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.opencontentalliance.org/faq/#link3"&gt;http://www.opencontentalliance.org/faq/#link3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.opencontentalliance.org/faq/#link4"&gt;http://www.opencontentalliance.org/faq/#link4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.archive.org/about/faqs.php#Rights"&gt;http://www.archive.org/about/faqs.php#Rights&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-5359019655100849231?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/PdefOgXzEPk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/5359019655100849231/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2012/01/open-genealogy-alliance.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/5359019655100849231?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/5359019655100849231?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/PdefOgXzEPk/open-genealogy-alliance.html" title="Open Genealogy Alliance" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2012/01/open-genealogy-alliance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4DQXo_eip7ImA9WhRWFkw.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-598447202861180825</id><published>2012-01-03T10:49:00.002-07:00</published><updated>2012-01-03T10:49:30.442-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T10:49:30.442-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="blog" /><category scheme="http://www.blogger.com/atom/ns#" term="tracking" /><category scheme="http://www.blogger.com/atom/ns#" term="organizing" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>Wish TwitterFeed supported auto-hashtags</title><content type="html">After using TwitterFeed for a while, it's really cool! &amp;nbsp;Props to betaworks for an awesome tool!&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
All I want now is auto-hashtag support.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Just look for the last line of a post that is only hashtags, and #dont #take #arbitrary hashtags from the #body of the #post.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Don't bother with trying to convert blog post tags into hashtags -- I want a different vocabulary of hashtags on twitter vs. tags on my blog.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
#twfeed #hashtags&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-598447202861180825?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/wpG9acxhInw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/598447202861180825/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2012/01/wish-twitterfeed-supported-auto.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/598447202861180825?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/598447202861180825?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/wpG9acxhInw/wish-twitterfeed-supported-auto.html" title="Wish TwitterFeed supported auto-hashtags" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2012/01/wish-twitterfeed-supported-auto.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMCQHo7cCp7ImA9WhRWFkw.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-887674545572270714</id><published>2012-01-02T12:49:00.005-07:00</published><updated>2012-01-03T11:47:41.408-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T11:47:41.408-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open" /><category scheme="http://www.blogger.com/atom/ns#" term="organizing" /><category scheme="http://www.blogger.com/atom/ns#" term="genealogy" /><title>Open Geneological Research Vision</title><content type="html">&lt;div&gt;
&lt;div&gt;
At its core, every sustained genealogical research effort turns into a global, loosely-connected, semi-structured distributed edits problem.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
Open genealogical research needs a few conditions to thrive, I think.&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;significant stable corpus of research&lt;/li&gt;
&lt;li&gt;everyone publishing under compatible open data licenses (&lt;a href="http://creativecommons.org/licenses/by/3.0/us/"&gt;CC-BY&lt;/a&gt;[&lt;a href="http://creativecommons.org/licenses/by-sa/3.0/"&gt;-SA&lt;/a&gt;], &lt;a href="http://creativecommons.org/publicdomain/zero/1.0/"&gt;CC0&lt;/a&gt;, or &lt;a href="http://opendefinition.org/licenses/"&gt;others&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;agreed-upon standard data formats&lt;/li&gt;
&lt;li&gt;ability to self-publish and curate your &lt;i&gt;own&lt;/i&gt;&amp;nbsp;research, independent of anyone else&lt;/li&gt;
&lt;li&gt;ability to make corrections, and publish those corrections, independent of anyone else&lt;/li&gt;
&lt;li&gt;ability to follow others' self-published research/corrections and pull it into your own research if you agree&lt;/li&gt;
&lt;li&gt;mechanisms that encourage convergence of separate research efforts on the same research topics&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Significant advances have been made in the last decade to enable certain aspects of online genealogical research. &amp;nbsp;The contributions of Ancestry and FamilySearch to providing indexed original records should not be underestimated.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The global family tree databases of&amp;nbsp;&lt;a href="http://www.ancestry.com/search/rectype/trees/owt/"&gt;Ancestry&lt;/a&gt;, &lt;a href="http://www.geni.com/worldfamilytree"&gt;Geni&lt;/a&gt;, &lt;a href="https://new.familysearch.org/"&gt;FamilySearch&lt;/a&gt;, &lt;a href="http://www.onegreatfamily.com/"&gt;One Great Family&lt;/a&gt;, and others are also very significant. &amp;nbsp;The efforts of &lt;a href="http://lythgoes.net/genealogy/software.php"&gt;TNG&lt;/a&gt; and &lt;a href="http://www.phpgedview.net/"&gt;PHPgedview&lt;/a&gt; are especially significant in the control and latitude that they give to individual contributors in their efforts to self-publish.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
However, online is not the same as open. &amp;nbsp;Open means &lt;i&gt;more&lt;/i&gt; than just letting the general public search or get a login, it means that the &lt;a href="http://www.opengenalliance.org/"&gt;dataset is licensed under an open license&lt;/a&gt;, and that this open licensing is adequately encouraged for subsequent contributions.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The ability for collaborative self-publishing is a primary concern that seems only partially implemented at this point in existing tools.&lt;br /&gt;
&lt;br /&gt;
I have had this picture in my head for a while, and it seems the right time to start writing about it and doing something about it.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-887674545572270714?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/28Ffx63G_XY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/887674545572270714/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2012/01/open-geneological-research-vision.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/887674545572270714?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/887674545572270714?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/28Ffx63G_XY/open-geneological-research-vision.html" title="Open Geneological Research Vision" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2012/01/open-geneological-research-vision.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EFRn4_fCp7ImA9WhRWFU4.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-6035509947980232617</id><published>2012-01-02T12:13:00.000-07:00</published><updated>2012-01-02T12:13:37.044-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-02T12:13:37.044-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="self-review" /><category scheme="http://www.blogger.com/atom/ns#" term="why" /><category scheme="http://www.blogger.com/atom/ns#" term="belief" /><category scheme="http://www.blogger.com/atom/ns#" term="faith" /><title>Seen, Persuaded, Embraced, Confessed</title><content type="html">One verse in Paul's description of the fathers of faith stood out to me:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;a href="http://lds.org/scriptures/nt/heb/11.13?lang=eng#12"&gt;Heb. 11:13&lt;/a&gt; These all died in faith, not having received the promises, but having seen them afar off, and were persuaded of them, and embraced them, and confessed that they were strangers and pilgrims on the earth.&lt;/blockquote&gt;
&lt;div&gt;
I've watched true followers of Jesus Christ demonstrate their devotion to Him in ways that involve all four elements of conversion.&amp;nbsp; In fact, I'd be willing to take this verse as a starting point for describing what true conversion is like.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
It seems to me that this pattern of increasing commitment and devotion is tightly involved in the process of understanding what one's personal mission in this life is.&amp;nbsp; When it finally gels, there isn't anything else but just to go do your life's work, and give your whole self for your Lord Jesus Christ and what He's called you to do here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-6035509947980232617?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/4xJw1eLk_GM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/6035509947980232617/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2012/01/seen-persuaded-embraced-confessed.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/6035509947980232617?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/6035509947980232617?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/4xJw1eLk_GM/seen-persuaded-embraced-confessed.html" title="Seen, Persuaded, Embraced, Confessed" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2012/01/seen-persuaded-embraced-confessed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQMQXY6eyp7ImA9WhRWE0g.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-7389297602551318023</id><published>2011-12-31T10:24:00.001-07:00</published><updated>2011-12-31T10:26:20.813-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-31T10:26:20.813-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="learning-curve" /><category scheme="http://www.blogger.com/atom/ns#" term="joy" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title>Useful Git Tips</title><content type="html">Every one of these tips was useful to me:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://mislav.uniqpath.com/2010/07/git-tips/"&gt;http://mislav.uniqpath.com/2010/07/git-tips/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
It just amazed me that these were written over a year ago, and I've been trying to learn as much about git as I could, but didn't even stumble across these in manpages.&lt;br /&gt;
&lt;br /&gt;
I found this by looking for an option that would let "git remote update" only fetch a subset of the remotes I have attached.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It is rewarding to feel like I'm working with a rich toolset.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Thanks to @mislav for posting this.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
BTW: Poking around in his tweet stream also yielded &lt;a href="http://jsonselect.org/"&gt;this gem&lt;/a&gt;. &amp;nbsp;I've always wondered if there was a lightweight XPath for JSON, and &lt;a href="http://jsonselect.org/#overview"&gt;there&lt;/a&gt; &lt;a href="https://github.com/lloyd/JSONSelect"&gt;it&lt;/a&gt; &lt;a href="https://github.com/fd/json_select"&gt;is&lt;/a&gt;. &amp;nbsp;Some &lt;a href="http://ejohn.org/blog/selectors-that-people-actually-use/"&gt;background&lt;/a&gt; is in order, as much of the "XPath for Javascript" mentality was based on early JQuery thoughts.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-7389297602551318023?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/pfSUgo2DRwk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/7389297602551318023/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/12/useful-git-tips.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7389297602551318023?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7389297602551318023?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/pfSUgo2DRwk/useful-git-tips.html" title="Useful Git Tips" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/12/useful-git-tips.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QCQH4_fip7ImA9WhRWE0k.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-7088703619153599137</id><published>2011-12-31T08:29:00.001-07:00</published><updated>2011-12-31T08:29:21.046-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-31T08:29:21.046-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blog" /><category scheme="http://www.blogger.com/atom/ns#" term="site-design" /><category scheme="http://www.blogger.com/atom/ns#" term="dry" /><category scheme="http://www.blogger.com/atom/ns#" term="organizing" /><category scheme="http://www.blogger.com/atom/ns#" term="tight-loop" /><category scheme="http://www.blogger.com/atom/ns#" term="familysearch" /><title>Subscribing to FamilySearch Updates</title><content type="html">Keeping up with all that's going on at &lt;a href="https://www.familysearch.org/"&gt;FamilySearch&lt;/a&gt; is harder than it needs to be, but I finally figured out how.&lt;br /&gt;
&lt;br /&gt;
Most sites give you large categories of feeds to track, &lt;a href="https://www.familysearch.org/taxonomy/term/1/0"&gt;but&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/2/0"&gt;FamilySearch&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/3/0"&gt;has&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/4/0"&gt;all&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/5/0"&gt;of&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/6/0"&gt;14&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/7/0"&gt;different&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/8/0"&gt;feeds&lt;/a&gt;, &lt;a href="https://www.familysearch.org/taxonomy/term/9/0"&gt;some&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/10/0"&gt;of&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/11/0"&gt;which&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/12/0"&gt;overlap&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/13/0"&gt;or&lt;/a&gt; &lt;a href="https://www.familysearch.org/taxonomy/term/14/0"&gt;not&lt;/a&gt; (the feeds are available by appending '/feed' to the URL). &amp;nbsp;But I couldn't find any "everything" feed URL.&lt;br /&gt;
&lt;br /&gt;
Because &lt;a href="http://www.linkedin.com/profile/view?id=6323660"&gt;I work for FamilySearch&lt;/a&gt;, and because I care about what goes on around me, I want to subscribe to everything, if only just to skim. &amp;nbsp;The most important announcements get forwarded through internal email, however the additional articles are very useful context, especially for an employee.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the default "subscribe" link just subscribes you to feeds #2, #3, &amp;amp; #4, or Indexing, Record Search, &amp;amp; Indexing, respectively. &amp;nbsp;The "Subscribe" link is visible on an &lt;a href="https://www.familysearch.org/node/1520"&gt;individual article's page&lt;/a&gt;, but isn't even present on the &lt;a href="https://www.familysearch.org/blog"&gt;main blog page&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Here is the feed link you can put in your feed reader to subscribe to everything:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.familysearch.org/taxonomy/term/1+2+3+4+5+6+7+8+9+10+11+12+13+14/0/feed"&gt;https://www.familysearch.org/taxonomy/term/1+2+3+4+5+6+7+8+9+10+11+12+13+14/0/feed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
When feed/category/blog #15 gets defined, this feed URL will be invalid again. &amp;nbsp;Maybe there is a better way. &amp;nbsp;If anyone knows a better way, please let me know.&lt;br /&gt;
&lt;br /&gt;
I want an "everything" subscribe link that I won't have to update in my feed reader, or maybe an "everything but trivia" link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-7088703619153599137?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/u-7d4JWwyKU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/7088703619153599137/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/12/subscribing-to-familysearch-updates.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7088703619153599137?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7088703619153599137?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/u-7d4JWwyKU/subscribing-to-familysearch-updates.html" title="Subscribing to FamilySearch Updates" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/12/subscribing-to-familysearch-updates.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08GQXoyeyp7ImA9WhRXF0k.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-1997770997705551065</id><published>2011-12-24T09:55:00.001-07:00</published><updated>2011-12-24T09:57:00.493-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T09:57:00.493-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="learning-curve" /><category scheme="http://www.blogger.com/atom/ns#" term="reality" /><category scheme="http://www.blogger.com/atom/ns#" term="email" /><category scheme="http://www.blogger.com/atom/ns#" term="tracking" /><category scheme="http://www.blogger.com/atom/ns#" term="organizing" /><category scheme="http://www.blogger.com/atom/ns#" term="in-control" /><category scheme="http://www.blogger.com/atom/ns#" term="tight-loop" /><category scheme="http://www.blogger.com/atom/ns#" term="writing" /><category scheme="http://www.blogger.com/atom/ns#" term="links" /><title>Missed Tweets Through News.me</title><content type="html">I've never really been a &lt;a href="https://twitter.com/"&gt;twitter&lt;/a&gt; nut. &amp;nbsp;There are already enough sources of distraction for me, I &lt;a href="http://www-cs-faculty.stanford.edu/~uno/email.html"&gt;don't need&lt;/a&gt; to add another source. &amp;nbsp;It just seemed really noisy.&lt;br /&gt;
&lt;br /&gt;
However, people have been saying and linking to &lt;a href="http://www.sitepoint.com/how-to-find-breaking-news-on-twitter/"&gt;important things on twitter&lt;/a&gt; for a while now. &amp;nbsp;I'm just not discerning enough and don't have enough time to filter the firehose in a useful way.&lt;br /&gt;
&lt;br /&gt;
The most helpful summary of interesting news I skim regularly is the weekly LinkedIn emails. &amp;nbsp;In fact, I think it may have been through a link chain from one of those emails that I &lt;a href="http://deliberate-thinking.blogspot.com/2011/12/intrusion-detection-through-stackable.html"&gt;stumbled on unionfs&lt;/a&gt;, as reported in the last post. &amp;nbsp;If I could have the same thing for twitter, but personalized to the people I follow, that would be really helpful!&lt;br /&gt;
&lt;br /&gt;
Ironically, as part of the effort to make this blog more stuble-upon-able, I was looking for a way to &lt;a href="http://twitterfeed.com/"&gt;auto-post on twitter and facebook&lt;/a&gt; whenever I post on this blog, and I found twitterfeed.com, which does all of that and more. &amp;nbsp;And it's &lt;i&gt;easy&lt;/i&gt; to set up.&lt;br /&gt;
&lt;br /&gt;
After setting that up this morning, I wondered: "What is the &lt;a href="http://betaworks.com/"&gt;company behind twitterfeed.com&lt;/a&gt;?", and found betaworks. &amp;nbsp;They run some very interesting sites/companies, some of which I knew about (&lt;a href="http://bit.ly/"&gt;bit.ly&lt;/a&gt;), some of which were new to me (&lt;a href="http://findings.com/"&gt;findings.com&lt;/a&gt;, &lt;a href="http://chartbeat.com/"&gt;chartbeat.com&lt;/a&gt;). &amp;nbsp;The interesting one for me right now was another site called &lt;a href="http://news.me/"&gt;news.me&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Turns out that news.me is just the kind of thing that has the chance of &lt;a href="http://askaaronlee.com/twitter-useful/"&gt;making twitter useful to me&lt;/a&gt;. &amp;nbsp;If things go well, you'll probably hear more about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-1997770997705551065?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/TtL3wKhfmo8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/1997770997705551065/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/12/missed-tweets-through-newsme.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/1997770997705551065?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/1997770997705551065?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/TtL3wKhfmo8/missed-tweets-through-newsme.html" title="Missed Tweets Through News.me" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/12/missed-tweets-through-newsme.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQNQHk6eSp7ImA9WhRXFU0.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-5567395121054762567</id><published>2011-12-21T15:08:00.001-07:00</published><updated>2011-12-21T15:26:31.711-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T15:26:31.711-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="joy" /><category scheme="http://www.blogger.com/atom/ns#" term="cheap-experimentation" /><category scheme="http://www.blogger.com/atom/ns#" term="rack" /><category scheme="http://www.blogger.com/atom/ns#" term="modularity" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="innovation" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="tight-loop" /><title>Intrusion Detection through Stackable Filesystems</title><content type="html">I've always wondered what exploit might be running on my system, and never had any time to devise/install a detection system that would have the right balance of useful detection (maximize) and performance impact (minimize).&lt;br /&gt;
&lt;br /&gt;
When I &lt;a href="http://www.linuxjournal.com/article/7714"&gt;stumbled&lt;/a&gt; upon &lt;a href="http://www.filesystems.org/project-unionfs.html"&gt;unionfs&lt;/a&gt; a couple weeks ago, I thought that was an interesting idea from a change-&lt;a href="http://www.filesystems.org/docs/tracefs-fast04/index.html"&gt;logging&lt;/a&gt; perspective. &amp;nbsp;It's sometimes useful to be able to keep a filesystem-based diff of what a certain operation does to a system, and then &lt;a href="http://www.linuxjournal.com/article/7714?page=0,1"&gt;bake it onto the system&lt;/a&gt; when I know it did what I wanted to. &amp;nbsp;The takeaway for me was that unionfs's &lt;i&gt;performance&lt;/i&gt;&amp;nbsp;profile had the opportunity to be so low&amp;nbsp;because it was so thin and so baked into the kernel.&lt;br /&gt;
&lt;br /&gt;
This compounded with my recent discovery and fiddling with fusefs (in user-land) and I wondered about what kind of &lt;i&gt;useful logic&lt;/i&gt; I could put underneath a filesystem. &amp;nbsp;The &lt;a href="http://www.gluster.org/community/documentation/index.php/GlusterFS_Concepts"&gt;GlusterFS feature set&lt;/a&gt;, the &lt;a href="http://www.lessfs.com/wordpress/?p=658"&gt;recent LessFS GC&lt;/a&gt; stuff,&amp;nbsp;the&amp;nbsp;&lt;a href="http://www.makelinux.net/man/1/B/bup-fuse"&gt;bup-fuse&lt;/a&gt;&amp;nbsp;stuff,&amp;nbsp;and the &lt;a href="http://code.google.com/p/s3fs/wiki/FuseOverAmazon"&gt;S3FS stuff&lt;/a&gt; is all just *really* cool. &amp;nbsp;I ended up gazing longingly at the big backlog of &lt;a href="http://sourceforge.net/apps/mediawiki/fuse/index.php?title=Filesystem_Suggestions"&gt;fuse filsystem suggestions&lt;/a&gt; on their wiki, and wandered back into the unionfs space.&lt;br /&gt;
&lt;br /&gt;
So, when I saw the &lt;a href="http://www.filesystems.org/docs/i3fs/i3fs.html"&gt;I3FS paper&lt;/a&gt; (linked from &lt;a href="http://www.filesystems.org/#papers"&gt;here&lt;/a&gt;) about&amp;nbsp;the modular application of this technique to intrusion detection, this really triggered the &lt;i&gt;Useful&lt;/i&gt; *AND* &lt;i&gt;Performant&lt;/i&gt; neurons and I got really excited.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, on first glance, the stackable filesystems stuff seemed pretty cryptic to set up in a lightweight, just-works kind of way (think custom mount command-lines complete with arcane stacking options).&lt;br /&gt;
&lt;br /&gt;
It would be soooo awesome to have an easy-to-compose ruby DSL for doing some kind of rack-like filesystem mashup with a kernel-level unionfs layer underneath a user-land fusefs layer, but all expressed in the same DSL.&lt;br /&gt;
&lt;br /&gt;
This would be an awesome tool to put on top of the Arch-derived clone I want to put up for people at work. &amp;nbsp;There are folks who care about living more on the edge of linux stuff, but that don't care to install from scratch, and also might not care that much about not having a full Gnome stack if things just work. &amp;nbsp;And if I could give them the same tuned IDS-on-the-desktop solution (or upgrade their developer stack by letting them pull a filesystem delta over), that would be really cool.&lt;br /&gt;
&lt;br /&gt;
The cheap development observation [&lt;a href="http://www.filesystems.org/docs/specializedfs/specializedfs-login.pdf"&gt;PDF&lt;/a&gt;, &lt;a href="http://www.usenix.org/publications/login/2010-02/index.html"&gt;linked from&lt;/a&gt;]&amp;nbsp;because of modularity is one of attributes valued highly by the Ruby community as well. &amp;nbsp;It is one&amp;nbsp;the key things that makes Ruby as a community awesome.&lt;br /&gt;
&lt;br /&gt;
These kinds of ideas really matter, and making them so cheap and stable that you don't have to think about them really matters even more.&lt;br /&gt;
&lt;br /&gt;
NOTE: The I3FS paper is really pretty old (2004), and the whole unionfs stack is older than that. &amp;nbsp;The fuse stack came into the kernel a long time ago too (2005). &amp;nbsp;So while this is new to me, it's been around for quite a long time. &amp;nbsp;I'm &lt;a href="http://deliberate-thinking.blogspot.com/2010/07/playing-catch-up.html"&gt;playing catch-up&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-5567395121054762567?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/7ziRCnJcbuc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/5567395121054762567/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/12/intrusion-detection-through-stackable.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/5567395121054762567?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/5567395121054762567?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/7ziRCnJcbuc/intrusion-detection-through-stackable.html" title="Intrusion Detection through Stackable Filesystems" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/12/intrusion-detection-through-stackable.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMBQ388cCp7ImA9WhRXFEU.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-2676346441233695339</id><published>2011-12-21T08:46:00.001-07:00</published><updated>2011-12-21T08:47:32.178-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T08:47:32.178-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="modularity" /><category scheme="http://www.blogger.com/atom/ns#" term="unicode" /><category scheme="http://www.blogger.com/atom/ns#" term="upgrade" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Unicode Support Better Now in Ruby</title><content type="html">Unicode support in Ruby has historically been one of Ruby's major problems for me.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
With the advent of Ruby 1.9 of course, Unicode support started being added to the language. &amp;nbsp;However, it's not as straightforward as Java, which supported some version of Unicode from the beginning.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Even though it's been a rough decade, things are finally looking up. &amp;nbsp;In fact, I actually like the way things got factored after all of the mess.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The thing I like is that the minimal amount of support is included in the standard library, and it's easy to compose things in non-standard ways for weird scenarios or data in improperly encoded formats.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The core library has support for &lt;a href="http://www.ruby-doc.org/core-1.9.3/String.html"&gt;strings&lt;/a&gt; &lt;a href="http://stackoverflow.com/questions/308749/whats-the-opposite-of-chr-in-ruby"&gt;of&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.ruby-doc.org/core-1.9.3/String.html#method-i-codepoints"&gt;codepoints&lt;/a&gt; and &lt;a href="http://www.ruby-doc.org/core-1.9.3/String.html#method-i-bytes"&gt;bytes&lt;/a&gt; and a flexible &lt;a href="http://www.ruby-doc.org/core-1.9.3/Encoding.html#method-c-list"&gt;set&lt;/a&gt; of &lt;a href="http://blog.grayproductions.net/articles/ruby_19s_three_default_encodings"&gt;encoding&lt;/a&gt; &lt;a href="http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/"&gt;facilities&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In addition, there are two libraries of interest:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://unicode-utils.rubyforge.org/"&gt;unicode_utils&lt;/a&gt;&amp;nbsp;- includes implementations of word-break functionality, grapheme boundaries, etc.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.grayproductions.net/articles/the_kcode_variable_and_jcode_library"&gt;jcode&lt;/a&gt; (if you're stuck on ruby 1.8.x)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This &lt;a href="http://blog.grayproductions.net/articles/understanding_m17n"&gt;series of posts&lt;/a&gt; gives you a full understanding of the topic. &amp;nbsp;Highly recommended!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This &lt;a href="http://www.tbray.org/ongoing/When/200x/2006/10/22/Unicode-and-Ruby"&gt;post&lt;/a&gt; gives a high-level view of where things were at around 2006, much of which is valuable background.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This&amp;nbsp;&lt;a href="http://blog.trydionel.com/2010/03/23/some-unicode-tips-for-ruby/"&gt;post&lt;/a&gt;&amp;nbsp;has a good summary of unicode-related resources, as does this stackoverflow &lt;a href="http://stackoverflow.com/questions/4149388/does-ruby-support-unicode-and-how-does-it-work"&gt;question&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-2676346441233695339?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/hndcrPVhAf8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/2676346441233695339/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/12/unicode-support-better-now-in-ruby.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/2676346441233695339?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/2676346441233695339?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/hndcrPVhAf8/unicode-support-better-now-in-ruby.html" title="Unicode Support Better Now in Ruby" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/12/unicode-support-better-now-in-ruby.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IGRH46cSp7ImA9WhRXFEo.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-882716607582888077</id><published>2011-12-21T07:56:00.003-07:00</published><updated>2011-12-21T07:58:45.019-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T07:58:45.019-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="self-review" /><category scheme="http://www.blogger.com/atom/ns#" term="cheap-experimentation" /><category scheme="http://www.blogger.com/atom/ns#" term="modularity" /><category scheme="http://www.blogger.com/atom/ns#" term="upgrade" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="change" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="promises" /><category scheme="http://www.blogger.com/atom/ns#" term="version-control" /><title>Semantic Versioning</title><content type="html">After having skimmed the &lt;a href="http://semver.org/"&gt;semantic versioning&lt;/a&gt; proposal/spec, I really like it, and I'm going back for a deep read.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The most notable violator of this that has bit me in the past has been the &lt;a href="http://jersey.java.net/"&gt;jersey framework&lt;/a&gt;, and maybe earlier versions of &lt;a href="http://commons.apache.org/collections/"&gt;commons-collections&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-882716607582888077?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/J47vuCXP9tE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/882716607582888077/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/12/semantic-versioning.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/882716607582888077?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/882716607582888077?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/J47vuCXP9tE/semantic-versioning.html" title="Semantic Versioning" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/12/semantic-versioning.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMARn4-eyp7ImA9WhRXE00.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-1740970362503243133</id><published>2011-12-19T08:27:00.001-07:00</published><updated>2011-12-19T08:27:27.053-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-19T08:27:27.053-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="cheap-experimentation" /><category scheme="http://www.blogger.com/atom/ns#" term="slack" /><category scheme="http://www.blogger.com/atom/ns#" term="rack" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title>Some Git/Ruby stuff of interest</title><content type="html">&lt;br /&gt;
While taking the git survey a while back, I encountered:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://git-annex.branchable.com/"&gt;git-annex&lt;/a&gt;: awesome git-enabled large file archive support&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
which led me to:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/apenwarr/bup"&gt;git-bup&lt;/a&gt;: way cool! git-like backup, even serves as a &lt;a href="http://git-annex.branchable.com/special_remotes/bup/"&gt;remote for git-annex&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
also this morning ran into:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/godfat/rib"&gt;rib&lt;/a&gt;: irb, except better, including rib-heroku&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cardinalblue/rest-core"&gt;rest-core&lt;/a&gt;: like rack, except for RESTful &lt;i&gt;clients&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/godfat/gemgem"&gt;gemgem&lt;/a&gt;: easy gem building, without all the hoe dependency cruft&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
I just wish that &lt;a href="http://defunkt.io/gem-man/"&gt;gem-man&lt;/a&gt; read the README{,.md} in the root of a gem (like gemgem does) if that gem didn't have a manpage. &amp;nbsp;Sounds like a good patch to send. &amp;nbsp;That will help me understand how gems can access their own filesystem post-install.&lt;br /&gt;
&lt;br /&gt;
Thought you might like to know.&lt;br /&gt;
&lt;br /&gt;
And btw, rbenv is way nicer to interact with than rvm, at least that's been my experience over the last couple weeks.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-1740970362503243133?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/nLNEnwrF4Q0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/1740970362503243133/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/12/some-gitruby-stuff-of-interest.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/1740970362503243133?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/1740970362503243133?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/nLNEnwrF4Q0/some-gitruby-stuff-of-interest.html" title="Some Git/Ruby stuff of interest" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/12/some-gitruby-stuff-of-interest.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IEQXczfyp7ImA9WhRXFEo.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-7602201941072913622</id><published>2011-12-15T09:22:00.002-07:00</published><updated>2011-12-21T07:58:20.987-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T07:58:20.987-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="conversion" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="upgrade" /><title>srev-taming: Migrating Subversion to Git</title><content type="html">After reading about Mediawiki's &lt;a href="http://www.mediawiki.org/wiki/Git_conversion"&gt;pending svn =&amp;gt; git migration&lt;/a&gt;, it sounded very familiar to me, because I was proposing such a conversion at work about a year ago.&lt;br /&gt;
&lt;br /&gt;
Mass svn =&amp;gt; git migration tooling doesn't really exist in the way I wish.&lt;br /&gt;
&lt;br /&gt;
The most popular tool is probably &lt;a href="https://github.com/nirvdrum/svn2git"&gt;svn2git&lt;/a&gt;. &amp;nbsp;But even with all the conversion goodies baked into it, it's still based on git-svn.&lt;br /&gt;
&lt;br /&gt;
Anything based on git-svn means that for an svn repo that has multiple projects in it, you have to take N passes over the repository, which is a huge hit for repos in the 20,000+ commit range.&lt;br /&gt;
&lt;br /&gt;
The most performant conversion tool is &lt;a href="https://github.com/git/git/tree/master/contrib/svn-fe"&gt;svn-fe&lt;/a&gt;, but it doesn't do much more than just import at the repo boundary: 1 svn repo =&amp;gt; 1 git repo. &amp;nbsp;And it doesn't even begin to deal with the situation of multiple svn histories as we have migrated from one repo to another.&lt;br /&gt;
&lt;br /&gt;
The closest thing that exists is a &lt;a href="https://gist.github.com/f6902cb4e3534f07ba48"&gt;set of scripts&lt;/a&gt; posted as part of &lt;a href="http://thread.gmane.org/gmane.comp.version-control.git/158940/focus=159054"&gt;this thread&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Here is a rough cut of a project I wish existed:&lt;br /&gt;
&lt;br /&gt;
"srev-taming" ~~&amp;nbsp;"svn-migrate"&lt;br /&gt;
(anagram, in the spirit of "snerp-vortex" ~~&amp;nbsp;"svn-exporter")&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;scan of SVN dump for projects &amp;amp; codelines =&amp;gt; annotated projects &amp;amp; branches list&lt;/li&gt;
&lt;li&gt;easy invocation of svn-fe for mass-import =&amp;gt; generate me a command-line&lt;/li&gt;
&lt;li&gt;editable auto-detected project tags &amp;amp; codelines =&amp;gt; language that easily expresses projects, codelines &amp;amp; grafts&lt;/li&gt;
&lt;li&gt;easy clone/filter-branch invocation to extract &amp;amp; stitch codelines together (based on projects &amp;amp; branches list and configured grafts)&lt;/li&gt;
&lt;li&gt;post-import filter for author fixup, SVN &amp;amp; migration artifact removal =&amp;gt; generation of starting author list &amp;amp; svn URL minifier&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Unless I get explicitly assigned to do the migration, I guess it's not going to prioritize high enough for me to do anything about it. &amp;nbsp;At least svn-fe is being &lt;a href="https://github.com/barrbrain/git/tree/svn-fe-pu"&gt;maintained and enhanced&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
But I'm posting it here to see if anything exists that I don't know about -- or in case it sparks some ideas for someone to create this thing.&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-7602201941072913622?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/KeOV6jnkahQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/7602201941072913622/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/12/srev-taming-migrating-subversion-to-git.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7602201941072913622?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7602201941072913622?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/KeOV6jnkahQ/srev-taming-migrating-subversion-to-git.html" title="srev-taming: Migrating Subversion to Git" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/12/srev-taming-migrating-subversion-to-git.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYFSHo5fCp7ImA9WhdaGUk.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-8916555841888078027</id><published>2011-10-29T21:58:00.000-06:00</published><updated>2011-10-29T21:58:39.424-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-29T21:58:39.424-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="slack" /><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><category scheme="http://www.blogger.com/atom/ns#" term="tight-loop" /><title>Backwards Names</title><content type="html">My family likes to play a fun game called Backwards Names. &amp;nbsp;This game is played by taking each name piece of a person's name and reversing the characters and trying to pronounce it fluently.&lt;br /&gt;
&lt;br /&gt;
I was just sitting on the couch tonight after a long Saturday and not thinking about backwards names at all. &amp;nbsp;I had my laptop open to get some work done, but my son sat down next to me, and I wanted to show him some programming.&lt;br /&gt;
&lt;br /&gt;
I started out in irb and just did some simple string substitution with his name, but irb and ruby make it so easy to just mess around that I ended up with an implementation of Backwards Names before I knew it.&lt;br /&gt;
&lt;br /&gt;
Here it is:&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/1325447.js"&gt; &lt;/script&gt;
&lt;br /&gt;
It was just really fun to do that with him and see lights start to turn on about what programming was like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-8916555841888078027?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/A9guGGHKrrI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/8916555841888078027/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/10/backwards-names.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/8916555841888078027?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/8916555841888078027?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/A9guGGHKrrI/backwards-names.html" title="Backwards Names" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/10/backwards-names.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AFQHc_fyp7ImA9WhdaEEk.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-7161706001434166824</id><published>2011-10-19T12:40:00.003-06:00</published><updated>2011-10-19T12:41:51.947-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T12:41:51.947-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="self-review" /><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="cheap-experimentation" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="innovation" /><category scheme="http://www.blogger.com/atom/ns#" term="rubyconf" /><category scheme="http://www.blogger.com/atom/ns#" term="version-control" /><title>Git as Menograph</title><content type="html">&lt;span class="Apple-style-span" style="font-size: large;"&gt;Background&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In Mar. 2010, Matz came and &lt;a href="http://confreaks.net/videos/11-mwrc2010-ruby124c41"&gt;talked at MWRC&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The awesome talk focused around Ruby as a great invention that makes it possible for programmers to bring a new world into being that could only be imagined before.&lt;br /&gt;
&lt;br /&gt;
He made reference to the inventor in Hugo Gernsback's book: &lt;a href="http://openlibrary.org/books/OL6683695M/Ralph_124C41"&gt;Ralph 124c 41 +&lt;/a&gt;. &amp;nbsp;The name was a play on words "One to foresee for one", with "+" being reserved for the 10 or so greatest inventors currently living.&lt;br /&gt;
&lt;br /&gt;
Although Matz's reference could be interpreted as prideful, anyone who has ever had anything to do with him would correct you -- he is a very humble programmer who does awesome stuff.&lt;br /&gt;
&lt;br /&gt;
Because I wanted to understand Matz's reference very thoroughly, I went and read the book. &amp;nbsp;I was able to appreciate the scope of Matz's talk much more clearly after having read about Ralph, the great inventor.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Menograph, the invention&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
One thing that Ralph invented was a Menograph. &amp;nbsp;It was a mind-recording device, operated by pressing a button that started a mind wave recorder and operated a scroll of fabric on which the waves were traced in ink, similar to an old-style seismograph.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
The Menograph was one of Ralph 124C 41 +'s earliest inventions, and entirely superseded the pen and pencil. &amp;nbsp;It was only necessary to press the button when an idea was to be recorded and to release the button when one merely reflected and did not wish the thought-words recorded.&lt;/blockquote&gt;
&lt;br /&gt;
Those thoughts could then be replayed again&amp;nbsp;verbatim&amp;nbsp;by &lt;i&gt;any person&lt;/i&gt; by use of a device called a Hypnobioscope.&lt;br /&gt;
&lt;br /&gt;
After reading&amp;nbsp;&lt;a href="http://books.google.com/books?id=Vd0Lg2wc5Z0C&amp;amp;pg=PA26&amp;amp;lpg=PA26&amp;amp;dq=menograph#v=onepage&amp;amp;q=menograph&amp;amp;f=false"&gt;an account&lt;/a&gt;&amp;nbsp;of Ralph using this invention, which is more detailed than I am able to reproduce here, I had a vague sense that I had experienced a similar feeling before while programming.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Git as Menograph&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
After thinking about it for a while, I realized that how Ralph used his Menograph is how I use git.&lt;br /&gt;
&lt;br /&gt;
While coding, I work on stuff, then I record commits into git. &amp;nbsp;Then I work on stuff some more, then record commits.&lt;br /&gt;
&lt;br /&gt;
Then I take passes back over what I've recorded and get rid of the bad stuff and keep the good stuff. &amp;nbsp;Then I push it out to the team. &amp;nbsp;Sometimes, a pair or triple on the team do this as a group exercise, working history over a few time until it won't break the world.&lt;br /&gt;
&lt;br /&gt;
The parallel to git was eye-opening. &amp;nbsp;In fact, after having noticed this behavior in myself, and seeing the behavior tendency grow over time, I'd say that git encourages multi-pass thinking styles.&lt;br /&gt;
&lt;br /&gt;
P.S. &amp;nbsp;If you care at all about Ruby, listen to &lt;a href="http://confreaks.net/videos/11-mwrc2010-ruby124c41"&gt;Matz's talk&lt;/a&gt;. &amp;nbsp;Some of the future stuff he was talking about is already in Ruby 1.9.2. &amp;nbsp;NOTE: I'm on linux, and I had to use the flash player to get the video to show.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-7161706001434166824?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/9gC9OBbPoEo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/7161706001434166824/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/10/git-as-menograph.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7161706001434166824?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7161706001434166824?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/9gC9OBbPoEo/git-as-menograph.html" title="Git as Menograph" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/10/git-as-menograph.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUMQnw7fCp7ImA9WhdbGUQ.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-930314837330467234</id><published>2011-10-18T21:01:00.000-06:00</published><updated>2011-10-18T21:01:23.204-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-18T21:01:23.204-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="self-review" /><category scheme="http://www.blogger.com/atom/ns#" term="cheap-experimentation" /><category scheme="http://www.blogger.com/atom/ns#" term="reality" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Attention to Error vs Attention to Detail</title><content type="html">After having read &lt;a href="http://thetalentcode.com/"&gt;Talent Code&lt;/a&gt;, a &lt;a href="http://marko.viitanen.org/"&gt;friend&lt;/a&gt; pointed me to the following article:&lt;br /&gt;
&lt;blockquote&gt;
&lt;a href="http://www.wired.com/wiredscience/2011/10/why-do-some-people-learn-faster-2/"&gt;Why Do Some People Learn Faster?&lt;/a&gt;&lt;/blockquote&gt;
&lt;div&gt;
&lt;/div&gt;
Although
 the author of that article had gotten some &lt;a href="http://www.amazon.com/Proust-Was-Neuroscientist-Jonah-Lehrer/product-reviews/0618620109/ref=cm_cr_pr_hist_1?&amp;amp;filterBy=addOneStar"&gt;lackluster reviews&lt;/a&gt; on some
 of his &lt;a href="http://www.amazon.com/Proust-Was-Neuroscientist-Jonah-Lehrer/dp/0618620109"&gt;book-length&lt;/a&gt; &lt;a href="http://www.amazon.com/How-We-Decide-Jonah-Lehrer/dp/0618620117"&gt;work&lt;/a&gt; on Amazon, this article brought a distinct idea
 to the forefront for me:&lt;br /&gt;
&lt;blockquote&gt;
Attention to Error&lt;/blockquote&gt;
&lt;div&gt;
&lt;/div&gt;
I've always 
thought that attention to detail was an important tendency in myself 
that made me a good learner.&amp;nbsp; But I realized that there is a distinction
 between paying attention to detail and paying attention to error.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
The
 constant reconciliation between what you believe to be correct and what
 turns out to be correct is the fuel for my personal learning.&lt;br /&gt;
&lt;br /&gt;
Some people might say this is what the scientific method is all about.&amp;nbsp; I'm less methodical than a scientist would be -- I find it nevertheless useful to constantly put myself in situations where I can learn informally from comparing what I expect to what actually happens.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-930314837330467234?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/yl-sLwY6IAY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/930314837330467234/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/10/after-having-read-talent-code-friend.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/930314837330467234?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/930314837330467234?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/yl-sLwY6IAY/after-having-read-talent-code-friend.html" title="Attention to Error vs Attention to Detail" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/10/after-having-read-talent-code-friend.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYEQH8zfip7ImA9WhdbE0w.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-2212058499786201636</id><published>2011-10-05T13:56:00.001-06:00</published><updated>2011-10-11T00:05:01.186-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-11T00:05:01.186-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blog" /><category scheme="http://www.blogger.com/atom/ns#" term="links" /><title>Link to Paper</title><content type="html">Dear Lazyweb,&lt;br /&gt;
&lt;br /&gt;
I've wanted to link to pages of books, or at least down to the chapter, or subhead.&lt;br /&gt;
&lt;br /&gt;
Take, for example, the following blog post:&lt;br /&gt;
&lt;blockquote&gt;
&lt;a href="http://deliberate-thinking.blogspot.com/2010/04/reality-quotient.html"&gt;http://deliberate-thinking.blogspot.com/2010/04/reality-quotient.html&lt;/a&gt;&lt;/blockquote&gt;
In that post, I refer to printed, copyrighted content by URL, but with lame google books URLs that have nothing to do with the structure of the book, and that border on the potentially problematic situation traditionally called "deep linking".&lt;br /&gt;
&lt;br /&gt;
Look for the following text in the blog post:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;text: Total Useful Mental Discriminations&lt;/li&gt;
&lt;li&gt;and link:&amp;nbsp;&lt;a href="http://books.google.com/books?id=563gvssRPvkC&amp;amp;lpg=PR1&amp;amp;dq=slack&amp;amp;pg=PA72#v=onepage"&gt;http://books.google.com/books?id=563gvssRPvkC&amp;amp;lpg=PR1&amp;amp;dq=slack&amp;amp;pg=PA72#v=onepage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;text: capable people are credible&lt;/li&gt;
&lt;li&gt;and link:&amp;nbsp;&lt;a href="http://books.google.com/books?id=31Qe_e61Y10C&amp;amp;lpg=PP1&amp;amp;ots=bBbef5O2a3&amp;amp;dq=speed%20of%20trust&amp;amp;pg=PA92#v=onepage"&gt;http://books.google.com/books?id=31Qe_e61Y10C&amp;amp;lpg=PP1&amp;amp;ots=bBbef5O2a3&amp;amp;dq=speed%20of%20trust&amp;amp;pg=PA92#v=onepage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Do you know of any way that I can manage a list of URLs per book that are just markers for the sections within that book?&lt;br /&gt;
&lt;br /&gt;
Not page linking, but sections as defined by the work itself. &amp;nbsp;No content extraction except perhaps to put the subhead text in the URL itself (either in English, or in the work's native language, or both). &amp;nbsp;Now there would be a global permalink for a given chunk of a work.&lt;br /&gt;
&lt;br /&gt;
So, as an example of what I'm shooting for, the following author has already done this with his book:&lt;br /&gt;
&lt;blockquote&gt;
&lt;a href="http://book.personalmba.com/bootstrapping/"&gt;http://book.personalmba.com/bootstrapping/&lt;/a&gt;&amp;nbsp; (full of promotional material)&lt;/blockquote&gt;
Even though this page is full of promotional material, the link itself has value, because now I can refer to that small section of the book and talk about my own ideas, relative to that section.&lt;br /&gt;
&lt;br /&gt;
And I can do so in a web-friendly way, with a meaningful URL.&lt;br /&gt;
&lt;br /&gt;
The closest think I found was OpenLibrary itself with canonical URLs to Works and Editions. &amp;nbsp;But has anyone done "link to paper" in a general sense?&lt;br /&gt;
&lt;br /&gt;
Sincerely,&lt;br /&gt;
John...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-2212058499786201636?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/hMg6Hj9Wao4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/2212058499786201636/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/10/link-to-paper.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/2212058499786201636?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/2212058499786201636?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/hMg6Hj9Wao4/link-to-paper.html" title="Link to Paper" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/10/link-to-paper.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEHRnwyeyp7ImA9WhdbE00.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-4680310442932317134</id><published>2011-10-05T13:44:00.002-06:00</published><updated>2011-10-10T21:27:17.293-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-10T21:27:17.293-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="promises" /><category scheme="http://www.blogger.com/atom/ns#" term="faith" /><title>Word Mixed With Faith</title><content type="html">The Savior &lt;a href="http://lds.org/scriptures/nt/matt/7.16-17?lang=eng#15"&gt;said&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;
Ye shall know them by their fruits.&lt;/blockquote&gt;
Paul &lt;a href="http://lds.org/scriptures/nt/heb/4.2?lang=eng#1"&gt;wrote&lt;/a&gt; to the Hebrews:&lt;br /&gt;
&lt;blockquote&gt;
For unto us was the gospel preached, as well as unto them: but the word preached did not profit them, not being mixed with faith in them that heard it.&lt;/blockquote&gt;
It feels a lot like the recipe for inspiration and blessings from God includes the following ingredients:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Word of God, shared or published&lt;/li&gt;
&lt;li&gt;Faith in those who receive it&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Mix the word with faith, season well with humility, patience &amp;amp; repentance. &amp;nbsp;Harvest the inspiration and blessings that God wants to give you.&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-4680310442932317134?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/0rG0FIZjc_M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/4680310442932317134/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/10/word-mixed-with-faith.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/4680310442932317134?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/4680310442932317134?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/0rG0FIZjc_M/word-mixed-with-faith.html" title="Word Mixed With Faith" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/10/word-mixed-with-faith.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04ASXc-eSp7ImA9WhdUEUg.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-7928591191198817475</id><published>2011-09-27T14:39:00.000-06:00</published><updated>2011-09-27T14:39:08.951-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T14:39:08.951-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lazy" /><category scheme="http://www.blogger.com/atom/ns#" term="dry" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="drawing" /><title>Using dot from graphviz</title><content type="html">The whole &lt;a href="http://www.graphviz.org/"&gt;graphviz&lt;/a&gt; package is an amazingly useful piece of software. &amp;nbsp;Especially the dot program.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I've watched other people hand-craft Visio documents that go out of date really fast.&lt;br /&gt;
&lt;br /&gt;
I've also watched developers try to use design tools for high-level sketch kind of diagrams and get bogged down with superfluous code-sync features.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
When I want to illustrate a point, just plain old boxes and arrows work wonders. &amp;nbsp;Especially when I can commit the source and be able to tweak it afterwards.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I've found that dot meets and exceeds the my common use goals. &amp;nbsp;I would guess that 80% of the time, the diagram communicates what I want to say without any tweaking at all. &amp;nbsp;About 15% of the time, it takes some layout/shape/font/color tweaking to get the message across in a clear &amp;amp; direct manner. &amp;nbsp;About 5% of the time, I have to output the graph as SVG and load it into Inkscape for further slight tweaking.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Here are some especially helpful links:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.graphviz.org/"&gt;official site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.graphviz.org/Gallery.php"&gt;gallery of examples&lt;/a&gt;, also&amp;nbsp;&lt;/li&gt;
&lt;li&gt;up-to-date &lt;a href="http://www.graphviz.org/content/dot-language"&gt;language reference&lt;/a&gt;, and other &lt;a href="http://www.graphviz.org/Documentation.php"&gt;documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;outdated, but &lt;a href="http://www.graphviz.org/Documentation/dotguide.pdf"&gt;very well-organized Users Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/1222426"&gt;dot-functions.sh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The last piece of software is intended as a helper for invoking dot quickly from the command line as part of a REPL authoring flow.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To use &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;dot-functions.sh&lt;/span&gt;, first download it. &amp;nbsp;The script defines a bash function that can be used from a bash CLI. &amp;nbsp;Source it into the current shell by doing: &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;source dot-functions.sh&lt;/span&gt;, followed by &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;dot somefile.dot&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Here is the source of &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;dot-functions.sh&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;script src="https://gist.github.com/1222426.js"&gt;
&lt;/script&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Another &lt;a href="http://www.spinellis.gr/blog/20090415/index.html"&gt;very helpful article&lt;/a&gt; was written on &lt;a href="http://www.google.com/search?q=drawing+tools&amp;amp;safe=active"&gt;this topic&lt;/a&gt; by &lt;a href="http://www.spinellis.gr/blog/index.html"&gt;Diomidis Spinellis&lt;/a&gt;. &amp;nbsp;Now that I think about it, there is &lt;a href="http://blog.worldlabel.com/2009/creating-cover-art-with-open-source-software.html"&gt;another&lt;/a&gt; &lt;a href="http://www.linux.com/archive/feature/114172?theme=print"&gt;very helpful article&lt;/a&gt; about how to get a hand-written sketch into digital form.&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-7928591191198817475?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/hfqGf9O-H_E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/7928591191198817475/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/09/using-dot-from-graphviz.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7928591191198817475?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7928591191198817475?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/hfqGf9O-H_E/using-dot-from-graphviz.html" title="Using dot from graphviz" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/09/using-dot-from-graphviz.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIFRn09eCp7ImA9WhdUEUg.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-7484099408936050788</id><published>2011-09-27T14:09:00.002-06:00</published><updated>2011-09-27T14:15:17.360-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T14:15:17.360-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="self-review" /><category scheme="http://www.blogger.com/atom/ns#" term="learning-curve" /><category scheme="http://www.blogger.com/atom/ns#" term="cheap-experimentation" /><category scheme="http://www.blogger.com/atom/ns#" term="innovation" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Keeping a Beginner's Mind</title><content type="html">As an experienced software developer, I care deeply about retaining my ability to remain flexible in my habits and learning style. &amp;nbsp;That's the only way I got good, and if I ossify in my learning habits, I'll end up the equivalent of a COBOL programmer. &amp;nbsp;Certainly not the way to live up to the broad possibilities that exist to make the world a better place.&lt;br /&gt;
&lt;br /&gt;
I appreciated the wider perspective that I got from glancing through these slides by &lt;a href="http://www.thekua.com/"&gt;Patrick Kua&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;
&lt;a href="http://www.slideshare.net/thekua/the-beginners-mind"&gt;The Beginner's Mind&lt;/a&gt;&lt;/blockquote&gt;
Although I had seen and skimmed &lt;a href="http://www.amazon.com/Pragmatic-Thinking-Learning-Refactor-Programmers/dp/1934356050"&gt;Pragmatic Thinking &amp;amp; Learning&lt;/a&gt;, this presentation was a gentle and useful introduction to the whole idea of the Dreyfus model of skill aquisition.&lt;br /&gt;
&lt;br /&gt;
Another very useful idea that this presentation expressed was the contrast between "skill-acquiring apprentice" vs. "closed-minded expert". &amp;nbsp;Patrick said that the "skill-acquiring" attribute can also apply to highly-skilled practitioners.&lt;br /&gt;
&lt;br /&gt;
Among the tips Patrick gave, the following were useful to me:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;You can't be an expert on everything. &lt;i&gt;[so don't even try]&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;How can I try this safely?&lt;/li&gt;
&lt;li&gt;How does this fit in my world?&lt;/li&gt;
&lt;li&gt;Remain curious.&lt;/li&gt;
&lt;li&gt;Mix with diverse groups.&lt;/li&gt;
&lt;li&gt;Beware of built-in biases.&lt;/li&gt;
&lt;li&gt;Avoid judging early.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
The reason I decided to compare/contrast some of the ideas in this presentation was actually because of my forays into the Pragmatic Thinking &amp;amp; Learning book, which was one of three "Further Resources" offered at the end.&lt;br /&gt;
&lt;br /&gt;
Patrick recommended the following books for further learning:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Pragmatic-Thinking-Learning-Refactor-Programmers/dp/1934356050"&gt;Pragmatic Thinking &amp;amp; Learning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Apprenticeship-Patterns-Guidance-Aspiring-Craftsman/dp/0596518382"&gt;Apprenticeship Patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Changing-Software-Development-Learning-Become/dp/047051504X"&gt;Changing Software Development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Because of the context in which the&amp;nbsp;&lt;a href="http://www.amazon.com/Apprenticeship-Patterns-Guidance-Aspiring-Craftsman/dp/0596518382"&gt;Apprenticeship Patterns&lt;/a&gt;&amp;nbsp;book appears, I want to read that as a next step for learning how to make a real difference at &lt;a href="http://www.familysearch.org/"&gt;FamilySearch&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-7484099408936050788?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/HQ0cyzem7aA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/7484099408936050788/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/09/keeping-beginners-mind.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7484099408936050788?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/7484099408936050788?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/HQ0cyzem7aA/keeping-beginners-mind.html" title="Keeping a Beginner's Mind" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/09/keeping-beginners-mind.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUHQ38_eSp7ImA9WhdWFE4.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-5129936284454861026</id><published>2011-09-07T16:22:00.000-06:00</published><updated>2011-09-07T16:23:52.141-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-07T16:23:52.141-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blog" /><title>Any reason not to post this?</title><content type="html">I remember reading Tim Bray's &lt;a href="http://www.tbray.org/ongoing/When/201x/2010/03/15/Joining-Google"&gt;first post at Google&lt;/a&gt;, specifically the part that talked about continuing to post &lt;a href="http://www.tbray.org/ongoing/When/201x/2010/03/15/Joining-Google#p-7"&gt;without editorial comments&lt;/a&gt; from his employer.&lt;br /&gt;
&lt;br /&gt;
It was then that the whole &lt;a href="http://www.cluetrain.com/"&gt;Cluetrain Manifesto&lt;/a&gt; finally clicked for me.&lt;br /&gt;
&lt;br /&gt;
And I realized that the real question wasn't:&lt;br /&gt;
&lt;blockquote&gt;
Would this topic be something I could post on my blog?&lt;/blockquote&gt;
but was really a quick:&lt;br /&gt;
&lt;blockquote&gt;
&amp;nbsp;Any reason not to post this? &lt;i&gt;(right before hitting the Publish button)&lt;/i&gt;&lt;/blockquote&gt;
&amp;nbsp;Seems like I've been kind of dense about this sort of thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-5129936284454861026?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/Oaantev9Tmk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/5129936284454861026/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/09/any-reason-not-to-post-this.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/5129936284454861026?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/5129936284454861026?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/Oaantev9Tmk/any-reason-not-to-post-this.html" title="Any reason not to post this?" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/09/any-reason-not-to-post-this.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQMRX45eCp7ImA9WhRXF04.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-1002272287452672789</id><published>2011-08-31T08:00:00.005-06:00</published><updated>2011-12-24T06:13:04.020-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-24T06:13:04.020-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="slack" /><category scheme="http://www.blogger.com/atom/ns#" term="lazy" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="organizing" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Lazy Developer plus No Slack equals Funding Guilt</title><content type="html">&lt;div&gt;
I have enough hubris to consider myself a &lt;a href="http://en.wikipedia.org/wiki/Larry_Wall#Virtues_of_a_programmer"&gt;lazy software developer&lt;/a&gt;. I also work in an organization where there is not a lot of &lt;a href="http://www.blogger.com/books.google.com/books?isbn=0767907698"&gt;slack&lt;/a&gt;. Overall, I consider myself very blessed to be a part of the software group in which I work. There are many intangible rewards that I receive personally by working on the projects I'm assigned to work on.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Most of what I wanted to say in this article has &lt;a href="http://c2.com/cgi/wiki?LazyProgrammer"&gt;already&lt;/a&gt; &lt;a href="http://blogoscoped.com/archive/2005-08-24-n14.html"&gt;been&lt;/a&gt; &lt;a href="http://www.codinghorror.com/blog/2005/03/get-me-the-laziest-people-money-can-buy.html"&gt;said&lt;/a&gt;, so I'll spare you the effort if you're already &lt;a href="http://en.wikipedia.org/wiki/Church_of_the_SubGenius#Slack"&gt;well-read&lt;/a&gt; in &lt;a href="http://www.codinghorror.com/blog/2005/03/get-me-the-laziest-people-money-can-buy.html"&gt;this area&lt;/a&gt;.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
However, the lazy developer / no slack combination often produces an interesting set of emotions within me. In particular, I repeatedly feel a certain ugly kind of frustration.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Here is my shot at defining this certain kind of frustration:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Funding Guilt: n. The feeling of having a sense that you could solve the problem at hand in a better way and more conveniently by inventing a solution to a more general problem, but being in a position where the investment in that more general solution is not specifically funded by the person paying for the specific assignment and might be more costly in the short term.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
A lazy developer's answer to this is often to ignore the context and &lt;a href="http://catb.org/~esr/faqs/hacker-howto.html#attitude"&gt;solve the more general problem anyway&lt;/a&gt;, with an eye toward paring the problem down to its core and avoiding gold-plating.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
I remember working with a very smart developer who told me he kept an open critical bug as cover for getting real work done. If asked what he was spending his time on, he would point to his efforts to solve the critical bug. He would make enough progress on the bug over a period of time that people would continue to leave him alone, because they really wanted the bug fixed as soon as possible. But he devoted a significant amount of his time each day toward his real work. And when that bug got fixed, he'd pick up another serious bug that looked like it could be of use. Maybe this approach could be called "Bug Cover".&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Although that approach to avoiding funding guilt is deceptive at its core, it worked for him. I'd prefer a way to avoid funding guilt that was more above board.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
And perhaps funding guilt only appears in hyper-responsible people, of which I am one.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
For those of us who feel it, acknowledgment of this emotion sometimes helps create a sense of understanding and perspective in ourselves and others, including possibly sponsors of our work. It is important to be able to forgive oneself for funding guilt if solving the more general problem is really the right thing to do. But this is not a resolution to the core question. How can funding guilt be avoided as a matter of course?&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Maybe it's a matter of choosing very carefully which projects you work on, or at least &lt;a href="http://theleanstartup.com/"&gt;aborting unfruitful projects very quickly&lt;/a&gt;.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Maybe the proper response to expressed funding guilt is at the core of the art of great software management. Perhaps great managers are those who can create the sense of slack that is needed to allow developers to get their juices flowing and create great stuff.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Even if it does involve a little cover.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
P.S. FWIW, many of the ideas in this post come from having read and digested the following:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://books.google.com/books?isbn=1934356050"&gt;Pragmatic Thinking &amp;amp; Learning&lt;/a&gt; (personal learning)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://books.google.com/books?isbn=1934356603"&gt;Driving Technical Change&lt;/a&gt; (organizational rollout affordances)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://books.google.com/books?isbn=0201835959"&gt;Mythical Man-month&lt;/a&gt; (multi-pass thinking)&lt;/li&gt;
&lt;li&gt;using &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; on a daily basis (multi-pass thinking)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alistair.cockburn.us/Trim+the+Tail+aka+Pay+to+Learn+aka+Design+as+Knowledge+Acquisition"&gt;Pay to Learn&lt;/a&gt; when playing the &lt;a href="http://books.google.com/books?isbn=0321482751"&gt;game of software&lt;/a&gt; (optimizing for learning)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jbrains.ca/permalink/sooner-not-faster"&gt;Sooner Not Faster&lt;/a&gt; (optimizing for learning)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jbrains.ca/permalink/simplifying-the-agile-manifesto"&gt;Reductionist Agile Manifesto&lt;/a&gt; (paring things down to the core)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-1002272287452672789?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/_24_Xjjs68I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/1002272287452672789/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/08/lazy-developer-plus-no-slack-equals.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/1002272287452672789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/1002272287452672789?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/_24_Xjjs68I/lazy-developer-plus-no-slack-equals.html" title="Lazy Developer plus No Slack equals Funding Guilt" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/08/lazy-developer-plus-no-slack-equals.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UAQ3cycSp7ImA9WhZXEkU.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-4235883301965718745</id><published>2011-05-01T15:26:00.000-06:00</published><updated>2011-05-01T15:27:22.999-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-01T15:27:22.999-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="poem" /><category scheme="http://www.blogger.com/atom/ns#" term="ann" /><category scheme="http://www.blogger.com/atom/ns#" term="writing" /><title>Heralds of Life</title><content type="html">&lt;p style="margin-bottom: 0in"&gt;&lt;span class="Apple-style-span"&gt;My sister, Ann Sumsion wrote the following poem on Thursday, and I asked her if I could post it here.  She said yes, so here it is:&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in"&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p style="margin-bottom: 0in"&gt;&lt;span&gt;&lt;b&gt;Heralds of Life&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Daffodils, the Trumpets of the Lord,&lt;br /&gt;Speak peace and courage, love and faith,&lt;br /&gt;To souls cold in world's winter.&lt;br /&gt;&lt;br /&gt;Their warm and yellow blooms&lt;br /&gt;Are testament of His enduring Grace&lt;br /&gt;And Tender Mercies.&lt;br /&gt;&lt;br /&gt;They cry, "The Lord is my Light,&lt;br /&gt;And my Strength, and my Song.&lt;br /&gt;He is my Salvation."&lt;br /&gt;&lt;br /&gt;Heads bowed in strong Humility,&lt;br /&gt;They nod in gentle breeze and bend in mighty tempest.&lt;br /&gt;As leaves of grass, they die and fade,&lt;br /&gt;In heat of summer's day.&lt;br /&gt;&lt;br /&gt;But the memory of their bright nodding heads&lt;br /&gt;Brought back in dark of night, and chill of frost,&lt;br /&gt;Recalls Life, death overcome.&lt;br /&gt;&lt;br /&gt;Their clarion trumpets echo their Master,&lt;br /&gt;And cry, "Spring forth,&lt;br /&gt;And Rise again."&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in"&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="margin-bottom: 0in"&gt;&lt;span class="Apple-style-span"&gt;I'm grateful for Ann's friendship and love for me.  Her love for and confidence in her Savior are also qualities that I admire in her and want to emulate.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-4235883301965718745?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/uwBRysSbeqU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/4235883301965718745/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/05/heralds-of-life.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/4235883301965718745?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/4235883301965718745?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/uwBRysSbeqU/heralds-of-life.html" title="Heralds of Life" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/05/heralds-of-life.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUASXo_eyp7ImA9WhdWFE4.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-2858886897905237201</id><published>2011-04-23T21:53:00.004-06:00</published><updated>2011-09-07T16:24:08.443-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-07T16:24:08.443-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="family" /><title>These things transferred to myself</title><content type="html">Paul said (see &lt;a href="http://www.biblegateway.com/passage/?search=1+Corinthians+4&amp;amp;version=KJV"&gt;1 Cor. 4:2-6&lt;/a&gt;, emphasis mine):&lt;br /&gt;&lt;blockquote&gt;Moveover it is required in stewards, that a man be found faithful.&lt;br /&gt;&lt;br /&gt;... yea, I judge not mine own self.&lt;br /&gt;&lt;br /&gt;For I know nothing by myself; yet am I not hereby justified: but he that judgeth me is the Lord.&lt;br /&gt;&lt;br /&gt;... And &lt;span style="font-style: italic;"&gt;these things&lt;/span&gt;, brethren, &lt;span style="font-style: italic;"&gt;I have in a figure transferred to myself&lt;/span&gt; and to Apollos for your sakes; that ye might learn in us not to think of men above that which is written, that no one of you be puffed up for one against the other.&lt;br /&gt;&lt;/blockquote&gt;Nephi said (see &lt;a href="http://lds.org/scriptures/bofm/1-ne/19.23?lang=eng#22"&gt;1 Ne. 19:23&lt;/a&gt;, emphasis mine):&lt;br /&gt;&lt;blockquote&gt;but that I might more fully persuade them to believe in the Lord their Redeemer I did read unto them that which was written by the prophet Isaiah; for &lt;span style="font-style: italic;"&gt;I did liken all scriptures unto us&lt;/span&gt;, that it might be for our profit and learning.&lt;br /&gt;&lt;/blockquote&gt;I see the following three ideas present in both statements:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;habit of personalizing scriptural teaching&lt;br /&gt;&lt;/li&gt;&lt;li&gt;attempt to teach by example&lt;/li&gt;&lt;li&gt;making reference to prior patterns of personalization in a teaching situation&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;These scriptures are filled with a refreshing spirit of no-nonsense, concrete, step-by-step spiritual teaching.  The teachers' attitudes are unassuming and direct.&lt;br /&gt;&lt;br /&gt;I've been in teaching/learning situations like this, and it feels really good to have a teacher that both understands the material and is willing to put it on your level when explaining it.&lt;br /&gt;&lt;br /&gt;I'm grateful for Paul's and Nephi's willingness to be as frank and humble as they were in these scriptures.  It's been a blessing to me to read, compare, and contrast the two scriptures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-2858886897905237201?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/oQl-q4s9DdY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/2858886897905237201/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/04/these-things-transferred-to-myself.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/2858886897905237201?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/2858886897905237201?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/oQl-q4s9DdY/these-things-transferred-to-myself.html" title="These things transferred to myself" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/04/these-things-transferred-to-myself.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QHSHs6eSp7ImA9WhZREUg.&quot;"><id>tag:blogger.com,1999:blog-8291499701106729143.post-5895838119072552693</id><published>2011-04-06T22:17:00.003-06:00</published><updated>2011-04-06T22:42:19.511-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-06T22:42:19.511-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="cheap-experimentation" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="in-control" /><category scheme="http://www.blogger.com/atom/ns#" term="tight-loop" /><category scheme="http://www.blogger.com/atom/ns#" term="version-control" /><title>Core Goals of Version Control</title><content type="html">After having a couple of years of experience with Git, I was finally able to clearly articulate the core value that version control brings to software development. This article will be written with a bias toward Git, but I've at least tried to express the core value in abstract terms.&lt;br /&gt;&lt;br /&gt;The value is expressible in 4 goals.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Core Goals&lt;/span&gt;&lt;/b&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Capture source artifacts&lt;/li&gt;&lt;li&gt;Isolate stable codelines from WIP&lt;/li&gt;&lt;li&gt;Enable concurrent WIP&lt;/li&gt;&lt;li&gt;Make it easy to leave sensible history behind&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;WIP = Work In Progress&lt;/blockquote&gt;&lt;br /&gt;The continuous delivery crowd says that WIP should be basically zero. I think that there is space for a fairly short development pipeline (3-5d) that can free developers up to capture ideas and then wrangle them into shape in a second or third pass.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Capture Source Artifacts&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;As a developer, I feel happy when I can push a save button when I've taken a small step -- and then never have think about it again. I also feel happy when I can save, even if I'm based on a slightly out-of-date base. I also feel happy when I don't have to worry about binary vs. text -- as long as its a true source file of a reasonable size.&lt;br /&gt;&lt;br /&gt;I feel happiest when I don't have to be distracted by superfluous concerns, and can focus on the task at hand and save the results easily.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Main Point&lt;/i&gt;: A good version control system makes it easy to capture source artifacts.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Isolate Stable Codelines From WIP&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Software is hard to get right, and once things get stable, the only way to keep them there is to avoid making risky changes. But stability is always balanced against the common desire for enhancement and restructuring.&lt;br /&gt;&lt;br /&gt;A typical bug fix is one or two isolated commits that fix a specific problem. Most version control systems more or less support cherry-picking a small change over into another codeline.&lt;br /&gt;&lt;br /&gt;I feel happy when I'm able to easily take an isolated series of commits from the development codeline into a stable one, even if the fix turns out to be a little larger than a couple commits.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Main Point&lt;/i&gt;: A good version control system makes it easy to cherry-pick changes, and even longer patch sequences, from one codeline to another with easy reconciliation of overlapping edits.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Enable Concurrent WIP&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;For software developed by a team larger than 2-3 people, it is useful to be able to work in parallel with each other, even on the same feature. Sometimes you can arrange your work so as not to overlap at all, but there are real situations where you want to track someone else's development within the fairly short development pipeline (3-5d) before things have gotten stable.&lt;br /&gt;&lt;br /&gt;I feel happy when I don't have to catch people up on what I've been doing, and when they don't have to catch me up on what they've been doing, and we can get to the point easily and quickly. I also feel happy when we can leap-frog each other with ideas and real implementation.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Main Point&lt;/i&gt;: A good version control system makes it easy to track other team members' work, and easy to tentatively integrate with that work.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Make It Easy To Leave Sensible History Behind&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After stepping away from a piece of software, it is easy to lose context and forget the concerns that shaped the development of that software. It doesn't take long. For me, about 2 weeks is enough for me to start forgetting details and motivations.&lt;br /&gt;&lt;br /&gt;Of course, it is important to leave a properly structured artifact behind. Proper naming means a lot; proper factoring is important. Once you comprehend the structure, it is possible to change things without introducing big problems.&lt;br /&gt;&lt;br /&gt;But often, full comprehension isn't practical, and a flat 2D view of the artifact is insufficient for reasoning about the thing itself. Often, it is often very useful to be able to get a &lt;i&gt;vector&lt;/i&gt; on where the software came from, and interpolate from that vector where it was headed.&lt;br /&gt;&lt;br /&gt;The creative process is messy, filled with double steps and backtracking. Don't confuse me with all the noise. Give me a history that, given all the knowledge you had when it got stable, at least looks well-reasoned.&lt;br /&gt;&lt;br /&gt;I feel happy when I'm able to take an easy editing pass following capture/review that lets me intentionally craft history as an email to the future about the vector of change that is inherent in a certain patch sequence. I also feel very happy to &lt;i&gt;not&lt;/i&gt; have to think about this during the creative, messy, focus-draining capture/review pass.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Main Point&lt;/i&gt;: A good version control system includes tools to both: 1) enable the developers to easily leave behind meaningful history, and 2) extract focused history for all or &lt;i&gt;part&lt;/i&gt; of a piece of software.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8291499701106729143-5895838119072552693?l=deliberate-thinking.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/deliberate-thinking/~4/Sxeag9tGBxo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://deliberate-thinking.blogspot.com/feeds/5895838119072552693/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://deliberate-thinking.blogspot.com/2011/04/core-goals-of-version-control.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/5895838119072552693?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8291499701106729143/posts/default/5895838119072552693?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/deliberate-thinking/~3/Sxeag9tGBxo/core-goals-of-version-control.html" title="Core Goals of Version Control" /><author><name>John Sumsion</name><uri>http://www.blogger.com/profile/10335878463276157187</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://deliberate-thinking.blogspot.com/2011/04/core-goals-of-version-control.html</feedburner:origLink></entry></feed>

