<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/serendipity/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://www.topbit.co.uk/serendipity/feeds/atom.xml" rel="self" title="Topbit Technicals" type="application/atom+xml" />
    <link href="http://www.topbit.co.uk/serendipity/"                        rel="alternate"    title="Topbit Technicals" type="text/html" />
    <link href="http://www.topbit.co.uk/serendipity/rss.php?version=2.0"     rel="alternate"    title="Topbit Technicals" type="application/rss+xml" />
    <title type="html">Topbit Technicals</title>
    <subtitle type="html">@todo 'write technical blog'</subtitle>
    <icon>http://www.topbit.co.uk/serendipity/templates/default/img/s9y_banner_small.png</icon>
    <id>http://www.topbit.co.uk/serendipity/</id>
    <updated>2009-10-07T10:36:51Z</updated>
    <generator uri="http://www.s9y.org/" version="1.3-beta1">Serendipity 1.3-beta1 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>
    <admin:errorReportsTo rdf:resource="mailto:topbit+s9yblog@gmail.com" />

    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/23-Doing-the-work-elsewhere-Adding-a-job-to-the-queue.html" rel="alternate" title="Doing the work elsewhere - Adding a job to the queue" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2009-10-06T22:30:26Z</published>
        <updated>2009-10-07T10:36:51Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=23</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=23</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/23-guid.html</id>
        <title type="html">Doing the work elsewhere - Adding a job to the queue</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I've previously shown you why you may want to put some tasks through a queuing system, what sort of jobs you could define, plus how to keep a worker process running for as long as you would like (but still be mindful of problems that happen).<br />
<br />
In this post, I'll show you how to put the messages into the queue, and we'll also make a start on reading them back out.<br />
 <br /><a href="http://www.topbit.co.uk/serendipity/archives/23-Doing-the-work-elsewhere-Adding-a-job-to-the-queue.html#extended">Continue reading "Doing the work elsewhere - Adding a job to the queue"</a>
            </div>
        </content>
        <dc:subject>php</dc:subject>
<dc:subject>scaling</dc:subject>
<dc:subject>tools</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/22-Doing-the-work-elsewhere-Sidebar-running-the-worker.html" rel="alternate" title="Doing the work elsewhere - Sidebar - running the worker" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2009-06-23T21:19:33Z</published>
        <updated>2009-06-26T00:19:06Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=22</wfw:comment>
    
        <slash:comments>3</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=22</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/7-OtherTech" label="OtherTech" term="OtherTech" />
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/22-guid.html</id>
        <title type="html">Doing the work elsewhere - Sidebar - running the worker</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I'm taking a slight diversion now, to show you how the main worker processor runs.  There are two parts to it - the actual worker, written in PHP, and the script that keeps running it. <br /><a href="http://www.topbit.co.uk/serendipity/archives/22-Doing-the-work-elsewhere-Sidebar-running-the-worker.html#extended">Continue reading "Doing the work elsewhere - Sidebar - running the worker"</a>
            </div>
        </content>
        <dc:subject>php</dc:subject>
<dc:subject>scaling</dc:subject>
<dc:subject>tools</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/21-Doing-the-work-elsewhere-Asynchronous-Message-Queues.html" rel="alternate" title="Doing the work elsewhere - Asynchronous Message Queues" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2009-06-10T15:43:29Z</published>
        <updated>2009-06-11T10:06:11Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=21</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=21</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/7-OtherTech" label="OtherTech" term="OtherTech" />
            <category scheme="http://www.topbit.co.uk/serendipity/categories/3-best-practices" label="best-practices" term="best-practices" />
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/21-guid.html</id>
        <title type="html">Doing the work elsewhere - Asynchronous Message Queues</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<h1>The use of Beanstalkd as a queueing system</h1>

	<h2>What is an asynchronous queue</h2>

<p>The classic <a onclick="javascript: pageTracker._trackPageview('/extlink/en.wikipedia.org/wiki/Message_queue');"  href="http://en.wikipedia.org/wiki/Message_queue">wikipedia quote (Message queue)</a></p>

	<blockquote>
		<p>In computer science, message queues and mailboxes are software-engineering components used for interprocess communication, or for inter-thread communication within the same process. They use a queue for messaging &#8211; the passing of control or of content. Group communication systems provide similar kinds of functionality.</p>
	</blockquote>

	<p>So one part of a system puts a message into a queue for another part to read from, and then act upon.  The asynchronous nature means that each side is otherwise independent from the other, and does not wait for a response.  That independence is an important part of the nature of the system though &#8211; and we&#8217;ll see later how some of the more advanced functionality for our software of choice here can give some extraordinary flexibility to what can be done.</p> <br /><a href="http://www.topbit.co.uk/serendipity/archives/21-Doing-the-work-elsewhere-Asynchronous-Message-Queues.html#extended">Continue reading "Doing the work elsewhere - Asynchronous Message Queues"</a>
            </div>
        </content>
        <dc:subject>advanced</dc:subject>
