<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Miscellaneous Ramblings</title>
	<atom:link href="http://onastick.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://onastick.wordpress.com</link>
	<description>Hockey, Disc golf, devops and other assorting miscellany.</description>
	<lastBuildDate>Sat, 17 Mar 2012 23:03:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='onastick.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Miscellaneous Ramblings</title>
		<link>http://onastick.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://onastick.wordpress.com/osd.xml" title="Miscellaneous Ramblings" />
	<atom:link rel='hub' href='http://onastick.wordpress.com/?pushpress=hub'/>
		<item>
		<title>New year, new job.</title>
		<link>http://onastick.wordpress.com/2012/01/18/new-year-new-job/</link>
		<comments>http://onastick.wordpress.com/2012/01/18/new-year-new-job/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 17:39:16 +0000</pubDate>
		<dc:creator>stick</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[family]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://onastick.wordpress.com/?p=328</guid>
		<description><![CDATA[So it&#8217;s a new year and this is the obligatory &#8216;Beginning of the year&#8217; post.  It&#8217;s been put off for a while because well I&#8217;ve been a bit busier than normal.  The main reason for that is that I&#8217;m a few days into a new job.  I&#8217;ve left AirDat for a sysadmin position at Glencoe Software. Why [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=328&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>So it&#8217;s a new year and this is the obligatory &#8216;Beginning of the year&#8217; post.  It&#8217;s been put off for a while because well I&#8217;ve been a bit busier than normal.  The main reason for that is that I&#8217;m a few days into a new job.  I&#8217;ve left <a href="http://www.airdat.com">AirDat</a> for a sysadmin position at <a href="http://www.glencoesoftware.com">Glencoe Software</a>.</p>
<p><span id="more-328"></span>Why did I leave?  There are a myriad of reasons, most best discussed over beer or scotch.  I liked AirDat and it was what I needed at the time.  I learned a lot about <a class="zem_slink" title="High-performance computing" href="http://en.wikipedia.org/wiki/High-performance_computing" rel="wikipedia">HPC</a> and <a class="zem_slink" title="Weather forecasting" href="http://en.wikipedia.org/wiki/Weather_forecasting" rel="wikipedia">weather forecasting</a> and worked with some really cool, really smart people.  Ultimately I got to the point where I needed to have some different challenges and be more involved in some of the decisions that were being made.   I wish those guys the best I really hope they succeed, they have some killer technology that could prove to be really useful if they can get everything to fall into place.</p>
<p>At Glencoe I will be their sysadmin supporting not only the corporate endeavors for our products but also supporting and working on the <a href="http://www.openmicroscopy.org/">OME</a> and it&#8217;s other open source projects.  It&#8217;s exciting to get back into the open source world, as well as dive into the informatics world and the challenges that lie within.</p>
<p>Another big change with the move to Glencoe is that I&#8217;m now working from home full-time.  I&#8217;ve converted part of my house to a home office and the family and I are trying to adjust to this as well as me working closer to UK/GMT time.  It&#8217;s something I&#8217;ve been wanting to do for some time and I&#8217;ve finally got the opportunity and plan to make the most of it.</p>
<p>&nbsp;</p>
<br />Filed under: <a href='http://onastick.wordpress.com/category/ramblings/'>Ramblings</a> Tagged: <a href='http://onastick.wordpress.com/tag/family/'>family</a>, <a href='http://onastick.wordpress.com/tag/life/'>life</a>, <a href='http://onastick.wordpress.com/tag/work/'>work</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onastick.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onastick.wordpress.com/328/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=328&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onastick.wordpress.com/2012/01/18/new-year-new-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/10dcfb54c464136b8be684b80ddd3515?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">stickm13</media:title>
		</media:content>
	</item>
		<item>
		<title>The 7 Deadly Sysadmin Sins</title>
		<link>http://onastick.wordpress.com/2011/12/06/the-7-deadly-sysadmin-sins/</link>
		<comments>http://onastick.wordpress.com/2011/12/06/the-7-deadly-sysadmin-sins/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 17:43:36 +0000</pubDate>
		<dc:creator>stick</dc:creator>
				<category><![CDATA[Sysadminery]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[doing-it-wrong]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://onastick.wordpress.com/?p=326</guid>
		<description><![CDATA[We&#8217;ve all been there, needing to fix something and not having the time, energy, etc to fix it the right way.  Sometimes this is the easiest way to avoid a massive rabbit hole.  But you know it&#8217;s wrong you do it and keep going but part of you dies inside.  The 7 Deadly Sysadmin Sins. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=326&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<div>We&#8217;ve all been there, needing to fix something and not having the time, energy, etc to fix it the right way.  Sometimes this is the easiest way to avoid a massive rabbit hole.  But you know it&#8217;s wrong you do it and keep going but part of you dies inside.  The 7 Deadly Sysadmin Sins.</div>
<ol>
<li>chmod 777</li>
<li>chmod 4755 $file</li>
<li>setenforce 0</li>
<li>echo &#8221; |passwd &#8211;stdin root</li>
<li>service iptables stop</li>
<li>echo &#8216;reboot&#8217; &gt; /etc/cron.daily/fix-hanging-db.sh</li>
<li>curl <a href="http://randomwebsite/foo.sh" rel="nofollow">http://randomwebsite/foo.sh</a> | bash</li>
</ol>
<p>The last one bugs the crap out of me when good software developers assume this is a valid way to install software (outside of your personal machine).</p>
<br />Filed under: <a href='http://onastick.wordpress.com/category/sysadminery/'>Sysadminery</a> Tagged: <a href='http://onastick.wordpress.com/tag/devops/'>devops</a>, <a href='http://onastick.wordpress.com/tag/doing-it-wrong/'>doing-it-wrong</a>, <a href='http://onastick.wordpress.com/tag/sysadmin/'>sysadmin</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onastick.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onastick.wordpress.com/326/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=326&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onastick.wordpress.com/2011/12/06/the-7-deadly-sysadmin-sins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/10dcfb54c464136b8be684b80ddd3515?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">stickm13</media:title>
		</media:content>
	</item>
		<item>
		<title>Running a puppetmaster in ec2</title>
		<link>http://onastick.wordpress.com/2011/11/30/running-a-puppetmaster-in-ec2/</link>
		<comments>http://onastick.wordpress.com/2011/11/30/running-a-puppetmaster-in-ec2/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 22:34:26 +0000</pubDate>
		<dc:creator>stick</dc:creator>
				<category><![CDATA[Sysadminery]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://onastick.wordpress.com/?p=317</guid>
		<description><![CDATA[I struggled with this for a few days before figuring it out, so I&#8217;ll post it here in hopes it saves someone a few minutes.  When you install puppet and start the puppetmaster (webrick or rack-enabled) it generates a ssl cert for that machine and also generates a CA that you will use to sign [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=317&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I struggled with this for a few days before figuring it out, so I&#8217;ll post it here in hopes it saves someone a few minutes.  When you install puppet and start the puppetmaster (webrick or rack-enabled) it generates a ssl cert for that machine and also generates a CA that you will use to sign all of your clients.</p>
<p>Recent versions of puppet do not add subjectAltNames to the server certificate when it&#8217;s generated by the puppetmaster process.  This means that if you do not use the same name as your masters hostname to connect to puppet you will get a lovely cert mismatch.  I posted a question on serverfault about this (<a title="Puppet in EC2 - Server Fault Question" href="http://serverfault.com/questions/332954/puppet-cert-mismatch-in-ec2/334129#334129" target="_blank">here</a>).  It looks like the common practice for EC2 in particular is to use a uuid as the certname for each puppet client.  This avoids name collisions and problems with hostnames changing everytime the instance is rebooted.  It&#8217;s a little harder to keep track of since they aren&#8217;t very easy to remember, so caveat emptor.</p>
<p><span id="more-317"></span></p>
<p>First get puppet installed.  I tend to use gems (even though I despise them) since they update much faster upstream than anything else.  <em>Do NOT run puppet or start the puppetmaster.</em></p>
<p>Generate a uuid or pick some string/name/moniker that&#8217;s going to be uniq and consistent.  (uuidgen to get a uuid)</p>
<p>Setup a basic puppet.conf, rpm installs will do this for you, gem installs you are on your own.<br />
<code><br />
[main]<br />
logdir = /var/log/puppet<br />
rundir = /var/run/puppet<br />
vardir = /var/lib/puppet<br />
ssldir = $vardir/ssl<br />
pluginsync = true<br />
server = puppet<br />
environment = production<br />
certname = ENTER_UUID_HERE<br />
dns_alt_names = puppet<br />
report = true<br />
</code><br />
You can also manually generate the cert with the following.<br />
<code>puppet cert generate --dns_alt_names puppet ENTER_UUID_HERE</code><br />
Your master cert will have the subjectAltNames field now, This is all addressed in <a href="http://projects.puppetlabs.com/issues/10739" target="_blank">http://projects.puppetlabs.com/issues/10739</a> and should be fixed in the next puppet release.</p>
<p>The concept of using the uuid for ec2 type instances is sound and will prevent ssl headaches in the future.</p>
<br />Filed under: <a href='http://onastick.wordpress.com/category/sysadminery/'>Sysadminery</a> Tagged: <a href='http://onastick.wordpress.com/tag/amazon/'>amazon</a>, <a href='http://onastick.wordpress.com/tag/aws/'>aws</a>, <a href='http://onastick.wordpress.com/tag/ec2/'>ec2</a>, <a href='http://onastick.wordpress.com/tag/linux/'>linux</a>, <a href='http://onastick.wordpress.com/tag/puppet/'>puppet</a>, <a href='http://onastick.wordpress.com/tag/ssl/'>ssl</a>, <a href='http://onastick.wordpress.com/tag/sysadmin/'>sysadmin</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onastick.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onastick.wordpress.com/317/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=317&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onastick.wordpress.com/2011/11/30/running-a-puppetmaster-in-ec2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/10dcfb54c464136b8be684b80ddd3515?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">stickm13</media:title>
		</media:content>
	</item>
		<item>
		<title>The psychology of server naming</title>
		<link>http://onastick.wordpress.com/2011/11/15/the-psychology-of-server-naming/</link>
		<comments>http://onastick.wordpress.com/2011/11/15/the-psychology-of-server-naming/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 18:56:09 +0000</pubDate>
		<dc:creator>stick</dc:creator>
				<category><![CDATA[Sysadminery]]></category>
		<category><![CDATA[best-practices]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[naming]]></category>
		<category><![CDATA[operations]]></category>
		<category><![CDATA[servers]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[system-administration]]></category>

		<guid isPermaLink="false">http://onastick.wordpress.com/?p=311</guid>
		<description><![CDATA[One of the more hotly debated topics among sysadmins is what to name servers.  Some people use this as an outlet for their creativity or pop culture references.  Servers named after Lord of the Rings characters, super heros, greek mythology abound.  There&#8217;s a strong push from those of us who have moved past the &#8216;clever&#8217; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=311&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://onastick.files.wordpress.com/2011/11/name_cover.jpeg"><img class="alignleft size-medium wp-image-313" title="The Book of Names" src="http://onastick.files.wordpress.com/2011/11/name_cover.jpeg?w=300&#038;h=211" alt="found on http://www.thaliasdog.com/ -- thanks" width="300" height="211" /></a>One of the more hotly debated topics among sysadmins is what to name servers.  Some people use this as an outlet for their creativity or pop culture references.  Servers named after <a class="zem_slink" title="The Lord of the Rings" href="http://en.wikipedia.org/wiki/The_Lord_of_the_Rings" rel="wikipedia">Lord of the Rings</a> characters, super heros, greek mythology abound.  There&#8217;s a strong push from those of us who have moved past the &#8216;clever&#8217; phase of our careers to name machines in logical consistent manners.  web0X, db0Y, rackXpduY, all get bandied around and are debated with often the same fervor as <a class="zem_slink" title="Vim (text editor)" href="http://www.vim.org/" rel="homepage">Vim</a> vs <a class="zem_slink" title="Emacs" href="http://www.gnu.org/software/emacs" rel="homepage">Emacs</a> (vim for the record).  The truth, sadly is that all the good names are taken ™©®.  The grizzled veterans who&#8217;ve done time on a VAX will exclaim, &#8220;This naming scheme is crap, lets just use IPs, they are immutable.&#8221;  Well for one they are wrong, ips are not immutable.  Take a look at EC2, have fun with that.   Second humans are bad at remembering numbers, 10 digits is the longest number most people can retain (why phone numbers are that length) and usually not for very long.</p>
<p>Names also provide a very important psychological edge for our poor meat brains.  Names allow us to recall information in a similar way that a key allows you to recall information from a database.  A message from  your alert system saying &#8216;Alert gandalf.example.com is DOWN!&#8217; would (in theory) trigger something in your memory.  Gandalf is a wizard, that&#8217;s the master DNS server!  This key isn&#8217;t as good as a more meaningful name but it&#8217;s a key none the less.  I prefer names which are functional and overload information into the rest of the domain.  proxy01.atl.example.com tells me very quickly this is a proxy server, it&#8217;s one of a multinode cluster, likely load balanced, and is located in Atlanta.  All of this allows me to asses the situation at hand faster.  All of the pertinent details should be written down in a wiki, or some other document source, but the naming gives me a fast way to access that without having to go look it up.  172.14.2.1 is DOWN only tells me something is broken, not how important, how impacting or anything about it.  Maybe that&#8217;s a dev box or 1 node in a 40 node cluster, but I don&#8217;t know that (unless I just memorize it which stresses the meat brain) until I look it up.</p>
<p>Consistency is the key, I don&#8217;t in general like &#8216;clever&#8217; names not because they are unprofessional or silly, but because they only mean something to the person who came up with it.  I know why I named the database &#8216;pearl&#8217; (bonus points to anyone that guesses), but my other team members might not and likely that someone coming behind me wouldn&#8217;t either.  I&#8217;m a huge fan of code names and clever names for software / service names / etc just not machine names.  Here are some of the conventions I use.</p>
<p><strong>Multinode clusters are numbered 2 digit starting at 01.</strong></p>
<p><strong></strong>10 servers in a web cluster, web01 &#8211; web10.  Using 2 digit precision gives you 99 machines before you end up changing field sizes.</p>
<p><strong>Short hostnames are the most common functional purpose.</strong></p>
<p><strong></strong>Sometimes it&#8217;s ok to call it a server and put more information into the sub domain.  &#8217;Web&#8217; in general sucks, it&#8217;s too generic and means very little, what does it &#8216;do&#8217;.</p>
<p><strong>If you think they&#8217;ll be more than one, name it 01.</strong></p>
<p><strong>Don&#8217;t use a sequential numbering system for unrelated things.</strong></p>
<p>If you have two webservers that serve different content/services/etc don&#8217;t name them web01 / web02.  This creates a logical grouping of those two machines which are not actually tied together from a service standpoint.  I&#8217;ve heard of shared filesystems being named fs01, fs02, fs03, fs04, etc.  They aren&#8217;t related other than that they are all shared filesystems, why are you grouping them into something that looks like a cluster.  People assume that 1 is related to 2 to 3 to 4.  Put some thought into it and give it a name based on what it does or what&#8217;s important about it.</p>
<p><strong>Use A / B notation for duality relationships.</strong></p>
<p>I name my netapp filers: filer01a / filer01b.  They are both addressable services but provide failover for each other.  There will never be a &#8216;c&#8217; since netapp doesn&#8217;t support wheel based failover.  They are a matched set, so they are named as such.  A vs B gives less cardinality than 1 vs 2 and that&#8217;s a good thing.</p>
<p><strong>Use subdomains in a consistent manner to produce a lightweight hierarchy of information.</strong></p>
<p>proxy01.www.internal.nyc.example.com lets me denote physical location, security context (internal), content type (www), and functional purpose (proxy) all in one name.  Granted this assumes a high degree of machine / service separation and may not work for everything, but you can use that name to store quickly accessible information.</p>
<p><strong>Order is important, remember that.</strong></p>
<p>In english we read left to right.  Information is ordered in that direction as well.  Put the thing you care about most (or quickest) to the left and less immediate information flows to the right).  database01.hr.alt  tells me it&#8217;s a database (important!), it&#8217;s part of a cluster (less important than being a db but still relevant), HR database (eeek will I get paid?!), and finally location which may not matter (alt is a backup site, I can deal with that later).  Order frames your response into the correct context.  database.atl.hr.clusternode1 tells me this machine is a database (important), in Atlanta (wait that&#8217;s the dr site I might not care right away), it&#8217;s HR (wait we don&#8217;t have a primary b/c it died last week), and that it&#8217;s a clusternode.  Is this better or worse?  Depends on the context, order is important.</p>
<p>The crux of the whole point is that names are useful things, humans name things not because they want to be clever but because it&#8217;s an effective way to partition information about something without having to memorize it all.  It comes down to the difference between knowing something and memorizing it.  You design a convention and stick to that convention until it doesn&#8217;t work, then you redefine that convention.  The convention saves you time but only if everyone &#8216;gets&#8217; the convention or it can be easily explained.  If your convention is a complicated scheme involving lollipop guild chairmen&#8217;s you are requiring the audience to have immediate intrinsic knowledge of Mid 1930&#8242;s Judy Garland films, which is the same as asking them to look it up.</p>
<br />Filed under: <a href='http://onastick.wordpress.com/category/sysadminery/'>Sysadminery</a> Tagged: <a href='http://onastick.wordpress.com/tag/best-practices/'>best-practices</a>, <a href='http://onastick.wordpress.com/tag/devops/'>devops</a>, <a href='http://onastick.wordpress.com/tag/dns/'>dns</a>, <a href='http://onastick.wordpress.com/tag/naming/'>naming</a>, <a href='http://onastick.wordpress.com/tag/operations/'>operations</a>, <a href='http://onastick.wordpress.com/tag/servers/'>servers</a>, <a href='http://onastick.wordpress.com/tag/sysadmin/'>sysadmin</a>, <a href='http://onastick.wordpress.com/tag/system-administration/'>system-administration</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onastick.wordpress.com/311/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onastick.wordpress.com/311/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=311&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onastick.wordpress.com/2011/11/15/the-psychology-of-server-naming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/10dcfb54c464136b8be684b80ddd3515?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">stickm13</media:title>
		</media:content>

		<media:content url="http://onastick.files.wordpress.com/2011/11/name_cover.jpeg?w=300" medium="image">
			<media:title type="html">The Book of Names</media:title>
		</media:content>
	</item>
		<item>
		<title>The horrible state of ruby in a production environment.</title>
		<link>http://onastick.wordpress.com/2011/11/05/the-horrible-state-of-ruby-in-a-production-environment/</link>
		<comments>http://onastick.wordpress.com/2011/11/05/the-horrible-state-of-ruby-in-a-production-environment/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 04:33:49 +0000</pubDate>
		<dc:creator>stick</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Sysadminery]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Revision control]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[RubyGem]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://onastick.wordpress.com/?p=307</guid>
		<description><![CDATA[As a long time perl guy I was attracted by ruby.  It&#8217;s very perl like method chaining is extremely useful and intuitive.  I like ruby, but the state of  ruby applications in a production environment is horrible.  There are plenty of really good tools out there for ruby developers.  Vagrant, sahara, bundler, capistrano, etc the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=307&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>As a long time perl guy I was attracted by <a class="zem_slink" title="Ruby (programming language)" href="http://www.ruby-lang.org/" rel="homepage">ruby</a>.  It&#8217;s very perl like method chaining is extremely useful and intuitive.  I like ruby, but the state of  ruby applications in a production environment is horrible.  There are plenty of really good tools out there for ruby developers.  Vagrant, sahara, bundler, capistrano, etc the list goes on.  RVM and rbenv are two really good alternatives for maintaining your development environment in a sane manner.  We are in the stone ages when it comes time to go to production.  Distro support for ruby is shaky at best.  Most places are still running centos/rhel5 which leaves them with ruby 1.8.5 or if lucky ruby 1.8.7.  If you&#8217;ve upgraded to a rhel6-ish you&#8217;re fortunate enough to get wait&#8230; ruby 1.8.7.  I&#8217;m not as familiar with debian but I&#8217;m fairly certain it&#8217;s 1.8.  Ubuntu has an available 1.9.1 package but that&#8217;s officially a beta version, plus most indications is that it&#8217;s extremely buggy.  As of writing ruby is on 1.9.3.  When it comes to rubygems the situation is even worse.  Most &#8216;best practices&#8217; recommend managing everything with gems.  This introduces a world of pain especially when you start installing things that are based on ruby but provide shell level commands (rackup, unicorn, etc).  Now you&#8217;ve got two package managers trying to determine the state of a system, but one of them only knows about one part of it.  It&#8217;s a mess.<span id="more-307"></span></p>
<p>Ruby development in general is moving very fast, most developers are working on 1.9 and likely 1.9.3.  Trying to stay on 1.8 means you may be stuck with libraries/gems/tools that don&#8217;t work as well as their 1.9 counterparts.  In addition you have to put up with constant complaints from the development side about why they have to run unfrozen caveman ruby and why can&#8217;t they use the latest tool/gem/whizzbang they want.  So now you roll up your sleeves and decide to upgrade your system ruby.  The &#8216;recommended&#8217; method for updating ruby is installing from source.  I love installing from source, I also love mowing my grass.  They are both mindless pursuits that I start and autonomously go through until I complete them.  There&#8217;s no shame in compiling and I don&#8217;t shy away from it, but it has its place.  That place is not on a production server.  It doesn&#8217;t scale, it introduces error and inconsistencies and isn&#8217;t reproducible.  I don&#8217;t want any of my production servers to even have a compiler on them if I can help it.  The next best alternative is rvm.  I love the concept of rvm (though not necessarily the implementation, I prefer rbenv there).  But if you tell me to use rvm on my production servers I&#8217;m going to laugh at you and ask you to come back when you have your big boy developer pants on.  Now I&#8217;m not only building ruby on every machine I have, I&#8217;m doing fancy shell tricks to determine my execution environment.  I&#8217;m also at the mercy of random files littered in directories for what libraries I can see, what binaries I&#8217;m going to use, etc.  How is this anything but a recipe for a long night with cold pizza and a bottle of scotch that ends with updating my resume?  RVM works great when it&#8217;s your environment on your laptop, but in my infrastructure it&#8217;s just not a viable solution.</p>
<p>What about packages you say.  Excellent question.  I&#8217;m a fan of packages, rpm in specific, but I have no objections to debs either (solaris sit down over there, you don&#8217;t have packages, you have tarballs there&#8217;s a difference).  I&#8217;m comfortable building packages, I&#8217;ll bust out a specfile to deploy 5 or so bash scripts cause it&#8217;s the right thing to do.  If your OS uses packages us it, as much as you can.  Not using your native package management system is like jumping out the second story window because you didn&#8217;t want to dent the carpet on the stairs.  Ruby packaging is ugly at least from the rpm side.  The 1.8 specfile won&#8217;t cleanly rebuild 1.9 and when you do get it to work, there are all sort of library issues abi compatibility problems and a host of other things.  Not all of this is ruby&#8217;s fault.  A fair amount of it lies with people distributing rpms of other things that use ruby but not following the correct dependency management techniques.  At the end of the day that doesn&#8217;t matter, building upgraded packages for ruby is non-trivial task.  It&#8217;s also a rabbit hole.  Rebuild ruby, well there&#8217;s 6 packages there (though in a single spec) as someone decided it was awesome to break each binary out into its own package.  Now rebuild rubygems.  Using anything OS level that depends on ruby, chances are good that spec writer locked the version to 1.8 so now you&#8217;re rebuilding that as well.  Don&#8217;t forget the random ruby C library extensions as well (ruby-mysql, ruby-shadow, etc).  At a certain point you wonder if it wouldn&#8217;t be easier to just maintain your own custom distro or pull your eyelids off with plyers.</p>
<p>Here&#8217;s where the real evilness starts to creep in.  You&#8217;ve now spent hours, days, weeks trying to work through technical debt and build a standard and repeatable environment to support development and are ready to pull your hair out.  The thought starts to creep in &#8216;Maybe it would be easier to run rvm, or build it on each box, how much extra work could it be&#8217;.  People don&#8217;t build crappy infrastructures intentionally, they make one small compromise after another until they are neck-deep in debt they have no idea how to pay off.</p>
<p>At this point the python folks are grinning from ear to ear (eggs and pip and the trouble they represent are another topic for discussion) because they&#8217;ve kinda moved past this.  For one python development benefits from not being as &#8216;trendy&#8217; as ruby/rails and the like.  They also benefit from the fact that redhat engineering, as well as ubuntu engineering are pretty heavy python shops.  They have a vested interest to make sure that python doesn&#8217;t suck at the OS level.</p>
<p>So where does that leave us?</p>
<ol>
<li>Build from source / use rvm (there&#8217;s no difference between the two other than shell magic) YUCK!</li>
<li>Package everything into rpms/debs (a ton of extra work, weird corner case breakage)</li>
<li>Something else</li>
</ol>
<p>Here&#8217;s my idea on something else, until the state of distro support of ruby is saner.</p>
<ul>
<li>package ruby into its own location (/opt/ruby/$version or something that makes you happy)</li>
<li>use bundle pack and bundle install &#8211;deployment</li>
</ul>
<p>Repackaging a language it&#8217;s own prefix is not my favorite plan but till I can sanely update ruby OS wide it&#8217;ll have to do.  You still are going to need to do PATH tricks or edit the shebangs on every script in order for things to work right, but this way we&#8217;re not installing ruby 17 times b/c we run 17 apps on a single machine.  I do not install gems here, with 1 exception.  I install bundler.  If you&#8217;re working with ruby or supporting ruby and you are not using bundler then you need to be shot (here yeller, here boy&#8230; that&#8217;s a good dog).</p>
<p>Once you start using bundler, use bundle pack.  This tells bundler to install gem dependencies in the vendor/cache directory of your application.  You should then put Gemfile.lock under revision control (or include it in your deployment packaging).  This will enable you to run bundle install &#8211;deployment on your production environment.  The &#8211;deployment flag tells bundler to avoid running gem install and use the vendor/cache directory.  This keeps all of your application gems &#8216;inside&#8217; your application.  Which means you avoid messes with wrongly &#8216;activated&#8217; gems, accidental version upgrades etc.  You do need to remember to run any commands under bundle exec (like bundle exec rake db:migrate) else you&#8217;ll start running into subtle errors, but the trade-off in sanity is worth it.</p>
<p>Hopefully as ruby adoption continues this state of affairs will get better.  Better OS packages are a start.  Standards around deployment like bundler are a must.  I&#8217;d really like to see a gem-&gt;rpm/deb integration rather than continued fractured directions but I&#8217;m not sure that&#8217;s much on anyone else&#8217;s radar.  It all (almost) makes me pine for the days of installing everything with CPAN.</p>
<br />Filed under: <a href='http://onastick.wordpress.com/category/ramblings/'>Ramblings</a>, <a href='http://onastick.wordpress.com/category/sysadminery/'>Sysadminery</a>, <a href='http://onastick.wordpress.com/category/technology/'>technology</a> Tagged: <a href='http://onastick.wordpress.com/tag/deployment/'>deployment</a>, <a href='http://onastick.wordpress.com/tag/development/'>development</a>, <a href='http://onastick.wordpress.com/tag/programming/'>Programming</a>, <a href='http://onastick.wordpress.com/tag/revision-control/'>Revision control</a>, <a href='http://onastick.wordpress.com/tag/ruby/'>ruby</a>, <a href='http://onastick.wordpress.com/tag/rubygem/'>RubyGem</a>, <a href='http://onastick.wordpress.com/tag/tools/'>Tools</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onastick.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onastick.wordpress.com/307/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=307&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onastick.wordpress.com/2011/11/05/the-horrible-state-of-ruby-in-a-production-environment/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/10dcfb54c464136b8be684b80ddd3515?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">stickm13</media:title>
		</media:content>
	</item>
		<item>
		<title>puppet and vim</title>
		<link>http://onastick.wordpress.com/2011/03/30/puppet-and-vim/</link>
		<comments>http://onastick.wordpress.com/2011/03/30/puppet-and-vim/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 16:54:00 +0000</pubDate>
		<dc:creator>stick</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Sysadminery]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[editors]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[textmate]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://onastick.wordpress.com/?p=299</guid>
		<description><![CDATA[I&#8217;ve been using vi/vim for nearly my entire professional life, and most of my computer life as well. I gave emacs an honest try for a couple of days a few years ago but just couldn&#8217;t grok the shortcuts and make it feel natural. Recently I overhauled my setup on my laptop and in specific [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=299&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been using vi/vim for nearly my entire professional life, and most of my computer life as well.  I gave emacs an honest try for a couple of days a few years ago but just couldn&#8217;t grok the shortcuts and make it feel natural.  Recently I overhauled my setup on my laptop and in specific tuned to to what I generally spend a lot of development time on&#8230; puppet.<br />
<span id="more-299"></span><br />
First things first I turned my .vim directory into a git repo (published here <a href="http://github.com/stick/vimfiles" rel="nofollow">http://github.com/stick/vimfiles</a>).  This makes it pretty easy for me to keep track of what changes I made and why, till you spend a few years with it there&#8217;s a bit of black magic in how the more advanced parts of vim work.  So after I wholesale cleaned out my .vim directory I started essentially fresh.</p>
<p>First plugin I use is pathogen, it&#8217;s a must and the only plugin that actually resides in the normal places in vim&#8217;s rc directory.  Pathogen allows you to define a bundle directory (~/.vim/bundles by default) and will load plugins in whole from that tree.  That allows each plugin to have it&#8217;s own tree and you don&#8217;t get file collisions etc.  It also makes it super easy to enable or disable a plugin.</p>
<p>I won&#8217;t go into super detail on all the vim&#8217;ness that I&#8217;ve setup most of it is from this <a href="http://stevelosh.com/blog/2010/09/coming-home-to-vim/">great article</a>.  I&#8217;m not a pure developer so some of the things I don&#8217;t use but the plugins he recommends are spot on.</p>
<p>One of the core tenets in puppet is to not duplicate work, it even gets enforced to a certain degree with not being able to duplicate resources.  When you combine this the the recommended module structure and correct use of the autoloader and you will find yourself creating a lot of manifest files.  There are two things I use that help with this.  One is a template plugin, the other is snipmate.  The template plugin comes into play whenever I create a new file, I have a skeleton directory that contains stub for different filetypes.  When I edit a new file it reads in that template, interpolates a few tokens and inserts it into my new file buffer.  I always work on modules from the top of the module (makes moving easier and helps with the git side of things I think).  So in my ssh module when I do:</p>
<p><code>$ vi manifests/server.pp </code></p>
<p>I get a file that looks like:</p>
<div id="attachment_302" class="wp-caption alignright" style="width: 160px"><a href="http://onastick.files.wordpress.com/2011/03/new-manifest.png"><img class="size-thumbnail wp-image-302" title="new-manifest" src="http://onastick.files.wordpress.com/2011/03/new-manifest.png?w=150&#038;h=89" alt="Edit a new manifest file" width="150" height="89" /></a><p class="wp-caption-text">This file didn&#039;t exist prior to editing.</p></div>
<p>If you notice the header comment is mostly filled out, the class declaration is already set and a few other things.  How does this work?  Well the skeleton file has tokens in it that I have defined (called tags, which is a bit of an overload of the term).  That tag can be a simple string or you can use vi&#8217;s scripting language to a certain extent to figure things out.  In the case of the class declaration I know that I almost always work in the top dir of a module so I know what module I&#8217;m in from that. Then the autloader in puppet has very specific rules how how filenames translate to classes so I take advantage of that with a little substitute.  The template plugin I use is eteSkeleton, I liked how relatively simple it was, however I did have to fork it and fix a few things with it.  The original source is <a href="https://github.com/vim-scripts/eteSkeleton">here</a>, my fork is <a href="https://github.com/stick/eteSkeleton">here</a> and my specific tags file is <a href="https://github.com/stick/vimfiles/blob/master/skeleton/tags/eteSkeleton.tags">here</a> to see how I did the class logic.</p>
<p>I also use snipmate to create definitions, language constructs etc within manifests.  Snipmate lets you type if and get a completed if statement that you can tab through the various elements of.  Those familiar with TextMate will recognize it instantly.  My snippets file for puppet is <a href="https://github.com/stick/vimfiles/blob/master/snippets/puppet.snippets">here</a>, it was originally done by R.I. Pienaar but I modified it to match my personal syntax style etc.</p>
<p>Syntax highlighting is pretty simple, there&#8217;s a puppet.vim that&#8217;s included in the puppet source tree, it defines the groups and objects and how to highlight them, then you can control the colors through vim&#8217;s colorschemes.  I don&#8217;t change my colors from the default, I just tweak my terminal settings to brighten up some of the colors (dark blue on black specifically).</p>
<p>ftdetect/puppet.vim handles file detection of manifest files, there&#8217;s a lot of things that are keyed off of set filetype=puppet, this just matches *.pp.  There&#8217;s not really a case where I&#8217;m editing a manifest and it&#8217;s not a .pp so we don&#8217;t have to read lines or anything to determine filetype, if we did that would go here.  ftplugin/puppet.vim contains any filetype specific settings I want for puppet.</p>
<p><code>kp=pi</code> looks a little cryptic.  kp is shorthand for kewordprg (or keyword program).  This defines the program that vim will run when you press &#8216;K&#8217; (note the capital) in normal mode.  In stock vim if you try this on a word it will run man  (cword is vim-speak for word under cursor).  pi is actually shipped as part of puppet (at least it&#8217;s in the gem install) as an analog to ri (ruby documentation).  It acts exactly the same as puppet describe.  This means that in a manifest I can position the cursor on say an &#8216;exec&#8217; resource that I&#8217;m writing and hit &#8216;K&#8217; and it&#8217;ll shell out and run <code>pi exec</code> (puppet describe exec) and give me all the resource documentation for that version of puppet (assuming I&#8217;m on a box that has puppet installed).  This is great when I can&#8217;t remember the exact attribute on a resource or similar.  My only complaint is that pi doesn&#8217;t page when it returns a lot of text (see <code>pi file</code>) and it&#8217;s annoying to have to page up to start reading (I run 100% of the time in screen and have my pageup key mapped to copymode).  But wait I have a solution.  Vim always runs <code>&amp;kp </code> so I can&#8217;t really set kp to something with a pipe and pager in it.  If you try: <code>:set kp="pi  | less -F"</code> you will end up running: <code>pi exec |less -F exec</code>as kp always appends .  So in my .bashrc I define the following:</p>
<pre>function pi() {
  command pi "$@" | less -F
}</pre>
<p>This defines a local bash function called pi which calls pi with whatever arguments were passed and pipes it to less -F (-F only paging if there&#8217;s more than 1 screen of text).  The command construct in bash prevents a loop between the function and the actual command.  It also allows the path to be used rather than hardcoding <code>/usr/bin/pi</code> which would have the same net effect.  It&#8217;s a tad more portable.  Now in vim when I cursor over a resource and hit &#8216;K&#8217; I get nice puppet documentation without having to switch windows or anything.  Be aware that since it&#8217;s a locally defined function you have to set <code>set shellcmdflag=-ic </code> in your .vimrc else when vim shells out the function won&#8217;t be defined.  I could also make a shell command in my path somewhere and use that as that adding the &#8216;i&#8217; flag to the shell causes it to bg vim in certain circumstances as it&#8217;s an interactive shell now.</p>
<p>The surround plugin is great for throwing quotes or curlys around things, since puppet uses two different syntaxes for variables when they are quoted vs bare, I use that alot to wrap a variable in curlys.  The normal mapping (see surround&#8217;s documentation) to do that is: <code>ysiw}</code>.  Cryptic and hard to remember?  Yup.  Basically it&#8217;s &#8216;ys&#8217; (you surround); &#8216;iw&#8217; (inner word, :h text-objects will change your life), &#8216;}&#8217;.  The surround plugin uses the left brace to surround with spaces and the right brace to surround without.  I map this to <code>}</code> to make it easy.</p>
<p>NERD_Commenter (a very awesome plugin to do filetype/language specific comments) uses a dictionary for filetypes to define additional comment characters.</p>
<pre>let g:NERDCustomDelimiters = {
      \ 'puppet': { 'left': '#', 'leftAlt': '/*', 'rightAlt': '*/' }
      \ }</pre>
<p>This defines the comment character (and alternate comment character) for puppet filetypes.  Using NERD_Commenter you can switch between shell style and c-style comments.  Do things like visually select a block and comment it one swoop, and uncomment sections really easily.</p>
<p>Puppet resources use fat comma&#8217;s to specify parameters.  The style guide (and I tend to agree) states that all co-located fat commas should be aligned based on the longest parameter in the list.  Fixing that is tedious and annoying.  This is where the &#8216;Align&#8217; plugin comes in handy.  Align can do a million things to reformat text, but simply for this case I only use it for fat commas.   I want to select a block of text with visual select mode (greatest thing in vim ever btw).<br />
Then run <code>:Align =&gt;</code>.  This will align everything on those delimiters.  I have this mapped to = in my .vimrc.  I don&#8217;t use tabs so there might be additional settings to get it to align with tabs instead of spaces, but I think it honors expandtab and smarttab as needed.</p>
<p>I have ctags and taglist setup to integrate with puppet, but I&#8217;m finding myself not really using it much.  I tend to think in the autoloaders terms and just open a new window/etc to what I need to look up rather than use vim to jump back and forth.  If I could get it setup such that when I cursor over a statement like:<br />
<code>include ssh::server</code>and hit ] (which causes a taglookup); it would then take me to where class ssh::server was defined I would probably use it more, but since &#8216;::&#8217; isn&#8217;t a part of a word boundary that doesn&#8217;t work.  I got the ctags configuration from <a href="nasrat.livejournal.com/51482.html ">Nasrat</a> and it works great, I just haven&#8217;t really figured out how to integrate it into my coding-workflow.  If anyone has any more practical enhancements or advice leave them in the comments.</p>
<p>Syntax checking is a must.  I&#8217;ve written a couple of shell scripts to wrap around <code>puppet --parseonly</code> to check a whole module, do erb checking etc etc.  Then I found syntastic.  Syntastic is simply put&#8230; fan-fucking-tastic.  It supports doing syntax checking based on filetype so you can change things per language.  Vim has always had the &#8216;make&#8217; and &#8216;makeprg&#8217; settings but syntastic wraps that up in a nice package and gives you a way to extend it.  It also provides a function you can put in your statusline to alert you when you open (or save) a file that the file has syntax errors (and where they are).</p>
<p>A quick aside about the statusline.  I used to hate it, this ugly white line at the bottom that broke up the visual and flow of the text and really didn&#8217;t contain anything useful.  Then I discovered how to change it and fill it with all sorts of useful information.  All of my statusline settings (with the exception of setting laststatus=2 in .vimrc) are found in <a href="https://github.com/stick/vimfiles/blob/master/plugin/statusline.vim">statusline.vim</a>.</p>
<p>The code found in <a href="https://github.com/stick/vimfiles/blob/master/syntax_checkers/puppet.vim">syntax_checkers/puppet.vim</a> defines the proper makeprg and does the other syntastic setup.  The hard part is getting the errorformat set correctly.  Vim often times bails back home to it&#8217;s &#8216;C&#8217; roots and this is one of those times.  errorformat (:h errorformat for in depth information) is a pattern that will be matched against the output of the makeprg (in this case puppet apply &#8211;parseonly &#8230; ).  The difficulty is it&#8217;s not a regular expression, it&#8217;s a scanf expression.  scanf is an older c routine for matching single or multiline text and it&#8217;s a bit cryptic and confusing.  Give me a regex anyday, you combine that with how vim needs things escaped and it was a chore.  But it&#8217;s done now and hopefully I&#8217;ve saved you some time.  Puppets parse-only option it&#8217;s terribly smart.  Once it finds a single error it will stop parsing.  I talked to Luke about this and it&#8217;s a limitation of the DSL in ruby.  The parser can&#8217;t really continue once it finds and error so it doesn&#8217;t have any way to report on all the errors.  The net result is that if you sit down and bang out a manifest really fast then syntax check it, you&#8217;ll get the first error, fix it, save see the second, etc etc etc.  Still nicer than having to quit, run puppet, edit, fix, and repeat.  Be aware that forcing a syntax check each time the buffer is opened does slow vim down a bit (well not really vim, it&#8217;s just waiting on puppet), so if you notice it and it bothers you (it doesn&#8217;t me) look at syntastic documentation on how to disable it and only turn it on when you want it.  I&#8217;m toying around with seeing if I can get syntastic to check against running puppet in noop mode to catch things like duplicate definitions and other things that parser doesn&#8217;t deal with, but there&#8217;s a lot to ignore and filter through and noop mode generates a lot of output since it&#8217;s not really changing anything.  I&#8217;m also not sure if it&#8217;s all that useful at that phase, I generally do a lot of sandbox and vm testing anyway which I would still have to do.  I&#8217;m sure if someone wanted to write a specific parser for manifests that was smarter than parseonly but friendlier than noop there would be beer and scotches all around, but I tend to think most of us are more interested in writing actual manifests than something to check manifests.</p>
<p>That&#8217;s all of my puppet specific vim setup, my entire vim tree is online at <a href="http://github.com/stick/vimfiles" rel="nofollow">http://github.com/stick/vimfiles</a> and is mostly documented as to what various things do.  All the credit for the various plugins goes to their authors, the vim community is really good, just spend a bit getting to know vim before you jump in.</p>
<p>Happy puppeteering!</p>
<br />Filed under: <a href='http://onastick.wordpress.com/category/ramblings/'>Ramblings</a>, <a href='http://onastick.wordpress.com/category/sysadminery/'>Sysadminery</a>, <a href='http://onastick.wordpress.com/category/technology/'>technology</a> Tagged: <a href='http://onastick.wordpress.com/tag/coding/'>coding</a>, <a href='http://onastick.wordpress.com/tag/development/'>development</a>, <a href='http://onastick.wordpress.com/tag/editors/'>editors</a>, <a href='http://onastick.wordpress.com/tag/git/'>git</a>, <a href='http://onastick.wordpress.com/tag/puppet/'>puppet</a>, <a href='http://onastick.wordpress.com/tag/textmate/'>textmate</a>, <a href='http://onastick.wordpress.com/tag/vim/'>vim</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onastick.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onastick.wordpress.com/299/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=299&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onastick.wordpress.com/2011/03/30/puppet-and-vim/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/10dcfb54c464136b8be684b80ddd3515?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">stickm13</media:title>
		</media:content>

		<media:content url="http://onastick.files.wordpress.com/2011/03/new-manifest.png?w=150" medium="image">
			<media:title type="html">new-manifest</media:title>
		</media:content>
	</item>
		<item>
		<title>oh hey, look! New blog&#8230;</title>
		<link>http://onastick.wordpress.com/2011/02/02/oh-hey-look-new-blog/</link>
		<comments>http://onastick.wordpress.com/2011/02/02/oh-hey-look-new-blog/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 05:07:59 +0000</pubDate>
		<dc:creator>stick</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[promises]]></category>
		<category><![CDATA[slicehost]]></category>

		<guid isPermaLink="false">http://onastick.wordpress.com/?p=295</guid>
		<description><![CDATA[I make no promises, I probably won&#8217;t update this iteration any more frequently than I did my old blog.&#160; But i am going to try, whatever that&#8217;s worth.&#160; Why the move?&#160; A couple of things.&#160; Mainly I got really tired of having to upgrade wordpress every time I wanted to use it.&#160; So I&#8217;m lazy [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=295&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I make no promises, I probably won&#8217;t update this iteration any more frequently than I did my old blog.&nbsp; But i am going to try, whatever that&#8217;s worth.&nbsp; Why the move?&nbsp; A couple of things.&nbsp; Mainly I got really tired of having to upgrade wordpress every time I wanted to use it.&nbsp; So I&#8217;m lazy and will let wordpress.com do it for me.&nbsp; This also frees up my slicehost for some other things I want to do with it, hopefully the results of that will end up here.&nbsp; My tiny slicehost was getting hammered by bing and google whenever they did indexing.&nbsp; Mysql would freak out apache would refuse to keep up and things would spiral.&nbsp; It was annoying.&nbsp; If you read this regularly (all 2 of you) you saw a &#8216;shoo&#8217; page up for a while, this was me seeing if the spider/mysql interaction was the culprit of my slicehost panicking about once a week.&nbsp; Turns out it was, or it&#8217;s plausible enough to be a reason.&nbsp; I never really liked running mysql just for a tiny blog on a little server anyway.&nbsp; So here we are.&nbsp; I&#8217;m actually going to try to blog more, now that my job is new and exciting and I&#8217;m doing some interesting things rather than trying to figure out the best way to gouge my eyes out during a meeting I hopefully will have some interesting (at least to me) things to talk about.</p>
<p>If I&#8217;ve done something horrible to the rss feed or anything let me know in the comments.&nbsp; I&#8217;ll likely leave the redirect around for a while, I doubt that I&#8217;ll shell out for the domain premium, especially considering wordpress.com want&#8217;s you to move registration rather than just an A record&#8230;. Hello? No.</p>
<p>The new address is <a href="http://onastick.wordpress.com" rel="nofollow">http://onastick.wordpress.com</a> hopefully I&#8217;ll do more with it.</p>
<br />Filed under: <a href='http://onastick.wordpress.com/category/ramblings/'>Ramblings</a> Tagged: <a href='http://onastick.wordpress.com/tag/blog/'>blog</a>, <a href='http://onastick.wordpress.com/tag/mysql/'>mysql</a>, <a href='http://onastick.wordpress.com/tag/promises/'>promises</a>, <a href='http://onastick.wordpress.com/tag/slicehost/'>slicehost</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onastick.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onastick.wordpress.com/295/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=295&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onastick.wordpress.com/2011/02/02/oh-hey-look-new-blog/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/10dcfb54c464136b8be684b80ddd3515?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">stickm13</media:title>
		</media:content>
	</item>
		<item>
		<title>The Letter I wrote Yesterday&#8230;</title>
		<link>http://onastick.wordpress.com/2010/12/07/the-letter-i-wrote-yesterday/</link>
		<comments>http://onastick.wordpress.com/2010/12/07/the-letter-i-wrote-yesterday/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 16:30:04 +0000</pubDate>
		<dc:creator>stick</dc:creator>
				<category><![CDATA[Ramblings]]></category>

		<guid isPermaLink="false">http://www.miscellaneous.net/?p=274</guid>
		<description><![CDATA[After 7.5 years I have resigned from my position at Red Hat.  I&#8217;m starting a new gig in January at a small company called AirDat.  It was a tough decision, but ultimately one that I&#8217;m happy with.  There are certainly things I&#8217;ll miss, mostly the people.  But it&#8217;s time for a new chapter in my [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=274&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>After 7.5 years I have resigned from my position at Red Hat.  I&#8217;m starting a new gig in January at a small company called AirDat.  It was a tough decision, but ultimately one that I&#8217;m happy with.  There are certainly things I&#8217;ll miss, mostly the people.  But it&#8217;s time for a new chapter in my professional life.  I&#8217;m not moving, will still be here in RDU.  My goodbye to our company wide mailing list is after the jump.</p>
<p><span id="more-274"></span>Wow, this is a hard email to write, one that ultimately I knew someday<br />
I&#8217;d write but never really expecting when I would write it.</p>
<p>After 7 and a half years I&#8217;m leaving Red Hat.  It was a tough decision<br />
and one that hasn&#8217;t been taken lightly.</p>
<p>As with most endings it&#8217;s bitter sweet.  I&#8217;m excited for my new<br />
opportunity and a what it holds.  I&#8217;m sad to be leaving a really great<br />
company, probably more than just a company but truly a culture.  I&#8217;m<br />
most sad about leaving many friends and colleagues.  There are a lot of<br />
relationships built over the better part of a decade and while they are<br />
not torn asunder they are changed.</p>
<p>What once was RHN has been long gone, but those that were a part of it<br />
remain, some still at Red Hat in different roles, others moved on to<br />
other things.  RHN was almost a culture within a culture.  That time,<br />
and the relationships that developed out of it are some of the high<br />
points of the last 7 years.</p>
<p>IT never gets enough credit.  There are a lot of really smart, really<br />
passionate people in IT and yet they are vilified at worst and<br />
overlooked at best in most cases.  Next time you congratulate a team on<br />
a project well done or a milestone achieved, remember that in all likely<br />
hood not a bit of it would have been possible if IT hadn&#8217;t silently been<br />
doing their job.</p>
<p>I guess there&#8217;s a certain amount of irony that despite 7.5 years, 2<br />
departments and numerous managers I&#8217;ve never posted to memo-list till<br />
now.  Not that I don&#8217;t believe in it.  In fact quite the opposite, it<br />
serves a very important purpose and despite it&#8217;s annoyances (and ability<br />
to distract us and fill up our mailboxes), it underlines one of the core<br />
tenets, openness.</p>
<p>So after all these years and with a heavy heart I take my leave,<br />
wishing everyone the best.  What Red Hat does and more importantly<br />
*how* they do it is what makes all the difference in this place.<br />
Without &#8216;The Red Hat Way&#8217; this place is just a company like any other.<br />
I&#8217;ve seen that &#8216;way&#8217; change over the years and we&#8217;ve survived and<br />
thrived as a result.  Hopefully that trend will continue, but it takes<br />
everyone, from the top down to embrace what makes this place special in<br />
order to maintain it.</p>
<p>I hope that everyone, who wishes, keeps in touch.  My last day isn&#8217;t<br />
until 12/17 so I&#8217;ll be around the building till then.  I&#8217;ll still be in<br />
the RDU area (where I&#8217;m headed is no secret but better discussed over<br />
lunch or a cold beer).  I&#8217;ll still be on freenode, and I can always be<br />
found at stick (at) miscellaneous (dot) net.</p>
<br />Filed under: <a href='http://onastick.wordpress.com/category/ramblings/'>Ramblings</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onastick.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onastick.wordpress.com/274/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=274&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onastick.wordpress.com/2010/12/07/the-letter-i-wrote-yesterday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/10dcfb54c464136b8be684b80ddd3515?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">stickm13</media:title>
		</media:content>
	</item>
		<item>
		<title>A Great Dinner</title>
		<link>http://onastick.wordpress.com/2010/06/27/a-great-dinner/</link>
		<comments>http://onastick.wordpress.com/2010/06/27/a-great-dinner/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 15:04:51 +0000</pubDate>
		<dc:creator>stick</dc:creator>
				<category><![CDATA[Food]]></category>
		<category><![CDATA[Ramblings]]></category>

		<guid isPermaLink="false">http://www.miscellaneous.net/?p=262</guid>
		<description><![CDATA[Yesterday T and I celebrated our 11 year wedding anniversary.  Yes, she&#8217;s put up with me for 11 years, longer actually, but you generally stop counting that other time once you get married.  My Mother (thanks) came over and watched the kids, while we went out to dinner at Second Empire.  It was really nice [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=262&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Yesterday T and I celebrated our 11 year wedding anniversary.  Yes, she&#8217;s put up with me for 11 years, longer actually, but you generally stop counting that other time once you get married.  My Mother (thanks) came over and watched the kids, while we went out to dinner at <a href="http://www.second-empire.com">Second Empire</a>.  It was really nice going out to someplace just to eat dinner, no crayons, no kids menu, a nice relaxing long meal with excellent service.  The food was excellent, I started with a glass of Macallan 18 (on the rocks, quiet John it releases the flavor) while T got a half bottle of Baileyana Pinot Noir.  I geeked out a little bit and took some pictures of the food, which amused the matre d&#8217; a bit.  Since I wasn&#8217;t the health inspector or a food critic he didn&#8217;t really care.  We had a nice 3 course meal, I had savory dessert and went with a cheese tray and wonderful cabernet sauvignon, while T went with a sweet dessert.  The food, service, and presentation were awesome it was a perfect night, I thought the cheese tray was the best part of the meal, but T&#8217;s cajun rib-eye was a close second.  Pictures and descriptions after the jump.</p>
<p><span id="more-262"></span></p>
<p>First Course</p>
<object type="application/x-shockwave-flash" width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=1.161" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="photo_id=0&amp;photo_secret=0&amp;flickr_show_info_box=true"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=1.161"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="opaque"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=1.161" bgcolor="#000000" allowfullscreen="true" flashvars="photo_id=0&amp;photo_secret=0&amp;flickr_show_info_box=true" wmode="opaque" height="300" width="400"></embed></object>
<p>T &#8211; PAN-FRIED GULF SHRIMP &amp; CHORIZO SAUSAGE EMPANADA &#8211; roasted cumin N.C. sweet potatoes, pear&amp; fennel salsa, dried cranberries, scallion dough, roasted chipotle &amp; black bean jus</p>
<object type="application/x-shockwave-flash" width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=1.161" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="photo_id=0&amp;photo_secret=0&amp;flickr_show_info_box=true"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=1.161"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="opaque"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=1.161" bgcolor="#000000" allowfullscreen="true" flashvars="photo_id=0&amp;photo_secret=0&amp;flickr_show_info_box=true" wmode="opaque" height="300" width="400"></embed></object>
<p>C &#8211; SMOKED SEAFOOD SALAD &#8211; pickled succotash, butternut squash, corn, snow peas, mustard greens &amp; baby romaine, molasses &amp; juniper vinaigrette</p>
<p>Second Course (no pictures <img src='http://s0.wp.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> )</p>
<p>T &#8211; CAJUN PAN-ROASTED CERTIFIED ANGUS BEEF RIBEYE &#8211; capellini pasta &amp; pancetta ham casserole, sweet garlic-braised escarole, ratatouille, sweet potato purée, chipotle &amp; mango butter</p>
<p>C &#8211; CAJUN-SEASONED DIVER SEA SCALLOPS &#8211; pan-fried green tomato &amp; smoked gouda cheese stack, spinach, crispy pork belly, wasabi sweet potatoes, celery root, veal &amp; white truffle jus</p>
<p>Dessert</p>
<p>T &#8211; Empire Chocolate Soufflé &#8211; classic chocolate soufflé baked to order, topped with powdered sugar, served with chantilly cream</p>
<object type="application/x-shockwave-flash" width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=1.161" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="photo_id=0&amp;photo_secret=0&amp;flickr_show_info_box=true"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=1.161"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="opaque"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=1.161" bgcolor="#000000" allowfullscreen="true" flashvars="photo_id=0&amp;photo_secret=0&amp;flickr_show_info_box=true" wmode="opaque" height="300" width="400"></embed></object>
<p>C &#8211; Cheese Tray &#8211; Drunken Goat, Morbier, Smoked Gouda</p>
<br />Filed under: <a href='http://onastick.wordpress.com/category/food/'>Food</a>, <a href='http://onastick.wordpress.com/category/ramblings/'>Ramblings</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onastick.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onastick.wordpress.com/262/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=262&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onastick.wordpress.com/2010/06/27/a-great-dinner/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/10dcfb54c464136b8be684b80ddd3515?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">stickm13</media:title>
		</media:content>
	</item>
		<item>
		<title>Song Deconstruction: Cosmic Love</title>
		<link>http://onastick.wordpress.com/2010/06/09/song-deconstruction-cosmic-love/</link>
		<comments>http://onastick.wordpress.com/2010/06/09/song-deconstruction-cosmic-love/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 22:33:13 +0000</pubDate>
		<dc:creator>stick</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.miscellaneous.net/?p=251</guid>
		<description><![CDATA[My good friend Jason turned me on to this song &#8220;Cosmic Love&#8221; by Florence and the Machine.  It&#8217;s a really amazing song and right now one of my favorites.  Lyrically it&#8217;s kinda sad and beautiful at the same time, but the way she scream/sings through the lyrics, the use of the heavy beating drum, it&#8217;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=251&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>My good friend Jason turned me on to this song &#8220;Cosmic Love&#8221; by Florence and the Machine.  It&#8217;s a really amazing song and right now one of my favorites.  Lyrically it&#8217;s kinda sad and beautiful at the same time, but the way she scream/sings through the lyrics, the use of the heavy beating drum, it&#8217;s really awesome.  Great to sing in the car, great to listen to loud.  There&#8217;s a tone of sacrifice in her words that comes out that I really like.  I spent today listening to it at work a bunch of times and in the car on the way home trying to memorize the lyrics and more specifically the meter.  She sings the chorus a tad different each time, with a little bit more emotion and a the music is a little more frenetic, it&#8217;s great the way it builds. This is one of those songs that I don&#8217;t think about what it says, or what it&#8217;s trying to convey I just love to listen to it and sing it.</p>
<p>I picked up the whole album based solely on this song, the one most people have heard &#8220;Kiss With A Fist&#8221; is fun and poppy, I haven&#8217;t given the whole album a good solid listen yet to make a judgement on the rest but so far Cosmic Love completely carries it.</p>
<br />Filed under: <a href='http://onastick.wordpress.com/category/ramblings/'>Ramblings</a> Tagged: <a href='http://onastick.wordpress.com/tag/music/'>music</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onastick.wordpress.com/251/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onastick.wordpress.com/251/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onastick.wordpress.com&#038;blog=19419720&#038;post=251&#038;subd=onastick&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onastick.wordpress.com/2010/06/09/song-deconstruction-cosmic-love/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/10dcfb54c464136b8be684b80ddd3515?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">stickm13</media:title>
		</media:content>
	</item>
	</channel>
</rss>
