<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns="http://purl.org/rss/1.0/">
  <channel rdf:about="http://times.usefulinc.com/">
    <title>Edd Dumbill's Weblog: Behind the Times</title>
    <description>Thoughts and comment from Edd Dumbill, technology writer and free software hacker.</description>
    <link>http://times.usefulinc.com/</link>
    <dc:date>2008-11-21T14:22:20Z</dc:date>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://times.usefulinc.com/2008/11/21-learning-rails"/>
        <rdf:li rdf:resource="http://times.usefulinc.com/2008/07/06-gatekeepers"/>
        <rdf:li rdf:resource="http://times.usefulinc.com/2008/07/03-identica"/>
        <rdf:li rdf:resource="http://times.usefulinc.com/2008/07/01-oscon-sked"/>
        <rdf:li rdf:resource="http://times.usefulinc.com/2008/06/26-oscon"/>
        <rdf:li rdf:resource="http://times.usefulinc.com/2008/06/24-uf-rdfa"/>
        <rdf:li rdf:resource="http://times.usefulinc.com/2008/06/23-san"/>
        <rdf:li rdf:resource="http://times.usefulinc.com/2008/06/20-secure-ldap"/>
        <rdf:li rdf:resource="http://times.usefulinc.com/2008/06/18-cert-maint"/>
        <rdf:li rdf:resource="http://times.usefulinc.com/2008/06/17-semweb"/>
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="http://times.usefulinc.com/2008/11/21-learning-rails">
    <title>Learning Rails</title>
    <link>http://times.usefulinc.com/2008/11/21-learning-rails</link>
    <description>I'm pleased to announce the release of Learning Rails, and its companion web site, Excursions on Rails</description>
    <dc:subject>rails</dc:subject>
    <dc:subject>books</dc:subject>
    <dc:creator>Edd Dumbill</dc:creator>
    <dc:date>2008-11-21T14:04:42Z</dc:date>
    <foaf:maker>
      <foaf:Person>
        <foaf:mbox rdf:resource="mailto:edd@usefulinc.com"/>
      </foaf:Person>
    </foaf:maker>
    <content:encoded>&lt;p&gt;I'm pleased to announce the release of &lt;a href="http://oreilly.com/catalog/9780596518776/"&gt;Learning Rails&lt;/a&gt;, and its companion web site, &lt;a href="http://excursionsonrails.com/"&gt;Excursions on Rails&lt;/a&gt;.&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;a href="http://oreilly.com/catalog/9780596518776/"&gt;&lt;img src="http://times.usefulinc.com/asset/name/46/9780596518776_cat.gif" alt="Learning Rails cover" width="180" height="236" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Co-authored by &lt;a href="http://simonstl.com/"&gt;Simon St.Laurent&lt;/a&gt; and myself, &lt;span style="font-style: italic;"&gt;Learning Rails&lt;/span&gt; is written
especially for web developers, and starts out from web design, heading inwards to the heart of a Rails app.&lt;/p&gt;
&lt;p&gt;Where most Rails books jump right in with data structures, we take a web application's interface as our starting point. If you know HTML, CSS and fancy heading deeper, this is the book for you.&lt;/p&gt;
&lt;p&gt;You can buy &lt;span style="font-style: italic;"&gt;Learning Rails&lt;/span&gt;&amp;nbsp;from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://oreilly.com/catalog/9780596518776/"&gt;O'Reilly&lt;/a&gt; (US or UK)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.powells.com/biblio/62-9780596518776-0"&gt;Powell's Books&lt;/a&gt; (US)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/dp/0596518773/"&gt;Amazon&lt;/a&gt; (US)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.co.uk/dp/0596518773/"&gt;Amazon&lt;/a&gt; (UK)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://search.barnesandnoble.com/Learning-Rails/e/9780596518776/"&gt;Barnes &amp;amp; Noble&lt;/a&gt; (US)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.borders.com/online/store/SearchResults?title=Learning+Rails"&gt;Borders&lt;/a&gt; (US)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/11/21-learning-rails#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;</content:encoded>
  </item>
  <item rdf:about="http://times.usefulinc.com/2008/07/06-gatekeepers">
    <title>Tolling the bell for the gatekeepers</title>
    <link>http://times.usefulinc.com/2008/07/06-gatekeepers</link>
    <description>The current gatekeepers of the web and tech industry are publications such as TechCrunch and TechMeme. I barely ever read these, and here's why.</description>
    <dc:subject>community</dc:subject>
    <dc:subject>news</dc:subject>
    <dc:creator>Edd Dumbill</dc:creator>
    <dc:date>2008-07-06T15:59:23Z</dc:date>
    <foaf:maker>
      <foaf:Person>
        <foaf:mbox rdf:resource="mailto:edd@usefulinc.com"/>
      </foaf:Person>
    </foaf:maker>
    <content:encoded>&lt;p&gt;The current gatekeepers of the web and computing industry include publications such as&amp;nbsp;&lt;a href="http://www.techcrunch.com/"&gt;TechCrunch&lt;/a&gt; and &lt;a href="http://www.techmeme.com/"&gt;TechMeme&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I barely ever read these, and here's why. They only tell me things about the big boys, mostly when money is involved. It hardly matters to me who VCs are investing in, what advertising strategy Facebook is pursuing, or the fact yet another social network for cats has been launched.&lt;/p&gt;
