Internet Alchemy 4 8 15 16 23 42 2008-11-21T10:51:15Z WordPress http://iandavis.com/blog/feed/atom Ian Davis http://iandavis.com/ <![CDATA[Google SearchWiki]]> http://iandavis.com/blog/?p=1295 2008-11-21T10:51:15Z 2008-11-21T10:51:15Z Another new innovation from Google. They are so far ahead in the search game and every innovation basically accelerates them away from MS and Yahoo even faster. I’d characterise SearchWiki as a blending/blurring of search and bookmarking. They need to unify it with Google Bookmarks, Search History and Notebook which will probably happen over the coming 12 months. The outcome is the going to be a searchable bookmarking and annotation system backed by Google’s index of the web so you always find something and often it’s the best possible. An amazing display of personalisation at the largest scale.

]]>
0
Ian Davis http://iandavis.com/ <![CDATA[links for 2008-11-14]]> http://iandavis.com/blog/2008/11/links-for-2008-11-14 2008-11-15T06:02:34Z 2008-11-15T06:02:34Z
  • ]]>
    0
    Ian Davis http://iandavis.com/ <![CDATA[Extinction Timeline]]> http://iandavis.com/blog/?p=1292 2008-11-14T17:13:19Z 2008-11-14T17:13:19Z Following on from my previous post quite by chance I came across this extinction timeline that predicts the death of mending things for 2009. Fascinating predictions.

    ]]>
    0
    Ian Davis http://iandavis.com/ <![CDATA[The End of Fixable Objects?]]> http://iandavis.com/blog/2008/11/the-end-of-fixable-objects 2008-11-14T13:44:42Z 2008-11-14T13:44:42Z

    This is a depressing trend in the engineering world: the sealed machine with no discernable parts. I sometimes feel that, at the age of 35, I am a member of the last generation that grew up in a world of fixable objects.

    via Popular Mechanics comes this tale of an iPhone failing because of a build-up of dust. It’s very true though that despite the increased awareness of the imperative to build a sustainable society we continue the trend towards throw-away and unfixable items. Apple is one of the worst offenders here. There’s even a macroeconomic effect since a disposable items cannot create a secondary market of repairs and spares. Companies like Apple are ring-fencing all the value in their products for themselves.

    ]]>
    0
    Ian Davis http://iandavis.com/ <![CDATA[links for 2008-11-13]]> http://iandavis.com/blog/2008/11/links-for-2008-11-13 2008-11-14T06:03:07Z 2008-11-14T06:03:07Z
  • ]]>
    0
    Ian Davis http://iandavis.com/ <![CDATA[This Intellectual Property Malarkey is Quite Confusing]]> http://iandavis.com/blog/?p=1280 2008-11-10T13:55:39Z 2008-11-10T13:54:27Z

    I have through my “skill and judgement” interpreted where to locate the recycling centres, as they locations don’t appear on either the mapping or the original website.

    So the locations are not derived…

    Or are they? Some very interesting debate on the nature of derivative works based on maps and satellite images. Ed Parsons was formerly the CTO of the Ordnance Survey and is now at Google so you’d think he’d know, but it seems that the real answer is… it depends.

    ]]>
    2
    Ian Davis http://iandavis.com/ <![CDATA[Paget Iteration 2]]> http://iandavis.com/blog/?p=1268 2008-11-10T10:56:36Z 2008-11-10T10:55:18Z A few weeks ago I released a small PHP framework for publishing linked data (see my earlier post Publishing Linked Data with PHP). Since then I have made a lot of changes to the code and ended up completely changing the application flow.

    Previously all the behaviour was specified by a configuration array with a dispatcher class. I found that was limiting the flexibility I needed and the “simple” configuration array was becoming decidedly complex. The Dispatcher class has been replaced by a new UriSpace class which is responsible for identifying the resources identified by a group of URIs. Applications can create classes derived from UriSpace to encapsulate the behaviour of their resources. Resources are split into three categories: documents that can be served straight up, abstract resources and descriptions of abstract resources. The last two are where the interesting bits of Paget lie. An application will typically override the get_description method to return a custom description derived from ResourceDescription. This class does all the hard work of finding triples about the requested abstract resource.

    A class derived from ResourceDescription can override several methods to customise the RDF returned:

    get_resources
    This method returns an array of resource URIs that the description will consider when generating its RDF. The default behaviour is simply to chop the file extension off of the description’s URI. So, the description at http://iandavis.com/id/me.rdf will have a resource of http://iandavis.com/id/me.
    get_generators
    This returns a list of generators that seed the triples in the descrpition. The ResourceDescription class calls each generator’s add_triples method once for each resource returned by the get_resources method. Paget has some pre-defined generators that can read triples from a local file or from a platform store. The default behaviour is to do nothing.
    get_augmentors
    This returns a list of augmentors that add triples to the description. Paget comes with a few built-in augmentors to augment with RDF from a platform store, annotate properties with human readable labels and even do some limited inferencing. By default the simple property labeller is returned as an augmentor.
    get_label
    This just calculates a sensible label for the description that could be used in the title of a web page or a link. The default behaviour is to look for an rdfs:label, dc:title or foaf:name for the primary resource in the description (which is the first one returned by get_resources). Applications could override this to use whatever heuristics make sense for their data.
    get
    This is the dispatch point for HTTP GET requests. At a later date I hope to handle other methods too, but for now Paget is a read only system
    get_html
    This is called by the get method to generate an HTML representation of the description. By default it uses Paget’s SimpleHtmlRepresentation class but this is the point at which most customisations will take place for rendering linked data.

    The HTML output from Paget has been revised too. The basic layout of the page is handled by the SimpleHtmlRepresentation class but some type-specific logic has been broken out into a number of “widgets”. There’s one for OWL ontologies, RDF classes and properties and a general one that can render any RDF data. The html representation chooses an appropriate widget based in the type of the primary resource being rendered. I’m thinking about adding widgets for people and various other common classes. This is all very early and experimental. Ideally I would like the page to adapt itself completely dynamically based on the underlying data. Switching on the class of a resource is rather simplistic, but it will do as a starter.

    Here’s an example of how I’m using Paget in my personal data space http://iandavis.com/id/me. All the data is held in a Talis Platform store. I handle requests to http://iandavis.com/id/ with some .htaccess rules that ensure every request is handled by a file called index.php which contains the code hooking the space up to Paget. In index.php I create a subclass of UriSpace called StoreBackedUriSpace that maps the URIs beneath http://iandavis.com/id/ to resources and their descriptions. That class creates instances of StoreBackedResourceDescription that use a StoreDescribeGenerators to fetch the descriptions from the platform store. The entire code for index.php (less PHP includes etc) is shown here:

    
    class StoreBackedUriSpace extends PAGET_UriSpace {
      function get_description($uri) {
        return new StoreBackedResourceDescription($uri);
      }
    }
    
    class StoreBackedResourceDescription extends PAGET_ResourceDescription {
      function get_generators() {
        return array( new PAGET_StoreDescribeGenerator("http://api.talis.com/stores/iand") );
      }
    }
    
    $space = new StoreBackedUriSpace();
    $space->dispatch();
    
    

    That’s basically the pattern for publishing data using Paget: derive a class from UriSpace and override the get_description method to return a custom ResourceDescription. I do that to publish some vocabularies on vocab.org such as Bio and Whisky. The UriSpace for those locations returns a resource description class that uses the FileGenerator class to read the schemas from local RDF documents and the simple property labeller and the simple inferencer to augment the results. My other deployment, at placetime.com, uses a custom resource description for each type of resource with custom generators that create the raw triples based on the requested URI.

    So far it seems that Paget is flexible enough to deal with these varied scenarios of data publishing. The next step is to start looking at editing of the data and providing more application functionality.

    ]]>
    0
    Ian Davis http://iandavis.com/ <![CDATA[Homepage Links]]> http://iandavis.com/blog/?p=1266 2008-11-10T00:15:18Z 2008-11-10T00:15:18Z I did a bit of blog housekeeping and collated all the links to my homepages on services across the web. I’m using Wordpress’s link management feature to organise and display them in the sidebar on my blog’s homepage. With a little bit of extra effort I could also output the list as RDF using FOAF’s OnlineAccount classes and properties.

    ]]>
    0
    Ian Davis http://iandavis.com/ <![CDATA[RESTful eCommerce]]> http://iandavis.com/blog/?p=1261 2008-11-09T22:30:05Z 2008-11-09T22:30:05Z Alan Dean is on a roll with a bunch of interesting REST posts:

    ]]>
    0
    Ian Davis http://iandavis.com/ <![CDATA[Something Very Weird With Delicious]]> http://iandavis.com/blog/?p=1249 2008-10-27T09:14:56Z 2008-10-15T09:56:48Z I forgot my del.icio.us password so I went to the reset password function. It showed me the email address that I had used to sign up to del.icio.us with and an option to change that address. I changed it to something else without needing to enter a password or anything. I got confirmation of the change sent to both addresses. Then, I went back to the reset password page and clicked the link for del.icio.us to send me a password reset link. It happily sent it to the new email address that I’d entered.

    So what’s to stop anyone from going to del.icio.us, changing the email address to my account and then getting access to change my password? WTF? Tell me what I’m missing here?

    ]]>
    4