<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Mat Trudel</title>
 <link href="http://longbeard.org/atom.xml" rel="self"/>
 <link href="http://longbeard.org/"/>
 <updated>2010-07-13T16:39:19-07:00</updated>
 <id>http://longbeard.org/</id>
 <author>
   <name>Mat Trudel</name>
   <email>mat@geeky.net</email>
 </author>

 
 <entry>
   <title>Hello filewall</title>
   <link href="http://longbeard.org/2010/07/13/hello-filewall.html"/>
   <updated>2010-07-13T00:00:00-07:00</updated>
   <id>http://longbeard.org/2010/07/13/hello-filewall</id>
   <content type="html">&lt;h1&gt;Hello filewall&lt;/h1&gt;

&lt;p&gt;I'm sick of firewalls. I'm sick of how arcane and arbitrary their config systems are. I'm sick of the fact that they're never really reproducible, and that only one guy in most organizations understands their network (mostly because that guy was usually me).&lt;/p&gt;

&lt;p&gt;On the other hand, I've always liked &lt;a href=&quot;http://shorewall.net&quot;&gt;shorewall&lt;/a&gt;. Its config language has always seemed very flexible and easy to grok, it has great documentation, and since it's just iptables under the covers, there's no magic to it. Thinking about things further, I realized that most of my pain points were really more about how people go about setting up firewalls than about firewalls themselves. Such a central and yet seldom-touched piece of infrastructure is exactly the kind of place you want repeatability and process, and exactly the wrong place for ad-hoc hacks. Hence, &lt;a href=&quot;http://github.com/well/filewall/&quot;&gt;filewall&lt;/a&gt; was born.&lt;/p&gt;

&lt;p&gt;In one line, &lt;strong&gt;git + capistrano + shorewall = filewall&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Filewall is a mix of capistrano and shorewall that lets you keep your firewall configuration in SCM, and lets you deploy it to your routers in a simple, sane and structured way. It takes a great firewall and marries it to a great deployment system to make a great deployable firewall. Wicked.&lt;/p&gt;

&lt;p&gt;Changes made with filewall are safely deployable; deployments incorporate a dead-man switch, wherein the rule changes are temporarily turned up for a timeout duration, and actually made permanent only if you subsequently affirm that they do what you intended them to. If you accidentally fry your config, filewall will restore your old configuration as soon as the timeout expires. You'll never be locked out again.&lt;/p&gt;

&lt;p&gt;Committed configurations are immediately wired into the filesystem, so your firewall works predictably across reboots. And since it's &lt;a href=&quot;http://capify.org&quot;&gt;capistrano&lt;/a&gt; based, you have access to all the rollback awesomeness that capistrano provides.&lt;/p&gt;

&lt;p&gt;If you're responsible for a more complex network, you can easily store all of your configurations as branches and keep all of your sensitive network config in one place, keeping all of your routers locked up with one public key. And don't forget that software routers are &lt;a href=&quot;http://freedomhec.pbworks.com/f/linux_ip_routers.pdf&quot;&gt;fast&lt;/a&gt;, so you probably won't be outgrowing filewall anytime soon (and even if you do, filewall is hardware agnostic. As long as it runs Debian, it runs filewall).&lt;/p&gt;

&lt;p&gt;So say hi to &lt;a href=&quot;http://github.com/well/filewall/&quot;&gt;filewall&lt;/a&gt;. It's what you want.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>75Ω</title>
   <link href="http://longbeard.org/2010/06/04/75%CE%A9.html"/>
   <updated>2010-06-04T00:00:00-07:00</updated>
   <id>http://longbeard.org/2010/06/04/75Ω</id>
   <content type="html">&lt;h1&gt;75Ω&lt;/h1&gt;

