<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.johnandcailin.com" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>drupal blogs </title>
 <link>http://www.johnandcailin.com/drupal</link>
 <description>view all blogs for a particular author and tag</description>
 <language>en</language>
<item>
 <title>Hiring Great Drupal Developers - Buyer Beware!</title>
 <link>http://www.johnandcailin.com/blog/john/hiring-great-drupal-developers-buyer-beware</link>
 <description>&lt;p&gt;Hiring Drupal developers is difficult. Hiring great Drupal developers in the current market often feels close to impossible. They are highly sought after and most of the people on the market, in all honesty, aren’t very good.

&lt;p&gt;I’ve put together a list of the &lt;a href=&quot;http://thereq.com/q/best-drupal-software-interview-questions/all&quot;&gt;best Drupal interview questions&lt;/a&gt; that I’ve used over the years to screen Drupal candidates. Hopefully you’ll find them useful. &lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/hiring-great-drupal-developers-buyer-beware&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/hiring-great-drupal-developers-buyer-beware#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/hiring">hiring</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Fri, 18 Nov 2011 08:44:32 -0800</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">3487 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>Digg and Drupal</title>
 <link>http://www.johnandcailin.com/blog/john/digg-and-drupal</link>
 <description>We&#039;ve recently started using Drupal 6 at Digg.com for all our content needs. So far so good. Everything from our &lt;a href=&quot;http://about.digg.com/jobs&quot;&gt;jobs page&lt;/a&gt;, to our site tour, to the Open Source site &lt;a href=&quot;http://about.digg.com/blog/digg-open-source&quot;&gt;we launched three days ago&lt;/a&gt;, is managed via Drupal.

Read more about our use of Drupal on the &lt;a href=&quot;http://about.digg.com/blog/powered-drupal&quot;&gt;Digg Blog&lt;/a&gt;.
&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/digg-and-drupal&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/digg-and-drupal#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/digg">digg</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Mon, 19 Apr 2010 17:52:35 -0700</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">2518 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>log4drupal now available on github</title>
 <link>http://www.johnandcailin.com/blog/cailin/log4drupal-now-available-github</link>
 <description>&lt;p&gt;
both the 5.x and 6.x versions are now available for download on github.  sorry, i just can&#039;t do CVS anymore.  to download: 
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;start  by going here: &lt;a href=&quot;http://github.com/cailinanne/log4drupal&quot;&gt;http://github.com/cailinanne/log4drupal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;then click the &lt;code&gt;all tags&lt;/code&gt; drop-down and choose the appropriate version&lt;/li&gt;
&lt;li&gt;then click the download button&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
a full description of the module is available &lt;a href=&quot;/blog/cailin/log4drupal-updated-logging-api-drupal-6&quot;&gt;here&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/log4drupal-now-available-github&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/cailin/log4drupal-now-available-github#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Mon, 17 Aug 2009 17:56:10 -0700</pubDate>
 <dc:creator>cailin</dc:creator>
 <guid isPermaLink="false">1998 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>log4drupal - an updated logging api for drupal 6</title>
 <link>http://www.johnandcailin.com/blog/cailin/log4drupal-updated-logging-api-drupal-6</link>
 <description>&lt;p&gt;
drupal 6 included an upgrade to the built in logging functionality (watchdog).  drupal 6 exposes a new hook,  &lt;code&gt;hook_watchdog&lt;/code&gt; which modules may implement to log Drupal events to custom destinations.  it also includes two implementations, the &lt;code&gt;dblog&lt;/code&gt; module which logs to the watchdog table, and the &lt;code&gt;syslog&lt;/code&gt; module which logs to syslog.
&lt;/p&gt;

&lt;p&gt;
with these upgrades, log4drupal is less critical addition to a drupal install, and i hesitated before providing a drupal 6 upgrade.  however, eventually i decided that log4drupal is still a useful addition to a drupal development environment as log4drupal provides the following features still not provided by the upgraded drupal 6 watchdog implementation :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a java-style stacktrace including file and line numbers, showing the path of execution&lt;/li&gt;
&lt;li&gt;automatic recursive printing of all variables passed to the log methods&lt;/li&gt;
&lt;li&gt;ability to change the logging level on the fly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
in addition, the drupal 6 version of log4drupal includes the following upgrades from the drupal 5 version
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;all messages sent to the watchdog method are &lt;em&gt;also&lt;/em&gt; output via log4drupal&lt;/li&gt;
&lt;li&gt;severity levels have been expanded to confirm to RFC 3164&lt;/li&gt;
&lt;li&gt;log module now loaded during the drupal bootstrap phase so that messages may be added within &lt;code&gt;hook_boot&lt;/code&gt; implementations.
&lt;/ul&gt;

&lt;p&gt;
you may download the drupal 6 version  &lt;a href=&quot;/blog/cailin/log4drupal-now-available-github&quot;&gt;here&lt;/a&gt;.  see below for general information on what this module is about and how it works.
&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/log4drupal-updated-logging-api-drupal-6&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/cailin/log4drupal-updated-logging-api-drupal-6#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Mon, 30 Mar 2009 10:00:35 -0700</pubDate>
 <dc:creator>cailin</dc:creator>
 <guid isPermaLink="false">1588 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>easy-peasy-lemon-squeezy drupal 6 installation on debian linux </title>
 <link>http://www.johnandcailin.com/blog/cailin/easy-peasy-lemon-squeezy-drupal-6-installation-debian-linux</link>
 <description>&lt;p&gt;
installing drupal is pretty easy, but it&#039;s even easier if you have a step by step guide. i&#039;ve written one that will produce a basic working configuration with drupal6 on debian lenny with php5, mysql5 and apache2. 
&lt;/p&gt;

&lt;p&gt;
all commands that follow assume that you are the root user. 
&lt;/p&gt;

