<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.garfieldtech.com" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Technical Thoughts, Tutorials, and Musings</title>
 <link>http://www.garfieldtech.com/blog</link>
 <description>Technical Thoughts, Tutorials, and Musings</description>
 <language>en</language>
<item>
 <title>Fare thee well, Postgres 7</title>
 <link>http://www.garfieldtech.com/blog/drupal-7-postgres-8</link>
 <description>&lt;p&gt;Drupal 7 is shaping up to be the most modern Drupal ever!  (Now there&#039;s a silly title if I ever heard one...)  Not only are we upping the system requirements to &lt;a href=&quot;http://www.garfieldtech.com/blog/gophp5&quot;&gt;PHP 5.2&lt;/a&gt; and &lt;a href=&quot;http://www.garfieldtech.com/blog/goodbye-mysql-4&quot;&gt;MySQL 5.0&lt;/a&gt;, but PostgreSQL users will now need &lt;a href=&quot;http://drupal.org/node/248205&quot;&gt;PostgreSQL 8.1&lt;/a&gt; at least.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.garfieldtech.com/blog/drupal-7-postgres-8&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.garfieldtech.com/blog/drupal-7-postgres-8#comments</comments>
 <category domain="http://www.garfieldtech.com/topics/web-development/drupal">Drupal</category>
 <category domain="http://www.garfieldtech.com/topics/web-development/php">PHP</category>
 <category domain="http://www.garfieldtech.com/blog-topics/postgresql">PostgreSQL</category>
 <category domain="http://www.garfieldtech.com/blog-topics/sql">SQL</category>
 <pubDate>Mon, 14 Jul 2008 21:43:07 -0400</pubDate>
 <dc:creator>Larry</dc:creator>
 <guid isPermaLink="false">121 at http://www.garfieldtech.com</guid>
</item>
<item>
 <title>RFC: Drupal pluggable system handlers</title>
 <link>http://www.garfieldtech.com/blog/drupal-handler-rfc</link>
 <description>&lt;p&gt;Recently I&#039;ve been talking up various ideas for pluggable subsystems in Drupal in IRC and the other usual haunts.  Ideas have been percolating in my head, but so far I have been remiss in actually writing them down.  Yesterday, however, I had an epiphany to solve the primary issue I was trying to work out, so I present a hopefully workable RFC (for real, not IETF version) for pluggable subsystems in Drupal.&lt;/p&gt;
&lt;p&gt;I am posting this over to Planet PHP as well to invite commentary from those who aren&#039;t already embedded in the Drupal mindset. :-)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.garfieldtech.com/blog/drupal-handler-rfc&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.garfieldtech.com/blog/drupal-handler-rfc#comments</comments>
 <category domain="http://www.garfieldtech.com/blog-topics/architecture">Architecture</category>
 <category domain="http://www.garfieldtech.com/topics/web-development/drupal">Drupal</category>
 <category domain="http://www.garfieldtech.com/blog-topics/drupal-7">Drupal 7</category>
 <category domain="http://www.garfieldtech.com/topics/web-development/php">PHP</category>
 <pubDate>Tue, 17 Jun 2008 01:07:13 -0400</pubDate>
 <dc:creator>Larry</dc:creator>
 <guid isPermaLink="false">119 at http://www.garfieldtech.com</guid>
</item>
<item>
 <title>The latest spam</title>
 <link>http://www.garfieldtech.com/blog/new-spam</link>
 <description>&lt;p&gt;I have been running &lt;a href=&quot;http://www.mollom.com/&quot;&gt;Mollom&lt;/a&gt; as my spam-fighter on this site for not quite two months now.  It&#039;s been fairly effective overall.  The nifty flash meter shows me just how bad the spam problem is (good grief, 593 blocked spam messages just on 15 May!), and I haven&#039;t gotten any spam in my comment list yet.&lt;/p&gt;
&lt;p&gt;That is, until today, when a new form appeared.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.garfieldtech.com/blog/new-spam&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.garfieldtech.com/blog/new-spam#comments</comments>
 <category domain="http://www.garfieldtech.com/topics/web-development/drupal">Drupal</category>
 <category domain="http://www.garfieldtech.com/blog-topics/mollom">Mollom</category>
 <category domain="http://www.garfieldtech.com/blog-topics/spam">Spam</category>
 <pubDate>Fri, 23 May 2008 20:54:45 -0400</pubDate>
 <dc:creator>Larry</dc:creator>
 <guid isPermaLink="false">117 at http://www.garfieldtech.com</guid>
</item>
<item>
 <title>GooglSearch is dead, long live GoogleSearch</title>
 <link>http://www.garfieldtech.com/blog/googlesearch-cse</link>
 <description>&lt;p&gt;Some time ago, on a lark, I wrote a Drupal module called &lt;a googlesearch&gt;Google Search&lt;/a&gt;.  It was mostly so I could experiment with the then-new Forms API, and was one of those &quot;one night&quot; projects we all do from time to time.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.garfieldtech.com/blog/googlesearch-cse&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.garfieldtech.com/blog/googlesearch-cse#comments</comments>
 <category domain="http://www.garfieldtech.com/topics/web-development/drupal">Drupal</category>
 <category domain="http://www.garfieldtech.com/blog-topics/drupal-6">Drupal 6</category>
 <category domain="http://www.garfieldtech.com/blog-topics/drupal-modules">Drupal modules</category>
 <pubDate>Sat, 17 May 2008 17:08:54 -0400</pubDate>
 <dc:creator>Larry</dc:creator>
 <guid isPermaLink="false">116 at http://www.garfieldtech.com</guid>
</item>
<item>
 <title>Drupal 7 gets introspective code registry</title>
 <link>http://www.garfieldtech.com/drupal-7-registry</link>
 <description>&lt;p&gt;At DrupalCon Sunnyvale 2007, Rasmus Lerdorf chided Drupal on spending over half of its request time on just the bootstrap process.  As a GHOP Task , Cornil did a performance analysis of Drupal and found its two largest performance drains were the bootstrap process and the theming layer.  Quite simply, Drupal spends too much time including code.&lt;/p&gt;
&lt;p&gt;Drupal 6 has the beginnings of a solution.  Page handlers, the most unused code in Drupal, can now be split out into conditional include files and the menu system is able to conditionally load just the file it needs for a given page request.  Based on &lt;a href=&quot;http://www.garfieldtech.com/blog/benchmark-page-split&quot;&gt;earlier benchmarks&lt;/a&gt;, just that code shuffling netted Drupal 6 a 20% performance boost.  The downside, however, is that it does require the module author to explicitly specify file to be included, and the syntax for it is just a little bit annoying what with the file name and file path being separate keys on the menu handler.  &lt;/p&gt;
&lt;p&gt;Fortunately, Drupal 7&#039;s self-learning &lt;a href=&quot;http://drupal.org/node/221964&quot;&gt;code registry system&lt;/a&gt; has &lt;a href=&quot;http://drupal.org/cvs?commit=114916&quot;&gt;just&lt;/a&gt; &lt;a href=&quot;http://drupal.org/cvs?commit=114932&quot;&gt;landed&lt;/a&gt;, which should obliterate most of the wasted bootstrap cost.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.garfieldtech.com/drupal-7-registry&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.garfieldtech.com/drupal-7-registry#comments</comments>
 <category domain="http://www.garfieldtech.com/topics/web-development/drupal">Drupal</category>
 <category domain="http://www.garfieldtech.com/blog-topics/drupal-7">Drupal 7</category>
 <category domain="http://www.garfieldtech.com/blog-topics/performance">Performance</category>
 <category domain="http://www.garfieldtech.com/topics/web-development/php">PHP</category>
 <pubDate>Wed, 07 May 2008 15:39:49 -0400</pubDate>
 <dc:creator>Larry</dc:creator>
 <guid isPermaLink="false">115 at http://www.garfieldtech.com</guid>
</item>
<item>
 <title>Drupal 6: The missing manual</title>
 <link>http://www.garfieldtech.com/blog/drupal-6-the-missing-manual</link>
 <description>&lt;p&gt;For those who haven&#039;t noticed yet, the latest in a expected long line of Drupal books for this year has been published: David Mercer&#039;s verbosely-named &quot;&lt;a href=&quot;http://www.packtpub.com/drupal-6-create-powerful-websites/book/mid/1212077fg381&quot;&gt;Building Powerful and Robust Websites with Drupal 6&lt;/a&gt;&quot;.  It is not a book for the experienced Drupaler; it&#039;s target market is people picking up Drupal, and the web for that matter, for the very first time.&lt;/p&gt;
&lt;p&gt;Personally I think David has done a great job with it, but then I am biased; I was the tech reviewer for the book. :-)  If you want an unbiased opinion, pick up a copy yourself and give it a read.  Then you&#039;ll know how good it is.  As an added bonus, 5% of all sales through Packt&#039;s web site are donated to the Drupal Association.  Everybody wins!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.garfieldtech.com/blog/drupal-6-the-missing-manual&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.garfieldtech.com/blog/drupal-6-the-missing-manual#comments</comments>
 <category domain="http://www.garfieldtech.com/blog-topics/books">Books</category>
 <category domain="http://www.garfieldtech.com/topics/web-development/drupal">Drupal</category>
 <category domain="http://www.garfieldtech.com/topics/web-development/php">PHP</category>
 <pubDate>Thu, 24 Apr 2008 00:20:55 -0400</pubDate>
 <dc:creator>Larry</dc:creator>
 <guid isPermaLink="false">113 at http://www.garfieldtech.com</guid>
