<?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>Eamonn Faherty &#187; eamonn</title>
	<atom:link href="http://blog.eamonnfaherty.co.uk/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.eamonnfaherty.co.uk</link>
	<description>technology enthusiast and public speaker</description>
	<lastBuildDate>Tue, 21 Jun 2011 10:14:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Python Mac OS X MySQL problems</title>
		<link>http://blog.eamonnfaherty.co.uk/2011/06/21/python-mac-os-x-mysql-problems/</link>
		<comments>http://blog.eamonnfaherty.co.uk/2011/06/21/python-mac-os-x-mysql-problems/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 10:14:19 +0000</pubDate>
		<dc:creator>eamonn</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.eamonnfaherty.co.uk/?p=467</guid>
		<description><![CDATA[I recently had a three hour head banging off of wall session getting Python to play nicely with MySQL. I was getting the following error: File &#8220;/Library/Python/2.6/site-packages/Django-1.3-py2.6.egg/django/db/backends/mysql/base.py&#8221;, line 14, in raise ImproperlyConfigured(&#8220;Error loading MySQLdb module: %s&#8221; % e) django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Users/eamonnfaherty/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): no suitable image found. Did find: /Users/eamonnfaherty/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so: mach-o, but wrong architecture This was a complete mix up between 32bit and 64bit Python libraries working together with MySQL. To fix it I put the following in my .profile file export PATH=$PATH:/usr/local/mysql/bin export CC=&#8221;gcc-4.0&#8243; export CXX=&#8221;g++-4.0&#8243; export PYTHONPATH=”/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/” export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/ export ARCHFLAGS=&#8217;-arch i386&#8242; export VERSIONER_PYTHON_PREFER_32_BIT=yes After addingRead more


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I recently had a three hour head banging off of wall session getting Python to play nicely with MySQL.</p>
<p>I was getting the following error: </p>
<blockquote><p>  File &#8220;/Library/Python/2.6/site-packages/Django-1.3-py2.6.egg/django/db/backends/mysql/base.py&#8221;, line 14, in <module><br />
    raise ImproperlyConfigured(&#8220;Error loading MySQLdb module: %s&#8221; % e)<br />
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Users/eamonnfaherty/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): no suitable image found.  Did find:<br />
	/Users/eamonnfaherty/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so: mach-o, but wrong architecture
</p></blockquote>
<p>This was a complete mix up between 32bit and 64bit Python libraries working together with MySQL.</p>
<p>To fix it I put the following in my .profile file</p>
<blockquote><p>export PATH=$PATH:/usr/local/mysql/bin</p>
<p>export CC=&#8221;gcc-4.0&#8243;<br />
export CXX=&#8221;g++-4.0&#8243;</p>
<p>export PYTHONPATH=”/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/”<br />
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/<br />
export ARCHFLAGS=&#8217;-arch i386&#8242;<br />
export VERSIONER_PYTHON_PREFER_32_BIT=yes
</p></blockquote>
<p>After adding this I ran a clean, build and install on the mysql-python library and everything worked! Phew!</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.eamonnfaherty.co.uk/2011/06/21/python-mac-os-x-mysql-problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Signals</title>
		<link>http://blog.eamonnfaherty.co.uk/2011/06/13/signals/</link>
		<comments>http://blog.eamonnfaherty.co.uk/2011/06/13/signals/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 19:53:12 +0000</pubDate>
		<dc:creator>eamonn</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[actionscript3]]></category>
		<category><![CDATA[signals]]></category>

		<guid isPermaLink="false">http://blog.eamonnfaherty.co.uk/?p=463</guid>
		<description><![CDATA[Anyone that knows me offline has probably heard me singing the praises of signals. I really like the stricter typing of signals compared to events.  For me, strict typing means that my code is checked by the compiler (instantly, at compile time) as apposed to being checked by the AVM (eventually, at runtime).  I have had countless times where I have seen code fail due to the event types declared in the handler method being wrong, even when the string values are stored as variables instead of using literals. The checking that event handlers are added correctly is not checkableRead more


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Anyone that knows me offline has probably heard me singing the praises of signals.</p>
<p>I really like the stricter typing of signals compared to events.  For me, strict typing means that my code is checked by the compiler (instantly, at compile time) as apposed to being checked by the AVM (eventually, at runtime).  I have had countless times where I have seen code fail due to the event types declared in the handler method being wrong, even when the string values are stored as variables instead of using literals. The checking that event handlers are added correctly is not checkable by the compiler.  This means we need to either blindly hope it all works out or rely on testing.</p>
<p>Signals (out of the box) fixes this issue but there is still another issue for me, the contract between an event (also a signal) and its handler.  With events there are two contracts, the event type (the Event.type String) and the event data.  Signals (out of the box) handles the event type issue by moving the name of the type into an interface as a signal, which is a great idea!  The data problem is harder to solve.</p>
<p>There are two checks that should be performed on the data.</p>
<p>The first is validation. At the moment this is limited to type checking.  When you set up a signal, you specify that the signal should be an int, String etc.  I think this is a great start but I think there should be more (optional) validation checks available; range checks for ints and regex checks for Strings.  When these validations fail then the signal should have a built in mechanism to throw an InvalidSignalError.  This would tighten up the robustness of projects using signals and would definitely reduce the amount of code I write.</p>
<p>The second check is verification. This is a lot harder to check but is a much more valuable check to perform. I think this is up to developers to check when developing. I am currently using signals to send messages between objects. I like to keep the implementation of my objects hidden from others so when writing a class I am always mindful of what values are available to other objects. So, when writing a signal I often find myself doing the following:</p>
<div class="syntaxhighlighter_container" ><pre class="brush: as3">
public class ShowScreenSignal extends Signal
{
private static const MENU:int = 0;
private static const PLAY:int = 1;
...
public function ShowScreenSignal()
{
super(int);
}
public function dispatchMenu():void
{
dispatch(MENU);
}
public function dispatchPlay():void
{
dispatch(PLAY);
}
...
public function isMenu(message:int):Boolean
{
return message = MENU;
}
public function isPlay(message:int):Boolean
{
return message = PLAY;
}
...
}
</pre></div>
<p>This means in my controller/mediator I call signal.dispatchPlay() and in my listener/command I check signal.isPlay(message) to check the message. This means nothing knows about the message values other than the signal. I can change the message to be a String without changing any of my controllers/mediators/command. This is better encapsulation. This works really well when using RobotLegs + Signals as you can subtype your command classes and have a condition in your execute method if (message.isPlay(message)).</p>
<p>This is solving one problem. I want to have one signal with many handlers based on the message. eg:</p>
<div class="syntaxhighlighter_container" ><pre class="brush: as3">
public class ShowPlayCommand extends SignalCommand
{
[Inject]
public var message:int;
[Inject]
public var signal:ShowScreenSignal;
override public function execute():void {
if (!signal.isPlay(message)) {
return;
}
//do something
}
}
</pre></div>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.eamonnfaherty.co.uk/2011/06/13/signals/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Facebook Graph API oauth change</title>
		<link>http://blog.eamonnfaherty.co.uk/2011/06/08/facebook-graph-api-oauth-change/</link>
		<comments>http://blog.eamonnfaherty.co.uk/2011/06/08/facebook-graph-api-oauth-change/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 21:37:48 +0000</pubDate>
		<dc:creator>eamonn</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.eamonnfaherty.co.uk/?p=458</guid>
		<description><![CDATA[Facebook have changed their Graph API policy so that when you view a profile feed you need to have a valid oauth access token. See here. Here is the PHP I used to get the feed of mypage. No related posts. Related posts brought to you by Yet Another Related Posts Plugin.


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Facebook have changed their Graph API policy so that when you view a profile feed you need to have a valid oauth access token. See <a href="http://developers.facebook.com/blog/post/510/" target="_blank">here</a>.</p>
<p>Here is the PHP I used to get the feed of mypage.</p>
<div class="syntaxhighlighter_container" ><pre class="brush: php">
&lt;?php
//config
$appId = "999";
$appSecret = "I_LOVE_ROBOTS";
$feedURL = "https://graph.facebook.com/mypage/feed";
$limit = 10;
//script
$accessTokenUrl = "https://graph.facebook.com/oauth/access_token";
$parameters = "client_id=$appId&amp;client_secret=$appSecret&amp;grant_type=client_credentials";
$accessToken = file_get_contents($accessTokenUrl .  "?" . $parameters);
$parameters = "$accessToken&amp;limit=$limit";
$result = file_get_contents($feedURL . "?" . $parameters);
?&gt;
</pre></div>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.eamonnfaherty.co.uk/2011/06/08/facebook-graph-api-oauth-change/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit testing in actionscript3</title>
		<link>http://blog.eamonnfaherty.co.uk/2011/02/15/unit-testing-in-actionscript3/</link>
		<comments>http://blog.eamonnfaherty.co.uk/2011/02/15/unit-testing-in-actionscript3/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 23:14:25 +0000</pubDate>
		<dc:creator>eamonn</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[flashtdd]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://blog.eamonnfaherty.co.uk/?p=350</guid>
		<description><![CDATA[I was asked by a friend recently to point him in the direction of some advice on unit testing within actionscript 3. I thought it may be useful to others so here is the email with some addition descriptions: What is unit testing Unit tests are methods that run in order to verify the output of a method is what is expected when given a predefined input. This is useful as you can check if your code does what it should. There is a whole world of information on this on the internet. Check out test driven development. History ThereRead more


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I was asked by a friend recently to point him in the direction of some advice on unit testing within actionscript 3.  I thought it may be useful to others so here is the email with some addition descriptions:</p>
<p><strong>What is unit testing</strong><br />
Unit tests are methods that run in order to verify the output of a method is what is expected when given a predefined input.  This is useful as you can check if your code does what it should.  There is a whole world of information on this on the internet.  Check out test driven development.</p>
<p><strong>History</strong><br />
There used to be a few different unit testing frameworks &#8211; flexunit, fluint and asunit.  asunit was the fastest to run but has not been too popular.  I am not sure why.  Fluint was a flex-centric testing framework with stuff like ui impersonator (mocking).  Flexunit was the most used.</p>
<p><strong>Current</strong><br />
Flexunit was taken on (again) by Adobe and merged with fluint.  After adobe took it on again they named it version 4, probably to bring versioning inline with Flash Builder and flex.  with this change they improved the API to introduce metadata for methods so that they are run before, after and as test methods. It is now distributed with hamcrest (same as the java hamcrest library) and a number of runners and listeners.  It is the most used and it is the one i would recommend.</p>
<p><strong>How it works</strong><br />
You write the unit test in any of the supported styles (flexunit 1, flexunit 4 or fluent or maybe even in another style) and you mark them to run with the associated runner (using metadata).  You then run the tests using that test runner.  Whilst the test runs a listener is also run.  There are multiple test listeners, they are for different environments &#8211; to be run on a ci box, in the browser, in the IDE etc.</p>
<p><strong>Continuous Integration</strong><br />
You cannot currently run unit tests without a flash player.  You cannot currently run a flash player without a virtual frame buffer (think that is the term) or without a window manager running. With hudson (or jenkins now) you can install and run the vnc plugin, this has been the easiest way I have found so far.  This takes care of all that stuff for you.  It even deals with multiple vnc sessions at the same time if you have more than one hudson executor at a time.</p>
<p><strong>Coverage and static analysis</strong><br />
You can get coverage from running flexcover and there is a flex pmd library released by adobe &#8211; there is the usual pmd offering and a cpd plugin.</p>
<p><strong>How to run it all</strong><br />
you can run it all using maven (using the flexmojo stuff) or you can roll out your own ant stuff.  Rolling out your own ant stuff is the way to go if you have a complicated dependencies system (like at my last job), otherwise if you just want to get the job done maven is probably the way to go.</p>
<p>I will attach a working example project tomorrow.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.eamonnfaherty.co.uk/2011/02/15/unit-testing-in-actionscript3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android with the HTC Desire at the end of the honeymoon period</title>
		<link>http://blog.eamonnfaherty.co.uk/2011/02/09/android-with-the-htc-desire-at-the-end-of-the-honeymoon-period/</link>
		<comments>http://blog.eamonnfaherty.co.uk/2011/02/09/android-with-the-htc-desire-at-the-end-of-the-honeymoon-period/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 23:49:09 +0000</pubDate>
		<dc:creator>eamonn</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[htc desire]]></category>

		<guid isPermaLink="false">http://blog.eamonnfaherty.co.uk/?p=348</guid>
		<description><![CDATA[I have had my HTC Desire on Orange for a while now and I think it is fair to say the honeymoon period is over! First of all, Orange have been a nightmare.  The service is terrible (compared to O2).  I seem to either have HSPDA access (great!) or Edge or more often than not nothing!!! Pretty bad for the people with the largest &#8217;3G network&#8217;! Moving on to the handset, the update to Froyo (Android 2.2) took quite a while to come out.  I was impatient and so installed many of the custom firmwares.  I tried: DJDroid &#8211; ReliableRead more


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I have had my HTC Desire on Orange for a while now and I think it is fair to say the honeymoon period is over!</p>
<p>First of all, Orange have been a nightmare.  The service is terrible (compared to O2).  I seem to either have HSPDA access (great!) or Edge or more often than not nothing!!! Pretty bad for the people with the largest &#8217;3G network&#8217;!</p>
<p>Moving on to the handset, the update to Froyo (Android 2.2) took quite a while to come out.  I was impatient and so installed many of the custom firmwares.  I tried:</p>
<ul>
<li>DJDroid &#8211; Reliable and fast. This was the first one I tried.  I regretted changing from it but the releases seemed a little behind the others.</li>
<li>Expresso &#8211; Crashed and rebooted often.  This was a pain to use.</li>
<li>Leedroid &#8211; Crashed and rebooted often.  This was also pain to use.</li>
<li>Oxygen &#8211; Reliable-ish but didn&#8217;t look very nice.</li>
<li>CyanogenMod &#8211; Reliable and fast.  I had no issues with crashes or resets.  This is what I use now.</li>
</ul>
<p>I tried out developing on Android.  I made a simple app that checked for open ports on machines.  This was to check if services were running on a server. I also looked through an augmented reality library demo in quite a lot of depth. Android uses a combination of Java and XML for development.  The layout is generally written in XML and then the &#8216;code-behind&#8217; (sorry to steal a flex word to describe this, but I think most of my blog readers are from the Flash world) is written in JAVA.  Developing for Android felt better than developing in Flex 3.  The separation in Android code behind seemed to cleaner than in Flex, but comparing this to native JAVA it felt a little smelly.  The conventions say to use private inline methods and classes which just feels a little smelly to be honest. I have decided to leave Android development for now and am learning Objective C (I know it is a little late) very slowly.  The packaging up and deployment onto my handset was far easier than the pairing system for iOS apps!  You just prepare an apk file, which is the app installer, and then copy it to your handset. Nice and easy! Debugging was good too.  The emulator worked well, although the handset templates could be made easier to use.</p>
<p>My main gripe has been with the handset itself and the market place.  There are not enough apps in the market place!!  My wife has an iPhone and she is always playing a new game, Guess Who or Where&#8217;s Wally?  I cannot imaging games like this on Android for at least another year. I have read rumours of Google hiring developers, I hope these are true!  Having apps to install would only exacerbate my second issue.  The storage memory on the handset is tiny! After installing the main os I only have about 60MB to play with.  Installing the Adobe AIR runtime takes up about 20MB of this so I have little space left for apps.  I know I can move apps to the SD card but this is not possible on all apps and I believe the cache for these apps is still stored on the main handset (I may be wrong about that). I have got to the point where I really miss my iPhone!</p>
<p>Despite all the bad, there is still some good.  Google integration is great, as expected.  Maps and Navigator apps work really well! The YouTube player is very slick and syncing between my Google Apps accounts (both personal and work) is very easy.  As a work phone the handset is great but as a gaming device is fails!</p>
<p>I hope the next generation of Android handsets are better and I hope the market place content gets better! C&#8217;mon Google!</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.eamonnfaherty.co.uk/2011/02/09/android-with-the-htc-desire-at-the-end-of-the-honeymoon-period/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Agile Chef &#8211; Part 1</title>
		<link>http://blog.eamonnfaherty.co.uk/2011/02/08/the-agile-chef-part-1/</link>
		<comments>http://blog.eamonnfaherty.co.uk/2011/02/08/the-agile-chef-part-1/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 08:25:04 +0000</pubDate>
		<dc:creator>eamonn</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://blog.eamonnfaherty.co.uk/?p=344</guid>
		<description><![CDATA[To get me through development I try to be the agile chef: Imagine cooking a meal. You can split cooking a meal into smaller parts (not necessarily in order &#8211; I am not really a chef): sourcing the ingredients preparing the ingredients preparing the workspace preparing the oven making the meal cooking the meal serving the meal Using agile methodologies we would tackle each part of this process individually and then tackle the next only once it is completed. As a novice chef, he would tackle getting the ingredients; Knowing what he am making, he would make a list ofRead more


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>To get me through development I try to be the agile chef:<br />
Imagine cooking a meal.  You can split cooking a meal into smaller parts (not necessarily in order &#8211; I am not really a chef):</p>
<ul>
<li>sourcing the ingredients</li>
<li>preparing the ingredients</li>
<li>preparing the workspace</li>
<li>preparing the oven</li>
<li>making the meal</li>
<li>cooking the meal</li>
<li>serving the meal</li>
</ul>
<p>Using agile methodologies we would tackle each part of this process individually and then tackle the next only once it is completed.</p>
<p>As a novice chef, he would tackle getting the ingredients; Knowing what he am making, he would make a list of the ingredients and purchase only what was needed. As an experienced chef, he would buy more than what was needed, adding some for unexpected accidents.  Either way, he would have completed the first task and would be ready to start the second.  Within this first step we have some technical debt, we have made decisions that we need ingredients and which ingredients.  As a junior chef, if he makes a mistake with some of the ingredients he am stuck. He have not allowed for any extra ingredients. Even as the experienced chef, he could face issues if the person we are cooking for changes their mind he is stuck. These are the obvious problems.  There are more subtle issues that could occur.  Our agile chef could be preparing a meal for somebody with an alergy.  He need this knowledge in order to buy ingredients but may not find this out until the serving the meal stage.  At first it looks like the agile chef had an impossible task of sourcing ingredients for a meal for people he knows nothing about.  This is where the &#8216;business product owner&#8217; comes in. This is usually a stake holder who has knowledge of the current business requirements. In this case, it would be the waiter. When taking the customers order, the waiter should check if the customer has any alergies.  This is a common problem with projects I have been on. The business product owner does not know all of the customer requirements. The lack of requirements gathering is often blamed on &#8216;being agile&#8217; and &#8216;being light on planning&#8217;.  This reminds me of a saying used a lot in my school:</p>
<blockquote><p>If you fail to plan, you plan to fail</p></blockquote>
<p>This first simple task of sourcing ingredients could have caused the whole meal to be a failure.  This illustrates the importance of both the chef and the waiter in this scenario.  Without both playing their part we would fail at the first hurdle.  This is why we need help with our meal.  We need somebody who knows the ropes who can give both the waiter and the chef advice, to ensure our meal is a success.  This is where the head chef and the head waiter come in.  They are responsible for ensuring we are doing all that we should be.  In the engineering world I believe this role is between a technical lead, a technical architect and a business analyst.  Without knowledge of how to lead a team how can this person manage resources, conflict and moral (a head chef checks managing in their).  Without knowledge of architecture how can they ensure the team are not making decisions that will cause problems in the future (the head waiter knowing the menu and its ingredients).</p>
<p>So far, my agile chef is not looking too &#8216;agile&#8217;.  He cannot succeed on his own. This is not what agile is about.  Having a small team (or one/two people on their own) is not an agile principle.  It is peoples expectation of agile.</p>
<p>To recap, our agile chef needs a head chef to give guidance and a waiter to check requirements.  This waiter also needs help, this is in the form of a head waiter.  In order to cook our meal we need four people! This seems a lot, despite how complicated the first step has been.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.eamonnfaherty.co.uk/2011/02/08/the-agile-chef-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile complaints and Technical Debt</title>
		<link>http://blog.eamonnfaherty.co.uk/2011/02/03/agile-complaints-and-technical-debt/</link>
		<comments>http://blog.eamonnfaherty.co.uk/2011/02/03/agile-complaints-and-technical-debt/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 22:57:09 +0000</pubDate>
		<dc:creator>eamonn</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://blog.eamonnfaherty.co.uk/?p=339</guid>
		<description><![CDATA[One complaint I have often heard is: Agile projects produce code that is under engineered. I do not think this is a fault of agile methodologies. I think this is down to the management of the code base. This is where the self managing team needs to step up. The team needs to know when to refactor/invest in their code base. They need to know how to communicate with the business if deadlines are too tight and they need to think where they are going wrong if their code is inflexible so that it doesn&#8217;t happen again. The main causeRead more


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>One complaint I have often heard is: </p>
<blockquote><p>Agile projects produce code that is under engineered.</p></blockquote>
<p>I do not think this is a fault of agile methodologies.  I think this is down to the management of the code base.  This is where the self managing team needs to step up.  The team needs to know when to refactor/invest in their code base. They need to know how to communicate with the business if deadlines are too tight and they need to think where they are going wrong if their code is inflexible so that it doesn&#8217;t happen again.<br />
The main cause of under engineered code I have seen is people not thinking about the cost of change.  This reminds me of a quote from my old technical architect:</p>
<blockquote><p>Make a decision at the latest, most responsible time</p></blockquote>
<p>This is really not that easy.  I don&#8217;t think it is always possible to make a decision at the most responsible time.  Sometimes there is not enough time to realise when the most responsible time is and sometimes you do not have enough information to make the decision. The result of this is what I used to see as technical debt.  I used to see technical debt as the mistakes made when you were lazy or when you made a bad decision.  It wasn&#8217;t until recently that I have seen every piece of code as technical debt.  This reminds me of a quote from another technical architect I worked with:</p>
<blockquote><p>The best code is no code</p></blockquote>
<p>I now see this as:</p>
<blockquote><p>No code = no technical debt = low cost of change</p></blockquote>
<p>This may sound like I do not want to write any code, which is very far from the truth. I am starting to see the implications of writing code and all of the baggage that comes with it.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.eamonnfaherty.co.uk/2011/02/03/agile-complaints-and-technical-debt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile!</title>
		<link>http://blog.eamonnfaherty.co.uk/2011/02/03/agile/</link>
		<comments>http://blog.eamonnfaherty.co.uk/2011/02/03/agile/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 12:11:54 +0000</pubDate>
		<dc:creator>eamonn</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://blog.eamonnfaherty.co.uk/?p=324</guid>
		<description><![CDATA[This is the first in a series of posts about agile development. It is going to be my experiences (both good and bad) and how I think agile could work and what it needs in order to work. What is agile software engineering? I think it is best described quoting the agile manifesto: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more. For me, agileRead more


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>This is the first in a series of posts about agile development.  It is going to be my experiences (both good and bad) and how I think agile could work and what it needs in order to work.</p>
<p><strong>What is agile software engineering?</strong><br />
I think it is best described quoting the agile manifesto:</p>
<blockquote><p>Individuals and interactions over processes and tools<br />
Working software over comprehensive documentation<br />
Customer collaboration over contract negotiation<br />
Responding to change over following a plan</p>
<p>That is, while there is value in the items on<br />
the right, we value the items on the left more.</p></blockquote>
<p>For me, agile software development is about breaking development into smaller parts (iterations), which are easier to define and manage. Each small part should be dealt with only once the previous one is completed and each part should be discussed with somebody who knows the current business requirements before it is started. This is to keep the feedback loop as small as possible.  This means that the team&#8217;s work is always providing business value and is always aligned with what the business wants at the time.</p>
<p>Saying this is much easier than doing it. There are many difficulties avoiding up front planning:</p>
<ul>
<li>Planning is tough as people just want to get &#8216;stuck in&#8217;, so when a piece of work is completed they want to start the next piece as soon as possible, skipping/rushing planning.</li>
<li>Planning is tough as people from the business are not always available for meetings.  This means that planning has to wait or is rushed.</li>
<li>Some people find that working on smaller iterations means they lose site of the &#8216;bigger picture&#8217;.</li>
<li>It is harder to estimate the size of the whole project up front as there is no up front design.</li>
<li>The code base must be of good quality to cope with change of requirements. There is a need to refactor the code base to keep it free from software rot.</li>
<li>This methodology is new and people are not used to it. Trained/experienced people are hard to find.</li>
</ul>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.eamonnfaherty.co.uk/2011/02/03/agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I am back&#8230;</title>
		<link>http://blog.eamonnfaherty.co.uk/2011/01/25/i-am-back/</link>
		<comments>http://blog.eamonnfaherty.co.uk/2011/01/25/i-am-back/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 23:24:03 +0000</pubDate>
		<dc:creator>eamonn</dc:creator>
				<category><![CDATA[misc]]></category>

		<guid isPermaLink="false">http://blog.eamonnfaherty.co.uk/?p=321</guid>
		<description><![CDATA[Well sort of. This is a quick post to say I am back! I will post what I have been up to recently in the next couple of days. I just want to check this is coming through on my new hosting. No related posts. Related posts brought to you by Yet Another Related Posts Plugin.


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Well sort of. </p>
<p>This is a quick post to say I am back! I will post what I have been up to recently in the next couple of days.</p>
<p>I just want to check this is coming through on my new hosting.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.eamonnfaherty.co.uk/2011/01/25/i-am-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Returning again</title>
		<link>http://blog.eamonnfaherty.co.uk/2010/11/10/returning-again/</link>
		<comments>http://blog.eamonnfaherty.co.uk/2010/11/10/returning-again/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 11:30:14 +0000</pubDate>
		<dc:creator>eamonn</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://blog.eamonnfaherty.co.uk/?p=318</guid>
		<description><![CDATA[I am returning to blogging again. I am going to post a series of articles about the cool work I am getting up to at the moment. It will be some actionscript/facebook/video based articles so stay tuned! No related posts. Related posts brought to you by Yet Another Related Posts Plugin.


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I am returning to blogging again.</p>
<p>I am going to post a series of articles about the cool work I am getting up to at the moment.  It will be some actionscript/facebook/video based articles so stay tuned!</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.eamonnfaherty.co.uk/2010/11/10/returning-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

