<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Timefields</title>
	<atom:link href="http://blog.tfd.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tfd.co.uk</link>
	<description>Open Source Open Thought</description>
	<lastBuildDate>Tue, 09 Mar 2010 17:13:09 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='blog.tfd.co.uk' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/493b8cbeb34ea6b3296a64c26bce7e4a?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Timefields</title>
		<link>http://blog.tfd.co.uk</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.tfd.co.uk/osd.xml" title="Timefields" />
	<atom:link rel='hub' href='http://blog.tfd.co.uk/?pushpress=hub'/>
		<item>
		<title>ACL extensions just got easier</title>
		<link>http://blog.tfd.co.uk/2010/03/09/acl-extensions-just-got-easier/</link>
		<comments>http://blog.tfd.co.uk/2010/03/09/acl-extensions-just-got-easier/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 17:13:09 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tfd.co.uk/?p=327</guid>
		<description><![CDATA[Extending the types of ACLs in Jackrabbit 1.x was hard. After, 1.5 where there was a reasonable ACL implementation, much of the code that managed this area was buried deep within inner classes inside the DefaultAccessManager and related classes of Jackrabbit 1.5/1.6. In Jackrabbit 2 as part of the improvement to the UserManager (I guess) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=327&subd=ianboston&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Extending the types of ACLs in Jackrabbit 1.x was hard. After, 1.5 where there was a reasonable ACL implementation, much of the code that managed this area was buried deep within inner classes inside the DefaultAccessManager and related classes of Jackrabbit 1.5/1.6. In Jackrabbit 2 as part of the improvement to the UserManager (I guess) its become much easier to make extention. I had a patch that modified the core classes of ACLEditor, ACLProvider, ACLTemplate in JR1.5 allowing the injection of a class that would control the way in which Access Control Entries were collected for a node. This allowed things like dynamic principal membership to be implemented (eg membership of a group that is determined by a rule set, and not a membership record). The upside, was this was possible in 1.5, the downside was that it was hard and required re-implementation of some of the core classes, in the same package space to get round private, protected and even code blocks based on class names. So the patch was huge and hard to maintain.</p>
<p>In JR2, inside the acl.ACLProvider there are protected methods designed to be overridden. You still have to do this inside the same package as the native JR2 classes, in order to instance private internal classes, but at least extending the default ACL resolution in Jackrabbit is a case of extending a few classes. All of this put inside an OSGi environment makes it possible to re bundle an embedded Jackrabbit server with custom extensions on the core&#8230; and no need for a massive patch set&#8230;. another reason to upgrade to JR2.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ianboston.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ianboston.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ianboston.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ianboston.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ianboston.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ianboston.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ianboston.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ianboston.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ianboston.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ianboston.wordpress.com/327/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=327&subd=ianboston&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.tfd.co.uk/2010/03/09/acl-extensions-just-got-easier/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b4c84c66ffbbb824b5ecf24362318554?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">ian</media:title>
		</media:content>
	</item>
		<item>
		<title>Jackrabbit2 User Manager Scaling.</title>
		<link>http://blog.tfd.co.uk/2010/03/07/jackrabbit2-user-manager-scaling/</link>
		<comments>http://blog.tfd.co.uk/2010/03/07/jackrabbit2-user-manager-scaling/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 11:09:13 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tfd.co.uk/?p=325</guid>
		<description><![CDATA[In Jackrabbit 1.x the User manger (at least after 1.5) stored users in a security workspace within the repository. This was great, and works well upto about 1000 users. However it uses a structure where users are nested in the user that created the user. If if &#8220;admin&#8221; creates all your users, then there will [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=325&subd=ianboston&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>In Jackrabbit 1.x the User manger (at least after 1.5) stored users in a security workspace within the repository. This was great, and works well upto about 1000 users. However it uses a structure where users are nested in the user that created the user. If if &#8220;admin&#8221; creates all your users, then there will be 1000 child nodes to the admin user node. Sadly, additions become slower the more child nodes there are. Pretty soon a number of things happen. The number of child nodes causes updates to be come so slow it hard to add users (&gt;5K users). This can be addressed by a sharding the child node path, avoiding large numbers of child nodes. Secondly (and this is harder to solve), the query that is used to find a user, or to check that the user doesn&#8217;t exist somewhere becomes progressively more expensive. So that when you get to about 25K users the create user operation has slowed by an order of magnitude.  That may not sound too bad, since its not often that you want to create a user, however, retreval of a user that becomes slower as well since you cant calculate the location of the user node from the userID, and since this needs to be done on almost every request, it slows everything.</p>
<p>Fortunately it looks like all of this has been fixed in Jackrabbit 2. Now the UserManager does not store users in a nested form, it has an autoscaling sharding mechanism and the search query generates results that are far more direct. Some of this is not enabled by default, but here is the config that makes it work.</p>
<p>In repository.xml</p>
<pre>&lt;!DOCTYPE Repository 
       PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 2.0//EN"
"http://jackrabbit.apache.org/dtd/repository-2.0.dtd"&gt;
&lt;Repository&gt;
     &lt;FileSystem&gt;
        &lt;param name="path" value="${rep.home}/repository"/&gt;
     &lt;/FileSystem&gt;
     &lt;Security appName="Jackrabbit"&gt;
        &lt;SecurityManager workspaceName="security"&gt;
<strong>           &lt;UserManager&gt;
             &lt;param name="defaultDepth" value="4" /&gt;
             &lt;param name="autoExpandTree" value="true" /&gt;
             &lt;param name="autoExpandSize" value="500" /&gt;
           &lt;/UserManager&gt;
</strong>        &lt;/SecurityManager&gt;
        &lt;AccessManager&gt;
        &lt;/AccessManager&gt;
...</pre>
<p>In tests in Sling I see no slowdown in user creation upto 10K node. With HTTP requests ranging from 12-25ms. To add those 10K nodes from a single request thread takes 6m4s, a rate of about 27/s. The same test performed with Sling on Jackrabbit 1.6 was averaging 6/s over 10K nodes. Concurrent add operations tend to speed this up further as the http cost is factored out. My laptop runs out of steam at about 70/s.</p>
<p>User Node paths that are generated are of the form</p>
<pre>.../t/te/testuser201003070946420-300</pre>
<div>with auto scaling in operation they become</div>
<div></div>
<pre>.../t/te/tes/test/testu/testus/testuse/testuser/testuser2/testuser20/testuser201/testuser2010/testuser20100/testuser201003071035370-4998</pre>
<div id="_mcePaste">However this is an extreem case where all the user ID&#8217;s are almost identical.</div>
<div></div>
<div>Conclusion.</div>
<div>If you have a app that has a lot of users, use Jackrabbit 2 not Jackrabbit 1.6, as it scales better.</div>
<div></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ianboston.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ianboston.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ianboston.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ianboston.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ianboston.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ianboston.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ianboston.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ianboston.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ianboston.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ianboston.wordpress.com/325/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=325&subd=ianboston&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.tfd.co.uk/2010/03/07/jackrabbit2-user-manager-scaling/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b4c84c66ffbbb824b5ecf24362318554?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">ian</media:title>
		</media:content>
	</item>
		<item>
		<title>New Programming Language</title>
		<link>http://blog.tfd.co.uk/2010/02/05/new-programming-language/</link>
		<comments>http://blog.tfd.co.uk/2010/02/05/new-programming-language/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 15:35:32 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tfd.co.uk/?p=313</guid>
		<description><![CDATA[My new programming language that always compiles, never has bugs, has perfect style and is generally delivered on time, (all IMHO) is English. Developers must have a screw loose. Generally they refuse to write anything down, often they say the documentation is in the code, any yet, most of their leasure time is taken up [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=313&subd=ianboston&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>My new programming language that always compiles, never has bugs, has perfect style and is generally delivered on time, (all IMHO) is English. Developers must have a screw loose. Generally they refuse to write anything down, often they say the documentation is in the code, any yet, most of their leasure time is taken up refactoring rewriting and perfecting that algorithm that started out as a simple sort and is now drinking credit card limits on a cluster of Amazon nodes. Meanwhile, those crafty non developer types, lean back and claim victory with a page of prose that no compiler can even start to understand, and yet, they are the ones living it up with deadlines met. Now, we do do our best to ensure that doesnt happen, but there is a lesson to be learnt here.</p>
<p>Although 90% of those that write code for a living don&#8217;t do documentation and certainly don&#8217;t do it in advance, its far quicker and easier to experiment with ideas in plain English. (oops forgot that should be _i18n_native_tongue_ ), I wont go on, suffice it to say I&#8217;ve been trying out spec before implementation and found that on many occasions nuances that I can see would have appeared in the implementation have appeared in the spec, but the cost of correction has been significantly lower and my personal dialect of english has passed my patched english complier most of the time. Other&#8217;s substandard copies have problems. The bigest thing I have noticed with this approach is that I haven&#8217;t wasted hours debugging what I would eventually throw away.</p>
<p>It&#8217;s interesting that the software industry does so little of this. My first vocation in life was a design engineer; mechanical, high vacuum. There was no point in taking a stock bar out of the stores putting it into a lathe and hoping to machine off the right amount to make a stub shaft. In fact with high vacuum and often high voltage that was a positively dangerous pastime. Perhaps 200 years ago at the start of the industrial revolution or today if creating a work of art, but for engineering the physical material is always the last final part of the process. As software engineering, still a young profession evolves perhaps we will see more design and works of art and less metal bashing.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ianboston.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ianboston.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ianboston.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ianboston.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ianboston.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ianboston.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ianboston.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ianboston.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ianboston.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ianboston.wordpress.com/313/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=313&subd=ianboston&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.tfd.co.uk/2010/02/05/new-programming-language/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b4c84c66ffbbb824b5ecf24362318554?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">ian</media:title>
		</media:content>
	</item>
		<item>
		<title>In the Zone</title>
		<link>http://blog.tfd.co.uk/2010/02/02/in-the-zone/</link>
		<comments>http://blog.tfd.co.uk/2010/02/02/in-the-zone/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 10:07:46 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tfd.co.uk/?p=311</guid>
		<description><![CDATA[I have been doing and experiment for the past 3 months. I work in a busy office, open plan and quite noisy at times. There are many projects running in the office, probably about 20 at any one time. A mixture of management, creatives and engineers. The thinking goes, with an open plan office where [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=311&subd=ianboston&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I have been doing and experiment for the past 3 months. I work in a busy office, open plan and quite noisy at times. There are many projects running in the office, probably about 20 at any one time. A mixture of management, creatives and engineers. The thinking goes, with an open plan office where everyone can hear everything, there is cross fertilization of thoughts and information between projects, the normal process of active management of projects is not necessary because everything is visible and no one ever gets the chance to bury themselves in a hole for months. Well there is a free flow of information between individuals, and being within the University of Cambridge, free flow of thoughts is what we stand for. We&#8217;ve just spent a whole year shouting about 800 years of Cambridge thoughts changing the world (very arrogant, but thats also a Cambridge trait). So is this free flow of thoughts good ?</p>
<p>Several years ago, when I was still allowed to do sysadmin, a &#8220;joy&#8221; I am no longer considered safe to tackle. I was migrating an active CVS repository to a Subversion, the new and better source control system that didn&#8217;t force you to lock before edit. Sitting there at my keyboard, trying to get it done before a meeting a developer had taken the enforced downtime to continue that esoterically argument about memory consumption of byte arrays in C++ versus Java with a manager or co-developer, I can&#8217;t remember which. &#8220;^Rcvs&#8221; goes the keyboard, hoping to retrieve &#8221;find . -name &#8216;*cvs*&#8217; &#8221; for the zillionth time, then as I hit the enter key, I hear something just so outrageous I have to turn around and join in. Meanwhile &#8220;rm -rf /repo/cvsmain&#8221; poped up from bash history and diligently got to work. Needless to say the developer who&#8217;s work was in that repo cornered me at twilight, and I never did sysadmin again. Fortunately there was no period in hospital. If you hate doing sysadmin, thats a sure fire way to get out of it.</p>
<p>There is a reason a Study is called a Study, there the most common utterance spoken in a library is &#8220;shhh&#8221;. To get complex things into your head takes time free from distractions. The sorry take above was a simple case, and the volume of information very low, but the conversation and level of bullshit so tempting I couldn&#8217;t resist it, and bang, I wasn&#8217;t thinking what I was doing, my mind was blank and empty, just like the diskspace 5 minutes later, never again will I try to mix bullshit with command line.</p>
<p>So three months ago, I realised that most of my coding and complex work was done after 8 in the evening, or between 5 and 8 in the morning if I could not sleep. Time for an experiment, what will happen to my working hours if I move out and zone in. I upped camp, replugged the IP phone into an empty office down the corridor. By 10 I have cleared email, and loaded my head with everything that was there yesterday. Verified that dementia has not set in, yet, and I find I can get a good hours productive output in before the 15 second question brings it all to a grinding halt for the next hour. I looked at my timesheets last week, yes even in a University we have timesheets, there is no escape; and discovered that since moving to a quiet &#8220;study&#8221; environment, my hours have dropped from averaging 60+h to a far more reasonable 40h per week. I am almost certain that quality has gone up, I am working on a new version of the Sakai backend, looking at the stats we have resolved close to 500 issues, just did a 0.2 release and have 6 open bugs, with close to 90% test and integration test coverage.</p>
<p>I know plenty of other engineers have reported the same phenomena, often to deaf ears, but I cant help think that the change has something to do with it. So if you manage a mixed team of engineers, creatives try an experiment, create a space for communication but put those that need to study to get the job done in an environment where the most common utterance is &#8220;shhh&#8221; and let them get on with what was asked. If fall asleep, kick them, but quietly. If it doesn&#8217;t work, shout at them, but take them outside first, please.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ianboston.wordpress.com/311/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ianboston.wordpress.com/311/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ianboston.wordpress.com/311/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ianboston.wordpress.com/311/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ianboston.wordpress.com/311/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ianboston.wordpress.com/311/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ianboston.wordpress.com/311/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ianboston.wordpress.com/311/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ianboston.wordpress.com/311/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ianboston.wordpress.com/311/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=311&subd=ianboston&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.tfd.co.uk/2010/02/02/in-the-zone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b4c84c66ffbbb824b5ecf24362318554?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">ian</media:title>
		</media:content>
	</item>
		<item>
		<title>Incremental Integration testing with Sling</title>
		<link>http://blog.tfd.co.uk/2009/12/03/incremental-integration-testing-with-sling/</link>
		<comments>http://blog.tfd.co.uk/2009/12/03/incremental-integration-testing-with-sling/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 17:19:39 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tfd.co.uk/?p=307</guid>
		<description><![CDATA[I keep on forgetting how to do this.
cd launchpad/testing
mvn clean install
mvn jetty:run 1&#62; run.log 2&#62;&#38;1 &#38;
# wait for startup to finish
mvn test -Dtest=**/integrationtest/**/*Test.java

you can leave the server running, redeploy bundles and re-run specific tests avoiding a full rebuild.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=307&subd=ianboston&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I keep on forgetting how to do this.</p>
<pre>cd launchpad/testing
mvn clean install
mvn jetty:run 1&gt; run.log 2&gt;&amp;1 &amp;
# wait for startup to finish
mvn test -Dtest=**/integrationtest/**/*Test.java
</pre>
<p>you can leave the server running, redeploy bundles and re-run specific tests avoiding a full rebuild.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ianboston.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ianboston.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ianboston.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ianboston.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ianboston.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ianboston.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ianboston.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ianboston.wordpress.com/307/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ianboston.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ianboston.wordpress.com/307/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=307&subd=ianboston&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.tfd.co.uk/2009/12/03/incremental-integration-testing-with-sling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b4c84c66ffbbb824b5ecf24362318554?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">ian</media:title>
		</media:content>
	</item>
		<item>
		<title>Smart Meters, I dont get it.</title>
		<link>http://blog.tfd.co.uk/2009/12/03/smart-meters-i-dont-get-it/</link>
		<comments>http://blog.tfd.co.uk/2009/12/03/smart-meters-i-dont-get-it/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 09:45:17 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tfd.co.uk/?p=304</guid>
		<description><![CDATA[In the UK there has just been an announcement that every house will have a smart meter to monitor home energy use. Fantastic, at least if we want to reduce our consumption at home we can. But hold on a minute, rolout is going to take over 10 years, and its going to cost £6.8Bn [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=304&subd=ianboston&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>In the UK there has just been an announcement that every house will have a smart meter to monitor home energy use. Fantastic, at least if we want to reduce our consumption at home we can. But hold on a minute, rolout is going to take over 10 years, and its going to cost £6.8Bn and its only expected to result in a 10% saving in the home. I don&#8217;t get it. Who pays ? Apparently the home owner. £330 to get it installed, saving £26 per annum off the average bill, since most silicon based devices in constant use have a MTBF of &lt; 10 years the cost will never be recovered. I don&#8217;t get it. Ahh its to reduce our Carbon footprint. I wonder how much extra Carbon footprint £6.8Bn of expenditure equates to, all economic activity has an impact (other than planting trees on a commercial scale and using the wood for buildings that last 200 years). If people really want make an impact they need to do less, consume less, and keep things simple. Call me sinical, but the smart meter initiative sounds like a stitch up between government and industry. Industry to create a huge new market for something that didn&#8217;t exist previously, government to find a new way of avoiding building sufficient green energy plants, nuclear included to meet peaks of demand and hence raising taxes. I wonder how many MW of green energy you could provision for £8.6Bn, if it was Nuclear probably 2 according to http://en.wikipedia.org/wiki/Economics_of_new_nuclear_power_plants, if it was wind, its much harder to tell. Thats why I don&#8217;t get it.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ianboston.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ianboston.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ianboston.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ianboston.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ianboston.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ianboston.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ianboston.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ianboston.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ianboston.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ianboston.wordpress.com/304/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=304&subd=ianboston&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.tfd.co.uk/2009/12/03/smart-meters-i-dont-get-it/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b4c84c66ffbbb824b5ecf24362318554?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">ian</media:title>
		</media:content>
	</item>
		<item>
		<title>Sling Documentation Annotations</title>
		<link>http://blog.tfd.co.uk/2009/11/16/sling-documentation-annotations/</link>
		<comments>http://blog.tfd.co.uk/2009/11/16/sling-documentation-annotations/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 00:29:13 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tfd.co.uk/?p=299</guid>
		<description><![CDATA[Its been noticed that documentation that is not in the same version control system as the code, is frequently not maintained. This leads to the users of the interfaces getting increasing fustrated as nothing appears to work, although to fair to the developers the users may well be looking at out of date documentation.
To address [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=299&subd=ianboston&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Its been noticed that documentation that is not in the same version control system as the code, is frequently not maintained. This leads to the users of the interfaces getting increasing fustrated as nothing appears to work, although to fair to the developers the users may well be looking at out of date documentation.</p>
<p>To address this in Sling/Sakai K2 I have just done a first pass at documentation annotations that are discovered at runtime to build a set of documentation for the Service. I say service, because Sling is OSGi based, and every HTTP service end point is implemented as a OSGi service implementing javax.servlet.Servlet. The approach could be used for any service, but I am using it for Sling Servlets.</p>
<p>How to use:</p>
<p>First off, all Servlets that are active in the system are automatically registered with the documentation system, and if any of them don&#8217;t contain documentation there are some gentile reminders to the developer to create the documentation. If there are no documentation annotations present there are some <em>friendly</em> defaults.</p>
<p>add the documentation annotations to you build</p>
<pre>&lt;dependency&gt;
 &lt;groupId&gt;org.sakaiproject.kernel&lt;/groupId&gt;
 &lt;artifactId&gt;org.sakaiproject.kernel.doc&lt;/artifactId&gt;
 &lt;version&gt;0.1-SNAPSHOT&lt;/version&gt;
&lt;/dependency&gt;
</pre>
<p>So, add some annotations to your class:</p>
<pre>@SlingServlet(methods = "GET", paths = "/system/doc")
@ServiceDocumentation(name = "DocumentationServlet", description = "Provides auto documentation of servlets registered with OSGi. Documentation will use the "
 + "service registration properties, or annotations if present."
 + " Requests to this servlet take the form /system/doc?p=&amp;lt;classname&amp;gt where &lt;em&gt;classname&lt;/em&gt;"
 + " is the fully qualified name of the class deployed into the OSGi container. If the class is "
 + "not present a 404 will be retruned, if the class is present, it will be interogated to extract "
 + "documentation from the class. In addition to extracting annotation based documention the servlet will "
 + "display the OSGi service properties. All documentation is assumed to be HTML encoded. If the browser is "
 + "directed to &lt;a href=\"/system/doc\" &gt;/system/doc&lt;/a&gt; a list of all servlets in the system will be displayed ",
 bindings = @ServiceBinding(type = BindingType.PATH, bindings = "/system/doc"),
 methods = {
 @ServiceMethod(name = "GET",
 description = "GETs to this servlet will produce documentation for the class, " +
 "or an index of all servlets.",
 parameters = @ServiceParameter(name = "p",
 description = "The name of the class to display the documentation for")) })

public class DocumentationServlet extends SlingSafeMethodsServlet {
</pre>
<p>And then rebuild and reload your Servlet.</p>
<p>Finally browse to <a href="http://localhost:8080/system/doc">http://localhost:8080/system/doc</a> to check the documentation.</p>
<p>&nbsp;</p>
<p>Obviously because the documentation is in the code and its deployed with the code, provided the developer keeps it current with the code they are editing, the documentation will be correct. So the next $64K is &#8220;How to make developers document what they do ?&#8221;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ianboston.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ianboston.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ianboston.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ianboston.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ianboston.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ianboston.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ianboston.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ianboston.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ianboston.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ianboston.wordpress.com/299/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=299&subd=ianboston&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.tfd.co.uk/2009/11/16/sling-documentation-annotations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b4c84c66ffbbb824b5ecf24362318554?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">ian</media:title>
		</media:content>
	</item>
		<item>
		<title>Note to self: JcrResourceResolver2, selectors and extensions</title>
		<link>http://blog.tfd.co.uk/2009/11/13/note-to-self-jcrresourceresolver2-selectors-and-extensions/</link>
		<comments>http://blog.tfd.co.uk/2009/11/13/note-to-self-jcrresourceresolver2-selectors-and-extensions/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 14:32:13 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tfd.co.uk/?p=295</guid>
		<description><![CDATA[This really is a note to myself, as I have a habit of forgetting this and spending ages debugging.
In JcrResourceResolver2.resolveInternal there is a loop that attempts to resolve a URI by selectively stripping off the segments of the last element using a . as a seperator. When a resource resolves the section of the path [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=295&subd=ianboston&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>This really is a note to myself, as I have a habit of forgetting this and spending ages debugging.</p>
<p>In JcrResourceResolver2.resolveInternal there is a loop that attempts to resolve a URI by selectively stripping off the segments of the last element using a . as a seperator. When a resource resolves the section of the path that resolves is used as the resource path, and the remainder is used as the resource path info. The selectors and extensions are explicitly parsed out of the resource path info ignoring anything that the ResourceProvider might have done. It is therefore vital not to attempt to process a path within a ResourceProvider, as the path used to determine the the resource path and the path info is local to resolveInternal and not influenced by anything that the ResourceProvider might choose to do.</p>
<p>There are one or two special cases. If no resource is found, the last element is processed in its entirety before a NonExistingResource is created and hence anything that gets involved in the ResourceProvider process should be very careful about creating Synthetic resources since unless a convention is followed the resource path cant be determined from the URL alone. Take the example of a virtual resource. Since its virtual and the resolution process is abstract, delayed until after resolution, nothing is known about the ultimate target. The convention we follow is that the last element cant contain &#8216;.&#8217; I think this is going to cause problem and result in moving the whole resolution process inside the resolveInternal call tree, putting any code in a modified Sling JCR Resource Bundle. Unlike previous attempts this will not require patching the code base, just repackaging, unless I can work out a sensible patch that avoids recursive resolution.</p>
<p>Sorry if that was very boring, as I said in the title Note to self.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ianboston.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ianboston.wordpress.com/295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ianboston.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ianboston.wordpress.com/295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ianboston.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ianboston.wordpress.com/295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ianboston.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ianboston.wordpress.com/295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ianboston.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ianboston.wordpress.com/295/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=295&subd=ianboston&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.tfd.co.uk/2009/11/13/note-to-self-jcrresourceresolver2-selectors-and-extensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b4c84c66ffbbb824b5ecf24362318554?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">ian</media:title>
		</media:content>
	</item>
		<item>
		<title>Declarative optional multiple references flaky in OSGi</title>
		<link>http://blog.tfd.co.uk/2009/11/12/declarative-optional-multiple-references-flaky-in-osgi/</link>
		<comments>http://blog.tfd.co.uk/2009/11/12/declarative-optional-multiple-references-flaky-in-osgi/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 16:57:56 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tfd.co.uk/?p=290</guid>
		<description><![CDATA[It looks like binding multiple optional references in OSGi is flaky at least with Felix 1.2.0. Uhh what does that mean?
AFAICT, an annotation like
@Reference(name="virtualResourceType",
 cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
 referenceInterface = VirtualResourceType.class)
with
public void bindVirtualResourceType(VirtualResourceType virtualResourceType) {
    log.info("Bound "+virtualResourceType);
   store.put(virtualResourceType,virtualResourceType);
}
public void unbindVirtualResourceType(VirtualResourceType virtualResourceType) {
   log.info("UnBound "+virtualResourceType);
   store.remove(virtualResourceType);
}
Only binds some of the time on reload, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=290&subd=ianboston&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>It looks like binding multiple optional references in OSGi is flaky at least with Felix 1.2.0. Uhh what does that mean?</p>
<p>AFAICT, an annotation like</p>
<pre>@Reference(name="virtualResourceType",
 cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
 referenceInterface = VirtualResourceType.class)</pre>
<p>with</p>
<pre>public void bindVirtualResourceType(VirtualResourceType virtualResourceType) {
    log.info("Bound "+virtualResourceType);
   store.put(virtualResourceType,virtualResourceType);
}
public void unbindVirtualResourceType(VirtualResourceType virtualResourceType) {
   log.info("UnBound "+virtualResourceType);
   store.remove(virtualResourceType);
}</pre>
<p>Only binds some of the time on reload, but unbind works every time.</p>
<p>I have a feeling that below will work, no idea why ?</p>
<pre>protected void bindVirtualResourceType(ServiceReference reference) {
   VirtualResourceType virtualResourceType =  (VirtualResourceType) this.componentContext.locateService(
       "VirtualResourceType", reference);
   if ( virtualResourceType != null ) {
      LOGGER.info("=====================BOUND VIRTUAL RESOURCE TYPE{}===============================",virtualResourceType.getResourceType());
      virtualResourceTypes.put(virtualResourceType.getResourceType(), virtualResourceType);
   } else {
      LOGGER.info("=====================Faied to find BOUND VIRTUAL RESOURCE TYPE{}===============================",reference);
   }
}
</pre>
<h2>Update:</h2>
<p>The annotation should have been</p>
<p>@Reference(name = &#8220;virtualResourceType&#8221;,<br />
cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,<br />
referenceInterface = VirtualResourceType.class,<br />
<strong>policy = ReferencePolicy.DYNAMIC</strong>)</p>
<p>and then the bind and unbind can be</p>
<pre>protected void bindVirtualResourceType(VirtualResourceType virtualResourceType) {
    virtualResourceTypes.put(virtualResourceType.getResourceType(), virtualResourceType);
}

protected void unbindVirtualResourceType(VirtualResourceType virtualResourceType) {
    virtualResourceTypes.remove(virtualResourceType.getResourceType());
}
</pre>
<p>(I am an idiot!)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ianboston.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ianboston.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ianboston.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ianboston.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ianboston.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ianboston.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ianboston.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ianboston.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ianboston.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ianboston.wordpress.com/290/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=290&subd=ianboston&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.tfd.co.uk/2009/11/12/declarative-optional-multiple-references-flaky-in-osgi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b4c84c66ffbbb824b5ecf24362318554?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">ian</media:title>
		</media:content>
	</item>
		<item>
		<title>Sling Runtime Logging Config</title>
		<link>http://blog.tfd.co.uk/2009/11/10/sling-runtime-logging-config/</link>
		<comments>http://blog.tfd.co.uk/2009/11/10/sling-runtime-logging-config/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 18:10:01 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tfd.co.uk/?p=281</guid>
		<description><![CDATA[One of the most annoying things about bug hunting in open source, is that you can see that the developer left log.debug( statements for you in the code but you have to shutdown, reconfigure logging and restart. In Apache Sling this isnt the case. According to the documentation at http://sling.apache.org/site/logging.html you can configure logging at [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=281&subd=ianboston&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>One of the most annoying things about bug hunting in open source, is that you can see that the developer left log.debug( statements for you in the code but you have to shutdown, reconfigure logging and restart. In Apache Sling this isnt the case. According to the documentation at <a href="http://sling.apache.org/site/logging.html">http://sling.apache.org/site/logging.html</a> you can configure logging at <strong>runtime</strong>. AND you can configure it on a class by class basis. Here are some screenshots of how.</p>
<p>Go to the admin console, select the configuration tab.</p>
<p><img class="alignnone size-full wp-image-284" title="Picture 6" src="http://ianboston.files.wordpress.com/2009/11/picture-6.png?w=510&#038;h=151" alt="Picture 6" width="510" height="151" /></p>
<p>Select from the Configuration Factories drop down the logging.config Factory,</p>
<p><img class="alignnone size-medium wp-image-283" title="Picture 7" src="http://ianboston.files.wordpress.com/2009/11/picture-7.png?w=300&#038;h=127" alt="Picture 7" width="300" height="127" /></p>
<p>Set the properties including the package or class that you want this logging config to apply to, and save.</p>
<p><img class="alignnone size-full wp-image-282" title="Picture 8" src="http://ianboston.files.wordpress.com/2009/11/picture-8.png?w=510&#038;h=268" alt="Picture 8" width="510" height="268" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>As I mentioned, you can do all of this on a running instance, no need to shutdown.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ianboston.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ianboston.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ianboston.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ianboston.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ianboston.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ianboston.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ianboston.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ianboston.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ianboston.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ianboston.wordpress.com/281/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tfd.co.uk&blog=6575768&post=281&subd=ianboston&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.tfd.co.uk/2009/11/10/sling-runtime-logging-config/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b4c84c66ffbbb824b5ecf24362318554?s=96&#38;d=&#38;r=G" medium="image">
			<media:title type="html">ian</media:title>
		</media:content>

		<media:content url="http://ianboston.files.wordpress.com/2009/11/picture-6.png" medium="image">
			<media:title type="html">Picture 6</media:title>
		</media:content>

		<media:content url="http://ianboston.files.wordpress.com/2009/11/picture-7.png?w=300" medium="image">
			<media:title type="html">Picture 7</media:title>
		</media:content>

		<media:content url="http://ianboston.files.wordpress.com/2009/11/picture-8.png" medium="image">
			<media:title type="html">Picture 8</media:title>
		</media:content>
	</item>
	</channel>
</rss>