<dc:subject>php</dc:subject>
<dc:subject>scaling</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/19-me-instanceOf-ZCE-true.html" rel="alternate" title="(me instanceOf ZCE) === true" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2009-06-06T11:50:00Z</published>
        <updated>2009-06-06T11:54:36Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=19</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=19</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
            <category scheme="http://www.topbit.co.uk/serendipity/categories/5-quick" label="quick" term="quick" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/19-guid.html</id>
        <title type="html">(me instanceOf ZCE) === true</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>Phew.  That would have been embarrassing if I&#8217;d not passed my <span class="caps">ZCE</span> on Thursday afternoon.</p>

	<p>The rant on how useful it actually is though, will be coming early next week.</p> 
            </div>
        </content>
        <dc:subject>exams</dc:subject>
<dc:subject>zce</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/18-Upcoming-posts-keep-watching.html" rel="alternate" title="Upcoming posts - keep watching" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2009-06-02T10:28:55Z</published>
        <updated>2009-06-02T10:38:59Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=18</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=18</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/4-meta" label="meta" term="meta" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/18-guid.html</id>
        <title type="html">Upcoming posts - keep watching</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>Just a quick note on what is going to be posted in the next few weeks &#8211; I&#8217;ve got a few significant pieces in mind for various topics &#8211; including:</p>

	<p>	<ul>
		<li>Doing the work elsewhere &#8211; asynchronous queues </li>
	</ul>
  This is going to be a series of articles &#8211; and to support it, I&#8217;m rewriting some code that I had originally wrote for my last job (v2, and so significantly improved over the original).  First though, I&#8217;ll tell you what is planned, and just how asynchronous queues are used and how they can be incredibly useful for scaling up any significant website, and not just in the obvious ways.</p>

	<p>	<ul>
		<li>Mail queuing, on a vast scale</li>
	</ul>
  Dave Marshall has just posted an entry on &#8220;Using message queues to improve user experience&#8221;: 
  http://www.davedevelopment.co.uk/2009/06/01/using-message-queues-to-improve-user-experience/ where he queues up some emails in order to spool them out over the course of a few minutes.
  For the last 18 months, I&#8217;d been doing something very similar, on a far larger scale, with PEAR&#8217;s Mail_Queue.
  I&#8217;ll show you how I did it and I&#8217;ll show you how the messages were generated quickly, and how they could be sent out &#8211; and more importantly without destroying the system it was running on. As a bonus, I&#8217;ll show you how if you run some form of internal mail system, you could save gigabytes of database space and give yourself vastly more flexibility.</p>

	<p>	<ul>
		<li>Self stubbing mocks</li>
	</ul>
  Using the Mocking functionality in PHPunit &amp; Simpletest can be complicated with the various calls that are required.  There&#8217;s just not much documentation around the PHP-world on how to run it.
  Another method, which can be easier to understand, is self-stubbing &#8211; putting your code into the test class.  I&#8217;ll show some examples of how to do that.</p>

	<p>Finally, I&#8217;m going to be doing my <span class="caps">ZCE</span> exam in the next week or two &#8211; quite possibly on Thursday 3rd June. Keep a close eye here, and on my Twitter <a onclick="javascript: pageTracker._trackPageview('/extlink/twitter.com/topbit');"  href="http://twitter.com/topbit">@topbit</a> for the results, and a follow-up.</p> 
            </div>
        </content>
        <dc:subject>php</dc:subject>
