<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>MatthewStyles.com</title>
    <link>http://www.matthewstyles.com</link>
    <description>The lifestream of Matthew Styles</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" href="http://posterous.com/api/sup_update#b042b0734" type="application/json" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/KrelbornsPosterous" /><feedburner:info uri="krelbornsposterous" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><item>
      <pubDate>Mon, 09 Jan 2012 08:51:39 -0800</pubDate>
      <title>Testing Gist Embedding</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/xxlqMNl2EQY/testing-gist-embedding</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/testing-gist-embedding</guid>
      <description>&lt;p&gt;
	&lt;div&gt;&lt;div class="data type-python"&gt;
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c"&gt;# Usual Hello World script in Python. Hey look, this comment is longer than the code!&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
  &lt;/div&gt;&lt;/div&gt;&lt;p /&gt;&lt;div&gt;If this works, you should be able to see a Hello World script embedded in this post.&lt;/div&gt;&lt;p /&gt;&lt;div&gt;Now move along, nothing to see here.&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/testing-gist-embedding"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/testing-gist-embedding#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/xxlqMNl2EQY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/testing-gist-embedding</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 01 Jan 2012 05:41:13 -0800</pubDate>
      <title>New Years Goals for 2012</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/IZ2XgyYURmY/new-years-goals-for-2012</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/new-years-goals-for-2012</guid>
      <description>&lt;p&gt;
	Well here we are, 2012 and this is the first post of the year. I&amp;#39;m sure there will be lots of posts like this one cropping up over the internet over the next few days. This is the post where I vow to blog more often blah blah blah. I think I&amp;#39;ve written one of these posts at least twice a year for the last couple of years on various blogs and I never manage to stick to it. So why is this year going to be different? I guess it probably won&amp;#39;t be but there&amp;#39;s no harm in trying.&lt;p /&gt;&lt;div&gt;Rather than ramble on any further, I thought I&amp;#39;d just list my current goals for the year. These aren&amp;#39;t Resolutions, they are just things I would like to do or achieve by the end of the year. Over the next few months I&amp;#39;ll review my progress and maybe add a few more as I think of them.&lt;/div&gt; &lt;div&gt;&lt;ol&gt;&lt;li&gt;Write more blog posts&lt;/li&gt;&lt;li&gt;Start Tweeting again&lt;/li&gt;&lt;li&gt;Publish something on the App Store&lt;/li&gt;&lt;li&gt;Move house&lt;/li&gt;&lt;li&gt;Lose weight (Maybe do some exercise)&lt;/li&gt;&lt;li&gt;Maintain a good work, life balance&lt;/li&gt;&lt;li&gt; Be a good father&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/new-years-goals-for-2012"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/new-years-goals-for-2012#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/IZ2XgyYURmY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/new-years-goals-for-2012</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 09 Dec 2011 12:17:00 -0800</pubDate>
      <title>Compiling Boost libraries on Mac OS X</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/Q-OZpAMazw8/compiling-boost-libraries-on-mac-os-x</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/compiling-boost-libraries-on-mac-os-x</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;span style="font-family: arial; font-size: small;"&gt;A long time ago on another blog, I wrote a quick guide for compiling the Boost libraries on Mac OS X. That blog has since gone the way of the Dodo but I forgot to make a copy of the guide. Since I've needed to compile Boost again I thought I'd recreate the guide here so I can access it easily and it can be available to anyone else who may need to do the same thing.&lt;/span&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;&lt;ol&gt;
