<?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>Kian Ryan &#187; Code</title>
	<atom:link href="http://www.kianryan.co.uk/category/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kianryan.co.uk</link>
	<description>.NET, Android, Geekery</description>
	<lastBuildDate>Fri, 23 Dec 2011 23:50:07 +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>JsonRequestBehaviour.AllowGet &amp; Visual Studio Regex</title>
		<link>http://www.kianryan.co.uk/2011/02/jsonrequestbehaviour-allowget-visual-studio-regex/</link>
		<comments>http://www.kianryan.co.uk/2011/02/jsonrequestbehaviour-allowget-visual-studio-regex/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 22:11:45 +0000</pubDate>
		<dc:creator>kianryan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.kianryan.co.uk/?p=546</guid>
		<description><![CDATA[Nice quick win &#8211; currently upgrading a client Intranet project from ASP.NET MVC1 to MVC2. Microsoft changed how get requests are handled in this release and disallowed GET JSON requests by default. Before going any further, note that there are security implications in allowing JSON get requests. To get around this, either make your JSON [...]]]></description>
			<content:encoded><![CDATA[<p>Nice quick win &#8211; currently upgrading a client Intranet project from ASP.NET MVC1 to MVC2.  Microsoft changed how get requests are handled in this release and disallowed GET JSON requests by default.  Before going any further, note that there are <a href="http://haacked.com/archive/2009/06/25/json-hijacking.aspx">security implications in allowing JSON get requests</a>.</p>

<p>To get around this, either make your JSON requests happen by POST, or change:</p>

<p><pre class="brush: csharp; title: ; notranslate">
return Json(object);
</pre></p>

<p>to</p>

<p><pre class="brush: csharp; title: ; notranslate">
return Json(object, JsonRequestBehaviour.AllowGet); 
</pre></p>

<p>Not too bad if you&#8217;ve only got a couple of instances, but if you&#8217;ve got Json coming out of your ears, it&#8217;s a pain to implement it everywhere.  You can either derive yourself a controller object and override the default Json behaviour &#8211; or use a Visual Studio find and replace regex to change your Json responses for you:</p>

<p><img src="http://www.kianryan.co.uk/wp-content/uploads/2011/02/Screen-shot-2011-02-11-at-21.54.57.jpg" alt="" title="Screen shot 2011-02-11 at 21.54.57" width="483" height="449" class="alignnone size-full wp-image-547" /></p>

<p>Unlike our Ruby, PHPing and Perl counterparts, regular expressions aren&#8217;t something that .NET developers tend to come across on a regular basis, and as such we often forget they&#8217;re lurking in the toolbox.  Visual Studio find/replace has a reasonable regex mechanism, but it&#8217;s not perl standard.  <a href="http://msdn.microsoft.com/en-us/library/2k3te2cs(v=VS.100).aspx">Check the docs for details</a>.</p>

<p>For reference &#8211; we know this isn&#8217;t best practice, but if you need a quick and dirty fix, this will do it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kianryan.co.uk/2011/02/jsonrequestbehaviour-allowget-visual-studio-regex/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LeedsHack 2010</title>
		<link>http://www.kianryan.co.uk/2010/11/leedshack-2010/</link>
		<comments>http://www.kianryan.co.uk/2010/11/leedshack-2010/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 11:06:18 +0000</pubDate>
		<dc:creator>kianryan</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.kianryan.co.uk/?p=410</guid>
		<description><![CDATA[Pretty simple &#8211; take 24 hours, a venue, some wifi, food and drink and build something cool with a few other people. And so off we went. Tim Hastings (@timhastings), Jason Reast-Jones (@jreast) and Paul Mackenzie (@prmack) and I embarked on an idea for a geo-location platform which would trigger events when you came in [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_442" class="wp-caption alignright" style="width: 330px"><a href="http://www.flickr.com/photos/martin_88/5151653193/"><img src="http://www.kianryan.co.uk/wp-content/uploads/2010/11/5151653193_b2a3b10993_z.jpg" alt="" title="Leeds Hackday 1" width="320" height="213" class="size-full wp-image-442" /></a><p class="wp-caption-text">Photo by Martin_88</p></div>

<p><strong>Pretty simple &#8211; take 24 hours, a venue, some wifi, food and drink and build something cool with a few other people.</strong></p>

<p>And so off we went.  Tim Hastings (@timhastings), Jason Reast-Jones (@jreast) and Paul Mackenzie (@prmack) and I embarked on an idea for a geo-location platform which would trigger events when you came in proximity to previously marked locations.  Out of this came <a href="http://geotrigga.com/">Geotrigga</a>.</p>

<div id="attachment_446" class="wp-caption alignleft" style="width: 330px"><a href="http://www.flickr.com/photos/martin_88/5151652769/"><img src="http://www.kianryan.co.uk/wp-content/uploads/2010/11/5151652769_65f3b63d3f_z.jpg" alt="" title="Leed&#039;s Hack 2" width="320" height="205" class="size-full wp-image-446" /></a><p class="wp-caption-text">Photo by Martin_88</p></div>

<p>I&#8217;m impressed with how much we produced in 24 hours.  We produced a working API, a mobile web site and a mobile application (which runs as a background service) and a working trigger to SMS service.  Mechanics are in place to enable a whole <strong>range</strong> of other triggers, including third party web hooks.  Problems over the evening included getting OAuth to do as it was damn well told (shakes fist at Twitter), and finding an interesting IntelliJ bug that kept making my parcelable definitions disappear.  There&#8217;ll be a follow-up post discussing some of the architecture shortly.</p>

<p>Tim took to the stage to present and we came away with the Best Mobile Hack award.  Awesome.</p>

<p>It&#8217;s the first hack day I&#8217;ve done.  We worked for around 20-23 of the 24 hour period, with the entire team taking something of a power nap at 4am (don&#8217;t underestimate the effect of the power nap).</p>

<div id="attachment_452" class="wp-caption alignright" style="width: 330px"><a href="http://www.flickr.com/photos/martin_88/5153926846/"><img src="http://www.kianryan.co.uk/wp-content/uploads/2010/11/5153926846_c52416aef9_z.jpg" alt="" title="Leed&#039;s Hack 3" width="320" height="226" class="size-full wp-image-452" /></a><p class="wp-caption-text">Photo by Martin_88</p></div>

<p><a href="http://www.thehodge.co.uk/">The Hodge</a> and the sponsors made sure we stayed caffeinated and fed, <a href="http://leedshack.com/sponsors/">big shout-outs to all the sponsors</a>.  No sponsors, no event.  Pizza on Saturday kept us going until well into Sunday morning.  Sunday morning breakfast looked awesome, but due to the potential of food-inducing coma I had to miss breakfast and ate a small zillion of prawn sandwiches later in the day instead.  Beer provided by <a href="http://www.codemyconcept.com/">CodeMyConcept</a> was proper <a href="http://www.york-brewery.co.uk/">York Brewery</a> ale, not your pansy southern lagers.  Colour me suitably impressed.</p>

<p>My favourite hack of the day?  Making a Livescribe pen go &#8220;Moo&#8221; when you write the word &#8220;cow&#8221;.  HOW FREAKIN&#8217; AWESOME IS THAT?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kianryan.co.uk/2010/11/leedshack-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parcelable, AIDL and IntelliJ</title>
		<link>http://www.kianryan.co.uk/2010/11/parcelable-aidl-and-intellij/</link>
		<comments>http://www.kianryan.co.uk/2010/11/parcelable-aidl-and-intellij/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 18:24:21 +0000</pubDate>
		<dc:creator>kianryan</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.kianryan.co.uk/?p=426</guid>
		<description><![CDATA[If you&#8217;re using IntelliJ IDEA to build your Android apps (as moi does), and you try to create AIDL files to sit beside your classes (specifically for the Parcelable interface), you may notice your own classes magically disappearing at compile time. This stumped me for a while until I realised that normally an AIDL file [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re using IntelliJ IDEA to build your Android apps (as moi does), and you try to create AIDL files to sit beside your classes (specifically for the Parcelable interface), you may notice your own classes magically disappearing at compile time.</p>

<p>This stumped me for a while until I realised that <em>normally</em> an AIDL file would generate a .java file.  It doesn&#8217;t for the Parcelable interface.  But there&#8217;s a bug in <a href="http://youtrack.jetbrains.net/issue/IDEA-59209">IntelliJ</a> which deletes your .java file on build.  The way to get around this is to create a new source folder called aidl and add your AIDL file in with the same namespacing as where your main class lives.  Then add the aidl folder to the module source folders (in module settings).  Your aidl files will now be compiled into your project without nuking the existing .java files.</p>

<p><img src="http://www.kianryan.co.uk/wp-content/uploads/2010/11/Screen-shot-2010-11-08-at-18.22.19.jpg" alt="" title="Project Structure" width="600" height="398" class="alignleft size-full wp-image-427" /></p>

<p><em>Update: Apparently, as of today, this bug has been fixed in IDEA X EAP.  Still putting the post out there for people running on earlier versions.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kianryan.co.uk/2010/11/parcelable-aidl-and-intellij/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fizz Buzz</title>
		<link>http://www.kianryan.co.uk/2010/09/fizz-buzz/</link>
		<comments>http://www.kianryan.co.uk/2010/09/fizz-buzz/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 17:12:22 +0000</pubDate>
		<dc:creator>kianryan</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.kianryan.co.uk/2010/09/fizz-buzz/</guid>
		<description><![CDATA[I just read &#8220;Why Can&#8217;t Programmer&#8217;s Program&#8221; over on Coding Horror. Out of sheer curiosity, I googled &#8220;Fizz Buzz C#&#8221; just to see what some people had engineered. The idea of the &#8220;Fizz Buzz&#8221; test is to provide a starting point to prove you can write working code. Nothing complicated, but apparently 199/200 applicants can&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>I just read <a href="http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html">&#8220;Why Can&#8217;t Programmer&#8217;s Program&#8221;</a> over on Coding Horror.  Out of sheer curiosity, I googled &#8220;Fizz Buzz C#&#8221; just to see what some people had engineered.  The idea of the <a href="http://en.wikipedia.org/wiki/Bizz_buzz">&#8220;Fizz Buzz&#8221;</a> test is to provide a starting point to prove you can write working code.  Nothing complicated, but apparently 199/200 applicants can&#8217;t even do this.</p>

<p>I do hiring for a few of my clients, and I&#8217;m pretty much in agreement with the general community sentiments.  I&#8217;ve had people across my desk quite a few times with what look to be quite distinctive backgrounds, only to fail at simple day-to-day ASP.NET coding tasks.  I would recommend to <em>anyone</em> involved in recruiting to make their candidates sit a simple skills test to determine whether they can actually code before putting applicants in front of a client.  For discussion, I submit my own Fizz Buzz answer.</p>

<div>
<pre class="brush: csharp; title: ; notranslate">
using System;

public class Program
{
    public static void Main(string[] args)
    {
        for (int i = 1; i &lt; 101; i++) // i &lt;= 100 is also fine
        {
            Console.WriteLine(FizzBuzz(i));
        }
    }
    
    public static string FizzBuzz(int i)
    {
        if (i % 15 == 0) return &quot;FizzBuzz&quot;;
        if (i % 3 == 0) return &quot;Fizz&quot;;
        if (i % 5 == 0) return &quot;Buzz&quot;;
        return i.ToString();
    }
}
</pre>
</div>

<p>That took 90 seconds to write, <em>and</em> we can have a conversation about why I&#8217;ve factored FizzBuzz as a method (easy unit testing), why I&#8217;m using multiple exit points (because I think in this case it adds clarity) and why I&#8217;ve not made the amazingly trivial mistake (which around 50% of the google results did) of writing i &lt; 100.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kianryan.co.uk/2010/09/fizz-buzz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CruiseControl.NET Google Gadget</title>
		<link>http://www.kianryan.co.uk/2010/09/cruisecontrol-net-google-gadget/</link>
		<comments>http://www.kianryan.co.uk/2010/09/cruisecontrol-net-google-gadget/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 01:31:18 +0000</pubDate>
		<dc:creator>kianryan</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.kianryan.co.uk/?p=355</guid>
		<description><![CDATA[A small bit of itch scratching. I&#8217;ve just finished a CruiseControl.NET status monitor on Google&#8217;s gadget platform. This means you can embed it in iGoogle, JIRA, Confluence, etc. You can access it here: http://www.orangetentacle.co.uk/iGoogle/ccnet/ccnet-gadget.xml I&#8217;ve also submitted it to the Gadget directory, so if it&#8217;s approved (no reason why not), it&#8217;ll also appear on there. [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float:right;padding:20px;" src="http://www.orangetentacle.co.uk/iGoogle/ccnet/screenshot.png" alt="" />
A small bit of itch scratching.</p>

<p>I&#8217;ve just finished a CruiseControl.NET status monitor on Google&#8217;s gadget platform.  This means you can embed it in iGoogle, JIRA, Confluence, etc.  You can access it here:</p>

<p>http://www.orangetentacle.co.uk/iGoogle/ccnet/ccnet-gadget.xml</p>

<p>I&#8217;ve also submitted it to the Gadget directory, so if it&#8217;s approved (no reason why not), it&#8217;ll also appear on there.</p>

<p><strong>Features</strong></p>

<ol>
    <li>Colour coded statuses</li>
    <li>Alerts on broken builds</li>
    <li>Title Nicknames &#8211; specify different nicknames for different servers</li>
    <li>Custom time intervals</li>
    <li>Force Build from gadget (black box on RHS).</li>
    <li>Chrome/Firefox/IE7/8 (IE6 can go hang&#8230;)</li>
</ol>

<p>Feel free to submit ideas for improvements.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kianryan.co.uk/2010/09/cruisecontrol-net-google-gadget/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server NULLs and their impact</title>
		<link>http://www.kianryan.co.uk/2010/09/sql-server-nulls-and-their-impact/</link>
		<comments>http://www.kianryan.co.uk/2010/09/sql-server-nulls-and-their-impact/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 10:04:28 +0000</pubDate>
		<dc:creator>kianryan</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.kianryan.co.uk/2010/09/sql-server-nulls-and-their-impact/</guid>
		<description><![CDATA[This is part rant, part discussion&#8230; In this modern world, developing database driven applications has become pretty damn straightforward, even for us .NET coders. Start a project, grab a ORM framework of choice (Subsonic, Entity Framework, Linq 2 SQL), define a database, create your tables, generate your classes and POW! Job done. Which is awesome. [...]]]></description>
			<content:encoded><![CDATA[<p>This is part rant, part discussion&#8230;</p>

<p>In this modern world, developing database driven applications has become pretty damn straightforward, even for us .NET coders.  Start a project, grab a ORM framework of choice (Subsonic, Entity Framework, Linq 2 SQL), define a database, create your tables, generate your classes and POW!  Job done.</p>

<p>Which is awesome.  Apart from the fact that your class behaviour is now tightly defined to your database behaviour (by default, I appreciate you can change this).  Which means in turn, you really should be taking great care in defining your databases, since the closer this maps your domain model, the easier your job becomes.</p>

<p>So why on earth leave your columns set to NULL unless you actually intend to allow NULL values?  I appreciate that SQL Server allows a column as null by default, but it has so many implications if you&#8217;re not intending it it&#8217;s untrue.  Lets take the following examples:</p>

<div>
<pre class="brush: csharp; title: ; notranslate">
int? Age { get; set; }

if (Age &gt; 0)
{
    Console.Writeline(&quot;This is awesome folks!&quot;);
}
</pre>
</div>

<div>
<pre class="brush: csharp; title: ; notranslate">
int Age { get; set; }

if (Age &gt; 0)
{
    Console.Writeline(&quot;This is awesome folks!&quot;);
}
</pre>
</div>

<p>Clearly the two are not equivalent.  The first wont even compile, since the compiler has enough sense to recognise that int? could be null and therefore the expression int? > int is not valid.</p>

<p>It could be argued that Age <em>may indeed</em> be nullable, nullable indicating a genuine lack of this piece of knowledge.  If this is the case, then we need to take that into account.</p>

<p><pre class="brush: csharp; title: ; notranslate">
int? Age { get; set; }&lt;/p&gt;

&lt;p&gt;if (Age == null)
    Console.Writeline(&amp;quot;We don't have an age for this person...&amp;quot;);
else if (Age.value &amp;gt; 0)
    Console.Writeline(&amp;quot;This is awesome folks!&amp;quot;);
</pre></p>

<p>In this case we have a potential for three different things to be happening, all of which need to be taken into account.  Each one is a semantically important case which requires understanding and testing.</p>

<p>But often a field being left nullable is just a sign of laziness on the part of the database being developed.  The giveaway is when the following code is spotted:</p>

<p><pre class="brush: csharp; title: ; notranslate">
int? Age { get; set; }&lt;/p&gt;

&lt;p&gt;if ((Age ?? 0) &amp;gt; 0)
{
    Console.Writeline(&amp;quot;This is awesome folks!&amp;quot;);
}
</pre></p>

<p>The ?? operator is an expressive operator used to define a default behaviour, not to correct a mistake made elsewhere by the developer.  It would seem common sense to go back and change the model so that the code reflects the first example, but more often than not I see developers opting for option above.</p>

<p>Please use NULL wisely.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kianryan.co.uk/2010/09/sql-server-nulls-and-their-impact/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET Website Builds Taking Forever?</title>
		<link>http://www.kianryan.co.uk/2010/09/net-website-builds-taking-forever/</link>
		<comments>http://www.kianryan.co.uk/2010/09/net-website-builds-taking-forever/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 17:45:42 +0000</pubDate>
		<dc:creator>kianryan</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.kianryan.co.uk/2010/09/net-website-builds-taking-forever/</guid>
		<description><![CDATA[I could kick myself for this one&#8230; The credit goes to a co-worker, who spotted this one straight off the bat. I&#8217;ve got two projects at the moment which consist of a DAL, a website and an admin site. Pretty straightforward projects, with large quantities of content stored in the website folder_. When building the [...]]]></description>
			<content:encoded><![CDATA[<p>I could kick myself for this one&#8230;  The credit goes to a co-worker, who spotted this one straight off the bat.</p>

<p>I&#8217;ve got two projects at the moment which consist of a DAL, a website and an admin site.  Pretty straightforward projects, with large quantities of content stored <strong>in the website folder</strong>_.  When building the project on our CC.NET build server, through an msbuild exec, the website would appear to compile pretty quickly, and then sit around for <em>forever</em> before finishing.</p>

<p>The guilty party is the precompiled site folder.  When the site is being compiled, all the assets from the original site are being copied, including the several gig of content, which causes the process to hang for a minute or two while the files are copied.  Move the files out from the website and hey presto, back to fifteen second compile times.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kianryan.co.uk/2010/09/net-website-builds-taking-forever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fiddler 2 and MVC Forms</title>
		<link>http://www.kianryan.co.uk/2010/04/fiddler-2-and-mvc-forms/</link>
		<comments>http://www.kianryan.co.uk/2010/04/fiddler-2-and-mvc-forms/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 08:51:01 +0000</pubDate>
		<dc:creator>kianryan</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.kianryan.co.uk/2010/04/fiddler-2-and-mvc-forms/</guid>
		<description><![CDATA[I&#8217;ve been using ASP.NET MVC for a couple of projects now, and so far my assessment is lukewarm. I like it in that it lets me play with raw data and is increadibly powerful, extensible and testable. It does take quite a while to spin things up though, and you can end up in a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using ASP.NET MVC for a couple of projects now, and so far my assessment is lukewarm.  I like it in that it lets me play with raw data and is increadibly powerful, extensible and testable.  It does take quite a while to spin things up though, and you can end up in a headache of chase the forms.  It&#8217;s quite likely I&#8217;ve not <em>quite</em> got the hang of it yet, but that&#8217;s fine.</p>

<p>One tool that has proved invaluable to my understanding of forms, FormCollections and the noise going backwards and forwards between my app and the browser is <a href="http://www.fiddler2.com/fiddler2/">Fiddler 2</a>.  It&#8217;s a proxy server with a UI over the top that lets you see the requests and responses that are sent between your web browser and server.  It&#8217;s great to understand the shape of the data your sending to the formCollection, whether various fields are sending the right name, checking that JSON data as it&#8217;s coming back etc.  In no respect should it replace testing, but it makes understanding the flow significantly easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kianryan.co.uk/2010/04/fiddler-2-and-mvc-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Masque Mobile: The fencing ref&#8217;s Android friend.</title>
		<link>http://www.kianryan.co.uk/2009/12/masque-mobile-the-fencing-refs-android-friend/</link>
		<comments>http://www.kianryan.co.uk/2009/12/masque-mobile-the-fencing-refs-android-friend/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 13:29:31 +0000</pubDate>
		<dc:creator>kianryan</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.kianryan.co.uk/2009/12/masque-mobile-the-fencing-refs-android-friend/</guid>
		<description><![CDATA[Orange Tentacle have just released their latest Android application: Masque Mobile. Masque Mobile is a fencing referee&#8217;s friend designed to take the pain out of juggling scores, times and cards. The UI has been built, and rebuilt around the ideal of a clean interface designed to minimise potential mistakes. The referee is presented with a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.kianryan.co.uk/wp-content/uploads/2009/12/promotional.png" alt="Promotional" /></p>

<p>Orange Tentacle have just released their latest Android application: Masque Mobile.  Masque Mobile is a fencing referee&#8217;s friend designed to take the pain out of juggling scores, times and cards.</p>

<p><img src="http://www.kianryan.co.uk/wp-content/uploads/2009/12/screenshot_1.png" alt="Screenshot 1" /></p>

<p>The UI has been built, and rebuilt around the ideal of a clean interface designed to minimise potential mistakes.  The referee is presented with a clean UI, with only the score counters, cards and time on screen.  A large button with haptic feedback means the timer can be started and stopped with the eyes away from the device.</p>

<p><img src="http://www.kianryan.co.uk/wp-content/uploads/2009/12/screenshot_3.png" alt="Screenshot 3" /></p>

<p>If a penalty occurs during a bout, the referee can action a card by selecting the appropriate card outline.  Optionally a full screen card can be presented to the offending party.  The interface will keep track of the number of cards awarded and can also award hits to opponents.</p>

<p><img src="http://www.kianryan.co.uk/wp-content/uploads/2009/12/screenshot_4.png" alt="Screenshot 4" /></p>

<p>Other features are cleverly hidden away.  Priority resets, and breaks are all actioned from the menu, and preferences to define period length, and the amount and kinds of feedback the application provide can all be set from the preferences dialog.</p>

<p>This is the first &#8220;paid for&#8221; app released by Orange Tentacle (at a very modest 99p), and while we&#8217;re not expecting it to be proving Porsches for Christmas, we hope the fencing community will appreciate the amount of time that has gone into developing this little application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kianryan.co.uk/2009/12/masque-mobile-the-fencing-refs-android-friend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resources For Android Development</title>
		<link>http://www.kianryan.co.uk/2009/11/resources-for-android-development/</link>
		<comments>http://www.kianryan.co.uk/2009/11/resources-for-android-development/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 14:29:46 +0000</pubDate>
		<dc:creator>kianryan</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.kianryan.co.uk/2009/11/resources-for-android-development/</guid>
		<description><![CDATA[Just a short post today, outlining some cool stuff I&#8217;ve found for Android development. IntelliJ IDEA Google have very kindly put together the ADT for Eclipse, which consists of plugins and layout managers to make development a bit smoother. Which would be great for me, if using Eclipse didn&#8217;t make me want to pull my [...]]]></description>
			<content:encoded><![CDATA[<p>Just a short post today, outlining some cool stuff I&#8217;ve found for Android development.</p>

<h1>IntelliJ IDEA</h1>

<p>Google have very kindly put together the ADT for Eclipse, which consists of plugins and layout managers to make development a bit smoother.  Which would be great for me, if using Eclipse didn&#8217;t make me want to pull my nails out with forceps (I&#8217;m a Visual Studio person by day).  I dislike Eclipse so much, that I spent most of the last project building in <a href="http://macromates.com/">TextMate</a> and looking up API references by hand.  The very nice people who make my most favourite Visual Studio plugin in the whole WORLD &#8211; <a href="http://www.jetbrains.com/resharper/">Resharper</a>, also make a very nice Java IDE called <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>.  Version 8 came with some basic plugins you could download for Android development, but the very nice people at Jetbrains have put some serious time into the Android tools for Version 9 of IntelliJ.  Inbuilt Logcat support, and a run/deploy model which beats the socks off the Eclipse one.  I believe there&#8217;s debugging support as well &#8211; I&#8217;ve not been able to test that yet though.  All in all, a very nice environment.  Oh, and most of the refactoring &amp; code navigation tools that make Resharper so awesome in the first place.  Check out <a href="http://www.jetbrains.com/idea/nextversion/index.html">version 9 BETA</a>.</p>

<h1>DroidDraw Beta</h1>

<p><a href="http://www.droiddraw.org/">DroidDraw</a> is a cross-browser UI designer and editor for Android applications.  I&#8217;ve not had a proper play around with it yet, I&#8217;ve just been using it for a few days, but so far it is officially awesome.  Much more reliable than the in built Eclipse editor, and nowhere near as frustrating.  I&#8217;ll be honest, now I&#8217;ve got the very, <em>very</em> good XML support which IntelliJ provides, I&#8217;m not needing it so much, but it makes a great prototyping tool.</p>

<h1>Linky Linky Linky</h1>

<p>Some articles which have been useful over the past few days:<br />
<a href="http://www.maximyudin.com/2008/02/25/android/how-to-use-alertdialogbuilder-in-android-applications/">How to use AlertDialog.Builder in Android applications</a> <em>Great quick reference to AlertDialog.Builder.</em><br />
<a href="http://www.androidguys.com/2008/09/29/whats-your-preference-part-one/">What&#8217;s Your Preference: Part One</a> <em>Writing preferences should be easy.  _Don&#8217;t do my trick and write a load of custom layouts, only to realise the API does 90% of the work for you</em><br />
<a href="http://www.androidguys.com/2008/10/07/whats-your-preference-part-two/">What&#8217;s Your Preference: Part Two</a> <em>more of the above</em><br />
<a href="http://www.darshancomputing.com/android/1.5-drawables.html">Android 1.5 android.R.drawable Icon Resources</a> <em>The API contains a load of built in graphics you can just reference.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kianryan.co.uk/2009/11/resources-for-android-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
