<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>stevengharms.com &#187; Technology and Computers</title>
	<atom:link href="http://stevengharms.com/category/technology-and-computers/feed" rel="self" type="application/rss+xml" />
	<link>http://stevengharms.com</link>
	<description>My Blog</description>
	<lastBuildDate>Sat, 21 Apr 2012 19:06:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Use ack instead of grep to parse text files</title>
		<link>http://stevengharms.com/use-ack-instead-of-grep-to-parse-text-files</link>
		<comments>http://stevengharms.com/use-ack-instead-of-grep-to-parse-text-files#comments</comments>
		<pubDate>Tue, 10 Apr 2012 08:59:14 +0000</pubDate>
		<dc:creator>steven</dc:creator>
				<category><![CDATA[Technology and Computers]]></category>

		<guid isPermaLink="false">http://stevengharms.com/?p=2733</guid>
		<description><![CDATA[You know this guy? grep needle haystack &#124;grep special_needle or his inverted cousin: grep needle haystack &#124;grep -v unspecial_needle These are common staples of searching through text files. You should stop using them. Now. You can do much better by writing more consice regular expressions and using ack or one of its relatives (ack-grep, or [...]]]></description>
			<content:encoded><![CDATA[<p>You know this guy?</p>

<p><code>grep needle haystack |grep special_needle</code></p>

<p>or his inverted cousin:</p>

<p><code>grep needle haystack |grep -v unspecial_needle</code></p>

<p>These are common staples of searching through text files.</p>

<p>You should stop using them.  Now.</p>

<p>You can do much better by writing more consice regular expressions
and using <code>ack</code> or one of its relatives
(<a href="http://betterthangrep.com/">ack-grep</a>, or <code>rak</code>).</p>

<p>The primary virtue of these commands is that
they use the <a href="http://perldoc.perl.org/perlre.html">Perl regular expression
engine</a>.  Most programmers with experience in any of the major scripting languages will find this more comfortable than grep&#8217;s use of the GNU regex syntax.</p>

<p>I recently encountered a need to search through many files based on a complex regular expression that required lookahead and lookbehind asserions.  I have <strong>no idea</strong> how that would work in GNU regex land where, honestly, I <em>still</em> have a hard time getting simple capture and alternation. After learning look around syntax, I was glad to know that ack could directly implement it.</p>

<p>Given <code>haystack</code>, a text file:</p>

<pre><code>tin needle
silver needle
lead needle
ocelot
monkey
</code></pre>

<p>Find the needles (this is where most grep users get to and never leave):</p>

<pre><code>$ ack needle haystack
tin needle
silver needle
lead needle
</code></pre>

<p>Look at that  one character shorter than grep and just as easy.  Now if you want the <em>silver</em> needle, the unsophisticated, greppy way of doing this
would be:</p>

<pre><code>$ grep needle haystack|grep silver
silver needle
</code></pre>

<p>This sucks.  Try:</p>

<pre><code>$ ack '(?=silver).*needle' haystack
silver needle
</code></pre>

<p>Or, &#8220;all things in the haystack that are needles, but not the lead one&#8221;</p>

<pre><code>$ ack '^(?!^lead).*needle.*$' haystack
tin needle
silver needle
</code></pre>

<p>I know there&#8217;s a lot more to the power of the <a href="http://www.regular-expressions.info/lookaround.html">lookaround
assertion</a>, but if I can
re-train myself out of this habit I think it&#8217;ll be a big win.  Granted, for
smaller searches the &#8220;double-grep&#8221; method is probably fine, but any time you&#8217;re
doing a recursive descent and are looking for <em>true</em> needles in the haystack,
ack&#8217;s is the superior approach.</p>

<p>The case that I was working on was where I needed to search all my Rails models
for all named scopes that <strong>did not use</strong> the <code>lambda</code> form and I wanted five
lines of context around the matches so that I could be understand the behavior.</p>

<p><code>ack -C5 'scope(?!.*lambda)' app/models</code></p>

<p>That&#8217;s gold worth searching for.</p>
]]></content:encoded>
			<wfw:commentRss>http://stevengharms.com/use-ack-instead-of-grep-to-parse-text-files/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Rasperry Pi</title>
		<link>http://stevengharms.com/the-rasperry-pi</link>
		<comments>http://stevengharms.com/the-rasperry-pi#comments</comments>
		<pubDate>Fri, 06 Apr 2012 09:36:30 +0000</pubDate>
		<dc:creator>steven</dc:creator>
				<category><![CDATA[Technology and Computers]]></category>

		<guid isPermaLink="false">http://stevengharms.com/?p=2731</guid>
		<description><![CDATA[I heard about this at Golden Gate Ruby Conf this past year from Ron Evans (@deadprogram). It&#8217;s a low-power, low cost computer that can be used for lightweight media centers or &#8220;learn to program&#8221; desktops. I love the idea of these little machines lurking about hte house doing all sorts of automated stuff for us [...]]]></description>
			<content:encoded><![CDATA[<p>I heard about this at <a href="http://gogaruco.com/">Golden Gate Ruby Conf</a> this past
year from <a href="http://twitter.com/deadprogram">Ron Evans (@deadprogram)</a>.  It&#8217;s a
low-power, low cost computer that can be used for lightweight media centers or
&#8220;learn to program&#8221; desktops.</p>

<iframe width="560" height="315" src="http://www.youtube.com/embed/6BbufUp_HNs"
frameborder="0" allowfullscreen></iframe>

<p>I love the idea of these little machines lurking about hte house doing all
sorts of automated stuff for us behind our back.  While it&#8217;s clearly underpowered
to do advanced photo editing, most of our requirements for household computing (yet)
are fairly low power with frequent gap time.</p>
]]></content:encoded>
			<wfw:commentRss>http://stevengharms.com/the-rasperry-pi/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use Vim&#8217;s Sessions to Defray Context-Switching Costs</title>
		<link>http://stevengharms.com/use-vims-sessions-to-defray-context-switching-costs</link>
		<comments>http://stevengharms.com/use-vims-sessions-to-defray-context-switching-costs#comments</comments>
		<pubDate>Mon, 26 Mar 2012 08:08:34 +0000</pubDate>
		<dc:creator>steven</dc:creator>
				<category><![CDATA[Technology and Computers]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://stevengharms.com/?p=2631</guid>
		<description><![CDATA[Introduction The Vim editor has a built-in function for preserving your editor state &#8212; which files you had open, which tabs they were in, etc. &#8212; called &#8220;Sessions.&#8221; In my experience, few Vim users, even experienced / advanced users, take advantage of this feature and that is a shame. Sessions allow you to get you [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>

<p>The Vim editor has a built-in function for preserving your editor state &mdash;
which files you had open, which tabs they were in, etc. &mdash; called
&#8220;<code>Sessions</code>.&#8221;  In my experience, few Vim users, even experienced / advanced
users, take advantage of this feature and that is a shame.  <code>Sessions</code> allow you
to get you <em>back</em> into the working context of a given problem <strong>immediately</strong> .
If you&#8217;ve avoided a needed reboot for software update or wished you could save
the context of your editing as related to a specific problem, you should take
the time to learn a little bit about <code>sessions.</code></p>

<h2>Curating an Editor State</h2>

<p>As developers, we generally start with a single file (&#8220;QA says there&#8217;s a bug in
this view&#8221;) and then realize it has a relationship with another file
(&#8220;Hm, but I need this as the data source / dependency / etc.&#8221;).  Over time we
come to recognize that there are several files whose relationship and
interaction creates a &#8220;feature&#8221; we want to work on.  I call this collection of
files that represents the means to the solution the &#8220;curated list.&#8221;  We groom
our curated list into a user interface that helps us address the problem:</p>

<p><a target="_new"
href="http://stevengharms.com/wp-content/uploads/2012/04/curated-list.png"><img
class="centered"
src="http://stevengharms.com/wp-content/uploads/2012/04/curated-list.png"
alt="#"></a></p>

<p><strong>The curated list for this blog post</strong></p>

<p>Finding yourself needing to reboot, where you would wipe away this solution
context like some <a href="http://en.wikipedia.org/wiki/Sand_mandala">Tibetan sand
mandala</a> might put you into a panic
routine:</p>

<blockquote>
  <p>&#8220;Which files do I have open?  Which directories am I in, which server processes
  are running?&#8221;</p>
</blockquote>

<p><a href="http://theoatmeal.com/">The Oatmeal</a> comic hits home:</p>

<p><a target="_new"
href="http://stevengharms.com/wp-content/uploads/2012/04/oatmeal-updates-dailylie.jpg"><img
class="centered"
src="http://stevengharms.com/wp-content/uploads/2012/04/oatmeal-updates-dailylie.jpg"
alt="#"></a></p>

<p>To save your state all you need to do is run <code>:mksession</code>.  By default this will
create a file called <code>Session.vim</code> in your working directory.  Its contents are
a full list of Vimscript commands that will be issued when you launch Vim with a
reference to that file with <code>vim -S session_file_name</code> at a later date.  Reading
this file is also a great way to learn some powerful Vimscript commands.</p>

<p><a target="_new"
href="http://stevengharms.com/wp-content/uploads/2012/04/session-file.png"><img
class="centered"
src="http://stevengharms.com/wp-content/uploads/2012/04/session-file.png"
alt="#"></a></p>

<p><em>The commands it requires to re-build your Vim session as it is right now</em></p>

<p>Standard Vim file-write semantics still apply  To overwrite the old session it&#8217;s
<code>:mksession!</code> and <code>:mksession session-from-after-lunch.vim</code>  It is this latter
usage which allows you to create &#8216;topic based sessions.&#8217;</p>

<h2>Topic-Based Vim Sessions</h2>

<p>The average Vim session is very small (kilobytes) and they can be made cheaply
(less than a second) therefore, as I work on problems I&#8217;ve taken to creating
multiple Vim sessions so that I can address a feature <em>and come back to it</em>
painlessly.</p>

<p>Presently I&#8217;m experimenting on creating sessions based on bug-tracker stories.
The session files (ending in <code>.vim</code>) are included in my global <code>.gitignore</code>
file.  Given that a certain feature may be revisited at any point, it seems a
good idea to keep each in its own session so that I can pick it back up again
for subsequent bugs / improvements.  <strong>AND</strong> should a refactor add a new file or
drop one, all that&#8217;s required is a simple <code>mkession!</code> to write a new session.</p>

<h2>Gotchas</h2>

<p>By default <code>mksession</code> saves <code>blank, buffers, curdir, folds, help, options,
tabpages, winsize</code>.  Depending on how heavily customized your Vim configuration
is, you may find these session commands clashing with your default options.  For
a heavily customized Vim installation (like <a href="https://github.com/carlhuda/janus">Janus
Vim</a>) this can create some erratic results.
To prevent any clashes, I have modified the default <code>sessionoptions</code>
configuration in my <code>.vimrc</code> to be the following:</p>

<p>&#8221; Sessions in Janus are overwrought
set sessionoptions=blank,buffers,curdir,folds,help,tabpages,winsize</p>

<h2>Reference</h2>

<p>As <code>sessionoptions</code> seems to suggest, there are a wide variety of things that
can be preserved.  <code>:help sessionoptions</code> and <code>:help mksession</code> in the on-line
Vim help guide should help you tweak your configuration to perfection.</p>

<p>I can even seen an argument for adding a <code>:mksession!</code> as an autocommand, so
that your session is written on every file-write or buffer-change event.  I
don&#8217;t (yet) see a need for that, but it&#8217;s great to know that Vim has that
capability.</p>

<h2>Conclusion</h2>

<p>With OSX Lion now preserving open application state, browswers now allowing you
to save tab state, and Vim now allowing you to preserve buffer state, you can
live in less fear of a power outage, an accidental reboot, or a <a href="https://discussions.apple.com/thread/2650623?start=0&amp;tstart=0">gray screen of
death</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://stevengharms.com/use-vims-sessions-to-defray-context-switching-costs/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using mutt with MacVim as external editor</title>
		<link>http://stevengharms.com/using-mutt-with-macvim-as-external-editor</link>
		<comments>http://stevengharms.com/using-mutt-with-macvim-as-external-editor#comments</comments>
		<pubDate>Wed, 14 Mar 2012 14:05:51 +0000</pubDate>
		<dc:creator>steven</dc:creator>
				<category><![CDATA[Technology and Computers]]></category>

		<guid isPermaLink="false">http://stevengharms.com/?p=2585</guid>
		<description><![CDATA[I love usig the mutt mail reader to turn through my mail. I recently set it up to make use of my MacVim installation by adding the following configuration to the .muttrc. set editor="mvim --remote-tab-wait-silent " This is pretty neat. When I go to reply or compose, I&#8217;m thrown into a new tab in MacVim [...]]]></description>
			<content:encoded><![CDATA[<p>I love usig the <a href="http://www.mutt.org/">mutt mail reader</a> to turn through my
mail. I recently set it up to make use of my MacVim installation by adding the
following configuration to the <code>.muttrc</code>.</p>

<p><code>set editor="mvim --remote-tab-wait-silent "</code></p>

<p>This is pretty neat.  When I go to reply or compose, I&#8217;m thrown into a new tab
in MacVim and I can compose / reply there.  After hitting <code>ZZ</code> or <code>:wq!</code>, mutt
properly handled the signal, but didn&#8217;t change OSX&#8217;s focus <em>back</em> to the
terminal window where Mutt was running.  By changing the <code>editor</code> to the
following configuration:</p>

<p><code>set editor="osascript $HOME/bin/mutt_edit.sh"</code></p>

<p>I was able to tell Mutt to send my temp file (for the edit) to <code>osascript</code>, a
utility that runs Applscript.  In <code>mutt_edit.sh</code> I provided a bit of a wrapper
around the <code>mvim</code> command such that it told OSX to re-activate my terminal
session after the editing activity finished.  Here&#8217;s the code:</p>

<pre><code>on run argv
  tell application "Finder"
    do shell script "mvim --remote-tab-wait-silent " &amp; item 1 of argv
  end tell
  tell application "iTerm (1.0.0.20111020)"
    activate
  end tell
end run
</code></pre>

<p>And that&#8217;s all it took.</p>
]]></content:encoded>
			<wfw:commentRss>http://stevengharms.com/using-mutt-with-macvim-as-external-editor/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technical Outreach Workshops:  Needlessly Frightening at the Beginning</title>
		<link>http://stevengharms.com/technical-outreach-workshops-needlessly-frightening-at-the-beginning</link>
		<comments>http://stevengharms.com/technical-outreach-workshops-needlessly-frightening-at-the-beginning#comments</comments>
		<pubDate>Mon, 12 Mar 2012 12:52:41 +0000</pubDate>
		<dc:creator>steven</dc:creator>
				<category><![CDATA[Technology and Computers]]></category>

		<guid isPermaLink="false">http://stevengharms.com/?p=2557</guid>
		<description><![CDATA[One of the organizations that I&#8217;m most proud of helping out is Railsbridge. It aims to increase the diversity within open source software development, particularly women. Twice now I have worked with wonderful and amazing people in these sessions. Typical scene of getting laptops set up (source) In these activities I have encountered a powerful [...]]]></description>
			<content:encoded><![CDATA[<p>One of the organizations that I&#8217;m most proud of helping out is
<a href="http://workshops.railsbridge.org/">Railsbridge</a>.  It aims to increase the
diversity within open source software development, particularly women.  Twice
now I have worked with wonderful and amazing people in these sessions.</p>

<p><a
href="http://stevengharms.com/wp-content/uploads/2012/03/git-rbridge22.jpg"
target="_new" ><img
class="centered" src="http://stevengharms.com/wp-content/uploads/2012/03/git-rbridge22.jpg" alt="#"></a><br />
<em>Typical scene of getting laptops set up (<a href="https://twitter.com/#!/ultrasaurus/status/173458965806583808/photo/1">source</a>)</em></p>

<p>In these activities I have encountered a powerful enemy to successful teaching
that we, as organizers and teachers, should remain vigilant against: <em>negative
<a href="http://en.wikipedia.org/wiki/Confirmation_bias">confirmation bias</a></em>.</p>

<p>Negative confirmation bias is when a student walks into a situation expecting
that s/he is not going to succeed and then proceeds to look for data to back up
that negative view.  Why students have this negative view is a subject for
another post, but it is my belief that it is at the heart of why there is such
poor diversity in high tech.<sup>*</sup>  At development workshops / boot
camps, students encounter a <em>dangerous confirmant</em> of their negative bias in
one the earliest steps: &#8220;Bootstrap the setup using <code>git</code>.&#8221;</p>

<p>Facilitators must take an active role in reminding students that the
installation / bootstrap step bears <strong>no</strong> inherent reflection upon their
ability to enjoy, learn from, and perform well in the class.</p>

<p><span id="more-2557"></span></p>

<p>It&#8217;s surprising since planners and facilitators work so hard to make so many
other aspects of the student&#8217;s engagement easy <em>so as to</em> counter the
possibility of negative confirmation.  Specifically, Railsbridge sessions do a
great job:</p>

<ol>
<li>Delivering an energetic environment that checks: &#8220;<em>I knew developers were
boring, I don&#8217;t belong there.</em>&#8221;</li>
<li>Saying &#8220;welcome&#8221; upon check-in that mitigates: &#8220;<em>Everyone ignored me, I knew I didn&#8217;t belong
there.</em>&#8221;</li>
<li>Pre-communicating the transport situation that checks: <em>Couldn&#8217;t park,
probably didn&#8217;t belong there anyway</em>.&#8221;</li>
<li>Building &#8220;pods&#8221; where informal collaboration occurs that checks: &#8220;*No one saw I was confused, I knew everyone
there was smarter than me.  I knew I didn&#8217;t belong there. *&#8221;</li>
<li>Providing power strips, snacks, job prospects, etc.</li>
</ol>

<p>But then we run the risk of glossing over something that seems very simple.  We command:</p>

<blockquote>
  <p>&#8220;<code>git clone</code> a respository so that we can all start on the same page.&#8221;</p>
</blockquote>

<p>This is a simple operation for anyone who has it as part of their daily
workflow &mdash; something that we do with the casualness of deleting a file.
But it is easy forget that this culminating activity is built upon a series of
installations and configurations.  To wit:</p>

<ul>
<li>&#8220;Git clone a respository so that we can all start on the same page.&#8221;

<ul>
<li><code>git clone http://github.com/some/repo railsbr</code></li>
<li>get <code>git</code>

<ul>
<li>get <code>[homebrew](http://mxcl.github.com/homebrew/)</code></li>
<li>get <code>gcc</code> and its libraries</li>
<li>get <code>gcc</code> from the <a href="https://github.com/kennethreitz/osx-gcc-installer/">Kenneth Reitz bundle</a> <strong>OR</strong></li>
<li>get <code>gcc</code> from XCode for Lion <strong>OR</strong></li>
<li>get <code>gcc</code> from a legacy XCode</li>
</ul></li>
<li>Tacitly understand the concept of a SCM</li>
<li><em>etc.</em></li>
</ul></li>
</ul>

<p>The challenges, tweaks, and reliance on facilitators&#8217; judgment that &#8220;Oh don&#8217;t
worry about this, it&#8217;s not fatal&#8221; or &#8220;Oh, right, we need to copy XCode from the
USB key&#8221; can <em>easily</em> upset the student&#8217;s steady growth in confidence at the
most critical, incipient point.  Facilitators would be wise to handle this
particular snag carefully.</p>

<p>The last session I participated in focused on essential web development skills:
HTML, CSS, Javascript, and jQuery.  <code>git</code> has <em>absolutely no</em> direct
relationship to style of development.<sup>**</sup>  Yet as we stepped
through this stack of activities, I could almost <em>hear</em> the biases finding
confirmation:  &#8220;<em>If I can&#8217;t get this working and the thing hasn&#8217;t even started
yet, there&#8217;s no way I&#8217;ll figure out the rest.</em>&#8221;</p>

<p><strong>BUT</strong> once the students got past the installation snarl, they were well on
their way and, from the feedback, it seems all the students (and teachers!)
learned a lot and had a great time.  It is absolutely <em>essential</em> that
facilitators recognize this weakness in our curriculum and set expectations
around it properly.</p>

<p><a href="http://www.bignerdranch.com/">Big Nerd Ranch</a> founder <a href="http://en.wikipedia.org/wiki/Aaron_Hillegass">Aaron
Hillegass</a> has a great section in
the beginning of his <a href="http://www.amazon.com/Cocoa-Programming-Mac-OS-3rd/dp/0321503619">Cocoa programming for Mac
OSX</a>.  I
learned a lot from Aaron several years ago and I think of this story whenever I
get disappointed or let down in my battles learning anything.  Heck I&#8217;ve even
repeated a paraphrase of it to some of my students at events like this.  Here
is is from the source:</p>

<blockquote>
  <p>&#8220;I used to have a boss named Rock. Rock had earned a degree in astrophysics
  from <a href="http://www.caltech.edu/">Cal Tech</a> and had never had a job in which he
  used his knowledge of the heavens. Once I asked him whether he ever regretted
  getting the degree.  &#8220;Actually, my degree in astrophysics has proved to be very
  valuable,&#8221; he said.  &#8220;Some things in this world are just hard. When I am
  struggling with something, I sometimes think &#8216;Damn, this is hard for me. I
  wonder if I am stupid,&#8217; and then I remember that I have a degree in
  astrophysics from Cal Tech; I must not be stupid.&#8221;</p>
</blockquote>

<h2>Recommendations for Organizers</h2>

<p>If organizers use <code>git</code> or other bits of hacker-friendly technology to get your
students bootstrapped, it is <strong>imperative</strong> that you explain that success with
<code>git</code> has no inherent bearing on success with web development in general,
<code>ruby</code>, or <code>rails</code> in particular.</p>

<p>It&#8217;s also worth bearing note that this applies to many of the other macroscopic
activities that happen at workshops.  <code>rails g migration renameUserToClient</code>
runs on a similar &#8220;stack&#8221; of assumptions required to get the framework.  The
student will likely lack the familiarity required to discern the difference and
conclude that:</p>

<p><code>difficulty bootstrapping a tool == difficulty using the tool == I am stupid</code></p>

<p>Here are some approaches that I&#8217;ve tried.  Obviously, no approach is perfect
for all students, but here are some ideas.</p>

<ul>
<li>&#8220;This is magic, this is weird stuff and it&#8217;s something you&#8217;ll learn, but for
today, let&#8217;s just follow the instructions and not worry about the
particulars.  It&#8217;s not programming, it&#8217;s just a tool.&#8221;</li>
<li>&#8220;The goal for us, as teachers, is to get everyone on the same page.  This is
just administration, not really coding $TECHNOLOGY_NAME so much.  But we need
you to help us get your machine ready and we&#8217;ve chosen one of the most
difficult ways possible to do it (ha-ha).&#8221;</li>
<li>Use the &#8220;stack&#8221; metaphor above to explain that all of these little steps add
up to completing the one simple task of getting the student on the &#8220;same
page&#8221; by cloning a repository</li>
<li>Explain only as much as the student asks for.  For example:  &#8220;What&#8217;s <code>git</code>?&#8221;
It&#8217;s a way for synchornizing files from a master source.  We want all of the
students to have a synchronized &#8220;base&#8221; state.  <strong>NOT</strong>:  It&#8217;s a DCVS that
uses linked lists, has lightweight branching, and no designated HEAD.</li>
</ul>

<p>The hard part is to become interested, to wake up early, to find parking / take
transit, and to have the courage to actually open the door and say &#8220;I don&#8217;t
know, but I want to know.&#8221;  A bunch of noise about libraries should not halt
that process or that progress.</p>


<hr />


<p>Footnotes:</p>

<p>* Approximately 28% of high tech work is female; 2% in open source.</p>

<p>** In Railsbridge&#8217;s other sessions on Rails the linking is more obvious as
one must use <code>git</code> to deploy the code to public servers.  But acumen with an
SCM certainly has no necessary correlation to success in the field of software
development.</p>
]]></content:encoded>
			<wfw:commentRss>http://stevengharms.com/technical-outreach-workshops-needlessly-frightening-at-the-beginning/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogging in Janus + MacVim + Vimblog</title>
		<link>http://stevengharms.com/blogging-in-janus-macvim-vimblog</link>
		<comments>http://stevengharms.com/blogging-in-janus-macvim-vimblog#comments</comments>
		<pubDate>Sun, 11 Mar 2012 16:49:13 +0000</pubDate>
		<dc:creator>steven</dc:creator>
				<category><![CDATA[Technology and Computers]]></category>

		<guid isPermaLink="false">http://stevengharms.com/?p=2501</guid>
		<description><![CDATA[As I mentioned elsewhere, my friend Daniel Miessler said that he would be ready to give up Textmate for Vim but were it for the level of blogging support. I have, hopefully, made it easier to do so. In fact, I&#8217;m writing this blog post and using my fork of Vimblog to manage it. Here&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>As I mentioned <a href="http://stevengharms.com/blogging-with-vim">elsewhere</a>, my friend <a href="http://danielmiessler.com/">Daniel
Miessler</a> said that he would be ready to give up
Textmate for Vim but were it for the level of blogging support.  I have,
hopefully, made it easier to do so.  In fact, I&#8217;m writing this blog post and
using my fork of <a href="https://github.com/sgharms/vimblog.vim">Vimblog</a> to manage it.</p>

<p>Here&#8217;s how this post was made:</p>

<ol>
<li><code>:Blog np</code> created a new post</li>
<li>Moved down to the <code>Categs</code> line and then: <code>:Blog cl</code></li>
<li>/Techno to match the right line.  Hit enter.</li>
<li><em>Vimblog just copied the category name to the yank clipboard for me and then&#8230;</em></li>
<li><em>p</em> to paste it in</li>
<li><em>G</em> to the end of the file</li>
<li><em>o</em> to start typing</li>
<li>Typed <code>Daniel Miessler</code></li>
<li><em><esc>v2b\gifl</em> did a Google I&#8217;m feeling Lucky to his site and wrapped it in a
markdown link</li>
<li>More editing</li>
<li>:Blog draft (<em>because it&#8217;s still alpha-grade code</em>) so I could check it out
in WordPress</li>
<li>Took a screen-shot of vim to put in the post</li>
<li>:Blog um ~/Desk<TAB>/vimb<TAB><CR></li>
<li>Vimblog pasted the url link to the image that makes this work:
<a href="http://stevengharms.com/wp-content/uploads/2012/03/vimblog22.png"><img
class="centered"
src="http://stevengharms.com/wp-content/uploads/2012/03/vimblog22.png"
alt="Screenshot of vimblog"></a></li>
<li>Published this post with <code>:Blog publish</code></li>
<li><em>Damn it feels good to be a gangsta</em></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://stevengharms.com/blogging-in-janus-macvim-vimblog/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogging with Vim</title>
		<link>http://stevengharms.com/blogging-with-vim</link>
		<comments>http://stevengharms.com/blogging-with-vim#comments</comments>
		<pubDate>Thu, 08 Mar 2012 14:09:21 +0000</pubDate>
		<dc:creator>steven</dc:creator>
				<category><![CDATA[Technology and Computers]]></category>

		<guid isPermaLink="false">http://stevengharms.com/?p=2411</guid>
		<description><![CDATA[I have been wanting to get the Vim Editor working as a tool for blogging. I&#8217;d discussed this a time or two with my friend Daniel Miessler, and he brought up a critical thing that was missing for him in migrating away from Textmate: the ability to do an &#8220;I&#8217;m feeling lucky&#8221; hotlink onto a [...]]]></description>
			<content:encoded><![CDATA[<p>I have been wanting to get the <a href="http://www.vim.org/">Vim Editor</a> working
as a tool for blogging.  I&#8217;d discussed this a time or two with my friend
<a href="http://danielmiessler.com/">Daniel Miessler</a>, and he brought up a
critical thing that was missing for him in migrating away from
<a href="http://macromates.com/">Textmate</a>: the ability to do an &#8220;I&#8217;m feeling
lucky&#8221; hotlink onto a word as one is composing.</p>

<p>I had to admit, this was a pretty compelling feature provided by
Textmate&#8217;s &#8220;Hyperlink Helper&#8221; bundle.  Its lack definitely hindered 
my drive to blog in vim.</p>

<p>To that end, I have created my
first <a href="http://github.com/sgharms/GIFL">Vim plugin</a> and port this sexy
capability to Vim.</p>

<p>The port is called <em>GIFL</em> which is not some sort of obscure term for
attractive septugenarians, but rather is <strong>G</strong>oogle <strong>I&#8217;m</strong> <strong>F</strong>eeling
<strong>L</strong>ucky.</p>

<p><a href="http://www.quickmeme.com/meme/36hy2h/"><img src="/wp-content/uploads/2012/03/qm.jpg" class="centered" alt="insanity wolf recommends vimscript"></a></p>

<p>With this installed you can do things like:</p>

<p>Imagine you have the following text, with your cursor at &#8216;*&#8217;:</p>

<pre><code>*lindsay lohan
</code></pre>

<p>Now enter:</p>

<pre><code>\gifl2e
</code></pre>

<p>You now have:</p>

<pre><code>[lindsay lohan](http://www.myspace.com/lindsaylohan*)
</code></pre>

<p>That is, the Markdown code for a URL.  That&#8217;s pretty handy.  This loads
up in the global namespace, so you can use it anywhere and everywhere.
I&#8217;ve found it suprpisingly handy in places other than a blogging
context.  It&#8217;s still very, very, <em>very</em> alpha, but it gets the job done.</p>

<p><img src="/wp-content/uploads/2012/03/ship-it-squirrel.png" class="centered" alt="ship-it squirrel"/></p>

<p>I must say that coding in vimscript is a bit of a challenge, but I have
been greatly helped by <a href="http://learnvimscriptthehardway.stevelosh.com/">Steve Losh&#8217;s <em>Learn Vimscript the Hard
Way</em></a>.</p>

<p>By the way, thanks to <a href="https://github.com/pedromg/vimblog.vim">Pedro MG&#8217;s vimblog
project</a>, I was able to write
this post <em>in</em> Vim, with <em>GIFL</em> doing nearly all the linking.</p>

<p>I think that both <em>GIFL</em> and <em>Vimblog</em> need to be polished a bit before
I can say that, together, they make it as easy as it was in Textmate
to be a blogger, but it&#8217;s definitely <em>closer</em>.  Thanks to <a href="https://github.com/b4winckler/macvim">Macvim</a> + <a href="https://github.com/carlhuda/janus">Janus</a> 
as platform, this is close.</p>
]]></content:encoded>
			<wfw:commentRss>http://stevengharms.com/blogging-with-vim/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Practical Metaprogramming Video Now Available</title>
		<link>http://stevengharms.com/practical-metaprogramming-video-now-available</link>
		<comments>http://stevengharms.com/practical-metaprogramming-video-now-available#comments</comments>
		<pubDate>Thu, 03 Nov 2011 16:27:09 +0000</pubDate>
		<dc:creator>steven</dc:creator>
				<category><![CDATA[Technology and Computers]]></category>

		<guid isPermaLink="false">http://stevengharms.com/?p=2374</guid>
		<description><![CDATA[As mentioned previously, I gave a talk at Rubyconf XI in New Orleans a few months back. The video is now available. If you want to see me talking about some of the finer details of the Ruby programming language while wearing a shirt from Saturday Morning Breakfast Cereal, here&#8217;s your chance. &#8220;Practical Metaprogramming&#8221; hosted [...]]]></description>
			<content:encoded><![CDATA[<p>As <a href="http://stevengharms.com/practical-metaprogramming-presentation-from-rubyconf-xi">mentioned previously</a>, I gave a talk at Rubyconf XI in New Orleans a few months back.  The video is now available.  If you want to see me talking about some of the finer details of the Ruby programming language while wearing a shirt from <a href="http://smbc-comics.com">Saturday Morning Breakfast Cereal</a>, here&#8217;s your chance.</p>

<p><a href="http://confreaks.net/videos/687-rubyconf2011-practical-metaprogramming-modeling-thought-or-lessons-learned-while-using-ruby-s-mp-system-to-model-a-2-500-year-old-dead-language">&#8220;Practical Metaprogramming&#8221; hosted by Confreaks</a></p>
]]></content:encoded>
			<wfw:commentRss>http://stevengharms.com/practical-metaprogramming-video-now-available/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My  First Week of Development at Carbon Five: By the Numbers</title>
		<link>http://stevengharms.com/my-first-week-of-development-at-carbon-five-by-the-numbers</link>
		<comments>http://stevengharms.com/my-first-week-of-development-at-carbon-five-by-the-numbers#comments</comments>
		<pubDate>Wed, 02 Nov 2011 19:24:00 +0000</pubDate>
		<dc:creator>steven</dc:creator>
				<category><![CDATA[Technology and Computers]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[carbonfive]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://stevengharms.com/?p=2358</guid>
		<description><![CDATA[It may be a bit of a &#8220;no duh&#8221; observation to point out that joining a consulting firm has a very different work flow versus working in corporate. A few numbers: Number of days when pairing occurred: 5 Number of hours spent pairing: ~37 Number of stand-ups: 5 Time spent in stand ups (week): ~ [...]]]></description>
			<content:encoded><![CDATA[<p>It may be a bit of a &#8220;no duh&#8221; observation to point out that joining a consulting firm has a very different work flow versus working in corporate.  A few numbers:</p>

<ul>
<li>Number of days when pairing occurred:  5</li>
<li>Number of hours spent pairing:  ~37</li>
<li>Number of stand-ups:  5</li>
<li>Time spent in stand ups (week):  ~ 50 minutes</li>
<li>Brown Bag Lunch:  90 minutes</li>
<li>Emails received within project team:  3</li>
<li>Emails received from client:  1</li>
<li>Skills Worked On:  HTML5, CSS3, Rails, Backbone.JS</li>
<li>Times astounded by <a href="http://mikeperham.com">my pair</a>&#8217;s refactoring skills:  2</li>
<li>Times astounded by my peer teams&#8217; approaches to managing complexity elegantly:  2</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://stevengharms.com/my-first-week-of-development-at-carbon-five-by-the-numbers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hipchat!</title>
		<link>http://stevengharms.com/hipchat</link>
		<comments>http://stevengharms.com/hipchat#comments</comments>
		<pubDate>Tue, 25 Oct 2011 00:36:27 +0000</pubDate>
		<dc:creator>steven</dc:creator>
				<category><![CDATA[Technology and Computers]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://stevengharms.com/?p=2359</guid>
		<description><![CDATA[Earlier this year when driving back to the City from San Jose, I saw this billboard featuring &#8220;Y U NO Guy&#8221; advertising a service called Hipchat. Today on my first day at Carbon Five, I got registered for my accounts: email, tracker, etc. And of course: I USE HIPCHAT, Y U NO GUY. Hipchat&#8217;s founder, [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this year when driving back to the City from San Jose, I saw this billboard featuring &#8220;<a href="http://knowyourmeme.com/memes/y-u-no-guy#.TqYD3JypoX4">Y U NO Guy</a>&#8221; advertising a service called <a href="http://hipchat.com">Hipchat</a>.</p>

<a href="http://stevengharms.com/wp-content/uploads/2011/10/hip.jpg"><img src="http://stevengharms.com/wp-content/uploads/2011/10/hip-300x201.jpg" alt="" title="Hipchat Billboard" width="300" height="201" class="size-medium wp-image-2360" /></a>

<p>Today on my first day at <a href="http://carbonfive.com">Carbon Five</a>, I got registered for my accounts: email, tracker, etc. And of course:</p>

<p><a href="http://stevengharms.com/wp-content/uploads/2011/10/Screen-shot-2011-10-24-at-10.33.19-AM.png"><img src="http://stevengharms.com/wp-content/uploads/2011/10/Screen-shot-2011-10-24-at-10.33.19-AM.png" alt="" title="Screen shot 2011-10-24 at 10.33.19 AM" width="285" height="65" class="aligncenter size-full wp-image-2361" /></a></p>

<p>I USE HIPCHAT, Y U NO GUY.</p>

<p>Hipchat&#8217;s founder, Pete, tells the story of Hipchat aweseomeness <a href="http://blog.hipchat.com/2011/06/23/a-tale-of-a-ridiculous-billboard/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://stevengharms.com/hipchat/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