&lt;li&gt;The first thing to do is to download the lastest Boost distribution from the&amp;nbsp;&lt;strong&gt;&lt;a href="http://www.boost.org/users/download/" target="_blank"&gt;Boost downloads&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;page.&lt;/li&gt;
&lt;li&gt;Unpack the archive somewhere sensible, I&amp;rsquo;d suggest the desktop. Don&amp;rsquo;t do it where the absolute folder path will have any spaces in the name e.g. &amp;ldquo;/users/matt/code/bad folder/&amp;rdquo;, this will prevent the install script from working later. I found this out the hard way.&lt;/li&gt;
&lt;li&gt;Next open a terminal window and navigate to the Boost root folder you just unpacked. An easy way to do this is to type "cd" followed by a space, then drag the boost folder onto the terminal window to complete the command and hit return.&lt;/li&gt;
&lt;li&gt;Next run the bootstrap script by typing &amp;ldquo;&lt;strong&gt;./bootstrap.sh&lt;/strong&gt;&amp;ldquo;. This configures the install tools for your environment. Check it for error messages, this is where I found out my path was bad.&lt;/li&gt;
&lt;li&gt;To compile Boost, type &amp;ldquo;&lt;strong&gt;./bjam architecture=x86 address-model=32_64&lt;/strong&gt;&amp;rdquo; and press enter, this will build both 32 bit and 64 bit binaries that you can easily link to from XCode.&lt;/li&gt;
&lt;li&gt;Make a cup of coffee and wait while the libraries build.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;After following the above steps you should end up with dynamic libraries in the&amp;nbsp;&lt;strong&gt;stage/lib&lt;/strong&gt;&amp;nbsp;sub folder of your Boost folder. The above steps have worked for me on both Snow Leopard and Lion with Boost version 1.48.&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;You can provide some extra options to bjam to get more control over the output, by default you'll get dynamic libraries. These can be a bit of challenge to get working with XCode projects as they don't integrate easily with Cocoa application. To make life a bit easier I prefer to link statically to the Boost stuff. Adding the option&amp;nbsp;&lt;strong&gt;link=static&lt;/strong&gt;&amp;nbsp;will force the output to be static libraries. There's more about the arguments&amp;nbsp;&lt;a href="http://www.boost.org/boost-build2/doc/html/bbv2/overview/invocation.html" target="_blank"&gt;here&lt;/a&gt;.&lt;/div&gt;
&lt;p /&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;At the time of writing the&amp;nbsp;&lt;strong&gt;bjam&lt;/strong&gt;&amp;nbsp;command has been deprecated in favour of the&amp;nbsp;&lt;strong&gt;b2&lt;/strong&gt;&amp;nbsp;command. I've experimented with this and at the minute there seems to be a bug which means I only get 64 bit binaries, using bjam with the same options gives me the correct output so I've not switched.&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/compiling-boost-libraries-on-mac-os-x"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/compiling-boost-libraries-on-mac-os-x#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/Q-OZpAMazw8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/compiling-boost-libraries-on-mac-os-x</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 04 Apr 2011 13:54:50 -0700</pubDate>
      <title>Ice flows on the Canadian coast</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/jXlaRE5RJrw/ice-flows-on-the-canadian-coast</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/ice-flows-on-the-canadian-coast</guid>
      <description>&lt;p&gt;
	&lt;a href="http://instagr.am/p/C1t-8/"&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/krelborn/DBfnBrDGmcpzbnJimatntEcBpBonxmwlGBftGCrgprbxBGEtjrcDdAzorxlq/media_httpimagesinsta_zcGEE.jpg.scaled1000.jpg"&gt;&lt;img alt="Media_httpimagesinsta_zcgee" height="500" src="http://posterous.com/getfile/files.posterous.com/krelborn/DBfnBrDGmcpzbnJimatntEcBpBonxmwlGBftGCrgprbxBGEtjrcDdAzorxlq/media_httpimagesinsta_zcGEE.jpg.scaled500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/a&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/ice-flows-on-the-canadian-coast"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/ice-flows-on-the-canadian-coast#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/jXlaRE5RJrw" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
      <media:content type="image/jpeg" height="612" width="612" url="http://getfile9.posterous.com/getfile/files.posterous.com/krelborn/DBfnBrDGmcpzbnJimatntEcBpBonxmwlGBftGCrgprbxBGEtjrcDdAzorxlq/media_httpimagesinsta_zcGEE.jpg">
        <media:thumbnail height="500" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/krelborn/DBfnBrDGmcpzbnJimatntEcBpBonxmwlGBftGCrgprbxBGEtjrcDdAzorxlq/media_httpimagesinsta_zcGEE.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://www.matthewstyles.com/ice-flows-on-the-canadian-coast</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 10 Mar 2011 11:44:00 -0800</pubDate>
      <title>Converting Format Strings To std::string</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/StckqVjw9jw/converting-format-strings-to-stdstring</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/converting-format-strings-to-stdstring</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Working with plain old strings in C can be a bit of a pain, but
one of the nice things about C strings and the Standard Libraries is the use
of format strings. Apple have done a good job of carrying format strings
over to its Cocoa framework but I&amp;rsquo;ve found that most of the C++ libraries I
use don&amp;rsquo;t use support them.&lt;/p&gt;

&lt;p&gt;While working on a bit of code today I figured out a nice way to convert a
format string into a regular string. I&amp;rsquo;ve written a convenience method to
demonstrate this technique that will output the string to a std::string.
It&amp;rsquo;s quite straight forward if you understand how to work with variable
argument lists. Here&amp;rsquo;s the source:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;std::string formatString( &lt;span class="di"&gt;const&lt;/span&gt; &lt;span class="pt"&gt;char&lt;/span&gt; *inFormat, va_list inVargs )
{
    std::string result;

    &lt;span class="r"&gt;if&lt;/span&gt;( !inFormat )
    {
        &lt;span class="c"&gt;// Return an empty string if we're passed a null pointer.&lt;/span&gt;
        &lt;span class="r"&gt;return&lt;/span&gt; result;
    }

    &lt;span class="c"&gt;// Copy the varg list so we can use it safely.&lt;/span&gt;
    va_list vargs;
    va_copy( vargs, inVargs );

    &lt;span class="c"&gt;// Find the length of the buffer required for the string.&lt;/span&gt;
    &lt;span class="pt"&gt;int&lt;/span&gt; formatStringLength = vsnprintf( &lt;span class="pc"&gt;NULL&lt;/span&gt;, &lt;span class="i"&gt;0&lt;/span&gt;, inFormat, vargs ) + &lt;span class="i"&gt;1&lt;/span&gt;;
    va_end( vargs );

    &lt;span class="c"&gt;// Allocate a buffer big enough for our format string.&lt;/span&gt;
    &lt;span class="pt"&gt;char&lt;/span&gt; *tempString = new &lt;span class="pt"&gt;char&lt;/span&gt;[formatStringLength];

    try
    {
        &lt;span class="c"&gt;// Get a fresh copy of the varg list.&lt;/span&gt;
        va_copy( vargs, inVargs );

        &lt;span class="c"&gt;// Convert our format string into a plain old string.&lt;/span&gt;
        vsnprintf( tempString, formatStringLength, inFormat, vargs );
        va_end( vargs );

        &lt;span class="c"&gt;// Log the string.&lt;/span&gt;
        result = tempString;

        &lt;span class="c"&gt;// Deallocate the temp string.&lt;/span&gt;
        delete tempString;
    }
    catch( ... )
    {
        &lt;span class="c"&gt;// Clean up and rethrow.&lt;/span&gt;
        delete tempString;
        throw;
    }

    &lt;span class="r"&gt;return&lt;/span&gt; result;
}