&lt;p&gt;That's not what I'm in technology for: I want to hear about genuine advance, discovery, code I can read, services I can use, new applications of research. And I want to share with and learn from others in the same ecosphere.&lt;/p&gt;
&lt;p&gt;Unfortunately, the gatekeepers can have a stifling, negative effect on the industry and community. Our thinking has become dull, and our attitude one of sniping. (I have a deep urge to rant about various small-minded inaccurate stories I've seen of late. But if you're getting my point, I needn't bother. And if you're not, well, it won't help)&lt;/p&gt;
&lt;p&gt;The competition for cash &amp;mdash; directly connected to TechCrunch exposure &amp;mdash; is odious. I'm not prepared to even start doing the self-prostitution it takes to get into that echo chamber of A-list tech people. By far and away the most interesting and inspiring people I've encountered on the web recently haven't registered at all on the valley meme-o-meter.&lt;/p&gt;
&lt;h3&gt;It's time for another cycle to start&lt;/h3&gt;
&lt;p&gt;These things do come in cycles, of course. TC and TechMeme are themselves usurpers of a previous generation of media gatekeepers, and they in turn will be overtaken.&lt;/p&gt;
&lt;p&gt;In the space between the installation of gatekeepers it's a great time for innovation, rich discussions, and changing people's minds. When I read tech news, I want to be inspired to build, create and cheer about it.&lt;/p&gt;
&lt;p&gt;There was a children's TV programme while I was growing up called "&lt;a href="http://www.bbc.co.uk/cult/classic/titles/whydontyou.shtml"&gt;Why don't you?&lt;/a&gt;", entitled in full "Why don't you just switch off your television set and go out and do something less boring instead?" I want to read stuff like that.&lt;/p&gt;
&lt;p&gt;Some of the places I've been finding worthwhile news recently include:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.friendfeed.com/"&gt;FriendFeed&lt;/a&gt; &amp;mdash; essentially a "lifestream aggregator", it's the commenting feature in FriendFeed that has allowed it to become a useful means of gathering news and information. It systematizes the way I've discovered tech news for the last ten years, through a network of individuals whom you are interested in. Additionally FriendFeed&amp;nbsp;presents the opportunity for engaging debate that feels a lot more alive than blog comments (I wonder if this isn't due in part to the neutrality of the venue.)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tech.newsjunk.com/"&gt;TechJunk&lt;/a&gt;&amp;nbsp;&amp;mdash; a new tech news aggregator created by Dave Winer, with the intent of enabling discovery of smaller interesting technical news items, not just what the behemoths and well-connected are doing.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twitter.com/timoreilly"&gt;@timoreilly on Twitter&lt;/a&gt; &amp;mdash; Tim's always been a discoverer and amplifier of important and interesting trends, and what he does on Twitter is a microcosm of what he does for his day job.&lt;/p&gt;
&lt;h3&gt;It's about the people&lt;/h3&gt;
&lt;p&gt;One of the things all those sources I just mentioned have in common is people. The kind of people who &amp;mdash; whether you agree with them or not &amp;mdash; don't get bound up by gatekeepers.&lt;/p&gt;
&lt;p&gt;I've always believed that the best publications are those with the best editors. I've never cared for the "daily me" style of personalized news, because I want to learn things outside of my own scope, and neither for the &lt;a href="http://www.digg.com/"&gt;Digg&lt;/a&gt; style of populism, because all too often it's folly, not wisdom, one finds in crowds.&lt;/p&gt;
&lt;p&gt;In the spirit of this, I'd love to hear where others go for incisive, non-mainstream, news. Let me know in the comments.&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/07/06-gatekeepers#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;</content:encoded>
  </item>
  <item rdf:about="http://times.usefulinc.com/2008/07/03-identica">
    <title>Why Identi.ca is important</title>
    <link>http://times.usefulinc.com/2008/07/03-identica</link>
    <description>Identi.ca's a new microblogging service. It rocks, and here's why</description>
    <dc:subject>community</dc:subject>
    <dc:subject>blogging</dc:subject>
    <dc:subject>xmpp</dc:subject>
    <dc:creator>Edd Dumbill</dc:creator>
    <dc:date>2008-07-03T10:49:26Z</dc:date>
    <foaf:maker>
      <foaf:Person>
        <foaf:mbox rdf:resource="mailto:edd@usefulinc.com"/>
      </foaf:Person>
    </foaf:maker>
    <content:encoded>&lt;p&gt;Over the last 24 hours, hordes of Twitter-refugees have been signing up with the microblogging service &lt;a href="http://identi.ca/"&gt;Identi.ca&lt;/a&gt;. Fed up with the restricted and unpredictable service from Twitter, over the last week or two people have been jumping this way and that: Pownce, Plurk, FriendFeed, and now Identi.ca. &lt;a href="http://identi.ca/edd"&gt;Here's my Identi.ca stream&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let's get something straight up-front. Identi.ca's in its early stages. At version 0.4.1 it's not yet added all the features that Twitter has now broken.&lt;/p&gt;