<dc:subject>phpunit</dc:subject>
<dc:subject>scaling</dc:subject>
<dc:subject>testing</dc:subject>
<dc:subject>zend framework</dc:subject>
<dc:subject>zf</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/17-I-laugh-at-your-ZCE-exam-prep-tests-2.html" rel="alternate" title="I laugh at your ZCE exam prep tests #2" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2009-05-30T14:20:23Z</published>
        <updated>2009-05-30T14:20:23Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=17</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=17</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/17-guid.html</id>
        <title type="html">I laugh at your ZCE exam prep tests #2</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>Back at the <span class="caps">PHP</span> London Conference at the end of February, iBuildings was offering a little test, with prize for people that could do well answering the sort of questions that are on the <span class="caps">ZCE</span> exam.  Never one to turn down something for free, I took ten minutes to answer the eight questions.  A few weeks later, I get an email from them/Zend to say I&#8217;d won the chance to take an exam &#8211; <span class="caps">ZCE</span>, or <span class="caps">ZFE</span> (Zend Framework). Although I use ZF, I don&#8217;t know it well enough to begin to pass any exam, so as I&#8217;ve still not had the chance to take it, I figured, why not take it on their dime?</p>

	<p><a href="http://www.topbit.co.uk/serendipity/archives/9-ZCE-prep-practice-test-1.html">About 14 months ago</a>, I&#8217;d bought 5 tries on the PHPArch-based &#8216;Vulcan&#8217; test prep exam.  Today, I&#8217;ve come back to it, and gone through it again.  Like last time, the test (practice and real) is scheduled to take up to 90 minutes, but I had whipped through them all in 45 minutes, I have finished the 70 questions.</p>

	<p>I&#8217;m amused by the fact the only part of this I failed was &#8216;Basic Language&#8217;. The first time around it was design patterns. Either way, now I&#8217;ve got some time, I&#8217;m going to schedule the test for quite possibly later this week and see about getting the paperwork for it.</p>

	<p>It&#8217;s also still 7 &#8216;EXCELLENT&#8217;s, and a fail &#8211; just in different places :-)</p>

	<table>
		<tr>
			<td>Category</td>
			<td>Grade</td>
		</tr>
		<tr>
			<td><span class="caps">XML</span> &amp; Web Services</td>
			<td><span class="caps">PASS</span></td>
		</tr>
		<tr>
			<td>Arrays</td>
			<td><span class="caps">PASS</span></td>
		</tr>
		<tr>
			<td>Web Features</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td>Basic Language</td>
			<td><span class="caps">FAIL</span></td>
		</tr>
		<tr>
			<td>Streams and Network Programming</td>
			<td><span class="caps">PASS</span></td>
		</tr>
		<tr>
			<td>Database Access</td>
			<td><span class="caps">PASS</span></td>
		</tr>
		<tr>
			<td>String Manipulation and Regular Expressions</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td><span class="caps">PHP</span> 4/5 differences</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td>Security</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td><span class="caps">OOP</span></td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td>Functions</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td>Design</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
	</table>

	<p>Overall : <strong>EXCELLENT</strong></p> 
            </div>
        </content>
        <dc:subject>exams</dc:subject>
<dc:subject>php</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/15-Elephpants-on-parade.html" rel="alternate" title="Elephpants on parade" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2008-09-18T16:49:48Z</published>
        <updated>2009-01-15T10:15:26Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=15</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=15</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/15-guid.html</id>
        <title type="html">Elephpants on parade</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>After my little trip out yesterday to Google Dev Day 2008 (London) at Wembley &#8211;  I thought I&#8217;d post some pics I took of the day, or more precisely, of what my Elephpant got up to.  You can see them on the <a onclick="javascript: pageTracker._trackPageview('/extlink/www.flickr.com/photos/topbit/sets/72157607327499398/');"  href="http://www.flickr.com/photos/topbit/sets/72157607327499398/">Elephpant at GoogleDevDay08</a> Flickr set page.<br />

<br />

Also, some link love to to http://www.elephpantworldtour.com/ for the idea of taking the cute little blue guy along.</p> 
            </div>
        </content>
        <dc:subject>elephpant</dc:subject>
<dc:subject>ewt08</dc:subject>
<dc:subject>fun</dc:subject>
<dc:subject>googledevday08</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/13-Riddled-me-that.html" rel="alternate" title="Riddled me that" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2008-04-24T19:56:18Z</published>
        <updated>2008-04-24T19:56:18Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=13</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=13</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/13-guid.html</id>
        <title type="html">Riddled me that</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>Well go figure.  I&#8217;ve just won $50 (Canadian, that&#8217;s about $3000 <span class="caps">USD</span> by now) of books and &#8216;stuff&#8217; from <a onclick="javascript: pageTracker._trackPageview('/extlink/phparch.com/');"  href="http://phparch.com/"><span class="caps">PHP</span> Arch</a>, care of it&#8217;s publisher, <a onclick="javascript: pageTracker._trackPageview('/extlink/mtabini.blogspot.com/2008/04/riddle-me-this-and-win-50-in.html');"  href="http://mtabini.blogspot.com/2008/04/riddle-me-this-and-win-50-in.html">Marco Tabini&#8217;s, blog</a> <br />

<br />

He&#8217;d put a little puzzle up last night, some long numbers, and a few short.  I recognised them as almost ISBNs &#8211; it wasn&#8217;t hard to figure them as having dropped a zero from the front, making them &#8220;php|architect&#8217;s Guide to Programming with Zend Framework&#8221; and &#8220;php|architect&#8217;s Zend <span class="caps">PHP</span> 5 Certification Study Guide, 2nd Edition&#8221;. From there, guessing the other numbers were page, line and word counts was easy.<br />

