<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us">

  <title type="text">Sean Santry's Development Blog</title>
  <link rel="self" href="http://seansantry.com" />
  <link rel="alternate" type="text/html" href="http://seansantry.com/development/" />

  <updated>2010-06-04T15:00:40-04:00</updated>
  <id>http://seansantry.com/development/</id>

  <author>
    <name>Sean Santry</name>
    <uri>http://seansantry.com/</uri>
  </author>

  
  <entry>
    <author><name>Sean Santry</name></author>
    <title>Fixing “MAC address could not be autodected” error from UUIDTools, Phusion Passenger and Ruby Enterprise Edition</title>
    <link rel="alternate" type="text/html" href="http://seansantry.com/development/2008/08/29/fixing-mac-address-could-not-be-autodected-error-from-uuidtools-phusion-passenger-and-ruby-enterpris/" />
    <updated>2008-08-29T00:00:00-04:00</updated>
    <id>http://seansantry.com/development/2008/08/29/fixing-mac-address-could-not-be-autodected-error-from-uuidtools-phusion-passenger-and-ruby-enterpris/</id>
    <content type="html">&lt;p&gt;I&amp;#8217;m using the &lt;a href=&quot;http://sporkmonger.com/projects/uuidtools/&quot;&gt;UUIDTools 1.0.3&lt;/a&gt; gem in a &lt;a href=&quot;http://rubyonrails.com&quot;&gt;Rails 2.1&lt;/a&gt; application to generate globally unique IDs. After migrating the site to run under &lt;a href=&quot;http://www.modrails.com&quot;&gt;Phusion Passenger&lt;/a&gt; and &lt;a href=&quot;http://www.rubyenterpriseedition.com/&quot;&gt;Ruby Enterprise Edition&lt;/a&gt; I began encountering the following error:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;StandardError (MAC address could not be autodetected.  Set the MAC address manually.):
    /vendor/gems/uuidtools-1.0.3/lib/uuidtools.rb:241:in `timestamp_create'
    /vendor/gems/uuidtools-1.0.3/lib/uuidtools.rb:229:in `synchronize'
    /vendor/gems/uuidtools-1.0.3/lib/uuidtools.rb:229:in `timestamp_create'
    ...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It seemed UUIDTools was trying to get the the network card&amp;#8217;s MAC address (I&amp;#8217;d guess to collect entropy), but couldn&amp;#8217;t for some reason. I should also note that this is all running on an &lt;a href=&quot;http://releases.ubuntu.com/hardy/&quot;&gt;Ubuntu Hardy Heron 8.04&lt;/a&gt;, 512MB slice over at &lt;a href=&quot;https://manage.slicehost.com/customers/new?referrer=402869cc8efa17d41daeb1306525e017&quot;&gt;Slicehost&lt;/a&gt; (yes, that&amp;#8217;s a referral link, use it! :-).&lt;/p&gt;

&lt;p&gt;It turns out that UUIDTools was trying to use &lt;code&gt;ifconfig&lt;/code&gt; to read the MAC address, but &lt;code&gt;ifconfig&lt;/code&gt; wasn&amp;#8217;t in the &lt;code&gt;PATH&lt;/code&gt;. Since the application is now running under mod_rails, the relevant &lt;code&gt;PATH&lt;/code&gt; is Apache&amp;#8217;s &lt;code&gt;PATH&lt;/code&gt;, which doesn&amp;#8217;t include &lt;code&gt;/sbin&lt;/code&gt; by default.&lt;/p&gt;

&lt;p&gt;So, a quick edit of /etc/init.d/apache2 to change&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ENV=&quot;env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;to&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ENV=&quot;env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin:/sbin&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and a &lt;code&gt;sudo /etc/init.d/apache2 restart&lt;/code&gt; was all it took to get the app back up and running.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <author><name>Sean Santry</name></author>
    <title>GitHub Invite Giveaway</title>
    <link rel="alternate" type="text/html" href="http://seansantry.com/development/2008/04/07/github-invite-giveaway/" />
    <updated>2008-04-07T00:00:00-04:00</updated>
    <id>http://seansantry.com/development/2008/04/07/github-invite-giveaway/</id>
    <content type="html">&lt;p&gt;I&amp;#8217;ve got a few &lt;a href=&quot;http://github.com/&quot;&gt;GitHub&lt;/a&gt; invites available if anyone is interested. I&amp;#8217;ve started putting a few of my &lt;a href=&quot;http://github.com/santry&quot;&gt;open-source projects&lt;/a&gt; up there as well and so far it seems pretty cool.&lt;/p&gt;

&lt;p&gt;Email link is in the footer, so come and get &amp;#8216;em!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <author><name>Sean Santry</name></author>
    <title>Update to EnkoderTags Radiant Extension</title>
    <link rel="alternate" type="text/html" href="http://seansantry.com/development/2008/03/16/update-to-enkodertags-radiant-extension/" />
    <updated>2008-03-16T00:00:00-04:00</updated>
    <id>http://seansantry.com/development/2008/03/16/update-to-enkodertags-radiant-extension/</id>
    <content type="html">&lt;p&gt;I&amp;#8217;ve updated &lt;a href=&quot;/projects/enkodertags&quot;&gt;EnkoderTags&lt;/a&gt; to allow HTML attributes in the &lt;code&gt;enkode_mailto&lt;/code&gt; tag. The attributes will get passed through untouched into the resulting markup, so you can add CSS classes or IDs to use as styling hooks. For example, this code&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;&amp;lt;r:enkode_mailto email=&quot;example@example.com&quot; link_text=&quot;simple email example&quot;
    class=&quot;enkodedlink&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;will produce the HTML &lt;/p&gt;


&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;mailto:example@example.com&quot; class=&quot;enkodedlink&quot;&amp;gt;simple email example&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;which will be obfuscated through the Enkoder as usual. Thanks to Nick Calladine for prompting me to add this feature!&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <author><name>Sean Santry</name></author>
    <title>Git Repositories for Rails Plugins</title>
    <link rel="alternate" type="text/html" href="http://seansantry.com/development/2008/02/09/git-repositories-for-rails-plugins/" />
    <updated>2008-02-09T00:00:00-05:00</updated>
    <id>http://seansantry.com/development/2008/02/09/git-repositories-for-rails-plugins/</id>
    <content type="html">&lt;p&gt;Having moved to &lt;a href=&quot;http://git.or.cz&quot;&gt;git&lt;/a&gt; for managing my Rails projects and &lt;a href=&quot;http://panthersoftware.com/articles/view/3/svn-s-svn-externals-to-git-s-submodule-for-rails-plugins&quot;&gt;git submodules&lt;/a&gt; for Rails plugins and vendor/rails, I decided to create git mirrors for a couple of plugins whose maintainers use subversion.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://repo.or.cz/w/has_many_polymorphs.git&quot;&gt;has_many_polymorphs&lt;/a&gt; (git://repo.or.cz/has_many_polymorphs.git)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://repo.or.cz/w/acts_as_ferret.git&quot;&gt;acts_as_ferret&lt;/a&gt; (git://repo.or.cz/acts_as_ferret.git)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;If you have a Rails project in a git repository, you might do&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git submodule add git://repo.or.cz/has\_many\_polymorphs.git vendor/plugins/has\_many\_polymorphs
git submodule add git://repo.or.cz/acts\_as\_ferret.git vendor/plugins/acts\_as\_ferret
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and perhaps&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git submodule add git://git.sanityinc.com/rails.git vendor/rails
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;followed by&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git submodule init
git submodule update 
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  
  <entry>
    <author><name>Sean Santry</name></author>
    <title>Building Git 1.5.4 on Mac OS X 10.5 Leopard</title>
    <link rel="alternate" type="text/html" href="http://seansantry.com/development/2008/02/02/building-git-1-5-4-on-mac-os-x-10-5-leopard/" />
    <updated>2008-02-02T00:00:00-05:00</updated>
    <id>http://seansantry.com/development/2008/02/02/building-git-1-5-4-on-mac-os-x-10-5-leopard/</id>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://wincent.com/&quot;&gt;Wincent Colaiuta&lt;/a&gt; has some good, &lt;a href=&quot;http://wincent.com/knowledge-base/Leopard_set-up_notes#Building_and_installing_other_software&quot;&gt;basic instructions&lt;/a&gt; for getting &lt;a href=&quot;http://git.or.cz&quot;&gt;Git&lt;/a&gt; version 1.5.3.x built and installed on Mac OS X Leopard.&lt;/p&gt;

&lt;p&gt;For Git 1.5.4, building git-gui will fail when it tries to build some localization files. The message I got during &lt;code&gt;make prefix=/usr/local all&lt;/code&gt; was&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    GITGUI_VERSION = 0.9.2
    * new locations or Tcl/Tk interpreter
    GEN git-gui
    INDEX lib/
    MSGFMT    po/de.msg 371 translated.
    MSGFMT    po/fr.msg 371 translated.
    MSGFMT    po/hu.msg 371 translated.
    MSGFMT    po/it.msg 370 translated, 1 untranslated.
    MSGFMT    po/ja.msg 371 translated.
    MSGFMT    po/ru.msg 367 translated, 4 untranslated.
    MSGFMT    po/sv.msg 371 translated.
    MSGFMT po/zh_cn.msg 53 translated, 57 fuzzy, 253 untranslated.
    SUBDIR gitk-git
    GEN gitk-wish
Generating catalog po/de.msg
msgfmt --statistics --tcl po/de.po -l de -d po/
make[1]: msgfmt: Command not found
make[1]: *** [po/de.msg] Error 127
make: *** [all] Error 2
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is because Leopard doesn&amp;#8217;t come with the &lt;a href=&quot;http://www.gnu.org/software/gettext/&quot;&gt;GNU gettext utilities&lt;/a&gt;. While I imagine one could build and install gettext, there&amp;#8217;s an easier fix. Just set the &lt;code&gt;NO_MSGFMT&lt;/code&gt; environment variable to &lt;code&gt;yes&lt;/code&gt; and the Git build scripts will use a simple (well, according to the source, &amp;#8220;really stupid&amp;#8221;) program that does the necessary work in place of gettext&amp;#8217;s msgfmt tool.&lt;/p&gt;

&lt;p&gt;So, just tack &lt;code&gt;NO_MSGFMT=yes&lt;/code&gt; in front of your build and you&amp;#8217;re all set.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;NO_MSGFMT=yes make prefix=/usr/local all
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  
  <entry>
    <author><name>Sean Santry</name></author>
    <title>How Many Can You Name?</title>
    <link rel="alternate" type="text/html" href="http://seansantry.com/development/2007/11/28/how-many-can-you-name/" />
    <updated>2007-11-28T00:00:00-05:00</updated>
    <id>http://seansantry.com/development/2007/11/28/how-many-can-you-name/</id>
    <content type="html">&lt;p&gt;&lt;a id=&quot;mingle2_badge&quot; href=&quot;http://www.justsayhi.com/bb/html_quiz&quot; style=&quot;display: block; background:url(http://assets.justsayhi.com/badges/523/890/html_elements.8qsyr04fmy.jpg) no-repeat top left; height: 147px; width: 335px; text-decoration: none; color: #fff;&quot;&gt;&lt;strong id=&quot;mingle2_badge_score&quot; style=&quot;display: block; padding-left: 125px; padding-top: 44px; font-weight: normal; font-family: Times New Roman, Arial; font-size: 45px;&quot;&gt;55&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;I have no idea how I can remember &lt;code&gt;input&lt;/code&gt; but forget &lt;code&gt;form&lt;/code&gt;&amp;hellip;&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <author><name>Sean Santry</name></author>
    <title>Radiant Extensions for Blogging, Flickr and Spam Prevention</title>
    <link rel="alternate" type="text/html" href="http://seansantry.com/development/2007/04/19/radiant-extensions-for-blogging-flickr-and-spam-prevention/" />
    <updated>2007-04-19T00:00:00-04:00</updated>
    <id>http://seansantry.com/development/2007/04/19/radiant-extensions-for-blogging-flickr-and-spam-prevention/</id>
    <content type="html">&lt;p&gt;I&amp;#8217;ve updated &lt;a href=&quot;/development/articles/2006/11/01/radiant-plugins/&quot;&gt;my Radiant plugins&lt;/a&gt; for &lt;a href=&quot;http://radiantcms.org/&quot;&gt;Radiant 0.6&amp;#8217;s new extension mechanism&lt;/a&gt;. I&amp;#8217;ll package up proper releases soon, but in the meantime you can get them from my Subversion repository. If you&amp;#8217;ve checked out the Radiant mental branch, &lt;code&gt;svn:externals&lt;/code&gt; is the way to go:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /path/to/radiant
svn propedit svn:externals vendor/extensions
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then add the following three lines and save&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;blog_tags http://seansantry.com/svn/radiant/extensions/blogtags/trunk
enkoder_tags http://seansantry.com/svn/radiant/extensions/enkodertags/trunk
flickr_tags http://seansantry.com/svn/radiant/extensions/flickrtags/trunk
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Follow that with an &lt;code&gt;svn update vendor/extensions&lt;/code&gt; and you&amp;#8217;re all set. If you&amp;#8217;re running the gem you can go into your vendor/extensions directory and export the extensions from Subversion:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;svn export http://seansantry.com/svn/radiant/extensions/blogtags/trunk blog_tags
svn export http://seansantry.com/svn/radiant/extensions/enkodertags/trunk enkoder_tags
svn export http://seansantry.com/svn/radiant/extensions/flickrtags/trunk flickr_tags
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  
  <entry>
    <author><name>Sean Santry</name></author>
    <title>Creating an Atom Feed in Radiant</title>
    <link rel="alternate" type="text/html" href="http://seansantry.com/development/2006/12/15/creating-an-atom-feed-in-radiant/" />
    <updated>2006-12-15T00:00:00-05:00</updated>
    <id>http://seansantry.com/development/2006/12/15/creating-an-atom-feed-in-radiant/</id>
    <content type="html">&lt;p&gt;&lt;strong&gt;Updated&lt;/strong&gt;: I&amp;#8217;ve updated the code to use Radiant 0.6&amp;#8217;s &lt;code&gt;&amp;lt;r:date for=&quot;updated_at&quot;/&amp;gt;&lt;/code&gt; to get the last updated dates right for the feed and its articles.&lt;/p&gt;


&lt;p&gt;Out of the box, &lt;a href=&quot;http://radiantcms.org/&quot;&gt;Radiant&lt;/a&gt; and its sample blog templates include an RSS feed. Having recently taken an interest in &lt;a href=&quot;http://atomenabled.org/&quot;&gt;Atom&lt;/a&gt; I thought I&amp;#8217;d try building an Atom feed. Here&amp;#8217;s how I did it. &lt;/p&gt;


&lt;h3 id=&quot;atom_requirements&quot;&gt;Atom Requirements&lt;/h3&gt;


&lt;p&gt;Creating the Atom feed itself is fairly straightforward, but there are a few things to be aware of.&lt;/p&gt;


&lt;p&gt;Atom feeds use the &lt;code&gt;application/atom+xml&lt;/code&gt; &lt;strong&gt;Content-Type&lt;/strong&gt; so the first step is to create an appropriate &lt;strong&gt;Layout&lt;/strong&gt;. [&lt;em&gt;Note&lt;/em&gt;: To edit the layout&amp;#8217;s &lt;strong&gt;Content-Type&lt;/strong&gt; click the &lt;strong&gt;More&lt;/strong&gt; link that appears under the &lt;strong&gt;Name&lt;/strong&gt; field.]&lt;/p&gt;


&lt;p class=&quot;photo&quot;&gt;&lt;img src=&quot;/images/atom_feed_1.png&quot; alt=&quot;Screen capture of creating a new Layout in Radiant and setting the Content-Type field.&quot; title=&quot;Creating the Layout&quot; /&gt;&lt;/p&gt;


&lt;p&gt;The feed and its entries each require an &lt;code&gt;id&lt;/code&gt; element. There are many possible schemes for ids but I&amp;#8217;ve chosen URLs to keep things simple. Also, the feed has an &lt;code&gt;updated&lt;/code&gt; element to indicate when the feed was last updated. Finally, all timestamps in the feed must conform to &lt;a href=&quot;http://www.faqs.org/rfcs/rfc3339.html&quot;&gt;RFC 3339&lt;/a&gt;.&lt;/p&gt;


&lt;h3 id=&quot;building_the_feed&quot;&gt;Building the Feed&lt;/h3&gt;


&lt;p&gt;The beginning of the feed is quite simple. The root is a &lt;code&gt;feed&lt;/code&gt; element in the Atom namespace. There&amp;#8217;s a &lt;code&gt;title&lt;/code&gt; element and separate &lt;code&gt;link&lt;/code&gt; elements for links to the feed itself and to the page associated with the feed (in this case, my home page). The &lt;code&gt;generator&lt;/code&gt; element indicates that the feed was created using Radiant.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;feed xmlns=&quot;http://www.w3.org/2005/Atom&quot; xml:lang=&quot;en-us&quot;&amp;gt;

  &amp;lt;title type=&quot;text&quot;&amp;gt;Sean Santry&amp;lt;/title&amp;gt;

  &amp;lt;link rel=&quot;self&quot; href=&quot;http://seansantry.com&amp;lt;r:url /&amp;gt;&quot; /&amp;gt;
  &amp;lt;link rel=&quot;alternate&quot; type=&quot;text/html&quot; href=&quot;http://seansantry.com/&quot; /&amp;gt;

  &amp;lt;id&amp;gt;http://seansantry.com/&amp;lt;/id&amp;gt;

  &amp;lt;generator uri=&quot;http://radiantcms.org/&quot; 
    version=&quot;0.5.2&quot;&amp;gt;Radiant CMS&amp;lt;/generator&amp;gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Next is the &lt;code&gt;author&lt;/code&gt; element with my &lt;code&gt;name&lt;/code&gt; and the &lt;code&gt;uri&lt;/code&gt; for my site. An &lt;code&gt;email&lt;/code&gt; element is optional (for feeding spammers).&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;  &amp;lt;author&amp;gt;
    &amp;lt;name&amp;gt;Sean Santry&amp;lt;/name&amp;gt;
    &amp;lt;uri&amp;gt;http://seansantry.com/&amp;lt;/uri&amp;gt;
  &amp;lt;/author&amp;gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;I mentioned that the feed has an &lt;code&gt;updated&lt;/code&gt; element with a timestamp that indicates when the feed was last updated. Since this timestamp depends on when an entry was most recently added or modified Radiant&amp;#8217;s &lt;code&gt;r:date&lt;/code&gt; tag won&amp;#8217;t work. That would give the date when the Atom feed itself was last edited, which isn&amp;#8217;t correct. &lt;/p&gt;


&lt;p&gt;The solution is to find the most recent article using a combination of Radiant tags. The &lt;code&gt;r:find&lt;/code&gt; tag gets all the articles in my blog and the &lt;code&gt;r:children:each&lt;/code&gt; tag sorts by the &lt;code&gt;published_at&lt;/code&gt; date in descending order. Setting the &lt;code&gt;limit&lt;/code&gt; attribute to &lt;code&gt;1&lt;/code&gt; gets back just the most recently updated page. Finally the &lt;code&gt;r:date&lt;/code&gt; tag with the &lt;a href=&quot;http://www.faqs.org/rfcs/rfc3339.html&quot;&gt;RFC 3339&lt;/a&gt; date format (&lt;code&gt;%Y-%m-%dT%H:%M:%SZ&lt;/code&gt;) populates the feed&amp;#8217;s &lt;code&gt;updated&lt;/code&gt; element.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;  &amp;lt;updated&amp;gt;&amp;lt;r:find url=&quot;/articles/&quot;&amp;gt;
    &amp;lt;r:children:each limit=&quot;1&quot; order=&quot;desc&quot;&amp;gt;
      &amp;lt;r:date format=&quot;%Y-%m-%dT%H:%M:%SZ&quot; for=&quot;updated_at&quot; /&amp;gt;
    &amp;lt;/r:children:each&amp;gt;
  &amp;lt;/r:find&amp;gt;&amp;lt;/updated&amp;gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Adding the entries themselves is simple. Once again the &lt;code&gt;r:find&lt;/code&gt; and &lt;code&gt;r:children:each&lt;/code&gt; tags get the appropriate pages. Within the &lt;code&gt;entry&lt;/code&gt; element are the entry&amp;#8217;s &lt;code&gt;author&lt;/code&gt;, the dates on which the entry was last published and updated and the entry&amp;#8217;s &lt;code&gt;title&lt;/code&gt;. The entry&amp;#8217;s URL serves as the entry&amp;#8217;s &lt;code&gt;id&lt;/code&gt; and as the entry&amp;#8217;s permalink (in the &lt;code&gt;link&lt;/code&gt; element). &lt;/p&gt;


&lt;p&gt;I like providing the full content for entries in my feeds, so the &lt;code&gt;content&lt;/code&gt; element has the full output from the &lt;code&gt;r:content&lt;/code&gt; tag. If your entries have summaries stored in a page part, you could use that instead.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;  &amp;lt;r:find url=&quot;/articles/&quot;&amp;gt;
  &amp;lt;r:children:each limit=&quot;10&quot; order=&quot;desc&quot;&amp;gt;
    &amp;lt;entry&amp;gt;
      &amp;lt;author&amp;gt;&amp;lt;name&amp;gt;&amp;lt;r:author /&amp;gt;&amp;lt;/name&amp;gt;&amp;lt;/author&amp;gt;
      &amp;lt;published&amp;gt;&amp;lt;r:date format=&quot;%Y-%m-%dT%H:%M:%SZ&quot; /&amp;gt;&amp;lt;/published&amp;gt;
      &amp;lt;updated&amp;gt;&amp;lt;r:date format=&quot;%Y-%m-%dT%H:%M:%SZ&quot; for=&quot;updated_at&quot; /&amp;gt;&amp;lt;/updated&amp;gt;
      &amp;lt;title&amp;gt;&amp;lt;r:title /&amp;gt;&amp;lt;/title&amp;gt;
      &amp;lt;link rel=&quot;alternate&quot; type=&quot;text/html&quot; 
        href=&quot;http://seansantry.com&amp;lt;r:url /&amp;gt;&quot; /&amp;gt;
      &amp;lt;id&amp;gt;http://seansantry.com&amp;lt;r:url /&amp;gt;&amp;lt;/id&amp;gt;
      &amp;lt;content type=&quot;html&quot;&amp;gt;&amp;lt;r:escape_html&amp;gt;
        &amp;lt;r:content /&amp;gt;&amp;lt;/r:escape_html&amp;gt;&amp;lt;/content&amp;gt;
    &amp;lt;/entry&amp;gt;
  &amp;lt;/r:children:each&amp;gt;
  &amp;lt;/r:find&amp;gt;

&amp;lt;/feed&amp;gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;You can see the results of this feed at &lt;a href=&quot;http://seansantry.com/atom/&quot;&gt;http://seansantry.com/atom/&lt;/a&gt;. &lt;a href=&quot;/downloads/radiant-atom-feed-template.txt&quot;&gt;Download the source&lt;/a&gt; to get started. Once you&amp;#8217;ve created your feed you can check it for validity using the &lt;a href=&quot;http://feedvalidator.org&quot;&gt;feed validator&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <author><name>Sean Santry</name></author>
    <title>Radiant Plugins</title>
    <link rel="alternate" type="text/html" href="http://seansantry.com/development/2006/11/01/radiant-plugins/" />
    <updated>2006-11-01T00:00:00-05:00</updated>
    <id>http://seansantry.com/development/2006/11/01/radiant-plugins/</id>
    <content type="html">&lt;p&gt;I&amp;#8217;ve cobbled together a few &lt;a href=&quot;http://radiantcms.org&quot;&gt;Radiant&lt;/a&gt; plugins for my site and thought others might find them useful.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;/projects/blogtags&quot;&gt;BlogTags&lt;/a&gt; provides &lt;code&gt;next&lt;/code&gt; and &lt;code&gt;previous&lt;/code&gt; tags for linking to the next and previous articles in your blog. These are based on &lt;a href=&quot;http://lists.radiantcms.org/pipermail/radiant/2006-August/001445.html&quot;&gt;some code John Long posted&lt;/a&gt; to the Radiant mailing list. You can see them in action at the end of this article. This plugin also provides a &lt;code&gt;time_ago_in_words&lt;/code&gt; tag to output the page&amp;#8217;s &lt;code&gt;published_at&lt;/code&gt; date in words (eg, &amp;#8220;3 days ago&amp;#8221;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;/projects/enkodertags&quot;&gt;EnkoderTags&lt;/a&gt; provides tags to help prevent spammers harvesting email addresses from your site. It&amp;#8217;s a simple refactoring of &lt;a href=&quot;http://hivelogic.com/&quot;&gt;Dan Benjamin&amp;#8217;s&lt;/a&gt; &lt;a href=&quot;http://hivelogic.com/articles/2006/02/07/enkoder_plugin&quot;&gt;Hivelogic Enkoder&lt;/a&gt;. I&amp;#8217;m using this plugin to enkode email addresses shown on this site.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;/projects/flickrtags&quot;&gt;FlickrTags&lt;/a&gt; is in the &lt;em&gt;very&lt;/em&gt; early stages of development. Right now the only really useful tag is &lt;code&gt;slideshow&lt;/code&gt;, which embeds a Flickr slideshow in an &lt;code&gt;iframe&lt;/code&gt;. You can see an &lt;a href=&quot;/portfolio/&quot;&gt;example in my portfolio&lt;/a&gt;. I&amp;#8217;m working on integrating &lt;a href=&quot;http://redgreenblu.com/flickr/&quot;&gt;Scott Raymond&amp;#8217;s Flickr API&lt;/a&gt; for more advanced functionality.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;These plugins are available from &lt;a href=&quot;http://seansantry.com/svn/radiant/plugins/&quot;&gt;my subversion repository&lt;/a&gt;. To install, simply export any one of the plugins into your Radiant installation&amp;#8217;s &lt;code&gt;vendor/plugins&lt;/code&gt; folder. For example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;svn export http://seansantry.com/svn/radiant/plugins/blogtags/trunk \
    /path/to/radiant/vendor/plugins/00_blogtags
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that you should prefix the target directory with &lt;code&gt;00_&lt;/code&gt; to ensure that these plugins are loaded before others. Otherwise the global tags these plugins define won&amp;#8217;t be available in pages that use behaviors.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <author><name>Sean Santry</name></author>
    <title>Cheap Storage</title>
    <link rel="alternate" type="text/html" href="http://seansantry.com/development/2005/12/21/cheap-storage/" />
    <updated>2005-12-21T00:00:00-05:00</updated>
    <id>http://seansantry.com/development/2005/12/21/cheap-storage/</id>
    <content type="html">&lt;p class=&quot;photo&quot;&gt;&lt;a href=&quot;/images/seagate_buys_maxtor.png&quot;&gt;&lt;img src=&quot;/images/seagate_buys_maxtor.png&quot; alt=&quot;Screen capture of 'Seagate Buys Maxtor' headline&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;$1.9&lt;strong&gt;8&lt;/strong&gt;? That seems pretty cheap. Isn&amp;#8217;t that what a gallon of gas costs these days?&lt;/p&gt;


&lt;p&gt;Oh, $1.9&lt;strong&gt;B&lt;/strong&gt; as in &lt;strong&gt;Billion&lt;/strong&gt;. That makes more sense.&lt;/p&gt;

</content>
  </entry>
  
 
</feed>