&lt;p&gt;A lot of people are jumping on Identi.ca and going away again, muttering "it's not got X, I'm off back to Twitter." True, but it's not as a Twitter-replacement today that Identi.ca is important.&lt;/p&gt;
&lt;p&gt;Here's why I think Identi.ca counts for more than just being a Twitter clone.&lt;/p&gt;
&lt;h3&gt;It's open source&lt;/h3&gt;
&lt;p&gt;Anybody can help fix it. Anybody can set up their own Laconica (the name of the underlying software.) I've seen a clutch of posts from developers all offering their advice on fixing Twitter. With Identi.ca they can just get on and help.&lt;/p&gt;
&lt;h3&gt;It's open data&lt;/h3&gt;
&lt;p&gt;When you sign up for Identi.ca you agree to license your contributions to it under the Creative Commons 3.0&amp;nbsp;&lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Attribution&lt;/a&gt; license. You agree to let others share and remix your output, in return for giving attribution.&lt;/p&gt;
&lt;p&gt;The open data ethos is baked into the codebase already. All output is available in RSS, and you can take your friends with you thanks to the &lt;a href="http://www.foaf-project.org/"&gt;FOAF&lt;/a&gt; exports available.&lt;/p&gt;
&lt;p&gt;Twitter has millions of VC funding. Those folks will want a return. What does Twitter have to make money from? You and your content. Identi.ca gives you control in that situation.&lt;/p&gt;
&lt;h3&gt;It federates&lt;/h3&gt;
&lt;p&gt;Federation is one of the most enigmatic and exciting things about Identi.ca. I can set up my own server running the Laconica software, and still subscribe to people with accounts on Identi.ca's server.&lt;/p&gt;
&lt;p&gt;This is how the XMPP instant messaging protocol works, and it's no surprise to find that XMPP is fundamental to Identi.ca's operation. Identi.ca is to Twitter as XMPP is to AIM. This may finally be the way XMPP breaks out into popular use for developers.&lt;/p&gt;
&lt;h3&gt;You've nothing to lose&lt;/h3&gt;
&lt;p&gt;Because of the commitment to open data, you've nothing to lose by giving Identi.ca a little spin. So, head over and make your own account. I added my RSS output to my &lt;a href="http://friendfeed.com/edumbill"&gt;Friendfeed page&lt;/a&gt;, along with my other output. Chris Blizzard has already added Identi.ca into &lt;a href="http://whoisi.com/p/477"&gt;whoisi&lt;/a&gt;. The little ripples you make in Identi.ca today can still waft out into your personal publishing pool.&lt;/p&gt;
&lt;p&gt;And please, don't waste time complaining about "it hasn't got X". In 12 hours I've already seen Evan Prodromou, its developer, add features and fix bugs. He's got an &lt;a href="http://laconi.ca/PITS/"&gt;open bug tracker&lt;/a&gt;, and listens to &lt;a href="http://friendfeed.com/rooms/identica"&gt;feedback&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Right now Evan seems to have his hands full dealing with the thousands of new arrivals, and to his credit, Identi.ca's still working fine.&lt;/p&gt;
&lt;p&gt;Follow me here: &lt;a href="http://identi.ca/edd"&gt;identi.ca/edd&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/07/03-identica#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;</content:encoded>
  </item>
  <item rdf:about="http://times.usefulinc.com/2008/07/01-oscon-sked">
    <title>OSCON: what are your must-see talks?</title>
    <link>http://times.usefulinc.com/2008/07/01-oscon-sked</link>
    <description>We've switched on personal schedule sharing on the OSCON web site.

</description>
    <dc:subject>linux</dc:subject>
    <dc:subject>expectnation</dc:subject>
    <dc:subject>conferences</dc:subject>
    <dc:subject>oscon</dc:subject>
    <dc:creator>Edd Dumbill</dc:creator>
    <dc:date>2008-07-01T15:58:59Z</dc:date>
    <foaf:maker>
      <foaf:Person>
        <foaf:mbox rdf:resource="mailto:edd@usefulinc.com"/>
      </foaf:Person>
    </foaf:maker>
    <content:encoded>&lt;p&gt;We've switched on personal schedule sharing on the &lt;a href="http://en.oreilly.com/oscon2008/"&gt;OSCON web site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When you've put together your desired schedule by starring sessions of interest, just hand out the "public view" link to let others know what you want to see.&lt;/p&gt;
&lt;p&gt;Here's &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/share/71df5978de24b9ae2289b47712bf042c"&gt;my personal schedule&lt;/a&gt;. In it you'll find all the &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/topic/Keynote"&gt;plenary sessions&lt;/a&gt; (as co-chair I simply cannot miss these, and neither should you, however late the party!)&lt;/p&gt;
&lt;p&gt;Also there's a fair smattering of my pet topics such as open web technologies, virtualization and dynamic languages, and a bunch of things I want to hear more about: &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/3098"&gt;Prophet&lt;/a&gt;, &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2491"&gt;female participation in open source&lt;/a&gt;, &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2383"&gt;Clutter&lt;/a&gt;, and of course &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/3373"&gt;Erlang&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'm fascinated to find out what other people have got planned, so please publish your schedules too and let's compare notes.&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/07/01-oscon-sked#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;</content:encoded>
  </item>
  <item rdf:about="http://times.usefulinc.com/2008/06/26-oscon">
    <title>My OSCON 2008 picks</title>
    <link>http://times.usefulinc.com/2008/06/26-oscon</link>
    <description>Read on to see what I want to see, and get 15% off OSCON registration</description>
    <dc:subject>linux</dc:subject>
    <dc:subject>oreilly</dc:subject>
    <dc:subject>conferences</dc:subject>
    <dc:subject>oscon</dc:subject>
    <dc:creator>Edd Dumbill</dc:creator>
    <dc:date>2008-06-26T11:49:56Z</dc:date>
    <foaf:maker>
      <foaf:Person>
        <foaf:mbox rdf:resource="mailto:edd@usefulinc.com"/>
      </foaf:Person>
    </foaf:maker>
    <content:encoded>&lt;p&gt;In just under a month, the &lt;a href="http://en.oreilly.com/oscon2008"&gt;tenth O'Reilly Open Source Convention&lt;/a&gt; will get underway in Portland.&lt;/p&gt;