<br />

So, what should I buy?  I&#8217;ve already got a subscription to the magazine &#8211; <span class="caps">PDF</span> edition (it&#8217;s so much easier to ship bits over the atlantic&#8230;).<br />
</p> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/12-Always-have-up-to-date-documentation,-part-2.html" rel="alternate" title="Always have up to date documentation, part #2" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2008-03-24T15:38:28Z</published>
        <updated>2008-03-24T15:38:28Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=12</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=12</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/12-guid.html</id>
        <title type="html">Always have up to date documentation, part #2</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>see my <a href="http://www.topbit.co.uk//serendipity/archives/10-Always-have-up-to-date-documentation,-part-1.html">previous post</a>  on the topic, #1.<br />

<br />

My last post ended up more as a how-to than what-to.  This time, I&#8217;ll say why you should have local copies of the documentation for most of the tools you use.  I&#8217;ll also tell you the sort of things I always have handy as well.<br />

<br />

Getting a local copy of php.net &#8211; and getting installed as an apache vhost and updated (probably weekly) is some effort, but well worth it.  I&#8217;ve said it before, but <span class="caps">PHP</span>.net is the <strong>best</strong> language reference site that I&#8217;ve seen. It&#8217;s kept up to date (sometimes ahead of the code releases in fact) and while the notes that are added to it can sometimes confuse, as much as help, when they do help, they will really make the difference.<br />

<br />

I don&#8217;t tend to buy many <span class="caps">PHP</span> books, because what can they do besides re-iterate what is is already there?<br />

<br />

The most important thing to bear in mind though is not to just have the documentation there to read &#8211; you have to know what is available.  Projects like <span class="caps">PHP</span>, the Zend Framework and PHPUnit have a lot of parts &#8211; and knowing that they have things &#8211; even if you don&#8217;t know how they work right now, can save you days or weeks of effort.  <br />

<br />

It&#8217;s for that reason that you need to at least scan over all the the docs you have &#8211; and indeed for all the libraries and tools that you use.  Even I don&#8217;t read everything and expect to remember it all &#8211; but I remember enough to recognise that a paticular tool might have something to help &#8211; maybe <span class="caps">PHP</span> has something to search the values in an array (http://php.net/array-search), or can use Oracle, or Ldap, or Memcached, or that Zend Framework can let you easily loop over maildirs (or an mbox) to get each mail from within it.  If you don&#8217;t read the manual &#8211; at least skimming over it, you would never know that functionality exists, and you inevitably end up reimplementing other people&#8217;s already debugged code.  That&#8217;s a waste of your time.<br />

<br />

So, take an hour now, and assemble a directory to put these docs into, and read through them &#8211; not everything, but at least look at headers of every section, just to get an idea of what is available and maybe go back and read up some more on things that may be useful to you.  If something isn&#8217;t so interesting to you now, do bear in mind, your next project, or job, might change that.<br />

<br />

Above all, keep learning.  Never stop.<br />

<hr /></p> <br /><a href="http://www.topbit.co.uk/serendipity/archives/12-Always-have-up-to-date-documentation,-part-2.html#extended">Continue reading "Always have up to date documentation, part #2"</a>
            </div>
        </content>
        <dc:subject>code</dc:subject>
<dc:subject>php</dc:subject>
<dc:subject>tools</dc:subject>
<dc:subject>zend framework</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/11-Know-thy-tools-first-of-all.html" rel="alternate" title="Know thy tools first of all" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2008-03-17T20:09:22Z</published>
        <updated>2008-03-17T20:55:29Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=11</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=11</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/11-guid.html</id>
        <title type="html">Know thy tools first of all</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>Just a quick tip here, and I&#8217;ll expand on it below the cut.<br />

<br />

When you have a library, like <a onclick="javascript: pageTracker._trackPageview('/extlink/pear.php.net');"  href="http://pear.php.net">PEAR</a> or <a onclick="javascript: pageTracker._trackPageview('/extlink/framework.zend.com');"  href="http://framework.zend.com">Zend Framework</a> &#8211; or ven just the whole <a onclick="javascript: pageTracker._trackPageview('/extlink/www.php.net');"  href="http://www.php.net">PHP</a> language library &#8211; it&#8217;s absolutely vital you know what it can do.<br />

<br />

