<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Gir's Brain</title>
	<atom:link href="http://girsbrain.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://girsbrain.org/blog</link>
	<description>So much time, and so little to do!</description>
	<pubDate>Thu, 15 May 2008 18:44:52 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Modular caching with XSL and PHP</title>
		<link>http://girsbrain.org/blog/2008/05/modular-caching-with-xsl-and-php/</link>
		<comments>http://girsbrain.org/blog/2008/05/modular-caching-with-xsl-and-php/#comments</comments>
		<pubDate>Thu, 15 May 2008 18:27:58 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[XML]]></category>

		<category><![CDATA[caching]]></category>

		<category><![CDATA[templating]]></category>

		<category><![CDATA[xsl]]></category>

		<guid isPermaLink="false">http://girsbrain.org/blog/?p=5</guid>
		<description><![CDATA[The last time I talked about XSL I mentioned how powerful it is for caching. In this post I&#8217;m going to talk about how I use it and how you can easily implement it. In this post I&#8217;m going to talk a bit more about how I handle caching with XSL and PHP.
When I started [...]]]></description>
			<content:encoded><![CDATA[<p>The <a title="The Power of XSL" href="/blog/2008/05/the-power-of-xsl/" target="_self">last time I talked about XSL</a> I mentioned how powerful it is for caching. In this post I&#8217;m going to talk about how I use it and how you can easily implement it. In this post I&#8217;m going to talk a bit more about how I handle caching with XSL and PHP.</p>
<p>When I started the last iteration of Christian Lyrics I spent a lot of time looking for the best way to cache my data and templates. I wanted each page load to do as little as possible. Unfortunately most of the templating engines I saw had medicore cache control at best, and it was starting to look like I need to work on a new one. Then I found XSL. I had already fallen in love with SimpleXML and DOM, and with XSL I was able to utlize both for views. I&#8217;m not going into detail how my view class works, instead I&#8217;m just going to cover the caching techniques I use. So let&#8217;s get started!</p>
<p><span id="more-5"></span></p>
<p>Most new sites have some form of login, and usually there is a block on each page with your user info. Take, for example, Christian Lyrics. It has a &#8220;My Account&#8221; box in the left menu that shows a log in form for Guests and some information about your account if you log in. I wanted everything on the home page, <em>except</em> for the user box, to be cached for a specified amount of time. With normal templating systems this required caching the &#8220;compiled&#8221; templates with whatever data inside of it and where the user menu goes is a line of PHP that calls the user template, which isn&#8217;t cached. I got that working, but it was clunky and used <strong>a lot</strong> of space.</p>
<p>With XSL, all we have to do is cache the XML data. It saves hundreds of megs in space for Christian Lyrics and adds a ton of post-processing capabilities, such as adding in the correct user box.</p>
<p>Now I&#8217;m going to use a fictional example with some XML and then a little PHP to show how you can use it. It&#8217;s the same idea described above, just the XML changed. First is what a cached XML file could look like:</p>

<div class="wp_codebox_msgheader"><span class="codebox_right"><a href="javascript:;" onclick="toggle_collapse('54');">[<span id="54_symbol">-</span>]</a></span><span class="codebox_left"><span id="l5code4"><a href="javascript:;" onclick="javascript:showCodeTxt('5code4'); return false;">View Code</a> XML</span></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="54"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="5code4"><pre class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="font-weight: bold; color: black;">?&gt;</span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;page<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;meta<span style="font-weight: bold; color: black;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;title<span style="font-weight: bold; color: black;">&gt;</span></span></span>My Website<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/title<span style="font-weight: bold; color: black;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;description</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;keywords</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;last-updated<span style="font-weight: bold; color: black;">&gt;</span></span></span>Mon, 15 Aug 05 15:52:01 +0000<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/last-update<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/meta<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;artists<span style="font-weight: bold; color: black;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;artist</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;artist</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;artist</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/artists<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/page<span style="font-weight: bold; color: black;">&gt;</span></span></span></pre></td></tr></table></div>

<p>So now whenever any visitor loads that page you don&#8217;t have to re-process anything, just load the XML and skip your actions. After the XML is loaded you can do any visitor-specific updates to it on the fly.</p>

<div class="wp_codebox_msgheader"><span class="codebox_right"><a href="javascript:;" onclick="toggle_collapse('55');">[<span id="55_symbol">-</span>]</a></span><span class="codebox_left"><span id="l5code5"><a href="javascript:;" onclick="javascript:showCodeTxt('5code5'); return false;">View Code</a> XML</span></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="55"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code" id="5code5"><pre class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="font-weight: bold; color: black;">?&gt;</span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;page<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;meta<span style="font-weight: bold; color: black;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;title<span style="font-weight: bold; color: black;">&gt;</span></span></span>My Website<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/title<span style="font-weight: bold; color: black;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;description</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;keywords</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;last-updated<span style="font-weight: bold; color: black;">&gt;</span></span></span>Mon, 15 Aug 05 15:52:01 +0000<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/last-update<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/meta<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;artists<span style="font-weight: bold; color: black;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;artist</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;artist</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;artist</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/artists<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;user<span style="font-weight: bold; color: black;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;id<span style="font-weight: bold; color: black;">&gt;</span></span></span>1<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/id<span style="font-weight: bold; color: black;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;name<span style="font-weight: bold; color: black;">&gt;</span></span></span>James Logsdon<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/user<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/page<span style="font-weight: bold; color: black;">&gt;</span></span></span></pre></td></tr></table></div>

<p>And then deliver it to the visitor either as raw XML (with a processing directive for the XSL, I hope) or process the XSL server-side and deliver HTML (or whatever you want to transform it into, really).</p>

<div class="wp_codebox_msgheader"><span class="codebox_right"><a href="javascript:;" onclick="toggle_collapse('56');">[<span id="56_symbol">-</span>]</a></span><span class="codebox_left"><span id="l5code6"><a href="javascript:;" onclick="javascript:showCodeTxt('5code6'); return false;">View Code</a> PHP</span></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="56"><td width="1%" class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
</pre></td><td class="code" id="5code6"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #808080; font-style: italic;">// Path to where XML files should be saved</span>
<span style="color: #000066;">define</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'PATH_CACHE'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'./cache/'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/**
 * Checks for a cached action XML, if not found runs the action and caches it
 *
 * Usage:
 * // Will cach search action for 1 hour based on the arguments array
 * run_action(&quot;search&quot;, array(
 *     &quot;query&quot; =&gt; &quot;this is a search&quot;,
 *     &quot;type&quot;  =&gt; &quot;basic&quot;
 * ), 60*60);
 *
 * @author James Logsdon &lt;dwarf@girsbrain.org&gt;
 * @param string $action Name of the action
 * @param array $arguments Arguments that are page specific, to cache seperate results for the same action
 * @param int $ttl Time to live (in seconds) of the cache file. Default is 10 minutes (600). Setting it to 0 disables caching.
 * @return boolean|SimpleXML
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> run_action<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$action</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$arguments</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$ttl</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">600</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #ff0000">$filename</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$action</span><span style="color: #66cc66;">.</span><span style="color: #ff0000;">'_'</span><span style="color: #66cc66;">.</span><span style="color: #000066;">md5</span><span style="color: #66cc66;">&#40;</span>http_build_query<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$arguments</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">.</span><span style="color: #ff0000;">'.xml'</span><span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$cache</span> <span style="color: #66cc66;">=</span> PATH_CACHE<span style="color: #66cc66;">.</span><span style="color: #ff0000">$filename</span><span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$xml</span> <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">// If the cache file doesn't exist or it's too old run the action</span>
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$ttl</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: #000066;">is_file</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$cache</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: #000066;">filemtime</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$cache</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">time</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">-</span> <span style="color: #ff0000">$ttl</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #ff0000">$xml</span> <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">@</span>simplexml_load_file<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$cache</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">//... set xml to SimpleXML in here.</span>
		<span style="color: #808080; font-style: italic;">// Save xml to cache for later (only if cache is enabled)</span>
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$ttl</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			file_put_contents<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$cache</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$xml</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">asXML</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">// Failure importing XML</span>
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$xml</span> <span style="color: #66cc66;">===</span> <span style="color: #000000; font-weight: bold;">false</span> <span style="color: #66cc66;">||</span> <span style="color: #ff0000">$xml</span> <span style="color: #66cc66;">===</span> <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #ff0000">$xml</span><span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>In the next few weeks I&#8217;ll be doing another post on XSL and PHP, I&#8217;m just not sure on what part of it yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://girsbrain.org/blog/2008/05/modular-caching-with-xsl-and-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Power of XSL</title>
		<link>http://girsbrain.org/blog/2008/05/the-power-of-xsl/</link>
		<comments>http://girsbrain.org/blog/2008/05/the-power-of-xsl/#comments</comments>
		<pubDate>Thu, 15 May 2008 16:51:39 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[XML]]></category>

		<category><![CDATA[templating]]></category>

		<category><![CDATA[xsl]]></category>

		<guid isPermaLink="false">http://girsbrain.org/blog/?p=4</guid>
		<description><![CDATA[When we did the last rewrite of Christian Lyrics I spent a good bit of time working on the template system. I loathe Smarty due to how bloated it is, but almost went with it because needed modular caching (guests all see the same static files, logged in users see their user info, etc&#8230;). We [...]]]></description>
			<content:encoded><![CDATA[<p>When we did the last rewrite of <a title="Christian Music Lyrics" rel="external" href="http://www.christian-lyrics.net/">Christian Lyrics</a> I spent a good bit of time working on the template system. I loathe <a title="Smarty Templating Engine" rel="external" href="http://smarty.php.net">Smarty</a> due to how bloated it is, but almost went with it because needed modular caching (guests all see the same static files, logged in users see their user info, etc&#8230;). We ended up using a <a title="PHP Savant" rel="external" href="http://phpsavant.com">Savant</a> style system (no stupid custom tags, no parsing, just PHP) that works pretty well, but has some short comings still. After we finished the rewrite, I spent some time exploring other options. Only one caught my eye: <a title="Extensible Stylesheet Language" rel="external" href="http://www.w3.org/TR/xsl">XSL</a>.</p>
<p><span id="more-4"></span></p>
<blockquote><p>The eXtensible Stylesheet Language (XSL) is a family of transformation languages which allows one to describe how files encoded in the XML standard are to be formatted or transformed. XSL is designed to be data driven and strongly encourages the Inversion of control design pattern. There are three languages in the family:</p>
<ol>
<li>XSL Transformations (XSLT): an XML language for transforming XML documents</li>
<li>XSL Formatting Objects (XSL-FO): an XML language for specifying the visual formatting of an XML document</li>
<li>the XML Path Language (XPath): a non-XML language used by XSLT, and also available for use in non-XSLT contexts, for addressing the parts of an XML document.</li>
</ol>
<p><cite>Source: <a rel="external nofollow" href="http://en.wikipedia.org/wiki/Extensible_Stylesheet_Language">Wikipedia</a></cite></p></blockquote>
<p>In a nutshell, XSL can be used to transform a plain XML document into a full-fledged HTML document. One thing I really like about XSL is that the processing can be done either server-side or client-side. Most modern browsers understand XSL and do all the dirty work for you, leaving your server to do other, more important, things. Not only that, but if you send the XML to the client for processing, then you have the base of your API already done.</p>
<p>But the best part is how modular you can make the caching. Here&#8217;s how I do it:</p>
<ol>
<li>If the data is cacheable it gets saved to disk in an XML file. Queries are only done to the SQL server for this data if the cache file doesn&#8217;t exist or has expired.</li>
<li>If it&#8217;s not cacheable, insert it into the cached XML document on the fly.</li>
</ol>
<p>Then the XSL document handles the rest. I can&#8217;t think of any simpler way to do it.</p>
<p>However, there are downsides (when aren&#8217;t there?):</p>
<ul>
<li>IE has notoriously bad support for XSL (of course).</li>
<li>PHP has <a title="PHP:XSL" rel="external" href="http://www.php.net/xsl">XSL support natively in PHP5</a>, but PHP4 requires a <a href="http://www.php.net/xslt">PECL library</a> (I can&#8217;t find the extension on PECL for some reason).</li>
<li>More syntax to remember</li>
<li>The only good documentation I&#8217;ve come across is the specification itself. <a title="W3 Schools XSLT Tutorial" rel="external" href="http://www.w3schools.com/xsl/">W3Schools</a>, which usually has a pretty decent overview, I found lacking.</li>
<li><span style="font-weight: bold; font-style: italic;">Most</span> variable processing has to be done before you transform the XML. It is possible to use variables in the XSL itself, but it is very limited.</li>
<li>Javascript does not work on the XML document itself, just the generated source. This means if you use AJAX to grab eg. a list of languages, you have to either do the transformation server-side or in the Javascript itself. Thankfully, Google has an excellent <a title="AJAXSLT" rel="external" href="http://code.google.com/p/ajaxslt/">Javascript library to do XSL transformations</a>! Some browsers (Mozilla is one I believe) also have built-in XSLT support in Javascript.</li>
<li>Unless you do the transformation on the server-side <span style="font-weight: bold;">search engine crawlers will not be able to index your site</span>. Of course you could set it up to only transform server-side if a crawler comes.</li>
</ul>
<p>Now I ask: why don&#8217;t more sites use XSL? I know I&#8217;ll be building most of my sites in the future with XSL, the benefits far outweigh the downsides in my opinion.</p>
]]></content:encoded>
			<wfw:commentRss>http://girsbrain.org/blog/2008/05/the-power-of-xsl/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Okay I&#8217;m done switching, I promise</title>
		<link>http://girsbrain.org/blog/2008/05/okay-im-done-switching-i-promise/</link>
		<comments>http://girsbrain.org/blog/2008/05/okay-im-done-switching-i-promise/#comments</comments>
		<pubDate>Thu, 15 May 2008 13:18:16 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[blog]]></category>

		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://wordpress.jlogsdon.cbibeta.com/?p=3</guid>
		<description><![CDATA[Wordpress 2.5 is slick.
The new admin interface is very nice. Everything you need is easy to get too, and it looks beautiful. I&#8217;m getting ready to look at plugins and themes, so there will be changes going through still.
]]></description>
			<content:encoded><![CDATA[<p>Wordpress 2.5 is slick.</p>
<p>The new admin interface is very nice. Everything you need is easy to get too, and it looks beautiful. I&#8217;m getting ready to look at plugins and themes, so there will be changes going through still.</p>
]]></content:encoded>
			<wfw:commentRss>http://girsbrain.org/blog/2008/05/okay-im-done-switching-i-promise/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