</item>
<item>
 <title>Testable APIs</title>
 <link>http://www.garfieldtech.com/blog/testable-apis</link>
 <description>&lt;p&gt;By now you may have heard the &lt;a href=&quot;http://cwgordon.com/paris-simpletest-sprint-day-2&quot;&gt;news from Paris&lt;/a&gt; that a &lt;a href=&quot;http://www.kevinbridges.org/node/147&quot;&gt;unit testing framework&lt;/a&gt; has &lt;a href=&quot;http://drupal.org/cvs?commit=111813&quot;&gt;landed in Drupal core&lt;/a&gt;.  A huge shout-out goes to everyone involved.  I particularly want to note the work that&#039;s been put in by former GHOP students and members of the GHOP team.  It&#039;s amazing to see how far some people have come in a short time, despite still having homework to do. :-)&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;http://groups.drupal.org/node/10099&quot;&gt;next step&lt;/a&gt;, of course, is to make Drupal itself fully-tested.  That poses a number of challenges, particularly for unit tests.  Because I&#039;m sure others will be singing the (well-deserved) praises of the testing team, I want to take a moment to focus on that next step and one important approach: Testable APIs.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.garfieldtech.com/blog/testable-apis&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.garfieldtech.com/blog/testable-apis#comments</comments>
 <category domain="http://www.garfieldtech.com/topics/web-development/drupal">Drupal</category>
 <category domain="http://www.garfieldtech.com/topics/web-development/php">PHP</category>
 <category domain="http://www.garfieldtech.com/blog-topics/unit-testing">Unit testing</category>
 <pubDate>Mon, 21 Apr 2008 02:38:26 -0400</pubDate>
 <dc:creator>Larry</dc:creator>
 <guid isPermaLink="false">112 at http://www.garfieldtech.com</guid>