&lt;p&gt;Over ten years OSCON has developed&amp;mdash;along with the world of open source&amp;mdash;into an intense, exciting, informative, diverse and exhausting event. This year I've the privilege of being co-chair, along with Alison Randall. We've packed so much into the show, it's a difficult job even being able to comprehend it as a whole!&lt;/p&gt;
&lt;p&gt;Fortunately, there's a way to start making sense of things before you arrive there, thanks to the personal scheduler. Just &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/grid"&gt;mark the sessions&lt;/a&gt; you want to go to with a star, and you'll be able to plan out your time in advance.&lt;/p&gt;
&lt;p&gt;I wanted to list a few sessions from my own personal schedule that particularly piqued my interest. Then at the bottom of this post I'll share a discount code which can give readers of this blog 15% off OSCON registration. There's bribery for you.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/3373"&gt;Practical Erlang Programming&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Largely thanks to XMPP enthusiasts and ejabberd, I've been hearing increasing amounts about Erlang, and I'd like to know enough about it to be dangerous. This three hour tutorial looks just the ticket.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2494"&gt;Open Source Virtualization Hacks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is one of several sessions we have on &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2785"&gt;virtualization&lt;/a&gt;, something I'm particularly pleased about. Virtualization may be "done" at the kernel level, but I think we're only just starting out on its application. This session is by my friend and sometime co-author, Niel Bornstein, who works for Novell on just this sort of thing.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2607"&gt;Using Puppet: Real World Configuration Management&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Puppet is the piece of open source software that is most exciting to me at the moment. As a developer, it enables me to manage my machines like I'd manage my code libraries. A must-see if you've not used Puppet yet.&lt;/p&gt;
&lt;p&gt;These are just 3 out of the 300 or so confirmed sessions. Don't forget there's a large number of &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/topic/Event"&gt;events&lt;/a&gt; and parties happening around OSCON too.&lt;/p&gt;
&lt;p&gt;And finally, the discount code. Use the code &lt;span style="font-weight: bold;"&gt;os08pgm&lt;/span&gt; when you're &lt;a href="https://en.oreilly.com/oscon2008/public/register"&gt;registering&lt;/a&gt;, and you'll get 15% off the ticket price.&lt;/p&gt;
&lt;p&gt;See you in Portland!&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/26-oscon#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;</content:encoded>
  </item>
  <item rdf:about="http://times.usefulinc.com/2008/06/24-uf-rdfa">
    <title>The BBC, microformats, RDFa and Resig</title>
    <link>http://times.usefulinc.com/2008/06/24-uf-rdfa</link>
    <description>Alas, a bit disappointed to pick up on the continuation of the bogus microformats vs RDF holy war</description>
    <dc:subject>semweb</dc:subject>
    <dc:subject>microformats</dc:subject>
    <dc:subject>community</dc:subject>
    <dc:creator>Edd Dumbill</dc:creator>
    <dc:date>2008-06-24T08:31:52Z</dc:date>
    <foaf:maker>
      <foaf:Person>
        <foaf:mbox rdf:resource="mailto:edd@usefulinc.com"/>
      </foaf:Person>
    </foaf:maker>
    <content:encoded>&lt;p&gt;The BBC have &lt;a href="http://www.bbc.co.uk/blogs/radiolabs/2008/06/removing_microformats_from_bbc.shtml"&gt;recently opted&lt;/a&gt;&amp;nbsp;to remove hCalendar &lt;a href="http://www.microformats.org/"&gt;microformats&lt;/a&gt; from their Programmes site, due to problems with the use of the &lt;span style="font-style: italic;"&gt;abbr&lt;/span&gt; tag clashing with accessibility tools. One of the potential alternative solutions they're discussing is &lt;a href="http://www.w3.org/TR/xhtml-rdfa-primer/"&gt;RDFa&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The excellent John Resig, brain behind jQuery and a million other wonderful Javascript projects, &lt;a href="http://ejohn.org/blog/bbc-removing-microformat-support/"&gt;comments on this development in his blog&lt;/a&gt;. Take the time to read his post now, it's short.&lt;/p&gt;
