<?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>Malcolm Christie</title>
	<atom:link href="http://www.malcolmchristie.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.malcolmchristie.co.uk</link>
	<description>Freelance mobile and web application development.</description>
	<lastBuildDate>Wed, 17 Apr 2013 11:15:16 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Apple UI quirks</title>
		<link>http://www.malcolmchristie.co.uk/295/apple-ui-quirks/</link>
		<comments>http://www.malcolmchristie.co.uk/295/apple-ui-quirks/#comments</comments>
		<pubDate>Tue, 16 Apr 2013 22:03:05 +0000</pubDate>
		<dc:creator>Malcolm</dc:creator>
				<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://www.malcolmchristie.co.uk/?p=295</guid>
		<description><![CDATA[Ok, I&#8217;m a bit of an Apple fan boi, apparently, but I can&#8217;t help but get seriously annoyed about Apple dropping the ball in quite a few places. Here&#8217;s a few of my rants about Apple&#8217;s weird design ideas&#8230; Click [...]]]></description>
				<content:encoded><![CDATA[<p>Ok, I&#8217;m a bit of an Apple fan boi, apparently, but I can&#8217;t help but get seriously annoyed about Apple dropping the ball in quite a few places. Here&#8217;s a few of my rants about Apple&#8217;s weird design ideas&#8230;</p>
<p><strong><img class="alignleft size-medium wp-image-296" style="margin-bottom: 20px;" alt="Screen Shot 2013-04-16 at 21.57.59" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2013/04/Screen-Shot-2013-04-16-at-21.57.59-300x130.png" width="300" height="130" />Click on stuff&#8230; underneath the scroll bar?!<br />
</strong>So everything looks lovely with the scroll bars disappearing, but when you get to the bottom of a list view and the horizontal scroll bar appears (quite easily using a trackpad) on top of that bottom item you wanted to click&#8230; what then?</p>
<hr style="clear: both;" />
<p><img class="size-medium wp-image-297 alignright" alt="Screen Shot 2013-04-16 at 21.59.00" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2013/04/Screen-Shot-2013-04-16-at-21.59.00-300x159.png" width="300" height="159" /><strong>Column view &#8211; use the space!</strong><br />
I love column view &#8211; I use it all the time &#8211; but seriously, stop squishing everything so it&#8217;s unreadable. See that big space on the right, fill it!<br />
Not only that, if I resize the column, change to a different folder and then back, it resizes again. Keep the column as wide as I set it, please.</p>
<hr style="clear: both;" />
<p><img class="alignleft size-full wp-image-308" alt="Screen Shot 2013-04-16 at 21.59.38" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2013/04/Screen-Shot-2013-04-16-at-21.59.381.png" width="268" height="158" /><strong>Gonnie no hide my library folder?</strong><br />
I really don&#8217;t know where the need in hiding the library folder is.</p>
<p>Fair enough, most people never need it, but something also keeps resetting every un-hide hack I&#8217;ve found. Just, gonnie no.</p>
<hr style="clear: both;" />
<p><img class="size-medium wp-image-310 alignright" alt="Screen Shot 2013-04-16 at 22.00.00" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2013/04/Screen-Shot-2013-04-16-at-22.00.00-300x144.png" width="300" height="144" /><strong>Nope, not Bublé, this carousel</strong></p>
<p>Apple would have us believe they invented side-scrolling mice/trackpads, so why not use it in your (possibly) most popular product?<br />
Those wee arrows are just annoying.</p>
<hr style="clear: both;" />
<p><img class="alignleft size-medium wp-image-318" alt="Screen Shot 2013-04-16 at 22.01.00" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2013/04/Screen-Shot-2013-04-16-at-22.01.001-300x190.png" width="300" height="190" /><strong>Airdrop&#8230; why no wifi?</strong><br />
Ok, it&#8217;s not really <em>Air</em>drop if it&#8217;s not over wifi, but is there any good reason it can&#8217;t just work over ethernet? It&#8217;s much faster, and if the network is already setup, just let us use it?</p>
<hr style="clear: both;" />
<p><img class="size-full wp-image-320 alignright" style="margin-bottom: 30px;" alt="Screen Shot 2013-04-16 at 22.06.00" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2013/04/Screen-Shot-2013-04-16-at-22.06.00.png" width="58" height="53" /><strong>Full screen view</strong><br />
Apparently nobody at Apple ever tested this with two screens, cause it always renders one of them totally useless. Is there any good reason we can&#8217;t have one app full screen on one screen, and another app on the second screen?</p>
<hr style="clear: both;" />
<p><img class="alignleft size-medium wp-image-322" alt="Screen Shot 2013-04-16 at 22.01.58" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2013/04/Screen-Shot-2013-04-16-at-22.01.58-300x188.png" width="300" height="188" /><strong>Using arrange by in list view</strong><br />
Every tried clicking on the column titles to change the order of files in the list view, when you&#8217;ve selected an option from the arrange by menu? Don&#8217;t bother.<br />
I see no good reason why clicking on these column titles can&#8217;t change the order by option?</p>
<hr style="clear: both;" />
<p><img class="alignright size-full wp-image-324" alt="Screen Shot 2013-04-16 at 22.06.13" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2013/04/Screen-Shot-2013-04-16-at-22.06.13.png" width="89" height="71" /><strong>Launchpad</strong><br />
Ever used it? Nah, me neither.</p>
<hr style="clear: both;" />
<p><img class="alignleft size-medium wp-image-325" alt="Screen Shot 2013-04-16 at 22.03.20" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2013/04/Screen-Shot-2013-04-16-at-22.03.20-300x143.png" width="300" height="143" /><strong>Safari Web Inspector</strong><br />
Ok, bit more of a techie one here, but seriously, you ever tried using this mess? I&#8217;d rather fix IE bugs.<br />
On the other hand, you can use it to inspect almost any webpage (even PhoneGap apps) on a connected iPhone &#8211; that is a rather awesome feature.</p>
<hr style="clear: both;" />
<p>Anyway, that&#8217;s just some little gripes I find with OS X. Hope you enjoyed my rant!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.malcolmchristie.co.uk/295/apple-ui-quirks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mail Merge in Google Docs</title>
		<link>http://www.malcolmchristie.co.uk/228/mail-merge-in-google-docs/</link>
		<comments>http://www.malcolmchristie.co.uk/228/mail-merge-in-google-docs/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 20:20:46 +0000</pubDate>
		<dc:creator>Malcolm</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.malcolmchristie.co.uk/?p=228</guid>
		<description><![CDATA[One limitation I&#8217;ve come across in GDocs a few times is it&#8217;s lack of mail merge. But as it turns out, you can do this &#8211; you just need to know how to write scripts, and know about scripts in [...]]]></description>
				<content:encoded><![CDATA[<p>One limitation I&#8217;ve come across in GDocs a few times is it&#8217;s lack of mail merge. But as it turns out, you can do this &#8211; you just need to know how to write scripts, and know about scripts in GDocs. Very user friendly.</p>
<h3>Get your documents ready</h3>
<p>You&#8217;ll need three documents (plus the script), the document to use as a template, the spreadsheet with the data, and an empty document to merge into. In this script, we&#8217;ll use the first row of data as the text to match in the template document, just take a look at this image to see what I mean&#8230; (I just coloured the text to make it stand out, you probably don&#8217;t want to do this, the formatting will be copied to the merged document).</p>
<p><img class="size-full wp-image-229 alignnone" alt="source_data" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2013/01/source_data.png" width="611" height="171" /></p>
<h4>The script</h4>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="co1">// IDs for the three documents we need</span>
docTemplate <span class="sy0">=</span> <span class="st0">&quot;1AW1QorgoahsyejTBGI0ZatY_Lc9DW-HyQJw1-qsae7M&quot;</span><span class="sy0">;</span> <span class="co1">// Source to use as template</span>
docTarget <span class="sy0">=</span> <span class="st0">&quot;1itlEftyCG4_usjktazSrTQBExxFi6mwx4f9t-w_YH3I&quot;</span><span class="sy0">;</span> <span class="co1">// Document where the merge will be saved</span>
docToMerge <span class="sy0">=</span> <span class="st0">&quot;0Asv8lXbDRGRddGNahejuYnR4NmFQcVFmcVYyV1JMdkE&quot;</span><span class="sy0">;</span> <span class="co1">// The spreadsheet with the data</span>
&nbsp;
<span class="kw1">function</span> merge<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="co1">// Get target and data documents</span>
  <span class="kw1">var</span> target <span class="sy0">=</span> DocumentApp.<span class="me1">openById</span><span class="br0">&#40;</span>docTarget<span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="kw1">var</span> data <span class="sy0">=</span> SpreadsheetApp.<span class="me1">openById</span><span class="br0">&#40;</span>docToMerge<span class="br0">&#41;</span>.<span class="me1">getDataRange</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getValues</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
  <span class="co1">// Start the target from fresh</span>
  <span class="co1">// Not sure why but this doesn't work</span>
  <span class="co1">// target.clear();</span>
&nbsp;
  <span class="co1">// Loop through each row in the table, but skipping the first one</span>
  <span class="kw1">for</span> <span class="br0">&#40;</span>i <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span> i <span class="sy0">&gt;</span> data.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="co1">// Re-get the target fresh everytime</span>
    <span class="kw1">var</span> source <span class="sy0">=</span> DocumentApp.<span class="me1">openById</span><span class="br0">&#40;</span>docTemplate<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="co1">// Loop thorugh each paragraph</span>
    <span class="kw1">var</span> paragraphs <span class="sy0">=</span> source.<span class="me1">getParagraphs</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">for</span> <span class="br0">&#40;</span>p <span class="kw1">in</span> paragraphs<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw1">var</span> text <span class="sy0">=</span> paragraphs<span class="br0">&#91;</span>p<span class="br0">&#93;</span>.<span class="me1">copy</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <span class="co1">// Loop through the first row</span>
      <span class="co1">// Each time we replace the value from the first row with the value of row i</span>
      <span class="kw1">for</span> <span class="br0">&#40;</span>r <span class="kw1">in</span> data<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        text <span class="sy0">=</span> text.<span class="me1">replaceText</span><span class="br0">&#40;</span>data<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span>r<span class="br0">&#93;</span><span class="sy0">,</span> data<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span>r<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
&nbsp;
      <span class="co1">// Append the paragraph to the target document</span>
      target.<span class="me1">appendParagraph</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="co1">// Put a page break in to start the next page, not really necessary tbh</span>
    target.<span class="me1">appendPageBreak</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="br0">&#125;</span>
&nbsp;
  <span class="co1">// Done</span>
  target.<span class="me1">saveAndClose</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>I won&#8217;t go into how this works, the comments should be pretty explanatory. To get the document IDs, just copy them from the URL when the document is open.</p>
<h4>Making it work</h4>
<p>In GDocs click the big create button, goto more, choose script. Close the welcome popup, and replace the empty function that&#8217;s there to start with with the script above.</p>
<p>Replace my document IDs with yours.</p>
<p>In the toolbar, make sure &#8216;merge&#8217; is selected in the dropdown, then hit the play button.</p>
<p>Your target document should now have your merged data <img src='http://www.malcolmchristie.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Let me know if you find this useful or have any problems!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.malcolmchristie.co.uk/228/mail-merge-in-google-docs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I think I just got blackmailed :/</title>
		<link>http://www.malcolmchristie.co.uk/215/i-think-i-just-got-blackmailed/</link>
		<comments>http://www.malcolmchristie.co.uk/215/i-think-i-just-got-blackmailed/#comments</comments>
		<pubDate>Tue, 06 Nov 2012 08:51:13 +0000</pubDate>
		<dc:creator>Malcolm</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://www.malcolmchristie.co.uk/?p=215</guid>
		<description><![CDATA[This morning I received an odd email, I&#8217;m not sure if this is a scam or serious&#8230; From: Terry (Looney******@me.com) Phone: 077******** Message: I want a refund on my app purchase. It gives incorrect information and is misleading. My PayPal [...]]]></description>
				<content:encoded><![CDATA[<p>This morning I received an odd email, I&#8217;m not sure if this is a scam or serious&#8230;</p>
<blockquote><p>From: Terry (Looney******@me.com)</p>
<p>Phone: 077********</p>
<p>Message:</p>
<p>I want a refund on my app purchase. It gives incorrect information and is misleading.</p>
<p>My PayPal email Address is looney******@googlemail.com</p>
<p>If that is easier.</p>
<p>If you don&#8217;t refund I will leave bad reviews every day and let everyone know on apple forums to avoid you and my team in the Philippines will post everyday so it shows up on top of google.</p>
<p>Thank you.</p></blockquote>
<p>So here&#8217;s a very brief, open reply to Mr Looney, explaining why I&#8217;m not sending him money&#8230;</p>
<ul>
<li>I&#8217;m not sure if this isn&#8217;t some scam, scrapping iTunes for support URLs, then scrapping the sites for forms, easily done.</li>
<li>If you are a real person complaining, try asking nicely and not being a dick about.</li>
<li>iTunes has it&#8217;s own refund process that I have no control over, they&#8217;ll refund you if you have a legitimate complaint.</li>
<li>You&#8217;ve not even specified which app your talking about?!</li>
<li>All my apps are 69p, are you seriously going to use a &#8216;team&#8217; of people to spam a forum over a 69p app, seriously?</li>
<li>I&#8217;m fairly sure this will be against T&amp;Cs on iTunes / Apple&#8217;s forums, go for it.</li>
<li>You didn&#8217;t say please.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.malcolmchristie.co.uk/215/i-think-i-just-got-blackmailed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Laravel Captcha model</title>
		<link>http://www.malcolmchristie.co.uk/207/simple-laravel-captcha-model/</link>
		<comments>http://www.malcolmchristie.co.uk/207/simple-laravel-captcha-model/#comments</comments>
		<pubDate>Wed, 24 Oct 2012 22:30:42 +0000</pubDate>
		<dc:creator>Malcolm</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.malcolmchristie.co.uk/?p=207</guid>
		<description><![CDATA[I was forced into adding captcha form validation to a Laravel site recently, but all the implementations seemed to over complicate the situation &#8211; requiring full bundles and automatically checking on POSTs and creating a separate place form validation &#8211; messy. I [...]]]></description>
				<content:encoded><![CDATA[<p>I was forced into adding captcha form validation to a Laravel site recently, but all the implementations seemed to over complicate the situation &#8211; requiring full bundles and automatically checking on POSTs and creating a separate place form validation &#8211; messy.</p>
<p>I created a very simple model that handles it all, with a very simple interface to check submission that can easily be integrated into existing form validation. New code are generated simply by adding an image with src=&#8221;/captcha&#8221; (easily changed).</p>
<p>You can check the full documentation and download the source code from github <a href="https://github.com/mchristie/Captchas-for-Laravel">https://github.com/mchristie/Captchas-for-Laravel</a></p>
<p><strong>Creating an image</strong></p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1">Route<span class="sy0">::</span><span class="me2">get</span><span class="br0">&#40;</span><span class="st_h">'captcha'</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw1">return</span> Captcha<span class="sy0">::</span><span class="me2">make</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p><strong>Validating a captcha</strong></p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>Captcha<span class="sy0">::</span><span class="me2">check</span><span class="br0">&#40;</span>Input<span class="sy0">::</span><span class="me2">get</span><span class="br0">&#40;</span><span class="st_h">'captcha'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="co1">// Correct!</span>
<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
    <span class="co1">// Wrong :(</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.malcolmchristie.co.uk/207/simple-laravel-captcha-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virgin Media&#8217;s terrible UI</title>
		<link>http://www.malcolmchristie.co.uk/187/virgin-medias-terrible-ui/</link>
		<comments>http://www.malcolmchristie.co.uk/187/virgin-medias-terrible-ui/#comments</comments>
		<pubDate>Fri, 05 Oct 2012 18:26:39 +0000</pubDate>
		<dc:creator>Malcolm</dc:creator>
				<category><![CDATA[Rants]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[TV]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.malcolmchristie.co.uk/?p=187</guid>
		<description><![CDATA[So, after spending so long meandering my way through Virgin Media&#8217;s clunky and frustrating TiVo interface I feared getting RSI in my thumb before I found anything worth watching, and realising that moaning about it to my fish wouldn&#8217;t help [...]]]></description>
				<content:encoded><![CDATA[<p>So, after spending so long meandering my way through Virgin Media&#8217;s clunky and frustrating TiVo interface I feared getting RSI in my thumb before I found anything worth watching, and realising that moaning about it to my fish wouldn&#8217;t help as the simply don&#8217;t give a shit, I decided to make use of my stagnating blog and bitch about it here instead.</p>
<p>Here is but one example of the many stupid designs you&#8217;ll find in the TiVo interface&#8230;</p>
<p><a href="http://www.malcolmchristie.co.uk/wp-content/uploads/2012/10/20121005-191941.jpg"><img class="alignnone " src="http://www.malcolmchristie.co.uk/wp-content/uploads/2012/10/20121005-191941.jpg" alt="20121005-191941.jpg" width="400" /></a></p>
<p>Now don&#8217;t get me wrong, I&#8217;m not claiming to be a designer, I&#8217;m not going to pretend I have any worth while opinions on the hues of red or their choice of line height. But, there&#8217;s some pretty obviously stupid design choices here.</p>
<p>Let&#8217;s start with the middle column, the list of shows&#8230;<br />
<a href="http://www.malcolmchristie.co.uk/wp-content/uploads/2012/10/20121005-193349.jpg"><img class="alignnone size-full" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2012/10/20121005-193349.jpg" alt="20121005-193349.jpg" /></a></p>
<p>Woman&#8217;s hour, awesome, just what I wanted to browse, every individual available episode of woman&#8217;s hour. Two whole pages of it. Now I&#8217;m sure it&#8217;s a great show, but it&#8217;s just not for me. What I don&#8217;t understand though, is why these aren&#8217;t collapsed into one item, if I want to see woman&#8217;s hour, I&#8217;ll choose it, if I don&#8217;t, I can skip past in one go.</p>
<p>And how long is this list anyway? Would it hurt to put a scroll bar on there?</p>
<p>Is there a reason I can&#8217;t skip a page at a time? On my last virgin box, I could use the red and green buttons to scroll lists page at a time, now I have to go one item at a time, nice upgrade.</p>
<p>What about that detail panel&#8230;<br />
<a href="http://www.malcolmchristie.co.uk/wp-content/uploads/2012/10/20121005-194323.jpg"><img class="alignnone size-full" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2012/10/20121005-194323.jpg" alt="20121005-194323.jpg" /></a></p>
<p>&#8220;Woman&#8217;s hour-Lorraine-Pascale, older women&#8230;&#8221; what? What&#8217;s the show called? I&#8217;ve got a 32&#8243; TV, and they&#8217;ve not found the space to show the entire program name, seriously?</p>
<p>Is that the BBC Radio 4 icon I spy there? But, a few screens back I selected &#8220;Catch up TV on demand&#8221;, not radio? Listening to radio station on TV is all well and good, but surely filtering out the huge number of radio shows is an obvious way to cut down on the list size, no?</p>
<p>&#8220;Including memories of Beatlemania, Lorraine Pascale cooks the perfect chocolate&#8230;&#8221; What? Teapot? Again, 32&#8243; TV, and not only isn&#8217;t there room to fit the whole program name, but they&#8217;ve only fitted on TEN words of the description?! Amazing.</p>
<p>Now, what&#8217;s that funny little icon below the description? That&#8217;s oh-so important it&#8217;s taking up valuable screen real-estate. &#8220;OD&#8221;, presumably that means On Demand? Well, thanks for that, I had no idea after navigating several pages titled, for example, &#8220;Catch up and on demand&#8221; and &#8220;TV on demand&#8221;, that I was looking at On Demand program&#8217;s. Good thing you didn&#8217;t waste screen space with pointless information, like the program name.</p>
<p>I know what I&#8217;ll do, I&#8217;ll press OK and get more information, surely the next screen has all the missing info? Oh, wait, that takes me to the BBC iPlayer screen, and I can&#8217;t go back. Great. Screen after screen, item by item, go one step too far &#8211; start again. Cheers.</p>
<p>Let&#8217;s just recap here, I&#8217;m scrolling item by item, through several pages of a show I don&#8217;t want to watch, on a radio channel when I want to watch TV, I can see just ten words of description, and if I go one step too far by mistake &#8211; I have I start the whole browsing process all over again from the beginning.</p>
<p>It took me 56 button presses to get there (yeah, I counted), and now I&#8217;ll have to go through it all over again. And I don&#8217;t even know if there&#8217;s a next page in WXYZ to bother scrolling though it all over again.</p>
<p>Fuck it, I think I&#8217;ll watch Netflix on my Apple TV instead.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.malcolmchristie.co.uk/187/virgin-medias-terrible-ui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jumping into Cloud hosting</title>
		<link>http://www.malcolmchristie.co.uk/136/jumping-into-cloud-hosting/</link>
		<comments>http://www.malcolmchristie.co.uk/136/jumping-into-cloud-hosting/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 21:14:08 +0000</pubDate>
		<dc:creator>Malcolm</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.malcolmchristie.co.uk/?p=136</guid>
		<description><![CDATA[I recently decided to move my hosting to a cloud environment, which was a pretty daunting task since I didn&#8217;t really have any experience managing my own server, hopefully this article about my experience can help you do the same! [...]]]></description>
				<content:encoded><![CDATA[<p>I recently decided to move my hosting to a cloud environment, which was a pretty daunting task since I didn&#8217;t really have any experience managing my own server, hopefully this article about my experience can help you do the same!<span id="more-136"></span></p>
<h2>Why the cloud?</h2>
<p>I&#8217;d been pretty happy with my previous host <a href="http://www.heartinternet.co.uk/" target="_blank">Heart Internet</a> for a few years, I chose them because they we&#8217;re a UK based host, and their reseller account seemed perfect for me. Not that I resell a lot of hosting (although I was planning to at the time), but I have a few sites I need hosting for, and being able to setup and manage as many independent accounts as I needed, each with unlimited disk space and bandwidth for £40 a month seemed like great value for money.</p>
<p>But, being shared hosting, it had it&#8217;s limits. I couldn&#8217;t run a CRON job more than once an hour, I had to sign various legal agreements for every account I wanted to use SSH on (which I never once managed to actually get activated!), I was stuck with the PHP setup they wanted to use (although this was never really a problem), the speed of the server never seemed too impressive, and there was more down time than I would have liked.</p>
<h2>Why not the cloud?</h2>
<p>Cloud servers, on the other hand, have none of these limitations. I now have full access to the setup, I can change the OS, configure it how I like, and do with it as I please. On the other hand, the major downsides are that I can change the OS, configure it how I like, and do with it as I please! Aside from hardware or network problems, any downtime is my fault, and it&#8217;s my responsibility to fix it.</p>
<p>Unless you&#8217;re a developer, or have some unusual need for your hosting, Cloud probably isn&#8217;t the best choice for you.</p>
<p>But as it turns out, this isn&#8217;t as big an issue as I&#8217;d thought it might be.</p>
<h2>Choosing a host</h2>
<p>Since you choose your own setup for a cloud environment, there aren&#8217;t as many comparisons between hosts &#8211; you don&#8217;t need to pick one with the features like SSH or latest the PHP build etc., that&#8217;s all up to you.</p>
<p>I went with <a href="http://www.rackspace.co.uk/" target="_blank">Rackspace</a>, because they&#8217;re reasonably priced, have UK servers, and I&#8217;ve heard good things about their support (not that you get much with Cloud hosting, but still, good support is good support). They also have some handy things such as Cloud files and (optional) automatic daily backups of your cloud instance.</p>
<h2>Choosing your OS</h2>
<p>There&#8217;s quite a few options here, which may be limited by your host. My first choice was Redhat Linux, because a previous (non-cloud) host I&#8217;d used ran Redhat, and it seems to be the industry standard. I even paid the extra monthly licence for it for a while.</p>
<p>But, I&#8217;ve since changed to CentOS, which has no monthly licence fee. There isn&#8217;t really any major difference between the two, Redhat comes with YUM (which lets you automagically install things), whereas CentOS has up2date instead. However, as I&#8217;ll explain in a minute that shouldn&#8217;t really matter, so save your pennies and go with CentOS <img src='http://www.malcolmchristie.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Getting setup</h2>
<p>The first things I tried (and don&#8217;t recommend you do), is doing it all myself, since that seemed to be the Cloud way.</p>
<p>While I was using RedHat, I logged in with SSH and ran &#8216;YUM installgroup &#8220;web server&#8221; &#8216;, and after saying yes to a few things and watching it do lots of stuff I didn&#8217;t understand, I had a fully installed web server and felt very please with myself. I dived into apache config files and went about learning how to configure the hosting all by myself.</p>
<p>Then, I learnt about <a href="http://www.webmin.com/" target="_blank">webmin</a> and installed that [sort of] automagically using YUM too. That made things a lot easier, but then I decided to go an even better way!</p>
<h2>Getting setup, the proper way</h2>
<p>I&#8217;d previous ignored using cPanel, because I looked at the single licence price of about £265 ($425) and thought, whats the point, I can do it all myself, and learning how to do it manually will benefit me in the long run, right? Well, yeah, maybe.</p>
<p>Then, someone pointed out that the licence I&#8217;d actually need for a VPS (aka, Cloud environment), was only ~£125 ($200), and I could get a cheaper monthly licence from a cPanel reseller! I figured a £10/month cPanel licence from <a href="http://buycpanel.com">buycpanel.com</a>, plus the roughly £15/month for hosting was still far cheaper than the £40 I&#8217;d been paying for hosting previously, so, I gave it a go!</p>
<p>I deleted the Cloud instance I had, since cPanel comes with everything you need (PHP, MySQL, etc., so don&#8217;t install anything yourself), and went about installing cPanel.</p>
<h2>Installing cPanel</h2>
<p>To install cPanel, log into your sever with SSH as root, and set a hostname by typing:</p>
<p><strong># hostname your-domain.com</strong></p>
<p>This shouldn&#8217;t be a domain you want to use as a publicly accessible site (although you can do that, it&#8217;s not recommended).</p>
<p>Then, run these simple commands:</p>
<p><strong># cd /home<br />
</strong><strong># </strong><strong>wget -N http://httpupdate.cpanel.net/latest<br />
# </strong><strong>sh latest</strong></p>
<p>Thats it. It&#8217;ll take a while, but that will install cPanel for you, and you&#8217;ll have  everything you need right there.</p>
<p>You can then log into cPanel using your root username and password at <em>your-domain.com:2087</em>.</p>
<p>cPanel will manage everything for you, you can even setup reseller accounts which can setup their own hosting accounts. And, it monitors the server for my common issues, and even restarts crashed processes!</p>
<p>Hopefully this will give you an idea what to expect if you jump into Cloud hosting, and get you setup in the quickest, easiest, and perhaps most affordable way. I&#8217;ll write another blog soon about some excellent add-ons I use to secure my server and monitor it to make sure it&#8217;s running smoothly.</p>
<p>Let me know if you found this helpful or not in the comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.malcolmchristie.co.uk/136/jumping-into-cloud-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New App just released!</title>
		<link>http://www.malcolmchristie.co.uk/117/new-app-just-released/</link>
		<comments>http://www.malcolmchristie.co.uk/117/new-app-just-released/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 20:29:30 +0000</pubDate>
		<dc:creator>Malcolm</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.malcolmchristie.co.uk/?p=117</guid>
		<description><![CDATA[Well, I say I&#8217;ve released a new App, I&#8217;ve rebranded the Feeling Hungry iPhone App so it&#8217;s now called &#8216;Takeaway Finder&#8217;. I think this will help it do a lot better in the App store, as it&#8217;ll be far more [...]]]></description>
				<content:encoded><![CDATA[<p><a title="Takeaway Finder icon" href="http://itunes.apple.com/gb/app/takeaway-finder/id424014341?mt=8"><img class="alignright size-full wp-image-118" style="margin: 0 0 10px 10px;" title="Takeaway Finder icon" src="http://www.malcolmchristie.co.uk/wp-content/uploads/2011/03/itunes_icon_large.png" alt="Takeaway Finder icon" width="177" height="179" /></a>Well, I say I&#8217;ve released a new App, I&#8217;ve rebranded the Feeling Hungry iPhone App so it&#8217;s now called &#8216;Takeaway Finder&#8217;.</p>
<p>I think this will help it do a lot better in the App store, as it&#8217;ll be far more obvious to people casually browsing what it&#8217;s for! Also, a far more attractive icon, and hopefully loads of improvements to the rest of the App soon too!</p>
<p>Using some excellent new marketing techniques, the new App went straight into the top 50 of it&#8217;s category, and [so far] it hasn&#8217;t left it!</p>
<p><a href="http://itunes.apple.com/gb/app/takeaway-finder/id424014341?mt=8">You can download Takeaway Finder here.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.malcolmchristie.co.uk/117/new-app-just-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pointless blog</title>
		<link>http://www.malcolmchristie.co.uk/113/pointless-blog/</link>
		<comments>http://www.malcolmchristie.co.uk/113/pointless-blog/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 20:10:55 +0000</pubDate>
		<dc:creator>Malcolm</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.malcolmchristie.co.uk/?p=113</guid>
		<description><![CDATA[Here&#8217;s a completely pointless blog to test my newly installed code highlighting plugin&#8230; function categories&#40;&#41; &#123; $category = new Category&#40;&#41;; $category-&#62;order_by&#40;'name', 'asc'&#41;-&#62;get&#40;&#41;; &#160; $results = array&#40;&#41;; $x = 0; foreach &#40;$category as $c&#41; &#123; $results&#91;$x&#93;&#91;'id'&#93; = $c-&#62;id; $results&#91;$x&#93;&#91;'name'&#93; = $c-&#62;name; [...]]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a completely pointless blog to test my newly installed code highlighting plugin&#8230;</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">function</span> categories<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	<span class="re0">$category</span> <span class="sy0">=</span> <span class="kw2">new</span> Category<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="re0">$category</span><span class="sy0">-&gt;</span><span class="me1">order_by</span><span class="br0">&#40;</span><span class="st_h">'name'</span><span class="sy0">,</span> <span class="st_h">'asc'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	<span class="re0">$results</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="re0">$x</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
	<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$category</span> <span class="kw1">as</span> <span class="re0">$c</span><span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		<span class="re0">$results</span><span class="br0">&#91;</span><span class="re0">$x</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'id'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$c</span><span class="sy0">-&gt;</span><span class="me1">id</span><span class="sy0">;</span>
		<span class="re0">$results</span><span class="br0">&#91;</span><span class="re0">$x</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'name'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$c</span><span class="sy0">-&gt;</span><span class="me1">name</span><span class="sy0">;</span>
		<span class="re0">$x</span><span class="sy0">++;</span>
	<span class="br0">&#125;</span>
	<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">output</span><span class="sy0">-&gt;</span><span class="me1">set_output</span><span class="br0">&#40;</span><span class="kw3">json_encode</span><span class="br0">&#40;</span><span class="re0">$results</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	Iphone_activity<span class="sy0">::</span><span class="me2">add</span><span class="br0">&#40;</span><span class="st_h">'categories'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Cool, huh?</p>
<p><a href="http://gehrcke.de/wp-geshi-highlight/">wp-geshi-highlight</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.malcolmchristie.co.uk/113/pointless-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My brand spanking new blog!</title>
		<link>http://www.malcolmchristie.co.uk/63/my-brand-spanking-new-blog/</link>
		<comments>http://www.malcolmchristie.co.uk/63/my-brand-spanking-new-blog/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 21:26:17 +0000</pubDate>
		<dc:creator>Malcolm</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.malcolmchristie.co.uk/?p=63</guid>
		<description><![CDATA[Here, in future, you find a mixture of my inane ramblings, deep philosophical thoughts, useful snippets of code, and perhaps the odd picture of a kitteh looking for a cheese burger. But, for now, alas, (I&#8217;ve always wanted to use [...]]]></description>
				<content:encoded><![CDATA[<p>Here, in future, you find a mixture of my inane ramblings, deep philosophical thoughts, useful snippets of code, and perhaps the odd picture of a kitteh looking for a cheese burger.</p>
<p>But, for now, alas, (I&#8217;ve always wanted to use the word alas in a blog), all you will find is the end of this sentence, right about&#8230; here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.malcolmchristie.co.uk/63/my-brand-spanking-new-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