&lt;p&gt;
let&#039;s get started!
&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/easy-peasy-lemon-squeezy-drupal-6-installation-debian-linux&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/cailin/easy-peasy-lemon-squeezy-drupal-6-installation-debian-linux#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/lenny">lenny</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Thu, 26 Mar 2009 14:48:14 -0700</pubDate>
 <dc:creator>cailin</dc:creator>
 <guid isPermaLink="false">1581 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>using google analytics advanced segments to separate direct and organic traffic</title>
 <link>http://www.johnandcailin.com/blog/cailin/using-google-analytics-advanced-segments-separate-direct-and-organic-traffic</link>
 <description>&lt;p&gt;
traffic to a website can be divided into four major sources :  direct, paid, organic and referrals.  unsurprisingly, google analytics segments the traffic sources reports accordingly.
&lt;/p&gt;

&lt;p&gt;
there is, however, a small catch. the ever growing popularity of search engines has led to an odd use case :  users who use a search engine to search for &lt;em&gt;exactly&lt;/em&gt; your domain name, instead of simply typing www.mydomain.com into their web browser.  these users have just reached your site via an &quot;organic search&quot; and google analytics will classify them accordingly.
&lt;/p&gt;

&lt;p&gt;
technically this is correct, but semantically it&#039;s troubling.  the users who have reached your site by typing &quot;mydomain&quot; into Google have far more in common with the users that entered www.mydomain.com into their URL bar and far less in common with those users that reached your site by typing &quot;my optimized search term&quot; into Google.  and the population of these users is not small - on one of the commercial drupal sites that i maintain these &quot;mydomain&quot; Google searchers account for over one third of the supposedly organic traffic.
&lt;/p&gt;

&lt;p&gt;
before the release of google analytics advanced segments, one could estimate the volume of  &quot;True Organic&quot; pageviews by starting with the organic search volume, then using the keyword report to subtract all the &quot;mydomain&quot; keywords (mydomain, mydomain.com, and, my personal favorite www.mydomain.com).
&lt;/p&gt;

&lt;p&gt;
thankfully, advanced segments now gives us an easy way to create a &quot;True Direct&quot; and &quot;True Organic&quot; segment - in which all the &quot;mydomain&quot; organic searches have been removed from the organic segment, and stuck in the direct segment instead.
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/using-google-analytics-advanced-segments-separate-direct-and-organic-traffic&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/cailin/using-google-analytics-advanced-segments-separate-direct-and-organic-traffic#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/google-analytics">google-analytics</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Mon, 05 Jan 2009 13:03:39 -0800</pubDate>
 <dc:creator>cailin</dc:creator>
 <guid isPermaLink="false">1364 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>amazon release their elastic block store, ebs</title>
 <link>http://www.johnandcailin.com/blog/john/amazon-release-their-elastic-block-store%2C-ebs</link>
 <description>&lt;p&gt;&lt;a href=&quot;amazon-release-their-elastic-block-store%2C-ebs&quot;&gt;&lt;img src=&quot;http://www.johnandcailin.com/files/images/drupalBodyBuilder.smallish.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px 10px 0px 10px&quot;&gt;&lt;/a&gt;
a while ago i posted some &lt;a href=&quot;http://www.johnandcailin.com/blog/john/lamp-performance-elastic-compute-cloud%3A-benchmarking-drupal-amazon-ec2&quot;&gt;performance benchmarks&lt;/a&gt; for drupal running on a variety of servers in amazon&#039;s &lt;a href=&quot;http://en.wikipedia.org/wiki/Amazon_Elastic_Compute_Cloud&quot;&gt;elastic compute cloud&lt;/a&gt;.

&lt;p&gt;amazon have just released ebs, the final piece of technology that makes their ec2 platform really viable for running lamp stacks stuck as drupal.

&lt;p&gt;ebs, the &quot;elastic block store&quot;, provides sophisticated storage for your database instance, with features including:

&lt;ul&gt;
&lt;li&gt;high io throughput
&lt;li&gt;data replication
&lt;li&gt;large storage capacity
&lt;li&gt;hot backups using snapshots
&lt;li&gt;instance type portability e.g. quickly swapping your database hardware for a bigger machine.
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/amazon-release-their-elastic-block-store%2C-ebs&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/amazon-release-their-elastic-block-store%2C-ebs#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/ec2">ec2</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/jmeter">jmeter</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/lamp">lamp</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/scalability">scalability</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/xen">xen</category>
 <pubDate>Tue, 26 Aug 2008 06:42:33 -0700</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">982 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>lamp on amazon ec2 shaping up nicely</title>
 <link>http://www.johnandcailin.com/blog/john/lamp-amazon-ec2-shaping-nicely</link>
 <description>&lt;a href=&quot;http://www.johnandcailin.com/blog/john/lamp-amazon-ec2-shaping-nicely&quot;&gt;&lt;img src=&quot;http://www.johnandcailin.com/files/images/drupalBodyBuilder.smallish.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px 10px 0px 10px&quot;&gt;&lt;/a&gt;
recently i posted some &lt;a href=&quot;http://www.johnandcailin.com/blog/john/lamp-performance-elastic-compute-cloud%3A-benchmarking-drupal-amazon-ec2&quot;&gt;encouraging performance benchmarks&lt;/a&gt; for drupal running on a variety of servers in amazon&#039;s &lt;a href=&quot;http://en.wikipedia.org/wiki/Amazon_Elastic_Compute_Cloud&quot;&gt;elastic compute cloud&lt;/a&gt;. while the performance was encouraging, the suitability of this environment for running lamp stacks was not. ec2 had some fundamental issues including a lack of static ip addresses and no viable persistent storage mechanism.

&lt;p&gt;amazon are quickly rectifying these problems, and recently announced &lt;a href=&quot;http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1346&quot;&gt;elasic ip addresses&lt;/a&gt;; a &quot;static&quot; ip address that you own and can dynamically point at any of your instances. 

