<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Tom Holderness</title>
	<atom:link href="http://tomholderness.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tomholderness.wordpress.com</link>
	<description>Hello world &#62; G&#039;day, mate!</description>
	<lastBuildDate>Fri, 17 May 2013 01:32:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='tomholderness.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Tom Holderness</title>
		<link>http://tomholderness.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://tomholderness.wordpress.com/osd.xml" title="Tom Holderness" />
	<atom:link rel='hub' href='http://tomholderness.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Creating spatial magic with GeoAlchemy2 and PostGIS</title>
		<link>http://tomholderness.wordpress.com/2013/05/17/creating-spatial-magic-with-geoalchemy2-and-postgis/</link>
		<comments>http://tomholderness.wordpress.com/2013/05/17/creating-spatial-magic-with-geoalchemy2-and-postgis/#comments</comments>
		<pubDate>Fri, 17 May 2013 01:32:18 +0000</pubDate>
		<dc:creator>tomholderness</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[GeoAlchemy2]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Map]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SQLAlchemy]]></category>

		<guid isPermaLink="false">http://tomholderness.wordpress.com/?p=941</guid>
		<description><![CDATA[I recently discovered the GeoAlchemy2 project &#8211; a replacement for the original GeoAlchemy package, focused on providing PostGIS support for SQLAlchemy. The SQLAlchemy package is a &#8220;Python SQL Toolkit and Object Relational Mapper&#8221;. In a nutshell this means you can &#8230; <a href="http://tomholderness.wordpress.com/2013/05/17/creating-spatial-magic-with-geoalchemy2-and-postgis/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=941&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:justify;">I recently discovered the <a href="https://github.com/geoalchemy/geoalchemy2" target="_blank">GeoAlchemy2 </a>project &#8211; a replacement for the original <a href="http://www.geoalchemy.org/" target="_blank">GeoAlchemy</a> package, focused on providing PostGIS support for <a href="http://www.sqlalchemy.org/" target="_blank">SQLAlchemy</a>. The SQLAlchemy package is a &#8220;Python SQL Toolkit and Object Relational Mapper&#8221;. In a nutshell this means you can write Python classes and map them to PostgreSQL tables without the need to write SQL statements &#8211; pretty cool!</p>
<p style="text-align:justify;">PostGIS is great for doing spatial stuff, but if you&#8217;re using it as back-end for a Python app then you can spend a lot of time writing Python wrappers around SQL statements, and even with the excellent <a href="http://initd.org/psycopg/" target="_blank">Psycopg2</a> package this can be tricky. This is especially true if you&#8217;re using the <a href="http://www.gdal.org/ogr/ogr_apitut.html" target="_blank">OGR Python</a> bindings to handle PostGIS read/writes.</p>
<p style="text-align:justify;">Enter GeoAlchmey2. I&#8217;ve been experimenting with it for a week, in that time I&#8217;ve learnt this:</p>
<blockquote>
<p style="text-align:justify;"><em><strong>For developing geospatial Python apps with PostGIS, GeoAlchemy2 is nothing short of revolutionary</strong>.</em></p>
</blockquote>
<p style="text-align:justify;">You can call PostGIS functions in Python, which means you can use them (and the data) directly within your Python application logic. Here&#8217;s an example. The SQL statement below uses PostGIS to create a new line geometry between a point, and the closest point on the nearest line.</p>
<p><script src="https://gist.github.com/talltom/014a9aeb86ee3f74110d.js"></script></p>
<p style="text-align:justify;">Now here&#8217;s a snippet from a Python script, performing the same process using GeoAlchemy2.</p>
<p><script src="https://gist.github.com/talltom/835e88c7ca2dd9bec385.js"></script></p>
<p style="text-align:justify;">You&#8217;ll notice here that we&#8217;re actually calling our own Python function &#8220;<span style="color:#333399;">make_link_line</span>&#8221; during the query to create the new geometry. This exemplifies how we can move PostGIS objects around inside the script. Once the query runs we can access the returned data in our application from the row variable. Below is the complete script.</p>
<p>Nearest neighbour PostGIS and GeoAlchemy2 script:</p>
<p><script src="https://gist.github.com/talltom/5596297.js"></script></p>
<p style="text-align:justify;">The script above is just a simple example, but it shows how powerful GeoAlchemy2 is for embedding PostGIS objects and methods inside Python. I&#8217;m really looking forward to digging deeper into the functionality of GeoAlchemy2 and SQLAlchemy to integrate them within my own projects. Check out the official tutorials for more examples: <a href="https://geoalchemy-2.readthedocs.org/en/latest/#tutorials" rel="nofollow">https://geoalchemy-2.readthedocs.org/en/latest/#tutorials</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tomholderness.wordpress.com/941/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tomholderness.wordpress.com/941/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=941&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tomholderness.wordpress.com/2013/05/17/creating-spatial-magic-with-geoalchemy2-and-postgis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/22aa8332da7c17eb428e868e50e02aec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tomholderness</media:title>
		</media:content>
	</item>
		<item>
		<title>London land use map</title>
		<link>http://tomholderness.wordpress.com/2013/02/13/london-land-use-map/</link>
		<comments>http://tomholderness.wordpress.com/2013/02/13/london-land-use-map/#comments</comments>
		<pubDate>Wed, 13 Feb 2013 21:44:50 +0000</pubDate>
		<dc:creator>tomholderness</dc:creator>
				<category><![CDATA[Maps]]></category>
		<category><![CDATA[Cartography]]></category>
		<category><![CDATA[Land cover]]></category>
		<category><![CDATA[Map]]></category>

		<guid isPermaLink="false">http://tomholderness.wordpress.com/?p=921</guid>
		<description><![CDATA[As part of my PhD I had to produce a land cover map for the Greater London area. I derived a simple land cover classification using the UKMap Basemap (which I previously used to generate the 3D London map). Click on &#8230; <a href="http://tomholderness.wordpress.com/2013/02/13/london-land-use-map/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=921&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>As part of my PhD I had to produce a land cover map for the Greater London area. I derived a simple land cover classification using the UKMap Basemap (which I previously used to generate the <a title="3DLondon" href="http://tomholderness.wordpress.com/2012/12/12/3dlondon/">3D London map</a>). Click on the image below to see a larger version (1.8Mb at 300dpi).</p>
<div id="attachment_922" class="wp-caption aligncenter" style="width: 594px"><a href="http://tomholderness.files.wordpress.com/2013/02/london_ukmap_landcover_300dpi.jpg"><img class="size-large wp-image-922" alt="London land cover map" src="http://tomholderness.files.wordpress.com/2013/02/london_ukmap_landcover_300dpi.jpg?w=584&#038;h=412" width="584" height="412" /></a><p class="wp-caption-text">Land cover in the Greater London area</p></div>
<p>I created the layers using PostGIS tables for each land cover type, based on the Basemap&#8217;s Feature Type Code (FTC), which classifies land use based on the National Land Use Database. Using separate tables also significantly improved rendering performance in Quantum GIS (QGIS), which I used for the cartography. I was impressed by QGIS&#8217; ability to process and render such a detailed data-set (the Basemap contains ~11 million polygons for London).</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tomholderness.wordpress.com/921/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tomholderness.wordpress.com/921/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=921&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tomholderness.wordpress.com/2013/02/13/london-land-use-map/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/22aa8332da7c17eb428e868e50e02aec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tomholderness</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/02/london_ukmap_landcover_300dpi.jpg?w=584" medium="image">
			<media:title type="html">London land cover map</media:title>
		</media:content>
	</item>
		<item>
		<title>Travelling bookcase</title>
		<link>http://tomholderness.wordpress.com/2013/02/07/travelling-bookcase/</link>
		<comments>http://tomholderness.wordpress.com/2013/02/07/travelling-bookcase/#comments</comments>
		<pubDate>Thu, 07 Feb 2013 23:22:00 +0000</pubDate>
		<dc:creator>tomholderness</dc:creator>
				<category><![CDATA[Woodwork]]></category>
		<category><![CDATA[Carpentry]]></category>
		<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">https://tomholderness.wordpress.com/?p=892</guid>
		<description><![CDATA[As I had a lot of spare time on my hands before Christmas I decided to build a bookcase as a present for my girlfriend (an avid book reader and collector). The design is based on &#8216;nomad style&#8217; furniture, which &#8230; <a href="http://tomholderness.wordpress.com/2013/02/07/travelling-bookcase/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=892&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>As I had a lot of spare time on my hands before Christmas I decided to build a bookcase as a present for my girlfriend (an avid book reader and collector). The design is based on &#8216;nomad style&#8217; furniture, which doesn&#8217;t require nails or glue &#8211; I really liked the idea that it can be dismantled and easily transported. I got my inspiration from <a href="http://m.instructables.com/id/Nomad-Furniture%3a-design%2c-case-studies%2c-and-philoso/">instructables</a>.</p>
<div id="attachment_893" class="wp-caption aligncenter" style="width: 347px"><a href="http://tomholderness.files.wordpress.com/2013/01/dsc_0087.jpg"><img class="size-large wp-image-893" title="The finished product" alt="DSC_0087" src="http://tomholderness.files.wordpress.com/2013/01/dsc_0087.jpg?w=337&#038;h=584" width="337" height="584" /></a><p class="wp-caption-text">The finished product</p></div>
<p>The bookcase dimensions are 90x65x21cm, based on my measurements of existing bookshelves we had. The biggest challenge was finding a timber merchant who stocked plain square edged (PSE) wood that was deeper than 19cm, I think anything less is a bit shallow for most books.</p>
<p>Apart from drilling holes to help chisel some of the joints, I managed to build it without any other power tools. The lid sits on four dowel pegs, and I finished the whole thing with a couple of coats of boiled linseed oil, which provided a lovely finish. I&#8217;m happy to say it was well received on Christmas day!</p>
<p>Here are some more photos I took during construction.</p>
<div id="attachment_894" class="wp-caption aligncenter" style="width: 209px"><a href="http://tomholderness.files.wordpress.com/2013/01/imag0179.jpg"><img class="size-medium wp-image-894" alt="Searching for knot-free PSE." src="http://tomholderness.files.wordpress.com/2013/01/imag0179.jpg?w=199&#038;h=300" width="199" height="300" /></a><p class="wp-caption-text">Searching for knot-free PSE.</p></div>
<div id="attachment_897" class="wp-caption aligncenter" style="width: 209px"><a href="http://tomholderness.files.wordpress.com/2013/01/imag0189.jpg"><img class="size-medium wp-image-897" title="Making the first cut" alt="Making the first cut" src="http://tomholderness.files.wordpress.com/2013/01/imag0189.jpg?w=199&#038;h=300" width="199" height="300" /></a><p class="wp-caption-text">Is it straight?</p></div>
<div id="attachment_898" class="wp-caption aligncenter" style="width: 310px"><a href="http://tomholderness.files.wordpress.com/2013/01/imag0193.jpg"><img class="size-medium wp-image-898" title="Work in progress" alt="Work in progress" src="http://tomholderness.files.wordpress.com/2013/01/imag0193.jpg?w=300&#038;h=199" width="300" height="199" /></a><p class="wp-caption-text">Work in progress</p></div>
<div id="attachment_899" class="wp-caption aligncenter" style="width: 310px"><a href="http://tomholderness.files.wordpress.com/2013/01/imag0201.jpg"><img class="size-medium wp-image-899 " title="Cutting the first shelf tenon joint" alt="Cutting the first shelf tenon joint" src="http://tomholderness.files.wordpress.com/2013/01/imag0201.jpg?w=300&#038;h=199" width="300" height="199" /></a><p class="wp-caption-text">Cutting the first shelf tenon joint</p></div>
<div class="wp-caption aligncenter" style="width: 209px"><a href="http://tomholderness.files.wordpress.com/2013/01/imag0206.jpg"><img title="The finished shelves" alt="The finished shelves" src="http://tomholderness.files.wordpress.com/2013/01/imag0206.jpg?w=199&#038;h=300" width="199" height="300" /></a><p class="wp-caption-text">The finished shelves</p></div>
<div id="attachment_901" class="wp-caption aligncenter" style="width: 209px"><a href="http://tomholderness.files.wordpress.com/2013/01/imag0231.jpg"><img class="size-medium wp-image-901" title="Cutting the holes in the uprights" alt="Cutting the holes in the uprights" src="http://tomholderness.files.wordpress.com/2013/01/imag0231.jpg?w=199&#038;h=300" width="199" height="300" /></a><p class="wp-caption-text">Cutting the holes in the uprights</p></div>
<div id="attachment_902" class="wp-caption aligncenter" style="width: 209px"><a href="http://tomholderness.files.wordpress.com/2013/01/imag0233.jpg"><img class="size-medium wp-image-902" title="Testing the shelves for fit" alt="Testing the shelves for fit" src="http://tomholderness.files.wordpress.com/2013/01/imag0233.jpg?w=199&#038;h=300" width="199" height="300" /></a><p class="wp-caption-text">Testing the shelves for fit</p></div>
<div id="attachment_903" class="wp-caption aligncenter" style="width: 209px"><a href="http://tomholderness.files.wordpress.com/2013/01/imag0238.jpg"><img class="size-medium wp-image-903 " title="Is it level?" alt="A surveyor's dream." src="http://tomholderness.files.wordpress.com/2013/01/imag0238.jpg?w=199&#038;h=300" width="199" height="300" /></a><p class="wp-caption-text">A surveyor&#8217;s dream</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tomholderness.wordpress.com/892/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tomholderness.wordpress.com/892/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=892&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tomholderness.wordpress.com/2013/02/07/travelling-bookcase/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/22aa8332da7c17eb428e868e50e02aec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tomholderness</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/dsc_0087.jpg?w=337" medium="image">
			<media:title type="html">The finished product</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/imag0179.jpg?w=199" medium="image">
			<media:title type="html">Searching for knot-free PSE.</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/imag0189.jpg?w=199" medium="image">
			<media:title type="html">Making the first cut</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/imag0193.jpg?w=300" medium="image">
			<media:title type="html">Work in progress</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/imag0201.jpg?w=300" medium="image">
			<media:title type="html">Cutting the first shelf tenon joint</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/imag0206.jpg?w=199" medium="image">
			<media:title type="html">The finished shelves</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/imag0231.jpg?w=199" medium="image">
			<media:title type="html">Cutting the holes in the uprights</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/imag0233.jpg?w=199" medium="image">
			<media:title type="html">Testing the shelves for fit</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/imag0238.jpg?w=199" medium="image">
			<media:title type="html">Is it level?</media:title>
		</media:content>
	</item>
		<item>
		<title>Confidence intervals of simple linear regression</title>
		<link>http://tomholderness.wordpress.com/2013/01/10/confidence_intervals/</link>
		<comments>http://tomholderness.wordpress.com/2013/01/10/confidence_intervals/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 19:35:32 +0000</pubDate>
		<dc:creator>tomholderness</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[regression]]></category>
		<category><![CDATA[statistics]]></category>

		<guid isPermaLink="false">http://tomholderness.wordpress.com/?p=877</guid>
		<description><![CDATA[Plotting confidence intervals of linear regression in Python After a friendly tweet from @tomstafford who mentioned that this script was useful I&#8217;ve re-posted it here in preparation for the removal of my Newcastle University pages. This script calculates and plots &#8230; <a href="http://tomholderness.wordpress.com/2013/01/10/confidence_intervals/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=877&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h2>Plotting confidence intervals of linear regression in Python</h2>
<p>After a friendly tweet from <a href="https://twitter.com/tomstafford" target="_blank">@tomstafford </a>who mentioned that this script was useful I&#8217;ve re-posted it here in preparation for the removal of my <a href="http://staff.ncl.ac.uk/tom.holderness" target="_blank">Newcastle University pages</a>.</p>
<p>This script calculates and plots confidence intervals around a linear regression based on new observations. After I couldn&#8217;t find anything similar on the internet I developed my own implementation based on <a href="http://books.google.co.uk/books?id=IQ7LnlAPE_gC&amp;dq=ebdon+statistics+geography&amp;hl=en&amp;sa=X&amp;ei=NGXTT62sM8eu8gPl5fWaAw&amp;redir_esc=y" target="_blank">Statistics in Geography by David Ebdon (ISBN: 978-0631136880)</a>.</p>
<div id="attachment_884" class="wp-caption aligncenter" style="width: 431px"><a href="http://tomholderness.files.wordpress.com/2013/01/linearfit.png"><img class=" wp-image-884  " alt="Linear regression plot" src="http://tomholderness.files.wordpress.com/2013/01/linearfit.png?w=421&#038;h=387" width="421" height="387" /></a><p class="wp-caption-text">Plot of linear regression with confidence intervals</p></div>
<pre class="brush: python; title: ; notranslate">
# linfit.py - example of confidence limit calculation for linear regression fitting.

# References:
# - Statistics in Geography by David Ebdon (ISBN: 978-0631136880)
# - Reliability Engineering Resource Website:
# - http://www.weibull.com/DOEWeb/confidence_intervals_in_simple_linear_regression.htm
# - University of Glascow, Department of Statistics:
# - http://www.stats.gla.ac.uk/steps/glossary/confidence_intervals.html#conflim

import numpy as np
import matplotlib.pyplot as plt

# example data
x = np.array([4.0,2.5,3.2,5.8,7.4,4.4,8.3,8.5])
y = np.array([2.1,4.0,1.5,6.3,5.0,5.8,8.1,7.1])

# fit a curve to the data using a least squares 1st order polynomial fit
z = np.polyfit(x,y,1)
p = np.poly1d(z)
fit = p(x)

# get the coordinates for the fit curve
c_y = [np.min(fit),np.max(fit)]
c_x = [np.min(x),np.max(x)]

# predict y values of origional data using the fit
p_y = z[0] * x + z[1]

# calculate the y-error (residuals)
y_err = y -p_y

# create series of new test x-values to predict for
p_x = np.arange(np.min(x),np.max(x)+1,1)

# now calculate confidence intervals for new test x-series
mean_x = np.mean(x)			# mean of x
n = len(x)				# number of samples in origional fit
t = 2.31				# appropriate t value (where n=9, two tailed 95%)
s_err = np.sum(np.power(y_err,2))	# sum of the squares of the residuals

confs = t * np.sqrt((s_err/(n-2))*(1.0/n + (np.power((p_x-mean_x),2)/
			((np.sum(np.power(x,2)))-n*(np.power(mean_x,2))))))

# now predict y based on test x-values
p_y = z[0]*p_x+z[0]

# get lower and upper confidence limits based on predicted y and confidence intervals
lower = p_y - abs(confs)
upper = p_y + abs(confs)

# set-up the plot
plt.axes().set_aspect('equal')
plt.xlabel('X values')
plt.ylabel('Y values')
plt.title('Linear regression and confidence limits')

# plot sample data
plt.plot(x,y,'bo',label='Sample observations')

# plot line of best fit
plt.plot(c_x,c_y,'r-',label='Regression line')

# plot confidence limits
plt.plot(p_x,lower,'b--',label='Lower confidence limit (95%)')
plt.plot(p_x,upper,'b--',label='Upper confidence limit (95%)')

# set coordinate limits
plt.xlim(0,11)
plt.ylim(0,11)

# configure legend
plt.legend(loc=0)
leg = plt.gca().get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize=10)

# show the plot
plt.show()
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tomholderness.wordpress.com/877/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tomholderness.wordpress.com/877/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=877&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tomholderness.wordpress.com/2013/01/10/confidence_intervals/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/22aa8332da7c17eb428e868e50e02aec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tomholderness</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/linearfit.png?w=584" medium="image">
			<media:title type="html">Linear regression plot</media:title>
		</media:content>
	</item>
		<item>
		<title>Raspberry Pi Temperature Server</title>
		<link>http://tomholderness.wordpress.com/2013/01/03/raspberry-pi-temperature-server/</link>
		<comments>http://tomholderness.wordpress.com/2013/01/03/raspberry-pi-temperature-server/#comments</comments>
		<pubDate>Thu, 03 Jan 2013 14:33:49 +0000</pubDate>
		<dc:creator>tomholderness</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[RaspberryPi]]></category>
		<category><![CDATA[sensor]]></category>

		<guid isPermaLink="false">http://tomholderness.wordpress.com/?p=176</guid>
		<description><![CDATA[Using NodeJS to develop a temperature server with the Raspberry Pi The Raspbian Linux distribution for the Raspberry Pi includes some useful kernel drivers for accessing devices connected to the Pi&#8217;s GPIO pins. Based on the tutorial from the University &#8230; <a href="http://tomholderness.wordpress.com/2013/01/03/raspberry-pi-temperature-server/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=176&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h1>Using NodeJS to develop a temperature server with the Raspberry Pi</h1>
<p>The <a href="http://www.raspbian.org/" target="_blank">Raspbian</a> Linux distribution for the <a href="http://www.raspberrypi.org/" target="_blank">Raspberry Pi</a> includes some useful kernel drivers for accessing devices connected to the Pi&#8217;s <a href="http://elinux.org/RPi_Low-level_peripherals#General_Purpose_Input.2FOutput_.28GPIO.29" target="_blank">GPIO</a> pins. Based on the <a href="http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/temperature/">tutorial</a> from the University of Cambridge Computer Laboratory I&#8217;ve been playing around with the <a href="https://www.sparkfun.com/products/245"> DS18B20</a> digital thermometer on the Pi. I&#8217;ve connected the sensor to the Pi using a standard electronics breadboard and the excellent <a href="http://learn.adafruit.com/adafruit-pi-cobbler-kit/overview">Adafruit Pi Cobbler</a> breakout connector kit (kudos to Mills for her excellent soldering skills). When the required GPIO kernel modules are loaded a file containing sensor output is written to the /sys/bus directory (see tutorial link above for more) which contains the current thermometer reading.</p>
<div id="attachment_845" class="wp-caption aligncenter" style="width: 477px"><a href="http://tomholderness.files.wordpress.com/2013/01/pi_temp_sensor_scaled.jpg"><img class=" wp-image-845 " alt="Raspberry Pi &amp; DS18B20" src="http://tomholderness.files.wordpress.com/2013/01/pi_temp_sensor_scaled.jpg?w=467&#038;h=350" width="467" height="350" /></a><p class="wp-caption-text">Raspberry Pi &amp; DS18B20 digital thermometer</p></div>
<h1>Developing with NodeJS</h1>
<p>I originally wrote a Python CGI script as part of the <a href="http://pibakeoff.leedshack.com/" target="_blank">CPC Pi Hack</a> event to parse the sensor file and display the temperature on a web page (although we didn&#8217;t submit our hack in the end), but I&#8217;ve also been looking for a project for a while to try out <a href="http://nodejs.org/" target="_blank">NodeJS</a>.The result is a prototype JavaScript server/client app to serve temperature from the Pi as a JSON string and display a graph of current temperature on the client.</p>
<p>This was my first NodeJS app and I was impressed with the speed of development and the readability of documentation/examples &#8211; so much so that I managed to write the bulk of the server on my netbook during a flight from Leeds to London! The biggest disadvantage of using NodeJS on the Pi is the time it takes to compile (1hr 58 minutes, Pi CPU clocked at 950MHz). While this may put some developers off, the build process was painless and is more than made up for by the efficient asynchronous nature of NodeJS once you get it running (first-pass testing shows no noticeable increase in memory/CPU when the server is under load although I&#8217;ve not investigated this thoroughly).</p>
<p>The server code is divided into two parts: a dynamic server response which is called when a request for the &#8220;temperature.json&#8221; URL is received. The server reads the sensor file, parses the data and returns the temperature with a Unix time-stamp in JSON notation. Here&#8217;s a snippet from the server code parsing and returning the temperature data:</p>
<pre class="brush: jscript; gutter: false; title: ; notranslate">
// Read data from file (using fast node ASCII encoding).
var data = buffer.toString('ascii').split(&quot; &quot;); // Split by space

// Extract temperature from string and divide by 1000 to give celsius
var temp = parseFloat(data[data.length-1].split(&quot;=&quot;)[1])/1000.0;

// Round to one decimal place
temp = Math.round(temp * 10) / 10

// Add date/time to temperature
var jsonData = [Date.now(), temp];

// Return JSON data
response.writeHead(200, { &quot;Content-type&quot;: &quot;application/json&quot; });
response.end(JSON.stringify(jsonData), &quot;ascii&quot;);
</pre>
<p>The second section of the server uses the <a href="https://github.com/cloudhead/node-static" target="_blank">node-static</a> module to serve a client-side page which performs an AJAX call for &#8220;temperature.json&#8221; and plots current temperature. The plot is created using the <a href="http://www.highcharts.com/" target="_blank">highcharts</a> JavaScript package to create a dynamic graph which moves along the x-axis over time (check out the highcharts <a href="http://www.highcharts.com/demo/dynamic-update" target="_blank">demo page</a> to get a better idea of dynamic charts). One thing to note is that the sensor precision is ±0.5 °C, and while the temperature data is rounded to one decimal place, the default highcharts y-axis precision may be a bit misleading. Overall though the highcharts package is pretty slick, and the plot looks great on my new Nexus 7!</p>
<div id="attachment_819" class="wp-caption aligncenter" style="width: 707px"><a href="http://tomholderness.files.wordpress.com/2013/01/plot1.png"><img class=" wp-image-819 " alt="Temperature Plot" src="http://tomholderness.files.wordpress.com/2013/01/plot1.png?w=697&#038;h=509" width="697" height="509" /></a><p class="wp-caption-text">Raspberry Pi Temperature Sensor Plot</p></div>
<p>I&#8217;ve pushed the code to <a href="https://github.com/talltom/PiThermServer" target="_blank">GitHub</a> as it may be useful to others who are also new to the Pi and NodeJS. One of the features of NodeJS I like the most is the ease of testing and deployment &#8211; you can run the server right in the terminal window without super-user permissions and get debugging info straight away. Furthermore, given the ease of creating web-apps and the small resource footprint (obviously depending on what you&#8217;re doing) I&#8217;ll definitely be looking to use NodeJS/JavaScript as development platform for the Pi in the future.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tomholderness.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tomholderness.wordpress.com/176/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=176&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tomholderness.wordpress.com/2013/01/03/raspberry-pi-temperature-server/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/22aa8332da7c17eb428e868e50e02aec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tomholderness</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/pi_temp_sensor_scaled.jpg?w=584" medium="image">
			<media:title type="html">Raspberry Pi &#38; DS18B20</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2013/01/plot1.png" medium="image">
			<media:title type="html">Temperature Plot</media:title>
		</media:content>
	</item>
		<item>
		<title>3DLondon</title>
		<link>http://tomholderness.wordpress.com/2012/12/12/3dlondon/</link>
		<comments>http://tomholderness.wordpress.com/2012/12/12/3dlondon/#comments</comments>
		<pubDate>Wed, 12 Dec 2012 10:38:18 +0000</pubDate>
		<dc:creator>tomholderness</dc:creator>
				<category><![CDATA[Maps]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[CGI]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Map]]></category>
		<category><![CDATA[OSM]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[UKMap]]></category>

		<guid isPermaLink="false">http://tomholderness.wordpress.com/?p=117</guid>
		<description><![CDATA[Visualising London&#8217;s buildings with 3D mapping I recently discovered a JavaScript library called OSM Buildings which provides a 3D representation of buildings from Open Street Map (OSM) data on a 2D map. OSM Buildings doesn&#8217;t generate a complete 3D model &#8230; <a href="http://tomholderness.wordpress.com/2012/12/12/3dlondon/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=117&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h1>Visualising London&#8217;s buildings with 3D mapping</h1>
<p>I recently discovered a JavaScript library called <a title="OSM Buildings" href="http://osmbuildings.org/" target="_blank">OSM Buildings</a> which provides a 3D representation of buildings from <a title="Open Street Map" href="http://www.openstreetmap.org" target="_blank">Open Street Map</a> (OSM) data on a 2D map. OSM Buildings doesn&#8217;t generate a complete 3D model but uses a clever shading technique to make buildings appear &#8217;3D&#8217;. OSM Buildings and can be used with either <a title="OpenLayers" href="http://openlayers.org/" target="_blank">OpenLayers</a> or the <a title="LeafletJS" href="http://leafletjs.com/" target="_blank">Leaflet</a> JavaScript map API&#8217;s.</p>
<p><a href="https://raw.github.com/talltom/3DLondon/master/screenshot.png"><img alt="3DLondon map screenshot" src="https://raw.github.com/talltom/3DLondon/master/screenshot.png" /></a></p>
<p>I was interested in whether OSM Buildings could be used to visualise non-OSM data, in particular the Geoinformation group&#8217;s <a title="UKMap" href="http://www.geoinformationgroup.co.uk/products/ukmap" target="_blank">UKMap </a>product, to create a complete &#8217;3D&#8217; city map. The UK map database is a commercial, attribute rich, map database designed to compete with the UK&#8217;s Ordnance Survey products, and contains a LiDAR derived height for most structures in urban areas. Furthermore, UK academics can access the UKMap data via the MIMAS <a title="Landmap" href="http://www.landmap.ac.uk/" target="_blank">Landmap</a> service. As part of my <a title="About" href="http://tomholderness.wordpress.com/about/" target="_blank">PhD research</a> I obtained a copy of the UKMap basemap and building heights for London from the Landmap team.</p>
<p>The OSM Buildings API provides a method to add a buildings layer from a GeoJSON object, so I wrote a simple <a title="get_geojson" href="https://github.com/talltom/3DLondon/blob/master/get_geojson.py" target="_blank">Python CGI script</a> to grab building features from the UKMap PostGIS database and return it as GeoJSON. The embedded SQL query (via the excellent <a title="Psycopg" href="http://www.initd.org/psycopg/" target="_blank">Psycopg</a> module) uses the new PostGIS 2.0 function ST_AsGeoJSON to return a JSON representation of the geometry. Unfortunately this isn&#8217;t as straight forward as it seems as PostGIS doesn&#8217;t return any feature attributes. However after reading this <a title="JSON and PostGIS" href="http://www.postgresonline.com/journal/archives/267-Creating-GeoJSON-Feature-Collections-with-JSON-and-PostGIS-functions.html" target="_blank">blog</a> at the Postgres online journal and installing Andrew Dunstan&#8217;s backport of JSON support for <a href="https://bitbucket.org/adunstan/json_91" target="_blank">PostgreSQL 9.1</a>, I managed to get the query to return proper JSON representation of the attributes and geometry.</p>
<p>To reduce data volume (there are ~5 million features in the database) the CGI script accepts a bounding box parameter in well known text form, and only features within the bounding box are returned. Here&#8217;s a snippet showing the SQL query:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT row_to_json(fc)
FROM (SELECT 'FeatureCollection' As type, array_to_json(array_agg(f)) As features
      FROM (SELECT 'Feature' As type,
            ST_AsGeoJSON(ST_Transform(lg.the_geom,4326))::json As geometry,
            row_to_json((SELECT l FROM (SELECT height) As l)) As properties
            FROM &quot;3DLondon&quot; As lg
            WHERE ST_Within(lg.the_geom,
            ST_Transform(ST_GeomFromText(%s,4326),27700))
            LIMIT 100000)
      As f )
As fc;',[bbox_wkt])
</pre>
<p>A sample of the features and their geometry returned as GeoJSON:</p>
<pre class="brush: jscript; title: ; notranslate">
{&quot;type&quot;:&quot;FeatureCollection&quot;,&quot;features&quot;:[{&quot;type&quot;:&quot;Feature&quot;,&quot;geometry&quot;:{&quot;type&quot;:&quot;MultiPolygon&quot;,&quot;coordinates&quot;:[[[[-0.099928777847266,51.514483900172905],[-0.100343210931384,51.514457880418973],
//...
</pre>
<p>Thanks to some good documentation at OSM Buildings the front end is a simple JavaScript function to add the buildings to the map via a jQuery post AJAX call.</p>
<pre class="brush: jscript; title: ; notranslate">
//Request data from GeoJson server and add to map
function getBuildings(bounds_wkt){
	jQuery.postJSON('/3DLondon/get_geojson.py?bbox_wkt='+bounds_wkt,
   function(data){
		build
     		.addTo(map)
	        .setStyle({ wallColor: 'rgb(200,190,180)', roofColor: 'null',
                        strokeRoofs: true })
     		.geoJSON(data)
		;
		});
};
</pre>
<p>Using this function it was fairly straightforward to add some functions to listen for Leaflet map events to refresh the building data when the map was moved or zoomed.</p>
<pre class="brush: jscript; title: ; notranslate">
//Listen for map pan events and get new buildings data
map.on('moveend', function(e) {
   getBuildings(getBBoxWKT());
});
</pre>
<p>From the screenshot above you can see that OSM Buildings is doing a great job of rendering stuff in &#8217;3D&#8217;. The basemap is Open Street Map data, styled and served by <a title="CloudMade" href="http://cloudmade.com/" target="_blank">CloudMade</a> with OSM building footprints removed for clarity. In a nutshell I was pretty impressed with both the OSM Buildings and the Leaflet libraries. You can check out the complete source code at <a title="3DLondon on github" href="https://github.com/talltom/3DLondon" target="_blank">https://github.com/talltom/3DLondon</a>, and here&#8217;s another screenshot over a larger area with the buildings rendered in blue.</p>
<div id="attachment_149" class="wp-caption alignnone" style="width: 1034px"><a href="http://tomholderness.files.wordpress.com/2012/12/3dlondon_large_scale.png"><img class="size-large wp-image-149" alt="3DLondon map screenshot" src="http://tomholderness.files.wordpress.com/2012/12/3dlondon_large_scale.png?w=1024&#038;h=650" width="1024" height="650" /></a><p class="wp-caption-text">3DLondon map of St Paul&#8217;s/The City and surrounds</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tomholderness.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tomholderness.wordpress.com/117/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=117&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tomholderness.wordpress.com/2012/12/12/3dlondon/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/22aa8332da7c17eb428e868e50e02aec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tomholderness</media:title>
		</media:content>

		<media:content url="https://raw.github.com/talltom/3DLondon/master/screenshot.png" medium="image">
			<media:title type="html">3DLondon map screenshot</media:title>
		</media:content>

		<media:content url="http://tomholderness.files.wordpress.com/2012/12/3dlondon_large_scale.png?w=1024" medium="image">
			<media:title type="html">3DLondon map screenshot</media:title>
		</media:content>
	</item>
		<item>
		<title>PostGISDroid GitHub pages</title>
		<link>http://tomholderness.wordpress.com/2012/12/04/postgisdroid-github-pages/</link>
		<comments>http://tomholderness.wordpress.com/2012/12/04/postgisdroid-github-pages/#comments</comments>
		<pubDate>Tue, 04 Dec 2012 21:11:52 +0000</pubDate>
		<dc:creator>tomholderness</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[GeoSpatial]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://tomholderness.wordpress.com/?p=103</guid>
		<description><![CDATA[Following in the footsteps of the Raster Processing Suite, I&#8217;ve added GitHub pages for the PostGISDroid script which I wrote last year. This was a prototype Python script, built on the Android scripting layer, to log the location of an &#8230; <a href="http://tomholderness.wordpress.com/2012/12/04/postgisdroid-github-pages/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=103&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Following in the footsteps of the <a title="Raster Processing Suite at GitHub" href="http://tomholderness.wordpress.com/2012/12/03/raster-processing-suite-at-github/">Raster Processing Suite</a>, I&#8217;ve added GitHub pages for the <a title="PostGIS Droid GitHub pages" href="http://talltom.github.com/PostGISDroid" target="_blank">PostGISDroid</a> script which I wrote last year. This was a prototype Python script, built on the Android scripting layer, to log the location of an Android device to a remote PostGIS server. Check it out here: <a href="http://talltom.github.com/PostGISDroid" rel="nofollow">http://talltom.github.com/PostGISDroid</a>.</p>
<p><a href="http://talltom.github.com/PostGISDroid/"><img alt="PostGISDroid track in QGIS" src="http://talltom.github.com/PostGISDroid/images/qgis_PostGISDroid_track.png"></a><br />
A track from PostGISDroid in Quantum GIS.</p>
<p>If you&#8217;re looking for a full-blown Android client for mobile data acquisition check out the Sense Cloud Framework: <a title="SenseCloud" href="http://ceg-sense.ncl.ac.uk/geoanorak/nclsensecloud.html" target="_blank">http://ceg-sense.ncl.ac.uk/geoanorak/nclsensecloud.html</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tomholderness.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tomholderness.wordpress.com/103/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=103&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tomholderness.wordpress.com/2012/12/04/postgisdroid-github-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/22aa8332da7c17eb428e868e50e02aec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tomholderness</media:title>
		</media:content>

		<media:content url="http://talltom.github.com/PostGISDroid/images/qgis_PostGISDroid_track.png" medium="image">
			<media:title type="html">PostGISDroid track in QGIS</media:title>
		</media:content>
	</item>
		<item>
		<title>Raster Processing Suite at GitHub</title>
		<link>http://tomholderness.wordpress.com/2012/12/03/raster-processing-suite-at-github/</link>
		<comments>http://tomholderness.wordpress.com/2012/12/03/raster-processing-suite-at-github/#comments</comments>
		<pubDate>Mon, 03 Dec 2012 23:49:52 +0000</pubDate>
		<dc:creator>tomholderness</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[PhD]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Raster]]></category>

		<guid isPermaLink="false">http://tomholderness.wordpress.com/?p=76</guid>
		<description><![CDATA[As mentioned previously I&#8217;m in the process of migrating content from my Newcastle pages to this site. Given that I&#8217;m already hosting most of my software projects on GitHub, I&#8217;ve taken the leap and created GitHub pages for the Raster &#8230; <a href="http://tomholderness.wordpress.com/2012/12/03/raster-processing-suite-at-github/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=76&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>As mentioned <a title="Winter migration" href="http://tomholderness.wordpress.com/2012/10/16/winter-migration/">previously</a> I&#8217;m in the process of migrating content from my <a href="http://www.staff.ncl.ac.uk/tom.holderness" target="_blank">Newcastle pages</a> to this site. Given that I&#8217;m already hosting most of my software projects on GitHub, I&#8217;ve taken the leap and created GitHub pages for the <a title="Raster Processing Suite" href="http://talltom.github.com/Raster-Processing-Suite/" target="_blank">Raster Processing Suite</a> QGIS plug-in. The Raster Processing Suite is a nifty bit of software I developed as part of my PhD thesis, to help with exploratory numerical analysis of time series AVHRR satellite imagery (see <a title="Publications" href="http://tomholderness.wordpress.com/documents#publications">Holderness et al., 2013</a>). Part of the <a title="PyRaster" href="https://github.com/talltom/PyRaster" target="_blank">PyRaster tools</a> (more on those soon) created during my PhD, the Raster Processing Suite is a raster calculator with a Python scripting interface (including automatic script generation) for raster image processing in Quantum GIS (see screen-shot below).</p>
<p><a title="GitHub pages" href="https://help.github.com/articles/what-are-github-pages" target="_blank">GitHub</a> pages provide free web hosting for content related to software projects. You can check out the Raster Processing Suite at <a title="Raster Processing Suite" href="http://tomholderness.wordpress.com/contact/" target="_blank">https://github.com/talltom/PyRaster</a>. Furthermore, with a bit of tweaking I&#8217;ve also managed to get the pages to host the QGIS XML repository for direct download into QGIS: <a title="Raster Processing Suite - QGIS repo" href="http://tomholderness.wordpress.com/documents/" target="_blank">http://talltom.github.com/Raster-Processing-Suite/qgis_repo.xml</a>.</p>
<p>I&#8217;ll post links to GitHub pages for other projects in the coming weeks.</p>
<div class="wp-caption alignnone" style="width: 260px"><a href="http://talltom.github.com/Raster-Processing-Suite"><img class="size-medium" alt="Screenshot of the Raster Processing Suite QGIS plug-in" src="http://talltom.github.com/Raster-Processing-Suite/images/rps_ss_2.png" height="190" width="250" /></a><p class="wp-caption-text">Screen-shot of the Raster Processing Suite QGIS plug-in</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tomholderness.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tomholderness.wordpress.com/76/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=76&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tomholderness.wordpress.com/2012/12/03/raster-processing-suite-at-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/22aa8332da7c17eb428e868e50e02aec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tomholderness</media:title>
		</media:content>

		<media:content url="http://talltom.github.com/Raster-Processing-Suite/images/rps_ss_2.png" medium="image">
			<media:title type="html">Screenshot of the Raster Processing Suite QGIS plug-in</media:title>
		</media:content>
	</item>
		<item>
		<title>Winter migration</title>
		<link>http://tomholderness.wordpress.com/2012/10/16/winter-migration/</link>
		<comments>http://tomholderness.wordpress.com/2012/10/16/winter-migration/#comments</comments>
		<pubDate>Tue, 16 Oct 2012 21:53:57 +0000</pubDate>
		<dc:creator>tomholderness</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tomholderness.wordpress.com/?p=3</guid>
		<description><![CDATA[A quick first post to mention that this blog will be the new home for my web space previously hosted by Newcastle University. I&#8217;ll be updating it and migrating software and documents from my old pages in the coming weeks.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=3&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>A quick first post to mention that this blog will be the new home for my web space previously hosted by <a title="Newcastle University" href="http://www.staff.ncl.ac.uk/tom.holderness" target="_blank">Newcastle University</a>. I&#8217;ll be updating it and migrating software and documents from my old pages in the coming weeks.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tomholderness.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tomholderness.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tomholderness.wordpress.com&#038;blog=41650184&#038;post=3&#038;subd=tomholderness&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tomholderness.wordpress.com/2012/10/16/winter-migration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/22aa8332da7c17eb428e868e50e02aec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tomholderness</media:title>
		</media:content>
	</item>
	</channel>
</rss>
