<?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>Wordloosed</title>
	<atom:link href="http://www.wordloosed.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wordloosed.com</link>
	<description></description>
	<lastBuildDate>Tue, 03 Jan 2012 11:50:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Think SQL</title>
		<link>http://www.wordloosed.com/thinksql</link>
		<comments>http://www.wordloosed.com/thinksql#comments</comments>
		<pubDate>Sun, 01 Jan 2012 23:55:32 +0000</pubDate>
		<dc:creator>greg</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.wordloosed.com/?p=209</guid>
		<description><![CDATA[Several years ago, I spent a lot of time developing a relational database management system &#8211; ThinkSQL. In a future post I&#8217;ll write down the reasons why, and probably release the development diaries. But for now, the source code for &#8230; <a href="http://www.wordloosed.com/thinksql">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Several years ago, I spent a lot of time developing a relational database management system &#8211; <a title="ThinkSQL" href="http://www.thinksql.co.uk" target="_blank">ThinkSQL</a>.</p>
<p style="text-align: center;"><a href="http://www.wordloosed.com/wp-content/uploads/2012/01/thinksqlnotext.jpg"><img class="aligncenter size-full wp-image-210" style="border-style: initial; border-color: initial; border-width: 0px;" src="http://www.wordloosed.com/wp-content/uploads/2012/01/thinksqlnotext.jpg" alt="" width="60" height="73" /></a></p>
<p>In a future post I&#8217;ll write down the reasons why, and probably release the development diaries. But for now, the source code for the server is available here: <a href="https://github.com/ggaughan/ThinkSQL">https://github.com/ggaughan/ThinkSQL</a></p>
<p>As I say in the README:</p>
<blockquote><p>The source code is linear per se, but while writing it, it was an organic thing, generating great interwoven trees in the computer memory and in my head that were many-layered and that were modified and traversed, and impacted on a dynamic multi-versioned data store alongside many other threads, causing and needing deep psychological flow. The code comments are released as-is, and are often streams-of-consciousness.</p></blockquote>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wordloosed.com/thinksql/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Run a pipe2py-generated pipe on Google App Engine</title>
		<link>http://www.wordloosed.com/run-a-pipe2py-generated-pipe-on-google-app-engine-2</link>
		<comments>http://www.wordloosed.com/run-a-pipe2py-generated-pipe-on-google-app-engine-2#comments</comments>
		<pubDate>Thu, 14 Jul 2011 19:19:11 +0000</pubDate>
		<dc:creator>greg</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.wordloosed.com/?p=189</guid>
		<description><![CDATA[Once you&#8217;ve used pipe2py to convert your Yahoo! Pipe into a local Python module, you can then host it as your own Google App Engine application. You just need a bit of boilerplate to handle the parameters and output formatting. &#8230; <a href="http://www.wordloosed.com/run-a-pipe2py-generated-pipe-on-google-app-engine-2">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://code.google.com/appengine/images/appengine-silver-120x30.gif" alt="" width="120" height="30" />Once you&#8217;ve used <a href="http://github.com/ggaughan/pipe2py">pipe2py</a> to convert your Yahoo! Pipe into a local Python module, you can then host it as your own Google App Engine application. You just need a bit of boilerplate to handle the parameters and output formatting. I&#8217;ve created a sample project containing this boilerplate here: <a href="https://github.com/ggaughan/testpipe">http://github.com/ggaughan/testpipe</a>. You&#8217;ll need to include a copy of pipe2py, so it can find the modules it needs, and replace the demo pipeline references with your own. See the README for details.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wordloosed.com/run-a-pipe2py-generated-pipe-on-google-app-engine-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t flap when reversing</title>
		<link>http://www.wordloosed.com/dont-flap-when-reversing</link>
		<comments>http://www.wordloosed.com/dont-flap-when-reversing#comments</comments>
		<pubDate>Wed, 13 Jul 2011 20:47:48 +0000</pubDate>
		<dc:creator>greg</dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.wordloosed.com/?p=116</guid>
		<description><![CDATA[Top tip: when helping someone to reverse their vehicle into a small space &#8211; don&#8217;t stand behind the car and beckon them with gusto until you think they&#8217;re about to hit something and then show them your palm like some &#8230; <a href="http://www.wordloosed.com/dont-flap-when-reversing">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Top tip</strong>: when helping someone to reverse their vehicle into a small space &#8211; <em>don&#8217;t</em> stand behind the car and beckon them with gusto until you think they&#8217;re about to hit something and then show them your palm like some kind of traffic police.</p>
<p><object width="584" height="354"><param name="movie" value="http://www.youtube.com/v/7Y16HUOAmT0?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/7Y16HUOAmT0?version=3" type="application/x-shockwave-flash" width="584" height="354" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>(Instead, how about holding your arms apart to show them the actual size of the space and reduce the gap between your hands as they near the obstacle? That way they get immediate feedback and can see ahead of time how far they have left.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wordloosed.com/dont-flap-when-reversing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running Yahoo! Pipes on Google App Engine</title>
		<link>http://www.wordloosed.com/running-yahoo-pipes-on-google-app-engine</link>
		<comments>http://www.wordloosed.com/running-yahoo-pipes-on-google-app-engine#comments</comments>
		<pubDate>Sun, 24 Oct 2010 17:12:51 +0000</pubDate>
		<dc:creator>greg</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.wordloosed.com/?p=68</guid>
		<description><![CDATA[Yahoo! Pipes is an excellent tool for processing data. It provides a visual way to aggregate, manipulate, and mashup content from around the web. It&#8217;s very much like plumbing with data and is a great metaphor. I&#8217;m convinced that this approach &#8230; <a href="http://www.wordloosed.com/running-yahoo-pipes-on-google-app-engine">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://pipes.yahoo.com">Yahoo! Pipes</a> is an excellent tool for processing data. It provides a visual way to aggregate, manipulate, and mashup content from around the web. It&#8217;s very much like plumbing with data and is a great metaphor. I&#8217;m convinced that this approach is just the beginning, and look forward to connecting systems using pipes in a three-dimensional virtual environment with tactile and audio feedback&#8230; soon.</p>
<div id="attachment_69" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.wordloosed.com/wp-content/uploads/2010/10/pipe.png"><img class="size-medium wp-image-69" title="sample pipe UuvYtuMe3hGDsmRgPm7D0g" src="http://www.wordloosed.com/wp-content/uploads/2010/10/pipe-300x198.png" alt="" width="300" height="198" /></a><p class="wp-caption-text">pipe UuvYtuMe3hGDsmRgPm7D0g</p></div>
<p style="text-align: center;"><a title="Tony Hirst" href="http://blog.ouseful.info/"></a></p>
<p><a title="Tony Hirst" href="http://blog.ouseful.info/">Tony Hirst</a>, a prolific Yahoo! Pipes user, had the <a href="http://blog.ouseful.info/2008/12/19/what-happens-if-yahoo-pipes-dies/">idea</a> to translate the pipe definitions into code so that they could be run on your own computer, in case the Yahoo! Pipes server was unavailable. This sounded like an interesting challenge so I developed <a href="http://github.com/ggaughan/pipe2py">pipe2py</a>. The pipe2py package can compile a Yahoo! Pipe into pure Python source code, or it can interpret the pipe on-the-fly. It supports embedded pipes too. (Not all of the Yahoo! Pipes modules are available yet, but they&#8217;re gradually being added: if you find the need for one that&#8217;s missing please let me know, or better still provide me with the code for the module.)</p>
<p>The design for the compiled pipes was based on <a href="http://www.dabeaz.com/generators-uk/">David Beazley&#8217;s work</a> on building Python generators into pipelines, together with ideas from SQL query compilers and XProc pipelines. Each Yahoo! Pipes module is implemented as a Python generator which iterates over items provided by an input module and processes them to yield output results. Once these generators are connected together, iterating over the final one will initiate a cascading call to all earlier generators for them to iterate over their inputs and, in turn, yield their output. There are several benefits to this architecture:</p>
<ol>
<li>the compiled pipeline closely matches the original Yahoo! pipeline</li>
<li>adding new modules is easy because they are loosely coupled</li>
<li>each item is typically passed through the whole pipeline one at a time, so:
<ol>
<li>memory usage is kept to a minimum</li>
<li>no module is waiting on an earlier module to finish processing the whole data set</li>
</ol>
</li>
<li>by adding queues between the modules they could easily be made to run in parallel, each on a different CPU, to give great scalability</li>
</ol>
<p>Here&#8217;s an example pipe2py session which converts the pipe shown above into Python and then runs it locally:</p>
<pre>$ <strong>python compile.py -p UuvYtuMe3hGDsmRgPm7D0g</strong></pre>
<pre>$ <strong>python pipe_UuvYtuMe3hGDsmRgPm7D0g.py</strong></pre>
<pre>Name (default=Lancaster) Neill</pre>
<pre>{u'title': u'Bob Neill',</pre>
<pre>...</pre>
<pre>u'TotalAllowancesClaimedIncTravel': u'157332'}</pre>
<p>Since pipe2py can compile pipes into Python modules, it seemed a good <a href="http://blog.ouseful.info/2010/09/30/yahoo-pipes-code-generator/">idea</a> to try to run them in Google&#8217;s cloud via App Engine. So now there&#8217;s <a href="http://pipes-engine.appspot.com/"><strong>pipes-engine</strong></a>, which uses pipe2py to run your Yahoo! Pipes on Google&#8217;s servers.</p>
<p style="text-align: center;"><a href="http://www.wordloosed.com/wp-content/uploads/2010/10/pipes-engine2.png"><img class="aligncenter" title="pipes-engine" src="http://www.wordloosed.com/wp-content/uploads/2010/10/pipes-engine2-300x133.png" alt="pipe2py running Yahoo! Pipes on Google App Engine" width="300" height="133" /></a></p>
<p>You&#8217;ll need to log on with your Google account, and then you can take the Id of your Yahoo! Pipe (you can find it in the url when editing a pipe) and add it to the list. pipes-engine will then compile it and store the Python version of it. Clicking the pipe Id will run it on the App Engine. If you change the pipe in Yahoo, you can reload it in pipes-engine to re-compile the latest version (although I hope to automate this step in future).</p>
<p>There&#8217;s currently an App Engine timeout of 30 seconds, but Google have said that they are working on increasing that soon.</p>
<p>There were some tricky bits to developing this, like storing the generated Python source in the datastore and then importing it dynamically back from the datastore, and doing so recursively for any embedded pipe imports. Some Python <a href="http://www.python.org/dev/peps/pep-0302/">PEP 302</a> magic helped here.</p>
<p>The <a href="http://pipes-engine.appspot.com">pipes-engine.appspot.com</a> service is a proof of concept and needs some more work, not least to provide the output in formats other than json, but I think it proves it&#8217;s feasible. Let me know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wordloosed.com/running-yahoo-pipes-on-google-app-engine/feed</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>It&#8217;s a Sin</title>
		<link>http://www.wordloosed.com/its-a-sin</link>
		<comments>http://www.wordloosed.com/its-a-sin#comments</comments>
		<pubDate>Sat, 24 Apr 2010 19:15:22 +0000</pubDate>
		<dc:creator>greg</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://www.wordloosed.com/?p=4</guid>
		<description><![CDATA[The internet has enabled me to research something I noticed over 20 years ago. I remember watching an ITV mini-series in the 1980s that had a dramatic and memorable theme tune. Soon after, Pet Shop Boys released their massive hit &#8220;It&#8217;s &#8230; <a href="http://www.wordloosed.com/its-a-sin">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The internet has enabled me to research something I noticed over 20 years ago. I remember watching an ITV mini-series in the 1980s that had a dramatic and memorable theme tune. Soon after, Pet Shop Boys released their massive hit &#8220;It&#8217;s a Sin&#8221; and I was amazed.</p>
<p>To hear why, first listen to some of &#8220;It&#8217;s a Sin&#8221; from 1987:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/y7I5UaB7mx4&amp;hl=en_GB&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/y7I5UaB7mx4&amp;hl=en_GB&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Now listen to the theme tune of that mini-series, &#8220;If Tomorrow Comes&#8221;, composed by Nick Bicât:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/F9o0CPy1meg&amp;hl=en_GB&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/F9o0CPy1meg&amp;hl=en_GB&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>That was broadcast in 1986, <em>the year before</em> &#8220;It&#8217;s a Sin&#8221; was released.</p>
<p>I&#8217;m no musician, but they sound surprisingly the same to me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wordloosed.com/its-a-sin/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