What you don&#8217;t know can cost you weeks of effort and pain.  I found this out (again) today, but it&#8217;s not my pain &#8211; it&#8217;s an employee who was too busy deciding that the Zend Framework wasn&#8217;t suitable for a simple cron-script task, he has spent most of the last few weeks duplicating something that is not as good as what I could write &#8211; with ZF &#8211; in about an hour.</p> <br /><a href="http://www.topbit.co.uk/serendipity/archives/11-Know-thy-tools-first-of-all.html#extended">Continue reading "Know thy tools first of all"</a>
            </div>
        </content>
        <dc:subject>code</dc:subject>
<dc:subject>php</dc:subject>
<dc:subject>zend framework</dc:subject>
<dc:subject>zf</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/10-Always-have-up-to-date-documentation,-part-1.html" rel="alternate" title="Always have up to date documentation, part #1" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2008-03-16T23:41:00Z</published>
        <updated>2008-03-16T21:12:51Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=10</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=10</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/3-best-practices" label="best-practices" term="best-practices" />
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/10-guid.html</id>
        <title type="html">Always have up to date documentation, part #1</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>As I mentioned in my second post, <a href="http://topbit.co.uk/serendipity/archives/4-ZCE-prep-and-dumb-tests.html"><span class="caps">ZCE</span> prep &#8211; and dumb tests</a> &#8211; about open book tests (like Brainbench), having a copy of all the relevant documentation can be incredibly useful, if only from a speed issue.  Knowing you can just open a new tab and type a few words to get the information on a function, or concept from the manual takes away so many problems.  <br />

<br />

I mentioned there that I have a local copy of the main <a href="htttp://php.net/manual/en/"><span class="caps">PHP</span> manual</a> &#8211; and I wanted to tell you how I keep it, and a couple of other manuals up to date, as well as other documentation.</p> <br /><a href="http://www.topbit.co.uk/serendipity/archives/10-Always-have-up-to-date-documentation,-part-1.html#extended">Continue reading "Always have up to date documentation, part #1"</a>
            </div>
        </content>
        <dc:subject>linux</dc:subject>