&lt;p&gt;Ryan Tomayko's &lt;a href=&quot;http://tomayko.com/writings/unicorn-is-unix&quot;&gt;post about Unicorn&lt;/a&gt; is one of my favourite pieces of the past year. He's spot on the money that despite all of the change in the past several decades of systems development, idiomatic use of the Posix APIs will still carry the day. And it got me to thinking about the differences between the (majority of) the Ruby / Python community and how it contrasts to the PHP / Java community in terms of embracing idioms and striking a balance between tools doing too much and too little. I'm christening this concept &lt;em&gt;tooling impedance&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;What we do as developers today isn't any different than how developers worked twenty years ago. We still create text files that get parsed and transmogrified by a compiler (or an interpreter, but that's immaterial to my point). We still write code and work with relation to a filesystem. While we've graduated from linear style to a nearly universal embrace of objects, the way we actualize these concepts is still file-and-compilation-unit-centric.&lt;/p&gt;

&lt;p&gt;Despite the seemingly immutable nature of our code, there has been an explosion of IDEs over the past decade or so. As a consequence, the complexity of tooling relative to code has risen far above what it once was. I'm not suggesting that we all need to go back to using &lt;code&gt;ed&lt;/code&gt; to get things done, but I think it's certainly worth taking a step back from the tooling landscape before we suffocate underneath IDEs.&lt;/p&gt;

&lt;p&gt;I remember Reg Braithwaite's &lt;a href=&quot;http://weblog.raganwald.com/2008/07/l-is-not-code-smell.html&quot;&gt;excellent talk&lt;/a&gt; at RubyFringe a number of years ago, and one of the quotes he offered up therein:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&quot;All problems can be solved by adding another layer of abstraction, except the problem of having too many layers of abstraction.&quot;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I defy anyone out here to try and extend Eclipse without writing any code. As an IDE, it presents so much abstraction between the screen and the filesystem that it's often not always even clear &lt;em&gt;which&lt;/em&gt; file you're operating on. An IDE that 'helps you' by abstracting away the &lt;em&gt;fundamental metaphor of development&lt;/em&gt; is doing you a tremendous disservice, all the more so if it's coddling you into believing that those metaphors are dead. Introducing this kind of impedance mismatch into the development cycle may help you as long as you're inside the walls of the IDE, but find yourself outside those walls, and you end up having to recreate those abstractions on your own.&lt;/p&gt;

&lt;p&gt;Fuck that noise.&lt;/p&gt;

&lt;p&gt;Whether or not vi / emacs / TextMate is forever isn't at all important. What &lt;em&gt;is&lt;/em&gt; important is that they all treat code as text, and not some heavyweight abstraction. Whichever one you choose (and just to be clear, it doesn't matter), they're all superior to IDE's because they don't try to punch above their weight. There's zero impedance mismatch between your editor as a tool, and your code as text. Understanding comes from clarity, and you can't have that if you can't see what it is you're doing.&lt;/p&gt;

&lt;p&gt;I'm sure people will point out that this is regressive, that this is the ranting of a crotchety old man averse to change. Horseshit -- I've delivered &lt;a href=&quot;http://www.ehealthinnovation.org/?q=dh&quot;&gt;actual&lt;/a&gt;, &lt;a href=&quot;http://bantapp.com&quot;&gt;real&lt;/a&gt; products in both Eclipse and XCode bigger than anything you've done this year, and I've spent enough time with both of them to know that they're both trying to do too much. They're both trying to &lt;em&gt;keep coders away from code&lt;/em&gt;, which is so patently wrong I don't know where to begin (in fairness, Eclipse is &lt;em&gt;much&lt;/em&gt; more guilty of this than XCode).&lt;/p&gt;

&lt;p&gt;In the end, I think Ryan's original post is dead on. In 30 years, smart people &lt;em&gt;will&lt;/em&gt; still be solving hard problems using &lt;code&gt;fork(2)&lt;/code&gt; and &lt;code&gt;exec(2)&lt;/code&gt;. I'm just pushing that statement out further, and saying that if Posix calls are still around, then text will still be king. And if text is still king, then the humble editor will still be around, long after your vaunted IDEs and code fashions de jour have passed into antiquity.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>my brain hurts</title>
   <link href="http://longbeard.org/2010/05/13/my-brain-hurts.html"/>
   <updated>2010-05-13T00:00:00-07:00</updated>
   <id>http://longbeard.org/2010/05/13/my-brain-hurts</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://etudeapp.com/ipad/&quot;&gt;Brilliant&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Lessons</title>
   <link href="http://longbeard.org/2010/04/19/Lessons.html"/>
   <updated>2010-04-19T00:00:00-07:00</updated>
   <id>http://longbeard.org/2010/04/19/Lessons</id>
   <content type="html">&lt;h1&gt;Lessons&lt;/h1&gt;