&lt;p&gt;Resig is someone whom I admire greatly. In particular the quality of his work and thinking, and his dedication to tidying up hairy technologies like JavaScript and Mozilla APIs into developer-accessible frameworks (jQuery, FUEL).&lt;/p&gt;
&lt;p&gt;So I was a bit disappointed, and frankly weary, to pick up on the continuation of the bogus microformats vs RDF holy war in his post. I wrote the substance of his post in the comments on his blog, but will repost here for completeness.&lt;/p&gt;
&lt;p&gt;The BBC criticism of microformats' use of the &lt;span style="font-style: italic;"&gt;abbr&lt;/span&gt; tag is a valid one. The microformats' community don't need to "step up and prevent attrition" as Resig writes &amp;mdash; as if the enemy was advancing over the front &amp;mdash; they need to &lt;span style="font-weight: bold;"&gt;fix a bug&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Resig reads the RDFa primer and comments that it is&lt;/p&gt;
&lt;blockquote&gt;"... obvious that RDFa still has a long ways to go before any sort of practical adoption by developers and designers. Riddled with advanced, or just plain confusing, terminology (XML namespaces, Dublin Core, semantic web, and not to mention the addition of many new attributes - like typeof, about, and property) it appears to be solidly entrenched in the ways that Microformats were able to shake themselves free of, allowing them to achieve widespread adoption."&lt;/blockquote&gt;
&lt;p&gt;Resig moves too quickly to dismiss RDFa. In a similar way I know many people who on encountering the HTML5 specs strongly espoused by Mozilla have the same impression of confusion and complexity. It doesn't necessarily make the work less valid, it's just a reflection on the document.&lt;/p&gt;
&lt;p&gt;One of the wonderful things Resig has done with JavaScript is take time to love it and figure out its corners. Take some of the "confusing" and "advanced" things away and you're not able to achieve the same things. What he's done in jQuery is add a layer of elegance, predictability and accessibility.&lt;/p&gt;
&lt;p&gt;I for one would love to see what Resig would do with semantic markup. jQuery really encourages and enables good markup practices, so there's a lot of synergy with his current style.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I'll happily concede that RDF people rarely do themselves any favours in the departments of over-engineering or academic self-satisfaction. I also think microformats have natural limitations. There's a place in between, and it's where people John Resig do their best work.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/24-uf-rdfa#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;</content:encoded>
  </item>
  <item rdf:about="http://times.usefulinc.com/2008/06/23-san">
    <title>Social area networking please</title>
    <link>http://times.usefulinc.com/2008/06/23-san</link>
    <description> I want to use existing Bonjour-aware tools among an ad-hoc group of people</description>
    <dc:subject>programming</dc:subject>
    <dc:subject>agile</dc:subject>
    <dc:subject>lazyweb</dc:subject>
    <dc:creator>Edd Dumbill</dc:creator>
    <dc:date>2008-06-23T11:30:04Z</dc:date>
    <foaf:maker>
      <foaf:Person>
        <foaf:mbox rdf:resource="mailto:edd@usefulinc.com"/>
      </foaf:Person>
    </foaf:maker>
    <content:encoded>&lt;p&gt;Tom Morris mentioned the &lt;a href="http://drnicwilliams.com/2008/06/18/what-is-gitjour-gemjour-starjour/"&gt;gitjour&lt;/a&gt; project on the semantic web IRC channel today and it set me thinking.&lt;/p&gt;
&lt;p&gt;Gitjour enables collaboration on a local network by tying together Bonjour (aka Zeroconf) and the git distributed source control system. It lets a developer publish the source direct from their own machine, without having to set up a public mirror. The advantages are great for camp-style hackathons.&lt;/p&gt;
&lt;p&gt;However, I rarely get to such hurrahs and if I do, prefer to spend time talking to others and mining their brains. What I do have though is an extended, continuous "camp" that exists among a subset of my IM contacts, Twitter friends, and so on.&lt;/p&gt;
&lt;p&gt;What I want is a version of Bonjour that works over a virtual network established from an ad-hoc list of friends and groups selectable from a social networking tool.&lt;/p&gt;
&lt;p&gt;I know, this is starting to sound like Groove or any other number of peer-based collaborative tools. The point is I don't want to join any walled garden and get "monetized", I want to use existing Bonjour-aware tools, just among an ad-hoc group of people.&lt;/p&gt;
&lt;p&gt;The hard bit as ever is firewall traversal, but this has been solved more than a few times now. It seems we've got the tools, we just need some enterprising developer to glue it all together.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/23-san#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;</content:encoded>
  </item>
  <item rdf:about="http://times.usefulinc.com/2008/06/20-secure-ldap">
    <title>Secure LDAP replication</title>
    <link>http://times.usefulinc.com/2008/06/20-secure-ldap</link>
    <description>LDAP's hard. Security's hard. Replication's hard. Here's how it went for me.</description>
    <dc:subject>linux</dc:subject>
    <dc:subject>sysadmin</dc:subject>
    <dc:subject>security</dc:subject>
    <dc:creator>Edd Dumbill</dc:creator>
    <dc:date>2008-06-20T15:11:25Z</dc:date>
    <foaf:maker>
      <foaf:Person>
        <foaf:mbox rdf:resource="mailto:edd@usefulinc.com"/>
      </foaf:Person>
    </foaf:maker>
    <content:encoded>&lt;p&gt;Ever the sucker for punishment, I decided to pick three difficult things and stick them all together: LDAP, SSL and replication. Here's how to make it go on Debian and Ubuntu.&lt;/p&gt;