</item>
<item>
 <title>Pluggable systems HowTo</title>
 <link>http://www.garfieldtech.com/blog/pluggable-systems-howto</link>
 <description>&lt;p&gt;I recently had a discussion with Peter Wolanin about pluggable subsystems.  (You can tell this is going to be an exciting entry already, can&#039;t you?)  Drupal has supported a few pluggable subsystems for a long time, namely the database and cache systems.  In both cases, they work on a very simple principle: Conditionally include one of two (or more) files that defines the same set of functions but with different bodies.  &lt;/p&gt;
&lt;p&gt;That&#039;s all well and good and simple, but has some very serious limitations.  Most notably, because the same function name is defined twice you can never load multiple versions at the same time.  That becomes a problem if you want to, say, connect to a MySQL and PostgreSQL database in the same page request.  In addition, Drupal 7 is on track to include a fully introspective &lt;a href=&quot;http://drupal.org/node/221964&quot;&gt;code registry&lt;/a&gt; for conditional code loading, which, based on &lt;a href=&quot;http://www.garfieldtech.com/blog/benchmark-page-split&quot;&gt;earlier benchmarks&lt;/a&gt;, should be a huge performance boost.  The Registry, however, assumes that all code resources (functions, classes, and interfaces) are globally unique throughout Drupal.  Having a given function name defined twice will confuse the poor thing.&lt;/p&gt;
&lt;p&gt;That is not an insurmountable problem, or even, truth be told, a difficult one.  It simply requires switching from a simple include to a more formal mechanism.  There are, in fact, several ways that can be done, so to further the education of the world at large (and probably embarrass myself a bit in front of other architecture buffs) I decided to write a brief survey of simple pluggable mechanisms.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.garfieldtech.com/blog/pluggable-systems-howto&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.garfieldtech.com/blog/pluggable-systems-howto#comments</comments>
 <category domain="http://www.garfieldtech.com/topics/web-development/drupal">Drupal</category>
 <category domain="http://www.garfieldtech.com/topics/web-development/php">PHP</category>
 <category domain="http://www.garfieldtech.com/topics/tutorials">Tutorials</category>
 <pubDate>Mon, 07 Apr 2008 23:57:41 -0400</pubDate>
 <dc:creator>Larry</dc:creator>
 <guid isPermaLink="false">111 at http://www.garfieldtech.com</guid>
</item>
<item>
 <title>The little things</title>
 <link>http://www.garfieldtech.com/blog/amarok-file-rename</link>
 <description>&lt;p&gt;It&#039;s the little things that really make or break a system.  For instance, earlier tonight a song came up on my playlist in &lt;a href=&quot;http://amarok.kde.org/&quot;&gt;Amarok&lt;/a&gt;.  I realized the name was misspelled.  I corrected the ID3 tag.  I then went to the directory where the file was and renamed it.  The song was still playing.  Amarok noticed and rescanned my collection, updating its records of the new file name, and kept on playing the song without any interruption.&lt;/p&gt;
&lt;p&gt;That is how a computer is supposed to behave. :-)&lt;/p&gt;
</description>
 <comments>http://www.garfieldtech.com/blog/amarok-file-rename#comments</comments>
 <category domain="http://www.garfieldtech.com/blog-topics/amarok">Amarok</category>
 <category domain="http://www.garfieldtech.com/topics/gnu-linux">GNU/Linux</category>
 <category domain="http://www.garfieldtech.com/blog-topics/gnu-linux/kde">KDE</category>
 <pubDate>Mon, 07 Apr 2008 23:50:52 -0400</pubDate>
 <dc:creator>Larry</dc:creator>
 <guid isPermaLink="false">110 at http://www.garfieldtech.com</guid>