&lt;p&gt;today amazon indicated that persistent storage will soon be available.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/lamp-amazon-ec2-shaping-nicely&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/lamp-amazon-ec2-shaping-nicely#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/ec2">ec2</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/jmeter">jmeter</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/lamp">lamp</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/scalability">scalability</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/xen">xen</category>
 <pubDate>Mon, 14 Apr 2008 21:02:46 -0700</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">459 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>zicasso launches drupal-powered web2.0 travel site</title>
 <link>http://www.johnandcailin.com/blog/john/zicasso-launches-drupal-powered-web20-travel-site</link>
 <description>&lt;a href=&quot;http://www.johnandcailin.com/blog/john/zicasso-launches-drupal-powered-web2.0-travel-site&quot;&gt;&lt;img src=&quot;http://www.johnandcailin.com/files/images/zicasso.smallish.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px;&quot;&gt;&lt;/a&gt;

&lt;p&gt;three weeks ago, &lt;a href=&quot;http://www.zicasso.com&quot;&gt;zicasso.com&lt;/a&gt; launched a &lt;a href=&quot;http://www.drupal.org&quot;&gt;drupal-powered&lt;/a&gt; free personalized online travel service that aims to connect travelers to a global network of quality, pre-screened travel companies. unlike many internet travel sites which provide cheap fares or packages, zicasso is targeted for busy, discerning travelers who want to plan and book complex trips (the ones with multiple destination stops or activities).

&lt;p&gt;zicasso was favorably reviewed in popular web publications including; &lt;a href=&quot;http://www.pcmag.com/article2/0,2817,2279924,00.asp&quot;&gt;pc magazine&lt;/a&gt;, &lt;a href=&quot;http://www.techcrunch.com/2008/03/07/zicasso-have-someone-else-plan-that-perfect-trip/&quot;&gt;techcrunch&lt;/a&gt;, &lt;a href=&quot;http://arstechnica.com/news.ars/post/20080309-travel-2-0-hands-on-with-zicasso-a-great-first-attempt.html&quot;&gt;ars technica&lt;/a&gt; and the &lt;a href=&quot;http://philadelphia.bizjournals.com/sanjose/stories/2008/03/10/story8.html&quot;&gt;san jose business journal&lt;/a&gt;.

&lt;p&gt;zicasso chose to build their application using the open-source cms system, drupal to leverage the wide array of web2.0 functionality provided by the open source community.

&lt;p&gt;the application was rapidly constructed by a small development team led by &lt;a href=&quot;/cailin&quot;&gt;cailin nelson&lt;/a&gt; and &lt;a href=&quot;http://www.jennyandlih.com&quot;&gt;jenny dickinson&lt;/a&gt;.  the team took advantage of &quot;core&quot; drupal modules including cck, panels, views, imagecache, workflow and actions.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/zicasso-launches-drupal-powered-web20-travel-site&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/zicasso-launches-drupal-powered-web20-travel-site#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/web-2.0">web-2.0</category>
 <pubDate>Sun, 30 Mar 2008 21:07:15 -0700</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">439 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>lamp performance on the elastic compute cloud: benchmarking drupal on amazon ec2</title>
 <link>http://www.johnandcailin.com/blog/john/lamp-performance-elastic-compute-cloud-benchmarking-drupal-amazon-ec2</link>
 <description>&lt;a href=&quot;http://www.johnandcailin.com/blog/john/lamp-performance-elastic-compute-cloud%3A-benchmarking-drupal-amazon-ec2&quot;&gt;&lt;img src=&quot;http://www.johnandcailin.com/files/images/drupalBodyBuilder.smallish.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px 10px 0px 10px&quot;&gt;&lt;/a&gt;
amazon&#039;s &lt;a href=&quot;http://en.wikipedia.org/wiki/Amazon_Elastic_Compute_Cloud&quot;&gt;elastic compute cloud&lt;/a&gt;, &quot;ec2&quot;, provides a flexible and scalable hosting option for applications. while ec2 is not inherently suited for running application stacks with relational databases such as &lt;a href=&quot;http://en.wikipedia.org/wiki/LAMP_(software_bundle)&quot;&gt;lamp&lt;/a&gt;, it does provide many advantages over traditional hosting solutions.

&lt;p&gt;in this article we get a sense of lamp performance on ec2 by running a series of benchmarks on the drupal cms system. these benchmarks establish read throughput numbers for logged-in and logged-out users, for each of amazon&#039;s hardware classes.

&lt;p&gt;we also look at &lt;a href=&quot;http://en.wikipedia.org/wiki/PHP_accelerator&quot;&gt;op-code caching&lt;/a&gt;, and gauge it&#039;s performance benefit in cpu-bound lamp deployments.
&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/lamp-performance-elastic-compute-cloud-benchmarking-drupal-amazon-ec2&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/lamp-performance-elastic-compute-cloud-benchmarking-drupal-amazon-ec2#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/ec2">ec2</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/jmeter">jmeter</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/lamp">lamp</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/scalability">scalability</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/xen">xen</category>
 <pubDate>Mon, 28 Jan 2008 05:54:48 -0800</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">328 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>load test your drupal application scalability with apache jmeter: part two</title>
 <link>http://www.johnandcailin.com/blog/john/load-test-your-drupal-application-scalability-apache-jmeter%3A-part-two</link>
 <description>&lt;a href=&quot;http://www.johnandcailin.com/blog/john/load-test-your-drupal-application-scalability-apache-jmeter%3A-part-two&quot;&gt;&lt;img src=&quot;http://www.johnandcailin.com/files/images/drupalBodyBuilder.smallish.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px 10px 0px 10px&quot;&gt;&lt;/a&gt;

i recently posted an introductory article on &lt;a href=&quot;http://www.johnandcailin.com/blog/john/load-test-your-drupal-application-scalability-apache-jmeter&quot;&gt;using jmeter to load test your drupal application&lt;/a&gt;. if you&#039;ve read this article and are curious about how to build a more sophisticated test that mimics realistic load on your site, read on.

&lt;p&gt;the previous article showed you how to set up jmeter and create a basic test. to produce a more realistic test you should simulate &quot;real world&quot; use of your site. this typically involves simulating logged-in and logged-out users browsing and creating content. jmeter has some great functionality to help you do this.

