<?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>Endlessly Curious &#187; Visualisation</title>
	<atom:link href="http://www.endlesslycurious.com/tag/visualisation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.endlesslycurious.com</link>
	<description>Programming, Productivity &#38; Software Development.</description>
	<lastBuildDate>Mon, 09 Jan 2012 09:00:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Why visualise data?</title>
		<link>http://www.endlesslycurious.com/2011/10/05/why-visualise-data/</link>
		<comments>http://www.endlesslycurious.com/2011/10/05/why-visualise-data/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 19:13:51 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=2820</guid>
		<description><![CDATA[This excellent short video from Column Five really demonstrates the difference that even basic data visualization techniques can make.]]></description>
			<content:encoded><![CDATA[<p>This excellent short video from <a title="Column Five Media" href="http://columnfivemedia.com/">Column Five</a> really demonstrates the difference that even basic data visualization techniques can make.</p>
<p><iframe src="http://player.vimeo.com/video/29684853?title=0&amp;byline=0&amp;portrait=0" width="400" height="225" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2011/10/05/why-visualise-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimisation Workflow</title>
		<link>http://www.endlesslycurious.com/2008/11/25/optimisation-workflow/</link>
		<comments>http://www.endlesslycurious.com/2008/11/25/optimisation-workflow/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 09:00:25 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Optimisation]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=828</guid>
		<description><![CDATA[I believe the key to optimising any program is measurement: not writing l33t code which seems to be what a lot of programmers think optimisation is!  The optimisation process is all about finding the slow parts of your program and speeding those slow parts up by refactoring your source code to meet your target performance [...]]]></description>
			<content:encoded><![CDATA[<p>I believe the key to <a href="http://en.wikipedia.org/wiki/Optimization_(computer_science)">optimising</a> any program is measurement: not writing <a href="http://en.wikipedia.org/wiki/Leet"><em>l33t</em></a> code which seems to be what a lot of programmers think optimisation is!  The optimisation process is all about finding the slow parts of your program and speeding those slow parts up by <a href="http://www.refactoring.com/sources.html">refactoring</a> your source code to meet your target performance goals.  Without measuring the code or having target performance goals optimisation is a waste of time: as programmers are very bad at guessing where the slow parts of the program are and very good at optimising pieces of the program that do not need it.</p>
<p><img class="aligncenter size-full wp-image-829" title="Optimisation Workflow" src="http://www.endlesslycurious.com/wp-content/uploads/2008/11/optimisationflow.jpg" alt="" width="480" height="367" /></p>
<p>This diagram emphasises the importance of measurement in the optimisation process: you cannot begin the process, evaluate your optimisations, even discard your optimistations or honestly finish the process without first measuring the program performance versus your target performance.  As I have mentioned <a href="http://www.endlesslycurious.com/2008/10/07/optimisation-effort-vs-performance-gain/">before</a> the initial optimisations to a program tend to yeild larger returns and then returns drop off until much more time is invested. These initial easy optimisations are not usually the sort of changes new programmers expect: they expect sexy <em>l33t</em> code like inline assembler for big performance wins, not tweaking compiler flags or removing calls to a pure virtual method on a base object in an inner loop.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/11/25/optimisation-workflow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming Language Layer Cake</title>
		<link>http://www.endlesslycurious.com/2008/10/28/programming-language-layer-cake/</link>
		<comments>http://www.endlesslycurious.com/2008/10/28/programming-language-layer-cake/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 08:00:59 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=551</guid>
		<description><![CDATA[There are many different programing languages in existence today (I&#8217;m going to write about the languages I am familiar with) and I like to visualise their relationships as layers of a cake.  There are two main ways to categorise programming languages: as having high or low levels of abstraction and as either compiled or interpreted [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">There are many different <a href="http://en.wikipedia.org/wiki/Programming_language">programing languages</a> in existence today (I&#8217;m going to write about the languages I am familiar with) and I like to visualise their relationships as layers of a cake.  There are two main ways to categorise programming languages: as having high or low levels of <a href="http://en.wikipedia.org/wiki/Abstraction_(computer_science)">abstraction</a> and as either <a href="http://en.wikipedia.org/wiki/Compiler">compiled</a> or <a href="http://en.wikipedia.org/wiki/Interpreter_(computing)">interpreted</a> languages.</p>
<p style="text-align: left;"><img class="size-full wp-image-552" title="Programming Languages" src="http://www.endlesslycurious.com/wp-content/uploads/2008/10/programminglanguages.jpg" alt="" width="500" height="288" /></p>
<p style="text-align: left;">The bottom half of the cake consists of the languages with low levels of abstraction, with microcode at the bottom and C++ at the top, all of these languages are compiled languages which means their source code is interpreted and compiled into a lower level language e.g, C++ is compiled into assembler.  I categorise C++as a lower level language for the purposes of this diagram as its memory management is still a manual process unlike the languages in the layers above it, which makes it less trivial to use.</p>
<p style="text-align: left;"><a href="http://en.wikipedia.org/wiki/Microcode">Microcode</a> is the lowest level of abstraction available and it is the programming language used to create assembly language instructions.  Assembly Language is the language used by <a href="http://en.wikipedia.org/wiki/Central_processing_unit">computer processors</a> (CPUs) and is specific to each CPU family and is also the lowest level at which software can typically interact with the CPU.  Next is the common low level languages <a href="http://en.wikipedia.org/wiki/C_programming_language">C</a> and <a href="http://www.research.att.com/~bs/C++.html">C++</a> which I&#8217;ve bundled into the same layer as C++ can compile C code so they are not really completely distinct.  Although C++ is a higher level language than C as it supports <a href="http://en.wikipedia.org/wiki/Object_oriented">object oriented programming</a> which is typically considered a feature of high level languages.</p>
<p style="text-align: left;">The top half of the cake can be roughly split in to two groups of programming languages: those languages that are compiled (blue box) into a lower level language before execution by a compiler and those that are interpreted (green box) at run time by an specific interpreter program. The bottom half of the green and blue boxes represent the respective compilers and interpreters for the languages.  It is worth noting that although the <a href="http://www.microsoft.com/NET/">.net</a> programming languages (C#, CLR C++ and VB.net) and the <a href="http://java.com/en/">Java</a> family of languages are all compiled, they are compiled into <a href="http://en.wikipedia.org/wiki/Bytecode">byte code</a> <a href="http://en.wikipedia.org/wiki/Executable">executables</a> before they can be executed (run) by a <a href="http://en.wikipedia.org/wiki/Virtual_machine">virtual machine</a> (usually written in C/C++).  The interpreted languages <a href="http://www.ruby-lang.org/en/">Ruby</a>, <a href="http://www.php.net/">php</a> and <a href="http://www.python.org/">Python</a> are not compiled before execution but are interpreted at run time by an interpreter program (again usually written in C/C++).  Interestingly interpreters do exist to process Ruby (<a href="http://jruby.codehaus.org/">JRuby</a> &amp; <a href="http://www.ironruby.net/">IronRuby</a>) and Python (<a href="http://www.jython.org/Project/">JPython</a> &amp; <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython">IronPython</a>) source code into byte code for the Java virtual machine or .net <a href="http://en.wikipedia.org/wiki/Common_Language_Infrastructure">CLI</a>, allowing ruby or python to be run on any Java or .net CLI virtual machine.</p>
<p style="text-align: left;">Compiled languages like Java or .net must be recompiled before they can run on a different virtual machine however this is usually not a serious issue as .net and Java virtual machines exist for most opereating systems in some form or another.  Recompilation is not a requirement for interperated lanagues which only require a functioning intererator on the target operating system to be able to be run, which makes them easier to use across multiple operating systems and leds to them being considered more <a href="http://en.wikipedia.org/wiki/Portability_(software)">portable</a> than the compiled languages.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/10/28/programming-language-layer-cake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Game Development Cycle</title>
		<link>http://www.endlesslycurious.com/2008/10/23/game-development-cycle/</link>
		<comments>http://www.endlesslycurious.com/2008/10/23/game-development-cycle/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 08:01:46 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=513</guid>
		<description><![CDATA[The six phases in the average game development cycle are illustrated below: The initial phase of a project is &#8216;Pre Production&#8217; where the main game concepts and features are brainstormed, designed, prototyped and signed off on.  The end goal of this phase is to prove (usually via a demo) the core game play experience and [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">The six phases in the average game development cycle are illustrated below: <img class="aligncenter size-full wp-image-520" title="Game Dev Cycle" src="http://www.endlesslycurious.com/wp-content/uploads/2008/10/gamedevcycle.jpg" alt="" width="420" height="74" /></p>
<p style="text-align: center;">The initial phase of a project is &#8216;Pre Production&#8217; where the main game concepts and features are brainstormed, designed, prototyped and signed off on.  The end goal of this phase is to prove (usually via a demo) the core game play experience and produce a feature brief, technical designs and a development schedule.  The project team is usually lightly staffed until &#8216;Production&#8217; begins.  Next comes the main development phase &#8216;Production&#8217;, this is usually the longest phase in a project and is where the games features and content are created and put together.  The &#8216;Production&#8217; phase is usually broken into several parts separated by milestones with pre-set deliverables according to the development schedule.</p>
<p style="text-align: center;">After production comes the main bug fixing portions of the cycle, although ideally bug fixing should be a continuous activity during the whole cycle.  &#8216;Alpha&#8217; is usually defined as the phase when all game features have been implemented but the game still contains major bugs like crash bugs and the game play still needs tweaking.  Next is &#8216;Beta&#8217; usually defined as features complete with no major or crash bugs, &#8216;Beta&#8217; is usually restricted to minor tweaking of the game.</p>
<p style="text-align: center;">Post &#8216;Beta&#8217; all that is left to do is ship the product, traditionally this meant sending a disc (usually gold coloured CD-R) of the title to the publisher for duplication for retail.  This is where the term &#8216;going Gold&#8217; comes from.  During the &#8216;Gold&#8217; phase of development any changes are forbidden except bug fixes requested by the publisher.</p>
<p style="text-align: center;">The final phase of a project is post production, during this phase the whole development team is not usually present as people take holidays or are assigned to other projects.  The main focus during &#8216;Post Production&#8217; is that of clean up and refactoring of the code base, pipelines and game systems.  This includes analysing the development cycle, usually in the form of &#8216;Post-mortem&#8217; style reviews and brainstorm sessions with the focus to improve future development efforts based on recent experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/10/23/game-development-cycle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Population Vs User Expertise</title>
		<link>http://www.endlesslycurious.com/2008/10/21/software-user-base/</link>
		<comments>http://www.endlesslycurious.com/2008/10/21/software-user-base/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 08:00:14 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=480</guid>
		<description><![CDATA[Mapping user expertise against the user population of a product tends to result in a bell shaped curve.  Indicating that most of the user population for a piece of software has an intermediate level of expertise.  This is an important observation when developing software as developers (as expert users themselves) will tend to develop more [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-481" title="User Expertise" src="http://www.endlesslycurious.com/wp-content/uploads/2008/10/userexpertiese.jpg" alt="" width="320" height="150" /></p>
<p style="text-align: center;">Mapping user expertise against the user population of a product tends to result in a <a href="http://en.wikipedia.org/wiki/Normal_distribution">bell shaped curve</a>.  Indicating that most of the user population for a piece of software has an intermediate level of expertise.  This is an important observation when developing software as developers (as expert users themselves) will tend to develop more expert features and customer support will push for more beginner features.  There is then a high probability that the largest part of the user population (the intermediate users) will be ignored, at the cost of increased product adoption or sales.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/10/21/software-user-base/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cost, Quality &amp; Performance</title>
		<link>http://www.endlesslycurious.com/2008/10/09/cost-quality-performance/</link>
		<comments>http://www.endlesslycurious.com/2008/10/09/cost-quality-performance/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 08:00:44 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=432</guid>
		<description><![CDATA[It is generally regarded that there are three primary properties of a software product: cost of development, performance (speed/memory etc) and software quality.  It is believed that you can only ever obtain two of these properties at the cost of the remaining property e.g, you can have high performance and high quality but it won&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-433" title="Cost, Quality and Performance" src="http://www.endlesslycurious.com/wp-content/uploads/2008/10/costqualityperf.jpg" alt="" width="320" height="288" /></p>
<p style="text-align: center;">It is generally regarded that there are three primary properties of a software product: cost of development, performance (speed/memory etc) and software quality.  It is believed that you can only ever obtain two of these properties at the cost of the remaining property e.g, you can have high performance and high quality but it won&#8217;t be cheap to develop.</p>
<p style="text-align: center;">My experiences over the years tends to confirm this rule of thumb but I can&#8217;t help wondering if that fictional high performance, high quality and low development cost software has ever been made?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/10/09/cost-quality-performance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Optimisation effort Vs. Performance Gain</title>
		<link>http://www.endlesslycurious.com/2008/10/07/optimisation-effort-vs-performance-gain/</link>
		<comments>http://www.endlesslycurious.com/2008/10/07/optimisation-effort-vs-performance-gain/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 08:00:49 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Optimisation]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=414</guid>
		<description><![CDATA[This may seem strange but in my experience it is true that the first few optimisation efforts on any un-optimised system tend to yeild high returns for low effort e.g, tweaking some compiler or linker settings in a few minutes.  Further medium term efforts tend to suffer from diminishing returns e.g, rewriting critical sections in [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-415" title="Optimisation Effort Vs Performance Gain" src="http://www.endlesslycurious.com/wp-content/uploads/2008/10/effortgainoptimisation.jpg" alt="" width="320" height="201" /></p>
<p style="text-align: center;">This may seem strange but in my experience it is true that the first few optimisation efforts on any un-optimised system tend to yeild high returns for low effort e.g, tweaking some compiler or linker settings in a few minutes.  Further medium term efforts tend to suffer from diminishing returns e.g, rewriting critical sections in assembler over a few days for a few percent improvment.  Finally large scale optimisations e.g. refactoring entire sub-systems over a week or more tends to yeild significant benefits.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/10/07/optimisation-effort-vs-performance-gain/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Work Blocks in Action</title>
		<link>http://www.endlesslycurious.com/2008/09/25/work-blocks-in-action/</link>
		<comments>http://www.endlesslycurious.com/2008/09/25/work-blocks-in-action/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 09:00:57 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[flow]]></category>
		<category><![CDATA[Oragisation]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=239</guid>
		<description><![CDATA[In my previous post I talked about work blocks as a way to prevent meeting requests from fragmenting your working day to such an extent that they prevent flow and impair your ability to get stuff done.  Above is a graphical example of roughly how my work blocks are arranged in my calender: I&#8217;ve two [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-240" title="Work Blocks" src="http://www.endlesslycurious.com/wp-content/uploads/2008/09/workblocks.jpg" alt="" width="320" height="152" /><br />
In my previous <a href="http://www.endlesslycurious.com/2008/09/22/flow-vs-distractions/">post</a> I talked about work blocks as a way to prevent meeting requests from fragmenting your working day to such an extent that they prevent flow and impair your ability to get stuff done.  Above is a graphical example of roughly how my work blocks are arranged in my calender: I&#8217;ve two mornings and two afternoons blocked off giving me two half days and one whole day where I know at least half the day is <em>mine. </em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/09/25/work-blocks-in-action/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Effectiveness Vs Communication Load</title>
		<link>http://www.endlesslycurious.com/2008/09/23/effectiveness-vs-communication-load/</link>
		<comments>http://www.endlesslycurious.com/2008/09/23/effectiveness-vs-communication-load/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 09:00:07 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=224</guid>
		<description><![CDATA[As the above graph demonstrates, there is a practical limit on team size before the communications load required to keep team members in synchronisation begins to significantly reduce individual team members performance.  The usual method for combating this trend is to partition large teams up into smaller teams to reduce the communication overhead per individual. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-225" title="Effectiveness vs Communication" src="http://www.endlesslycurious.com/wp-content/uploads/2008/09/effectivenessvscommunicatio.jpg" alt="" width="320" height="190" /></p>
<p style="text-align: center;">As the above graph demonstrates, there is a practical limit on team size before the communications load required to keep team members in synchronisation begins to significantly reduce individual team members performance.  The usual method for combating this trend is to partition large teams up into smaller teams to reduce the communication overhead per individual.</p>
<p style="text-align: center;">Source &#8216;Agile Software Development&#8217; by Alistair Cockburn page 160.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/09/23/effectiveness-vs-communication-load/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bugs / Source Code</title>
		<link>http://www.endlesslycurious.com/2008/09/18/bugs-source-code/</link>
		<comments>http://www.endlesslycurious.com/2008/09/18/bugs-source-code/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 08:00:15 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=186</guid>
		<description><![CDATA[This at least is how it always feels: a mystical 10% of the code base causing 90% of the reported bugs.  This makes it very important to identify the 10% of the code that is causing the bugs and then resolve those issues as a matter of priority.  Wasting effort on the other 90% of [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-194" title="Bugs In Code" src="http://www.endlesslycurious.com/wp-content/uploads/2008/09/bugsincode1.jpg" alt="" width="320" height="336" /></p>
<p style="text-align: center;">This at least is how it always feels: a mystical 10% of the code base causing 90% of the reported bugs.  This makes it very important to identify the 10% of the code that is causing the bugs and then resolve those issues as a matter of priority.  Wasting effort on the other 90% of the code base until the problem 10% is resolved will not make a noticible improvement in the product quality.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/09/18/bugs-source-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