</item>
<item>
 <title>Mollom: Dries&#039; 3rd kid</title>
 <link>http://www.garfieldtech.com/blog/mollom</link>
 <description>&lt;div style=&quot;float:left; margin-right:1.5em;&quot;&gt;
&lt;script&gt;
digg_url = &#039;http://digg.com/software/Mollom_new_FREE_anti_spam_filter_for_websites&#039; 
;
&lt;/script&gt;&lt;script src=&quot;http://digg.com/api/diggthis.js&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;I&#039;ve been meaning to upgrade the Akismet module on this site for a while now.  Of course, I waited so long that another option just appeared, one I&#039;ve been waiting to see for a while: &lt;a href=&quot;http://www.mollom.com/&quot;&gt;Mollom&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The other other project from apparent insomniac Dries Buytaert, Mollom is a content filtering service similar to Akismet.  I&#039;ve actually been familiar with it for a long time, as the &lt;a href=&quot;http://gophp5.org/&quot;&gt;GoPHP5 project&lt;/a&gt; has been running a Mollom private beta since last June.  In fact, when Acquia was announced my first thought was &quot;wait, what happened to Mollom?&quot;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.garfieldtech.com/blog/mollom&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.garfieldtech.com/blog/mollom#comments</comments>
 <category domain="http://www.garfieldtech.com/topics/web-development/drupal">Drupal</category>
 <category domain="http://www.garfieldtech.com/blog-topics/gophp5">GoPHP5</category>
 <category domain="http://www.garfieldtech.com/blog-topics/mollom">Mollom</category>
 <pubDate>Tue, 01 Apr 2008 00:29:55 -0400</pubDate>
 <dc:creator>Larry</dc:creator>
 <guid isPermaLink="false">108 at http://www.garfieldtech.com</guid>
</item>
</channel>
</rss>