&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/load-test-your-drupal-application-scalability-apache-jmeter%3A-part-two&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/load-test-your-drupal-application-scalability-apache-jmeter%3A-part-two#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/jmeter">jmeter</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/scalability">scalability</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Fri, 18 Jan 2008 20:31:12 -0800</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">306 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>load test your drupal application scalability with apache jmeter</title>
 <link>http://www.johnandcailin.com/blog/john/load-test-your-drupal-application-scalability-apache-jmeter</link>
 <description>&lt;a href=&quot;http://www.johnandcailin.com/blog/john/load-test-your-drupal-application-scalability-apache-jmeter&quot;&gt;&lt;img src=&quot;http://www.johnandcailin.com/files/images/drupalBodyBuilder.smallish.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px 10px 0px 10px&quot;&gt;&lt;/a&gt;
there are many things that you can do to improve your drupal application&#039;s scalability, some of which we discussed in the recent &lt;a href=&quot;http://www.johnandcailin.com/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites&quot;&gt;scaling drupal - an open-source infrastructure for high-traffic drupal sites&lt;/a&gt; article.

&lt;p&gt;when making scalability modifications to your system, it&#039;s important to quantify their effect, since some changes may have no effect or even decrease your scalability. the value of advertised scalability techniques often depends greatly on your particular application and network infrastructure, sometimes creating additional complexity with little benefit.

&lt;p&gt;&lt;a href=&quot;http://jakarta.apache.org/jmeter/&quot;&gt;apache jmeter&lt;/a&gt; is a great tool to simulate load on your system and measure performance under that load. in this article, i demonstrate how to setup a testing environment, create a simple test and evaluate the results.
&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/load-test-your-drupal-application-scalability-apache-jmeter&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/load-test-your-drupal-application-scalability-apache-jmeter#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/jmeter">jmeter</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/scalability">scalability</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Sun, 13 Jan 2008 21:48:06 -0800</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">294 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>supercharge your css code with m4</title>
 <link>http://www.johnandcailin.com/blog/john/supercharge-your-css-code-m4</link>
 <description>css has vastly improved the quality of html markup on the web. however, given its complexity, it has some astounding deficiencies.

&lt;p&gt;one of the biggest problems is the lack of constants. how many times have you wanted to code something like this? &lt;code&gt;light_grey = #CCC&lt;/code&gt;. instead you are forced to repeat &lt;code&gt;#CCC&lt;/code&gt; in your css. this quickly creates difficult-to-maintain and difficult-to-read code.

&lt;p&gt;an elegant solution to the problem is to use a general purpose &lt;a href=&quot;http://en.wikipedia.org/wiki/Preprocessor&quot;&gt;preprocessor&lt;/a&gt; like &lt;a href=&quot;http://en.wikipedia.org/wiki/M4_%28language%29&quot;&gt;m4&lt;/a&gt;. m4 gives you a full range of preprocessing capability, from simple constants to sophisticated macros.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/supercharge-your-css-code-m4&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/supercharge-your-css-code-m4#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/css">css</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/html">html</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/m4">m4</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Wed, 19 Dec 2007 12:28:32 -0800</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">247 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>using a guardian to ensure your lamp site is always up</title>
 <link>http://www.johnandcailin.com/blog/john/using-guardian-ensure-your-lamp-site-always</link>
 <description>&lt;a href=&quot;http://www.johnandcailin.com/blog/john/using-guardian-ensure-your-lamp-site-always&quot;&gt;&lt;img src=&quot;http://www.johnandcailin.com/files/images/drupalGuardian.smallish.jpg&quot; class=&quot;blog right&quot;&gt;&lt;/a&gt;

to guarantee maximum uptime for your site, it&#039;s a good idea to periodically check the health of your system and restart failing components. you can use a simple program to do this automatically. i like to call this type of program, a &quot;guardian&quot;.

&lt;p&gt;clearly guardians shouldn&#039;t be used as a crutch for a badly configured system. used appropriately, however,  they can decrease downtime due to unexpected events or administrator-error.

&lt;p&gt;in this article, i describe how to implement, install and configure a guardian using a lightweight bash script. i go on to describe how to watch over your lamp install using this guardian. please note that all code and configurations have been tested on debian etch but should be useful for other *nix flavors with subtle modifications.
&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/using-guardian-ensure-your-lamp-site-always&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/using-guardian-ensure-your-lamp-site-always#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/linux">linux</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mysql">mysql</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Tue, 18 Dec 2007 11:02:55 -0800</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">242 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>cck witch - multi-page cck forms for drupal</title>
 <link>http://www.johnandcailin.com/blog/cailin/cck-witch-multi-page-cck-forms-drupal</link>
 <description>&lt;p&gt;
&lt;a href=&quot;blog/cailin/cck-witch-multi-page-cck-forms-drupal&quot;&gt;&lt;img src=&quot;http://www.johnandcailin.com/files/images/cckWitch.smallish.jpg&quot; class=&quot;blog right&quot;&gt;&lt;/a&gt;

the blessing and curse of cck is the ability to quickly create very complex node types within drupal.  it doesn&#039;t take very long before the input form for a complex node type has become unmanageably long, requiring your user to do a lot of scrolling to get to the bottom of the form. the obvious solution is to break your form into multiple pages, but there is no easy way to do this.  there do exist two proposed solutions to this, the &lt;a href=&quot;http://drupal.org/project/wizard&quot;&gt;cck wizard module&lt;/a&gt; and a &lt;a href=&quot;http://drupal.org/node/162373&quot;&gt;drupal handbook entry&lt;/a&gt;.  however, the well-intentioned cck wizard module doesn&#039;t seem to work, and the example code in the drupal handbook becomes tedious to repeat for each content type.  to fill the void, i bring you &lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/cck-witch-multi-page-cck-forms-drupal&quot;&gt;cck witch&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;