&lt;p&gt;For those of us who may like to pretend that the buildings of the past are best buried in the name of progress, may I present a memory burned into my brain forever:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://farm1.static.flickr.com/86/255646765_1c72e637af.jpg&quot; alt=&quot;Set the controls for the heart of the sun&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I never realized that the building housing the &lt;a href=&quot;http://en.wikipedia.org/wiki/Bankside_Power_Station&quot;&gt;Tate Modern&lt;/a&gt; came as close as it did to being lost. I think I speak for everyone who has ever stood in awed and humble reverence of the Turbine Hall when I say that I'm glad the axe never fell.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://farm1.static.flickr.com/96/235161500_737805e915.jpg&quot; alt=&quot;wasn't this a kraftwerk album cover?&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>stencilrific</title>
   <link href="http://longbeard.org/2010/04/07/stencilrific.html"/>
   <updated>2010-04-07T00:00:00-07:00</updated>
   <id>http://longbeard.org/2010/04/07/stencilrific</id>
   <content type="html">&lt;h1&gt;stencilrific&lt;/h1&gt;

&lt;p&gt;Short and sweet: I just made and published a quick little &lt;a href=&quot;http://www.omnigroup.com/products/omnigraffle/&quot;&gt;OmniGraffle&lt;/a&gt; stencil for use in drawing git branching models. It's based on the figure styles in Scott Chacon's excellent &lt;a href=&quot;http://www.progit.org&quot;&gt;Pro Git&lt;/a&gt; book, and published on Graffletopia.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://graffletopia.com/stencils/581&quot;&gt;Get It&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Today's terminal timesaver</title>
   <link href="http://longbeard.org/2010/03/28/today%27s-terminal-timesaver.html"/>
   <updated>2010-03-28T00:00:00-07:00</updated>
   <id>http://longbeard.org/2010/03/28/today's-terminal-timesaver</id>
   <content type="html">&lt;h1&gt;Today's terminal timesaver&lt;/h1&gt;

&lt;p&gt;Via &lt;a href=&quot;http://sigpipe.macromates.com/2010/03/28/search-path-for-cd/&quot;&gt;Allan Odgaard&lt;/a&gt;, a simple and super useful terminal tweak. The &lt;code&gt;cd&lt;/code&gt; command looks for a &lt;code&gt;CDPATH&lt;/code&gt; environment variable, which specifies directories &lt;code&gt;cd&lt;/code&gt; will always look at when trying to change directories. Essentially, what &lt;code&gt;PATH&lt;/code&gt; is to executing programs, &lt;code&gt;CDPATH&lt;/code&gt; is to changing directories.&lt;/p&gt;

&lt;p&gt;The upshot of this is you can always change to commonly used directories no matter where you are in the filesystem. For example, I use the following setting:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;export CDPATH=::~:~/Work:~/Desktop:~/Code
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and now no matter where I am in the filesystem, I can always change to any subdirectory of my home directory (or &lt;code&gt;~/Work&lt;/code&gt;, &lt;code&gt;~/Desktop&lt;/code&gt; or &lt;code&gt;~/Code&lt;/code&gt;). So, entering &lt;code&gt;cd Downloads&lt;/code&gt; will bring me to &lt;code&gt;~/Downloads&lt;/code&gt; no matter where I am.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>cue the Dylan</title>
   <link href="http://longbeard.org/2010/03/15/cue-the-Dylan.html"/>
   <updated>2010-03-15T00:00:00-07:00</updated>
   <id>http://longbeard.org/2010/03/15/cue-the-Dylan</id>
   <content type="html">&lt;p&gt;Once in a blue moon, something will come along that just screams out to you a truth you've long known, the tangible metaphor making it all the more real.&lt;/p&gt;

