<?xml version="1.0"?>
<rss version="2.0"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/" >
<channel>
<title>tychoish</title>
<link>http://tychoish.com/</link>
<description>tychoish</description>
<item>
	
	<title>Git Feature Requests</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/git-feature-requests/</guid>
	
	<link>http://tychoish.com/rhizome/git-feature-requests/</link>
	
	
	<category>/tag/git</category>
	
	<category>/tag/programming</category>
	
	
	<pubDate>Thu, 17 May 2012 00:00:00 -0400</pubDate>
	<dcterms:modified>2012-05-17T14:27:36Z</dcterms:modified>
	
	<description>&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The ability to mark a branch &quot;diverged,&quot; to prevent (or warn) on
attempted merges from master (for example) into a maintenance
branch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The ability to create and track dedicated topic branches, and
complementary tooling to encourage rebasing commits in these sorts
of branches. We might call them &quot;patch sets&quot; or &quot;sets&quot; rather than
&quot;branches.&quot; Also, it might be useful to think about using/displaying
these commits, when published, in a different way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Represent merge commits as hyperlinks to the user, when possible. I
think GitHub&#39;s &quot;network graph&quot; and similar visualizations are great
for showing how commits and branches interact and relate to each
other.&lt;/p&gt;

&lt;p&gt;This would probably require some additional or modifies output from
&quot;&lt;code&gt;git log&lt;/code&gt;&quot;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Named stashes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Branched stashes (perhaps this is closer to what I&#39;m thinking about
for the request regarding topic branches.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The ability to checkout &quot;working copies,&quot; of different
points/branches currently from a single repository at the same time,
&lt;em&gt;using &quot;native&quot; git utilities&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Related, &quot;shelf&quot; functionality is scriptable, but this too needs to
be easier and more well supported.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think &lt;a href=&quot;http://www.git-legit.org/&quot;&gt;legit&lt;/a&gt; is a step in the right
direction, but it&#39;s weird and probably makes it more difficult to
understand what&#39;s happening with git conceptually as opposed to the
above features which would provide more appropriate conceptual
metaphors for the work that would-be-git-users need.&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>The Limitiations of the GitHub Fork Model</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/the-limitiations-of-the-github-fork-model/</guid>
	
	<link>http://tychoish.com/rhizome/the-limitiations-of-the-github-fork-model/</link>
	
	
	<category>/tag/free-software</category>
	
	<category>/tag/productivity</category>
	
	<category>/tag/programming</category>
	
	
	<pubDate>Thu, 10 May 2012 00:00:00 -0400</pubDate>
	<dcterms:modified>2012-05-10T16:06:42Z</dcterms:modified>
	
	<description>&lt;p&gt;Assumption:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://git-scam.com&quot;&gt;git&lt;/a&gt; is pretty awesome, but it&#39;s conceptually
complex. As a result using git demands a preexisting familiarity
with git itself or some sort of wrapper to minimize the conceptual
overhead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The collaboration methods (i.e. hosting) provided by git, which are
simple by design to allow maximum flexibility, do not provide
enough structure to be practically useful. As a result providers
like &lt;a href=&quot;http://githb.com&quot;&gt;GitHub&lt;/a&gt; (and
&lt;a href=&quot;http://bitbucket.org&quot;&gt;BitBucket&lt;/a&gt; and
&lt;a href=&quot;HTTP://gitorious.org/&quot;&gt;gitorious&lt;/a&gt;) offer a valuable service that
makes it easier--or even possible--for people to use git.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Caveats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;there are problems with using centralized repository services
controlled by third parties, particularly for open source/free
software projects.&lt;/p&gt;

&lt;p&gt;There are ways that GitHub succeeds an fails in this regard. but
this dynamic is too complex to fully investigate within the scope of
this post.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you use GitHub as designed, and the way that
most projects use GitHub, then you have a very specific and
particular view of how Git works.&lt;/p&gt;

&lt;p&gt;While this isn&#39;t a bad thing, it&#39;s less easy to use git in some more
distributed workflows as a result. This isn&#39;t GitHub&#39;s &lt;em&gt;fault&lt;/em&gt; so
much as it is an artifact of people not really knowing how git
itself works.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Assertion:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;GitHub&#39;s &quot;fork&quot; model disincentives people from working in
&quot;topic&quot; branches.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;By making it really easy for people to publish their branches,
GitHub disincentives the most productive use of the &quot;&lt;code&gt;git rebase&lt;/code&gt;&quot;
command that leads to clean and clear histories.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There&#39;s no distinction between a &quot;soft fork&quot; where you create a
fork for the purpose of submitting a patch (i.e. a &quot;pull request&quot;)
and a &quot;hard fork,&quot; where you actually want to break the
relationship with the original project.&lt;/p&gt;

&lt;p&gt;This is mostly meaningful in context of the &lt;em&gt;other&lt;/em&gt; features that
GitHub provides, notably the &quot;Network&quot; chart, and the issue
tracker. In a soft-fork that I would intend to merge back in, I&#39;d
like the issues to &quot;come with,&quot; the repository, or at least connect
in some way to the &quot;parent.&quot; For hard forks, it might make sense to
leave the old issues behind. The same with the network chart, which
is incredibly powerful, but it&#39;s not great at guessing how your
repository relates to the rest of its &quot;social network.&quot;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The solution: keep innovating, keep fighting lock-in, and don&#39;t let
GitHub dictate how you work.&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Making Things Easier</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/making-things-easier/</guid>
	
	<link>http://tychoish.com/rhizome/making-things-easier/</link>
	
	
	<category>/tag/productivity</category>
	
	<category>/tag/technology</category>
	
	
	<pubDate>Tue, 08 May 2012 00:00:00 -0400</pubDate>
	<dcterms:modified>2012-05-08T18:43:18Z</dcterms:modified>
	
	<description>&lt;p&gt;I spent a lot of time in the past few months thinking about
&quot;automation,&quot; as a project to take things that take a long time and
require a lot of human intervention into things that &lt;em&gt;just do
themselves,&lt;/em&gt; and I think this is the wrong approach.&lt;/p&gt;

&lt;p&gt;While total automation is an admirable, it&#39;s difficult, both because
it requires more complex software to deal with edge cases, but also
because it&#39;s hard to iterate &lt;em&gt;into&lt;/em&gt; a fully automated solution.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Let&#39;s back up for a moment and talk about automation in general.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Computers are great at automating things. When you figure out &lt;em&gt;how
  exactly to accomplish something digitally&lt;/em&gt; (i.e. polling an
  information source for an update, transforming data, testing a
  system or tool,) writing a program to perform this function is a
  great idea: not only does it reduce the workload on actual people
  (i.e. you.) &lt;strong&gt;I think the difference between people who are &quot;good
  with computers,&quot; and people who are &quot;great with computers,&quot; is the
  ability to spot opportunities for these kinds of automations, and
  potentially implement them..&lt;/strong&gt;&lt;/p&gt;
  
  &lt;p&gt;To my mind the most important reason to automate tasks is to ensure
  consistency and to make it more likely that tedious tasks get done.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Having said this, rather than develop complete task automations for
common functions, the better solution is probably to approach
automation on the bottom up: instead of automating a complete process,
automate smaller pieces particularly the most repetitive and
invariable parts, and then provide a way for people to trigger the
(now simplified) task.&lt;/p&gt;

&lt;p&gt;The end result, is a system that&#39;s more flexible easier to write, and
less prone to failure under weird edge cases. Perhaps this is a
manifestation of &quot;&lt;a href=&quot;http://c2.com/cgi/wiki?WorseIsBetter&quot;&gt;worse is better&lt;/a&gt;&quot;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Worse_is_better&quot;&gt;also&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;createlink&quot;&gt;&lt;a href=&quot;http://tychoish.com/ikiwiki.cgi?page=discourse&amp;amp;from=rhizome%2Fmaking-things-easier&amp;amp;do=create&quot; rel=&quot;nofollow&quot;&gt;?&lt;/a&gt;Thoughts&lt;/span&gt;?&lt;/p&gt;

&lt;p&gt;Onward and Upward!&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Supporting Distributed Bug Tracking</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/supporting-distributed-bug-tracking/</guid>
	
	<link>http://tychoish.com/rhizome/supporting-distributed-bug-tracking/</link>
	
	
	<category>/tag/programming</category>
	
	<category>/tag/software-development</category>
	
	
	<pubDate>Mon, 30 Apr 2012 00:00:00 -0400</pubDate>
	<dcterms:modified>2012-04-30T20:53:25Z</dcterms:modified>
	
	<description>&lt;p&gt;The free software/open source/software development world needs a
distributed bug tracking story. Because the current one sucks.&lt;/p&gt;

&lt;h2 id=&quot;thestateoftheart&quot;&gt;The State of the Art&lt;/h2&gt;

&lt;p&gt;There are a number of tools written between 2006 and 2010 or so that
provide partial or incomplete solutions to the problem. &lt;em&gt;Almost&lt;/em&gt; isn&#39;t
quite good enough. The &quot;resources&quot; section of this post, contains an
overview of the most important (my judgment,) representatives of the
current work in the area with a bit of editorializing.&lt;/p&gt;

&lt;p&gt;In general these solutions are good starts, and I think they allow us
(&lt;em&gt;or me&lt;/em&gt;) a good starting point for thinking about what distributed bug
tracking &lt;em&gt;could&lt;/em&gt; be like. Someday.&lt;/p&gt;

&lt;p&gt;Bug tracking needs are diverse, which creates a signifigant design
challenge for any system in this space. There are many existing
solutions, that everyone hates, and I suspect most would-be developers
and innovators in the space would like to avoid opening this can of
worms.&lt;/p&gt;

&lt;p&gt;Another factor is that, while most people have come to the conclusion
that distributed source control tools are the &quot;serious&quot; contemporary
tool for managing source code the benefits of distributed bug tracking
hasn&#39;t yet propogated in the same way. Many folks have begun to come
to terms with the fact that some amount of &lt;em&gt;tactical&lt;/em&gt; centralization
is inevitable, required, and even desirable&lt;a id=&quot;fnref:centralized-bugs&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt; in the
context of a issue tracking systems.&lt;/p&gt;

&lt;p&gt;Add to this the frequent requirement that non-developer users often
need to track and create issues, and the result is that we&#39;ve arrived
at something of an impasse.&lt;/p&gt;

&lt;h2 id=&quot;requirements&quot;&gt;Requirements&lt;/h2&gt;

&lt;p&gt;A distributed bug tracking system would need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A good way to provide short, unique identifiers for individual
issues and comments so that users can discuss issues canonically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An interface contained in a single application, script, or binary,
that you could distribute with the application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A simple/lightweight web-based interface so that users can (at least)
review, search, and reference issues from a web browser.&lt;/p&gt;

&lt;p&gt;Write access would also be good, but is less critical. Also, it
might be more practical (both from a design and a workflow
perspective,) to have users submit bugs on the web into a read-only
&quot;staging queue,&quot; that developers/administrators would then formally
import into the project. This formalizes a certain type of triage
approach that many projects may find useful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To be separable from the source code history, either by using a
branch, or by using pre-commit hooks to ensure that you never commit
changes to code/content &lt;em&gt;and&lt;/em&gt; the bugs at the same time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To be editable, and to interact with commonly accessible tools that
users already use. Email, command line tools, the version control
systems, potentially documentation systems, build systems, testing
frameworks and so forth.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built on reliable tools.&lt;a id=&quot;fnref:solid-tools&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To provide an easy way to customize your &quot;views&quot; on bugs for a 
particular team or project. In other words, each team can 
freely decide which extra fields get attached to their bugs, 
along with which fields are visible by default, 
which are required, and so on -- 
without interfering with other projects.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;thefutureoftheart&quot;&gt;The Future of the Art&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;We (all) need to work on building new and better tools to help
solve the distributed issue tracking problem. This will involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;learning from the existing attempts,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;continuing to develop and solidify the above requirements,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;(potentially) test and develop a standard (yaml/json?) based data
storage format that is easy to parse, and easily merged that
multiple tools can use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Develop some simple prototype tools, potentially as a suite of
related utilities (a la early versions of git.) that facilitate
interaction with the git database. With an eye towards
flexibility and extensible.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;While there are implications for free software hosting as well as
vendor independence and network service autonomy (a la
&lt;em&gt;&lt;a href=&quot;http://autonomo.us/2008/07/franklin-street-statement/&quot;&gt;Franklin Street Statement&lt;/a&gt;&lt;/em&gt;.)
I think the primary reason to pursue distributed bug tracking has
more to do with productivity and better engineering practices, and
less with the policy. In summary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Bug database systems that run locally and are &lt;em&gt;fast&lt;/em&gt;&lt;a id=&quot;fnref:slow&quot; class=&quot;footnote&quot;&gt;3&lt;/a&gt; and
always available.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools that permit offline interaction with issue database.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools that allow users to connect issues to branches.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools that make it possible to component-ize bug databases in
parallel with software&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;

&lt;p&gt;(&lt;em&gt;With commentary,&lt;/em&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://kitenet.net/cgi-bin/mailman/listinfo/dist-bugs&quot;&gt;dist-bugs mailing list&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the canonical source for discussion around distributed bug
tracking.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://bugseverywhere.org/&quot;&gt;Bugs Everywhere&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is among the most well developed solution speaking
holistically. &quot;be&quot; is written in Python, can generate output for the
web. It uses its own data format, and has a pretty good command line
tool. The HTML output generate is probably not very fast at scale
(none are,) but I have not tested it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://ditz.rubyforge.org/&quot;&gt;Ditz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ditz is a very well developed solution. Ditz: implemented in Ruby,
has a web interface, has a command line tool, uses a basic YAML data
format, and stores data &lt;em&gt;in branch&lt;/em&gt;. Current development is slow,
getting it up and running is non-trivial, and my sense is that there
isn&#39;t a very active community of contributors. There are reasons for
this, likely but they are beyond the scope of this overview.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://pitz.tplus1.com/&quot;&gt;pitz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pitz is a Python re-implementation of Ditz, and while the
developer(s?)  have produced a &quot;release,&quot; the &quot;interface&quot; is a
Python shell, and to interact with the database you have to,
basically write commands in Python syntax. From a data perspective,
however, Pitz, like Ditz is quite developed. Pitz while it stores
data in-tree, I think it&#39;s important source of
ideas/examples/scaffolding.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.mrzv.org/software/artemis/&quot;&gt;Artemis&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a really clever solution that uses Maildirs to store
issues. As a result you can interact with and integrate Artimis
issues with your existing email client. Pull down changes, and see
new bugs in your email, without any complicated email and list server
setups.&lt;/p&gt;

&lt;p&gt;The huge caveat is that it&#39;s implemented as a plugin for Mercurial,
and so can&#39;t be used with git projects. Also, all data resides in
the tree.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/jwiegley/git-issues&quot;&gt;git-issues&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In most ways, git-issues is my favorite: it&#39;s two Python files, 1700
lines of code, stores issues outside of the source branch, and has a
good command line interface. On the downside, it uses XML (which
shouldn&#39;t matter, but I think probably does, at least in terms of
attracting developers,) and doesn&#39;t have a web-based interface. It&#39;s
also currently un-maintained.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://syncwith.us/&quot;&gt;Prophet&lt;/a&gt;/&lt;a href=&quot;http://syncwith.us/sd/&quot;&gt;sd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SD, which is based on a distributed database named Prophet, is a
great solution. The primary issue is that it&#39;s currently
unmentioned and is not as feature complete as it should be. Also a
lot of SD focuses on synchronizing with existing centralized issue
trackers, potentially at the expense of developing other tools.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id=&quot;fn:centralized-bugs&quot;&gt;&lt;p&gt;It seems that you &lt;em&gt;want&lt;/em&gt; centralized issue
databases, or at least the fact that centralized issue databases
appear &lt;em&gt;canonical&lt;/em&gt; is a major selling point for issue tracking
software in general. Otherwise, everyone would have their own text
file with a bunch of issues, and that would suck.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li id=&quot;fn:solid-tools&quot;&gt;&lt;p&gt;Because I don&#39;t program (much) and it&#39;s easy to
criticize architectural decisions from afar, I don&#39;t want to
explicitly say &quot;we need to write this in Python for portability
reasons&quot; or something that would be similarly unfounded. At the same
time, adoption and ease of use is crucial here, both for developers
and users. Java and Ruby (and maybe Perl,) for various reasons, add
friction to the adoption possibilities.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li id=&quot;fn:slow&quot;&gt;&lt;p&gt;&quot;Is Jira/Bugzilla/etc. slow for you today?&quot;&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</description>
	
	
</item>
<item>
	
	<title>New Haven All Day Singing 2012</title>
	<dcterms:creator>Sam Kleinman</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/sacred-harp-new-haven-2012/</guid>
	
	<link>http://tychoish.com/rhizome/sacred-harp-new-haven-2012/</link>
	
	
	<category>/tag/sacred-harp</category>
	
	
	<pubDate>Fri, 20 Apr 2012 00:00:00 -0400</pubDate>
	<dcterms:modified>2012-05-04T02:33:57Z</dcterms:modified>
	
	<description>&lt;p&gt;I went to a fabulous all day Sacred Harp singing in New Haven
Connecticut last weekend. It was great. Thoughts:&lt;/p&gt;

&lt;h2 id=&quot;sizeandspace&quot;&gt;Size and Space&lt;/h2&gt;

&lt;p&gt;This wasn&#39;t a huge singing. There plenty of singings in the Northeast
that have higher attendance, but that doesn&#39;t matter, there was
something nice about getting to sing with the people assembled.&lt;/p&gt;

&lt;p&gt;It helped that the room was great for singing, and it was the perfect
size for the crowd. Sacred Harp singers are often big folklore geeks
or big music geeks, but I think deep down, we&#39;re all really huge
&lt;em&gt;room&lt;/em&gt; geeks. Because a room that just &lt;em&gt;sounds&lt;/em&gt; and &lt;em&gt;feels&lt;/em&gt; good,
makes all the difference in the world.&lt;/p&gt;

&lt;p&gt;Note to self: Go to more awesome regional singings in great rooms in
the future.&lt;/p&gt;

&lt;h2 id=&quot;heat&quot;&gt;Heat&lt;/h2&gt;

&lt;p&gt;It was a pleasantly warm spring day, and with 80 or so people in a
room, it got &lt;em&gt;warm&lt;/em&gt;, and while this did subtract something from the
comfort level, it also sets the mood somehow, and changes the tone of
the day. Also, when the air is a bit more humid (but it only needs to
be a bit,) and it&#39;s not as drafty and cold, its easier to keep your
voice warmed up. The end result: I (or one) will sing better between
April and September.&lt;/p&gt;

&lt;h2 id=&quot;myvoicepart&quot;&gt;My Voice Part&lt;/h2&gt;

&lt;p&gt;In an unusual move for me, I spent 3 out of 4 sessions singing
Tenor. While I don&#39;t have a &quot;super bass&quot; voice, I&#39;m defiantly on bass
side of baritone. In Sacred Harp, theoretically everyone can sing
tenor, and it&#39;s fun to mix things up a bit and songs sound different
in different parts. I am also finding that having a sense of another
part makes it possible to have a more rich sense of the music. Highly
recommended.&lt;/p&gt;

&lt;p&gt;Also, every time I sing tenor it takes me 25 minutes to remember (or
remind my body) how to do it, so it was particularly nice to have a
good long spell of singing to both figure out how to sing the part but
also to get more comfortable with it. &lt;/p&gt;

&lt;p&gt;My local singing community has been a bit bereft of basses lately, so
I haven&#39;t had much opportunity to actually sing tenor as much as I
might like recently, so it was a particularly good change of pace. &lt;/p&gt;

&lt;h2 id=&quot;songselection&quot;&gt;Song Selection&lt;/h2&gt;

&lt;p&gt;I had something of an epiphany about leading and choosing your song
at a singing. &lt;/p&gt;

&lt;p&gt;While choosing a song that you like and enjoy hearing is obviously a
part of the processes, I think song choice is more about choosing the
right song for the moment, and figuring out what will sound best
&lt;em&gt;next&lt;/em&gt;, given the previous few songs. &lt;/p&gt;

&lt;p&gt;I used to obsess a great deal about what song I would lead, and study
it (at least some) before the singing even began. This weekend, I came
with a few songs that I&#39;d been thinking about but changed at the last
moment when I thought that the song I had picked out wouldn&#39;t fit very
well.&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>On the Origins of Morris Dancing</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/on-the-origins-of-morris-dancing/</guid>
	
	<link>http://tychoish.com/rhizome/on-the-origins-of-morris-dancing/</link>
	
	
	<category>/tag/dance</category>
	
	
	<pubDate>Mon, 09 Apr 2012 00:00:00 -0400</pubDate>
	<dcterms:modified>2012-04-09T19:06:07Z</dcterms:modified>
	
	<description>&lt;p&gt;When you&#39;re out in the world Morris Dancing, everyone asks what you&#39;re
doing. Actually, more typically people ask &quot;What country is this
from?&quot; but I don&#39;t know what that means. In any case, this past
weekend I witnessed the following exchange between elderly spectator
to the foreman of a certain New York City Men&#39;s Team as the tour was
moving between stands: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spectator&lt;/strong&gt;: What is this and where is it from?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;J.D.&lt;/strong&gt;: It&#39;s English Morris Dancing, do you know what that is?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spectator&lt;/strong&gt;: No.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;J.D.&lt;/strong&gt;: Do you care?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spectator&lt;/strong&gt; (&lt;em&gt;pauses, unsure of how to continue&lt;/em&gt;) Yes, is it like
cricket or football?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;J.D.&lt;/strong&gt; Cricket. &lt;/p&gt;

&lt;p&gt;(&lt;em&gt;At this point the spectator continued about his way satisfied and
the tour continued to the next stand.&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;This exchange, as these usually go, was pretty good. And the cricket
part is totally right. There&#39;s actually, as I understand it, a lot of
connection between the history of cricket and Morris Dancing:
village&#39;s teams would play cricket and dance Morris, Morris Kits were
often cricket uniforms with ribbons and bells, and before cricket,
most Morris dancers wore black pants.&lt;/p&gt;

&lt;p&gt;Still.&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Lies Developers Tell About Documentation</title>
	<dcterms:creator>tychoish</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/lies-developers-tell-about-documentation/</guid>
	
	<link>http://tychoish.com/rhizome/lies-developers-tell-about-documentation/</link>
	
	
	<category>/tag/programming</category>
	
	<category>/tag/technical-writing</category>
	
	
	<pubDate>Thu, 05 Apr 2012 00:00:00 -0400</pubDate>
	<dcterms:modified>2012-04-05T16:20:24Z</dcterms:modified>
	
	<description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;All the documentation you&#39;d need is in the test cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My comments are really clear and detailed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I&#39;m really interested and committed to having really good
documentation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This code is easy to read because its so procedural.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This doesn&#39;t really need documentation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I&#39;ve developed a really powerful way to extract documentation from
this code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The documentation is up to date.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We&#39;ve tested this and nothing&#39;s changed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This behavior hasn&#39;t changed, and wouldn&#39;t affect users anyway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The error message is clear.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This entire document needs to be rewritten to account for this
change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can document this structure with a pretty clear table.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Often this is true, more often these kinds of comments assume
that it&#39;s possible to convey 3-5 dimension matrixes clearly on
paper/computer screens.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I can do that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I will do that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No one should need to understand.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
	
	
</item>
<item>
	
	<title>Task Updates</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/task-updates/</guid>
	
	<link>http://tychoish.com/rhizome/task-updates/</link>
	
	
	<category>/tag/journal</category>
	
	<category>/tag/update</category>
	
	
	<pubDate>Tue, 03 Apr 2012 11:19:31 -0400</pubDate>
	<dcterms:modified>2012-04-03T15:25:25Z</dcterms:modified>
	
	<description>&lt;p&gt;Life has been incredibly busy and full lately and that&#39;s been a great
thing. I&#39;ve also been focusing my time on &lt;a href=&quot;http://tychoish.com/./rhizome/longer-forms/&quot;&gt;big projects&lt;/a&gt;
recently rather than posting updates here and updating the wiki. And
then I have this day job which basically counts as a big
project. While I like the opportunity to focus deeply on some
subjects, I also miss the blog.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;tycho is conflicted about something. Shocking.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In any case, I want to do something useful with this space more
regularly. So here I am and expect me more around these parts.&lt;/p&gt;

&lt;p&gt;I&#39;ve been working on a total refresh of my Cyborg Institute
project. I want it to be an umbrella for cool projects, nifty
examples, great documentation, and smart people&lt;a id=&quot;fnref:smart-people&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt; working
on cool projects. If that&#39;s ever going to happen, I need to get
something together myself. The first release will contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A book-like object, that provides an introduction to the basic
principals of Systems Administration for developers, &quot;web people,&quot;
and other people who find themselves in charge of systems, without
any real introduction to systems administration. (&lt;em&gt;Status:&lt;/em&gt; 70%
finished, with a couple more sections to draft and some editing left.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A Makefile based tasklist aggregator, inspired by
&lt;a href=&quot;http://orgmode.org/&quot;&gt;org-mode&lt;/a&gt; but largely tool
agnostic. (&lt;em&gt;Status:&lt;/em&gt; 95% finished, with documentation editing and
some final testing remaining.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A logging system for writers. I use it daily, and I think it&#39;s a
vast improvement over some previous attempts at script writing, and
I did a pretty good job of documenting it, but it&#39;s virtually
impossible to manage/maintain. Having said that, I always wanted to
rewrite it in Python (as a learning exercise,) so that might be a
cool next step (&lt;em&gt;Status:&lt;/em&gt; Finished save editing and an eventual
rewrite.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Emacs and StumpWM config files, packaged as &quot;starter-kits&quot; for new
users. I have good build processes for both of these. I don&#39;t think
that I need to document them fully, but I need to write some
READMEs. Since there&#39;s a lot of redistribution of others code, I
need to figure out the most compatible/appropriate
license. (&lt;em&gt;Status:&lt;/em&gt; Finished except for the work of free afternoon.)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Probably, all of these Cyborg Institute projects will get released at
about the same time. The blockers will be finishing/editing the book
and editing everything else. I might make the release a &lt;em&gt;thing&lt;/em&gt;, we&#39;ll
see.&lt;/p&gt;

&lt;p&gt;Other than that, I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Updated &lt;a href=&quot;http://tychoish.com/./technical-writing/compilation/&quot;&gt;compilation&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finished the first draft of this novel. Editing will commence in
June. I&#39;ve also started planning a fiction project, for a draft to
begin in the fall?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wrote a few paragraphs on the &lt;a href=&quot;http://tychoish.com/./critical-futures/isd/&quot;&gt;isd&lt;/a&gt; page, but I&#39;m
starting to think that as my time becomes more limited, that the
&lt;a href=&quot;http://tychoish.com/./rhizome/critical-futures/&quot;&gt;critical-futures&lt;/a&gt; wiki project, as such, will probably be the
first thing to fall on the floor, unless someone else is really
interested in making that be a thing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Onward and Upward!&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id=&quot;fn:smart-people&quot;&gt;&lt;p&gt;My intention for the Cyborg Institute has always been
(and shall remain,) as a sort of virtual think tank for cool projects
put up by myself and others. You all, dearest readers, count in this
group.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</description>
	
	
</item>
<item>
	
	<title>Transit and NYC Subway Strategy</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/transit-and-nyc-subway-strategy/</guid>
	
	<link>http://tychoish.com/rhizome/transit-and-nyc-subway-strategy/</link>
	
	
	<category>/tag/transit</category>
	
	<category>/tag/urban-planning</category>
	
	
	<pubDate>Thu, 29 Mar 2012 00:00:00 -0400</pubDate>
	<dcterms:modified>2012-03-29T17:34:29Z</dcterms:modified>
	
	<description>&lt;p&gt;I have a question for game theory/urban planning/transit geeks, in
part for practical reasons, and in part for a story I&#39;m developing: &lt;/p&gt;

&lt;p&gt;Is there some sort of resource that explains &quot;most efferent&quot; rapid
transit rider strategies, perhaps from a game theory perspective?&lt;/p&gt;

&lt;p&gt;I&#39;ve been living in NYC for almost a year, with frequent visits for
about 6 months before that and I&#39;ve learned things like: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The physical layouts of a number of station complexes and transfer
points, to facilitate quick/easy transfers. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A faltering sense of when to take and express and when to take a
local, and when it makes sense to switch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A decent sense of which route will be more direct/quicker in a given
situation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An acceptable sense of which part of the train you need to be on.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I&#39;m interested in knowing if there is any work aimed at a general
audience that addresses any of these questions, in particular:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The express/local decision making logic, particularly given
situations like: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When does it make sense to walk ~5-10 blocks to an express stop
(possibly in the wrong direction,) rather than walk a shorter
distance to a local stop that would require a transfer. (If your
destination is an express stop?) &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At what point in a journey does it make the most sense to transfer
between trains? &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How does time-of-day affect the logic.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specific differences (if any) for navigating subway lines with
multiple converging services. (e.g. the &quot;M&quot; with regards to the F
and E, as well as the R with regards to the N in Manhattan.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Logic for transferring between non-parallel train services that
intersect at multiple points in a given journey (e.g. in Brooklyn,
vs. Manhattan, if needed for inter-borough trips; E/M; 4,5,6 vs N,
R.) &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Logic for transferring between services that run on the same track
(e.g. in NYC: N/R, E/C, F/M, etc.) with respect to how your journey
overlays the route divergence and convergences.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
	
	
</item>
<item>
	
	<title>The Million Words of Crap</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/the-million-words-of-crap/</guid>
	
	<link>http://tychoish.com/rhizome/the-million-words-of-crap/</link>
	
	
	<category>/tag/writing</category>
	
	
	<pubDate>Wed, 28 Mar 2012 00:00:00 -0400</pubDate>
	<dcterms:modified>2012-03-28T20:03:53Z</dcterms:modified>
	
	<description>&lt;p&gt;There&#39;s this saying, I traced it down once but have forgotten the
source again, that before you can write anything good, you have to
write a million words of crap.&lt;/p&gt;

&lt;p&gt;Well I&#39;ve done it. I&#39;m guessing that most writers hit this number
without much difficulty fairly early on in their lives/careers, but
it&#39;s hard keep records and do proper accounting of this data. And
let&#39;s be frank, it&#39;s kind of a stupid thing to track. While I&#39;m
definitely a better writer these days than I was even 2 years ago, I
know that I have a lot more to learn.&lt;/p&gt;

&lt;p&gt;In any case, I have a firm account of a million words of crap that
I&#39;ve written in the last 10 years or so:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;tychoish.com&lt;/em&gt; this wiki, mostly &lt;a href=&quot;http://tychoish.com/./rhizome/&quot;&gt;rhizome&lt;/a&gt; accounts for a bit more
than 800,000 words.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I wrote a novel in 2002 and 2003 that now exists primarily as a
paper volume in a zippered binder that I use as a foot rest. That
was 100,000 words.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Since September 26, 2011 I&#39;ve written a bit under 101,500 words for
my work. The number is slightly inflated on account of code samples,
some repetitive sections, and a few articles that colleagues wrote
that I did some significant editing/rewriting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Between June 2009 and May 2011, I wrote somewhere between 100,000
and 200,000 words for a previous job (again some measure of
redundant content, other people&#39;s work, and code samples makes this
figure hard to track.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;em&gt;Knowing Mars&lt;/em&gt; novella that I wrote between July 2007 and ~March
2008 is about 35,000 words.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The novel that I finished the first draft of few weeks ago is about
85,000 words.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I&#39;m 35,000 words into the first draft of a technical book-like
object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I have 10,000 words in a couple of other projects.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which puts me way way way, over (what? 1,300,000.) I wonder when I
broke the million word mark?&lt;/p&gt;

&lt;p&gt;Some observations on writing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I still make all kinds of writing mistakes that I find embarrassing
and difficult. Particularly with fiction (which probably only
accounts for 200,000-250,000 words,) I feel incredibly clumsy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At the same time, as long as I have a clear idea of what a piece of
text needs to say, I&#39;m reasonably comfortable pulling together a
draft without much fuss. Sometimes figuring out what I need to say
involves a bunch of reading and long walk, but it&#39;s possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I&#39;m getting better at writing less. Writing concisely is hard work
and it&#39;s easy to get into the habit of generating &quot;word stew&quot; that
don&#39;t say anything useful and are impenetrable to read.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Writing is hard. I&#39;ve always been an awful speller and I have some
dyslexic moments, but--as longtime readers of the blog have surely
noticed--I&#39;m getting &lt;em&gt;way&lt;/em&gt; better and writing cleaner copy.&lt;/p&gt;

&lt;p&gt;Editing other peoples writing on a regular basis has also been
enlightening because it allows me to put things in perspective, and
be able to see value in what I can do with words. Also it&#39;s cool to
be able to help other people write.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This is totally a correlation, but I pretty much never write
anything longhand, and I think I&#39;m a better writer for it. The
downside is that I&#39;m incredibly dependent on my own computer and
its setup to do anything.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Onward and Upward!&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Loops and Git Automation</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/code-snippets-loops-and-git-automation/</guid>
	
	<link>http://tychoish.com/rhizome/code-snippets-loops-and-git-automation/</link>
	
	
	<category>/tag/linux</category>
	
	<category>/tag/programming</category>
	
	<category>/tag/technology</category>
	
	
	<pubDate>Thu, 15 Mar 2012 00:00:00 -0400</pubDate>
	<dcterms:modified>2012-03-29T03:18:08Z</dcterms:modified>
	
	<description>&lt;p&gt;This post provides a few quick overviews of cool bits of shell script
that I&#39;ve written or put together recently. Nothing earth shattering,
but perhaps interesting nonetheless.&lt;/p&gt;

&lt;h2 id=&quot;makingabunchofsymboliclinks.&quot;&gt;Making a Bunch of Symbolic Links.&lt;/h2&gt;

&lt;p&gt;I have two collection of Maildir folders to store my mail. One in a
&lt;code&gt;~/work/mail&lt;/code&gt; folder for my work mail, and &lt;code&gt;~/mail&lt;/code&gt; for my personal
projects. I want the work mailboxes to be symbolically linked to the
personal ones (some work email, notably from GitHub comes to a
personal address, and I want to be able to refile as necessary.) I
moved the work maildirs last week, so I needed to create about 15
symbolic links, and so I wrote the following little loop:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; cd ~/mail
 for i in `find ~/work/mail -maxdepth 1 -mindepth 1`; do
     ln -s &amp;#036;i work.`echo &amp;#036;i | cut -d / -f 6`
 done
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Should be useful, no?&lt;/p&gt;

&lt;h2 id=&quot;commitallgitchanges&quot;&gt;Commit all Git Changes&lt;/h2&gt;

&lt;p&gt;For a long time, I used the following bit of code to provide the
inverse operation of &quot;&lt;code&gt;git add .&lt;/code&gt;&quot;. Where &quot;&lt;code&gt;git add .&lt;/code&gt;&quot; adds all
uncommited changes to the staging area for the next commit, the
following commit automatically removes all files that are no longer
present on the file-system from the staging area for the next commit.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; if [ &quot;`git ls-files -d | wc -l`&quot; -gt &quot;0&quot; ]; then
     git rm --quiet `git ls-files -d`
 fi
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is great if you forget to use &quot;&lt;code&gt;git mv&lt;/code&gt;&quot; or you delete a file
using &lt;code&gt;rm&lt;/code&gt;, you can run this operation and pretty quickly have &lt;code&gt;git&lt;/code&gt;
catch up with the state of reality. In retrospect I&#39;m not really sure
why I put the error checking &lt;code&gt;if&lt;/code&gt; statement in there.&lt;/p&gt;

&lt;p&gt;There are two other implementations of this basic idea that I&#39;m aware
of:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  for i in `git ls-files -d`; do
     git rm --quiet &amp;#036;i
  done
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Turns out you can do pretty much the same thing with the following
statement using the &lt;code&gt;xargs&lt;/code&gt; command and you end up with something
that&#39;s a bit more succinct:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; git ls-files --deleted -z | xargs -0 git rm --quiet
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I&#39;m not sure why, I think it&#39;s because I started being a Unix nerd
after Linux dropped the argument number limit, and as a result I&#39;ve
never really gotten a chance to become familiar with &lt;code&gt;xargs&lt;/code&gt;. While I
sometimes sense that a problems is &lt;code&gt;xargs&lt;/code&gt; shaped, I almost never run
into &quot;too many arguments&quot; errors, and always attempt other solutions
first.&lt;/p&gt;

&lt;h2 id=&quot;anoteaboutxargs&quot;&gt;A Note About &lt;code&gt;xargs&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;If you&#39;re familiar with &lt;code&gt;xargs&lt;/code&gt; skip this section. Otherwise, it&#39;s
geeky story time.&lt;/p&gt;

&lt;p&gt;While this isn&#39;t currently an issue on Linux, some older UNIX systems
(including older versions of Linux,) had this limitation where you
could only pass a limited number of arguments to a command. If you had
too many, the command would produce an error, and you had to &lt;em&gt;find
another way&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I&#39;m not sure what the number was, and the specific number isn&#39;t
particularly important to the story. Generally, I understand that this
problem would crop up when attempting to take the output of a command
like &lt;code&gt;find&lt;/code&gt; and piping or passing it to another command like &lt;code&gt;grep&lt;/code&gt; or
the like. I&#39;m not sure if you can trigger &quot;too many arguments&quot; errors
with globbing (i.e. &lt;code&gt;*&lt;/code&gt;) but like I said this kind of thing is pretty
uncommon these days.&lt;/p&gt;

&lt;p&gt;One of the &quot;other ways&quot; was to use the &lt;code&gt;xargs&lt;/code&gt; command which basically
takes very long list of arguments and passes them one by one (or in
batches?) to another command. My gut feeling is that &lt;code&gt;xargs&lt;/code&gt; can do
some things, like the above a bit more robustly, but that isn&#39;t
experimentally grounded. Thoughts?&lt;/p&gt;

&lt;p&gt;Onward and Upward!&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Cron is the Wrong Solution</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/cron-is-the-wrong-solution/</guid>
	
	<link>http://tychoish.com/rhizome/cron-is-the-wrong-solution/</link>
	
	
	<category>/tag/linux</category>
	
	<category>/tag/software</category>
	
	<category>/tag/systems-administration</category>
	
	
	<pubDate>Thu, 08 Mar 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-03-08T15:17:09Z</dcterms:modified>
	
	<description>&lt;p&gt;Cron is great, right? For the uninitiated, if there are any of you
left, Cron is a task scheduler that makes it possible to run various
scripts and programs at specified intervals. This means that you can
write programs that &quot;&lt;em&gt;do a thing&lt;/em&gt;&quot; in a stateless way, set them to run
regularly, without having to consider any logic regarding when to run,
or any kind of state tracking. Cron is simple and the right way to
do a great deal of routine automation, but there are caveats.&lt;/p&gt;

&lt;p&gt;At times I&#39;ve had &lt;em&gt;scads&lt;/em&gt; of cron jobs, and while they work, from time
to time I find myself going through my list of cron tasks on various systems
and removing most of them or finding &lt;em&gt;better ways.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The problems with cron are simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Its often a sledge hammer, and it&#39;s very easy to put something in
cron job that needs a little more delicacy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;While it&#39;s &lt;em&gt;possible&lt;/em&gt; to capture the output of cron tasks (typically
via email,) the feedback from cronjobs is hard to follow. So it&#39;s
hard to detect errors, performance deterioration, inefficiencies, or
bugs proactively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Its too easy to cron something to run every minute or couple of
minutes. A task that seems relatively lightweight when you run it
once can end up being expensive in the aggregate when they have to
run a thousand times a day.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn&#39;t to say that there aren&#39;t places where using cron isn&#39;t
absolutely the right solution, but there are better solutions. For
instance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Include simple tests and logic for the cron task to determine if it
&lt;em&gt;needs&lt;/em&gt; to run before actually running.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make things very easy to invoke or on demand rather than
automatically running them regularly.&lt;/p&gt;

&lt;p&gt;I&#39;ve begun to find little scripts and
&lt;a href=&quot;http://tools.suckless.org/dmenu/&quot;&gt;dmenu&lt;/a&gt;, or an easily called
emacs-lisp function to be preferable to a cron job for a lot of
tasks that I&#39;d otherwise set in a cron job.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write real daemons. It&#39;s hard and you have to make sure that they
don&#39;t error our or quit unexpectedly--which requires at least
primitive monitoring--but a little bit of work here can go a long
way.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Onward and Upward!&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Git In Practice</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/git-in-practice/</guid>
	
	<link>http://tychoish.com/rhizome/git-in-practice/</link>
	
	
	<category>/tag/git</category>
	
	<category>/tag/software</category>
	
	
	<pubDate>Tue, 21 Feb 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-02-21T19:01:38Z</dcterms:modified>
	
	<description>&lt;p&gt;Most people don&#39;t use git particularly well. It&#39;s a capable piece of
software that supports a number of different workflows, but because it
doesn&#39;t mandate any particular workflow it&#39;s possible to use git
productively for years without ever really touching some features.&lt;/p&gt;

&lt;p&gt;And some of the features--in my experience mostly those related to
more manual branching, merging, and history manipulation
operations--are woefully underutilized. Part of this is because
&lt;a href=&quot;http://github.com/&quot;&gt;Github&lt;/a&gt;, which is responsible for facilitating much of git&#39;s use,
promotes a specific workflow that makes it possible to do most of the
(minimal required) branch operations on the server side, with the help
of a much constrained interface. Github makes git usable by making it
possible to get &lt;em&gt;most&lt;/em&gt; of the benefit of git without needing to mess
with SHA1 hashes, or anything difficult on the command-line.&lt;/p&gt;

&lt;p&gt;That&#39;s a good thing. Mostly.&lt;/p&gt;

&lt;p&gt;Nevertheless, there are a few operations that remain hard with git: I
sometimes encounter situations that I have to try a few times before I
get it right, and there are commands that I always have to check the
man page to figure out how to specify the references. And even then
I&#39;m sometimes still confused. So maybe I (or we?) can spend a little
bit of time and figure out what processes remain hard with git and
maybe try and see if there is a way to make the process a bit more
streamlined.&lt;/p&gt;

&lt;p&gt;Here&#39;s my list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reorder all commits since x commit.&lt;/p&gt;

&lt;p&gt;This is basically: find the commit before the earliest one that you
want to change, run &quot;&lt;code&gt;git rebase -i &amp;lt;commit hash&amp;gt;&lt;/code&gt;&quot; reorder the
commits even though git sorts the commits in the order that I find
most un-intuitive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create local branches to track remote branches or repositories.&lt;/p&gt;

&lt;p&gt;Setup the remotes, if necessary, and then run: &quot;&lt;code&gt;git branch --track
&amp;lt;local-branch-name&amp;gt; &amp;lt;remote&amp;gt;/&amp;lt;branch-name&amp;gt;&lt;/code&gt;&quot; and &quot;&lt;code&gt;git config
branch.{name}.push {local-branch}:master&lt;/code&gt;&quot;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stash all local changes and switch branches.&lt;/p&gt;

&lt;p&gt;It would also be nice if you could figure out way for git (or a
helper) to see any open files in your text editor and save/close
them if needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pull a commit from the history of one branch into another branch
without pulling anything else.&lt;/p&gt;

&lt;p&gt;I think this is chery-pick? It might also be nice to pull a series
of commits from one branch, rebase them into one commit in the
destination branch, and then commit &lt;em&gt;that.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pretty much every time I&#39;ve tried to use the merge command to get
something other than what I would have expected to happen by using
&quot;pull,&quot; it ends tragically.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reader suggestions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Put your process/procedural frustrations with git here&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How about we work on figuring out how to solve these problems on the
&quot;&lt;a href=&quot;http://tychoish.com/./rhizome/git-in-practice/discourse/&quot;&gt;comments page&lt;/a&gt;&quot; page.&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Assisted Editing</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/assisted-editing/</guid>
	
	<link>http://tychoish.com/rhizome/assisted-editing/</link>
	
	
	<category>/tag/emacs</category>
	
	<category>/tag/writing</category>
	
	
	<pubDate>Thu, 09 Feb 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-02-10T00:55:10Z</dcterms:modified>
	
	<description>&lt;p&gt;I learned about &lt;a href=&quot;http://robmyers.org/weblog/2011/10/08/artbollocks-modeel/&quot;&gt;artbollocks-mode.el&lt;/a&gt;
from &lt;a href=&quot;http://sachachua.com/blog/2011/12/emacs-artbollocks-mode-el-and-writing-more-clearly/&quot;&gt;Sacha Chua&#39;s post&lt;/a&gt;,
and it&#39;s pretty freaking amazing.&lt;/p&gt;

&lt;p&gt;Basically, it does some processing of your writing--&lt;em&gt;while you
work&lt;/em&gt;--to highlight passive sentences and affected jargon.&lt;a id=&quot;fnref:jargon&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt; And that&#39;s
all. There are some functions for generating statistics about your
writing, but I find I don&#39;t use that functionality often. You can
enable it all of the time, or just turn it on when you&#39;re doing
editing.&lt;/p&gt;

&lt;p&gt;After a few weeks, I&#39;ve noticed a marked improvement in the quality of
my output. I leave it on all the time, but I&#39;m pretty good at
resisting the urge to edit while I&#39;m writing. Or at least I&#39;m pretty
good at picking up again after going back to tweak a wording. In
general it&#39;s hard to keep more than a few things in an editing pass at
any time.&lt;/p&gt;

&lt;p&gt;It turns out that the instant feedback on passive sentences, even
though it&#39;s not perfect, is &lt;em&gt;great&lt;/em&gt; for improving the quality of my
content the first time out. And it&#39;s even better for doing editing
work. It&#39;s harder to ignore a passive sentence when the editor is
highlighting you see a screen full of them for you.&lt;/p&gt;

&lt;p&gt;It&#39;s of course important to be able to ignore its suggestions from
time to time, and it&#39;s no harder to ignore than &quot;flyspell-mode&quot; (the
on-the-fly spell checker in emacs.)&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id=&quot;fn:jargon&quot;&gt;&lt;p&gt;This is perhaps the clumsiest part of the default
distribution, as jargon is terribly specific to the kind of writing
you&#39;re doing, and it turns out that one of the &quot;art
critic&quot;/post-modern words (i.e. &quot;node&quot;) is a word that I end up using
(acceptably, I think) in a technical context when describing a
clustered system. And there&#39;s a difference between a technical lexicon
and a jargon, and regular expressions aren&#39;t terribly sensitive to
this, so the actual list of words that you need to call yourself out
on, varies a bit from person to person. But once you customize it,
it&#39;s great.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</description>
	
	
</item>
<item>
	
	<title>Allowable Complexity</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/allowable-complexity/</guid>
	
	<link>http://tychoish.com/rhizome/allowable-complexity/</link>
	
	
	<category>/tag/systems-administration</category>
	
	<category>/tag/technical-writing</category>
	
	
	<pubDate>Fri, 03 Feb 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-02-03T16:32:12Z</dcterms:modified>
	
	<description>&lt;p&gt;I&#39;m not sure I&#39;d fully realized it before, but the key problems in
systems administration--at least the kind that I interact with the
most--are really manifestations of a tension between complexity and
reliability.&lt;/p&gt;

&lt;p&gt;Complex systems are often more capable flexible, so goes the
theory. At the same time, complexity often leads to operational
failure, as a larger number of moving parts leads to more potential
points of failure. I think it&#39;s an age old engineering problem and I
doubt that there are good practical answers.&lt;/p&gt;

&lt;p&gt;I&#39;ve been working on this writing project where I&#39;ve been exploring a
number of fundamental systems administration problem domains, so this
kind of thing is on my mind. It seems, that the way to address the
hard questions often come back to &quot;what are the actual requirements,
and are you willing to pay the premiums to make the complex systems
reliable?&quot;&lt;/p&gt;

&lt;p&gt;Trade-offs around complexity also happen in software development
proper: I&#39;ve heard more than a few developers talk in the last few
months weigh the complexity of using dynamic languages like Python for
very large scale projects. While the quests and implications manifest
differently for code, it seems like this is part of the same problem.&lt;/p&gt;

&lt;p&gt;Rather than prattle on about various approaches, I&#39;m just going to
close out this post with a few open questions/thoughts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What&#39;s the process for determining requirements that accounts for
actual required complexity?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How do things that had previously been complex, become less complex?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Perhaps someone just has write the code in C or C++ and let it
mature for a few years before administrators accept it as stable&lt;/em&gt;?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is there an corresponding level of complexity threshold in software
development and within software itself? (Likely yes,) and is it
related to something intrinsic to particular design patterns, or to
tooling (i.e. programming language implementations, compilers, and
so forth.)&lt;/p&gt;

&lt;p&gt;Might better developer tooling allow us to programs of larger scope
in dynamic languages (perhaps?)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reader submitted questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Your questions here.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Answers, or attempts thereat &lt;span class=&quot;createlink&quot;&gt;&lt;a href=&quot;http://tychoish.com/ikiwiki.cgi?page=discourse&amp;amp;from=rhizome%2Fallowable-complexity&amp;amp;do=create&quot; rel=&quot;nofollow&quot;&gt;?&lt;/a&gt;on the discussion page&lt;/span&gt;.&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Persistent Emacs Daemons</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/persistent-emacs-daemons/</guid>
	
	<link>http://tychoish.com/rhizome/persistent-emacs-daemons/</link>
	
	
	<category>/tag/emacs</category>
	
	
	<pubDate>Thu, 02 Feb 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-02-02T17:39:25Z</dcterms:modified>
	
	<description>&lt;p&gt;I&#39;ve been subject to a rather annoying emacs bug for
months. Basically, when you start emacs with the &lt;code&gt;--daemon&lt;/code&gt; switch,
and the X11 session exits, &lt;em&gt;and&lt;/em&gt; any emacs frames are open, then the
emacs process dies. No warning. The whole point, to my mind, of the
daemon mode is to allows emacs sessions to persist beyond the current
X11 session.&lt;/p&gt;

&lt;p&gt;This shouldn&#39;t happen. I think
&lt;a href=&quot;http://lists.gnu.org/archive/html/bug-gnu-emacs/2011-04/msg00261.html&quot;&gt;this&lt;/a&gt;
is the relevant bug report, but I seem to remember that the issue has
something to do with the way that &lt;a href=&quot;http://www.gtk.org/&quot;&gt;GTK&lt;/a&gt; interacts
with the X11 session and emacs&#39;s frames. It&#39;s something of a deadlock:
the GTK has no real need to fix the bug (and/or it&#39;s a behavior that
they rely on for other uses,) and it might not really be possible or
feasible for emacs to work around this issue.&lt;a id=&quot;fnref:source&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also think that it&#39;s probably fair to say that daemon mode
represent a small minority all emacs usage.&lt;/p&gt;

&lt;p&gt;Regardless, I&#39;ve figured out the workaround:&lt;/p&gt;

&lt;p&gt;.. don&#39;t use GTK.&lt;/p&gt;

&lt;p&gt;Turns out, it&#39;s totally possible to build
&lt;a href=&quot;http://gnu.org/s/emacs&quot;&gt;GNU emacs&lt;/a&gt; without GTK, by using the &quot;Lucid&quot;
build. Which is to say, use the windowing system kit built for Lucid
Emacs (i.e. XEmacs,) rather than GTK. I was able, using the code
below, to get an emacs experience with the new build that seems
identical&lt;a id=&quot;fnref:exception&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt; to the one I used to get with GTK, except
without the frustrating crashes every time that X11 spazzed when I
decided to unplug a monitor or some such. A welcome improvement,
indeed.&lt;/p&gt;

&lt;p&gt;The following emacs-lisp covers all of the relevant configuration of
the &quot;look and feel&quot; of my emacs session. Install the
&lt;a href=&quot;http://levien.com/type/myfonts/inconsolata.html&quot;&gt;Inconsolata&lt;/a&gt; font if
you haven&#39;t already, you&#39;ll be glad you did.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; (setq-default inhibit-startup-message &#39;t
               initial-scratch-message &#39;nil
               save-place t
               scroll-bar-mode nil
               tool-bar-mode nil
               menu-bar-mode nil
               scroll-margin 0
               indent-tabs-mode nil
               flyspell-issue-message-flag &#39;nil
               size-indication-mode t
               scroll-conservatively 25
               scroll-preserve-screen-position 1
               cursor-in-non-selected-windows nil)

 (setq default-frame-alist &#39;((font-backend . &quot;xft&quot;)
                             (font . &quot;Inconsolata-14&quot;)
                             (vertical-scroll-bars . 0)
                             (menu-bar-lines . 0)
                             (tool-bar-lines . 0)
                             (alpha 86 84)))

 (tool-bar-mode -1)
 (scroll-bar-mode -1)
 (menu-bar-mode -1)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Hope this helps you and/or anyone else that might have run into this
problem.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id=&quot;fn:source&quot;&gt;&lt;p&gt;I&#39;d like to add the citation and more information here, but
can&#39;t find it.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li id=&quot;fn:exception&quot;&gt;&lt;p&gt;To be fair, I mostly don&#39;t use the GUI elements in
emacs, though having emacs instances outside of the terminal is nice
for displaying images when using emacs-w3m, and for having a little
bit of additional display flexibility for some more rich modes.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</description>
	
	
</item>
<item>
	
	<title>The Laptop Riser that Changed My Life</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/the-laptop-riser-that-changed-my-life/</guid>
	
	<link>http://tychoish.com/rhizome/the-laptop-riser-that-changed-my-life/</link>
	
	
	<category>/tag/productivity</category>
	
	<category>/tag/technology</category>
	
	
	<pubDate>Wed, 01 Feb 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-02-01T20:43:17Z</dcterms:modified>
	
	<description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;tl;Dr&amp;gt;&lt;/em&gt;&lt;/strong&gt; I got one of those nifty laptop risers that puts your
laptop up closer to eye level, and it has pretty much improved all of
my interactions with computers a thousand fold &lt;em&gt;and&lt;/em&gt; it&#39;s made it
possible for me to effectively use two screens. This post explores
this.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;One of my coworkers had a laptop stand she wasn&#39;t using and I asked to
borrow it for an afternoon, and my neck stopped hurting. I never
thought my neck hurt before, but apparently it does.&lt;/p&gt;

&lt;p&gt;Or did.&lt;/p&gt;

&lt;p&gt;But there&#39;s more: for years now I&#39;ve kept an extra monitor around (and
had one at work) but the truth is that I have never really felt like
I&#39;ve been able to get the most out of an external monitor.&lt;/p&gt;

&lt;p&gt;Somehow, putting my laptop 4 inches in the air was the little change
that made everything better. The laptop is generally on the left of
the external monitor, and I have task lists, notes buffers, the chat
window, and my status logging window on the laptop, and then three
windows on the external (emacs buffer, terminal, emacs buffer) on the
right. My primary focus centers between the monitors, but probably
edges slightly toward the external, most of the time.&lt;/p&gt;

&lt;p&gt;Also, I discovered that I--apparently--have a slight
processing/attention defect whereby I find it painful and difficult to
focus on things that are happening on the right side of the screen for
any amount of time. Which is weird because my right eye has always
been noticeably stronger. I&#39;ll ponder this more later.&lt;/p&gt;

&lt;p&gt;My virtual desktops for email and web browsing are a bit less rigid,
but the same basic idea. Somehow it seems to work. I&#39;ve done a little
bit of work recently to get the layouts right, to minimize the impact
of the window management of most context switching (scripting various
transitions, saving layouts, etc.) In all things are going great.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;It strikes me that I&#39;ve not posted here even a little about my setup
in a while. The truth is that it&#39;s not terribly surprising and I&#39;ve
not changed very much recently. I&#39;m back to one laptop, and as anxious
as having one laptop makes me sometimes (I fear the lack of
redundancy,) not having to keep it synced makes life easier. I&#39;ve put
some time into doing a little bit of polish on all of little bits of
configuration/code that I have that makes my computing world go
around, but mostly it&#39;s pretty good.&lt;/p&gt;

&lt;p&gt;It&#39;s nice, and I&#39;d write more about it, but I want to get back to
getting things done around here. Exporting and exploring some of this
stuff in greater depth is definitely on my list, so hang in there, and
if there&#39;s something you particularly want to see, &lt;span class=&quot;createlink&quot;&gt;&lt;a href=&quot;http://tychoish.com/ikiwiki.cgi?page=discourse&amp;amp;from=rhizome%2Fthe-laptop-riser-that-changed-my-life&amp;amp;do=create&quot; rel=&quot;nofollow&quot;&gt;?&lt;/a&gt;be in touch&lt;/span&gt;.&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>2011 Work/Spacetime Retrospective</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/retrospectives-in-2011-work-spacetime/</guid>
	
	<link>http://tychoish.com/rhizome/retrospectives-in-2011-work-spacetime/</link>
	
	
	<category>/tag/meta</category>
	
	<category>/tag/update</category>
	
	
	<pubDate>Thu, 26 Jan 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-03-29T03:18:48Z</dcterms:modified>
	
	<description>&lt;p&gt;For the most part, I&#39;m quite happy with everything that I was able to
accomplish last year. I&#39;ve moved cities (for the second year in a row)
and last year I changed jobs &lt;em&gt;twice&lt;/em&gt;: in both cases, I think the
current will stick for a while. And I&#39;m working on other projects,
with some impressive speed. Last year wasn&#39;t been great for finishing
things, but I guess there&#39;s room for improvement this year.&lt;/p&gt;

&lt;p&gt;After a fair amount of professional angst I&#39;m finally doing pretty
much exactly what I want to be doing: I&#39;m writing a substantial/total
revision of a software manual for a company developing an open source
database system. I&#39;ll leave you to figure out the details, but it&#39;s
great.&lt;/p&gt;

&lt;p&gt;A couple years ago, I said to myself, that I wanted to be a &quot;real
technical writer,&quot; which is to say, work with engineering teams, write
documentation and tutorials for a single product or group of products,
and operate on a regular release schedule. I&#39;ve done a great deal of
writing for technology companies: from project proposals and
journalism, to tutorials and content for distributors, to white
papers, marketing, and sales materials. Delightfully, I&#39;ve managed to
get there, and in retrospect it&#39;s both somewhat amazing, and
incredibly delightful.&lt;/p&gt;

&lt;p&gt;A while back, I had dinner with a friend who&#39;s been doing the same
thing I do for a long time (we know each other through folk dance and
singing,) and by comparing our experiences it was great to learn that
my experience is quite typical, both in terms of the work I&#39;m doing
and the procedural engineering practice frustrations (e.g. &quot;&lt;em&gt;What do
you mean you changed the interface without telling me?!?!&lt;/em&gt;&quot;)&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;At work we have this thing where we send in an account of what we did
during the day so that other people know what we&#39;re working on, and so
that we can keep our team on the same page. After all, when you&#39;re all
looking at computer screens all day, and in a few different time
zones, it&#39;s easy to loose track of what people are working on.&lt;/p&gt;

&lt;p&gt;At the bottom of these emails, we&#39;re prompted to ask &quot;what are your
blockers and impediments.&quot; Often I say something clever like &quot;Compiler
issue with Spacetime interface or Library.&quot; Or something to that
effect. It feels like a good description of the last year.&lt;/p&gt;

&lt;p&gt;Onward and Upward!&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Aeron Woes</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/aeron-woes/</guid>
	
	<link>http://tychoish.com/rhizome/aeron-woes/</link>
	
	
	<category>/tag/productivity</category>
	
	<category>/tag/technology</category>
	
	
	<pubDate>Tue, 24 Jan 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-01-24T15:38:54Z</dcterms:modified>
	
	<description>&lt;p&gt;I have an Aeron chair at my desk at home. Confession.&lt;/p&gt;

&lt;p&gt;I got it in April when I moved to New York City. The only piece of
furniture that I had that I couldn&#39;t move in my (now former) car was
my desk chair. I found a good deal on an Aeron chair and I
rationalized to myself that the cost of the chair was actually about
the cost of movers. Savings right?&lt;/p&gt;

&lt;p&gt;It also helped, that I was leaving a job where I had an Aeron chair in
my office, and I knew that in the short term I would be working from
home. While my old desk chair was (and is) quite nice, &lt;em&gt;it&#39;s not quite
the same&lt;/em&gt;. Sit in an Aeron chair for a couple of two years, and it&#39;s
hard to go back. I&#39;ve sat in other chairs since then, and it&#39;s never
quite the same.&lt;/p&gt;

&lt;p&gt;Having said that, after a cleaning incident today, I would like to
collect a few gripes about the Aeron chair for your consideration.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The assembly right beneath the chair collects dust and dirt in a
proportion that doesn&#39;t seem quite possible. It&#39;s clearly an
artifact of the mesh, and likely a commentary on the air circulation
of my apartment.&lt;/p&gt;

&lt;p&gt;Regardless, dusting nightmare.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The arms scuff and scratch on desks, if the bottom of the desk isn&#39;t
completely smooth. This isn&#39;t an actual problem: the chair still
works fine and is as comfortable as ever, but it&#39;s a annoying.&lt;/p&gt;

&lt;p&gt;I&#39;ve never looked at the underside of a desk before seriously. With
every other chair I&#39;ve either ordered a variant sans arms, or I&#39;ve
take then arms off as soon as possible.&lt;/p&gt;

&lt;p&gt;The Aeron arms are low enough that they&#39;ve never bothered me, so I
thought &quot;might as well.&quot; But it&#39;s still annoying.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That&#39;s all.&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Documentation Emergence</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/documentation-emergence/</guid>
	
	<link>http://tychoish.com/rhizome/documentation-emergence/</link>
	
	
	<category>/tag/free-software</category>
	
	<category>/tag/open-source</category>
	
	<category>/tag/technical-writing</category>
	
	
	<pubDate>Tue, 17 Jan 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-01-17T20:43:53Z</dcterms:modified>
	
	<description>&lt;p&gt;I stumbled across a link somewhere along the way to a thread about the
&lt;a href=&quot;http://www.pylonsproject.org/&quot;&gt;Pyramid&lt;/a&gt; project&#39;s
&lt;a href=&quot;http://docs.pylonsproject.org/en/latest/index.html&quot;&gt;documentation&lt;/a&gt;
planning process. It&#39;s neat to see a community coming to what I think
is the best possible technical outcome. In the course of this
conversation Iain Duncan, said something that I think is worth
exploring in a bit more depth. The following is directly from the
list, edited only slightly:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I wonder whether some very high level tutorials on getting into
  Pyramid that look at the different ways you can use it would be
  useful? I sympathize with Chris and the other documenters because
  just thinking about this problem is hard: How do you introduce
  someone to Pyramid easily without putting blinders on them for
  Pyramid&#39;s flexibility? I almost feel like there need to 2 new kinds
  of docs:&lt;/p&gt;
  
  &lt;ul&gt;
  &lt;li&gt;&lt;p&gt;easy to follow beginner docs for whatever the most common full
  stack scaffold is turning out to be (no idea what this is!)&lt;/p&gt;&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;some mile high docs on how you can lay out pyramid apps
  differently and why you want to be able to do that. For example,
  I feel like hardly anyone coming to Pyramid from the new docs
  groks why the zca under the hood is so powerful and how you can
  tap into it.&lt;/p&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;Different sets of users have different needs from documentation. I
think my &quot;&lt;a href=&quot;http://tychoish.com/./rhizome/multiaudience-documentation/&quot;&gt;Multi-Audience Documentation&lt;/a&gt;&quot;
post also addresses this issue.&lt;/p&gt;

&lt;p&gt;I don&#39;t think there are good answers and good processes that &lt;em&gt;always&lt;/em&gt;
work for documentation projects. Targeted users and audience changes a
lot depending on the kind of technology at play. The needs of users
(and thus the documentation) varies in response to the technical
complexity and nature every project/product varies. I think, as the
above example demonstrates, there&#39;s additional complexity for software
whose primary users are very technical adept (i.e. systems
administrators) or even software developers themselves.&lt;/p&gt;

&lt;p&gt;The impulse to have &quot;beginner documentation,&quot; and &quot;functional
documentation,&quot; is a very common solution for many products and
reflects two main user needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;to understand how to use something. In other words, &quot;getting
started,&quot; documentation and tutorials.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;to understand how something works. In other words the &quot;real&quot;
documentation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think it&#39;s feasible to do both kinds of documentation within a
single resource, but the struggle then revolves around making sure
that the right kind of users find the content they need. That&#39;s a
problem of &lt;span class=&quot;createlink&quot;&gt;&lt;a href=&quot;http://tychoish.com/ikiwiki.cgi?page=technical-writing%2Fusability&amp;amp;from=rhizome%2Fdocumentation-emergence&amp;amp;do=create&quot; rel=&quot;nofollow&quot;&gt;?&lt;/a&gt;documentation usability&lt;/span&gt; and
structure. But it&#39;s not without challenges, lets think about those in
the &lt;span class=&quot;createlink&quot;&gt;&lt;a href=&quot;http://tychoish.com/ikiwiki.cgi?page=discourse&amp;amp;from=rhizome%2Fdocumentation-emergence&amp;amp;do=create&quot; rel=&quot;nofollow&quot;&gt;?&lt;/a&gt;discussion&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;I also find myself thinking a bit about the differences between
web-based documentation resources and conventional manuals in PDF or
dead-tree editions. (See, &lt;span class=&quot;createlink&quot;&gt;&lt;a href=&quot;http://tychoish.com/ikiwiki.cgi?page=technical-writing%2Fweb-based-documentation&amp;amp;from=rhizome%2Fdocumentation-emergence&amp;amp;do=create&quot; rel=&quot;nofollow&quot;&gt;?&lt;/a&gt;web-based-documentation&lt;/span&gt;
eventually.) I&#39;m not sure how to resolve these challenges, or even
what the right answers are, but I think the questions are very much
open.&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>9 Awesome Git Tricks</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/9-awesome-git-tricks/</guid>
	
	<link>http://tychoish.com/rhizome/9-awesome-git-tricks/</link>
	
	
	<category>/tag/cyborg</category>
	
	<category>/tag/git</category>
	
	<category>/tag/software</category>
	
	
	<pubDate>Fri, 06 Jan 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-01-07T12:47:41Z</dcterms:modified>
	
	<description>&lt;p&gt;I&#39;m sure that most &quot;hacker bloggers&quot; have probably done their own &quot;N
Git Tricks,&quot; post at this point. But &lt;code&gt;git&lt;/code&gt; is one of those programs
that has so much functionality and everyone uses it differently that
there is a never ending supply of fresh posts on this topic. My use of
git changes enough that I could probably write this post annaully and
come up with a different 9 things. That said here&#39;s the best list
right now.&lt;/p&gt;

&lt;h2 id=&quot;seestageddifferences&quot;&gt;See Staged Differences&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;git diff&lt;/code&gt; command shows you the difference between the last
commit and the state of the current working directory. That&#39;s really
useful and you might not use it as much as you should. The &lt;code&gt;--cached&lt;/code&gt;
option shows you &lt;em&gt;just&lt;/em&gt; the differences that you&#39;ve staged.&lt;/p&gt;

&lt;p&gt;This provides a way to preview your own patch, to make sure everything
is in order. Crazy useful. See below for the example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; git diff --cached
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;eliminatemergecommits&quot;&gt;Eliminate Merge Commits&lt;/h2&gt;

&lt;p&gt;In most cases, if two or more people publish commits to a shard
repository, and everyone commits to remote repositories more
frequently then they publish changes, when they &lt;em&gt;pull&lt;/em&gt;, git has to
make &quot;meta commits&quot; that make it possible to view a branching
(i.e. &quot;tree-like&quot;) commit history in a linear form. This is good for
making sure that the tool works, but it&#39;s kind of messy, and you get
histories with these artificial events in them that you really ought
to remove (but no one does.) The &quot;&lt;code&gt;--rebase&lt;/code&gt;&quot; option to &quot;&lt;code&gt;git pull&lt;/code&gt;&quot;
does this automatically and subtally rewrites your own history in such
a way as to remove the need for merge commits. It&#39;s way clever and it
works. Use the following command:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; git pull --rebase
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;There are caveats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You can&#39;t have uncommitted changes in your working copy when you run
this command or else it will refuse to run. Make sure everything&#39;s
committed, or use &quot;&lt;code&gt;git stash&lt;/code&gt;&quot;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sometimes the output isn&#39;t as clear as you&#39;d want it to be,
particularly when things don&#39;t go right. If you &lt;strong&gt;don&#39;t&lt;/strong&gt; feel
comfortable rescuing yourself in a hairy git rebase, you might want
to avoid this one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the merge isn&#39;t clean, there has to be a merge commit anyway I
believe.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;amendthelastcommit&quot;&gt;Amend the Last Commit&lt;/h2&gt;

&lt;p&gt;This is a recent one for me..&lt;/p&gt;

&lt;p&gt;If you commit something, but realized that you forgot to save one
file, use the &quot;&lt;code&gt;--amend&lt;/code&gt;&quot; switch (as below) and you get to add
whatever changes you have staged to the previous commit.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; git commit --amend
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; if you amend a commit that you&#39;ve published, you might have
to do a forced update (i.e. &lt;code&gt;git push -f&lt;/code&gt;) which can mess with the
state of your collaborators and your remote repository.&lt;/p&gt;

&lt;h2 id=&quot;stageallofcurrentstate&quot;&gt;Stage all of Current State&lt;/h2&gt;

&lt;p&gt;I&#39;ve been using a versing of this function for years now as part of my
&lt;a href=&quot;http://tychoish.com/./code/download-mail/&quot;&gt;git-mail&lt;/a&gt; scheme. For some reason in my head,
it&#39;s called &quot;readd.&quot; In any case, the effect of this is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If a file is deleted from the working copy of the repository, remove
it (&lt;code&gt;git rm&lt;/code&gt;) from the next commit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add all changes in the working copy to the next commit.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;
       git-stage-all(){
            if [ &quot;`git ls-files -d | wc -l`&quot; -gt &quot;0&quot; ]; then; git rm --quiet `git ls-files -d`; fi
            git add .
       }
&lt;/pre&gt;

&lt;p&gt;So the truth of the matter is that you probably don&#39;t want to be this
blasé about commits, but it&#39;s a great time saver if you use the
&lt;code&gt;rm&lt;/code&gt;/&lt;code&gt;mv&lt;/code&gt;/&lt;code&gt;cp&lt;/code&gt; commands on a git repo, and want to commit those
changes, or a have a lot of small files that you want to process in
one way and then snapshot the tree with git.&lt;/p&gt;

&lt;h2 id=&quot;editorintegration&quot;&gt;Editor Integration&lt;/h2&gt;

&lt;p&gt;The chances are that your text editor has some kind of git
integration that makes it possible to interact with git without
needing to drop into a shell.&lt;/p&gt;

&lt;p&gt;If you use something other than emacs I leave this as an exercise for
the reader. If you use emacs, get &quot;magit,&quot; possibly from your
distribution&#39;s repository, or from the &lt;a href=&quot;http://philjackson.github.com/magit/&quot;&gt;upstream&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As an aside you probably want to add the following to your &lt;code&gt;.emacs&lt;/code&gt;
somewhere.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(setq magit-save-some-buffers nil)
(add-hook &#39;before-save-hook &#39;delete-trailing-whitespace)
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;customgitcommandaliases&quot;&gt;Custom Git Command Aliases&lt;/h2&gt;

&lt;p&gt;In your user account&#39;s &quot;&lt;code&gt;~/.gitconfig&lt;/code&gt;&quot; file or in a per-repository
&quot;&lt;code&gt;.git/config&lt;/code&gt;&quot; file, it&#39;s possible to define aliases that add bits
of functionality to your git command. This is useful defining
shortcuts, combinations, and for triggering arbitrary
scripts. Consider the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; [alias]
         all-push  = &quot;!git push origin master; git push secondary master&quot;
         secondary = &quot;!git push secondary master&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then from the command line, you can use:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  git secondary
  git all-push
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;gitstash&quot;&gt;Git Stash&lt;/h2&gt;

&lt;p&gt;&quot;&lt;code&gt;git stash&lt;/code&gt;&quot; takes all of the staged changes and stores them away
somewhere. This is useful if you want to break apart a number of
changes into several commits, or have changes that you don&#39;t want to
get rid of (i.e. &quot;&lt;code&gt;git reset&lt;/code&gt;&quot;) but also don&#39;t want to commit. &quot;&lt;code&gt;git
stash&lt;/code&gt;&quot; puts staged changes onto the stash and &quot;&lt;code&gt;git stash pop&lt;/code&gt;&quot;
applies the changes to the current working copy. It operates as a FILO
stack (e.g. &quot;First In, Last Out&quot;) stack in the default operation.&lt;/p&gt;

&lt;p&gt;To be honest, I&#39;m not a git stash power user. For me it&#39;s just a stack
that I put patches on and pull them off later. Apparently it&#39;s
possible to pop things off the stash in any order you like, and I&#39;m
sure I&#39;m missing other subtlety.&lt;/p&gt;

&lt;p&gt;Everyone has room for growth.&lt;/p&gt;

&lt;h2 id=&quot;ignorefiles&quot;&gt;Ignore Files&lt;/h2&gt;

&lt;p&gt;You can add files and directories to a &lt;code&gt;.gitignore&lt;/code&gt; file in the top
level of your repository, and git will automatically ignore these
files. One &quot;ignore pattern&quot; per line, and it&#39;s possible to use
shell-style globing.&lt;/p&gt;

&lt;p&gt;This is great to avoid accidentally committing temporary files, but I
also sometimes put entire sub-directories if I need to nest git
repositories within git-repositories. Technically, you ought to use
git&#39;s submodule support for this, but this is easier. Here&#39;s the list
of temporary files that I use:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; .DS_Store
 *.swp
 *~
 \#*#
 .#*
 \#*
 *fasl
 *aux
 *log
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;hostyourownremotes&quot;&gt;Host Your Own Remotes&lt;/h2&gt;

&lt;p&gt;I&#39;ve only once accidentally said &quot;git&quot; when I meant &quot;github&quot; (or vice
versa) once or twice. With github providing public git-hosting
services and a great compliment of additional tooling, it&#39;s easy
forget how easy it is to host your own git repositories.&lt;/p&gt;

&lt;p&gt;The problem is that, aside from making git dependent on one vendor,
this ignores the &quot;distributed&quot; parts of git and all of the
independence and flexibility that comes with that. If you&#39;re familiar
with how Linux/GNU/Unix works, git hosting is entirely paradigmatic.&lt;/p&gt;

&lt;p&gt;Issue the following commands to create a repository:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; mkdir -p /srv/git/repo.git
 cd /srv/git/repo.git
 git init --bare
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Edit the &lt;code&gt;.git/config&lt;/code&gt; file in your existing repository to include a
remote block that resembles the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; [remote &quot;origin&quot;]
         fetch = +refs/heads/*:refs/remotes/origin/*
         url = [username]@[hostname]:/srv/git/repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you already have a remote named origin, change the occurrence
of the word remote in the above snippet with the name of your
remote. (In multi-remote situations, I prefer to use descriptive
identifier like &quot;public&quot; or machine&#39;s hostnames.)&lt;/p&gt;

&lt;p&gt;Then issue &quot;&lt;code&gt;git push origin master&lt;/code&gt;&quot; on the local machine, and you&#39;re
good. You can us a command in the following form to clone this
repository at any time.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; git clone [username]@[hostname]:/srv/git/repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;p&gt;Does anyone have &lt;a href=&quot;http://tychoish.com/./git-tricks/&quot;&gt;git-tricks&lt;/a&gt; that they&#39;d like to share with the
group?&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>6 Awesome Arch Linux Tricks</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/6-awesome-arch-linux-tricks/</guid>
	
	<link>http://tychoish.com/rhizome/6-awesome-arch-linux-tricks/</link>
	
	
	<category>/tag/linux</category>
	
	<category>/tag/lists</category>
	
	<category>/tag/software</category>
	
	
	<pubDate>Wed, 04 Jan 2012 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-01-06T21:25:37Z</dcterms:modified>
	
	<description>&lt;p&gt;A couple of years ago I wrote &quot;&lt;a href=&quot;http://tychoish.com/./rhizome/why-arch-linux-rocks/&quot;&gt;Why Arch Linux Rocks&lt;/a&gt;&quot; and
&quot;&lt;a href=&quot;http://tychoish.com/./rhizome/getting-the-most-from-arch-linux/&quot;&gt;Getting the most from Arch Linux&lt;/a&gt;.&quot;
I&#39;ve made a number of attempts to get more involved in the Arch
project and community, but mostly I&#39;ve been too busy working and using
Arch to do actual work. Then a few weeks ago when  I needed to do something
minor with my system--I forget what--and I found myself thinking &quot;this Arch
thing is pretty swell, really.&quot;&lt;/p&gt;

&lt;p&gt;This post is a collection of the clever little things that make Arch
great.&lt;/p&gt;

&lt;h2 id=&quot;abs&quot;&gt;abs&lt;/h2&gt;

&lt;p&gt;I&#39;m using &lt;a href=&quot;https://wiki.archlinux.org/index.php/Arch_Build_System&quot;&gt;abs&lt;/a&gt;
as a macro for all of the things about the package build system that I
enjoy.&lt;/p&gt;

&lt;p&gt;Arch packages are easy to build for users: you download a few files
read a bash script in the &lt;code&gt;PKGBUILD&lt;/code&gt; file and run the &lt;code&gt;makepkg&lt;/code&gt;
command. Done. Arch packages are also easy to specify for developers:
just specify a &quot;&lt;code&gt;build()&lt;/code&gt;&quot; function and some variables int eh
&lt;code&gt;PKGBUILD&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Arch may not have as many packages as Debian, but I think it&#39;s clear
that you don&#39;t need comprehensive package coverage when making
packages is trivially easy.&lt;/p&gt;

&lt;p&gt;If you use Arch and you don&#39;t frequent that
&lt;a href=&quot;http://aur.archlinux.org&quot;&gt;AUR&lt;/a&gt;, or if you &lt;em&gt;ever&lt;/em&gt; find yourself doing
&quot;&lt;code&gt;./configure; make; make install&lt;/code&gt;&quot; then you&#39;re wasting your time or
jeopardizing the stability of your server.&lt;/p&gt;

&lt;h2 id=&quot;yaourt&quot;&gt;yaourt&lt;/h2&gt;

&lt;p&gt;The default package management tool for Arch Linux, &lt;code&gt;pacman&lt;/code&gt;, is a
completely sufficient utility. This puts &lt;code&gt;pacman&lt;/code&gt; ahead of a number of
other similar tools, but to be honest I&#39;m not terribly wild about
it. Having said that, I think that &lt;a href=&quot;https://wiki.archlinux.org/index.php/Yaourt&quot;&gt;yaourt&lt;/a&gt;
is a great thing. It provides a wrapper around all of &lt;code&gt;pacman&lt;/code&gt;&#39;s
functionality and adds support for AUR/ABS packages in a completely
idiomatic manner. The reduction in cost of installing this software is
quite welcome.&lt;/p&gt;

&lt;p&gt;It&#39;s not &quot;official&quot; or supported, because it&#39;s theoretically possible
to &lt;em&gt;really&lt;/em&gt; screw up your system with &lt;code&gt;yaourt&lt;/code&gt; &lt;em&gt;but&lt;/em&gt; if you&#39;re
cautious, you should be good.&lt;/p&gt;

&lt;h2 id=&quot;yaourt-g&quot;&gt;yaourt -G&lt;/h2&gt;

&lt;p&gt;The main &lt;code&gt;yaourt&lt;/code&gt; functions that I use regularly are the &quot;-Ss&quot; which
provides a search of the AUR, and the &lt;code&gt;-G&lt;/code&gt; option. &lt;code&gt;-G&lt;/code&gt; just downloads
the tarball with the package specification (e.g. the &lt;code&gt;PKGBUILD&lt;/code&gt; and
associated files) from the AUR and untars the archive into the current
directory.&lt;/p&gt;

&lt;p&gt;With that accomplished, it&#39;s trivial to build and install the package,
but you get to keep a record of the build files for future reference
and possible tweaking. So basically, you this is the way to take away
the tedium of getting packages from the AUR, while giving you more
control and oversight of package installation.&lt;/p&gt;

&lt;h2 id=&quot;rc.conf&quot;&gt;rc.conf&lt;/h2&gt;

&lt;p&gt;If you&#39;ve installed Arch, then you&#39;re already familiar with the
&lt;code&gt;rc.conf&lt;/code&gt; file. In case you didn&#39;t catch how it works, &lt;code&gt;rc.conf&lt;/code&gt; is
bash script that defines certain global configuration values, which in
turn controls certain aspects of the boot process and process
initialization.&lt;/p&gt;

&lt;p&gt;I like that it&#39;s centralized, that you can do all kinds of wild
network configuration in the script, and I like that everything is in
one place.&lt;/p&gt;

&lt;h2 id=&quot;netcfg&quot;&gt;netcfg&lt;/h2&gt;

&lt;p&gt;In point of fact, one of primary reasons I switched to Arch Linux full
time, was because of the network configuration tool, &lt;code&gt;netcfg&lt;/code&gt;. Like
the &lt;code&gt;rc.conf&lt;/code&gt; setup, &lt;code&gt;netcfg&lt;/code&gt; works by having a network configuration
files which define a number of variables which are sourced by
&lt;code&gt;netcfg&lt;/code&gt; when imitating a network connection.&lt;/p&gt;

&lt;p&gt;It&#39;s all in bash, of course, and it works &lt;em&gt;incredibly&lt;/em&gt; well. I like
having network management easy to configure, and setup in a way that
doesn&#39;t require a management daemon.&lt;/p&gt;

&lt;h2 id=&quot;initsystem&quot;&gt;Init System&lt;/h2&gt;

&lt;p&gt;Previous points have touched on this, but the &quot;BSD-style&quot; init system
is perfect. It works quickly, and boot ups are stunningly fast:
even without an SSD I got to a prompt in less than a minute, and
probably not much more than 30 seconds. With an SSD: it&#39;s even better
great. The points that you should know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Daemon control scripts, (i.e. init scripts) are located in
&lt;code&gt;/etc/rc.d&lt;/code&gt;. There&#39;s a pretty useful &quot;library&quot; of shell functions in
&lt;code&gt;/etc/rc.d/function`` and a good template file in&lt;/code&gt;/etc/rc.d/skel`
for use when building your own control scripts. The convention is to
have clear and useful output and easy to understand scripts, and
with the provided material this is pretty easy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In &lt;code&gt;/etc/rc.conf&lt;/code&gt; there&#39;s a &lt;code&gt;DAEMON&lt;/code&gt; variable that holds an
array. Place names, corresponding to the &lt;code&gt;/etc/rc.d&lt;/code&gt; file name, of
daemons in this array to start them at boot time. Daemons are
started synchronously by default (i.e. order of items in this array
matters and the control script must exit before running the next
script.) However, if a daemon&#39;s name is prefixed by an &lt;code&gt;@&lt;/code&gt; sign, the
process is started in the background and the init process moves to
the next item in the array without waiting.&lt;/p&gt;

&lt;p&gt;Start-up dependency issues are yours to address, but using order and
background start-up this is trivial to implement. Background start
ups lead to fast boot times.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
	
	
</item>
<item>
	
	<title>Update Pending</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/update/</guid>
	
	<link>http://tychoish.com/rhizome/update/</link>
	
	
	<category>/tag/progress-report</category>
	
	<category>/tag/update</category>
	
	
	<pubDate>Tue, 27 Dec 2011 00:00:00 -0500</pubDate>
	<dcterms:modified>2012-01-16T01:34:15Z</dcterms:modified>
	
	<description>&lt;p&gt;It&#39;s been a while since I&#39;ve written one of these &quot;clip posts,&quot; but
there&#39;s no time like the present to get started with that. I hope
everyone out there in internet-land is having a good end of the
year. I&#39;ll try and get a retrospective/new years out in the next few
days, and avoid belaboring the point here.&lt;/p&gt;

&lt;p&gt;As I said &lt;a href=&quot;http://tychoish.com/./rhizome/longer-forms/&quot;&gt;last friday&lt;/a&gt; it&#39;s my intent to focus
here on shorter/quicker thoughts, and focus my free writing/project
time for work on longer projects (fiction, non-fiction, perhaps some
programming.) So far so good.&lt;/p&gt;

&lt;h2 id=&quot;recentpostsaroundhere&quot;&gt;Recent Posts Around Here&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/erstwhile-programmer/&quot;&gt;erstwhile-programmer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/ikiwiki-tasklist-update/&quot;&gt;ikiwiki-tasklist-update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/representation-and-race-futurism/&quot;&gt;representation-and-race-futurism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/the-future-of-file-organization-and-security/&quot;&gt;the-future-of-file-organization-and-security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/multiaudience-documentation/&quot;&gt;multiaudience-documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./knitting/knitting-in-three-dimensions/&quot;&gt;knitting-in-three-dimensions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/intellectual-audience/&quot;&gt;intellectual-audience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/minimalism-versus-simplicity/&quot;&gt;minimalism-versus-simplicity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/back-to-basics-tasklist-and-organization/&quot;&gt;back-to-basics-tasklist-and-organization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/cyberpunk-sunset/&quot;&gt;cyberpunk-sunset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/writing-software-for-android-and-tablets/&quot;&gt;writing-software-for-android-and-tablets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/xen-and-kvm-failing-differently-together/&quot;&gt;xen-and-kvm-failing-differently-together&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/technical-writing-fiction/&quot;&gt;technical-writing-fiction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/whiteness-and-diversity/&quot;&gt;whiteness-and-diversity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tychoish.com/./rhizome/longer-forms/&quot;&gt;longer-forms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;othercoolthingsontheinternet&quot;&gt;Other Cool Things on the Internet&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.nuxeo.com/cmckinnon/2010/04/sales-cycle-theatre-time-to-call-a-charade-a-charade.html&quot;&gt;Sales Cycle Theater&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://swizec.com/blog/why-programmers-work-at-night/swizec/3198&quot;&gt;Why Programmers Work at Night&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
	
	
</item>
<item>
	
	<title>Longer Forms</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/longer-forms/</guid>
	
	<link>http://tychoish.com/rhizome/longer-forms/</link>
	
	
	<category>/tag/blog</category>
	
	<category>/tag/technical-writing</category>
	
	
	<pubDate>Fri, 23 Dec 2011 00:00:00 -0500</pubDate>
	<dcterms:modified>2011-12-23T15:23:12Z</dcterms:modified>
	
	<description>&lt;p&gt;A friend asked me a question (several weeks ago by publication) on a
technical topic and I spent most of the next few days writing a
missive on database administration strategy. That seemed
like a normal response. I was delighted to find that: I liked
the voice, I enjoyed writing the longer document, and there are a
dozen or so other related topics that I wanted to explore. So,
apparently, I&#39;m writing a book. This is exactly what I need: more
projects. &lt;em&gt;Not.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But it&#39;s a good thing: I find the writing inspiring and
invigorating. I have a perspective and collection of knowledge that
hasn&#39;t been collected and presented in a single place. I like long
form writing. The larger piece might also be a good contribution to my
portfolio (such as it is.)&lt;/p&gt;

&lt;p&gt;I think this kind of writing suits my attention span.&lt;/p&gt;

&lt;p&gt;This has left me without a lot of spare time for blogging, and (as I&#39;m
prone to do every so often,) rethinking the future of my efforts on
tychoish.com and as a blogger. This is boring for all of you, but I&#39;ll
give some higher level stuff here and we can follow up on the
&lt;span class=&quot;createlink&quot;&gt;&lt;a href=&quot;http://tychoish.com/ikiwiki.cgi?page=discourse&amp;amp;from=rhizome%2Flonger-forms&amp;amp;do=create&quot; rel=&quot;nofollow&quot;&gt;?&lt;/a&gt;discourse&lt;/span&gt; page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Blogging is fun, and even though I&#39;ve not been posting regularly,
I&#39;m always writing blog posts. Sometimes I find myself writing posts
in emails to friends, but I&#39;m never really going to stop writing
blog posts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The general explosion of blog publishing that we saw a few years ago
has declined. Audience fragmentation happened, readership got
entrenched. I feel like I weathered the storm pretty well and I&#39;m
really happy with the site and readers I have, but I&#39;m also pretty
confident that blogging isn&#39;t going to be the means by which I
&quot;level up.&quot;&lt;a id=&quot;fnref:levelup&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;eBooks have finally happened. For the last decade most people have
been saying that ebooks are great for reference material (given
search-ability,) and for providing an introduction to a text that
people will eventually buy in a paper edition. That may be true, but
I think it&#39;s changing rapidly, and with kindles and tablets and
smart-phones, I think eBooks have effectively won, such as it is.&lt;/p&gt;

&lt;p&gt;In another ten years, perhaps, we&#39;ll just call them books.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I&#39;m pretty clear that keeping a blog, and perhaps most of the
writing I do in my spare time is &lt;strong&gt;for my own enjoyment and
betterment&lt;/strong&gt; and helps to develop a personal portfolio and account
of my work. I have no (real) interest in using my writing on
tychoish.com or any other side that I maintain, as a way of
supporting myself to any greater or lesser extent.&lt;/p&gt;

&lt;p&gt;I want to be in the business of writing things and working with
technology and ideas and people, not the business of
publishing. While the line is not always clear between &quot;writing
projects that you publish yourself online,&quot; and &quot;new media
publisher,&quot; I want to stay away from the later as much as possible.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I think this means that most of my &quot;tychoish,&quot; writing time will go
to writing this book project, and to fiction, and once my blog post
backlog is fully depleted (heh,) most of my postings will either be
announcements/&lt;span class=&quot;createlink&quot;&gt;&lt;a href=&quot;http://tychoish.com/ikiwiki.cgi?page=tag%2Fprogress-reports&amp;amp;from=rhizome%2Flonger-forms&amp;amp;do=create&quot; rel=&quot;nofollow&quot;&gt;?&lt;/a&gt;progress-reports&lt;/span&gt; or a bunch of shorter more
off-the-cuff notes.&lt;/p&gt;

&lt;p&gt;Here&#39;s hoping at least.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id=&quot;fn:levelup&quot;&gt;&lt;p&gt;I can&#39;t really believe that I just used &quot;level up&quot; in this context.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</description>
	
	
</item>
<item>
	
	<title>Whiteness and Diversity</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/whiteness-and-diversity/</guid>
	
	<link>http://tychoish.com/rhizome/whiteness-and-diversity/</link>
	
	
	<category>/tag/literature</category>
	
	<category>/tag/philosophy</category>
	
	<category>/tag/politics</category>
	
	
	<pubDate>Thu, 22 Dec 2011 00:00:00 -0500</pubDate>
	<dcterms:modified>2011-12-22T18:59:11Z</dcterms:modified>
	
	<description>&lt;p&gt;This post is a follow up to my earlier
&lt;a href=&quot;http://tychoish.com/./rhizome/representation-and-race-futurism/&quot;&gt;post on diversity and representation&lt;/a&gt;. In
short, while I think it&#39;s great that we&#39;re beginning to talk and write
about race and representation in our fiction and field, I think
we&lt;a id=&quot;fnref:we&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt; need to expand our analysis of whiteness.&lt;/p&gt;

&lt;h2 id=&quot;whitenessinsciencefiction&quot;&gt;Whiteness in Science Fiction&lt;/h2&gt;

&lt;p&gt;I&#39;m still working on figuring out what this means, and I&#39;m sorry that
I haven&#39;t developed my thinking sufficiently to be more clear on
this. In light of that here are a collection of my thoughts on
representation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Whiteness is multiple and I think it&#39;s possible (and important) to
&lt;em&gt;depict whiteness and white characters critically and without
recapitulating normalization&lt;/em&gt;. At the same time, it&#39;s important to
avoid falling victim to a lot of the normalization to which
uncritical representations of racial diversity often fall pray.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The theory around race and representation must deal with issues
around assimilation. More diversity is useful, but to move forward
on issues of representation, the field needs to better understand
the process of assimilation. &lt;em&gt;I want to see stories that help us
unpack assimilation.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Whiteness is complex and a major problem with stories that &quot;don&#39;t do
race well,&quot; is not just that the characters aren&#39;t explicitly of
color, but that whiteness isn&#39;t portrayed very well. This is part of
the struggle of privilege, but &lt;em&gt;not only does science fiction need
to be better about diversity and representation of non-white
characters, but we the thinking on whiteness needs to continue to
evolve apace.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;diversityandquotas&quot;&gt;Diversity and Quotas&lt;/h2&gt;

&lt;p&gt;Discussions about diversity and representation in fiction often lead
the under-informed to ask &quot;So what, do you want to impose some sort of
quota system? Does that mean diversity is more important than
quality?&quot;&lt;/p&gt;

&lt;p&gt;The answer is almost always no.&lt;/p&gt;

&lt;p&gt;I&#39;d also like to point out that this is one of those cases where
whiteness and systematic bias conspire to define &quot;quality,&quot; in
unuseful ways. But this is another argument for another time.&lt;/p&gt;

&lt;p&gt;The canonical answer is: there&#39;s a great deal of amazing work written
by people of color and a lot of great fiction that incorporates and
addresses the experiences of people of color. This is great, and if
we&#39;ve learned anything in the last couple of years, it&#39;s that if you
look for this work it&#39;s there. The real challenge revolves around
cultivating that work so that there&#39;s &lt;em&gt;more&lt;/em&gt; of it, and promoting&lt;a id=&quot;fnref:marketing&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt; that
work so that there&#39;s a large audience.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;createlink&quot;&gt;&lt;a href=&quot;http://tychoish.com/ikiwiki.cgi?page=discourse&amp;amp;from=rhizome%2Fwhiteness-and-diversity&amp;amp;do=create&quot; rel=&quot;nofollow&quot;&gt;?&lt;/a&gt;Comments? Suggestions?&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id=&quot;fn:we&quot;&gt;&lt;p&gt;The science fiction writing/reading/editing community.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li id=&quot;fn:marketing&quot;&gt;&lt;p&gt;Promoting and marketing literature is by no means a
solved problem under any conditions.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</description>
	
	
</item>
<item>
	
	<title>Technical Writing Fiction</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/technical-writing-fiction/</guid>
	
	<link>http://tychoish.com/rhizome/technical-writing-fiction/</link>
	
	
	<category>/tag/science-fiction</category>
	
	<category>/tag/technical-writing</category>
	
	
	<pubDate>Wed, 21 Dec 2011 00:00:00 -0500</pubDate>
	<dcterms:modified>2011-12-21T15:56:10Z</dcterms:modified>
	
	<description>&lt;p&gt;On &lt;a href=&quot;http://blog.outeralliance.org/archives/853&quot;&gt;Outer Alliance Podcast #8&lt;/a&gt;,
&lt;a href=&quot;http://www.bentopress.com/sf/index.html&quot;&gt;David Levine&lt;/a&gt; talked about
having worked as a technical writer for some 15 years and then said
something to the effect of &quot;It&#39;s a point of great personal pride that
I&#39;ve never put a bulleted list in a piece of fiction.&quot;&lt;/p&gt;

&lt;p&gt;I laughed out loud. Perhaps frightening a woman walking her dog
nearby.&lt;/p&gt;

&lt;p&gt;In most ways, the kind of writing that I do for work, API references,
tutorials, administration overviews, best-practice descriptions, is
very different from the kinds of things I write away from work, or at
least I like to think so.&lt;/p&gt;

&lt;p&gt;The truth is that I&#39;ve learned a bunch about writing and about
communicating in general from writing documentation. While my
&quot;professional background,&quot; doesn&#39;t include formal technological
training, I definitely &quot;broke in&quot; because I was familiar with
technology and could write, rather than being a particularly skilled
or trained writer. Any more (just 2.5 years on,) I think the inverse
is &lt;em&gt;more true&lt;/em&gt;, but that&#39;s conjecture.&lt;/p&gt;

&lt;p&gt;Technical writing has definitely shaped the evolution of my taste: a
couple years ago, I found myself most drawn to complex tightly
constructed prose in fiction. These days I mostly go for sparse clear
concise prose that isn&#39;t particularly ornamented. Perhaps it&#39;s only
really possible to tune the internal editor for one kind of style at a
time.&lt;/p&gt;

&lt;p&gt;Having said that, I will confess to feeling--and resisting--the urge
to put a bulleted list or some other structured convention of software
manuals in fiction.&lt;/p&gt;

&lt;p&gt;It&#39;s the little things, really.&lt;/p&gt;
</description>
	
	
</item>
<item>
	
	<title>Xen and KVM: Failing Differently Together</title>
	<dcterms:creator>tycho garen</dcterms:creator>
	
	
	  <guid>http://tychoish.com/rhizome/xen-and-kvm-failing-differently-together/</guid>
	
	<link>http://tychoish.com/rhizome/xen-and-kvm-failing-differently-together/</link>
	
	
	<category>/tag/infrastructure</category>
	
	<category>/tag/linux</category>
	
	<category>/tag/open-source</category>
	
	<category>/tag/software</category>
	
	<category>/tag/technology</category>
	
	
	<pubDate>Tue, 20 Dec 2011 00:00:00 -0500</pubDate>
	<dcterms:modified>2011-12-20T15:44:15Z</dcterms:modified>
	
	<description>&lt;p&gt;When I bought what is now my primary laptop, I had intended to use the
extra flexibility to learn the prevailing (industrial-grade)
virtualization technology. While that project would have been edifying
on its own, I also hoped to use the extra flexibility to some more consistent testing
and development work.&lt;/p&gt;

&lt;p&gt;This project spurned &lt;a href=&quot;http://tychoish.com/./xen-laptop/&quot;&gt;xen-laptop&lt;/a&gt;, but the truth is that Xen is
incredibly difficult to get working, and eventually the &quot;new laptop&quot;
just became the &quot;every day laptop,&quot; and I let go of the laptop Xen
project. In fact, until very recently I&#39;d pretty much given up on
doing virtualization things entirely, but for various reasons beyond
the scope of this post I&#39;ve been inspired to begin tinkering with
virtualization solutions again.&lt;/p&gt;

&lt;p&gt;As a matter of course, I found myself trying KVM in a serious way for
the first time. This experience both generated a new list of
annoyances and reminded me about all the things I didn&#39;t like about
Xen. I&#39;ve collected these annoyances and thoughts into the following
post. I hope that these thoughts will be helpful for people thinking
about virtualization pragmatically, and also help identify some of the
larger to pain points with the current solution.&lt;/p&gt;

&lt;h2 id=&quot;xenhardships:itsallaboutthekernel&quot;&gt;Xen Hardships: It&#39;s all about the Kernel&lt;/h2&gt;

&lt;p&gt;Xen is, without a doubt, the more elegant solution from a design
perspective and it has a history of being the more robust and usable
tool. Performance is great, Xen hosts can have up-times in excess of a
year or two.&lt;/p&gt;

&lt;p&gt;The problem is that dom0 support has, for the past 2-3 years, been in
shambles, and the situation isn&#39;t improving very rapidly. For years,
the only way to run a Xen box was to use an ancient kernel with a set
of patches that was frightening, or a more recent kernel with ancient
patches forward ported. Or you could use cutting edge kernel builds,
with reasonably unstable Xen support.&lt;/p&gt;

&lt;p&gt;A mess in other words.&lt;/p&gt;

&lt;p&gt;Now that Debian Squeeze (6.0) has a pv-ops dom0 kernel, things might
look up, but other than that kernel (which I&#39;ve not had any success
with, but that may be me,) basically the only way to run Xen is to pay
Citrix&lt;a id=&quot;fnref:xensource&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt; or build your own kernel from scratch, again
results will be mixed (particularly given the non-existent
documentation,) maintenance costs are high, and a lot of energy will
be duplicated.&lt;/p&gt;

&lt;p&gt;What to do? Write documentation and work with the distributions so
that if someone says &quot;I want to try using Xen,&quot; they&#39;ll be able to
get something that works.&lt;/p&gt;

&lt;h2 id=&quot;kvmstruggles:itsallabouttheuserexperience&quot;&gt;KVM Struggles: It&#39;s all about the User Experience&lt;/h2&gt;

&lt;p&gt;The great thing about KVM is that it &lt;em&gt;just works&lt;/em&gt;. &quot;&lt;code&gt;sudo modprobe kvm
kvm-intel&lt;/code&gt;&quot; is basically the only thing between most people and a KVM
host. No reboot required. To be completely frank, the prospect of
doing industrial-scale virtualization on-top of nothing but the Linux
kernel and with a wild module in it, gives me the willies is inelegant
as hell. For now, it&#39;s pretty much the best we have.&lt;/p&gt;

&lt;p&gt;The problem is that it really only &lt;em&gt;half works&lt;/em&gt;, which is to say that
while you can have hypervisor functionality and a booted virtual
machine, with a few commands, it&#39;s not incredibly functional in
practical systems. There aren&#39;t really good management tools, and
getting even basic networking configured off the bat, and &lt;code&gt;qemu&lt;/code&gt; as
the &quot;front end&quot; for KVM leaves me writhing in anger and frustration.&lt;a id=&quot;fnref:libvirt&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Xen is also subject to these concerns, particularly around
netowrking. At the same time, Xen&#39;s basic administrative tools make
more sense, and domU&#39;s can be configured outside of interminable
non-paradigmatic command line switches.&lt;/p&gt;

&lt;p&gt;The core of this problem is that KVM isn&#39;t very Unix-like, and it&#39;s a
problem that is rooted in it&#39;s core and pervades the entire tool, and
it&#39;s probably rooted in the history of its development.&lt;/p&gt;

&lt;p&gt;What to do? First, KVM does a wretched job of anticipating actual
real-world use cases, and it needs to do better at that. For instances
it sets up networking in a way that&#39;s pretty much only good for
software testing and GUI interfaces but sticking the Kernel on the
inside of the VM makes it horrible for Kernel testing. Sort out the
use cases, and there ought to be associated tooling that makes common
networking configurations easy.&lt;/p&gt;

&lt;p&gt;Second, KVM needs to at least pretend to be Unix-like. I want config
files with sane configurations, and I want otherwise mountable disk
images that can be easily mounted by the host.&lt;/p&gt;

&lt;p&gt;Easy right?&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id=&quot;fn:xensource&quot;&gt;&lt;p&gt;The commercial vendor behind Xen, under whose stewardship
the project seems to have mostly stalled. And I suspect that the
commercial distribution is Red Hat 5-based, which is pretty
dead-end. Citrix doesn&#39;t seem to be very keen on using &quot;open source,&quot;
to generate a sales channel, and also seems somewhat hesitant to put
energy into making Xen easier to run for existing Linux/Unix users.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li id=&quot;fn:libvirt&quot;&gt;&lt;p&gt;The libvirtd and Virt Manager works pretty well, though
it&#39;s not particularly flexible, and it&#39;s not a simple command line
interface and a configuration file system.&lt;a class=&quot;reversefootnote&quot;&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</description>
	
	
</item>

</channel>
</rss>