cck witch is based on the same premise as the &lt;a href=&quot;http://drupal.org/node/162373&quot;&gt;handbook entry&lt;/a&gt; : the most natural way to divide a cck form into pages is to use field groups.  from there, however, cck witch diverges, taking a relatively lazy, yet effective approach to the problem of multi page forms:  on every page we render the entire form, but then simply hide the fields and errors that do not belong to the current step. it also offers an additional feature :  when the form is complete and the node is rendered, an individual edit link is provided for each step - allowing the user to update the information &lt;em&gt;only&lt;/em&gt; for a particular page in the form, without having to step through the entire wizard again.
&lt;/p&gt;

&lt;p&gt;
if you&#039;ve now read enough to be curious to see the goods, then please, be my guest and skip straight to the &lt;a href=&quot;http://www.johnandcailin.com/node/add/house&quot;&gt;live demo&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/cck-witch-multi-page-cck-forms-drupal&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/cailin/cck-witch-multi-page-cck-forms-drupal#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/cck">cck</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Tue, 11 Dec 2007 11:30:00 -0800</pubDate>
 <dc:creator>cailin</dc:creator>
 <guid isPermaLink="false">176 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>the fantastic four - drupals unofficial core</title>
 <link>http://www.johnandcailin.com/blog/john/fantastic-four-drupals-unofficial-core</link>
 <description>&lt;a href=&quot;http://www.johnandcailin.com/blog/john/fantastic-four-drupals-unofficial-core&quot;&gt;&lt;img src=&quot;http://www.johnandcailin.com/files/images/fantastic4_2.smallish.gif&quot; class=&quot;blog right&quot; style=&quot;padding: 10px&quot;&gt;&lt;/a&gt;
&lt;p&gt;using the term &quot;content management system&quot; to describe &lt;a href=&quot;http://www.drupal.org&quot;&gt;the drupal cms&lt;/a&gt; understates it&#039;s full potential. i prefer to consider drupal a web-application development-system, particularly suitable for content-heavy projects.

&lt;h2&gt;what are the fantastic four?&lt;/h2&gt;
&lt;p&gt;drupal&#039;s application development potential is provided in large-part by a set of &quot;core&quot; modules that dovetail to provide an application platform that other modules and applications build on. these modules have become a de-facto standard: drupal&#039;s fantastic four. our superheros are cck, views, panels and cck field types and widgets. if you are considering using drupal to build a website of any sophistication, you can&#039;t overlook these.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/fantastic-four-drupals-unofficial-core&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/fantastic-four-drupals-unofficial-core#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/cck">cck</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/imagecache">imagecache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/module">module</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/panels">panels</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/panels2">panels2</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/views">views</category>
 <pubDate>Wed, 28 Nov 2007 17:01:25 -0800</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">135 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>scaling drupal step four - database segmentation using mysql proxy</title>
 <link>http://www.johnandcailin.com/blog/john/scaling-drupal-step-four-database-segmentation-using-mysql-proxy</link>
 <description>&lt;p&gt;&lt;a href=&quot;/blog/john/scaling-drupal-step-four-database-segmentation-using-mysql-proxy&quot;&gt;&lt;img src=&quot;/files/images/advancedClusteredWithFiltering.blog.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px&quot;&gt;&lt;/a&gt;if you&#039;ve setup a clustered drupal deployment (see &lt;a href=&quot;/blog/john/scaling-drupal-step-three-using-heartbeat-implement-redundant-load-balancer&quot;&gt;scaling drupal step three - using heartbeat to implement a redundant load balancer&lt;/a&gt;), a good next-step, is to scale your database tier.

&lt;p&gt;in this article i discuss scaling the database tier up and out. i compare database optimization and different database clustering techniques. i go on to explore the idea of database segmentation as a possibility for moderate drupal scaling. as usual, my examples are for apache2, mysql5 and drupal5 on debian etch. see the &lt;a href=&quot;http://www.johnandcailin.com/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites&quot;&gt;scalability overview&lt;/a&gt; for related articles.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/scaling-drupal-step-four-database-segmentation-using-mysql-proxy&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/scaling-drupal-step-four-database-segmentation-using-mysql-proxy#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/debian">debian</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mod_proxy">mod_proxy</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mod_proxy_balancer">mod_proxy_balancer</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mysql">mysql</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mysql-proxy">mysql-proxy</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/scalability">scalability</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/sqlrelay">sqlrelay</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Wed, 14 Nov 2007 18:30:33 -0800</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">122 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>log4drupal - a logging api for drupal</title>
 <link>http://www.johnandcailin.com/blog/cailin/log4drupal-logging-api-drupal</link>
 <description>&lt;p class=&quot;callout&quot;&gt;
UPDATE:  for the drupal 6 version, please go &lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/log4drupal-updated-logging-api-drupal-6&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;if your career as a developer has included a stay in the j2ee world, then when you arrived at drupal one of your initial questions was &lt;em&gt;&quot;where&#039;s the log file?&quot;&lt;/em&gt;.  eventually, someone told you about the watchdog table. you decided to try that for about five minutes, and then were reduced to using a combination of &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt; and &lt;code&gt;print_r&lt;/code&gt; to scrawl debug data across your web browser.&lt;/p&gt;

&lt;p&gt;when you tired of that, you learned a little php, did a little web research and discovered the PEAR log package and &lt;code&gt;debug_backtrace()&lt;/code&gt;. the former is comfortably reminiscent of good old log4j and the latter finally gave you the stacktrace you&#039;d been yearning for.  still, separately, neither gave you quite what you were looking for :  a log file in which every entry includes the filename and line number from which the log message originated.  put them together though, and you&#039;ve got &lt;a href=&quot;http://www.johnandcailin.com/files/log.tar.gz&quot;&gt;log4drupal&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;log4drupal is a simple api that writes messages to a log file.  each message is tagged with a particular log priority level (debug, info, warn, error or emergency) and you may also set the overall log threshold for your system.  only messages with a priority level above your system threshold are actually printed to your log file.  the system threshold may changed at any time, using the log4drupal administrative interface. you may also specify whether or not a full stack trace is included with every message.  by default, a stack trace is included for messages with a priority of error and above.  the administrative options are illustrated below : &lt;/p&gt; 