&lt;h3&gt;The problem&lt;/h3&gt;
&lt;p&gt;You want LDAP replication to happen over the internet, and you want it to happen securely.&lt;/p&gt;
&lt;h3&gt;The caveat&lt;/h3&gt;
&lt;p&gt;I'm not going to tell you how to set up your LDAP from scratch here: I'm assuming you've reached a solution you're happy with and want to replicate it.&lt;/p&gt;
&lt;h3&gt;The solution&lt;/h3&gt;
&lt;p&gt;We're going to set up a replicating slave LDAP server, which communicates with the master
over the internet via an SSL-protected connection.&lt;/p&gt;
&lt;h4&gt;Enabling replication&lt;/h4&gt;
&lt;p&gt;First up, the master LDAP server needs to be configured to permit replication.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The key lines to add to your &lt;span style="font-style: italic;"&gt;slapd.conf&lt;/span&gt; include:&lt;/p&gt;
&lt;pre&gt;moduleload syncprov
index entryCSN,entryUUID eq
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 200&lt;/pre&gt;
&lt;p&gt;These load up the synchronization module, add indices which make sync go faster, and enable sync. &lt;a href="http://www.openldap.org/doc/admin24/slapdconfig.html#syncrepl"&gt;For more detail see the OpenLDAP site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Next you need to add a replicator user to your LDAP database, give your replicator user access to passwords as well as general read access. To create the replicator user, I made this simple LDIF file and fed it to &lt;span style="font-style: italic;"&gt;ldapadd&lt;/span&gt;.&lt;/p&gt;
&lt;pre&gt;dn: cn=replicator,dc=mydomain,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: replicator
description: LDAP replicator
userPassword: TOPSEKRIT&lt;/pre&gt;
&lt;p&gt;Once this user is in your LDAP database, you should give it read access to passwords (I assume you've already given read access to authenticated users.) I have this in my &lt;span style="font-style: italic;"&gt;slapd.conf&lt;/span&gt;:&lt;/p&gt;
&lt;pre&gt;access to attrs=userPassword,sambaNTPassword,sambaLMPassword
...
   by dn="cn=replicator,dc=mydomain,dc=com" read&lt;/pre&gt;
&lt;p&gt;To check that this works, try using &lt;span style="font-style: italic;"&gt;ldapsearch&lt;/span&gt; to check that the passwords are returned:&lt;/p&gt;
&lt;pre&gt;ldapsearch -x -D cn=replicator,dc=mydomain,dc=com \
  -W | grep -i password&lt;/pre&gt;
&lt;p&gt;Enter the replicator password when prompted, and you should see the encrypted passwords from your LDAP database.&lt;/p&gt;
&lt;h4&gt;Securing access&lt;/h4&gt;
&lt;p&gt;Now you've got replication enabled on the master, you will want to ensure it is available on the internet only via TLS or SSL. Here's what I added to &lt;span style="font-style: italic;"&gt;slapd.conf&lt;/span&gt; to enable this:&lt;/p&gt;
&lt;pre&gt;TLSCertificateFile      /etc/ssl/certs/ldapserver_crt.pem
TLSCertificateKeyFile   /etc/ssl/private/ldapserver_key.pem
TLSCACertificateFile    /etc/ssl/certs/myCA.pem
TLSVerifyClient         demand&lt;/pre&gt;
&lt;p&gt;As you will guess from the configuration, the first two lines set the SSL key and certificate the master uses (see "A little twist" below for an important note on key permissions.) The third line tells &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt; where to find my site-local certificate authority (CA), and the fourth line says slapd must require any connecting client to have a valid SSL certificate signed by the site-local CA. This is important, as it provides a second layer of access control: a replicating client must connect using a certificate you signed, plus the replicator password.&lt;/p&gt;
&lt;p&gt;Before this enables TLS access, we must tell slapd which network interfaces to listen on. To do this, edit the &lt;span style="font-style: italic;"&gt;SLAPD_SERVICES&lt;/span&gt; variable in &lt;span style="font-style: italic;"&gt;/etc/default/slapd&lt;/span&gt;. Here's my configuration:&lt;/p&gt;
&lt;pre&gt;SLAPD_SERVICES="ldap://127.0.0.1/ ldap://192.168.0.1/ ldaps:///"&lt;/pre&gt;
&lt;p&gt;This enables regular LDAP on the loopback and intranet network interfaces, and LDAP/SSL on all interfaces, including the public internet.&lt;/p&gt;
&lt;p&gt;So, with &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt; restarted we are at this situation: connections are now possible from the internet, as long as they are made over SSL with a certificate signed by our site-local CA.&lt;/p&gt;
&lt;p&gt;(In fact, you can make much finer-grained access restrictions in your configuration than I have done. Using LDAPS rather than TLS over regular LDAP is a rather broad precaution.&amp;nbsp;&lt;a href="http://www.openldap.org/doc/admin24/access-control.html"&gt;As explained on the OpenLDAP site&lt;/a&gt;, the &lt;span style="font-style: italic;"&gt;ssf=&lt;/span&gt; parameter can be used to require a certain level of secure connectivity on a per-user or client basis.)&lt;/p&gt;
&lt;h4&gt;Setting up the replicating server&lt;br /&gt;&lt;/h4&gt;
&lt;p&gt;Your slave server should have the same configuration as the master, except you can leave out the bits enabling replication.&lt;/p&gt;
&lt;p&gt;Firstly, you'll need add to &lt;span style="font-style: italic;"&gt;slapd.conf&lt;/span&gt; the replication configuration:&lt;/p&gt;
&lt;pre&gt;syncrepl rid=123
        provider=ldaps://ldapmaster.mydomain.com/
        type=refreshAndPersist
        searchbase="dc=mydomain,dc=com"
        filter="(objectClass=*)"
        scope=sub
        attrs="*"
        schemachecking=off
        bindmethod=simple
        binddn="cn=replicator,dc=mydomain,dc=com"
        credentials=TOPSEKRIT&lt;/pre&gt;
&lt;p&gt;Most of this I took as boilerplate from the OpenLDAP documentation. Items to note include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;span style="font-style: italic;"&gt;rid&lt;/span&gt;&amp;nbsp;is a unique 3-digit integer per slave, used to maintain sync state&lt;/li&gt;
&lt;li&gt;the &lt;span style="font-style: italic;"&gt;credentials&lt;/span&gt;&amp;nbsp;should be the password you gave the replicator user&lt;/li&gt;
&lt;li&gt;the &lt;span style="font-style: italic;"&gt;type&lt;/span&gt;&amp;nbsp;can either be &lt;span style="font-style: italic;"&gt;refreshAndPersist&lt;/span&gt;, or &lt;span style="font-style: italic;"&gt;refresh&lt;/span&gt;. The latter institutes a simple polling replication, whose interval you can vary with the &lt;span style="font-style: italic;"&gt;interval&lt;/span&gt;&amp;nbsp;parameter. In our case, we do a poll and then keep the replication search open: our client gets notified immediately when there's any new data matching the replicating search.&lt;/li&gt;
&lt;li&gt;the &lt;span style="font-style: italic;"&gt;searchbase&lt;/span&gt;&amp;nbsp;is an LDAP search matching the data we wish to be replicated.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And here's the &lt;span style="font-style: italic;"&gt;/etc/default/slapd&lt;/span&gt; configuration:&lt;/p&gt;
&lt;pre&gt;SLAPD_SERVICES="ldap://127.0.0.1/"&lt;/pre&gt;
&lt;p&gt;The slave &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt;&amp;nbsp;exists only in this case to serve the local machine.&lt;/p&gt;
&lt;p&gt;Finally, there's the tricky bit! You need to configure &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt; to connect to the master server using a certificate. I'll assume you've created and signed a key and certificate pair for your slave server (see my post &lt;a href="http://times.usefulinc.com/2008/06/18-cert-maint"&gt;Low-tech SSL certificate maintenance&lt;/a&gt; for more on this.)&lt;/p&gt;
&lt;p&gt;Awkwardly, the TLS configuration in &lt;span style="font-style: italic;"&gt;slapd.conf&lt;/span&gt;&amp;nbsp;is for the server only. Replication works as a client, and thus needs separate configuration. Furthermore, you cannot configure this globally on your machine, as the SSL certificate is a per-user only parameter (see &lt;span style="font-style: italic;"&gt;man ldap.conf&lt;/span&gt;&amp;nbsp;for more information on this.)&lt;/p&gt;
&lt;p&gt;Instead, we must set it in &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt;'s environment. Add these two lines to the end of &lt;span style="font-style: italic;"&gt;/etc/default/slapd&lt;/span&gt;:&lt;/p&gt;
&lt;pre&gt;export LDAPTLS_CERT=/etc/ssl/certs/slapd.crt
export LDAPTLS_KEY=/etc/ssl/private/slapd.key&lt;/pre&gt;
&lt;p&gt;This file is sourced as a shell script by slapd's init script. Amend the path to your certificate and keys as required. Use &lt;span style="font-style: italic;"&gt;/etc/init.d/slapd restart&lt;/span&gt; and you should be good to go.&lt;/p&gt;
&lt;p&gt;Finally, we want the slave server to be certain it's talking to the real master. So we also configure client connections to verify the SSL certificate of the peer, in &lt;span style="font-style: italic;"&gt;ldap.conf&lt;/span&gt;&amp;nbsp;again:&lt;/p&gt;
&lt;pre&gt;TLS_CACERT      /etc/ssl/certs/myCA.crt
TLS_REQCERT     demand&lt;/pre&gt;
&lt;h4&gt;A little twist&lt;/h4&gt;
&lt;p&gt;One gotcha to notice with both client and server is that &lt;span style="font-style: italic;"&gt;slapd&lt;/span&gt;&amp;nbsp;runs as the &lt;span style="font-style: italic;"&gt;openldap&lt;/span&gt;&amp;nbsp;user by default on Debian. Also by default SSL keys are readable only by the &lt;span style="font-style: italic;"&gt;ssl-cert&lt;/span&gt;&amp;nbsp;group. You'll need add the &lt;span style="font-style: italic;"&gt;openldap&lt;/span&gt;&amp;nbsp;user to this group, otherwise it won't be able to access &lt;span style="font-style: italic;"&gt;/etc/ssl/private&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Related articles on this site:&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://times.usefulinc.com/2005/09/25-ldap"&gt;Turn your world LDAP-tastic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/20-secure-ldap#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;</content:encoded>
  </item>
  <item rdf:about="http://times.usefulinc.com/2008/06/18-cert-maint">
    <title>Low-tech SSL certificate maintenance</title>
    <link>http://times.usefulinc.com/2008/06/18-cert-maint</link>
    <description>I maintain a bunch of mostly self-signed SSL certificates. Too many not to automate. Here's how I do it.</description>
    <dc:subject>linux</dc:subject>
    <dc:subject>sysadmin</dc:subject>
    <dc:subject>security</dc:subject>
    <dc:creator>Edd Dumbill</dc:creator>
    <dc:date>2008-06-18T10:50:40Z</dc:date>
    <foaf:maker>
      <foaf:Person>
        <foaf:mbox rdf:resource="mailto:edd@usefulinc.com"/>
      </foaf:Person>
    </foaf:maker>
    <content:encoded>&lt;p&gt;I maintain a bunch of SSL certificates, mostly signed by my own site authority. Too many not to automate, but not enough to warrant heavy machinery. Here's how I do it.&lt;/p&gt;
&lt;h3&gt;The configuration files&lt;/h3&gt;
&lt;p&gt;Each certificate needs a config to describe what's in it. I create each of these and name it with a &lt;span style="font-style: italic;"&gt;.cnf&lt;/span&gt; suffix. Here's an example:&lt;/p&gt;
&lt;pre&gt;[ req ]
prompt                  = no
distinguished_name      = server_distinguished_name

[ server_distinguished_name ]
commonName              = server.usefulinc.com
stateOrProvinceName     = England
countryName             = GB
emailAddress            = edd@usefulinc.com
organizationName        = Useful Information Company
organizationalUnitName  = Hosting

[ req_extensions ]
subjectAltName=edd@usefulinc.com
issuerAltName=issuer:copy
nsCertType            = server

[ x509_extensions ]
subjectAltName=edd@usefulinc.com
issuerAltName=issuer:copy
nsCertType            = server&lt;/pre&gt;
&lt;p&gt;Let's say this config is &lt;span style="font-style: italic;"&gt;server.cnf&lt;/span&gt;. I then just type &lt;span style="font-style: italic;"&gt;make server.pem&lt;/span&gt; to generate the corresponding certificate and key, signed by my local certificate authority. As I don't want to attend the startup of every service, I ensure the key is password-less.&lt;/p&gt;
&lt;h3&gt;The Makefile rules&lt;/h3&gt;
&lt;p&gt;Here are the makefile steps I use to generate and sign keys.&lt;/p&gt;
&lt;pre&gt;.SUFFIXES: .pem .cnf

.cnf.pem:
        OPENSSL_CONF=$&amp;lt; openssl req -newkey rsa:1024 -keyout tempkey.pem -keyform PEM -out tempreq.pem -outform PEM
        openssl rsa &amp;lt;tempkey.pem &amp;gt; `basename $&amp;lt; .cnf`_key.pem
        chmod 400 `basename $&amp;lt; .cnf`_key.pem
        OPENSSL_CONF=./usefulCA/openssl.cnf openssl ca -in tempreq.pem -out `basename $&amp;lt; .cnf`_crt.pem
        rm -f tempkey.pem tempreq.pem
        cat `basename $&amp;lt; .cnf`_key.pem `basename $&amp;lt; .cnf`_crt.pem &amp;gt; $@
        chmod 400 $@
        ln -sf $@ `openssl x509 -noout -hash &amp;lt; $@`.0&lt;/pre&gt;
&lt;p&gt;The resultant files are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;server.pem &lt;/span&gt;&amp;mdash; contains both certificate and key in one file&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;server_crt.pem&lt;/span&gt; &amp;mdash; certificate file&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style: italic;"&gt;server_key.pem&lt;/span&gt; &amp;mdash; key file&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some notes on these steps: my site-local certificate authority is in the directory &lt;span style="font-style: italic;"&gt;usefulCA&lt;/span&gt;, along with an OpenSSL config which describes my preferences. This config was created by copying and making appropriate adjustments to the default &lt;span style="font-style: italic;"&gt;/etc/ssl/openssl.cnf&lt;/span&gt;&amp;nbsp;which ships with Debian.&lt;/p&gt;
&lt;p&gt;For generating certificate signing requests to ship to a commercial certificate authority, it's a bit simpler. I save the config files with a &lt;span style="font-style: italic;"&gt;.reqcnf&lt;/span&gt; suffix instead, and use this rule:&lt;/p&gt;
&lt;pre&gt;.SUFFIXES: .pem .cnf .reqcnf .csr

.reqcnf.csr:
        OPENSSL_CONF=$&amp;lt; openssl req -newkey rsa:1024 -keyout `basename $&amp;lt; .reqcnf`.key -keyform PEM -out `basename $&amp;lt; .reqcnf`.csr -outform PEM&lt;/pre&gt;
&lt;p&gt;And finally, a rule I use to sign incoming certificate requests from other systems:&lt;/p&gt;
&lt;pre&gt;.csr.pem:
        OPENSSL_CONF=./usefulCA/openssl.cnf openssl ca -in $&amp;lt; -out `basename $&amp;lt; .csr`_crt.pem&lt;/pre&gt;
&lt;p&gt;I offer these without warranty in the hope they might be useful to somebody. They're not much more than a transcription of a how-to into a makefile, but it's just enough technology to ensure creating certificates isn't a big nuisance.&lt;/p&gt;
&lt;h4&gt;Further reading&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;A more complete &lt;a href="http://sial.org/howto/openssl/ca/"&gt;guide to setting up a site-local certificate authority&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;p&gt;Why do I bother with a site-local CA, rather than just self-sign? It lets me bypass the annoyance of SSL warnings on clients once I've installed my own CA certificate, and gives me a coarse grained level of access control: for instance, only clients with certificates signed by my CA are allowed to access the site's LDAP server.&lt;/p&gt;
&lt;p&gt;My personal next step with this is to integrate the certificate production process with my emerging Puppet recipes for managing local infrastructure.&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/18-cert-maint#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;</content:encoded>
  </item>
  <item rdf:about="http://times.usefulinc.com/2008/06/17-semweb">
    <title>What the semantic web is for</title>
    <link>http://times.usefulinc.com/2008/06/17-semweb</link>
    <description>I'd not seen this definition of the semantic web before, but I like it.
</description>
    <dc:subject>semweb</dc:subject>
    <dc:creator>Edd Dumbill</dc:creator>
    <dc:date>2008-06-17T16:12:31Z</dc:date>
    <foaf:maker>
      <foaf:Person>
        <foaf:mbox rdf:resource="mailto:edd@usefulinc.com"/>
      </foaf:Person>
    </foaf:maker>
    <content:encoded>&lt;p&gt;I'd not seen this definition of the semantic web before, but I like it.&lt;/p&gt;
&lt;blockquote&gt;The Semantic Web is an attempt, largely, to map large quantities of existing data onto a common language so that the data can be analyzed in ways never dreamed of by its creators&lt;/blockquote&gt;
&lt;blockquote style="text-align: right;"&gt;&lt;span style="font-style: italic;"&gt;&amp;mdash; Tim Berners-Lee, &lt;/span&gt;&lt;a href="http://www.w3.org/DesignIssues/Principles.html"&gt;&lt;span style="font-style: italic;"&gt;Principles of Design&lt;/span&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Now why can't we all get along?&lt;/p&gt;&lt;p&gt;&lt;a href="http://times.usefulinc.com/2008/06/17-semweb#disqus_thread"&gt;Join the conversation about this post&lt;/a&gt;&lt;/p&gt;</content:encoded>
  </item>
</rdf:RDF>
