<?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>tom bh &#187; Computing</title>
	<atom:link href="http://www.tombh.co.uk/category/computing/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tombh.co.uk</link>
	<description>Making websites</description>
	<lastBuildDate>Sat, 06 Aug 2011 20:38:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The Buddhist Geeks Conference 2011</title>
		<link>http://www.tombh.co.uk/the-buddhist-geeks-conference-2011</link>
		<comments>http://www.tombh.co.uk/the-buddhist-geeks-conference-2011#comments</comments>
		<pubDate>Sat, 06 Aug 2011 02:01:45 +0000</pubDate>
		<dc:creator>tombh</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Spirituality]]></category>

		<guid isPermaLink="false">http://www.tombh.co.uk/?p=234</guid>
		<description><![CDATA[&#8220;You are totally double rainbowing my world.&#8221; Nikki Chau (@dragonc) Mosaic of all #bgeeks11 tweeters I was at the first ever Buddhist Geeks conference last week. It was epic. I&#8217;ve been to Buddhisty meetups; retreats, dharma talks and so on, and I&#8217;ve been to geeky meetups; web conferences, usability groups etc. But never have I [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p class="first-child "><span title="&#8220;Y" class="cap"><span>&#8220;Y</span></span>ou are totally double rainbowing my world.&#8221;<br />
<em> Nikki Chau (<a href="http://twitter.com/dragonc" target="_blank">@dragonc</a>)</em></p></blockquote>
<p><span id="more-234"></span></p>
<blockquote>
<p style="text-align: left;">
</blockquote>
<div class="wp-caption aligncenter" style="width: 310px;">
<p><a class="fancybox" rel="attachment" href="http://www.tombh.co.uk/wordpress/wp-content/uploads/2011/08/bg11.jpg"><img class="size-medium wp-image-236  " title="Mosaic of all #bgeeks11 tweeters" src="http://www.tombh.co.uk/wordpress/wp-content/uploads/2011/08/bg11-300x249.jpg" alt="" width="300" height="249" /></a></p>
<p class="wp-caption-text">Mosaic of all #bgeeks11 tweeters</p>
</div>
<p style="text-align: left;">
<p style="text-align: justify;">I was at <a href="http://www.buddhistgeeks.com/conference/" target="_blank">the first ever Buddhist Geeks conference</a> last week. It was epic. I&#8217;ve been to Buddhisty meetups; retreats, dharma talks and so on, and I&#8217;ve been to geeky meetups; web conferences, usability groups etc. But never have I experienced the unity of the two. The &#8216;geek&#8217; in Buddhist Geeks means a few things. Most generally it reflects the sentiment expressed in the <a href="http://web.vee.net/stuff/geek-vs-nerd.html">Jargon File&#8217;s definition</a>,</p>
<blockquote>
<p style="text-align: left;">&#8220;A person who has chosen concentration rather than conformity; one who pursues skill (especially technical skill) and imagination, not mainstream social acceptance. Geeks usually have a strong case of neophilia. Most geeks are adept with computers and treat hacker as a term of respect&#8221;</p>
</blockquote>
<div id="attachment_271" class="wp-caption aligncenter" style="width: 285px"><img class="size-medium wp-image-271 " src="http://www.tombh.co.uk/wordpress/wp-content/uploads/2011/08/rohan_geek-275x300.jpg" alt="" width="275" height="300" /><p class="wp-caption-text">Rohan Gunatillake (@rohan_21awake) — One of the conference organisers</p></div>
<p style="text-align: center;">
<p style="text-align: justify;">So, although &#8220;geeks are adept with computers&#8221;, this isn&#8217;t necessarily their defining characteristic; pride in technical knowledge and ability is also a significant ingredient. You could see this wider understanding echoed in the various titles of the talks, sessions and panels, &#8220;The Science of Enlightenment&#8221;, &#8220;Awakening is an Epic Win?&#8221;, &#8220;Disrupting the Awakening Industry&#8221;, &#8220;The Emerging Face of Buddhism&#8221;, to give just a small selection. Though to be fair there was a generous helping of traditional computing culture in the mix too; it seemed most people had a Twitter account (as the above mosaic testifies) or wrote a blog or developed some funky Mindfulness 2.0 web app. At the very least there was a reliable well of Internet vocabulary to draw on; we&#8217;d all listened to dharma talks online, watched Youtube videos of our favourite teachers, frequented or heard of the various forums and resources, and of course visited buddhistgeeks.com.</p>
<p style="text-align: justify;">I shan&#8217;t go into too much detail about the specifics of the conference events, <a href="http://www.buddhistgeeks.com/2011/08/the-bgeeks11-round-up/" target="_blank">others have documented this well already</a>, instead I&#8217;d like to ruminate more on the symbolic significance of the gathering. I&#8217;d like to start with this tweet;</p>
<p style="text-align: justify;"><img class="aligncenter size-medium wp-image-272" title="rainbow_tweet" src="http://www.tombh.co.uk/wordpress/wp-content/uploads/2011/08/rainbow_tweet-300x177.png" alt="" width="300" height="177" /></p>
<p style="text-align: justify;">If you haven&#8217;t heard of the Double Rainbow meme (or Internet memes at all for that matter) then take a look at <a href="http://knowyourmeme.com/memes/double-rainbow" target="_blank">Know Your Meme&#8217;s entry</a> in their comprehensive &#8216;meme database&#8217;. I find Internet memes truly fascinating, often hilarious and sometimes disturbing. On the surface, the endless torrents of apparently banal and tedious, say, <a href="http://icanhascheezburger.com/">cat pictures</a>, may seem desperately irrelevant and mind-numbing, but I see a deeper truth behind it all. The Web — as Ethan Nichtern pointed out in his Saturday talk, &#8220;The Internet is not your Teacher&#8221; — contains the two extremes of life and everything in between; from the profoundly uplifting to the sickeningly depressing. As someone who spends a lot of time surfing the Net, this ease of access to life&#8217;s poles of significance can lead to what I&#8217;d like to term, an ironic irreverence. When, on a daily basis, you bear witness to the myriad facets of our diverse universe — from the personal, the courageous, the virtuoso, the embarrassing and the political, to the natural, the microscopic, the galactic and the historical  — one develops a certain ennui.</p>
<p style="text-align: justify;">
<div id="attachment_287" class="wp-caption aligncenter" style="width: 235px"><img class="size-medium wp-image-287" title="2011-07-31 07.54.49" src="http://www.tombh.co.uk/wordpress/wp-content/uploads/2011/08/2011-07-31-07.54.49-e1312591317558-225x300.jpg" alt="" width="225" height="300" /><p class="wp-caption-text">The venerable David Tolmie (@dtolmie) eating broccoli</p></div>
<p>The Double Rainbow meme perfectly exemplifies this ironic irreverence — the original video itself doesn&#8217;t, but the meme does. Paul Vasquez, the star of the meme&#8217;s seed, is deeply and genuinely, if not spiritually, moved by the double rainbow he comes across. He is expressing an emotion towards the sublime end of the Internet scale, albeit in a slightly intense and intoxciated fashion. The meme is essentially a riff on this curious mix of emotions. For instance there is <a href="http://www.youtube.com/watch?v=iG8zNSf0c9k&amp;feature=player_embedded" target="_blank">a video parody where someone drives up to a billboard advertising a double burger deal and, in the style of Double Rainbow Man, exclaims in amazement</a>.</p>
<p>Now here I would like to take a, perhaps unexpected, conceptual leap by suggesting that the prevailing sentiment of Internet memes actually reflects a dominant sentiment of awakening, namely equanimity. As spiritual adventurers we tend to come across certain refined (and unrefined) states, yet we are endlessly encouraged to recollect the impermanence, emptiness and unsatisfactoriness of these (and all) states. An awakened attitude is not some kind of permanent double-rainbow rapture (yes you really did just read those combination of words), but rather engages sincerely with <em>each and every</em> state. Meme culture is similar. Ironic irreverence is not a denial of the spectrum of consumable media but rather a sober gesture towards the potential for LITERALLY ANYTHING!!1! (<a href="http://knowyourmeme.com/memes/caps-lock" target="_blank">see the Capslock meme</a>) to trigger curiosity and wonder.</p>
<p style="text-align: justify;">I&#8217;d like to think, though I may be stretching it a bit now, that a version of this down-to-earth attitude is responsible for a greater demand in transparency and integrity from the emerging generation of dharma practitioners. For instance, the upcoming movement of <a href="http://www.pragmaticdharma.com/" target="_blank">Pragmatic Dharma</a> that, amongst many other pragmatic sentiments, lifts the taboo on explicitly delineated paths that provide the basis for asserting one&#8217;s achievement of Enlightenment. Perhaps one caveat that could be levelled at this particular overturned taboo however, is that the accompanying taboo — that Enlightenment doesn&#8217;t actually negate the capacity for someone to be totally immoral and immature — is rarely uncovered in tandem. I don&#8217;t want to unnecessarily focus on this darker stuff, but there was a palpable sense of tension during the Sunday panel discussion, &#8220;The Emerging Face of Buddhism&#8221;, where money and power were discussed. I think the backdrop of recent scandals, such as Genpo Roshi&#8217;s affair, were the proverbial elephants in the room. <a href="http://med.brown.edu/DPHB/faculty/facultypage?id=1197496179" target="_blank">Willougbhy Britton</a>, a researcher into the downsides of meditation, asked a pressing question to the panel about the legal implications of charging for the dharma and how teachers should deal with stricter structures of accountability.</p>
<p style="text-align: justify;">Far from being an uncomfortable detour into disconcerting territory I felt it was commendable to the calibre of Buddhist Geeks and the organisation of the conference that such conversations could be encountered. Equanimity in the face of the sparkly lights and the unsightly shadows.</p>
<p style="text-align: justify;">
<div id="attachment_311" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-311" title="2011-07-29 18.40.36" src="http://www.tombh.co.uk/wordpress/wp-content/uploads/2011/08/2011-07-29-18.40.36-300x225.jpg" alt="" width="300" height="225" /><p class="wp-caption-text">Geeks in action</p></div>
<p style="text-align: justify;">Dialogue is a fundamental cornerstone of Buddhist Geeks, very few other dharma organistaions open up such a diverse conversation. Already engaged in podcasts with teachers from a cross-section of traditions, reader-contributted articles, rich comment threads and social networks, the Geeks can now add conferences to its repertoire. Maybe Buddhist Geeks is a meme? Perhaps the first in a family of liberating memes? The subject came up a few times in the conversations I was having about an &#8216;Enlightment machine&#8217;, a technological device that, through bio-data and user feedback, could lead someone towards the state of liberation. There does certainly seem to be a lot of research pointing in this general direction, for example Kelly McGonigal&#8217;s talk, &#8220;What Science Can Teach Us About Practice&#8221;, on the neuroscience of meditation, has found distinct regions of the brain that are tangibly more active in long-term meditators. However, upon reflection, I&#8217;m sceptical of such a device. The goal of dharma practice has too significant a social aspect to it. If technology is to play a role in the process of spiritually maturing humans I think its form will be less tangible and more concerned with the facilitation of the huge <em>pre-existing community of support around the world</em>.</p>
<p style="text-align: justify;">To meet others that I can so readily relate to is of incalculable value to me. Buddhist Geeks 2011 hasn&#8217;t just animated my practice but it has brought to life and humanised, the Internet.</p>
<p style="text-align: justify;">
<div id="attachment_292" class="wp-caption aligncenter" style="width: 235px"><img class="size-medium wp-image-292" title="2011-07-29 15.29.49" src="http://www.tombh.co.uk/wordpress/wp-content/uploads/2011/08/2011-07-29-15.29.49-e1312594113268-225x300.jpg" alt="" width="225" height="300" /><p class="wp-caption-text">Everyone&#39;s lanyards and booklets (in alphabetical order at that!)</p></div>
<blockquote><p>&#8220;But what does it mean!?&#8221;<br />
<em>Paul Vasquez</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.tombh.co.uk/the-buddhist-geeks-conference-2011/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mounting Rackspace Cloud Files locally</title>
		<link>http://www.tombh.co.uk/mounting-rackspace-cloud-files-locally</link>
		<comments>http://www.tombh.co.uk/mounting-rackspace-cloud-files-locally#comments</comments>
		<pubDate>Tue, 31 May 2011 22:44:16 +0000</pubDate>
		<dc:creator>tombh</dc:creator>
				<category><![CDATA[Computing]]></category>

		<guid isPermaLink="false">http://www.tombh.co.uk/?p=228</guid>
		<description><![CDATA[Since writing this I&#8217;ve discovered Cloudfuse, which, seeing as it&#8217;s designed specifically for the task at hand, might be more suitable. Firstly, let&#8217;s talk about how awesome cloud storage is. Unlimited storage. Okay, well it&#8217;s not infinite obviously, but to all intent and purpose it is. The point really though is that it&#8217;s not about adding [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="S" class="cap"><span>S</span></span>ince writing this I&#8217;ve discovered <a href="http://sandeepsidhu.wordpress.com/2011/03/07/mounting-cloud-files-using-cloudfuse-into-ubuntu-10-10-v2/">Cloudfuse</a>, which, seeing as it&#8217;s designed specifically for the task at hand, might be more suitable.</p>
<p><span id="more-228"></span></p>
<p>Firstly, let&#8217;s talk about how awesome cloud storage is.</p>
<p><em>Unlimited storage</em>. Okay, well it&#8217;s not infinite obviously, but to all intent and purpose it is. The point really though is that it&#8217;s not about adding another physical disk to get more space, Rackspace Cloud Files for instance charge 15¢ per GB and that&#8217;s it. There&#8217;s no upper limit and no tiered stages like 20GB, 40GB, 60GB etc. It just expands the more you put on it and you pay just for what you use. Awesome? Yes.</p>
<p><em>Content Delivery Networks</em>. Rackspace Cloud Files specifically uses the <a href="http://www.akamai.com/dl/technical_publications/GloballyDistributedContentDelivery.pdf">Akamai CDN</a> which has over 12,000 servers world-wide replicating content so that it is always served from the nearest and therefore quickest source! Awesome? Yes.</p>
<p>So I&#8217;m talking about <a href="http://www.rackspace.com/cloud/cloud_hosting_products/files/">Rackspace&#8217;s Cloud Files</a> here but other cloud services offer similar features. Now, one drawback with Rackspace&#8217;s offering is that there isn&#8217;t any traditional means by which you can upload to their service, it&#8217;s all done via an, albeit excellent, RESTful API. So something as simple as uploading a file requires several lines of code. But imagine if your cloud account was just another folder on your local filesystem, whether that&#8217;s your workstation or your web server. How doubly awesome would that be? Very.</p>
<p>Enter <a href="https://github.com/chmouel/ftp-cloudfs/">ftp-cloudfs</a> and <a href="http://curlftpfs.sourceforge.net/">curlftpfs</a>, and with a little bit of command line tinkering you have one of the most awesome things you might ever setup on a computer. Ftp-cloudfs is a python wrapper for Rackspace&#8217;s API, pretty standard in itself, but then it throws its own private FTP server into the mix, essentially giving you FTP access to your cloud account. Yes, yes, yes! Now, for the pièce <em>de</em> résistance, the cherry on the cake, the jewel in the crown; curlftpfs and its ability to mount an FTP server as a local folder. Oh. My. Great. God. Alive! So, you have your cloud, with its API that is wrapped by Python, that integrates with a private FTP server, that is mounted by cURL onto a local folder that you can then open up with any old file browser. Drag And Drop into the cloud anyone?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tombh.co.uk/mounting-rackspace-cloud-files-locally/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How I elasticised my web app</title>
		<link>http://www.tombh.co.uk/how-i-elasticised-my-web-app</link>
		<comments>http://www.tombh.co.uk/how-i-elasticised-my-web-app#comments</comments>
		<pubDate>Tue, 31 May 2011 21:28:00 +0000</pubDate>
		<dc:creator>tombh</dc:creator>
				<category><![CDATA[Computing]]></category>

		<guid isPermaLink="false">http://www.tombh.co.uk/?p=223</guid>
		<description><![CDATA[By &#8216;elasticising&#8217; I mean, separating the heavy application logic from the lighter website logic in such a way that under high demand it is a simple matter of firing up new application server clones to cater for the increased load. The other significant benefit of this is that by placing the most significant application load [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="B" class="cap"><span>B</span></span>y &#8216;elasticising&#8217; I mean, separating the heavy application logic from the lighter website logic in such a way that under high demand it is a simple matter of firing up new application server clones to cater for the increased load. The other significant benefit of this is that by placing the most significant application load onto a separate server, the web server is dedicated to the sole task of serving web pages.</p>
<p><span id="more-223"></span></p>
<p>The web app in question is <a href="http://frintr.com">http://frintr.com</a>; it creates mosaics from all the profile pictures of your social network friends. The basic elastic concept is as follows;</p>
<ol>
<li>Someone requests a mosaic on the web server, so we gather all the things we need to make it, profile pic URLs, user ID, unique mosaic ID, etc into a nice little JSON package.</li>
<li>We place that JSON package onto a queue.</li>
<li>The application servers poll the queue and, if a package is found, it is removed from the queue and building is begun.</li>
<li>Once the mosaic is built it is FTP&#8217;d back to the web server and a little note is made in a prearranged location saying that a mosaic is finished and waiting to be served.</li>
<li>The web server, via AJAX, polls itself in the prearranged location from step 4, waiting for an application server to place the completion note.</li>
<li>The web server renders the finished mosaic.</li>
</ol>
<p>To create the queue I use <a href="http://redis.io/">Redis</a>, a NoSQL-style database. Crucially it provides atomic operations, which means that when a queue is being polled by multiple servers only one can ever receive the queued item as it is <em>instantly</em> popped from the queue upon request. Redis also provides a server-client paradigm out of the box, so you just fire up a password protected Redis server on the web server and query it remotely from the application servers. Installing and interacting with Redis is easy if you&#8217;re using Debian because the folks over at <a href="http://www.dotdeb.org/">Dotdeb</a> have ready-made packages for it.</p>
<p>Another thing worth mentioning is how to make a daemon, as that&#8217;s the thing that does the constant 24/7 polling of the Redis queue. Making a cron job that runs every minute (which is too slow for a real-time app) or whatever is one thing, but having a script run constantly with the same process ID is something else altogether. Thankfully, PEAR&#8217;s<a href="http://pear.php.net/package/System_Daemon"> System_Daemon</a> library handles all the daemon stuff for you. It evens creates init.d scripts for you that can be run at start up. It&#8217;s a real big deal keeping this running, without it the whole system breaks down. For instance one gotcha I discovered is that the daemon will crash from the fatal error caused by the Redis server being unreachable, when the web server reboots for instance. For now, I&#8217;ve just fixed that bug, but I&#8217;m looking into using <a href="http://mmonit.com/monit/">Monit</a> to manage automatic respawning.</p>
<p>It&#8217;s still a work in progress, but I&#8217;m impressed by how well this method works.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tombh.co.uk/how-i-elasticised-my-web-app/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Underscore Skillswap</title>
		<link>http://www.tombh.co.uk/underscore-skillswap</link>
		<comments>http://www.tombh.co.uk/underscore-skillswap#comments</comments>
		<pubDate>Tue, 26 Oct 2010 10:49:25 +0000</pubDate>
		<dc:creator>tombh</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Mill Grist]]></category>

		<guid isPermaLink="false">http://www.tombh.co.uk/?p=194</guid>
		<description><![CDATA[At 7pm, on Tuesday, November 30th in The Pervasive Media Studios, Bristol there&#8217;ll be a traditional Underscore skillswap on the subject of Social Network Application Development. It&#8217;s free! But please book a ticket first from Eventwax first. Since the Web got its 2.0 badge, there&#8217;s been a lot of stuff about social things, Facebook, Twitter, Wikipedia, etc. [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="A" class="cap"><span>A</span></span>t 7pm, on Tuesday, November 30th in <a href="http://www.pmstudio.co.uk/about-pervasive-media-studio">The Pervasive Media Studios</a>, Bristol there&#8217;ll be a traditional <a href="http://www.under-score.org.uk/pipermail/underscore/">Underscore</a> skillswap on the subject of <em>Social Network Application Development</em>.</p>
<p><span id="more-194"></span></p>
<p>It&#8217;s free! But please <a href="http://bristolskillswap.eventwax.com/social-network-application-development" target="_blank">book a ticket first from Eventwax</a> first.</p>
<p>Since the Web got its 2.0 badge, there&#8217;s been a lot of stuff about social things, Facebook, Twitter, Wikipedia, etc. We&#8217;ll ask questions like; How significant is the Social Web now? How does one build websites and applications for it? And where is it all going?</p>
<p>We&#8217;re hoping to provide a, somewhat controversial, underlying theme throughout that the disparate and &#8216;walled garden&#8217; Social Web of today is similar to the early unorganised days of email and that open formats, standards and protocols will soon unify our social experience on the Internet.</p>
<h2>Current speakers are;</h2>
<p><strong>Thomas Buckley-Houston</strong><br />
<img class="alignleft" title="Tom" src="http://www.tombh.co.uk/wordpress/wp-content/uploads/2009/11/tomisme2.jpg" alt="" width="150" />Facebook application developer and Open Social Web advocate. <a href="http://tombh.co.uk/about" target="_blank">tombh.co.uk</a></p>
<p style="clear: both;">&nbsp;</p>
<p><strong>Richard Dennys</strong><br />
<img class="alignleft" src="http://www.thelocal.se/blogs/mediasales/files/2010/05/richard.jpg" alt="" width="150" />Digital Marketeer, Principal Consultant at <a href="http://digital-divinty.co.uk" target="_blank">Digital Divinity</a>. Currently helping some big brands with their Facebook strategies.</p>
<p style="clear: both;">&nbsp;</p>
<p><strong>Tom Holder</strong><br />
<img class="alignleft" src="http://a1.twimg.com/profile_images/1140732545/IMG_0186.jpg" alt="" width="150" />Web developer, entrepreneur, and co-founder of <a href="http://simpleweb.co.uk" target="_blank">Simpleweb</a>. Open standards enthusiast, likes <a href="http://en.wikipedia.org/wiki/PubSubHubbub" target="_blank">PubSubHubBub</a> and <a href="http://activitystrea.ms/">Activity Streams</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tombh.co.uk/underscore-skillswap/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Integrity</title>
		<link>http://www.tombh.co.uk/integrity</link>
		<comments>http://www.tombh.co.uk/integrity#comments</comments>
		<pubDate>Tue, 27 Jul 2010 11:42:07 +0000</pubDate>
		<dc:creator>tombh</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Musings]]></category>
		<category><![CDATA[Spirituality]]></category>

		<guid isPermaLink="false">http://www.tombh.co.uk/?p=168</guid>
		<description><![CDATA[Sandalwood is considered the epitome of excellence, imparting fragrance even to the axe that cuts it. The Hindu Vedas Sandalwood Are you good at what you do? Or are you just good at appearing to be good at what you do? Those who fall into the former category are the Sandalwoods of this world. Those [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p class="first-child "><span title="S" class="cap"><span>S</span></span>andalwood is considered the epitome of excellence, imparting fragrance even to the axe that cuts it.</p></blockquote>
<p><span id="more-168"></span></p>
<p style="text-align: right;"><em>The Hindu Vedas</em></p>
<h2>Sandalwood</h2>
<p>Are you good at what you do? Or are you just good at <em>appearing</em> to be good at what you do? Those who fall into the former category are the Sandalwoods of this world. Those who fall into the latter category are good at what they do (or appear to be anyway) in only very specific circumstances.</p>
<p>In most disciplines, generally speaking, we have control over both the context in which our work is encountered and by whom. If we lack the skill to solve the problem laid out to us then it is possible for us to manipulate the context, and thus the problem, into one which we <em>do</em> know how to solve. Or failing that maybe we can borrow someone else&#8217;s solution, tweak it a little and attempt to ensure that none of the original problem solver&#8217;s fans see what you&#8217;ve done. It all comes down to our ability to authentically respond to the utterly unique nuances of an individual problem. What differentiates the master from the amateur is that the master can conjure, seemingly from nowhere, a response that is as unique as the problem, perfectly matching, without shortage or excess, the precise nature of the question posed to them. The amateur however, struggles and must fall back on mere mannerisms, clichés and set-pieces.</p>
<p>There&#8217;s absolutely nothing wrong with being an amateur, it is a most worthy stage to find oneself, the concern is those that habit this phase yet claim, whether implicitly or explicitly, to be otherwise. The work of a master is a joy to behold, it oozes confidence, it invites scrutiny at every turn, no detail has been left unaccounted for. To achieve such a level of mastery one&#8217;s skill must have been truly taken to heart, to have saturated every facet of one&#8217;s life. Such a person spares not a single thought for how their solution might be criticised by others, because they know it is self-consistent in every aspect.</p>
<p>If you have expended any of your energy on the appearance of your solution — rather than on the core of the solution itself — then you will inevitably squirm and whine when faced with critical scrutiny; the inherent contradiction in it will be exposed and there is truly nothing uglier. However when the axe of scrutiny slices at the work of true skill then there is nothing to fear, not a single aspect of its nature could ever reveal discrepancy. In fact the deeper the axe penetrates, the sweeter the scent of integrity that wafts through the air.</p>
<h2>Real-life Human Beings</h2>
<p>I&#8217;m not against the whole Web 2.0 bandwagon, in fact I quite like the term and what it stands for. Let me just distil one feature of this widely recognised paradigm shift; namely the relocation of the web&#8217;s centre of gravity from the privileged elite of rich and clever developers to the everyman of good, honest and humble users. Facebook, Wikipedia, Blogs, Youtube, Twitter; it&#8217;s all about the <em>users</em> creating that which we find most engaging and valuable on the Net. Now the interesting thing here is that complimentary to this user-centered shift there&#8217;s been a simultaneous increase in the authenticity of the Net as a genuine medium of expression — we can date, make friends, lose friends, chat, hate, laugh and cry all the more easily because we can <em>express</em> ourselves all the more easily, warts and all. However, there&#8217;s something historical — and perhaps internally cultural — about the Net that encourages a re-imagination of our identities; think alter egos, exotic username handles, fantasy worlds and such like.</p>
<p>So whereas you hear a lot about the Net becoming more and more a social phenomenon, you hear very little about the Net as a bastion of the benefits of being involved in a society. In fact, more often you hear the opposite; parents complaining that their children don&#8217;t spend enough time with real children, for example. I would like to think however, that this is not so much a symptom of the Net itself, but more a reflection of the human desire to appear in the best possible light. The Net, more than any other medium, allows us to control both the context of how we are perceived and who perceives us and many of us choose to take advantage of this fact. Which I believe means we can choose otherwise.</p>
<p>Instead of re-inventing ourselves in cyberspace we are allowed to just be ourselves, to be real-life human beings. We don&#8217;t need to hide or censor anything. In fact, on the Net honesty is recognised as a valuable currency  just as much as it is everywhere else. The deciding factor isn&#8217;t so much the medium or the context through which we choose to express ourselves but the <em>intention</em> that we cultivate within our own inner worlds. We have a choice to actually <em>be a likeable person</em>, rather than just <em>appear</em> to be a likeable person. This is a personal and universal choice and one that applies unconditionally, no matter the context.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tombh.co.uk/integrity/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Frintr</title>
		<link>http://www.tombh.co.uk/frintr</link>
		<comments>http://www.tombh.co.uk/frintr#comments</comments>
		<pubDate>Mon, 26 Jul 2010 09:25:38 +0000</pubDate>
		<dc:creator>tombh</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Mill Grist]]></category>

		<guid isPermaLink="false">http://www.tombh.co.uk/?p=170</guid>
		<description><![CDATA[A week ago today I launched Frintr. It&#8217;s a project, of my own inception, that I&#8217;ve been working on for 10 months. The basic gist is that you create a mosaic of your own profile picture from all the smaller profile pictures of your friends from Facebook, Twitter and Myspace, which you can then have [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="A" class="cap"><span>A</span></span> week ago today I launched <a href="http://www.frintr.com" target="_blank">Frintr</a>. It&#8217;s a project, of my own inception, that I&#8217;ve been working on for 10 months. The basic gist is that you create a mosaic of your own profile picture from all the smaller profile pictures of your friends from Facebook, Twitter and Myspace, which you can then have printed and sent to you as a poster. So not only has the project been technically difficult in terms of web development, but it&#8217;s also been a huge learning curve in terms of setting up my own business and cultivating an authentic brand. What&#8217;s more, even though the site is now live, there is still plenty more work to be done.</p>
<p><span id="more-170"></span></p>
<p>I&#8217;ve learnt so much, there must be a dozen or more blog posts I could write about my adventures; Facebook/Twitter/Mysapce Connect authentication, the Symfony framework, Nginx, Linux logging and statistics graphing, GIT versioning, user-testing, branding, business planning, Image Magick, print fulfilment, Service Level Agreements,  time management, global patenting, self-discipline, creativity and patience! I thought about writing about things as they happened but time had the better of me (well apart from the last couple of posts about the Myspace SDK and Nginx).</p>
<p>So in some ways I feel like a new man, having been through the furnace of such an involved process. My skills have been stretched and my confidence increased, I&#8217;ve a different perspective on the depth of my resources and what they can be put to achieve. And I&#8217;m still hungry for more!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tombh.co.uk/frintr/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySpaceID SDK and PHP 5.3</title>
		<link>http://www.tombh.co.uk/myspaceid-sdk-and-php-5-3</link>
		<comments>http://www.tombh.co.uk/myspaceid-sdk-and-php-5-3#comments</comments>
		<pubDate>Mon, 22 Mar 2010 16:33:36 +0000</pubDate>
		<dc:creator>tombh</dc:creator>
				<category><![CDATA[Computing]]></category>

		<guid isPermaLink="false">http://www.tombh.co.uk/?p=160</guid>
		<description><![CDATA[If you&#8217;re trying to get the MyspaceID SDK working in PHP 5.3 then you&#8217;re going to need the updated version of the Janrain OpenID library instead of the version that it ships with as default. You&#8217;ll know your version of the OpenID library is a problem because you&#8217;ll get lots of these errors; Deprecated: Assigning [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="I" class="cap"><span>I</span></span>f you&#8217;re trying to get the MyspaceID SDK working in PHP 5.3 then you&#8217;re going to need the updated version of the Janrain OpenID library instead of the version that it ships with as default.</p>
<p><span id="more-160"></span></p>
<p>You&#8217;ll know your version of the OpenID library is a problem because you&#8217;ll get lots of these errors;</p>
<p><code>Deprecated: Assigning the return value of new by reference is deprecated</code></p>
<p>Once you&#8217;ve downloaded the updated library from <a href="http://sourcecookbook.com/en/recipes/60/janrain-s-php-openid-library-fixed-for-php-5-3-and-how-i-did-it">here</a>, just copy the /Auth folder (nothing else is needed) and replace the /Auth folder  in the MySpaceID SDK.</p>
<p><strong>However!</strong> You will also need to retain the /Auth/OpenID/OAuth.php file from the MySpaceID SDK as the updated  Janrain version doesn&#8217;t include it, just copy it over.</p>
<p>Happy days :D</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tombh.co.uk/myspaceid-sdk-and-php-5-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lenny, Nginx, FastCGI and Symfony</title>
		<link>http://www.tombh.co.uk/lenny-nginx-fastcgi-and-symfony</link>
		<comments>http://www.tombh.co.uk/lenny-nginx-fastcgi-and-symfony#comments</comments>
		<pubDate>Mon, 22 Mar 2010 10:19:47 +0000</pubDate>
		<dc:creator>tombh</dc:creator>
				<category><![CDATA[Computing]]></category>

		<guid isPermaLink="false">http://www.tombh.co.uk/?p=153</guid>
		<description><![CDATA[Running Apache on 256MB of RAM is not ideal and when I started worrying that my VPS might not be able to cope with sudden spikes in traffic I decided to give Nginx a shot. This isn&#8217;t a concise tutorial, I mainly just want to share my Nginx config that got Symfony URL rewrites going, [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="R" class="cap"><span>R</span></span>unning Apache on 256MB of RAM is not ideal and when I started worrying that my VPS might not be able to cope with sudden spikes in traffic I decided to give Nginx a shot.</p>
<p><span id="more-153"></span></p>
<p>This isn&#8217;t a concise tutorial, I mainly just want to share my Nginx config that got Symfony URL rewrites going, but here&#8217;s the basic idea;</p>
<h2>Don&#8217;t panic about downtime!</h2>
<p>It&#8217;s possible to run Nginx and Apache side by side on different ports so that you can migrate your vhost configs in your own time. Follow a tutorial <a href="http://www.ubuntugeek.com/using-nginx-as-a-reverse-proxy-to-get-the-most-out-of-your-vps.html">like this</a>.</p>
<h2>Packages</h2>
<p><strong>Nginx</strong></p>
<p>Debian Lenny currently only provides the older version 6 of Nginx, I can&#8217;t find any repos that offer the newer, stable version 7, so you&#8217;ll want to compile it yourself, not to worry, it&#8217;s very straightforward thanks to <a href="http://www.myatus.co.uk/2009/09/07/compiling-nginx-on-debian-ubuntu/">Myatu&#8217;s excellent tutorial</a>. I&#8217;d highly reccomend installing the Debian Nginx v6 package first in order to get the init scripts which aren&#8217;t supplied when compiling from source ‒ by compiling you are then simply replacing the binary.</p>
<p><strong>FastCGI</strong></p>
<p>You might come across a lot of people that say you need to rip some <em>spawn-php</em> package from Lighttpd, don&#8217;t bother. If you&#8217;re prepared to be running PHP 5.3 just get php-fpm from the DotDeb repo;</p>
<pre class="brush: bash; title: ; notranslate">deb http://php53.dotdeb.org stable all</pre>
<p>I already had php5 installed from the official Debian repos so I just did an <em>aptitude update</em> and <em>upgrade</em> and then installed <em>php5-fpm</em>.</p>
<p>Now you want to place this config inside the server{} definition of your Nginx configs, I&#8217;ve placed mine inside each individual /etc/nginx/sites-available config, but I&#8217;d hope there was some way of doing it more globally.</p>
<pre class="brush: bash; title: ; notranslate">
location ~ \.php($|/)
        {
                set  $script     $uri;
                set  $path_info  &quot;&quot;;

                if ($uri ~ &quot;^(.+\.php)(/.+)&quot;) {
                        set  $script     $1;
                        set  $path_info  $2;
                }

                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME /your/web/root$script;
                fastcgi_param SCRIPT_NAME $script;
                #fastcgi_param PATH_INFO $fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
</pre>
<h2>Symfony Rewrite Rules</h2>
<p>Now this was by far the hardest bit for me, there&#8217;s very little definitive advice on this out there and it took a lot of trial and error to get this running exactly right, but here is what is working for me. Please note I think that it is important that this works in combination with the above FastCGI config above (also place within server{} defs);</p>
<pre class="brush: bash; title: ; notranslate">
location / {
          root   /your/web/root;
          index  index.php;

            if (-f $request_filename) {
              expires max;
              break;
            }

            if ($request_filename !~ &quot;\.(js|htc|ico|gif|jpg|png|css)$&quot;) {
              rewrite ^(.*) /index.php last;
            }

        }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.tombh.co.uk/lenny-nginx-fastcgi-and-symfony/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Inserting unicode characters on Linux</title>
		<link>http://www.tombh.co.uk/inserting-unicode-characters-on-linux</link>
		<comments>http://www.tombh.co.uk/inserting-unicode-characters-on-linux#comments</comments>
		<pubDate>Sat, 13 Feb 2010 11:43:52 +0000</pubDate>
		<dc:creator>tombh</dc:creator>
				<category><![CDATA[Computing]]></category>

		<guid isPermaLink="false">http://www.tombh.co.uk/?p=143</guid>
		<description><![CDATA[If all you want to do is insert a special character like an em dash (—) or an ellipsis (…) in Linux you don&#8217;t need any special programs like scim or kcharselect, you simply; Hold down CTRL+SHIFT+U and a little underlined u will appear Type the unicode hexadecimal number for the character, eg 2014 for [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="I" class="cap"><span>I</span></span>f all you want to do is insert a special character like an em dash (—) or an ellipsis (…) in Linux you don&#8217;t need any special programs like <em>scim</em> or <em>kcharselect</em>, you simply;<span id="more-143"></span></p>
<ol>
<li>Hold down <strong>CTRL+SHIFT+U</strong> and a little underlined <span style="text-decoration: underline;"><strong>u</strong></span> will appear</li>
<li>Type the unicode hexadecimal number for the character, eg 2014 for an em dash</li>
<li>Press space and your character will magically appear!</li>
</ol>
<p>A <a href="http://www.alanwood.net/demos/ansi.html">reference like this</a> will help you find the corresponding hex digit for your character.</p>
<p>It&#8217;s amazing how such a simple and useful tool like this is so hard to find out about. I stumbled across this after hours of googling and even then it was tucked away half way through some comments :(</p>
<p><em>BTW, I did this on Debian Linux KDE4, so your mileage may vary.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tombh.co.uk/inserting-unicode-characters-on-linux/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>#uksnow timelapse</title>
		<link>http://www.tombh.co.uk/uksnow-timelapse</link>
		<comments>http://www.tombh.co.uk/uksnow-timelapse#comments</comments>
		<pubDate>Tue, 19 Jan 2010 13:32:05 +0000</pubDate>
		<dc:creator>tombh</dc:creator>
				<category><![CDATA[Computing]]></category>

		<guid isPermaLink="false">http://www.tombh.co.uk/?p=119</guid>
		<description><![CDATA[I love snow, it makes everywhere look so beautiful and clean, plus it disrupts all those boring things like work and school. So I also love Ben Marsh&#8217;s Twitter mashup that plots #uksnow tagged tweets onto a map. Watching Ben&#8217;s map I itched to see the ebb, flow and movement of the tweets across the [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="I" class="cap"><span>I</span></span> love snow, it makes everywhere look so beautiful and clean, plus it disrupts all those boring things like work and school. So I also love <a href="http://uksnow.benmarsh.co.uk" target="_blank">Ben Marsh&#8217;s Twitter mashup</a> that plots #uksnow tagged tweets onto a map. Watching Ben&#8217;s map I itched to see the ebb, flow and movement of the tweets across the country, did they form perceivable fronts that reflected the paths of weather systems?</p>
<p><span id="more-119"></span></p>
<p>So I did a little research, realised it was within my skill level, and started building. Three days and some late nights later, <em>et voila</em>;</p>
<p><a href="http://uksnow.tombh.co.uk"><img class="size-full wp-image-121 alignnone" title="timelapse_screen" src="http://www.tombh.co.uk/wordpress/wp-content/uploads/2010/01/timelapse_screen.jpg" alt="timelapse_screen" width="480" height="328" /></a></p>
<p><a href="http://uksnow.tombh.co.uk" target="_blank">Go check it out »</a></p>
<h2>The basic recipe</h2>
<ul>
<li>1 x <a href="http://code.google.com/apis/maps/documentation/">Google Maps API</a>, version 2, client-side.</li>
<li>1 x <a href="http://code.google.com/apis/maps/articles/phpsqlgeocode.html">Google geocoding API</a>, server-side.</li>
<li>3 x Cron jobs.</li>
<li>2 x cached MySQL tables of Twitter search data.</li>
<li>1 x helping of jQuery.</li>
</ul>
<h2>Twitter Search</h2>
<p>First pre-heat your Twitter search archive as soon as possible because you can only really search about a week into the past, beyond that tweets become lost to the search engine.</p>
<p>Twitter&#8217;s search API is dead easy to use, though I must say it took me a while to realise that it didn&#8217;t need an API key. My number one tip would be to just use the &#8220;Advanced search&#8221; option on their website to prototype your search and then just copy the resulting URL from your address bar as the working template for your code. Now, in order to overcome their limitation of 100 results per request you&#8217;re going to need to get the smallest ID from the first result set and pass that as the &#8220;max_id&#8221; argument to the second query. This way you can &#8220;walk&#8221; all the way back to the very oldest results that Twitter supplies.</p>
<p>No-one really knows what the quota is for search API requests, though they do say it is generous, I&#8217;ve never hit it anyway.</p>
<h2>Geocoding</h2>
<p>So once you&#8217;ve collected a bunch of tweets — I did this through cron jobs (though all the APIs here will work client-side as well) — you&#8217;ll want to regex for postcodes and get some lat/long co-ordinates through geocoding. Again, Google&#8217;s geocoding API doesn&#8217;t actually need an API key, it&#8217;ll let you just query it anyway, but bear in mind that you have 15,000 requests per day. Here&#8217;s the PHP function I used;</p>
<pre class="brush: php; title: ; notranslate">

function getLatLong($postcode){
  global $geo_delay;

  $request_url = &quot;http://maps.google.co.uk/maps/geo?output=xml&amp;q=&quot; . urlencode($postcode) . &quot;&amp;gl=gb&quot;;

  if( FALSE === $xml = @simplexml_load_file($request_url) ) return 'again';

  $status = $xml-&gt;Response-&gt;Status-&gt;code;
  if (strcmp($status, &quot;200&quot;) == 0){
    // Successful geocode
    $coordinates = $xml-&gt;Response-&gt;Placemark-&gt;Point-&gt;coordinates;
    return split(&quot;,&quot;, $coordinates);
  }else if( (strcmp($status, &quot;620&quot;) == 0) || (strcmp($status, &quot;403&quot;) == 0) ){
    // sent geocodes too fast
    $geo_delay += 1000;
    return 'again';
  }else{
    // failure to geocode
    return FALSE;
  }
}
</pre>
<h2><strong>The Google Map</strong></h2>
<p>Getting the map on there is dead easy, all I&#8217;ve got is;</p>
<pre class="brush: jscript; title: ; notranslate">

map = new GMap2(document.getElementById(&quot;map&quot;));
map.setMapType(G_SATELLITE_MAP);
map.addControl(new GLargeMapControl3D());
map.addControl(new GMapTypeControl());
map.addMapType(G_PHYSICAL_MAP);
map.enableScrollWheelZoom();
map.enableContinuousZoom();
map.setCenter(new GLatLng(54.16243396806781, -3.955078125), 5);
</pre>
<p>Then for adding a snowflake I have a little helper function;</p>
<pre class="brush: jscript; title: ; notranslate">

function createMarker(point, handle, content, score) {

    var icon = new GIcon();
    var marker = new GMarker(point, icon);

    var size = parseInt( (3 * score) + 5);
    var middle = parseInt( size / 2 );
    icon.image = &quot;/images/snow10.png&quot;;
    icon.iconSize = new GSize(size, size);
    icon.iconAnchor = new GPoint(middle, middle);
    icon.infoWindowAnchor = new GPoint(5, 1);

    var html = '&lt;img class=&quot;profile_pic&quot; src=&quot;http://spiurl.appspot.com/' + handle + '&quot; /&gt;&lt;div class=&quot;tweet_body&quot;&gt;' + content + '&lt;/div&gt;';
    GEvent.addListener(marker, &quot;click&quot;, function(){
        marker.openInfoWindowHtml(html);
    });
    return marker;
}
</pre>
<p>And then you simply do this to get a flake on the map;</p>
<pre class="brush: jscript; title: ; notranslate">

var point = new GPoint(flakes[count]['lng'], flakes[count]['lat']);
var marker = createMarker(point, flakes[count]['handle'], flakes[count]['content'], flakes[count]['score']);
map.addOverlay(marker);
</pre>
<p>That flakes[] array is the one that stores all the data that I&#8217;ve been archiving from Twitter searches. It&#8217;s a JSON encoded MySQL result set. So then all I&#8217;ve done is iterate over the entire array plotting each tweet and removing it once it&#8217;s 60 mins older than the newest.</p>
<h2>Serving Suggestion</h2>
<p>I&#8217;m still yet to iron out some performance issues, it seems that there is a bit of stuttering when the map contains 1000+ tweets. Doing some Firebug profiling it looks at first glance to be to do with the way I&#8217;m locating rendered flakes using jQuery&#8217;s CSS selector. Recent webkit browsers certainly fair better here.</p>
<p>Of course the UI is just icing on the cake, but I&#8217;d heartily recommend the jQuery UI plugin that gives you very usable sliders out of the box.</p>
<p>Best served with a warm Rioja.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tombh.co.uk/uksnow-timelapse/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