&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/log4drupal-logging-api-drupal&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/cailin/log4drupal-logging-api-drupal#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Mon, 12 Nov 2007 19:54:59 -0800</pubDate>
 <dc:creator>cailin</dc:creator>
 <guid isPermaLink="false">127 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>scaling drupal step one B - nfs vs rsync</title>
 <link>http://www.johnandcailin.com/blog/john/scaling-drupal-step-one-b-nfs-vs-rsync</link>
 <description>&lt;p&gt;&lt;a href=&quot;/blog/john/scaling-drupal-step-one-dedicated-data-server&quot;&gt;&lt;img src=&quot;/files/images/basicClusteredWithRsync.blog.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px&quot;&gt;&lt;/a&gt;i got some good feedback on my &lt;a href=&quot;/blog/john/scaling-drupal-step-one-dedicated-data-server&quot;&gt;dedicated data server&lt;/a&gt; step towards scaling. kris buytaert in his &lt;a href=&quot;http://krisbuytaert.be/blog/?q=node/504&quot;&gt;everything is a freaking dns problem blog&lt;/a&gt; points out that nfs creates an unnecessary choke point. he may very well have a point.

&lt;p&gt;having said that, i have run the suggested configuration in a multi-web-server, high-traffic production setting for 6 months without a glitch, and feedback on his blog gives example of other large sites doing the same thing. for even larger configurations, or if you just prefer, you might consider another method of synchronizing files between your web servers.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/scaling-drupal-step-one-b-nfs-vs-rsync&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/scaling-drupal-step-one-b-nfs-vs-rsync#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/debian">debian</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/nfs">nfs</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/rsync">rsync</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/scalability">scalability</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Sun, 11 Nov 2007 06:02:59 -0800</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">125 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>beef up your drupal security with apache mod_rewrite and SSH</title>
 <link>http://www.johnandcailin.com/blog/john/beef-your-drupal-security-apache-modrewrite-and-ssh</link>
 <description>if you felt a waft of cold air when you read the recent &lt;a href=&quot;http://drupal.org/node/184316&quot;&gt;highly critical drupal security announcement&lt;/a&gt; on arbirary code execution using &lt;code&gt;install.php&lt;/code&gt;, you were right. your bum was hanging squarely out of the window, and you should probably consider beefing up your security.

&lt;p&gt;drupal&#039;s default exposure of files like &lt;code&gt;install.php&lt;/code&gt; and &lt;code&gt;cron.php&lt;/code&gt; present inherent security risks, for both denial-of-service and intrusion. combine this with critical administrative functionality available to the world, protected only by user defined passwords, broadcast over the internet in clear-text, and you&#039;ve got potential for some real problems.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/beef-your-drupal-security-apache-modrewrite-and-ssh&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/beef-your-drupal-security-apache-modrewrite-and-ssh#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mod_rewrite">mod_rewrite</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/proxy">proxy</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/security">security</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/socks">socks</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/ssh">ssh</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Sat, 10 Nov 2007 06:22:29 -0800</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">123 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>better css for the drupal hovertip module</title>
 <link>http://www.johnandcailin.com/blog/cailin/better-css-drupal-hovertip-module</link>
 <description>&lt;div style=&quot;float: left; margin: 10px 10px 0px 0px;&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
digg_topic = &#039;linux_unix&#039;;
digg_url = &#039;http://www.johnandcailin.com/blog/cailin/better-css-drupal-hovertip-module&#039;;
&lt;/script&gt;
&lt;script src=&quot;http://digg.com/tools/diggthis.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;

don&#039;t get me wrong, i&#039;m a happy customer of the drupal hovertip module.  everything worked out of the box, and i&#039;ve enjoyed using it to &lt;a href=&quot;http://www.johnandcailin.com/blog/ava/pumpkin-patch&quot;&gt;cram even more pictures&lt;/a&gt; into my website.  however, the included default css leaves a little to be desired for the following reasons :
&lt;/p&gt;
&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&lt;ol&gt;
   &lt;li&gt;it&#039;s too specific.  it assigns a very particular look and feel to your tooltips, complete with background colors, fixed widths and font sizes.  sure, in theory, you can override all that in your theme css.  but if css specificity is not your thing, you&#039;re going to be tearing your hair out trying to figure how to do it.&lt;/li&gt;
   &lt;li&gt;the ui element chosen to indicate &quot;hover here&quot; is non-standard.  the &quot;hover here&quot; directive is admittedly fairly new, but the emerging standard seems to be the dashed-underline (certainly not the italic font used in the drupal hovertip module).  &lt;/li&gt;
   &lt;li&gt;the clicktip css does not work on ie6.  the link to close the clicktip has mysteriously gone missing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
you can download a more generic, flexible version of the necessary hovertip module css that solves all these issues &lt;a href=&quot;http://www.johnandcailin.com/sites/all/modules/hovertip/hovertip.css&quot;&gt;here&lt;/a&gt;.  here are some examples of how to use it.
&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/better-css-drupal-hovertip-module&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <category domain="http://www.johnandcailin.com/category/blog-tags/css">css</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/javascript">javascript</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/web-2.0">web-2.0</category>
 <pubDate>Tue, 06 Nov 2007 21:16:36 -0800</pubDate>
 <dc:creator>cailin</dc:creator>
 <guid isPermaLink="false">121 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>scaling drupal - an open-source infrastructure for high-traffic drupal sites</title>
 <link>http://www.johnandcailin.com/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites</link>
 <description>&lt;a href=&quot;/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites&quot;&gt;&lt;img src=&quot;/files/images/drupalBodyBuilder.smallish.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px 10px 0px 10px&quot;&gt;&lt;/a&gt;the authors of drupal have paid considerable attention to performance and scalability. consequently even a default install running on modest hardware can easily handle the demands of a small website. my four year old pc in my garage running a full lamp install, will happily serve up 50,000 page views in a day, providing solid end-user performance without breaking a sweat.&lt;br&gt;&lt;br&gt;