&lt;p&gt;I've just spent the past six months working on &lt;a href=&quot;http://bantapp.com&quot;&gt;bant&lt;/a&gt; (thank you, I'm quite proud of it). Now that we're in the process of adding in our secondary localizations for 1.0.1, our designer just sent us this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/bantSharingHeader.png&quot; alt=&quot;an inline image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;and it hit me; I'm writing software for the entire world. Barely fifty years ago, 'no ticky, no laundry' was considered to be a benign and appropriate form of humour (though &lt;a href=&quot;http://answers.yahoo.com/question/index?qid=20080128145737AAi4Lsy&quot;&gt;some people&lt;/a&gt;  apparently have yet to get the memo). Today my work isn't complete unless I take into account a country I've never even been to.&lt;/p&gt;

&lt;p&gt;The times really are a changin'. What a wonderful time to be alive.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>on backwards dinosaurs</title>
   <link href="http://longbeard.org/2010/03/09/on-backwards-dinosaurs.html"/>
   <updated>2010-03-09T00:00:00-08:00</updated>
   <id>http://longbeard.org/2010/03/09/on-backwards-dinosaurs</id>
   <content type="html">&lt;p&gt;I've said it before, but github's &lt;a href=&quot;http://pages.github.com&quot;&gt;pages&lt;/a&gt; feature is a great application of one of git's most unsung features. to wit:&lt;/p&gt;

&lt;p&gt;git repos are cheap. at their minimum, they're just a single top-level subdirectory with some easily parseable files tied to a real, working copy of your repo's contents. One command away, in place on top of an existing working copy. they're so cheap, in fact, that some of the &lt;a href=&quot;http://gist.github.com&quot;&gt;lightest sharing systems&lt;/a&gt; out there are based on git.&lt;/p&gt;

&lt;p&gt;Those of us unfortunate enough to remember a life under subversion may or may not remember the steps involved in setting up a repository (as the tooling guy for a team of five developers, I had to go back to the manual every time I had to set one up). That was bad enough. Those of us who also remember having to clean up after someone checked a subversion repo into your subversion repo probably realized it a bit more acutely; a feeling someone, somewhere, was laughing their ass off at your expense.&lt;/p&gt;

&lt;p&gt;In a world where repos are cheap &amp;amp; easy to create, they start making sense as a generic representation of 'chunks of data' being moved around. Why bother using a &lt;a href=&quot;http://www.tumblr.com&quot;&gt;blog service&lt;/a&gt; with some clunky web-based posting interface? Why risk using a flavour of the month &lt;a href=&quot;http://www.dropbox.com&quot;&gt;silo of a cloud store&lt;/a&gt;? Why bother trusting &lt;a href=&quot;http://www.google.com&quot;&gt;just anyone&lt;/a&gt; to be the sole steward of your digital life?&lt;/p&gt;

&lt;p&gt;A way forward here seems really easy and obvious given the fact that owning, copying, and generally marshalling sets of data around in the most efficient way possible is exactly what git does. In this far-off futureland, you publish to your blog by pushing to a remote git repo, you copy files between computers by syncing repos, and you share  your address book with your email provider as a bunch of open format files inside a repository. In all these cases, you yourself own a first-class version of the data in question, locally and under your control. Where's the data? It's everywhere it needs to be, including in your safe hands for as long as your care to care for it.&lt;/p&gt;

&lt;p&gt;Imagine that. Cloud computing where 'my own personal cloud, please stay the hell out unless I invite you in' is a subset. Cool.&lt;/p&gt;

&lt;p&gt;I know people ride my ass about being so hot and bothered about a piece of fucking software. And I am. But I'm excited because I feel like git is the first tool to really &lt;em&gt;nail&lt;/em&gt; this sort of interaction, and I see it being the jumping off point for a million great tools. It feels like the future, but one that's untamed and wild enough to help shape. It feels like &lt;em&gt;new&lt;/em&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>this post ought to have begun with a link</title>
   <link href="http://longbeard.org/2010/02/15/this-post-ought-to-have-begun-with-a-link.html"/>
   <updated>2010-02-15T00:00:00-08:00</updated>
   <id>http://longbeard.org/2010/02/15/this-post-ought-to-have-begun-with-a-link</id>
   <content type="html">&lt;p&gt;This post ought to have begun with a link, and it obviously doesn't.&lt;/p&gt;

&lt;p&gt;It doesn't because the thing I want to reply to, the opinion I want to tender for discussion, is on Facebook. Thus there's no universal way to refer to anything ever said there.&lt;/p&gt;

&lt;p&gt;That fucking sucks, and it's exactly what's wrong with social networking sites today.&lt;/p&gt;

&lt;p&gt;I want to begin a discussion on something my buddy Bryan said that will stand the test of time. I want to nurture a dialogue in a way that will (in my own little narcissistic way) give my and Bryan's ideas the memory of the ages. I want this to become a discussion that lives on beyond today; to possibly become an anecdote that one of us may recount in thirty years when recalling how we got to know each other, maybe the material of a footnote to one of our biographies. Or maybe it will come to nothing, forgotten away in in the internet's basement.&lt;/p&gt;

&lt;p&gt;Either way, if it's worth talking about, it's probably also worth archiving, and I can't do that if you're talking to me from inside the social networking silo of the day.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>is this valid academia?</title>
   <link href="http://longbeard.org/2010/02/15/is-this-valid-academia.html"/>
   <updated>2010-02-15T00:00:00-08:00</updated>
   <id>http://longbeard.org/2010/02/15/is-this-valid-academia</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://lpresearch.org/cms/?q=node/8&quot;&gt;Is it?&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>neato</title>
   <link href="http://longbeard.org/2010/01/27/neato.html"/>
   <updated>2010-01-27T00:00:00-08:00</updated>
   <id>http://longbeard.org/2010/01/27/neato</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.faludi.com/teaching/crafting-with-data/syllabus-crafting-with-data/&quot;&gt;Check this out&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This sounds like a wonderful example of art meets learning. Not sure about its appropriateness in a university setting, but this is exactly what high school should be like in my mind.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>What the Hell is in the water in Redmond? Bleach?</title>
   <link href="http://longbeard.org/2009/10/25/what-the-hell-is-in-the-water-in-Redmond%3F-Bleach%3F.html"/>
   <updated>2009-10-25T00:00:00-07:00</updated>
   <id>http://longbeard.org/2009/10/25/what-the-hell-is-in-the-water-in-Redmond?-Bleach?</id>
   <content type="html">&lt;p&gt;From &lt;a href=&quot;http://db.tidbits.com/article/10676&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;'All computers in the store come with support and Microsoft Signature; a free service that removes all the &quot;free&quot; antivirus and other PC manufacturer software that crufts up a new PC, and gives customers a pristine installation of Windows 7.'&lt;/p&gt;

&lt;p&gt;I'm sorry but, uh, &lt;em&gt;are you fucking kidding me???&lt;/em&gt; Who approves product briefs up there? Bozos.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Today's dterm trick</title>
   <link href="http://longbeard.org/2009/10/14/today%27s-dterm-trick.html"/>
   <updated>2009-10-14T00:00:00-07:00</updated>
   <id>http://longbeard.org/2009/10/14/today's-dterm-trick</id>
   <content type="html">&lt;p&gt;From any application with context tied to the filesystem, open &lt;a href=&quot;http://www.decimus.net/dterm.php&quot;&gt;DTerm&lt;/a&gt; and run &lt;code&gt;open .&lt;/code&gt; to get a Finder window focused on that content. Easy peasy 50/50 shell / GUI magic.  Who needs quicksilver with a context aware terminal lying around?&lt;/p&gt;
</content>
 </entry>
 
 
</feed>
