<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Jason Kohles</title>
    <link rel="alternate" type="text/html" href="http://www.jasonkohles.com/" />
    <link rel="self" type="application/atom+xml" href="http://www.jasonkohles.com/atom.xml" />
    <id>tag:www.jasonkohles.com,2008-04-07://1</id>
    <updated>2008-04-10T21:56:11Z</updated>
    <subtitle>Software Developer.  Red Hat Certified Architect.  All around geek.  Interested in Enterprise Application Development, Perl, Catalyst, ExtJS and more.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Personal 4.1</generator>

<entry>
    <title>Movable Type Plugin for Text::Multi</title>
    <link rel="alternate" type="text/html" href="http://www.jasonkohles.com/2008/04/movable-type-plugin-for-textmu.html" />
    <id>tag:www.jasonkohles.com,2008://1.5</id>

    <published>2008-04-10T21:52:42Z</published>
    <updated>2008-04-10T21:56:11Z</updated>

    <summary> Back when I still had delusions that I would someday finish writing my own blogging software and get back to blogging, I wrote a little text-formatting library called an Text::Multi which uses a simple system to allow you to...</summary>
    <author>
        <name>Jason Kohles</name>
        <uri>http://www.jasonkohles.com/</uri>
    </author>
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Software Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="markdown" label="Markdown" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="plugins" label="Plugins" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.jasonkohles.com/">
        <![CDATA[<div class="text-multi text-multi-markdown">
<p>Back when I still had delusions that I would someday finish writing my own blogging software and get back to blogging, I wrote a little text-formatting library called an <a href="http://search.cpan.org/~jasonk/Text-Multi/lib/Text/Multi.pm">Text::Multi</a> which uses a simple system to allow you to switch between multiple types of text filters in one file.</p>

<p>Now that I've given up on ever writing my own blog software, and just settled on Movable Type, I still wanted to be able to use the super-cool code highlighting that is in Text::Multi (which was in turn inspired by the code highlighting in <a href="http://search.cpan.org/~jrockway/Angerwhale/lib/Angerwhale.pm">Angerwhale</a>).</p>

<p>To that end, I've written a short, simple Movable Type plugin which lets you use Text::Multi as a markup format.  It's a little ugly (and while writing it I've also discovered there are a lot of problems with the documentation in Text::Multi that I'm going to have to clean up) but it works for me...</p>

</div>
<pre class="text-multi text-multi-code text-multi-code-perl">
<span class="Comment">#&nbsp;JasonKohles::TextMulti&nbsp;plugin</span><span class="Comment">
</span><span class="Comment">#&nbsp;Copyright&nbsp;2008&nbsp;Jason&nbsp;Kohles</span><span class="Comment">
</span><span class="Comment">#&nbsp;&lt;email@jasonkohles.com&gt;</span><span class="Comment">
</span><span class="Comment">#&nbsp;&nbsp;http://www.jasonkohles.com/</span><span class="Comment">
</span><span class="Comment">#</span><span class="Comment">
</span><span class="Keyword">package</span><span class="Normal">&nbsp;</span><span class="Function">JasonKohles::TextMulti</span><span class="Normal">;</span><span class="Normal">
</span><span class="Keyword">use</span><span class="Normal">&nbsp;</span><span class="Keyword">strict</span><span class="Normal">;&nbsp;</span><span class="Keyword">use</span><span class="Normal">&nbsp;</span><span class="Keyword">warnings</span><span class="Normal">;</span><span class="Normal">
</span><span class="Keyword">our</span><span class="Normal">&nbsp;</span><span class="DataType">$VERSION</span><span class="Normal">&nbsp;=&nbsp;</span><span class="Operator">'</span><span class="String">0.1</span><span class="Operator">'</span><span class="Normal">;</span><span class="Normal">
</span><span class="Keyword">our</span><span class="Normal">&nbsp;</span><span class="DataType">$ID</span><span class="Normal">&nbsp;=&nbsp;</span><span class="Operator">'</span><span class="String">$Id$</span><span class="Operator">'</span><span class="Normal">;</span><span class="Normal">
</span><span class="Keyword">use</span><span class="Normal">&nbsp;base&nbsp;</span><span class="Operator">qw(</span><span class="Normal">&nbsp;MT::Plugin&nbsp;</span><span class="Operator">)</span><span class="Normal">;</span><span class="Normal">
</span><span class="Keyword">use</span><span class="Normal">&nbsp;</span><span class="Function">Text::Multi</span><span class="Normal">;&nbsp;&nbsp;</span><span class="Normal">
</span><span class="Normal">
</span><span class="Normal">MT-&gt;add_plugin(&nbsp;__PACKAGE__-&gt;new(&nbsp;{&nbsp;</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="Operator">'</span><span class="String">textmulti</span><span class="Operator">'</span><span class="Normal">,</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="Operator">'</span><span class="String">TextMulti</span><span class="Operator">'</span><span class="Normal">,</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="DataType">$VERSION</span><span class="Normal">,</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;author_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="Operator">'</span><span class="String">Jason&nbsp;Kohles</span><span class="Operator">'</span><span class="Normal">,</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;author_link&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="Operator">'</span><span class="String">http://www.jasonkohles.com/</span><span class="Operator">'</span><span class="Normal">,</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;plugin_link&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="Operator">'</span><span class="String">http://code.jasonkohles.com/MTTextMulti/</span><span class="Operator">'</span><span class="Normal">,</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;doc_link&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="Operator">'</span><span class="String">docs.html</span><span class="Operator">'</span><span class="Normal">,</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="Operator">'</span><span class="String">Text::Multi&nbsp;Format&nbsp;Filter</span><span class="Operator">'</span><span class="Normal">,</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;registry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;{</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text_filters&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;{</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text_multi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;{</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="Operator">'</span><span class="String">Text::Multi</span><span class="Operator">'</span><span class="Normal">,</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;docs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="Operator">'</span><span class="String">docs.html</span><span class="Operator">'</span><span class="Normal">,</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;</span><span class="Keyword">sub&nbsp;</span><span class="Normal">{</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Keyword">my</span><span class="Normal">&nbsp;</span><span class="DataType">$parser</span><span class="Normal">&nbsp;=&nbsp;</span><span class="Function">Text::Multi</span><span class="Normal">-&gt;new(</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default_type&nbsp;=&gt;&nbsp;</span><span class="Operator">'</span><span class="String">Markdown</span><span class="Operator">'</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="DataType">$parser</span><span class="Normal">-&gt;</span><span class="DataType">process_text</span><span class="Normal">(&nbsp;</span><span class="Variable">$_</span><span class="Normal">[0]&nbsp;);</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Keyword">return</span><span class="Normal">&nbsp;</span><span class="DataType">$parser</span><span class="Normal">-&gt;</span><span class="DataType">render</span><span class="Normal">;</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;},</span><span class="Normal">
</span><span class="Normal">}&nbsp;)&nbsp;);</span><span class="Normal">
</span>
</pre>
]]>
        
    </content>
</entry>

<entry>
    <title>Automatically back up a subversion repository to GMail</title>
    <link rel="alternate" type="text/html" href="http://www.jasonkohles.com/2008/04/automatically-back-up-a-subver.html" />
    <id>tag:www.jasonkohles.com,2008://1.2</id>

    <published>2008-04-08T00:40:01Z</published>
    <updated>2008-04-10T21:41:57Z</updated>

    <summary> This is a little script I wrote to be used as a subversion post-commit hook. It automatically emails an encrypted archive of the repository after every commit, so you don&apos;t have to worry too much about the subversion server...</summary>
    <author>
        <name>Jason Kohles</name>
        <uri>http://www.jasonkohles.com/</uri>
    </author>
    
        <category term="Software Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="backups" label="Backups" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gmail" label="Gmail" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="subversion" label="Subversion" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.jasonkohles.com/">
        <![CDATA[<div class="text-multi text-multi-markdown">
<p>This is a little script I wrote to be used as a subversion post-commit hook.  It automatically emails an encrypted archive of the repository after every commit, so you don't have to worry too much about the subversion server exploding.</p>

</div>
<pre class="text-multi text-multi-code text-multi-code-bash">
<span class="Comment">#!/bin/sh</span><span class="Comment">
</span><span class="Normal">
</span><span class="Comment">#&nbsp;Configuration&nbsp;#</span><span class="Comment">
</span><span class="Others">REPODIR=</span><span class="Normal">/var/svn&nbsp;</span><span class="Comment">#&nbsp;where&nbsp;your&nbsp;repositories&nbsp;live</span><span class="Comment">
</span><span class="Comment">#export&nbsp;HOME=/home/jason</span><span class="Comment">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Comment">#&nbsp;set&nbsp;this&nbsp;to&nbsp;your&nbsp;home&nbsp;directory&nbsp;if&nbsp;the&nbsp;hook</span><span class="Comment">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Comment">#&nbsp;doesn't&nbsp;run&nbsp;as&nbsp;you,&nbsp;and&nbsp;therefore&nbsp;cannot&nbsp;find</span><span class="Comment">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Comment">#&nbsp;your&nbsp;GPG&nbsp;keys...</span><span class="Comment">
</span><span class="Others">EMAIL=</span><span class="String">"example+backups@gmail.com"</span><span class="Normal">&nbsp;</span><span class="Comment">#&nbsp;where&nbsp;to&nbsp;send&nbsp;the&nbsp;backups</span><span class="Comment">
</span><span class="Others">GPGID=</span><span class="String">"12345678"</span><span class="Normal">&nbsp;</span><span class="Comment">#&nbsp;gpg&nbsp;key&nbsp;id&nbsp;to&nbsp;use&nbsp;for&nbsp;encrypting</span><span class="Comment">
</span><span class="Normal">
</span><span class="Others">REPO=</span><span class="String">"</span><span class="Others">$1</span><span class="String">"</span><span class="Normal">
</span><span class="Others">REV=</span><span class="String">"</span><span class="Others">$2</span><span class="String">"</span><span class="Normal">
</span><span class="Normal">
</span><span class="Reserved">echo</span><span class="Normal">&nbsp;</span><span class="String">"Running&nbsp;gmail-backup-svn&nbsp;</span><span class="Others">$REPO</span><span class="String">&nbsp;</span><span class="Others">$REV</span><span class="String">"</span><span class="Normal">
</span><span class="Others">R=</span><span class="Keyword">`</span><span class="Normal">echo&nbsp;</span><span class="Others">$REPO</span><span class="Normal">&nbsp;</span><span class="Keyword">|</span><span class="Normal">&nbsp;</span><span class="BString">sed</span><span class="Normal">&nbsp;s,</span><span class="Others">$REPODIR</span><span class="Normal">,,</span><span class="Keyword">`</span><span class="Normal">
</span><span class="Keyword">(</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Reserved">echo</span><span class="Normal">&nbsp;</span><span class="String">"From:&nbsp;</span><span class="Others">$EMAIL</span><span class="String">"</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Reserved">echo</span><span class="Normal">&nbsp;</span><span class="String">"To:&nbsp;</span><span class="Others">$EMAIL</span><span class="String">"</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Reserved">echo</span><span class="Normal">&nbsp;</span><span class="String">"Subject:&nbsp;[SVN-BACKUP]&nbsp;</span><span class="Others">$R</span><span class="String">"</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Reserved">echo</span><span class="Normal">&nbsp;</span><span class="String">""</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Keyword">if</span><span class="Reserved">&nbsp;[</span><span class="Normal">&nbsp;-n&nbsp;</span><span class="String">"</span><span class="Others">$REV</span><span class="String">"</span><span class="Reserved">&nbsp;]</span><span class="Normal">;&nbsp;</span><span class="Keyword">then</span><span class="Normal">&nbsp;</span><span class="Reserved">echo</span><span class="Normal">&nbsp;</span><span class="String">"Revision:&nbsp;</span><span class="Others">$REV</span><span class="String">"</span><span class="Normal">;&nbsp;</span><span class="Keyword">fi</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Keyword">for</span><span class="Normal">&nbsp;I&nbsp;</span><span class="Keyword">in</span><span class="Normal">&nbsp;</span><span class="Keyword">`</span><span class="Normal">seq&nbsp;1&nbsp;40</span><span class="Keyword">`</span><span class="Normal">;&nbsp;</span><span class="Keyword">do</span><span class="Normal">&nbsp;</span><span class="Reserved">echo</span><span class="Normal">&nbsp;</span><span class="String">""</span><span class="Normal">;&nbsp;</span><span class="Keyword">done</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/svnadmin&nbsp;dump&nbsp;</span><span class="Others">$REPO</span><span class="Normal">&nbsp;\</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Keyword">|</span><span class="Normal">&nbsp;/bin/gzip&nbsp;-c&nbsp;-&nbsp;\</span><span class="Normal">
</span><span class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Keyword">|</span><span class="Normal">&nbsp;/usr/bin/gpg&nbsp;--armor&nbsp;--trust-model=always&nbsp;--recipient&nbsp;</span><span class="Others">$GPGID</span><span class="Normal">&nbsp;--encrypt</span><span class="Normal">
</span><span class="Keyword">)</span><span class="Normal">&nbsp;</span><span class="Keyword">|</span><span class="Normal">&nbsp;/usr/sbin/sendmail&nbsp;-oi&nbsp;-oem&nbsp;-odq&nbsp;</span><span class="Others">$EMAIL</span>
</pre>
]]>
        
    </content>
</entry>

</feed>
