<?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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>
<channel>
	<title>Your bones got a little machine &#187; mashup</title>
	<atom:link href="http://blog.pansapiens.com/category/mashup/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.pansapiens.com</link>
	<description>Ideas are cheap, implementation is expensive; act accordingly.</description>
	<lastBuildDate>Sat, 28 Jan 2012 03:00:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<creativeCommons:license>http://creativecommons.org/publicdomain/zero/1.0/</creativeCommons:license>
		<item>
		<title>Announcing ResolveRef on Google App Engine</title>
		<link>http://blog.pansapiens.com/2008/04/23/announcing-resolveref-on-google-app-engine/</link>
		<comments>http://blog.pansapiens.com/2008/04/23/announcing-resolveref-on-google-app-engine/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 00:29:21 +0000</pubDate>
		<dc:creator>Andrew Perry</dc:creator>
				<category><![CDATA[bioinformatics]]></category>
		<category><![CDATA[biopython]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[mashup]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[openref]]></category>
		<category><![CDATA[resolveref]]></category>
		<category><![CDATA[turbogears]]></category>
		<guid isPermaLink="false">http://blog.pansapiens.com/?p=48</guid>
		<description><![CDATA[About two weeks ago, tipped off by Neil, I heard about Google App Engine. I managed to get a beta account, and I&#8217;ve finally had a chance to do something (hopefully) useful with it. In the absence of any quickly achievable ideas for a bioinformatics app, I ported over the OpenRef application I wrote on [...]]]></description>
			<content:encoded><![CDATA[<p>About two weeks ago, <a href="http://nsaunders.wordpress.com/2008/04/08/googles-appengine/">tipped off by Neil</a>, I heard about Google App Engine. I managed to get a beta account, and I&#8217;ve finally had a chance to do something (hopefully) useful with it.</p>
<p>In the absence of any <em>quickly achievable</em> ideas for a bioinformatics app, I ported over the <a href="http://blog.pansapiens.com/2008/01/18/an-openref-implementation/">OpenRef application I wrote on top of TurboGears</a> a few months back.</p>
<p>Just like the original, the new app, <a href="http://resolveref.appspot.com/">ResolveRef</a>, is essentially a <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">RESTful</a> way of doing PubMed queries.<br />
<span id="more-48"></span><br />
A query like:</p>
<p>http://resolveref.appspot.com/ref/<strong>journal</strong>/<strong>year</strong>/<strong>volume</strong>/<strong>page</strong></p>
<p>or when there is no volume number, like:</p>
<p>http://resolveref.appspot.com/ref/<strong>journal</strong>/<strong>year</strong>/<strong>page</strong></p>
<p>will query PubMed and forward you to the DOI. Usually this means you will be forwarded to the electronic version of the article at the publishers site. The nice thing about these OpenRef style URLs is that unlike the DOI (eg <span>doi:10.1093/molbev/msm031)</span> or PubMed ID (eg PMID:17329230), they are easily guessable if you have the biblographic reference in front of you. See <a href="http://baoilleach.blogspot.com/2008/01/doi-or-doh-proposal-for-restful-unique.html">Noel&#8217;s original OpenRef post</a> and the &#8220;About&#8221; box at <a href="http://resolveref.appspot.com/">ResolveRef</a> for more details.</p>
<p>Here&#8217;s a reference and the corresponding ResolveRef URL you can click on to test it out:</p>
<div class="journ container"><span class="creator vcard"><span class="url n"><abbr class="fn" title="Ian E Gentle"><span class="family-name"> </span></abbr></span></span>Gentle IE, Perry AJ, Alcock FH, Likić VA, Dolezal P, Ng ET, Purcell AW, McConnville M, Naderer T, Chanez AL, Charrière F, Aschinger C, Schneider A, Tokatlidis K, Lithgow T<em>, &#8220;Conserved motifs reveal details of ancestry and structure in the small TIM chaperones of the mitochondrial intermembrane space</em>&#8220;,<strong><abbr class="title" title="Molecular biology and evolution"> <span style="#ff0000;">Mol Biol Evol</span></abbr></strong>.<abbr class="date-published" title="2007-May"> <span style="#ff0000;"><strong>2007</strong></span>, </abbr><span style="#ff0000;"><strong><span class="volume">24</span></strong></span>(<span class="issue">5</span>): <abbr class="uri" title="issn/0737-4038"><span class="pages"><span style="#ff0000;"><strong>1149</strong></span>-60</span></abbr></div>
<p><a href="http://resolveref.appspot.com/ref/Mol Biol Evol/2007/24/1149">http://resolveref.appspot.com/ref/Mol Biol Evol/2007/24/1149</a></p>
<p><em>(wow &#8230; I really should have chosen one without such a large forest of authors <img src='http://blog.pansapiens.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  )</em></p>
<p>I&#8217;ve called it ResolveRef  rather than OpenRef, since based on <a href="http://baoilleach.blogspot.com/2008/01/doi-or-doh-proposal-for-restful-unique.html">the discussion on Noel&#8217;s blog</a>, it became clear that this method of mapping PubMed queries to URLs doesn&#8217;t completely fulfill Noel&#8217;s vision of what an OpenRef resolver is meant to be. It looks like this discussion is on-going (and has been had before) &#8230; in some ways it looks like this style of reference location by URL has missed the boat since DOIs and the <a href="http://www.crossref.org" target="_blank">CrossRef</a> database are already well established and prevalent.</p>
<p>As far as how difficult the porting from Turbogears was &#8230; well, for an app like this with no database access, and essentially no web interface templates (I only added the front page with a form for the ResolveRef version, the original app served no actual html pages) &#8230; it was pretty straightforward, and I nice way to learn some of the ins-and-outs of App Engine. The biggest trick was hacking the <a href="http://biopython.org">Biopython</a> <strong>Bio.EUtils.ThinClient</strong> class to use Google App Engines <strong>urlfetch</strong> rather than <strong>urllib2</strong>, which amounted to changing something like:</p>
<pre>
import urllib2
return urllib2.open(url)
</pre>
<p>to</p>
<pre>
from google.appengine.api import urlfetch
fetched = urlfetch.fetch(url)
return cStringIO.StringIO(fetched.content)
</pre>
<p>Bugs and feature requests are welcome &#8230; but I don&#8217;t make any promises about fixing/adding them. I&#8217;ll release the code soon, when I get some time to clean it up for public consumption <img src='http://blog.pansapiens.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pansapiens.com/2008/04/23/announcing-resolveref-on-google-app-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/publicdomain/zero/1.0/</creativeCommons:license>
	</item>
		<item>
		<title>A simple but useful application for Google Co-op On-the-fly Custom Search</title>
		<link>http://blog.pansapiens.com/2007/07/05/a-simple-but-useful-application-for-google-co-op-on-the-fly-custom-search/</link>
		<comments>http://blog.pansapiens.com/2007/07/05/a-simple-but-useful-application-for-google-co-op-on-the-fly-custom-search/#comments</comments>
		<pubDate>Thu, 05 Jul 2007 04:04:00 +0000</pubDate>
		<dc:creator>Andrew Perry</dc:creator>
				<category><![CDATA[mashup]]></category>
		<category><![CDATA[web2.0]]></category>
		<guid isPermaLink="false">http://blog.pansapiens.com/2007/07/05/a-simple-but-useful-application-for-google-co-op-on-the-fly-custom-search/</guid>
		<description><![CDATA[My del.icio.us linkstream is a bit like a window into my stream of consciousness. I&#8217;ve always wanted to be able to &#8216;search outward&#8217; from just my delicious links &#8230; a recent post from Alf about Google Co-op &#8216;on-the-fly&#8217; search engines just triggered a simple but really useful idea; make a Google Co-op search of my [...]]]></description>
			<content:encoded><![CDATA[<p>My del.icio.us linkstream is a bit like a window into my stream of consciousness.</p>
<p>I&#8217;ve always wanted to be able to &#8216;search outward&#8217; from just my delicious links &#8230; <a href="http://hublog.hubmed.org/archives/001500.html">a recent post from Alf about Google Co-op &#8216;on-the-fly&#8217; search engines</a> just triggered a simple but really useful idea; make a Google Co-op search of my delicious linkstream &#8230; this way I can search just within pages I&#8217;ve deemed worthy of bookmarking.</p>
<p>After a bit of wrangling with the various ways of getting data out of delicious (<span style="font-style: italic;">see my own comments to this post</span>), I found this <a href="http://benramsey.com/archives/generating-opml-from-delicious/">script for generating an html page of links from delicious</a>. This page contains <span style="font-style: italic;">all</span> my delicious links, not just the most recent ones (it seems you can only get a subset of the most recent links without authenticating with delicious, hence the PHP script using the <a href="http://del.icio.us/help/api/">delicious API</a>).</p>
<p>So, after hosting the <a href="http://hardcoreprawno.com/delicious.php">PHP script revealing all my links</a>, I can point the <a href="http://www.google.com/coop/cse/onthefly">Google Co-op Custom Search Engine</a> to that page, and <a href="http://www.google.com/custom?hl=en&#038;client=google-coop&amp;cof=AH%3Aleft%3BCX%3AGoogle%2520Custom%2520Search%3BL%3Ahttp%3A%2F%2Fwww.google.com%2Fcoop%2Fimages%2Fgoogle_custom_search_sm.gif%3BLH%3A55%3BLP%3A1%3BGFNT%3A%23666666%3BDIV%3A%23cccccc%3B&#038;q=membrane+protein&amp;btnG=Search&#038;cref=http%3A%2F%2Fwww.google.com%2Fcse%2Ftools%2Fmakecse%3Furl%3Dhardcoreprawno.com%252Fdelicious.php">search away</a> ! It&#8217;s a nice way of using search to &#8216;retrace&#8217; my steps, since it should generally restrict results to the parts of the web I&#8217;ve already seen and rated as worthy of re-examination.<br /><span style="font-style: italic;"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pansapiens.com/2007/07/05/a-simple-but-useful-application-for-google-co-op-on-the-fly-custom-search/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<creativeCommons:license>http://creativecommons.org/publicdomain/zero/1.0/</creativeCommons:license>
	</item>
	</channel>
</rss>