&lt;h2&gt;when the times comes for scalability. moving of of the garage&lt;/h2&gt;
if you are lucky, eventually the time comes when you need to service more users than your system can handle. your initial steps should clearly focus on getting the most out of the built-in drupal optimization functionality, considering drupal performance modules, optimizing your php (including considering op-code caching) and working on database performance. John VanDyk and Matt Westgate have an excellent chapter on this subject in their new book, &lt;a href=&quot;http://www.drupalbook.com/&quot;&gt;&quot;pro drupal development&quot;&lt;/a&gt;

&lt;p&gt;once these steps are exhausted, inevitability you&#039;ll start looking at your hardware and network deployment.&lt;br class=&quot;clear&quot;&gt;&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/debian">debian</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mod_proxy">mod_proxy</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mod_proxy_balancer">mod_proxy_balancer</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mysql">mysql</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/scalability">scalability</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Sun, 28 Oct 2007 20:47:40 -0700</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">113 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>advanced drupal views access control</title>
 <link>http://www.johnandcailin.com/blog/cailin/advanced-drupal-views-access-control</link>
 <description>&lt;p&gt;out of the box, the views module allows you to specify access to the view according to user role.  this is a critical feature, but sometimes it&#039;s not enough.  for example, sometimes you may want the view access to depend on the arguments to the view.&lt;/p&gt;

&lt;p&gt;specifically, let&#039;s suppose that we have implemented facebook-style threaded mail, and we want to use a view to display all the messages in a thread. the thread id is an argument passed to the view.  we only wish to allow the view to be accessed by one of the authors of the thread, or users with the &#039;administer messages&#039; permission.&lt;/p&gt;

&lt;p&gt;here&#039;s a three step approach to resolving this dilemna : &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/advanced-drupal-views-access-control&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/cailin/advanced-drupal-views-access-control#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/views">views</category>
 <pubDate>Sun, 28 Oct 2007 18:29:27 -0700</pubDate>
 <dc:creator>cailin</dc:creator>
 <guid isPermaLink="false">115 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>implementing hook_access for cck content types</title>
 <link>http://www.johnandcailin.com/blog/cailin/implementing-hookaccess-cck-content-types</link>
 <description>&lt;p&gt;&lt;a href=&quot;/blog/cailin/drupal-hooks-not-firing-cck-content-types&quot;&gt;previously&lt;/a&gt;, we discussed implementing all of the node hooks for CCK content types except &lt;code&gt;hook_access&lt;/code&gt;.  unfortunately, there is no &lt;code&gt;access&lt;/code&gt; op for &lt;code&gt;hook_nodeapi&lt;/code&gt;.  adding this to drupal core is the topic of &lt;a href=&quot;http://drupal.org/node/143075&quot;&gt;much&lt;/a&gt; &lt;a href=&quot;http://drupal.org/node/122173&quot;&gt;discussion&lt;/a&gt; on drupal.org.  so far a resolution to the issue has failed to be included in drupal 5 and drupal 6, and is now on deck for consideration in drupal 7.&lt;/p&gt;

&lt;p&gt;this is a complicated issue, and the experts are debating with good cause.  in the meantime though, if you need to move on, here&#039;s what you can do.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/implementing-hookaccess-cck-content-types&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/cailin/implementing-hookaccess-cck-content-types#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/cck">cck</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Sun, 28 Oct 2007 17:29:27 -0700</pubDate>
 <dc:creator>cailin</dc:creator>
 <guid isPermaLink="false">109 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>drupal hooks not firing for cck content types</title>
 <link>http://www.johnandcailin.com/blog/cailin/drupal-hooks-not-firing-cck-content-types</link>
 <description>&lt;p&gt;a common path followed by advanced drupal developers using cck is the following&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;create a content type using cck&lt;/li&gt;
&lt;li&gt;create a supporting custom module to handle advanced customizations.  typically, the module is given the same name as the content type&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;in this custom module, developers then attempt to implement standard drupal hooks like &lt;code&gt;hook_access&lt;/code&gt; and &lt;code&gt;hook_submit&lt;/code&gt;.  much confusion then arises as to why the drupal hook is not firing for the cck content type.&lt;br /&gt;
the reason is the following.  &lt;code&gt;hook_access&lt;/code&gt;, &lt;code&gt;hook_insert&lt;/code&gt;, &lt;code&gt;hook_submit&lt;/code&gt;, &lt;code&gt;hook_update&lt;/code&gt; and &lt;code&gt;hook_view&lt;/code&gt; only fire for the module that &lt;em&gt;owns&lt;/em&gt; the content type.  for cck content types, the module that owns the content type is &lt;code&gt;content&lt;/code&gt; (e.g. cck) &lt;em&gt;not&lt;/em&gt; your supporting custom module.  therefore, drupal leaves your supporting custom module totally out of the loop!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/cailin/drupal-hooks-not-firing-cck-content-types&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/cailin/drupal-hooks-not-firing-cck-content-types#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/cck">cck</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Fri, 26 Oct 2007 07:58:39 -0700</pubDate>
 <dc:creator>cailin</dc:creator>
 <guid isPermaLink="false">108 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>scaling drupal step three - using heartbeat to implement a redundant load balancer</title>
 <link>http://www.johnandcailin.com/blog/john/scaling-drupal-step-three-using-heartbeat-implement-redundant-load-balancer</link>
 <description>&lt;p&gt;&lt;a href=&quot;/blog/john/scaling-drupal-step-three-using-heartbeat-implement-redundant-load-balancer&quot;&gt;&lt;img src=&quot;/files/images/advancedClustered.blog.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px&quot;&gt;&lt;/a&gt;if you&#039;ve setup a clustered drupal deployment (see &lt;a href=&quot;/blog/john/scaling-drupal-step-two-sticky-load-balancing-apache-mod_proxy&quot;&gt;scaling drupal step two - sticky load balancing with apache mod_proxy&lt;/a&gt;), a good next-step, is to cluster your load balancer.