std::string formatString( &lt;span class="di"&gt;const&lt;/span&gt; &lt;span class="pt"&gt;char&lt;/span&gt; *inFormat, ... )
{
    va_list vargs;
    va_start( vargs, inFormat );
    std::string result = formatString( inFormat, vargs );
    va_end( vargs );
    &lt;span class="r"&gt;return&lt;/span&gt; result;
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The magic here is in the use of the &lt;a href="http://www.cppreference.com/wiki/io/c/snprintf"&gt;vsnprintf&lt;/a&gt; which is a safe version of
sprintf. It will return the size of the string if the input buffer is not
large enough. We can take advantage of this to ensure our string buffer is
always big enough. I&amp;rsquo;m not sure how portable this code is. It works for me
in XCode using GCC but your milage may vary.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/converting-format-strings-to-stdstring"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/converting-format-strings-to-stdstring#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/StckqVjw9jw" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/converting-format-strings-to-stdstring</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 08 Mar 2011 12:56:56 -0800</pubDate>
      <title>Infinity Blade Review</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/3QYM-P_uwnw/infinity-blade-review</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/infinity-blade-review</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;a href="http://www.epicgames.com/infinityblade"&gt;Infinity Blade&lt;/a&gt; is currently on sale for half price on the app store. I figured I&amp;rsquo;d download a copy to see if it was as good as I heard. It was. The game play combines touch based sword combat with some RPG elements. You move through a somewhat linear path through a castle (Although there are some branches) battling imposing demons along the way.&lt;/p&gt;

&lt;p&gt;Battles involve swiping the screen to slash with your sword. Blindly slashing away at the screen does little damage to your enemy, instead you must block, dodge or parry to open them up for combo attacks to deal real damage. It&amp;rsquo;s a simple concept that works well with the touchscreen. I&amp;rsquo;ve found it works better on the smaller iPhone screen than the iPad, as the iPad is a little difficult to hold while slashing and hitting the context buttons to dodge and cast spells.&lt;/p&gt;

&lt;p&gt;After each battle you are awarded loot and experience points. Levelling up allows stat points to be invested to develop your character. Each equipped weapon or item item earns you experience until it is mastered, at which point it will unlock a new stat point for you. Once mastered a weapon no longer earns experience so you must turn to the shop to buy new kit and spend your hard earned loot. There are a ton of weapons to unlock, each with various stats that help to keep things fresh.&lt;/p&gt;

&lt;p&gt;The game is short but has massive replay value. It&amp;rsquo;s the perfect mobile game as it can be played in short bursts. The end includes a little twist that will force you to continue to play and keep coming back over and over until you&amp;rsquo;ve unlocked all the gear and truly mastered the combat.&lt;/p&gt;

&lt;p&gt;The presentation of the game is probably the best I&amp;rsquo;ve seen from the app store. Graphically it impresses, the Unreal engine showing the real power and potential of the iOS platform. The soundtrack is also worth mentioning as it really adds to the atmosphere, so plug in those headphones and jack up the volume.&lt;/p&gt;

&lt;p&gt;Infinity Blade is highly recommended. All in all, for a game that costs less than the price of a beer you won&amp;rsquo;t be disappointed.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/infinity-blade-review"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/infinity-blade-review#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/3QYM-P_uwnw" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/infinity-blade-review</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 04 Mar 2011 06:13:31 -0800</pubDate>
      <title>Scrum - The Problem with Sprints and Quality</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/p5tZBPHOckQ/scrum-the-problem-with-sprints-and-quality</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/scrum-the-problem-with-sprints-and-quality</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I said in a previous &lt;a href="http://www.matthewstyles.co.uk/scrum-in-favour-of-shorter-sprints"&gt;post&lt;/a&gt; that my
team had decided to adopt a shorter 2 week sprint period. This has the
advantages outlined in my previous post, but there are some problems that it
introduces. As developers we are constantly trying to balance the amount of
work we can do within a fixed period of time with the quality of that work.
Quality is a catch-all term that covers everything from the number of bugs
introduced, the look of the user interface and the general cleanliness of
the code. Generally, when developers are rushed one or more of these areas
become compromised.&lt;/p&gt;

&lt;p&gt;The problem with Scrum, and Sprints in general is that we can end up trying
to fit too much in. This can be down to either poor planning on our part
when tasks are not sufficiently broken down, or just bad estimates in
general. Even when we plan things well, the psychological impact of the
pressure of knowing that the completion deadline is only a couple of days or
weeks away can make developers feel rushed.&lt;/p&gt;

&lt;h2&gt;The Fix It Later Attitude&lt;/h2&gt;

&lt;p&gt;When we are rushing to complete a feature it can be easy to do minimal
testing and then reply on the poor QA guy to find the actual bugs.
Subconsciously I think we know what we are doing, but the safety net of the
QA department and knowing that there is the potential to sneak finishing off
work into the next sprint as bug fixes will lead a developer down this dark
path.&lt;/p&gt;

&lt;p&gt;Unfortunately this rarely works. For one, you&amp;rsquo;ve just made more unnecessary
work for the QA guy who now has to investigate all the bugs and write the
reports. Even worse, he may miss those insidious little bugs or even some
massive holes in functionality. You&amp;rsquo;ll assume it&amp;rsquo;s all OK until it is
released when your customers start to report problems.&lt;/p&gt;

&lt;p&gt;One of the biggest things that can help us in this area is &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test Driven
Development&lt;/a&gt;, it won&amp;rsquo;t
catch everything but it will force us to think in terms of tests that will
reduce some bugs. Even without full blown TDD we should still ensure that we
unit test properly and take the time to be thorough.&lt;/p&gt;

&lt;h2&gt;Prizing Function over Form&lt;/h2&gt;

&lt;p&gt;You might spend ages on the backend code, but end up rushing to finish the
User Interface. Problems are usually easy to spot in testing but you&amp;rsquo;ll
inevitably end up getting things bounced straight back to you to fix. In a
way this is an extension of the bugs problem. The rush to complete means not
spending precious hours aligning controls or making sure things are
responsive.&lt;/p&gt;

&lt;p&gt;User Interface should not be rushed, it&amp;rsquo;s the part of the program that the
user sees and manipulates. If it doesn&amp;rsquo;t work well the user will hate it or
at least tolerate it until something nicer comes along. So don&amp;rsquo;t rush UI
into QA, instead talk to your peers about what you&amp;rsquo;ve done, if necessary
prototype with a tool such as &lt;a href="http://balsamiq.com/"&gt;Balsamiq&lt;/a&gt;. Just make
sure it&amp;rsquo;s of a good quality before you throw it over the wall.&lt;/p&gt;

&lt;h2&gt;Don&amp;rsquo;t look behind the curtain&lt;/h2&gt;

&lt;p&gt;The product may look great. The bugs may be few and far between. If the code
behind it all is not clean and well put together you have a problem. In the
rush to finish on time we can end up taking shortcuts in our code. We do
weird things in the implementation, manipulate the meaning of functions and
class members through inheritance so we can write less code. Rely on
side-effect to make things work rather than having clear and logical paths
of execution. It works, but its hard to understand how.&lt;/p&gt;

&lt;p&gt;Don&amp;rsquo;t just judge quality by the end product, think about the code that makes
it. In the rush to get things done, we can end up writing poor code. This
can of coarse introduce bugs in the short term but it also makes long term
maintenance and extension hard, particularly when other people work on your
code. We are building up technical debt and one day we, or our team will pay
the price.&lt;/p&gt;

&lt;p&gt;Writing &lt;a href="http://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882"&gt;clean code&lt;/a&gt;
is hard, but it&amp;rsquo;s worth doing. Don&amp;rsquo;t take shortcuts. Avoid over refactoring
stuff just to do something else more quickly, only refactor when it makes
sense. Make sure you understand the code you write.&lt;/p&gt;

&lt;p&gt;To really avoid this we must inspect each others code, this can be done
informally with someone around a monitor, but to be really effective use a
review tool such as &lt;a href="http://www.fogcreek.com/kiln/features/code-reviews.html"&gt;Kiln&lt;/a&gt;. This opens up the
entire code-base for review. Nobody&amp;rsquo;s code is safe from review, and while it
is scary to think your work will be inspected at this level, it should be
embraced as we can all learn from each other and spot mistakes before they
get out of hand.&lt;/p&gt;

&lt;h2&gt;Remember to Pace Yourself&lt;/h2&gt;

&lt;p&gt;I think these problems can be an inevitable part of Scrum. Particularly if
its done badly. Even good developers will make these mistakes from time to
time and there is no simple fix for this. I don&amp;rsquo;t believe that any amount of
planning can be perfect. Since we are aiming for just enough planning to get
things done in Agile, I think we need to be realistic. As Developers we need
to work at a comfortable pace that allows us to get as much done in the
given time whilst ensuring that we plan for testing and refactoring. Test
Driven Development, Prototyping and Peer Code Reviews are tools that can
help avoid mistakes.&lt;/p&gt;

&lt;p&gt;As Managers in Scrum, the greatest thing we can do is ensure that the team
has time to do things properly. Set realistic goals and if things don&amp;rsquo;t get
finished within a sprint, judge what&amp;rsquo;s been done by the quality of the work
so far and have confidence that a little more time will allow the developer
to produce their absolute best work. Developers appreciate being trusted and
allowed to set their own bar of quality.&lt;/p&gt;

&lt;p&gt;As Developers we need to estimate and plan our work honestly. Take our time
to do things properly and produce only our best work. Don&amp;rsquo;t say things are
finished until they really are finished and don&amp;rsquo;t rush just to game the
burndown chart and increase our velocity. Ultimately that&amp;rsquo;s all irrelevant
when compared to good clean code and quality end products. What sets the
best developers apart from the rest of the pack is the best take their time,
and never compromise on the quality of their work.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/scrum-the-problem-with-sprints-and-quality"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/scrum-the-problem-with-sprints-and-quality#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/p5tZBPHOckQ" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/scrum-the-problem-with-sprints-and-quality</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 26 Feb 2011 05:34:00 -0800</pubDate>
      <title>Running a Python Script from C Code</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/vKiK8tB8Dwg/running-a-python-script-from-c-code</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/running-a-python-script-from-c-code</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I&amp;rsquo;ve been trying to learn a bit of Python for various reasons over the last week or so. I&amp;rsquo;ve always hated the look of any code written in it, but I&amp;rsquo;m slowly being won round by how expressive the language is. It&amp;rsquo;s amazing what you can do with a tiny fraction of the code required in C++. I&amp;rsquo;m at the stage now where I&amp;rsquo;m thinking of how I might use Python scripts to extend a C++ application or drive a game engine that I&amp;rsquo;ve written.&lt;/p&gt;

&lt;p&gt;First things first, how can I run a Python script from within my own C code? I read through the guide at &lt;a href="http://docs.python.org/extending/embedding.html"&gt;Python.org&lt;/a&gt; that makes it seem simple enough. However there is a massive omission from this guide as far as I can tell. On my Mac it seems that the PyImport_Import command always fails when I try to import any script in the working directory of my code. I could import the built in modules susch as Sys but nothing from a script I&amp;rsquo;d written.&lt;/p&gt;

&lt;p&gt;After a bit of googling and experimentation it seems like you have to add the path to the folder that the script is in to the Python search directory. If I use the following code snippet to initialise Python it works:&amp;ndash;&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="c"&gt;// Initialise Python.&lt;/span&gt;
Py_Initialize();

&lt;span class="c"&gt;// Add our working directory to the system path.&lt;/span&gt;
PyRun_SimpleString(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;import sys&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
PyRun_SimpleString(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;sys.path.append(&lt;/span&gt;&lt;span class="ch"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;If you want to use an absolute path to the script you will need to strip off the script name. Add the path to the system path and then load your script.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s also worth mentioning you can do this using a combination of Py_GetPath and PySys_SetPath calls from the C API to append the new path. The downside to this is that your code will be less portable because of the difference between the way Windows and Unix Python systems separate the path strings. Windows uses a semi-colon while Unix uses a colon &amp;ldquo;:&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;Another thing I&amp;rsquo;ve found is that a shortcut to loading a module is to use the PyImport_ImportModule function rather than plain old PyImport_Import. This takes a c string as a parameter rather than a PyObject which makes the code a little cleaner.&lt;/p&gt;

&lt;p&gt;Now that&amp;rsquo;s working I&amp;rsquo;m going to attempt to get code from the application called from the script I&amp;rsquo;m loading. Exciting stuff! If you&amp;rsquo;re into that sort of thing. No doubt I&amp;rsquo;ll be posting more on this later. For now, let me know if this was any help or you&amp;rsquo;ve anything to add in the comments.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/running-a-python-script-from-c-code"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/running-a-python-script-from-c-code#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/vKiK8tB8Dwg" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/running-a-python-script-from-c-code</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 26 Feb 2011 05:10:00 -0800</pubDate>
      <title>Testing Syntax Hilighted Markdown</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/nRgV71RzVvs/testing-syntax-hilighted-markdown</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/testing-syntax-hilighted-markdown</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Ignore this, just testing.&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="pt"&gt;int&lt;/span&gt; main(&lt;span class="pt"&gt;int&lt;/span&gt; argc, &lt;span class="di"&gt;const&lt;/span&gt; &lt;span class="pt"&gt;char&lt;/span&gt; *argv[])
{
    &lt;span class="pt"&gt;int&lt;/span&gt; i = &lt;span class="i"&gt;0&lt;/span&gt;;
    printf(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Hello World!&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/testing-syntax-hilighted-markdown"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/testing-syntax-hilighted-markdown#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/nRgV71RzVvs" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/testing-syntax-hilighted-markdown</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 25 Feb 2011 07:19:43 -0800</pubDate>
      <title>XCode Tip: Adding a To Do Comment</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/fqaukBKjAps/xcode-tip-adding-a-to-do-comment</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/xcode-tip-adding-a-to-do-comment</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Little XCode tip for you. Using the #pragma mark directive is
great for adding some structure to your source code. I won&amp;rsquo;t go on about
that as there a great article describing it &lt;a href="http://cocoasamurai.blogspot.com/2006/09/tip-pragma-mark-organizing-your-source.html"&gt;here&lt;/a&gt;.
Just to add to that, I&amp;rsquo;ve found that when I&amp;rsquo;m knocking out code it&amp;rsquo;s
sometimes good to add comments in place of the code when you haven&amp;rsquo;t thought
about the implementation of something. If you write &amp;ldquo;// TODO: &amp;rdquo; followed by
a comment, the comment will appear in the method list just like the #pragma
mark. This allows you to build a little To Do list and clearly mark in the
code where you need to do something.&lt;/p&gt;

&lt;p&gt;I found that by accident. Anyone know any other code documenting tricks in
XCode like that?&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/xcode-tip-adding-a-to-do-comment"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/xcode-tip-adding-a-to-do-comment#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/fqaukBKjAps" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/xcode-tip-adding-a-to-do-comment</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 14 Feb 2011 10:31:16 -0800</pubDate>
      <title>Scrum - In Favour of Shorter Sprints</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/ghOt1MVP_A0/scrum-in-favour-of-shorter-sprints</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/scrum-in-favour-of-shorter-sprints</guid>
      <description>&lt;p&gt;
	&lt;p&gt;My team has recently decided to switch from doing 4 week long Sprints to shorter 2 week sprints. When we started working with &lt;a href="http://bit.ly/ekhAPM"&gt;Scrum&lt;/a&gt; I was against doing short sprints because it just didn&amp;rsquo;t feel like long enough to get anything done. After 2 years of working this way I&amp;rsquo;ve changed my mind and we&amp;rsquo;ve now switched to 2 week sprints. There was some debate about doing this, but I was convinced by the members of my team, and here&amp;rsquo;s why.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nothing focuses the mind like an imminent deadline&lt;/em&gt;. Knowing that we only have two weeks to get stuff done means we are less likely to be over optimistic in our planning. That doesn&amp;rsquo;t mean we will plan to do less work, it just means that we plan to do lots of smaller tasks in favour of fewer large tasks. This forces us to break things down into more manageable chunks beforehand.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A developer can dedicate a whole sprint for writing a spec&lt;/em&gt;. Writing a spec should never be done within the same sprint as the development, it&amp;rsquo;s too risky. We can only make a reasonably reliable estimate on the size of the development when we have the spec. So allocate a whole sprint for writing a spec first. It shouldn&amp;rsquo;t take the whole time but this means the developer is free to do maintenance tasks such as fixing bugs as well. Spending 2 weeks writing a specification and then fixing bugs seems like time well spent to me, while if we do it over 4 weeks it will be too late to start development in order to fit our release schedule.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The &lt;a href="http://bit.ly/hEAAOs"&gt;Sprint Review&lt;/a&gt; is a great time to demo the completed work to the project stakeholders and is often the only opportunity to do it&lt;/em&gt;. Making the meeting more often means we can get feedback from stakeholders quicker, which means we can reassess and change coarse more quickly and lessens the risk of a project going off track. Feedback is vital during development, and the early the feedback and more often the better.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We can plan for new things more often&lt;/em&gt;. A common complaint from people outside of the Scrum process is that when they report a bugs or new features we always say that they won&amp;rsquo;t be looked at until the next Sprint. This is particularly a problem when it comes to bugs related to customer support incidents. With 4 week sprints it could be up to 8 weeks between a bug being reported and a fix being rolled out in a beta release. With 2 week sprints we can halve this time making us more responsive and leading to happier customers.&lt;/p&gt;

&lt;p&gt;Those are just a few of the benefits I can list. If you have any of your own, why not list them in the comments? Even better, if you have any arguments against shorter sprints or would argue for going even shorter, I&amp;rsquo;d love to hear those too.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/scrum-in-favour-of-shorter-sprints"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/scrum-in-favour-of-shorter-sprints#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/ghOt1MVP_A0" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/scrum-in-favour-of-shorter-sprints</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 11 Feb 2011 12:47:00 -0800</pubDate>
      <title>Developers, Stop Complaining About the App Store</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/gpdkRlJPWJY/developers-stop-complaining-about-the-app-sto</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/developers-stop-complaining-about-the-app-sto</guid>
      <description>&lt;p&gt;
	&lt;p&gt;The Internet is chock full of articles from technology commentators and software developers on how evil Apple&amp;rsquo;s App Store is. I was reading &lt;a href="http://www.theregister.co.uk/2011/02/11/app_store_rage/"&gt;this particular article&lt;/a&gt; on the Register this morning and it made me a little cross.&lt;/p&gt;

&lt;p&gt;The App Store exists to make money for Apple. As it&amp;rsquo;s custodians, Apple have the power to choose what is distributed and promote the Apps they feel are most deserving. Many argue that this is unfair, and that Apple can&amp;rsquo;t be trusted and that they will use their monopoly to stifle competition and innovation. Perhaps this is true, but I am sure that some of what Apple is trying to do is ensure that only high quality apps are published and prevent the inevitable flood of crap-ware on their platform.&lt;/p&gt;

&lt;p&gt;Then there&amp;rsquo;s the problem people have with taking a 30% cut of the retail price. Many argue that this is too much, but how can it be? If developers were sensible about their pricing and didn&amp;rsquo;t race to be a cheap as possible, then they could pick a price, and then add on 30% so they make sure that they get a fair cut. It&amp;rsquo;s that simple. There&amp;rsquo;s an &lt;a href="http://bit.ly/Whg8"&gt;article&lt;/a&gt; on how to price software by Joel Spolsky that I&amp;rsquo;d recommend. If we were selling boxed software, the store would add a markup, this is no different as far as I&amp;rsquo;m concerned. Ok so it still smells like a rip off as the cost of digital distribution is small compared to the cost of selling boxed software, but that&amp;rsquo;s just the Market.&lt;/p&gt;

&lt;p&gt;Come on developers, the App Store has done something great for us. It&amp;rsquo;s got people paying for software again. I&amp;rsquo;d not bought software for years until I got my iPhone. I&amp;rsquo;ve always stuck to free stuff, downloaded from the web and I&amp;rsquo;m willing to bet I&amp;rsquo;m not the only one. The App Store has given software value in peoples eyes and its made them more willing to pay for it. What other platform has managed to do that? It has also created an environment that consumers trust. People are much happier with charging stuff over iTunes than tapping their credit card details into a random shareware site.&lt;/p&gt;

&lt;p&gt;OK so the platform is closed and the App Store submission process can seem flawed, but really, customers don&amp;rsquo;t care and it&amp;rsquo;s the customers that count. Developers should follow the money, and be prepared to jump ship to another platform when the tide turns against Apple. I won&amp;rsquo;t say I like the system as it is, but it seems to be working so I will work with it until there&amp;rsquo;s more choice.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/developers-stop-complaining-about-the-app-sto"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/developers-stop-complaining-about-the-app-sto#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/gpdkRlJPWJY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/developers-stop-complaining-about-the-app-sto</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 10 Feb 2011 11:44:19 -0800</pubDate>
      <title>Yet Another Lame Post</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/dywYP2rA4Do/yet-another-lame-post</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/yet-another-lame-post</guid>
      <description>&lt;p&gt;
	I've been thinking about getting back into blogging again. It's been about a year since I posted to my wordpress site. I had a vision for the site and but I've struggled to find the motivation to keep writing about stuff that followed it's technology theme. So I've decided, that while I think about whether to let that site die or to breath life back into it, I'm going to use my old under used Posterous account to post things I find interesting or general rants about my life. &lt;p /&gt; You may be thinking that this is just another of those vanity blogs, filled with photos of the owners cats and foul mouthed rants about noisy neighbours and dog doo on the park. I'm afraid you're probably right. I'll do my best to prove you wrong, stay tuned 'cos things might get interesting over the next few weeks!
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/yet-another-lame-post"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/yet-another-lame-post#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/dywYP2rA4Do" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/yet-another-lame-post</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 18 Oct 2010 22:05:43 -0700</pubDate>
      <title>Good morning Tallinn! Time for breakfast.</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/YVATWGWJdQc/good-morning-tallinn-time-for-breakfast</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/good-morning-tallinn-time-for-breakfast</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/krelborn/uhAsmqcGiqvIGogiEEDyDyfnIylBGwHGtoBgiccfiBhapfocmJcsnxCmkHdh/image.jpg.scaled1000.jpg"&gt;&lt;img alt="Image" height="374" src="http://posterous.com/getfile/files.posterous.com/krelborn/uhAsmqcGiqvIGogiEEDyDyfnIylBGwHGtoBgiccfiBhapfocmJcsnxCmkHdh/image.jpg.scaled500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/good-morning-tallinn-time-for-breakfast"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/good-morning-tallinn-time-for-breakfast#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/YVATWGWJdQc" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
      <media:content type="image/jpeg" height="765" width="1024" url="http://getfile7.posterous.com/getfile/files.posterous.com/krelborn/uhAsmqcGiqvIGogiEEDyDyfnIylBGwHGtoBgiccfiBhapfocmJcsnxCmkHdh/image.jpg">
        <media:thumbnail height="374" width="500" url="http://getfile9.posterous.com/getfile/files.posterous.com/krelborn/uhAsmqcGiqvIGogiEEDyDyfnIylBGwHGtoBgiccfiBhapfocmJcsnxCmkHdh/image.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://www.matthewstyles.com/good-morning-tallinn-time-for-breakfast</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 03 Jul 2010 01:20:38 -0700</pubDate>
      <title>Last look at the sea before we head home. The holiday is now over. Fun while it lasted.</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/eG9Hv_QtXms/last-look-at-the-sea-before-we-head-home-the</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/last-look-at-the-sea-before-we-head-home-the</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/krelborn/ohcIxJgdAurIpacvzEEjxmjycBivtAzwyaxIxrafndpglAIaHbhrxqylIbuw/image.jpg.scaled1000.jpg"&gt;&lt;img alt="Image" height="374" src="http://posterous.com/getfile/files.posterous.com/krelborn/ohcIxJgdAurIpacvzEEjxmjycBivtAzwyaxIxrafndpglAIaHbhrxqylIbuw/image.jpg.scaled500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/last-look-at-the-sea-before-we-head-home-the"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/last-look-at-the-sea-before-we-head-home-the#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/eG9Hv_QtXms" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
      <media:content type="image/jpeg" height="523" width="700" url="http://getfile3.posterous.com/getfile/files.posterous.com/krelborn/ohcIxJgdAurIpacvzEEjxmjycBivtAzwyaxIxrafndpglAIaHbhrxqylIbuw/image.jpg">
        <media:thumbnail height="374" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/krelborn/ohcIxJgdAurIpacvzEEjxmjycBivtAzwyaxIxrafndpglAIaHbhrxqylIbuw/image.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://www.matthewstyles.com/last-look-at-the-sea-before-we-head-home-the</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 26 Aug 2009 06:43:03 -0700</pubDate>
      <title>Problem Solving Flowchart</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/fuUL8uH2hlY/problem-solving-flowchart</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/problem-solving-flowchart</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/krelborn/jiBGEmjuEEADAJvqcuswxiwJtgemCngHzdaDnbGjwFIkklntfHfAAvdivjIG/media_httpwwwwolfescapecomHumourNonMedPictsProblemSolvingFlowchartgif_jrthborxrdgcIne.gif.scaled1000.gif"&gt;&lt;img alt="Media_httpwwwwolfescapecomhumournonmedpictsproblemsolvingflowchartgif_jrthborxrdgcine" height="688" src="http://posterous.com/getfile/files.posterous.com/krelborn/jiBGEmjuEEADAJvqcuswxiwJtgemCngHzdaDnbGjwFIkklntfHfAAvdivjIG/media_httpwwwwolfescapecomHumourNonMedPictsProblemSolvingFlowchartgif_jrthborxrdgcIne.gif.scaled500.gif" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p /&gt;If you got a kick out of yesterday&amp;#39;s flowchart, I know &lt;a href="http://www.skillett.com/index.php/867/tech-support-cheat-sheet-2"&gt;Keiron&lt;/a&gt; did, here&amp;#39;s another one. This one has been kicking around our office for years, there is a crumpled up coffee stained copy sat on the desk behind me. It always gets whipped out whenever we find one of those killer bugs on the day of a big software release, or when somebody decides to flip a power supply to the wrong voltage when it&amp;#39;s plugged in. You know, all those stupid things you do that you hope won&amp;#39;t get noticed.&lt;p /&gt; Anyway, that&amp;#39;s probably it from me for a while. I&amp;#39;m off on holiday for a few days, and for the first time in ages, won&amp;#39;t have access to a computer. I have some articles in the works for when I get back, so watch this space for something a little more interesting.
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/problem-solving-flowchart"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/problem-solving-flowchart#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/fuUL8uH2hlY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
      <media:content type="image/gif" height="900" width="654" url="http://getfile0.posterous.com/getfile/files.posterous.com/krelborn/jiBGEmjuEEADAJvqcuswxiwJtgemCngHzdaDnbGjwFIkklntfHfAAvdivjIG/media_httpwwwwolfescapecomHumourNonMedPictsProblemSolvingFlowchartgif_jrthborxrdgcIne.gif">
        <media:thumbnail height="688" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/krelborn/jiBGEmjuEEADAJvqcuswxiwJtgemCngHzdaDnbGjwFIkklntfHfAAvdivjIG/media_httpwwwwolfescapecomHumourNonMedPictsProblemSolvingFlowchartgif_jrthborxrdgcIne.gif.scaled500.gif" />
      </media:content>
    <feedburner:origLink>http://www.matthewstyles.com/problem-solving-flowchart</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 25 Aug 2009 00:54:18 -0700</pubDate>
      <title>Tech Support Cheat Sheet</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/salNbc-AFpA/tech-support-cheat-sheet-32</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/tech-support-cheat-sheet-32</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/krelborn/hCdlctwmwszIbGxDtGzspscvdeudpgwDigpcaetBHkjHdkCkgancusjInGED/media_httpcachegawkercomassetsimageslifehacker200908techsupportcheatsheetpng_lGburfHvmbrgvaG.png.scaled1000.png"&gt;&lt;img alt="Media_httpcachegawkercomassetsimageslifehacker200908techsupportcheatsheetpng_lgburfhvmbrgvag" height="562" src="http://posterous.com/getfile/files.posterous.com/krelborn/hCdlctwmwszIbGxDtGzspscvdeudpgwDigpcaetBHkjHdkCkgancusjInGED/media_httpcachegawkercomassetsimageslifehacker200908techsupportcheatsheetpng_lGburfHvmbrgvaG.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p /&gt;Ah this comic is so true and should probably be read by all my friend, family and co-workers. Us computer types don&amp;#39;t know how to use every computer program in the world. What we are good at is working out how they are used based on a few simple rules. Most computer software is designed with the same basic principles in mind so it is familiar and easy to work out where things are, think of the items under the standard Edit menu as a perfect example. However, I do remember when the latest version of MS Office came out with the new Ribbon interface, which left me completely confused, it truly was an experience of walking in another man&amp;#39;s shoes, actually, it was a woman&amp;#39;s shoes, my mums.
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/tech-support-cheat-sheet-32"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/tech-support-cheat-sheet-32#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/salNbc-AFpA" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="823" width="732" url="http://getfile8.posterous.com/getfile/files.posterous.com/krelborn/hCdlctwmwszIbGxDtGzspscvdeudpgwDigpcaetBHkjHdkCkgancusjInGED/media_httpcachegawkercomassetsimageslifehacker200908techsupportcheatsheetpng_lGburfHvmbrgvaG.png">
        <media:thumbnail height="562" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/krelborn/hCdlctwmwszIbGxDtGzspscvdeudpgwDigpcaetBHkjHdkCkgancusjInGED/media_httpcachegawkercomassetsimageslifehacker200908techsupportcheatsheetpng_lGburfHvmbrgvaG.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://www.matthewstyles.com/tech-support-cheat-sheet-32</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 13 Jul 2009 03:08:01 -0700</pubDate>
      <title>Code Canvas Demonstration</title>
      <link>http://feedproxy.google.com/~r/KrelbornsPosterous/~3/rz7HReeIouY/code-canvas-demonstration</link>
      <guid isPermaLink="false">http://www.matthewstyles.com/code-canvas-demonstration</guid>
      <description>&lt;p&gt;
	&lt;a href="http://www.langnetsymposium.com/2009/talks/26-HermanVenter-CCI.html"&gt;http://www.langnetsymposium.com/2009/talks/26-HermanVenter-CCI.html&lt;/a&gt;&lt;p /&gt;You have to wait about 5 minutes into the lecture. Demonstrates what could be a really useful tool for software developers.
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.matthewstyles.com/code-canvas-demonstration"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://www.matthewstyles.com/code-canvas-demonstration#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KrelbornsPosterous/~4/rz7HReeIouY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021159/Mobile_Photo_9_Jun_2010_20_52_43.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/eMElRVnQKB</posterous:profileUrl>
        <posterous:firstName>Matt</posterous:firstName>
        <posterous:lastName>Styles</posterous:lastName>
        <posterous:nickName>Krelborn</posterous:nickName>
        <posterous:displayName>Matt Styles</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.matthewstyles.com/code-canvas-demonstration</feedburner:origLink></item>
  </channel>
</rss>

