<?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/"
	>

<channel>
	<title>Hackdiary &#187; photos</title>
	<atom:link href="http://www.hackdiary.com/category/photos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hackdiary.com</link>
	<description></description>
	<lastBuildDate>Thu, 12 Aug 2010 08:58:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>www2003 developers day talk</title>
		<link>http://www.hackdiary.com/2003/06/09/www2003-developers-day-talk/</link>
		<comments>http://www.hackdiary.com/2003/06/09/www2003-developers-day-talk/#comments</comments>
		<pubDate>Mon, 09 Jun 2003 14:40:07 +0000</pubDate>
		<dc:creator>Matt Biddulph</dc:creator>
				<category><![CDATA[photos]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[talks]]></category>
		<category><![CDATA[wordnet]]></category>

		<guid isPermaLink="false">http://www.hackdiary.com/?p=37</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>I gave a developer-oriented version of my semantic web &#8220;photos and metadata&#8221; talk at www2003 developers day. The <a href="http://www.hackdiary.com/slides/www2003.pdf">slides</a> are available online and there are a bunch of demos to look at.</p>
<p><span id="more-37"></span><br />
The demos:</p>
<ul>
<li><a href="view-source:http://xmlns.com/wordnet/1.6/Building">Wordnet namespace entry for building</a></li>
<li><a href="http://www.picdiary.com">Picdiary home page</a></li>
<li><a href="http://www.picdiary.com/cgi-bin/latest.pl">RSS for Picdiary home page</a></li>
<li><a href="http://pod-124.gnomehack.com/~phil/polaroid/?rss=highwalk.rss">Picdiary polaroids view</a></li>
<li><a href="http://www.picdiary.com/cgi-bin/findmbox.pl?mbox=mailto:edd@usefulinc.com">Pictures of Edd Dumbill</a></li>
<li><a href="view-source:http://www.picdiary.com/cgi-bin/findmbox.pl?mbox=mailto:edd@usefulinc.com&#038;rdf=1">Pictures of Edd Dumbill, RSS source</a></li>
<li><a href="http://www.picdiary.com/cgi-bin/search.pl?word=skyscraper">Wordnet-based search for skyscraper</a></li>
<li><a href="http://www.picdiary.com/cgi-bin/search.pl?word=building">Wordnet-based search for building</a></li>
<li><a href="http://www.picdiary.com/cgi-bin/tree.pl?word=Structure">Wordnet-hierarchy-nav for structure</a></li>
</ul>
<p>The logs on the IRC #www2003 channel <a href="http://ilrt.org/discovery/chatlogs/www2003/2003-05-24.html#T09-43-11">during the talk</a> are interesting to compare with the slides.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackdiary.com/2003/06/09/www2003-developers-day-talk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XMLEurope 2003 Talk Slides</title>
		<link>http://www.hackdiary.com/2003/05/07/xmleurope-2003-talk-slides/</link>
		<comments>http://www.hackdiary.com/2003/05/07/xmleurope-2003-talk-slides/#comments</comments>
		<pubDate>Wed, 07 May 2003 17:16:35 +0000</pubDate>
		<dc:creator>Matt Biddulph</dc:creator>
				<category><![CDATA[photos]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[talks]]></category>
		<category><![CDATA[wordnet]]></category>

		<guid isPermaLink="false">http://www.hackdiary.com/?p=34</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>This morning I did my talk (<a href="/archives/000020.html">A Semantic Web Shoebox &#8211; Annotating Photos with RSS and RDF</a>) at <a href="http://www.xmleurope.com/2003/">XMLEurope 2003</a>. The slides are now <a href="/misc/xmleurope.pdf">available</a>.</p>