&lt;p&gt;one way to do this is to use heartbeat to provide instant failover to a redundant load balancer should your primary fail. while the method suggested below doesn&#039;t increase the loadbalancer scalability, which shouldn&#039;t be an issue for a reasonably sized deployment, it does increase your the redundancy. as usual, my examples are for apache2, mysql5 and drupal5 on debian etch. see the &lt;a href=&quot;/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites&quot;&gt;scalability overview&lt;/a&gt; for related articles.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/scaling-drupal-step-three-using-heartbeat-implement-redundant-load-balancer&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/scaling-drupal-step-three-using-heartbeat-implement-redundant-load-balancer#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/debian">debian</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mod_proxy">mod_proxy</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mod_proxy_balancer">mod_proxy_balancer</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Sun, 21 Oct 2007 14:07:19 -0700</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">101 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>scaling drupal step two - sticky load balancing with apache mod_proxy</title>
 <link>http://www.johnandcailin.com/blog/john/scaling-drupal-step-two-sticky-load-balancing-apache-modproxy</link>
 <description>&lt;p&gt;&lt;a href=&quot;/blog/john/scaling-drupal-step-two-sticky-load-balancing-apache-mod_proxy&quot;&gt;&lt;img src=&quot;/files/images/basicClustered.blog.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px&quot;&gt;&lt;/a&gt;if you&#039;ve setup your drupal deployment with a separate database and web (drupal) server (see &lt;a href=&quot;/blog/john/scaling-drupal-step-one-dedicated-data-server&quot;&gt;scaling drupal step one - a dedicated data server&lt;/a&gt;), a good next step, is to cluster your web servers. drupal generates a considerable load on the web server and can quickly become resource constrained there. having multiple web servers also increases the the redundancy of your deployment. as usual, my examples are for apache2, mysql5 and drupal5 on debian etch. see the &lt;a href=&quot;/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites&quot;&gt;scalability overview&lt;/a&gt; for related articles.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/scaling-drupal-step-two-sticky-load-balancing-apache-modproxy&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/scaling-drupal-step-two-sticky-load-balancing-apache-modproxy#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/debian">debian</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mod_proxy">mod_proxy</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mod_proxy_balancer">mod_proxy_balancer</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/scalability">scalability</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Sun, 21 Oct 2007 13:55:33 -0700</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">90 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>scaling drupal step one - a dedicated data server</title>
 <link>http://www.johnandcailin.com/blog/john/scaling-drupal-step-one-dedicated-data-server</link>
 <description>&lt;p&gt;&lt;a href=&quot;/blog/john/scaling-drupal-step-one-dedicated-data-server&quot;&gt;&lt;img src=&quot;/files/images/dedicatedDataServer.blog.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px&quot;&gt;&lt;/a&gt;if you&#039;ve already installed drupal on a single node (see &lt;a href=&quot;/blog/john/easy-peasy-lemon-squeezy-drupal-installation-linux&quot;&gt;easy-peasy-lemon-squeezy drupal installation on linux&lt;/a&gt;), a good first step to scaling a drupal install is to create a dedicated data server. by &lt;i&gt;dedicated data server&lt;/i&gt; i mean a server that hosts both the database and a fileshare for node attachments etc. this splits the database server load from the web server, and lays the groundwork for a clustered web server deployment. here&#039;s how you can do it. as usual, my examples are for apache2, mysql5 and drupal5 on debian etch. see the &lt;a href=&quot;/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites&quot;&gt;scalability overview&lt;/a&gt; for related articles.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/scaling-drupal-step-one-dedicated-data-server&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/scaling-drupal-step-one-dedicated-data-server#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/debian">debian</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mysql">mysql</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/scalability">scalability</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Sat, 13 Oct 2007 08:26:29 -0700</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">85 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>easy-peasy-lemon-squeezy drupal installation on linux</title>
 <link>http://www.johnandcailin.com/blog/john/easy-peasy-lemon-squeezy-drupal-installation-linux</link>
 <description>&lt;p&gt;&lt;a href=&quot;/blog/john/scaling-drupal-step-one-dedicated-data-server&quot;&gt;&lt;img src=&quot;/files/images/basic.jpg&quot; class=&quot;blog right&quot; style=&quot;padding: 10px&quot;&gt;&lt;/a&gt;installing drupal is pretty easy, but it&#039;s even easier if you have a step by step guide. i&#039;ve written one that will produce a basic working configuration with drupal5 on debian etch with php5, mysql5 and apache2. it might be a help on other configurations too. see the &lt;a href=&quot;/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites&quot;&gt;scalability overview&lt;/a&gt; for related articles.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/easy-peasy-lemon-squeezy-drupal-installation-linux&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/easy-peasy-lemon-squeezy-drupal-installation-linux#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/apache">apache</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/debian">debian</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/etch">etch</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/mysql">mysql</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Fri, 12 Oct 2007 19:23:17 -0700</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">82 at http://www.johnandcailin.com</guid>
</item>
<item>
 <title>how to use images in your drupal content</title>
 <link>http://www.johnandcailin.com/blog/john/how-use-images-your-drupal-content</link>
 <description>&lt;p&gt;if you simply want to add image content to your drupal nodes etc, the array of options can be baffling. here&#039;s a quick overview of some options you might want to consider.&lt;p&gt;&lt;a href=&quot;http://www.johnandcailin.com/blog/john/how-use-images-your-drupal-content&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.johnandcailin.com/blog/john/how-use-images-your-drupal-content#comments</comments>
 <category domain="http://www.johnandcailin.com/category/blog-tags/drupal">drupal</category>
 <category domain="http://www.johnandcailin.com/category/blog-tags/tech">tech</category>
 <pubDate>Sun, 07 Oct 2007 10:34:42 -0700</pubDate>
 <dc:creator>john</dc:creator>
 <guid isPermaLink="false">69 at http://www.johnandcailin.com</guid>
</item>
</channel>
</rss>