<dc:subject>php</dc:subject>
<dc:subject>tools</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/9-ZCE-prep-practice-test-1.html" rel="alternate" title="ZCE prep - practice test #1" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2008-03-13T21:33:00Z</published>
        <updated>2008-03-13T21:36:07Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=9</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=9</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/9-guid.html</id>
        <title type="html">ZCE prep - practice test #1</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>Well, I&#8217;ve just completed the <a onclick="javascript: pageTracker._trackPageview('/extlink/vulcan.phparch.com/');"  href="http://vulcan.phparch.com/"><span class="caps">PHP</span> Arch &#8216;Vulcan&#8217; practice test</a> &#8211; the first of up to five such practice tests I&#8217;ve purchased.  I have quite deliberately not gone through what study materials I have on hand before I took this test (I wanted to get a baseline), but none the less got an &#8216;EXCELLENT&#8217; final score, and the same &#8216;Excellent&#8217; on seven of the twelve sections the pre-test is broken down into.  &#8216;Pass&#8217; on four others, and just one &#8216;Fail&#8217; on the design (patterns) section.  If the real test worked much the same &#8211; and with a composite score, rather than having to pass all sections &#8211; I doubt I would have a problem to have gotten a passing grade.</p>

	<p>Although the test (practice and real) is scheduled to take up to 90 minutes, after 45, I have finished the 70 questions.  I&#8217;d set about half-dozen to review, but I don&#8217;t think I changed any of those answers, and so after a little more than 50 minutes &#8211; I called for the results.</p>

	<p>It was much as I expected, with just some occasional requirements to know some parameter orders and specific use (the kinda thing where you test it, and if you didn&#8217;t get it right first time, I would trivially look it up to check, for functions like sub-string searching).  Also several questions on <span class="caps">XML</span> handling, which I muddled along with.</p>

	<p>Streams, strings and web-features are something I will have to look at more carefully for next time, but for me the big one is design patterns &#8211; it was my only failing section.  </p>

	<p>All in all, I&#8217;ve very happy with this evening&#8217;s events and the (practice) results.</p>

	<table>
		<tr>
			<td>Category</td>
			<td>Grade</td>
		</tr>
		<tr>
			<td><span class="caps">XML</span> &amp; Web Services</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td>Arrays</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td>Web Features</td>
			<td><span class="caps">PASS</span></td>
		</tr>
		<tr>
			<td>Basic Language</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td>Streams and Network Programming</td>
			<td><span class="caps">PASS</span></td>
		</tr>
		<tr>
			<td>Database Access</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td>String Manipulation and Regular Expressions</td>
			<td><span class="caps">PASS</span></td>
		</tr>
		<tr>
			<td><span class="caps">PHP</span> 4/5 differences</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td>Security</td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td><span class="caps">OOP</span></td>
			<td><strong>EXCELLENT</strong></td>
		</tr>
		<tr>
			<td>Functions</td>
			<td><span class="caps">PASS</span></td>
		</tr>
		<tr>
			<td>Design</td>
			<td><strong>FAIL</strong></td>
		</tr>
	</table> 
            </div>
        </content>
        <dc:subject>exams</dc:subject>
<dc:subject>php</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/8-A-useful-idea-for-helping-to-enforce-PHP-code-standards.html" rel="alternate" title="A useful idea for helping to enforce PHP code standards" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2008-03-11T17:16:00Z</published>
        <updated>2009-06-06T11:56:32Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=8</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=8</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/3-best-practices" label="best-practices" term="best-practices" />
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/8-guid.html</id>
        <title type="html">A useful idea for helping to enforce PHP code standards</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p><a onclick="javascript: pageTracker._trackPageview('/extlink/raphaelstolt.blogspot.com/2008/03/sniffing-refactoring-needs.html');"  href="http://raphaelstolt.blogspot.com/2008/03/sniffing-refactoring-needs.html">extending PHP_CodeSniffer</a> by Raphael Stolt shows how to quite easily add to a tool that will report what parts of your <span class="caps">PHP</span> source needs a clean-up, from the built in &#8216;sniffs&#8217; for coding standards, and now adding to that for some slightly more opinionated choices on the maximum number of lines per function, or functions per class.<br />

<br />

This could be a start of a whole collection of additional classes for additional checks.<br />

<br />

The only challenge I see at the moment (and I don&#8217;t think it&#8217;s a big one, though I&#8217;ve not tried it, so it might not even exist, I&#8217;ve just not had the opportunity to look yet) is having to put code into the <span class="caps">PEAR</span> directory path, since that is where PHP_CodeSniffer is looking for the base library.  I do see that they use long <span class="caps">PEAR</span> class-names, so it may just a matter of having the phpcs tool look elsewhere for the base coding style class.<br />

<br />

1234.20080102 dev&#8217;). After a quick wander around the newly checked out version, maybe run a set of unit tests, just for security, it&#8217;s just as easy to put a similar &#8216;live&#8217; symlink into place with a new link.<br />

<br />

If there is ever a problem, rolling back to a previous live version is just as easy. Other configuration changes are made within the code on the apache servername, or the machine&#8217;s own hostname (more useful for <span class="caps">CLI</span> scripts, generally run from cron).<br />

<br />

There are some downsides &#8211; with a complete checkout of a 40-some megabyte website (it&#8217;s mostly the Zend Framework and other libraries from which I use a number of files, though rarely all), it takes a little while (not too long, it&#8217;s a gigabit link between the repository and the main webserver) and there are also some potential caching issues (Etags are usually based on the file inodes), but as we plan to move to a multi-machine cluster &#8211; and the images aren&#8217;t being served from Apache, but a dedicated image webserver, that&#8217;s not a significant issue &#8211; and even on Apache we don&#8217;t have Etags enabled (Yslow from Yahoo also suggests that).<br />

<br />

<strong>[edit: 18:06]</strong><br />

Ahah, some investigation &#8211; and copious use of echos in the phpcs script, and /usr/share/php/PHP/CodeSniffer.php class:<br />

<br />

Creating your own standards, and using them from anywhere on the filesystem &#8211; not having to link from inside the PEAR/PHP/CodeSniffer directory:<br />

<br />

<h2>The coding standard class with your extension:</h2><br />

The class is called PHP_CodeSniffer_Standards_Example_ExampleCodingStandard &#8211; the two <em>&#8216;Example&#8217;</em>s being the name of the coding standard.  The file is called &#8216;Example/ExampleCodingStandard.php&#8217;<br />

<br />

<div class="php" style="text-align: left"><br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #808080; font-style: italic;">// in the &#8230;./Example/ directory</span><br />
<span style="color: #b1b100;">require_once</span> <span style="color: #ff0000;">&#8216;PHP/CodeSniffer/Standards/CodingStandard.php&#8217;</span>;<br />
<br />
<span style="color: #000000; font-weight: bold;">class</span> PHP_CodeSniffer_Standards_Example_ExampleCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard<br />
<span style="color: #66cc66;">&#123;</span><br />
&#160; &#160; <span style="color: #000000; font-weight: bold;">function</span> getIncludedSniffs<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
&#160; &#160; <span style="color: #66cc66;">&#123;</span><br />
&#160; &#160; &#160; &#160; <span style="color: #b1b100;">return</span> <a onclick="javascript: pageTracker._trackPageview('/extlink/www.php.net/array');"  href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><br />
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <span style="color: #ff0000;">&#8216;PEAR&#8217;</span>,&#160; &#160; &#160; &#160; &#160;<span style="color: #808080; font-style: italic;">// the main <span class="caps">PEAR</span> standards</span><br />
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <span style="color: #808080; font-style: italic;">// Add our other standards, all from a subdir</span><br />
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <a onclick="javascript: pageTracker._trackPageview('/extlink/www.php.net/dirname');"  href="http://www.php.net/dirname"><span style="color: #000066;">dirname</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;"><i>FILE</i></span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">&#8216;/Standards&#8217;</span>,&#160; &#160;<br />
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;<span style="color: #66cc66;">&#41;</span>;<br />
&#160; &#160; <span style="color: #66cc66;">&#125;</span><br />
<br />
&#160; &#160; <span style="color: #000000; font-weight: bold;">function</span> getExcludedSniffs<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
&#160; &#160; <span style="color: #66cc66;">&#123;</span><br />
&#160; &#160; &#160; &#160; <span style="color: #b1b100;">return</span> <a onclick="javascript: pageTracker._trackPageview('/extlink/www.php.net/array');"  href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&#160; &#160; <span style="color: #66cc66;">&#125;</span><br />
<br />
<span style="color: #66cc66;">&#125;</span><br />
&#160;</div><br />

<br />

And in the subdir: .../Example/Standards/<br />

 &#8211; Raphael&#8217;s ToManyMethodsSniff.php and MethodLengthSniff.php files &#8220;from his post&#8221;:http://raphaelstolt.blogspot.com/2008/03/sniffing-refactoring-needs.html<br />

<br />

To call it:<br />

<div class="bash" style="text-align: left"><br />
<span style="color: #808080; font-style: italic;"># we have to give the full path to the file called Example/ExampleCodingStandard.php</span><br />
<span style="color: #808080; font-style: italic;"># $(pwd)/ is just Bash-ish for outputting the current directory name</span><br />
phpcs &#8212;<span style="color: #0000ff;">standard=</span>$<span style="color: #66cc66;">&#40;</span><span style="color: #000066;">pwd</span><span style="color: #66cc66;">&#41;</span>/Example /path/to/file/to/check/&#160; | less<br />
&#160;</div><br />
</p> 
            </div>
        </content>
        <dc:subject>code</dc:subject>
<dc:subject>php</dc:subject>
<dc:subject>standards</dc:subject>
<dc:subject>tools</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/4-ZCE-prep-and-dumb-tests.html" rel="alternate" title="ZCE prep - and dumb tests" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2008-03-10T21:55:00Z</published>
        <updated>2008-03-17T00:08:46Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=4</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=4</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/6-php" label="php" term="php" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/4-guid.html</id>
        <title type="html">ZCE prep - and dumb tests</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>This week I&#8217;m going to take the first of my PHPArch.com&#8217;s <a onclick="javascript: pageTracker._trackPageview('/extlink/www.zend.com/en/services/certification/');"  href="http://www.zend.com/en/services/certification/">ZCE</a> prep test &#8211; then I&#8217;ll read the book and see they they expect me to know.</p>

	<p>Going for the Zend Certification is something I&#8217;ve been thinking of doing for a couple of years, and especially now that it covers PHP5 &#8211; and increasingly good practices and security topics.  It&#8217;s not that I need to get the <span class="caps">ZCE</span>, I&#8217;d go for it , for the intellectual challenge if nothing else.  It&#8217;s also the closest thing I would have to a professional qualification since I completed a <span class="caps">HNC</span> computer studies in 1992 &#8211; and that was just 1/day week day release over the course of a couple of years.</p>

	<p>Of course, it&#8217;s not the first <span class="caps">PHP</span> test I&#8217;ve taken &#8211; last year, just before the <span class="caps">PHP</span> London 2007 conference, <a onclick="javascript: pageTracker._trackPageview('/extlink/www.allegisgroup.co.uk/');"  href="http://www.allegisgroup.co.uk/">Allegis</a> had come along to the <span class="caps">PHP</span> groups&#8217;s early-February meeting, to plug their services (and they got business from it, one guy interview the following day, a Friday, and started work on the Monday) &#8211; but they offered to have anyone that wanted to do the Brainbench test, paid for, by Allegis.</p>

	<p>At the time, I had just started a couple of days before at a job near Covent Garden, but then left it after a week for a better gig (where I still am now, some 13 months on) &#8211; but I took Allegis up on the offer, and finally got the results at the conference.  I never did get a copy of the exact numbers, but I was told the headlines, so these may not be exact, but they are certainly in the ballpark.
	<ul>
		<li>Time: 28 minutes (apparently this is very good)</li>
		<li>Score 4.73 (out of 5.0)</li>
		<li>Better than 98% of other test-takers.</li>
	</ul><br />
I&#8217;m told that the harder the questions you answer, the harder the next questions get &#8211; so getting from 4.0 to 5.0 is a lot harder than getting from 3.0 to 4.0 &#8211; if I&#8217;m wrong about that, then please let me know.</p>

	<p>The thing is, the Brainbench tests are open-book &#8211; they pretty much have to be, you take them at home, though they are against the clock.  I can certainly appreciate the logic of it &#8211; after all, which serious developer doesn&#8217;t have an internet connection and a quick bookmark to http://php.net (and I&#8217;ve look at the other language sites &#8211; php.net is by far the best), or at least a copy of the documentation around (.<span class="caps">CHM</span> file or just a bunch of <span class="caps">HTML</span> pages &#8211; or, like I do, a weekly rsynced copy of the php.net manual!).  Just as well I did, the tests I&#8217;ve seen always throw in some pointless questions like how to use <span class="caps">LDAP</span>, or how to connect to an Oracle database.  I&#8217;ve never used either of them, so I don&#8217;t bother to learn them &#8211; but if I did need them, I&#8217;d figure it out in a few minutes reading &#8211; or, more likely, I&#8217;d have some kind of library, like the Zend Framework which did the hard work for me &#8211; plus, I&#8217;d only end up writing that kind of code once anyway before I threw it into a function and forgot the minutiae.</p>

	<p>It saddens me when people are too dumb to do well on such a test though &#8211; how hard is it to read the manual, at least well enough to know where to refer to for more advice?</p>

	<p>The <span class="caps">ZCE</span> is a closed book exam &#8211; or, as I call it (for all the reasons the brain-bench is open-book) &#8211; unrealistic.  If I can&#8217;t recall whether the $haystack or $needle come first in in array or string search &#8211; it&#8217;s but a moment to look it up.</p>

	<p>Even though I&#8217;ve listed my scores above, I don&#8217;t bother to promote myself with them on my CV &#8211; indeed Allegis is the only company (recruiter or not) that know them &#8211; they did pay for it after all. Because I can get those kind of scores with what I consider so little effort (about half-an-hour&#8217;s worth in fact), then either the test is bad, or 98% of the other people that gave taken that test are.  Frankly, I&#8217;ve got to think it&#8217;s mostly the latter.</p>

	<p>Keep reading my posts, and I&#8217;ll tell you want you need to do to ace your tests &#8211; and not look a fool when it comes to developing something I might set you.</p> 
            </div>
        </content>
        <dc:subject>exams</dc:subject>
<dc:subject>php</dc:subject>
<dc:subject>phplondon07</dc:subject>
<dc:subject>phplondon08</dc:subject>

    </entry>
    <entry>
        <link href="http://www.topbit.co.uk/serendipity/archives/3-Topbit-Technicals-what-to-expect.html" rel="alternate" title="Topbit Technicals - what to expect" />
        <author>
            <name>Topbit</name>
            <email>topbit+s9y@gmail.com</email>
        </author>
    
        <published>2008-03-09T21:13:19Z</published>
        <updated>2008-03-10T22:05:07Z</updated>
        <wfw:comment>http://www.topbit.co.uk/serendipity/wfwcomment.php?cid=3</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.topbit.co.uk/serendipity/rss.php?version=atom1.0&amp;type=comments&amp;cid=3</wfw:commentRss>
    
            <category scheme="http://www.topbit.co.uk/serendipity/categories/4-meta" label="meta" term="meta" />
    
        <id>http://www.topbit.co.uk/serendipity/archives/3-guid.html</id>
        <title type="html">Topbit Technicals - what to expect</title>
        <content type="xhtml" xml:base="http://www.topbit.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                	<p>Clearly, the world needs another blog, and especially one by an <del>arrogant</del> opinionated developer that thinks he knows better than most.       <strong>This is that blog</strong><br />

<br />

While I&#8217;ve had my LJ for a while, that has never been the right place for some highly technical posts, so, frankly years late, I&#8217;ve decided to start this up.  This will be the home for my technical discussions, suggestions, links to some very interesting posts I&#8217;ve seen elsewhere (hopefully good), and more than the odd rant, about other developers, technologies and anything else that&#8217;s vaguely related.<br />

<br />

If it involves the flowing of electrons, it&#8217;s pretty much fair game.</p> 
            </div>
        </content>
        <dc:subject>geek</dc:subject>
<dc:subject>php</dc:subject>

    </entry>

</feed>