<p><span id="more-34"></span><br />
The talk was scheduled amongst a fun-packed Semantic Web series of <a href="http://www.shadowgirl.net/">Celia Romaniuk</a> (Soap Operas and the Semantic Web), <a href="http://uche.ogbuji.net">Uche Ogbuji</a> (Akara &#8211; Part Wiki, Part Blog, Powered by XML and RDF), <a href="http://www.zooleika.org.uk">Jo Walsh</a> (Collaborative Mapping with RDF) and myself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackdiary.com/2003/05/07/xmleurope-2003-talk-slides/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Semantic Web shoebox &#8211; annotating photos with RSS and RDF</title>
		<link>http://www.hackdiary.com/2003/01/31/a-semantic-web-shoebox-annotating-photos-with-rss-and-rdf/</link>
		<comments>http://www.hackdiary.com/2003/01/31/a-semantic-web-shoebox-annotating-photos-with-rss-and-rdf/#comments</comments>
		<pubDate>Fri, 31 Jan 2003 12:52:17 +0000</pubDate>
		<dc:creator>Matt Biddulph</dc:creator>
				<category><![CDATA[photos]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[wordnet]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.hackdiary.com/?p=23</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had a proposal for a paper on RDF and annotating photos accepted for <a href="http://www.xmleurope.com/2003/">XML Europe 2003</a>. Yay! Here&#8217;s what I submitted:</p>
<p><span id="more-23"></span><br />
<a href="http://www.purl.org/rss/1.0/">RSS 1.0</a> (RDF Site Summary) is a well-known XML format commonly used for syndicating news headlines. By design it is an extensible format in which metadata expressed using any RDF vocabulary can be linked to its component items, while still maintaining compatibility with applications such as newsreaders that may be unaware of such vocabularies. This paper will discuss some interesting applications that can be built with RSS as a base. The annotation of collections of photographs is used as a case study.</p>
<p>Using an <a href="http://xmlns.com/2001/08/wordnet/">RDF representation of Wordnet</a>, the lexical database of English, we attach keywords to photographs to indicate what they objects they depict.  With simple inference logic, we create improved search engines over this data. For example, using the hypernym information in Wordnet to extrapolate from keywords, a search for buildings can find hotels, churches, houses and other related photographs. We can automatically build a Yahoo-like hierarchical web site of photographs organised by the meaning of their keywords.</p>
<p>Using the <a href="http://www.rdfweb.org/foaf/">Friend Of A Friend</a> (FOAF) vocabulary, we can record which photographs show particular people. Applications can then display related information with the photograph by using information gathered by spidering the existing network of FOAF information on the web.</p>
<p>Dynamically-built RSS channels are an ideal format for expressing search results; hence people who are interested could use newsreaders to subscribe to new pictures of any Wordnet noun, particular person or other metadeta criteria.  This RSS is easily turned into web pages using templating tools. A Blogger-like front page can be built by building an RSS &#8216;meta-channel&#8217; summary of the 10 newest photo collections.</p>
<p>Processing toolkits for RDF are available in many languages, and RDF&#8217;s natural integration with the web&#8217;s URI system makes it easy to build applications in a loosely-coupled style. Tools for this project built using the <a href="http://www.redland.opensource.ac.uk/">Redland</a> API in Perl and the <a href="http://www.hpl.hp.com/semweb/jena-top.html">Jena</a> toolkit in Java easily interoperate, using the RDF output of one as the input of another. New applications can be built by others using any language or environment with RDF and HTTP support (even Mozilla), without needing to be granted any special database access or other privileges.</p>
<p><i>Update: slides from this and other talks are <a href="/cats.html#talks">available</a></i>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackdiary.com/2003/01/31/a-semantic-web-shoebox-annotating-photos-with-rss-and-rdf/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Photo-annotating bot</title>
		<link>http://www.hackdiary.com/2003/01/09/photo-annotating-bot/</link>
		<comments>http://www.hackdiary.com/2003/01/09/photo-annotating-bot/#comments</comments>
		<pubDate>Thu, 09 Jan 2003 13:02:47 +0000</pubDate>
		<dc:creator>Matt Biddulph</dc:creator>
				<category><![CDATA[bots]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[rest]]></category>

		<guid isPermaLink="false">http://www.hackdiary.com/?p=19</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>A background project for a while has been to write a bot to help me annotate the fairly large number of pictures I post to <a href="http://www.picdiary.com/cgi-bin/frontpage.pl">picdiary</a> (1496 at the last count). Creating a document of <a href="http://www.picdiary.com/rss/highwalk.rss">RSS-based metadata</a> is a slightly cumbersome text-editor job every time I post a new set of pics.</p>
<p><span id="more-19"></span><br />
After much thought, coding and discussion over the summer with <a href="http://husk.org/bots/">#bots</a> people, I came to the conclusion that a good architectural style for bots is, as <a href="http://space.frot.org/techdetails.html">jo puts it</a>, &#8220;a stateful conversational interface to an aspect of the semantic web&#8221;. Querying and updating information is modeled by HTTP GET and POST respectively. The code is structured after the Model-View-Controller pattern commonly used in GUI development: the View is a represention over IRC or another messaging system, the Controller responds to messages generated by running a <a href="http://www.webgain.com/products/java_cc/">grammar-based parser</a> over the user&#8217;s input, and the Model lives on the web. The bot only keeps state relevant to the conversation (e.g. which picture we are currently talking about).</p>
<p>To get the bot up and running, I started by creating a GET-able query system based on <a href="http://www.hpl.hp.com/semweb/jena-top.html">jena</a>. It has a nice RDF query language that&#8217;s somewhat SQLish, and can use berkeleydb and rdbms backends. I modeled <a href="http://www.picdiary.com/~mattb/queries.rdf">a store of queries</a> in RDF and wrote a java servlet to run queries and return results in <a href="http://www.picdiary.com:8180/rss/query/depicts?mbox=mailto:edd@usefulinc.com">naive XML</a> or <a href="http://www.picdiary.com:8180/rss/query/depicts?mbox=mailto:edd@usefulinc.com&#038;rdf=1">RDF</a> formats.</p>
<p>With this flexible backend, I was able to write a commandline version of a bot using simple HTTP requests and the <a href="http://jakarta.apache.org/commons/digester/">Jakarta Digester</a> to extract information from the XML. Adding a new feature is mostly a case of augmenting the parser&#8217;s grammar and adding a new query to the query store.</p>
<p>Here&#8217;s a sample session with the commandline version of the bot:</p>
<pre>
> find mailto:jo@abduction.org
mailto:jo@abduction.org depicted in http://www.picdiary.com/xcom/IMG_1676.jpg
> read xcom
0: http://www.picdiary.com/xcom/IMG_1674.jpg
1: http://www.picdiary.com/xcom/IMG_1676.jpg
2: http://www.picdiary.com/xcom/IMG_1677.jpg
3: http://www.picdiary.com/xcom/IMG_1678.jpg
> current file
xcom
> use 0
Using pic with uri http://www.picdiary.com/xcom/IMG_1674.jpg
> current pic

http://www.picdiary.com/xcom/IMG_1674.jpg

> depicts
mailto:edd@usefulinc.com
mailto:ben@hammersley.com
> use 1
Using pic with uri http://www.picdiary.com/xcom/IMG_1676.jpg
> depicts
mailto:jo@abduction.org
</pre>
<p>The next step is to extend the query system to allow updates and creates, and I&#8217;ll be nearly done.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackdiary.com/2003/01/09/photo-annotating-bot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Latest from Picdiary</title>
		<link>http://www.hackdiary.com/2003/01/03/latest-from-picdiary/</link>
		<comments>http://www.hackdiary.com/2003/01/03/latest-from-picdiary/#comments</comments>
		<pubDate>Fri, 03 Jan 2003 15:27:33 +0000</pubDate>
		<dc:creator>Matt Biddulph</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://www.hackdiary.com/?p=17</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>New in the right-hand sidebar on the <a href="/">site front page</a> is a little lineup of the 3 latest pictures from <a href="http://www.picdiary.com">picdiary</a>, my photos website. This is created by parsing the RDF in the <a href="http://www.picdiary.com/cgi-bin/latest.pl">latest photo collection RSS feed</a> and extracting rss:title, dc:date and foaf:thumbnail information via an MT plugin (<a href="/src/picdiarylatest.txt">src</a>).</p>
<p><span id="more-17"></span><br />
The code uses RDF::Core::Parser from CPAN, which is a nice simple RDF parser that works much like SAX does for XML. You register an Assert callback with the parser which gets called once for each RDF statement found in the RDF it parses.</p>
<p>A very satisfying hack. RDF and HTTP makes this stuff so easy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackdiary.com/2003/01/03/latest-from-picdiary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dodgy SVG version of picdiary slides page</title>
		<link>http://www.hackdiary.com/2002/12/23/dodgy-svg-version-of-picdiary-slides-page/</link>
		<comments>http://www.hackdiary.com/2002/12/23/dodgy-svg-version-of-picdiary-slides-page/#comments</comments>
		<pubDate>Mon, 23 Dec 2002 13:32:00 +0000</pubDate>
		<dc:creator>Matt Biddulph</dc:creator>
				<category><![CDATA[foaf]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[svg]]></category>
		<category><![CDATA[wordnet]]></category>

		<guid isPermaLink="false">http://www.hackdiary.com/?p=11</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>I felt it was time to learn a bit more about SVG and do some concrete work with it. I made a fairly simple SVG document that renders picdiary feeds. It parses the RSS and builds the page on the client-side using Jim Ley&#8217;s lovely <a href="http://jibbering.com/rdf-parser/">javascript rdf parser</a>.</p>
<p>Compare the <a href="http://www.picdiary.com/new/xcom">HTML version</a> to the <a href="http://www.picdiary.com/svg/pics.svg?rss=xcom.rss">SVG version</a>. There&#8217;s nothing in the SVG version that couldn&#8217;t be rendered in HTML; the interest was in doing the job entirely client-side.</p>
<p><span id="more-11"></span><br />
The system builds links into <a href="http://www.foafnaut.org">foafnaut</a> and my wordnet picture hierarchy when it finds appropriate metadata about a picture.</p>
<p>Jim&#8217;s parser page says the RDF parser needs at least version 5.5 to run under IE. Javascript in SVG is a pain to debug in mozilla; you don&#8217;t seem to be able to use mozilla&#8217;s javascript console or debugger.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackdiary.com/2002/12/23/dodgy-svg-version-of-picdiary-slides-page/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>To rss-dev about picdiary</title>
		<link>http://www.hackdiary.com/2002/12/17/to-rss-dev-about-picdiary/</link>
		<comments>http://www.hackdiary.com/2002/12/17/to-rss-dev-about-picdiary/#comments</comments>
		<pubDate>Tue, 17 Dec 2002 21:18:00 +0000</pubDate>
		<dc:creator>Matt Biddulph</dc:creator>
				<category><![CDATA[foaf]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.hackdiary.com/?p=10</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>A mail <a href="http://groups.yahoo.com/group/rss-dev/message/4580">sent to RSS-DEV</a> about work in progress on picdiary and its use of RSS for cataloguing photos.</p>
<p><span id="more-10"></span><br />
<b>Subject:  Re: [RSS-DEV] RSS and Libraries</b><br />
From:  mb@p&#8230;<br />
Date:  Tue Dec 17, 2002  9:18 pm</p>
<p>On Mon, Dec 16, 2002 at 05:14:33PM +0000, Libby Miller wrote:<br />
> On Mon, 16 Dec 2002, se teague wrote:<br />
> > I&#8217;m so happy to find this group! I&#8217;ve been developing an<br />
> > RSS/Perl/PHP/MySQL based rss program to generate news and events for the<br />
> > academic library I work for. i do have a question though; We haven&#8217;t<br />
> > tackled associating images with RSS items rather than channels. Has<br />
> > anyone done this before? Any best practices out there?<br />
><br />
> I rather like what Matt Biddulph&#8217;s been doing, e.g.:<br />
> <a href="http://www.picdiary.com/rss/barcelona_conf.rss">http://www.picdiary.com/rss/barcelona_conf.rss</a></p>
<p>Thanks Libby. To (over)elaborate:</p>
<p>My site (<a href="http://www.picdiary.com">http://www.picdiary.com</a>) is just a blog of collections of<br />
pictures. There&#8217;s not much text, the pictures are the main focus and<br />
just have a few lines of description. For a while it&#8217;s been lacking good<br />
search facilities, and was built out of static HTML.</p>
<p>I decided to use RSS 1.0 as the &#8216;container&#8217; format for each picture<br />
collection. RSS works just as well for pictures-as-items as it does for<br />
html-pages-as-items &#8211; they&#8217;re all just web links. So I wrote a bunch of<br />
simple perl scripts to read in RSS and display them as web pages. For<br />
example, The link Libby gave above can be viewed at<br />
<a href="http://www.picdiary.com/new/barcelona_conf?rss=barcelona_conf.rss&#038;page=1"></p>
<p>http://www.picdiary.com/new/barcelona_conf?rss=barcelona_conf.rss&#038;page=1</p>
<p></a><br />
or of course it can be viewed in a newsreader/aggregator.</p>
<p>If you look in the HTML source of that page, you&#8217;ll see a line like<br />
this:</p>
<p>&lt;link rel=&#8221;alternate&#8221; type=&#8221;application/rss+xml&#8221; title=&#8221;RSS&#8221;<br />
href=&#8221;http://www.picdiary.com/rss/barcelona_conf.rss&#8221;&gt;</p>
<p>This is following the rss autodiscovery standard so that spiders can<br />
find the RSS metadata from the webpage.</p>
<p>Using RSS 1.0&#8242;s RDF capability, I can add all sorts of metadata to<br />
channels and items with a few extra tags in the RSS. That particular<br />
feed uses FOAF to say that certain pictures are of people like Libby.<br />
Other (more recent) feeds such as<br />
<a href="http://www.picdiary.com/rss/highwalk.rss">http://www.picdiary.com/rss/highwalk.rss</a> also use Dublin Core to give<br />
the creator and date of the channel, and Wordnet to list keywords<br />
associated with each picture (item).</p>
<p>There&#8217;s a (prerelease) search engine that indexes all the RSS and uses<br />
the Wordnet terms (and exploits Wordnet&#8217;s synonym and hypernym<br />
relationships between words to give better search results) at<br />
<a href="http://www.picdiary.com/cgi-bin/search.pl?word=building">http://www.picdiary.com/cgi-bin/search.pl?word=building</a><br />
If you look &#8216;behind the scenes&#8217; of that search engine at<br />
<a href="http://www.picdiary.com:8180/rss/search?word=building">http://www.picdiary.com:8180/rss/search?word=building</a><br />
then you&#8217;ll see that the search results themselves are returned as<br />
dynamically-built RSS channels then rendered into HTML by some perl. So<br />
you could subscribe to the search results if you wanted to.</p>
<p>Ramble ramble. There&#8217;s quite a lot to say, feel free to followup or mail<br />
me off-list for more information.</p>
<p>Cheers,<br />
Matt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackdiary.com/2002/12/17/to-rss-dev-about-picdiary/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wordnet dmoz-alike picdiary hierarchy</title>
		<link>http://www.hackdiary.com/2002/12/10/wordnet-dmoz-alike-picdiary-hierarchy/</link>
		<comments>http://www.hackdiary.com/2002/12/10/wordnet-dmoz-alike-picdiary-hierarchy/#comments</comments>
		<pubDate>Tue, 10 Dec 2002 00:07:00 +0000</pubDate>
		<dc:creator>Matt Biddulph</dc:creator>
				<category><![CDATA[photos]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[wordnet]]></category>

		<guid isPermaLink="false">http://www.hackdiary.com/?p=9</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>A browseable hierachy of pictures organised by the hierarchy of the wordnet terms depicted in them. Start browsing at <a href="http://www.picdiary.com/cgi-bin/tree.pl?word=Artifact">Artifact</a> or look at the <a href="http://www.picdiary.com:8180/rss/wordtree?word=Building">RSS backend</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackdiary.com/2002/12/10/wordnet-dmoz-alike-picdiary-hierarchy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordnet-based search engine for picdiary</title>
		<link>http://www.hackdiary.com/2002/11/29/wordnet-based-search-engine-for-picdiary/</link>
		<comments>http://www.hackdiary.com/2002/11/29/wordnet-based-search-engine-for-picdiary/#comments</comments>
		<pubDate>Fri, 29 Nov 2002 10:48:00 +0000</pubDate>
		<dc:creator>Matt Biddulph</dc:creator>
				<category><![CDATA[photos]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[wordnet]]></category>

		<guid isPermaLink="false">http://www.hackdiary.com/?p=8</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>This search engine uses <a href="http://www.cogsci.princeton.edu/~wn/">wordnet</a> to find synonyms of search terms, and hypernyms of marked-up keywords. So a search for <a href="http://www.picdiary.com/cgi-bin/search.pl?word=skyscraper">skyscraper</a> finds one picture and a search for <a href="http://www.picdiary.com/cgi-bin/search.pl?word=structure">structure</a> finds the skyscraper and a load of other pictures too.</p>
<p><span id="more-8"></span><br />
The pics are marked up in the RSS-based picture collections using markup like this:</p>
<p>&lt;item rdf:about=&#8221;http://www.picdiary.com/kensington/img_1926.jpg&#8221;&gt;<br />
&lt;foaf:depicts&gt;&lt;wordnet:Telephone /&gt;&lt;/foaf:depicts&gt;<br />
&lt;/item&gt;</p>
<p>Search results are actually returned in RSS; the html search page is just a wrapper around that. So you can subscribe to <a href="http://www.picdiary.com:8180/rss/servlet/search?word=shop">pictures of shops</a> if you really want to.</p>
<p>Next steps:</p>
<ul>
<li>Add &#8220;more like this&#8221; links to picture pages that find pictures by navigating the wordnet space</li>
<li>make a dmoz-style directory of pictures arranged into the wordnet hierarchy</li>
<li>do similar things with FOAF person information</li>
<li>do location annotation using jo&#8217;s <a href="http://space.frot.org/mudengland.html">geonet-based namespace</a></li>
<li>tie it all together into some sort of coherent website</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.hackdiary.com/2002/11/29/wordnet-based-search-engine-for-picdiary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To www-rdf-interest about XMP and JPEGs</title>
		<link>http://www.hackdiary.com/2002/08/03/to-www-rdf-interest-about-xmp-and-jpegs/</link>
		<comments>http://www.hackdiary.com/2002/08/03/to-www-rdf-interest-about-xmp-and-jpegs/#comments</comments>
		<pubDate>Sat, 03 Aug 2002 19:18:39 +0000</pubDate>
		<dc:creator>Matt Biddulph</dc:creator>
				<category><![CDATA[photos]]></category>
		<category><![CDATA[rdf]]></category>

		<guid isPermaLink="false">http://www.hackdiary.com/?p=4</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>A mail <a href="http://lists.w3.org/Archives/Public/www-rdf-interest/2002Aug/0012">sent to www-rdf-interest</a> after attempting to embed XMP metadata in JPEGs.</p>
<p>(It turns out my code doesn&#8217;t do the jpeg embedding quite right. It looks like the <a href="http://www.w3.org/People/Bos/JPEG-XMP/">JPEG-XMP</a> package will do it correctly.)</p>
<p><span id="more-4"></span><br />
<b>Subject: Adobe XMP and jpeg embedding</b><br />
To: www-rdf-interest@w3.org<br />
Date: 03 Aug 2002 19:18:39 +0100</p>
<p>I was discussing picture metadata with some people this morning and<br />
decided to have a play with the Adobe XMP toolkit [1]. Here are my<br />
notes, in case they are of use or interest to anyone.</p>
<p>job 1: compile under linux, which is unsupported<br />
* the code compiles with warnings if you apply these small<br />
changes across the .c, .cpp and .h files:<br />
* s/xap_xpdomconf.h/XAP_XPDOMConf.h/g<br />
* s/XPDom.h/XPDOM.h/g<br />
* s/XAPTkinternals.h/XAPTkInternals.h/g<br />
* tsk tsk to adobe for developing on a case-insensitive OS but<br />
putting mixed-case filenames in their zipfiles<br />
* also, some files use FREE, REALLOC, CALLOC and MALLOC macros<br />
which presumably would get correctly resolved via a chain of ifdefs<br />
and stuff if i were on windows, but for now just #define them to<br />
regular libc free, realloc, calloc and malloc<br />
* then compile everything with gcc/g++ version 3<br />
* i should make a Makefile really, but i&#8217;m too dumb so I just<br />
muck about on the cmdline<br />
* the sample XAPDumper also needs the PacketScanner utility to<br />
compile, but that&#8217;s also in the distribution and compiles OK<br />
(perhaps with similar case-changes for include files)<br />
* having done this, i end up with a bunch of apparently<br />
working code, but I am getting some segfaults on exit<br />
* i shall run a memory profiler when i get a round tuit</p>
<p>job 2: try the dumper<br />
* as you&#8217;d hope, the PDF files that document the XMP toolkit<br />
themselves have XMP embedded<br />
* so I ran the dumper on XMPEmbedding.pdf and got this dump [2]<br />
* and here&#8217;s a nice w3c rdf validator visualisation of the<br />
metadata [3]</p>
<p>job 3: insert XMP into JPEG as described in XMPEmbedding.pdf<br />
* now, time to write some C++ using the toolkit<br />
* I used the MetaXAP object to create a new chunk of rdf<br />
describing a jpeg as having dc:creator David Brophy<br />
* that gets rendered to RDF/XML and the UtilityXAP object<br />
creates an &#8216;xml packet&#8217; wrapper around the metadata<br />
* i now have a string ready to insert into a jpeg<br />
* i use libexif5 and something named &#8216;libjpeg&#8217; extracted from<br />
the source distribution of the &#8216;exif&#8217; command to add data to the<br />
existing jpeg file<br />
* this goes in an APP1 segment that starts with a length value<br />
and the null-terminated string &#8216;<a HREF="http://ns.adobe.com/xap/1.0/">http://ns.adobe.com/xap/1.0/</a>&#8216;,<br />
followed by the<br />
&lt;?xpacket begin=&#8217;\x{FEFF}&#8217; id=&#8217;W5M0MpCehiHzreSzNTczkc9d&#8217;?&gt;<br />
&#8230;<br />
&lt;?xpacket end=&#8217;w&#8217; ?&gt;<br />
wrapper created by the toolkit<br />
* the resulting jpeg [4] still renders correctly as a jpeg,<br />
and also contains xmp data giving dc:creator as David Brophy<br />
* and works as expected with dan brickley&#8217;s XMP demo:<br />
* extracted metadata: [5], raw RDF/XML: [6]<br />
* the slightly shoddy code that does job 3 is available [7]</p>
<p>References</p>
<p>1. <a HREF="http://www.adobe.com/products/xmp/">http://www.adobe.com/products/xmp/</a><br />
2. <a HREF="http://www.picdiary.com/~mattb/misc/xmpdump.txt">http://www.picdiary.com/~mattb/misc/xmpdump.txt</a><br />
3. <a HREF="http://www.picdiary.com/~mattb/misc/xmpdump.png">http://www.picdiary.com/~mattb/misc/xmpdump.png</a></p>
<p>4. <a HREF="http://www.picdiary.com/~mattb/misc/xmp.jpg">http://www.picdiary.com/~mattb/misc/xmp.jpg</a><br />
5.<br />
<a HREF="http://www.w3.org/2001/sw/Europe/200206/imagemeta/extract/extract?uri=http://www.picdiary.com/~mattb/misc/xmp.jpg&#038;html=true">http://www.w3.org/2001/sw/Europe/200206/imagemeta/extract/extract?uri=http://www.picdiary.com/~mattb/misc/xmp.jpg&#038;html=true</a><br />
6.<br />
<a HREF="http://www.w3.org/2001/sw/Europe/200206/imagemeta/extract/extract?uri=http://www.picdiary.com/~mattb/misc/xmp.jpg&#038;html=false">http://www.w3.org/2001/sw/Europe/200206/imagemeta/extract/extract?uri=http://www.picdiary.com/~mattb/misc/xmp.jpg&#038;html=false</a><br />
7. <a HREF="http://www.picdiary.com/~mattb/misc/xmptest.cpp">http://www.picdiary.com/~mattb/misc/xmptest.cpp</a></p>
<p>Cheers,<br />
Matt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hackdiary.com/2002/08/03/to-www-rdf-interest-about-xmp-and-jpegs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
