<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.rayners.org/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>David Raynes</title>
    <link rel="alternate" type="text/html" href="http://rayners.org/" />
    
    <id>tag:rayners.org,2008-08-11://1</id>
    <updated>2009-04-24T05:12:58Z</updated>
    <subtitle>I am just a figment of my own imagination.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.23-en</generator>


<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.rayners.org/DavidRaynes" /><feedburner:info uri="davidraynes" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><geo:lat>39.419105</geo:lat><geo:long>-76.783886</geo:long><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><entry>
    <title>RandomEntries 1.0</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/bkcq6kxbB9o/" />
    <id>tag:rayners.org,2009://1.504</id>

    <published>2009-04-24T05:15:00Z</published>
    <updated>2009-04-24T05:12:58Z</updated>

    <summary>I’ve managed to resurrect and rewrite my old old RandomEntries plugin. Turns out it was really really inefficient on blogs with a sufficient number of entries. Currently it will only work on index templates (or, more specifically, in contexts without...</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
        <category term="Plugins" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;I&amp;#8217;ve managed to resurrect and rewrite my old old RandomEntries plugin.  Turns out it was really really inefficient on blogs with a sufficient number of entries.  Currently it will only work on index templates (or, more specifically, in contexts without a stashed entries list) because it works at the SQL level, but I plan to address that in the future.&lt;/p&gt;

&lt;p&gt;So, an example of usage, to select 5 random entries:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;mt:entries limit="5" random="1"&amp;gt;
* &amp;lt;mt:entrytitle&amp;gt;
&amp;lt;/mt:entries&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note the use of &lt;code&gt;limit&lt;/code&gt; instead of &lt;code&gt;lastn&lt;/code&gt;.  This plugin will not work with &lt;code&gt;lastn&lt;/code&gt; as &lt;code&gt;lastn&lt;/code&gt; implies a specific sorting to the entries that overrides the random sorting.&lt;/p&gt;

&lt;p&gt;The RandomEntries plugin requires Movable Type 4.25 and works with the &lt;code&gt;mt:entries&lt;/code&gt; tag so generally it should work with most &lt;code&gt;mt:entries&lt;/code&gt; arguments (except &lt;code&gt;lastn&lt;/code&gt; and &lt;code&gt;sort_by&lt;/code&gt;).  You can &lt;a href="http://github.com/rayners/movable-type-plugin-random-entries/downloads"&gt;download it&lt;/a&gt; from the &lt;a href="http://github.com/rayners/movable-type-plugin-random-entries/tree/master"&gt;github repository for the plugin&lt;/a&gt;.&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=bkcq6kxbB9o:vWWWdBzbJRg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=bkcq6kxbB9o:vWWWdBzbJRg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=bkcq6kxbB9o:vWWWdBzbJRg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=bkcq6kxbB9o:vWWWdBzbJRg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=bkcq6kxbB9o:vWWWdBzbJRg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=bkcq6kxbB9o:vWWWdBzbJRg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/bkcq6kxbB9o" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2009/04/randomentries-10/</feedburner:origLink></entry>

<entry>
    <title>TaskMaster for Movable Type 1.0</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/tkkEintLfU4/" />
    <id>tag:rayners.org,2009://1.503</id>

    <published>2009-04-19T03:10:00Z</published>
    <updated>2009-04-19T03:09:48Z</updated>

    <summary>One of the things I’ve wanted for a while with Movable Type was more control of periodic tasks. I’ve been able to get by with just looking at code and manual SQL commands, but that’s hardly a long-term solution. Thus...</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;One of the things I&amp;#8217;ve wanted for a while with Movable Type was more control of periodic tasks.  I&amp;#8217;ve been able to get by with just looking at code and manual SQL commands, but that&amp;#8217;s hardly a long-term solution.  Thus was born TaskMaster.&lt;/p&gt;

        &lt;p&gt;TaskMaster, currently, has four commands it implements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Lists all the known periodic tasks&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;% perl ./tools/task-master list
CleanTemporaryFiles:
        Label: Remove Temporary Files
        Frequency: 1h
        Component: Core
FuturePost:
        Label: Publish Scheduled Entries
        Frequency: 1m
        Component: Core
JunkExpiration:
        Label: Junk Folder Expiration
        Frequency: 12h
        Component: Core
RemoveExpiredSearchCaches:
        Label: Remove Expired Search Caches
        Frequency: 1d
        Component: Core
RemoveExpiredUserSessions:
        Label: Remove Expired User Sessions
        Frequency: 1d
        Component: Core
UpdateEvents:
        Label: Poll for new events
        Frequency: 30m
        Component: Action Streams
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;status&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Lists the last time some or all periodic tasks were completed&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;% perl ./tools/task-master status
Publish Scheduled Entries last finished at: Sat Apr 18 21:49:29 2009
Poll for new events last finished at: Tue Jan 27 10:44:08 2009
Remove Temporary Files last finished at: Tue Jan 27 10:44:08 2009
Remove Expired Search Caches last finished at: Tue Jan 27 10:44:08 2009
Remove Expired User Sessions last finished at: Tue Jan 27 10:44:08 2009
Junk Folder Expiration last finished at: Tue Jan 27 10:44:08 2009
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;run&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Runs a task or tasks normally (&lt;i&gt;i.e.,&lt;/i&gt; respects frequency setting)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;% perl ./tools/task-master run FuturePost     
Publish Scheduled Entries last finished at: Sat Apr 18 22:58:24 2009
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;forcerun&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Forces a task or tasks to run, regardless of frequency&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;% perl ./tools/task-master forcerun FuturePost
Publish Scheduled Entries last finished at: Sat Apr 18 22:58:58 2009
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://github.com/rayners/movable-type-task-master/tree/1.0"&gt;TaskMaster 1.0&lt;/a&gt; is currently available from &lt;a href="http://github.com/rayners/movable-type-task-master/downloads"&gt;my github account&lt;/a&gt;.&lt;/p&gt;

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=tkkEintLfU4:qBRTdvO4CvE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=tkkEintLfU4:qBRTdvO4CvE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=tkkEintLfU4:qBRTdvO4CvE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=tkkEintLfU4:qBRTdvO4CvE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=tkkEintLfU4:qBRTdvO4CvE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=tkkEintLfU4:qBRTdvO4CvE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/tkkEintLfU4" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2009/04/taskmaster-for-movable-type-10/</feedburner:origLink></entry>

<entry>
    <title>PW101: Hello World for Template Tags (pt. 1)</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/tFMl64yn_Fs/" />
    <id>tag:rayners.org,2009://1.500</id>

    <published>2009-04-01T14:00:00Z</published>
    <updated>2009-04-01T06:29:05Z</updated>

    <summary>The first thing that was available to plugin developers for Movable Type was writing new template tags, so let’s start there. We’re going to: Create a plugin skeleton Add a template tag named ‘helloworld’ that will output a greeting (“Hello...</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
        <category term="Plugin Writing 101" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;The first thing that was available to plugin developers for Movable Type was writing new template tags, so let&amp;#8217;s start there.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re going to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a plugin skeleton&lt;/li&gt;
&lt;li&gt;Add a template tag named &amp;#8216;helloworld&amp;#8217; that will output a greeting (&amp;#8220;Hello World!&amp;#8221;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My goals for this are to demonstrate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic plugin structure and layout&lt;/li&gt;
&lt;li&gt;Basic template tag development&lt;/li&gt;
&lt;/ul&gt;

        &lt;p&gt;So, to start with, we need to tell Movable Type about the plugin we&amp;#8217;re writing.  Let&amp;#8217;s create a directory under the &lt;code&gt;plugins/&lt;/code&gt; directory in the Movable Type installation for our plugin called &lt;code&gt;HelloWorld&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So the structure we have so far should look like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;plugins/
    HelloWorld/
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Adding the config.yaml file&lt;/h2&gt;

&lt;p&gt;Next we need to add a file to describe the plugin to Movable Type.  The &lt;code&gt;config.yaml&lt;/code&gt; file does just that.  The file is in &lt;a href="http://www.yaml.org/"&gt;YAML&lt;/a&gt; format and while there are ways to insert code into it, I generally avoid that practice and try to keep it strictly informational.&lt;/p&gt;

&lt;p&gt;So, the &lt;code&gt;config.yaml&lt;/code&gt; is essentially just a list of key/value pairs that tell Movable Type about the plugin:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;name: Hello World
description: Adds the mt:helloworld tag
version: 1.0

tags:
    function:
        helloworld: $HelloWorld::HelloWorld::Tags::_hdlr_hello_world
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Most of those should be fairly self-explanatory (&lt;code&gt;name&lt;/code&gt; is the plugin&amp;#8217;s name, &lt;code&gt;description&lt;/code&gt; its description, and so forth).  The &lt;code&gt;tags&lt;/code&gt; key contains information about the template tags that the plugin provides.  The &lt;code&gt;function&lt;/code&gt; sub-key states that anything underneath it is a simple or regular tag.  The keys underneath &lt;em&gt;that&lt;/em&gt; are the names of the template tags themselves, and the values are references to the code that will handle them when they are encountered in a template.  Generally, the format for that reference is  &lt;code&gt;$PluginId::Module::method&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So, now we have a directory for out plugin and a &lt;code&gt;config.yaml&lt;/code&gt; file describing it.  What&amp;#8217;s left?  Why, &lt;em&gt;implementing&lt;/em&gt; the plugin, of course!&lt;/p&gt;

&lt;h2&gt;Creating the template tag&lt;/h2&gt;

&lt;p&gt;I like to keep all the template tags for a given plugin in the Tags module for that plugin within the PluginName module (i.e., &lt;code&gt;PluginName::Tags&lt;/code&gt;) to avoid any module naming collisions between plugins, just in case.&lt;/p&gt;

&lt;p&gt;You may have noticed the naming convention I used in the reference for the template tag handler (&lt;code&gt;$PluginId::PluginName::Tags::_hdlr_tag_name&lt;/code&gt;).  This notation serves two purposes.  It instructs Movable Type as to which component/plugin to set as the current component when calling the tag handler (the &lt;code&gt;$PluginId&lt;/code&gt; part) for use with various component specific actions, like loading application templates, and it also points to the tag handler itself (&lt;code&gt;PluginName::Tags::_hdlr_tag_name&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;But, you want code!  Here is &lt;code&gt;plugins/HelloWorld/lib/HelloWorld/Tags.pm&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;package HelloWorld::Tags;

use strict;
use warnings;

sub _hdlr_hello_world {
    return "Hello World!";
}

1;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;lib/&lt;/code&gt; directory within a plugin&amp;#8217;s directory is automatically added to the list of directories searched by perl for modules when Movable Type loads the plugin.&lt;/p&gt;

&lt;p&gt;So, the &lt;code&gt;_hdlr_hello_world&lt;/code&gt; method.  All template tag handlers need to do one thing: return a value to place into the template being built.  When you want to return nothing, be sure to actually return an empty string instead of a bare return, since a bare return actually returns an undefined value and that signals to Movable Type that an error has occurred.&lt;/p&gt;

&lt;p&gt;Here is what the filesystem should look like now:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;plugins/
    HelloWorld/
        config.yaml
        lib/
            HelloWorld/
                Tags.pm
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Testing out the plugin&lt;/h2&gt;

&lt;p&gt;Movable Type comes with a tool that can actually build templates on the command line: &lt;code&gt;tools/mt-tmpl-preview&lt;/code&gt;.  It reads the template to build from &lt;code&gt;STDIN&lt;/code&gt; and we can make use of it to test out our plugin like this (from the MT directory):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;% echo '&amp;lt;mt:helloworld&amp;gt;' | MT_BLOG=1 ./tools/mt-tmpl-preview
Hello World!
%
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;MT_BLOG&lt;/code&gt; environment variable needs to be set to the id of an existing blog in the installation.&lt;/p&gt;

&lt;p&gt;You can see that the expected results are what is returned.  Hooray!  But, what if you want to test this in a more automated fashion?&lt;/p&gt;

&lt;h3&gt;Enter MT::Test&lt;/h3&gt;

&lt;p&gt;Automated unit testing is your new bicycle.  It will solve all your problems and shampoo your carpet.  Well, not really.  But it is still very handy.&lt;/p&gt;

&lt;p&gt;So for this plugin, we will create two test files.  One to verify that everything is syntactically correct and one (for now) to verify that things are functioning correctly.&lt;/p&gt;

&lt;p&gt;First, we have &lt;code&gt;plugins/HelloWorld/t/00-compile.t&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;use lib qw( t/lib lib extlib );
use strict;
use warnings;

use MT::Test;
use Test::More tests =&amp;gt; 2;

require MT;

# Verify that the plugin loads into MT
ok(MT-&amp;gt;component ('helloworld'), "HelloWorld plugin loaded correctly");
# Verify that the Tags module loads without error
require_ok('HelloWorld::Tags');

1;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And then &lt;code&gt;plugins/HelloWorld/t/30-tags.t&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;use lib qw( t/lib lib extlib );
use strict;
use warnings;

# Create a test db and add some data
use MT::Test qw( :db :data );
use Test::More tests =&amp;gt; 1;

# verify that the tag output is the expected one
tmpl_out_like(
    '&amp;lt;mt:helloworld&amp;gt;', {}, {}, qr/^Hello World!$/,
    "mt:helloworld produces 'Hello World!'");

1;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To get things up and running with &lt;code&gt;MT::Test&lt;/code&gt; you will need to grab the test code &lt;a href="http://github.com/sixapart/movable-type-test/tree/master"&gt;here&lt;/a&gt; (by clicking the download button, unpacking, and copying the &lt;code&gt;t/&lt;/code&gt; directory into your Movable Type install).  With that in place, you can use the &lt;code&gt;prove&lt;/code&gt; utility to run the tests:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;% prove ./plugins/HelloWorld/t/*.t
./plugins/HelloWorld/t/00-compile....ok                                      
./plugins/HelloWorld/t/30-tags.......ok                                      
All tests successful.
Files=2, Tests=3,  6 wallclock secs ( 2.56 cusr +  0.88 csys =  3.44 CPU)
%
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The code for all this can be downloaded from the &lt;a href="http://github.com/rayners/plugin-writing-101/tree/master"&gt;Plugin Writing 101 github repository&lt;/a&gt;.  I&amp;#8217;ll be tagging the code for each entry; you can find the code for this entry &lt;a href="http://github.com/rayners/plugin-writing-101/tree/hello-world-for-template-tags-pt-1"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Next time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Making use of arguments in your template tag&lt;/li&gt;
&lt;li&gt;Making your template tag context aware&lt;/li&gt;
&lt;/ul&gt;

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=tFMl64yn_Fs:yt7tt2LhGFk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=tFMl64yn_Fs:yt7tt2LhGFk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=tFMl64yn_Fs:yt7tt2LhGFk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=tFMl64yn_Fs:yt7tt2LhGFk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=tFMl64yn_Fs:yt7tt2LhGFk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=tFMl64yn_Fs:yt7tt2LhGFk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/tFMl64yn_Fs" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2009/04/pw101-hello-world-for-template-tags-pt-1/</feedburner:origLink></entry>

<entry>
    <title>Plugin Writing 101: About the series</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/s3oFeg9CxV4/" />
    <id>tag:rayners.org,2009://1.501</id>

    <published>2009-03-25T04:10:00Z</published>
    <updated>2009-03-25T04:11:16Z</updated>

    <summary>I just thought I should follow up the Intro with some of my thoughts and expectations for this series of plugin development posts I’m writing and for whom I am writing them. My main goals are: To teach plugin development...</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
        <category term="Plugin Writing 101" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;I just thought I should follow up the &lt;a href="http://rayners.org/2009/03/plugin-writing-101-intro/"&gt;Intro&lt;/a&gt; with some of my thoughts and expectations for this series of plugin development posts I&amp;#8217;m writing and for whom I am writing them.&lt;/p&gt;

&lt;p&gt;My main goals are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To teach plugin development for Movable Type.  I am planning to focus on the perl side of plugin development, mostly because that is where I work.  I have not yet had any real need to develop a significant amount of php plugin code for Movable Type.&lt;/li&gt;
&lt;li&gt;To communicate and demonstrate what I consider to be best practices for plugin development.  Maybe you agree.  Maybe you disagree.  I would love to hear your opinion and I am open to discussion, but these are practices I use in my day-to-day plugin development work that I have put together over the last couple years.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I am not going to do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teach perl.  There are so many better resources for this than me.  I&amp;#8217;m going to do my best to avoid any wacky perl-specific techniques, so anybody with a general programming background should be able to follow along, but I am not here to teach you how to write perl.&lt;/li&gt;
&lt;li&gt;Write your plugin for you.  I am more than happy to discuss the myriad of options for integrating code into Movable Type, but anything beyond that is generally going to be outside the scope of this series.  If you need a plugin written, there is a great bunch of folks that do just that at &lt;a href="http://sixapart.com/services/"&gt;Six Apart Services&lt;/a&gt; as well as many distinguished members of the &lt;a href="http://sixapart.com/pronet/"&gt;ProNet&lt;/a&gt; and Movable Type community at large.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am in the process of finishing up the first Hello World plugin post right now, so that should be up soon.  My goal is to get roughly one actual programming post up per week.&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=s3oFeg9CxV4:gvAL8InyAb0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=s3oFeg9CxV4:gvAL8InyAb0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=s3oFeg9CxV4:gvAL8InyAb0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=s3oFeg9CxV4:gvAL8InyAb0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=s3oFeg9CxV4:gvAL8InyAb0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=s3oFeg9CxV4:gvAL8InyAb0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/s3oFeg9CxV4" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2009/03/plugin-writing-101-about-the-series/</feedburner:origLink></entry>

<entry>
    <title>Plugin Writing 101: Intro</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/NN2GYzUyAWA/" />
    <id>tag:rayners.org,2009://1.499</id>

    <published>2009-03-21T14:00:00Z</published>
    <updated>2009-03-21T06:31:55Z</updated>

    <summary>I think I’m actually going to do it now. Somehow I’ve managed to light a fire under myself to get this started. So, Plugin Writing 101. I don’t yet have any kind of set outline for this, but I figure...</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
        <category term="Plugin Writing 101" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;I think I&amp;#8217;m actually going to do it now.  Somehow I&amp;#8217;ve managed to light a fire under myself to get this started.&lt;/p&gt;

&lt;p&gt;So, Plugin Writing 101.  I don&amp;#8217;t yet have any kind of set outline for this, but I figure I&amp;#8217;ll start with the standard &amp;#8216;Hello World&amp;#8217; style plugins (yes, plugin&lt;em&gt;s&lt;/em&gt;).  The first should be finished in another day or two.  I&amp;#8217;ll also try to demonstrate my personal set of plugin development best practices as I go.&lt;/p&gt;

&lt;p&gt;Hopefully, I&amp;#8217;ll manage to make some sense.  And, please, feel free to let me know what topics you would like me to touch upon.&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=NN2GYzUyAWA:kT3flwfoGJw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=NN2GYzUyAWA:kT3flwfoGJw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=NN2GYzUyAWA:kT3flwfoGJw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=NN2GYzUyAWA:kT3flwfoGJw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=NN2GYzUyAWA:kT3flwfoGJw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=NN2GYzUyAWA:kT3flwfoGJw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/NN2GYzUyAWA" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2009/03/plugin-writing-101-intro/</feedburner:origLink></entry>

<entry>
    <title>T-Shirt Temptation</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/VUriAzztjqk/" />
    <id>tag:rayners.org,2009://1.498</id>

    <published>2009-03-21T03:45:00Z</published>
    <updated>2009-03-21T03:44:39Z</updated>

    <summary> I’ve never bought anything from Threadless before, but I have to admit this is very very tempting. I just thought I should share. Awesome, innit?...</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;&lt;a href="http://www.threadless.com/product/1693/A_Simple_Plan?streetteam=rayners" title="A Simple Plan - Threadless, Best T-shirts Ever"&gt;&lt;img style="margin: 0pt 0pt 20px 20px; float: right;" class="mt-image-right" src="http://www.threadless.com/productbanner/1693/banner1.png" width="350" height="200" border="0" alt="A Simple Plan - Threadless, Best T-shirts Ever"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve never bought anything from &lt;a href="http://www.threadless.com?streetteam=rayners"&gt;Threadless&lt;/a&gt; before, but I have to admit this is very very tempting.  I just thought I should share.&lt;/p&gt;

&lt;p&gt;Awesome, innit?&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=VUriAzztjqk:kmnozGV19Vg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=VUriAzztjqk:kmnozGV19Vg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=VUriAzztjqk:kmnozGV19Vg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=VUriAzztjqk:kmnozGV19Vg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=VUriAzztjqk:kmnozGV19Vg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=VUriAzztjqk:kmnozGV19Vg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/VUriAzztjqk" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2009/03/t-shirt-temptation/</feedburner:origLink></entry>

<entry>
    <title>Toddlers, Technology and Touchscreens</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/y64NIRwB1ac/" />
    <id>tag:rayners.org,2009://1.497</id>

    <published>2009-03-01T21:43:37Z</published>
    <updated>2009-03-01T21:52:07Z</updated>

    <summary>It’s amazing to watch the boys interact with the technology around them everyday. As cliche as it sounds, they really do have a different and amazing perspective on things. So much of what we use around them involves touchscreens (iPhones,...</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
    <category term="tech" label="tech" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="toddlers" label="toddlers" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="touchscreens" label="touchscreens" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;It&amp;#8217;s amazing to watch the boys interact with the technology around them everyday.  As cliche as it sounds, they really do have a different and amazing perspective on things.&lt;/p&gt;

&lt;p&gt;So much of what we use around them involves touchscreens (iPhones, Nintendo DS, etc.), so they just assume that lots of other things work that same way.  They try to interact with our laptops by touching the screens.  When we put on a DVD for them, they will sometimes try and interact with the menus by tapping the screen with their fingers.  By the time they&amp;#8217;re old enough to really use those things themselves, maybe touchscreens will be as ubiquitous as they think they are right now.&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=y64NIRwB1ac:EKaooPCQg30:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=y64NIRwB1ac:EKaooPCQg30:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=y64NIRwB1ac:EKaooPCQg30:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=y64NIRwB1ac:EKaooPCQg30:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~ff/DavidRaynes?a=y64NIRwB1ac:EKaooPCQg30:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DavidRaynes?i=y64NIRwB1ac:EKaooPCQg30:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/y64NIRwB1ac" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2009/03/toddlers-technology-and-touchscreens/</feedburner:origLink></entry>

<entry>
    <title>Must Be Doing Something Right</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/ZEgHLbCnGxc/" />
    <id>tag:rayners.org,2009://1.496</id>

    <published>2009-02-01T03:50:01Z</published>
    <updated>2009-02-01T04:14:24Z</updated>

    <summary>It’s not because they say please and thank you so often (and appropriately). It’s not that they hug each other and say they’re sorry (eventually) after they fight. It’s not that they love fruit, oatmeal, cheese, pancakes and any number...</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;It&amp;#8217;s not because they say please and thank you so often (and appropriately).  It&amp;#8217;s not that they hug each other and say they&amp;#8217;re sorry (eventually) after they fight.  It&amp;#8217;s not that they love fruit, oatmeal, cheese, pancakes and any number of non-candy foods.&lt;/p&gt;

&lt;p&gt;The one reason I think we must be doing something right is that William loves to rock out to classic rock (especially &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fentity%2FThe-Who%2FB000APYN9Y%3Fie%3DUTF8%26ref%255F%3Dntt%255Fmus%255Fdp%255Fpel&amp;amp;tag=davirayniamju-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;The Who&lt;/a&gt; lately).&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=qb8NQQ6s"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=5Mch6LNp"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=Mobi9iHL"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=Mobi9iHL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=yWJezRGH"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=yWJezRGH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/ZEgHLbCnGxc" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2009/01/must-be-doing-something-right/</feedburner:origLink></entry>

<entry>
    <title>Because Giant Gaming Tables Are Awesome</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/31zYYTpL0S0/" />
    <id>tag:theplothooks.org,2009://3.495</id>

    <published>2009-01-30T05:42:10Z</published>
    <updated>2009-01-30T05:43:53Z</updated>

    <summary />
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
        <category term="Warhammer 40k" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://theplothooks.org/">
        &lt;p&gt;&lt;object type="application/x-shockwave-flash" width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=67005" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt; &lt;param name="flashvars" value="intl_lang=en-us&amp;amp;photo_secret=18deb3e8fb&amp;amp;photo_id=3189155783&amp;amp;show_info_box=true"&gt;&lt;/param&gt; &lt;param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=67005"&gt;&lt;/param&gt; &lt;param name="bgcolor" value="#000000"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=67005" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;amp;photo_secret=18deb3e8fb&amp;amp;photo_id=3189155783&amp;amp;flickr_show_info_box=true" height="300" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;&lt;object type="application/x-shockwave-flash" width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=67005" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt; &lt;param name="flashvars" value="intl_lang=en-us&amp;amp;photo_secret=e3f814eb73&amp;amp;photo_id=3190059476&amp;amp;show_info_box=true"&gt;&lt;/param&gt; &lt;param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=67005"&gt;&lt;/param&gt; &lt;param name="bgcolor" value="#000000"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=67005" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;amp;photo_secret=e3f814eb73&amp;amp;photo_id=3190059476&amp;amp;flickr_show_info_box=true" height="300" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=Le8yOaLX"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=PQ98bCJM"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=ZNF6A6ej"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=ZNF6A6ej" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=LYVd7rWO"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=LYVd7rWO" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/31zYYTpL0S0" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://theplothooks.org/2009/01/because-giant-gaming-tables-are-awesome/</feedburner:origLink></entry>

<entry>
    <title>Because tests and bugs are fun</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/61ZgXuNcp68/" />
    <id>tag:rayners.org,2009://1.494</id>

    <published>2009-01-06T03:15:06Z</published>
    <updated>2009-01-06T03:35:15Z</updated>

    <summary>A colleague of mine just shared this particular frustration: yargh. my test passes if all of the objects are created within the same second, but fails if not. don’t ask how long it took me to figure that one out....</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;A colleague of mine just shared this particular frustration:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;yargh. my test passes if all of the objects are created within the same second, but fails if not. don&amp;#8217;t ask how long it took me to figure that one out.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I would have tweeted it, but it was a bit too long and I didn&amp;#8217;t want to break it up.  I found it pretty amusing, but I have an odd sense of humor and I have been spending alot of time with unit tests lately.&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=XHSBM43x"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=JmvgmJI5"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=9oW7LKpx"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=9oW7LKpx" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=armBmaX9"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=armBmaX9" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/61ZgXuNcp68" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2009/01/because-tests-and-bugs-are-fun/</feedburner:origLink></entry>

<entry>
    <title>New Urban Fantasy Anthology: Mean Streets</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/j6ktBP43LY4/" />
    <id>tag:rayners.org,2009:/reading//2.493</id>

    <published>2009-01-03T03:25:00Z</published>
    <updated>2009-01-03T03:29:47Z</updated>

    <summary> I was browsing through SF Signal’s latest books received post and I was happy to notice an anthology of urban fantasy containing stories by two of my current favorite authors: Jim Butcher (of The Dresden Files) and Simon R....</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/reading/">
        &lt;p&gt;&lt;span class="mt-enclosure mt-enclosure-media_item" style="display: inline;"&gt;&lt;a href="http://www.amazon.com/Mean-Streets-Jim-Butcher/dp/0451462491%3FSubscriptionId%3D12ESEPSDEWXXWKVPFM82%26tag%3Dreadingrayners-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0451462491"&gt;&lt;img src="http://images.amazon.com/images/P/0451462491.01._PC_SCMZZZZZZZ_.jpg" title="Mean Streets" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;I was browsing through &lt;a href="http://www.sfsignal.com/"&gt;SF Signal&lt;/a&gt;&amp;#8217;s latest &lt;a href="http://www.sfsignal.com/archives/007600.html"&gt;books received&lt;/a&gt; post and I was happy to notice an anthology of urban fantasy containing stories by two of my current favorite authors: &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fentity%2FJim-Butcher%2FB001H6U718%3Fie%3DUTF8%26%252AVersion%252A%3D1%26%252Aentries%252A%3D0&amp;amp;tag=readingrayners-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;Jim Butcher&lt;/a&gt; (of &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fseries%2F83652%3Fie%3DUTF8%26ref%255F%3Drcx%255Fser%255Fed%255F0&amp;amp;tag=readingrayners-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;The Dresden Files&lt;/a&gt;) and &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fentity%2FSimon-R.-Green%2FB001I9VY9I%3Fie%3DUTF8%26%252AVersion%252A%3D1%26%252Aentries%252A%3D0&amp;amp;tag=readingrayners-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;Simon R. Green&lt;/a&gt; (of &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fseries%2F92953%3Fie%3DUTF8%26ref%255F%3Drcx%255Fser%255Fed%255F0&amp;amp;tag=readingrayners-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;The Nightside&lt;/a&gt;).  This is in addition to stories by two authors (&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26redirect%3Dtrue%26search-type%3Dss%26index%3Dbooks%26ref%3Dntt%255Fathr%255Fdp%255Fsr%255F2%26field-author%3DKat%2520Richardson&amp;amp;tag=readingrayners-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;Kat Richardson&lt;/a&gt; and &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26redirect%3Dtrue%26search-type%3Dss%26index%3Dbooks%26ref%3Dntt%255Fathr%255Fdp%255Fsr%255F4%26field-author%3DThomas%2520E.%2520Sniegoski&amp;amp;tag=readingrayners-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;Thomas E. Sniegoski&lt;/a&gt;) I have not yet read, but I would certainly be willing to try out if they are included with the previous two.&lt;/p&gt;

&lt;p&gt;That one went right on my &lt;a href="http://www.amazon.com/gp/registry/wishlist/L2PDDBJTWHGY"&gt;wishlist&lt;/a&gt;.  It&amp;#8217;ll be out in a few days and I may just have to snag it.&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=uXVtSEWU"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=HGPdK321"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=wsbfHCFW"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=wsbfHCFW" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=szjIzO4v"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=szjIzO4v" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/j6ktBP43LY4" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/reading/2009/01/mean-streets/</feedburner:origLink></entry>

<entry>
    <title>Upgraded to MT 4.23</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/J7hvYq9H7Ak/" />
    <id>tag:rayners.org,2009://1.492</id>

    <published>2009-01-02T03:52:25Z</published>
    <updated>2009-01-02T03:56:08Z</updated>

    <summary>So, yeah, it’s a month late or so, but I’ve been really busy. I finally upgraded this site to Movable Type 4.23. Maybe I’ll even write more plugins sometime soon....</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;So, yeah, it&amp;#8217;s a month late or so, but I&amp;#8217;ve been really busy.  I finally upgraded this site to Movable Type 4.23.  Maybe I&amp;#8217;ll even write more plugins sometime soon.&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=tXz0jRxW"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=S0qkyYWP"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=fqIwkD7V"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=fqIwkD7V" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=7psXd4Sg"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=7psXd4Sg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/J7hvYq9H7Ak" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2009/01/upgraded-to-mt-423/</feedburner:origLink></entry>

<entry>
    <title>I apologize about the feed updates</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/A78JkfU5Hjs/" />
    <id>tag:rayners.org,2008://1.491</id>

    <published>2008-11-22T05:27:41Z</published>
    <updated>2008-11-22T05:29:24Z</updated>

    <summary>I’m deploying a development version of my MediaConsumer plugin and a number of entries might appear as updated in feed readers as I start applying it....</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/">
        &lt;p&gt;I&amp;#8217;m deploying a development version of my MediaConsumer plugin and a number of entries might appear as updated in feed readers as I start applying it.&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=NenQ3DXt"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=YjqKKGQk"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=0hGUIt0v"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=0hGUIt0v" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=pEYLWf8k"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=pEYLWf8k" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/A78JkfU5Hjs" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/2008/11/i-apologize-about-the-feed-updates/</feedburner:origLink></entry>

<entry>
    <title>Pilot Ordered for A Game of Thrones</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/W7TrxVOmlqc/" />
    <id>tag:rayners.org,2008:/reading//2.490</id>

    <published>2008-11-18T04:50:00Z</published>
    <updated>2008-11-22T05:34:59Z</updated>

    <summary> From Pat’s Fantasy Hotlist: ASOIAF on HBO: It’s a go!: Martin fans rejoice! ;-) Well, let me get things started by saying “Yippie!” More information at The Hollywood Reporter: HBO conjuring fantasy series....</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
        <category term="A Song of Ice and Fire" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="George R. R. Martin" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/reading/">
        &lt;p&gt;&lt;span class="mt-enclosure mt-enclosure-media_item" style="display: inline;"&gt;&lt;a href="http://www.amazon.com/Game-Thrones-Song-Fire-Book/dp/0553573403%3FSubscriptionId%3D12ESEPSDEWXXWKVPFM82%26tag%3Dreadingrayners-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0553573403"&gt;&lt;img src="http://images.amazon.com/images/P/0553573403.01._PC_SCMZZZZZZZ_.jpg" title="A Game of Thrones (A Song of Ice and Fire, Book 1)" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;From &lt;a href="http://fantasyhotlist.blogspot.com/"&gt;Pat&amp;#8217;s Fantasy Hotlist&lt;/a&gt;: &lt;a href="http://fantasyhotlist.blogspot.com/2008/11/asoiaf-on-hbo-its-go.html"&gt;ASOIAF on HBO: It&amp;#8217;s a go!&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Martin fans rejoice! ;-)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, let me get things started by saying &amp;#8220;Yippie!&amp;#8221;&lt;/p&gt;

&lt;p&gt;More information at &lt;a href="http://www.hollywoodreporter.com/hr/content_display/news/e3ie9098baec9eb95cdf64383a225032180"&gt;The Hollywood Reporter: HBO conjuring fantasy series&lt;/a&gt;.&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=OXI613V5"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=DWd2lOQ3"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=JcZM7mFR"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=JcZM7mFR" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=BjHGJNmK"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=BjHGJNmK" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/W7TrxVOmlqc" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/reading/2008/11/pilot-ordered-for-a-game-of-thrones/</feedburner:origLink></entry>

<entry>
    <title>Legend of the Seeker premieres this weekend</title>
    <link rel="alternate" type="text/html" href="http://feeds.rayners.org/~r/DavidRaynes/~3/UbpZrVZgGB8/" />
    <id>tag:rayners.org,2008:/reading//2.487</id>

    <published>2008-10-28T02:30:00Z</published>
    <updated>2008-11-22T05:40:05Z</updated>

    <summary> The television series based on the first novel of Terry Goodkind’s Sword of Truth series, Wizard’s First Rule, premieres this weekend in syndication. There are a number of folks out there that are very much not fans of Terry...</summary>
    <author>
        <name>rayners</name>
        <uri>http://rayners.org/</uri>
    </author>
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Sword of Truth" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Terry Goodkind" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://rayners.org/reading/">
        &lt;p&gt;&lt;span class="mt-enclosure mt-enclosure-media_item" style="display: inline;"&gt;&lt;a href="http://www.amazon.com/Wizards-First-Rule-Sword-Truth/dp/0812548051%3FSubscriptionId%3D12ESEPSDEWXXWKVPFM82%26tag%3Dreadingrayners-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0812548051"&gt;&lt;img src="http://images.amazon.com/images/P/0812548051.01._PC_SCMZZZZZZZ_.jpg" title="Wizard's First Rule (Sword of Truth, Book 1)" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;The television series based on the first novel of Terry Goodkind&amp;#8217;s &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fseries%2F3%3Fie%3DUTF8%26ref%255F%3Dpd%255Fserl%255Fbooks%26edition%3Dmass%255Fmarket&amp;amp;tag=davirayniamju-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;Sword of Truth series&lt;/a&gt;, Wizard&amp;#8217;s First Rule, premieres this weekend in syndication.&lt;/p&gt;

&lt;p&gt;There are a number of folks out there that are very much &lt;strong&gt;not&lt;/strong&gt; fans of Terry Goodkind, but I enjoyed the novel when I read it years ago; it was hardly the best novel of the 20th century to be sure, but I liked it.  Between that and the fact that Sam Raimi is involved with it as executive producer, I am more than willing to give this series the benefit of the doubt and watch a few episodes before I decide to give up on it.  If nothing else, I hope this will be at least a marginal enough success so that other great fantasy novels could be serialized into season (or longer) television programming.&lt;/p&gt;

&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/QVVh7x_8FJ4&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/QVVh7x_8FJ4&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=U6697GRa"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=0UznXGOD"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=YjmueGgi"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=YjmueGgi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.rayners.org/~f/DavidRaynes?a=ifKhFBgb"&gt;&lt;img src="http://feeds.feedburner.com/~f/DavidRaynes?i=ifKhFBgb" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidRaynes/~4/UbpZrVZgGB8" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://rayners.org/reading/2008/10/legend-of-the-seeker-premieres-this-weekend/</feedburner:origLink></entry>


</feed>
