<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>What&#039;s This Do?</title>
	<atom:link href="http://anthony-arnold.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://anthony-arnold.com</link>
	<description>Programming etc.</description>
	<lastBuildDate>Wed, 22 May 2013 06:19:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='anthony-arnold.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>What&#039;s This Do?</title>
		<link>http://anthony-arnold.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://anthony-arnold.com/osd.xml" title="What&#039;s This Do?" />
	<atom:link rel='hub' href='http://anthony-arnold.com/?pushpress=hub'/>
		<item>
		<title>Dos and Don&#8217;ts for First Time RC Plane Pilots</title>
		<link>http://anthony-arnold.com/2013/03/12/dos-and-donts-for-first-time-rc-plane-pilots/</link>
		<comments>http://anthony-arnold.com/2013/03/12/dos-and-donts-for-first-time-rc-plane-pilots/#comments</comments>
		<pubDate>Tue, 12 Mar 2013 04:04:09 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Hobbies]]></category>
		<category><![CDATA[aircraft]]></category>
		<category><![CDATA[hobby]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[rc]]></category>
		<category><![CDATA[rc plane]]></category>
		<category><![CDATA[remote control]]></category>

		<guid isPermaLink="false">http://anthony-arnold.com/?p=474</guid>
		<description><![CDATA[Advice for the Inquisitive DO: DO buy online from a store like Hobby King. You will save hundreds on the exact same items as they sell in the hobby shops. DO read all the reviews and comments you can get your hands on before committing to a purchase. There&#8217;s a reason they&#8217;re cheaper, but it&#8217;s [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=474&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h2>Advice for the Inquisitive</h2>
<h3>DO:</h3>
<ul>
<li>DO buy online from a store like <a href='http://hobbyking.com' title='Hobby King'>Hobby King</a>. You will save hundreds on the exact same items as they sell in the hobby shops.</li>
<li>DO read all the reviews and comments you can get your hands on before committing to a purchase. There&#8217;s a reason they&#8217;re cheaper, but it&#8217;s not all bad.</li>
<li>DO double-, triple-, and quadruple-check the measurements for everything. For instance, make sure your battery, motor, ESC, Rx/Tx and propeller all measure up in size and power.</li>
<li>DO watch instructional videos online. It will give you a much better idea of how to put everything together. A simple Google search of the product name will usually get you some video results.</li>
<li>DO make sure you have all the tools and consumables you need. There&#8217;s nothing like getting your brand new plane and then finding out you need glue, wire, alligator clips, drill bits, batteries, tape, pliers, soldering iron etc. etc. etc.</li>
<li>DO get the measurements of the plane and make sure it will fit in your car.</li>
<li>DO buy a LiPo battery charger, and ensure that it comes with a power supply, or that you can easily provide your own.</li>
<li>DO check your center of gravity. A lot of flying problems can be explained by a bad CG.</li>
<li>DO ensure that everything works and nothing falls apart during operation <em>before</em> you go to all the effort of taking it out for a flight. It sucks to drive all the way out to the park only to find that the propeller won&#8217;t stay on.</li>
</ul>
<h3>DON&#8217;T:</h3>
<ul>
<li>DON&#8217;T test the electric motor out by attaching it directly to the battery. This will only result in smoke.</li>
<li>DON&#8217;T test your aircraft inside without holding onto it and keeping yourself and everything else clear of the propeller.</li>
<li>DON&#8217;T take their word for it when they say that the instruction manual is &#8220;complete&#8221;, especially if you&#8217;ve never done anything like this before. Hours can be wasted when you find out you used the big screws instead of the little screws, and now you&#8217;re out of big screws and you have to take everything apart and start again. The latest manual I read seriously said something like <em>Step 5: Complete construction of aircraft.</em> That was like 3/4 of the work in one step!</li>
<li>DON&#8217;T assume that super-tough EPO foam is all that tough. EPO foam is only &#8220;super-tough&#8221; if it&#8217;s cut correctly. When they practically sever the wing all the way through to cut flaps that you&#8217;re not even going to use, no amount of hyperbole is going to stop that bit of foam from detaching mid-flight. Glue is more practical.</li>
<li>DON&#8217;T think that you&#8217;re going to get your plane to fly well the first time, or even the fifth time. Expect to spend more time putting things back together than you do flying.</li>
</ul>
<br />Filed under: <a href='http://anthony-arnold.com/category/electronics/'>Electronics</a>, <a href='http://anthony-arnold.com/category/hobbies/'>Hobbies</a> Tagged: <a href='http://anthony-arnold.com/tag/aircraft/'>aircraft</a>, <a href='http://anthony-arnold.com/tag/hobby/'>hobby</a>, <a href='http://anthony-arnold.com/tag/model/'>model</a>, <a href='http://anthony-arnold.com/tag/rc/'>rc</a>, <a href='http://anthony-arnold.com/tag/rc-plane/'>rc plane</a>, <a href='http://anthony-arnold.com/tag/remote-control/'>remote control</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyarnolddotcom.wordpress.com/474/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyarnolddotcom.wordpress.com/474/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=474&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthony-arnold.com/2013/03/12/dos-and-donts-for-first-time-rc-plane-pilots/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19cb74d068404884aa51ca713fe03c15?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">aarnold89</media:title>
		</media:content>
	</item>
		<item>
		<title>Building HamsterDB</title>
		<link>http://anthony-arnold.com/2012/12/30/building-hamsterdb/</link>
		<comments>http://anthony-arnold.com/2012/12/30/building-hamsterdb/#comments</comments>
		<pubDate>Sun, 30 Dec 2012 05:29:30 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Boost]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[automake]]></category>
		<category><![CDATA[autotools]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[hamsterdb]]></category>
		<category><![CDATA[libtool]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[make]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[sqlite]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://anthony-arnold.com/?p=467</guid>
		<description><![CDATA[HamsterDB is a great NoSQL, light-weight, C++ database solution. It&#8217;s the Sqlite of NoSQL! Unfortunately, building it from source can sometimes be tricky. The problem seems to lie in conflicting versions of automake and the Boost library. One way that I&#8217;ve found to get it to build properly is to explicitly set the library directories [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=467&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href='http://hamsterdb.com'>HamsterDB</a> is a great NoSQL, light-weight, C++ database solution. It&#8217;s the Sqlite of NoSQL! Unfortunately, building it from source can sometimes be tricky. The problem seems to lie in conflicting versions of <a href='http://www.gnu.org/software/automake/'>automake</a> and the <a href='http://boost.org'>Boost</a> library.</p>
<p>
One way that I&#8217;ve found to get it to build properly is to explicitly set the library directories before configuring it:</p>
<pre class="brush: bash; title: ; notranslate">
CFLAGS=-l/usr/lib/
LDFLAGS=-L/usr/lib
LIBS=-lboost_system
./configure
</pre>
</p>
<p>
After configuration, <code>make</code> should work!
</p>
<p>
Let me know how you go!
</p>
<p>
<a href='http://github.com/cruppstahl/hamsterdb/'>Download HamsterDB from Github</a>.</p>
<br />Filed under: <a href='http://anthony-arnold.com/category/programming/boost/'>Boost</a>, <a href='http://anthony-arnold.com/category/programming/c/'>C++</a>, <a href='http://anthony-arnold.com/category/programming/'>Programming</a> Tagged: <a href='http://anthony-arnold.com/tag/automake/'>automake</a>, <a href='http://anthony-arnold.com/tag/autotools/'>autotools</a>, <a href='http://anthony-arnold.com/tag/boost-2/'>boost</a>, <a href='http://anthony-arnold.com/tag/embedded/'>embedded</a>, <a href='http://anthony-arnold.com/tag/git/'>git</a>, <a href='http://anthony-arnold.com/tag/github/'>github</a>, <a href='http://anthony-arnold.com/tag/hamsterdb/'>hamsterdb</a>, <a href='http://anthony-arnold.com/tag/libtool/'>libtool</a>, <a href='http://anthony-arnold.com/tag/linux-2/'>linux</a>, <a href='http://anthony-arnold.com/tag/make/'>make</a>, <a href='http://anthony-arnold.com/tag/nosql/'>nosql</a>, <a href='http://anthony-arnold.com/tag/sqlite/'>sqlite</a>, <a href='http://anthony-arnold.com/tag/ubuntu/'>ubuntu</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyarnolddotcom.wordpress.com/467/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyarnolddotcom.wordpress.com/467/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=467&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthony-arnold.com/2012/12/30/building-hamsterdb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19cb74d068404884aa51ca713fe03c15?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">aarnold89</media:title>
		</media:content>
	</item>
		<item>
		<title>Bulk-Loading a Balanced Binary Tree</title>
		<link>http://anthony-arnold.com/2012/12/07/bulk-loading-a-balanced-binary-tree/</link>
		<comments>http://anthony-arnold.com/2012/12/07/bulk-loading-a-balanced-binary-tree/#comments</comments>
		<pubDate>Fri, 07 Dec 2012 09:09:37 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Data Types]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[abstract data type]]></category>
		<category><![CDATA[adt]]></category>
		<category><![CDATA[algorithms]]></category>
		<category><![CDATA[avl tree]]></category>
		<category><![CDATA[b+tree]]></category>
		<category><![CDATA[balanced binary tree]]></category>
		<category><![CDATA[binary search tree]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[data structures]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[generating]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[set]]></category>

		<guid isPermaLink="false">http://anthony-arnold.com/?p=459</guid>
		<description><![CDATA[Bulk-Loading a Balanced Binary Tree Storing a set or dictionary requires an abstract data type which efficiently balances the complexity of insertion, deletion, searching and storage space. A common structure which gives pretty good results in all of these operations is the Balanced Binary Tree. More specifically, a programmer would use an implementation of the [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=459&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h1>Bulk-Loading a Balanced Binary Tree</h1>
<p>
Storing a <a href='http://xlinux.nist.gov/dads/HTML/set.html'>set</a> or <a href='http://xlinux.nist.gov/dads/HTML/dictionary.html'>dictionary</a> requires an abstract data type which efficiently balances the complexity of insertion, deletion, searching and storage space. A common structure which gives pretty good results in all of these operations is the <a href='http://xlinux.nist.gov/dads/HTML/balancedbitr.html'>Balanced Binary Tree</a>. More specifically, a programmer would use an implementation of the Balanced Binary Tree which employs algorithms to maintain correct balance after insertions and deletions. One such implementation is the <a href='http://xlinux.nist.gov/dads/HTML/avltree.html'>AVL Tree</a>.
</p>
<h2>Mandatory Theory</h2>
<p>
I&#8217;m <em>not</em> going to go into any sort of &#8220;tutorial&#8221; for building an AVL Tree. There are already heaps of those on the Internet and they&#8217;re not hard to find. <a href='http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx'>Here&#8217;s a great one.</a></p>
<p>
I will reiterate here, however, that a binary tree is a tree where each parent has a maximum of <strong>two children</strong>.</p>
<p> A binary <em>search</em> tree is a binary tree where all nodes in a node&#8217;s left subtree are less (or equal) in value than the subtree root, and all nodes in a node&#8217;s right subtree are greater (or equal) in value than the subtree root.</p>
<p>A <em>balanced</em> binary tree is defined for this article as <em>a binary search tree where no subtree has a height greater than that of its opposite side.</em></p>
<h2>Structure Definition</h2>
<p>
Assume that you want to create a balanced binary tree in which each node holds an integer indicating its values, and thus indicating its position in the final binary tree. Here is the C-style prototype for such a node type:</p>
<pre class="brush: cpp; title: ; notranslate">
struct node {
    node *left;
    node *right;
    int balance;
    int value;
};
</pre>
<h2>Algorithm Explanation</h2>
<h3>Motivation</h3>
<p>
Suppose you have an array of integers that you want to turn into a balanced binary tree. A naive approach to this is to insert each integer into the tree, one-by-one. Depending on the algorithm, this will almost always be slow, especially if you have many objects to insert. The reason for this is that you will need to do housekeeping for each and every insertion. For something like an AVL Tree this can be costly, with the potential for needing to do one or two rotations for every insertion (or thereabouts).</p>
<h3>Explanation</h3>
<p>
To build the tree from the starting array, first ensure that it is sorted in ascending order. If it&#8217;s not too much effort to ensure that the array is always sorted by the time it comes to building the tree, then all&#8217;s well. If you have to sort it first, it might come down to performance analysis to see whether it&#8217;s cheaper to just build the tree using the iterative approach. Such decisions will need to be made on a case-by-case basis.</p>
<p>
Once the array is in order, find the root item; if the array length is odd, take the middle item. If it&#8217;s even, take the item immediately to the right of the middle. Every item to the left of the root becomes the left subtree. Every item to the right becomes the right subtree. Recursively split the left and right subarrays until there is only one item. This is a leaf.</p>
<h2>Implementation</h2>
<p>Here is an implementation of this approach, based on the node structure defined above.</p>
<pre class="brush: cpp; title: ; notranslate">
node *build_subtree(int *items, int length, void* node_mem, int *height = NULL) {
    /*This will give either the middle node or immediately to the right.*/
    int root_index = length / 2; 

    /* Make the node. It will be at the same index in its
       memory block as its value. Who needs memory management? */
    node *root = (node*)((char*)node_mem + sizeof(node) * root_index);
    root-&gt;value = *(items + root_index);

    /* These values will be used to compute the node balance */
    int left_height = 0, right_height = 0;

    /* Build the left subtree */
    if (root_index &gt; 0) {
        root-&gt;left = build_subtree(items,
                                   root_index, 
                                   node_mem, 
                                   &amp;left_height);
    }

    /* Build the right subtree */
    if (root_index &lt; length - 1) {
        root-&gt;right = build_subtree(items + root_index,
                                    (char*)node_mem + sizeof(node) * root_index, 
                                    &amp;right_height);
    }

    /* Compute the balance and height of the node.
       The height is 1 + the greater of the subtrees' heights. */
    node-&gt;balance = right_height - left_height;
    if (height) {
        *height = (left_height &gt; right_height ? left_height : right_height) + 1;
    }

    return root;
}

int main() {
    int values[] = { 1, 2, 3, 4, 5, 6, 7, ..., 10000000 };

    void *mem = malloc(sizeof(node) * 10000000);
    memset(mem, 0, sizeof(node) * 10000000);

    node *root = build_subtree(values, 10000000, mem);
}
</pre>
<p>
This code is actually <em>really</em> simple. It comes with a few complexities, such as maintaining that memory block. However, if your tree is fixed (no mode insertions/deletions) then you&#8217;ve got no problems. You could also ditch the <em>node_mem</em> and do a malloc instead. I prefer allocating as much as possible in one go though. That being said, you should take this sample as almost pseudo-code; you&#8217;d never really just allocate a block like that, especially if you&#8217;re going to do deletions and insertions. You&#8217;d probably want some sort of memory management mechanics in the works.
</p>
<p>
The tree you end up with is a balanced binary tree. This is evident by the fact that for each call to <em>build_subtree</em>, the array will be split into two nearly-equal sub-arrays. There will never be an opportunity to break the balance. What&#8217;s more, if the starting length of the array is one less than a power of two, the resulting tree will be <strong>perfectly balanced</strong>.
</p>
<h2>Conclusions</h2>
<p>
Under certain conditions, this algorithm is ideal for generating a balanced binary tree from a flat array of ordered values.</p>
<p>
For an explanation on how to bulk-load a <em>B+Tree</em>, see the <a>Wikipedia Article</a>.
</p>
<p>
I wanted to demonstrate with some fancy diagrams, but I&#8217;m not good at making them. Anyone want to contribute?</p>
<br />Filed under: <a href='http://anthony-arnold.com/category/programming/algorithms/'>Algorithms</a>, <a href='http://anthony-arnold.com/category/programming/data-types/'>Data Types</a>, <a href='http://anthony-arnold.com/category/programming/'>Programming</a> Tagged: <a href='http://anthony-arnold.com/tag/abstract-data-type/'>abstract data type</a>, <a href='http://anthony-arnold.com/tag/adt/'>adt</a>, <a href='http://anthony-arnold.com/tag/algorithms-2/'>algorithms</a>, <a href='http://anthony-arnold.com/tag/avl-tree/'>avl tree</a>, <a href='http://anthony-arnold.com/tag/btree/'>b+tree</a>, <a href='http://anthony-arnold.com/tag/balanced-binary-tree-2/'>balanced binary tree</a>, <a href='http://anthony-arnold.com/tag/binary-search-tree/'>binary search tree</a>, <a href='http://anthony-arnold.com/tag/c-3/'>c</a>, <a href='http://anthony-arnold.com/tag/data-structures/'>data structures</a>, <a href='http://anthony-arnold.com/tag/dictionary/'>dictionary</a>, <a href='http://anthony-arnold.com/tag/generating/'>generating</a>, <a href='http://anthony-arnold.com/tag/map/'>map</a>, <a href='http://anthony-arnold.com/tag/programming-2/'>programming</a>, <a href='http://anthony-arnold.com/tag/set/'>set</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyarnolddotcom.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyarnolddotcom.wordpress.com/459/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=459&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthony-arnold.com/2012/12/07/bulk-loading-a-balanced-binary-tree/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19cb74d068404884aa51ca713fe03c15?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">aarnold89</media:title>
		</media:content>
	</item>
		<item>
		<title>Dealing With a Fear of Commitment</title>
		<link>http://anthony-arnold.com/2012/07/21/dealing-with-a-fear-of-commitment/</link>
		<comments>http://anthony-arnold.com/2012/07/21/dealing-with-a-fear-of-commitment/#comments</comments>
		<pubDate>Sat, 21 Jul 2012 05:39:05 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[anxiety]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[commitment]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[emotional insight]]></category>
		<category><![CDATA[fear]]></category>
		<category><![CDATA[regression test]]></category>
		<category><![CDATA[software-development]]></category>
		<category><![CDATA[source code changes]]></category>
		<category><![CDATA[team]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[unit test]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://anthony-arnold.com/?p=446</guid>
		<description><![CDATA[I&#8217;m not talking about that kind of commitment (for which my girlfriend will be disappointed to read); I&#8217;m discussing the trepidation which pervades us all when it comes to committing source code changes and database transactions. I&#8217;m not even going to pretend to have the emotional insight to counsel others in overcoming the other kind [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=446&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>
I&#8217;m not talking about <em>that</em> kind of commitment (for which my girlfriend will be disappointed to read); I&#8217;m discussing the trepidation which pervades us all when it comes to committing <strong>source code changes and database transactions.</strong> I&#8217;m not even going to pretend to have the emotional insight to counsel others in overcoming the other kind of aversion to commitment.
</p>
<p><a title="scared of computer image @ wpclipart.com" href="http://www.wpclipart.com/computer/humour/scared_of_computer.png.html"><img src="http://www.wpclipart.com/computer/humour/scared_of_computer.png"></a></p>
<p>
Still reading? Good. A few months ago, I was investigation a crash of one of our production servers. It turned out that somehow a duplicate record had made its way into the database. We weren&#8217;t sure how, or exactly why it was causing the whole website to crash. Nevertheless, we figured if I deleted the duplicate then all would be well.  We were under a lot of pressure, with clients calling up from all over the country demanding answers. So I logged into the production database box, fired up an Oracle connection and typed in the query to delete the duplicate. Something like </p>
<pre>delete user where useid = 1234;</pre>
<p>One little line. I spent the next five minutes pedantically checking that auto-commit was switched off, that I&#8217;d typed in the correct table name, the correct ID. Basically, I was struck with the realisation that I was about to delete a record from a production server running a high-volume financial application.</p>
<blockquote><p>
&#8220;Have you done that change yet?&#8221; said a co-worker.<br />
&#8220;Not yet,&#8221; I replied, &#8220;I&#8217;m just a little scared of committing a change on a prod server.&#8221;<br />
&#8220;Well,&#8221; my co-worker responded, &#8220;you&#8217;ve just gotta get over that.&#8221;
</p></blockquote>
<p>
And he was right. We were a small team with very few formal processes and little in the way of technical support (basically we ran the whole business from desktops to software) but I trusted my team mates, I trusted the software and the tools, and I trusted myself. There was little for it but to click &#8220;submit&#8221; and see what happens.
</p>
<p>
I&#8217;m sure every programmer is familiar with this feeling, especially when starting out at a new job and working with a mature product. We make a significant change to a code base, and then waste a day by quadruple-checking everything from every angle before committing it.</p>
<p> Having just moved to a new role at a new company, I&#8217;ve fallen back into this mindset again. I&#8217;m working with a 40-year-old code base, and every time I make a change I find myself scrolling through file diffs over and over again. Finally, something in me snapped and I&#8217;m now on my way to becoming a code-changing machine.</p>
<p>
Here are some tips for those still struggling:
</p>
<h1>1. Trust Your Team Mates</h1>
<p>
Code review is one of the best tools to help you get over this fear, especially if you can get a senior member of the team to take a look at your changes. It shares the responsibility between you, which will help to dull the anxiety you&#8217;re feeling about checking in bad code. If the senior programmer finds nothing wrong with it, that&#8217;s the best you could hope for. If the build breaks, well, shit happens.</p>
<h1>2. Trust Your Tools</h2>
<p>
If you&#8217;re not using some sort of version-control software, be it <em>SVN</em>, <em>Git</em>, <em>Hg</em>, <em>TFS</em>, or <em>P4</em>, then you should purposefully break the code base to teach everyone in the team a lesson. A good set of tools will help you to get over your fears of checking in code. Why? Because <em>the code can be rolled back</em>. So you cock it up and wreck the application, so what? Just roll it back and try again.</p>
<p>
Other tools which are of great help are those that come into play before you think about committing. File diff tools will help to make sure you&#8217;re not considering checking in changes you didn&#8217;t intend to make. Test harnesses (good ones) can leave you confident that your changes do not break existing functionality. Use them, and trust their results. Your manager decided to install them for a reason.</p>
<h1>3. Trust the Process</h1>
<p>
A good software development team will be accompanied by a good software testing team. Trust them, or at least place the burden of guilt on them when software fails. Some people believe that if software fails in production, it&#8217;s the fault of the testers; after all, it was their job to catch the bug before signing off, right? Regardless of whether this is true or fair, if it helps you to get over you fear of checking in code then it&#8217;s well worth adopting it as your own personal policy.</p>
<h1>Moving Forward</h1>
<p>
What if you don&#8217;t have access to all of these great resources, like a strong team, good tools, and competent testers? In that case, you&#8217;re probably working for the wrong company. Be the one to instigate change; ask the boss for more programming resources, so you can have someone with more experience and knowledge than yourself to guide you. Make room in the budget for better tools, and take the time to write proper unit tests and automated regression tests. Demand a dedicated test team, even if it&#8217;s a team of one to begin with. Failing all of this, you can make the ultimate change: change jobs.</p>
<br />Filed under: <a href='http://anthony-arnold.com/category/programming/'>Programming</a> Tagged: <a href='http://anthony-arnold.com/tag/anxiety/'>anxiety</a>, <a href='http://anthony-arnold.com/tag/change/'>change</a>, <a href='http://anthony-arnold.com/tag/code/'>code</a>, <a href='http://anthony-arnold.com/tag/commitment/'>commitment</a>, <a href='http://anthony-arnold.com/tag/database/'>database</a>, <a href='http://anthony-arnold.com/tag/emotional-insight/'>emotional insight</a>, <a href='http://anthony-arnold.com/tag/fear/'>fear</a>, <a href='http://anthony-arnold.com/tag/regression-test/'>regression test</a>, <a href='http://anthony-arnold.com/tag/software-development/'>software-development</a>, <a href='http://anthony-arnold.com/tag/source-code-changes/'>source code changes</a>, <a href='http://anthony-arnold.com/tag/team/'>team</a>, <a href='http://anthony-arnold.com/tag/testing/'>testing</a>, <a href='http://anthony-arnold.com/tag/tools/'>tools</a>, <a href='http://anthony-arnold.com/tag/unit-test/'>unit test</a>, <a href='http://anthony-arnold.com/tag/version-control/'>version control</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyarnolddotcom.wordpress.com/446/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyarnolddotcom.wordpress.com/446/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=446&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthony-arnold.com/2012/07/21/dealing-with-a-fear-of-commitment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19cb74d068404884aa51ca713fe03c15?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">aarnold89</media:title>
		</media:content>

		<media:content url="http://www.wpclipart.com/computer/humour/scared_of_computer.png" medium="image" />
	</item>
		<item>
		<title>Building a Website: Implementation</title>
		<link>http://anthony-arnold.com/2012/06/10/building-a-website-implementation/</link>
		<comments>http://anthony-arnold.com/2012/06/10/building-a-website-implementation/#comments</comments>
		<pubDate>Sun, 10 Jun 2012 06:59:55 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[c++11]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[g++]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[lighty]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web server]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[webtoolkit]]></category>
		<category><![CDATA[whatsthisbrew]]></category>
		<category><![CDATA[wt]]></category>

		<guid isPermaLink="false">http://anthony-arnold.com/?p=413</guid>
		<description><![CDATA[Implementation I&#8217;ll admit, I&#8217;ve sort of fast-forwarded through the early design phases. This is partly because I&#8217;m a programmer; I can have input, but the major requirements are usually specified by a business analyst or similar. Also, I&#8217;m an impatient lad, and really want to get down into the nitty gritty. Lastly, I&#8217;ve left a [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=413&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h1>Implementation</h1>
<p>
I&#8217;ll admit, I&#8217;ve sort of fast-forwarded through the early design phases. This is partly because I&#8217;m a programmer; I can have input, but the major requirements are usually specified by a business analyst or similar. Also, I&#8217;m an impatient lad, and really want to get down into the nitty gritty. Lastly, I&#8217;ve left a lot of the cosmetic design out until later phases; I want to get the data access layer and a front end framework in place before I work on the styling. This way, it won&#8217;t be six months before I get to write any code.</p>
<h2>Web Stack</h2>
<p>
With a proof of concept done, I can comfortably confirm my web stack:</p>
<ul>
<li><strong>Web Server</strong> <a href='http://www.lighttpd.net/'>Lighttpd</a></li>
<li><strong>Web Framework</strong> <a href='http://webtoolkit.eu'>Wt</a></li>
<li><strong>Language Choice</strong> <a href='www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf'>ISO C++11 standard</a></li>
<li><strong>Additional Libraries</strong> <a href='http://boost.org/'>Boost</a></li>
<li><strong>Compiler</strong> <a href='http://gcc.gnu.org/'>g++</a></li>
<li><strong>Javascript Library</strong> <a href='http://jquery.org'>JQuery</a>.</li>
<li><strong>Database</strong> <a href='http://www.mongodb.org/'>MongoDB</a> with <a href='http://www.mongodb.org/pages/viewpage.action?pageId=133409'>C++ bindings</a>.</li>
<li><strong>Operating System</strong> <a href='http://debian.org'>Debian</a></li>
</ul>
<h2>Considerations</h2>
<p>
There are a number of considerations when working with the stack described above. It most likely will not work the way you expect it to right out of the box.
</p>
<h3>Wt/Lighty/FastCGI Mix</h3>
<p><em>Lighttpd</em> works well with <em>FastCGI</em> out of the box, so there&#8217;s no problem there. The issues arise when you build a <em>Wt</em> module which links against <em>libwtfcgi</em>. After configuring <em>Lighty</em> to launch your <em>Wt</em> module as a FastCGI-enabled process, it will probably die:</p>
<blockquote><p>
(mod_fastcgi.c.1104) the fastcgi-backend /path/to/wt/module failed to start:<br />
(mod_fastcgi.c.1108) child exited with status 1 /path/to/wt/module<br />
(mod_fastcgi.c.1111) If you&#8217;re trying to as a FastCGI backend&#8230;. etc.
</p></blockquote>
<p>
This was fixed by giving the <em>Lighttpd</em> user full control over the <em>Wt</em> directory: <em>/var/run/wt</em>. Restarting the web server saw the proof of concept application serve up as expected!
</p>
<h3>Package Managers</h3>
<p>If you&#8217;re using <em>apt-get</em> or any other package manager, you&#8217;re likely going to get <em>Wt</em> in a state that&#8217;s not quite desirable. Firstly, <em>Debian</em> is a conservative OS, and will likely have a decisively old version of <em>Wt</em> in its stable branch. For this reason, it&#8217;s much better to remove <em>Wt</em> from your system and download the <a href='http://www.webtoolkit.eu/git/wt.git'>source</a> directly using <em>git</em>.</p>
<pre class="brush: bash; title: ; notranslate">
$ git clone http://www.webtoolkit.eu/git/wt.git
</pre>
<p>The second reason, which most web programmers will be thankful for, is that the default installation of <em>Wt</em> includes an old version of <em>JQuery</em>. Version 1.4b. As of this writing, the latest release is <a href='http://blog.jquery.com/2012/03/21/jquery-1-7-2-released/'>1.7.2</a>. To have <em>Wt</em> serve this version, instead of the old one, change to the <em>Wt</em> source directory and:</p>
<pre class="brush: bash; title: ; notranslate">
$ cd src/web/skeleton
$ wget http://code.jquery.com/jquery-1.7.2.min.js
$ mv jquery-1.7.2.min.js jquery.min.js
$ cd ../../..
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make install
</pre>
<p>You might also need to link the <em>Wt</em> libraries from <code>/usr/local/lib</code> to <code>/usr/lib/</code>.</p>
<br />Filed under: <a href='http://anthony-arnold.com/category/programming/'>Programming</a>, <a href='http://anthony-arnold.com/category/programming/web/'>Web</a> Tagged: <a href='http://anthony-arnold.com/tag/boost-2/'>boost</a>, <a href='http://anthony-arnold.com/tag/c-2/'>c++</a>, <a href='http://anthony-arnold.com/tag/c11/'>c++11</a>, <a href='http://anthony-arnold.com/tag/debian/'>debian</a>, <a href='http://anthony-arnold.com/tag/g/'>g++</a>, <a href='http://anthony-arnold.com/tag/jquery/'>jquery</a>, <a href='http://anthony-arnold.com/tag/lighttpd/'>lighttpd</a>, <a href='http://anthony-arnold.com/tag/lighty/'>lighty</a>, <a href='http://anthony-arnold.com/tag/mongodb/'>mongodb</a>, <a href='http://anthony-arnold.com/tag/web-2/'>web</a>, <a href='http://anthony-arnold.com/tag/web-development/'>web development</a>, <a href='http://anthony-arnold.com/tag/web-server/'>web server</a>, <a href='http://anthony-arnold.com/tag/website/'>website</a>, <a href='http://anthony-arnold.com/tag/webtoolkit/'>webtoolkit</a>, <a href='http://anthony-arnold.com/tag/whatsthisbrew/'>whatsthisbrew</a>, <a href='http://anthony-arnold.com/tag/wt/'>wt</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyarnolddotcom.wordpress.com/413/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyarnolddotcom.wordpress.com/413/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=413&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthony-arnold.com/2012/06/10/building-a-website-implementation/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19cb74d068404884aa51ca713fe03c15?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">aarnold89</media:title>
		</media:content>
	</item>
		<item>
		<title>Building a Website: Data and Technology</title>
		<link>http://anthony-arnold.com/2012/06/03/building-a-website-data-and-technolog/</link>
		<comments>http://anthony-arnold.com/2012/06/03/building-a-website-data-and-technolog/#comments</comments>
		<pubDate>Sun, 03 Jun 2012 08:14:57 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[entity-relationship diagram]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[openauth]]></category>
		<category><![CDATA[schema]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[whatsthisbrew]]></category>
		<category><![CDATA[wt]]></category>

		<guid isPermaLink="false">http://anthony-arnold.com/?p=397</guid>
		<description><![CDATA[Read from the beginning. Data I did an Entity-Relationship Diagram using pen and paper. I then transferred that to an electronic copy using MySQL Workbench. The ERD is based on the UoD, which is based on the mind map. See how the documentation is becoming naturally hierarchical? This poses a significant risk; if you change [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=397&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><small>Read from the <a href='http://anthony-arnold.com/2012/05/23/building-a-website/'>beginning</a>.</small></p>
<h1>Data</h1>
<p>
I did an <a href='http://en.wikipedia.org/wiki/Entity–relationship_model'>Entity-Relationship Diagram</a> using pen and paper. I then transferred that to <a href='http://anthonyarnolddotcom.files.wordpress.com/2012/06/erd_v1.png'>an electronic copy</a> using <strong>MySQL Workbench</strong>. The ERD is based on the UoD, which is based on the mind map. See how the documentation is becoming naturally hierarchical? This poses a significant risk; if you change one piece of documentation, you might have to change them all. It&#8217;s vital that the different parts of the documentation don&#8217;t conflict with each other. Separation should be maintained! The UoD will probably suffice as the central document, and a good effort will be made to ensure that not much overlapping occurs. </p>
<p>
Alternatively (or additionally), you can nominate some documents as &#8220;throw-away&#8221;. They can be used once or twice in order to influence and guide the creation of more mature and structured documents, but ultimately you don&#8217;t care if they get outdated and neglected. It might just be easier to throw them out and do them again, or you may never use them again in the first place. The decision to throw away a piece of documentation has to be made on a case-by-case basis. Exercise some good judgement and you should have no problems.</p>
<h1>Technology</h1>
<p>I needed to make decisions regarding which applications, languages, and paradigms to adopt for the creation of <em>What&#8217;s this Beer</em>. Each decision needs to be justified against the original <a href='http://anthony-arnold.com/2012/05/24/building-a-website-the-concept/'>Aims and Objectives</a> set out from the beginning.</p>
<ul>
<li><strong>Database</strong>
<p>
<a href='http://www.mongodb.org/'>MongoDB</a> and it&#8217;s <em>C++</em> bindings will be used to allow me to develop skills using NoSQL databases. Mongo&#8217;s in-built map-reduce implementation allows querying and satisfactory (I hope) text searching.</p>
<p>There is also the possibility of integrating <a href='http://sourceforge.net/projects/clucene/'>CLucene</a> or even <a href='http://lucene.apache.org/solr/'>Solr</a>.</p>
</li>
<li><strong>Middle Tier</strong>
<p>
There will be a middle layer, which will be implemented as one or multiple libraries, written in C++. These libraries will define the entities (business/domain objects) and the wrappers around them which dictate how they can be used (business rules).</p>
</li>
<li><strong>Web Handler</strong>
<p>
<a href='http://webtoolkit.eu'>Wt</a>, a C++ Web Toolkit, will run on FastCGI. This should allow me to implement a scalable and portable web interface which can use the middle tier as it&#8217;s driver. It also comes packed with features that I will find useful, like an OpenAuth client implementation.</p>
</li>
<li><strong>Web Server</strong>
<p>
Either <a href='http://apache.org'>Apache</a> or <a href='http://www.lighttpd.net/'>Lighttpd</a>. I&#8217;m leaning toward Lighhtpd.</p>
</li>
<li><strong>Operating System</strong>
<p>
Any standard flavour of Linux, like <a href='http://www.debian.org'>Debian</a>, will suffice. It&#8217;s normally cheaper to rent these servers than a Microsoft one, and I feel more comfortable running either of my chosen web daemons and my chosen DB on Linux.</p>
</li>
</ul>
<h2>Other Considerations</h2>
<p>Additionally, I will need to confirm the following considerations which will make up my development environment:</p>
<ul>
<li><strong>Development Box</strong><br />
Most likely a VM running Linux.</li>
<li><strong>Editor</strong><br />
Probably <a href='http://notepad-plus-plus.org/'>Notepad++</a> on Windows, hooked up to a shared folder on the VM.</li>
<li><strong>Compiler</strong><br />
That&#8217;s easy! G++.
</li>
<li><strong>Builder</strong><br />
<a href='http://cmake.org'>CMake</a>, with some other shell scripts to automate the build and deployment.</li>
<li><strong>Source Control</strong><br />
I&#8217;m really not sure yet. I&#8217;d love to get my hands on some hosting for either <a href='http://git-scm.com/'>Git</a> or <a href='http://subversion.tigris.org'>Subversion</a>. Probably Git hosted on <a href='http://github.com'>Github</a> so everyone can see the code as it&#8217;s written.</li>
</ul>
<br />Filed under: <a href='http://anthony-arnold.com/category/programming/'>Programming</a>, <a href='http://anthony-arnold.com/category/programming/web/'>Web</a> Tagged: <a href='http://anthony-arnold.com/tag/apache/'>apache</a>, <a href='http://anthony-arnold.com/tag/c-2/'>c++</a>, <a href='http://anthony-arnold.com/tag/data/'>data</a>, <a href='http://anthony-arnold.com/tag/database/'>database</a>, <a href='http://anthony-arnold.com/tag/debian/'>debian</a>, <a href='http://anthony-arnold.com/tag/entity-relationship-diagram/'>entity-relationship diagram</a>, <a href='http://anthony-arnold.com/tag/git/'>git</a>, <a href='http://anthony-arnold.com/tag/github/'>github</a>, <a href='http://anthony-arnold.com/tag/lighttpd/'>lighttpd</a>, <a href='http://anthony-arnold.com/tag/linux-2/'>linux</a>, <a href='http://anthony-arnold.com/tag/mongodb/'>mongodb</a>, <a href='http://anthony-arnold.com/tag/openauth/'>openauth</a>, <a href='http://anthony-arnold.com/tag/schema/'>schema</a>, <a href='http://anthony-arnold.com/tag/subversion/'>subversion</a>, <a href='http://anthony-arnold.com/tag/technology/'>technology</a>, <a href='http://anthony-arnold.com/tag/web-2/'>web</a>, <a href='http://anthony-arnold.com/tag/web-development/'>web development</a>, <a href='http://anthony-arnold.com/tag/website/'>website</a>, <a href='http://anthony-arnold.com/tag/whatsthisbrew/'>whatsthisbrew</a>, <a href='http://anthony-arnold.com/tag/wt/'>wt</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyarnolddotcom.wordpress.com/397/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyarnolddotcom.wordpress.com/397/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=397&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthony-arnold.com/2012/06/03/building-a-website-data-and-technolog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19cb74d068404884aa51ca713fe03c15?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">aarnold89</media:title>
		</media:content>
	</item>
		<item>
		<title>Building a Website: User Stories</title>
		<link>http://anthony-arnold.com/2012/06/03/building-a-website-user-stories/</link>
		<comments>http://anthony-arnold.com/2012/06/03/building-a-website-user-stories/#comments</comments>
		<pubDate>Sun, 03 Jun 2012 04:33:44 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[user stories]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[whatsthisbrew]]></category>

		<guid isPermaLink="false">http://anthony-arnold.com/?p=379</guid>
		<description><![CDATA[Read from the beginning. User Stories User stories are a neat, agile way of documenting quickly what your software needs to do. They are often very short (once sentence), and exhibit the following form: As a U, I want to A so that V. U is the user type, such as Administrator, Publisher or Klingon. [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=379&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><small>Read from the <a href="http://wp.me/p1MqdA-54">beginning</a>.</small><br />
</p>
<h1>User Stories</h1>
<p>
User stories are a neat, <em>agile</em> way of documenting quickly what your software needs to <em>do</em>. They are often very short (once sentence), and exhibit the following form:</p>
<blockquote><p>
As a <strong>U</strong>, I want to <strong>A</strong> so that <strong>V</strong>.
</p></blockquote>
<p><ul>
<li><strong>U</strong> is the <em>user type</em>, such as Administrator, Publisher or Klingon.</li>
<li><strong>A</strong> is the <em>action</em>; it describes what the user needs to be able to do, and hence what function the system must support.</li>
<li><strong>V</strong> is the <em>value</em> that the <em>action</em> will deliver to the <em>user</em>. Forcing you (or the BA, or whoever is writing the user stories) to state the value of the functionality will ensure that only useful, valuable features are implemented.</li>
</ul>
<p>
User stories should describe what the system <em>does</em>; not what it looks like, or the structure, or the implementation. Granted, you can probably <em>infer</em> some structure, but the point is to come up with a collection of verb-based sentences that describes the complete set of functions supported by the software.</p>
<p>
There&#8217;s the rub; a <em>complete</em> set of functions is very hard to produce. Any one person will never be able to recall every single aspect of a system. It&#8217;s much better to do it as a team.
</p>
<p>
The list below is <strong><em>incomplete</em></strong>, and will probably always be incomplete. In fact, when you&#8217;re trying to be <em>agile</em>, there will probably never be any single piece of documentation that is 100% perfect. Instead, you need to rely on the full collection of documents, drawing and other pieces of media to fully build the system to spec.</p>
<p>Problems arise when two documents <em>conflict</em> with each other and make it impossible to make an implementation decision.  It&#8217;s important to identify and correct these conflicts when you find them. That being said, the <a href='http://anthony-arnold.com/2012/05/28/building-a-website-starting-out/'>UoD</a> probably contains conflicts already. I will try to have it agree with my user stories.
</p>
<h1>What&#8217;s This Brew: User Stories</h1>
<h2>As a user, I want to &#8230;</h2>
<ul>
<li>view published news articles, so I can stay up to date with events.</li>
<li>see reviews of products, so I can get information/be entertained.</li>
<li>rate reviews of products, so I can give a quick opinion</li>
<li>leave a comment on a review, in markdown, so that I can give a more in-depth opinion.</li>
<li>view product pages, so that I can get basic information.</li>
<li>rate products, so that I can influence the popularity of them.</li>
<li>leave a comment on a product, so I can give my opinion without having to write a whole review.</li>
<li>view a manufacturer page, so I can get basic information.</li>
<li>rate a manufacturer, so I can influence the popularity of them.</li>
<li>leave a comment about a manufacturer, so I can give my opinion.</li>
<li>edit a manufacturer page, so that I can make sure the information is complete and correct.</li>
<li>edit a product page, so that I can make sure the information is complete and correct.</li>
<li>write a review on a product so that I can contribute to the community.</li>
<li>edit my reviews after they&#8217;ve been published, so I can make sure the information is correct.</li>
<li>add images to my reviews, so I can document my experience with the product visually.</li>
<li>view other user&#8217;s profiles, so I can see what they&#8217;ve written and get basic information about them.</li>
<li>edit my own profile, so other users can see correct information about me.</li>
<li>edit other user&#8217;s reviews, so I can correct spelling and grammar.</li>
<li>delete my own reviews, so I can get rid of them if I change my mind.</li>
<li>delete my own comments, so I can get rid of them if I change my mind.</li>
<li>delete my profile, so I can be comfortable that my information is not public when I don&#8217;t want it to be.</li>
<li>vote in polls, so I can have my opinion heard.</li>
<li>choose whether or not to receive emails, so I can choose just how I get information from the site.</li>
<li>link products to manufacturers, to clearly show relationships and improve the quality of the information.</li>
<li>search for reviews, products and manufacturers by keywords.</li>
<li>be awarded points for taking part in the community, so I can gain access to higher privileges.</li>
<li>log on using any of my OpenID providers, so I can maintain my state between sessions.</li>
<li>associate my account with my social network accounts, so I can automatically push my activity to those sites.</li>
<li>see FAQs, so I can find out more information about the mechanics of the site.</li>
<li>see tips while I&#8217;m writing a contribution, so I can write the best review/page/comment possible.</li>
</ul>
<h2>As an administrator, I want to&#8230;</h2>
<ul>
<li>delete any review, so I can ensure the integrity of the site.</li>
<li>delete any comment, so I can ensure the integrity of the site.</li>
<li>delete a manufacturer, to ensure that only valid manufacturers are included.</li>
<li>delete a product and all its reviews, to ensure that only valid products are included.</li>
<li>delete a user, to stop malicious users from interacting with the site.</li>
<li>publish news articles, to alert users about important information.</li>
<li>approve manufacturer, product or review edits, so that untrusted users can have their changes included.</li>
<li>create polls, so I can have medals awarded to products and manufacturers.</li>
<li>delete images from reviews and pages, to make sure that only relevant images are included.</li>
</ul>
<h2>As a Super User, I want to&#8230;</h2>
<ul>
<li>See usage statistics, so I can target my publicity.</li>
<li>Tweak database parameters, so I can make the website perform optimally.</li>
<li>Configure advertising options, to provide the best advertising to users.</li>
<li>See a full feed of activity, so I can monitor site usage in detail.</li>
<li>Tweak CSS styles, so I can change the look and feel of the site without having to make code changes.</li>
</ul>
<p><strong><a href='http://wp.me/p1MqdA-6p'>Onward!</a></strong></p>
<br />Filed under: <a href='http://anthony-arnold.com/category/programming/web/'>Web</a> Tagged: <a href='http://anthony-arnold.com/tag/programming-2/'>programming</a>, <a href='http://anthony-arnold.com/tag/user-stories/'>user stories</a>, <a href='http://anthony-arnold.com/tag/web-2/'>web</a>, <a href='http://anthony-arnold.com/tag/web-development/'>web development</a>, <a href='http://anthony-arnold.com/tag/website/'>website</a>, <a href='http://anthony-arnold.com/tag/whatsthisbrew/'>whatsthisbrew</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyarnolddotcom.wordpress.com/379/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyarnolddotcom.wordpress.com/379/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=379&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthony-arnold.com/2012/06/03/building-a-website-user-stories/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19cb74d068404884aa51ca713fe03c15?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">aarnold89</media:title>
		</media:content>
	</item>
		<item>
		<title>Building a Website: Starting Out</title>
		<link>http://anthony-arnold.com/2012/05/28/building-a-website-starting-out/</link>
		<comments>http://anthony-arnold.com/2012/05/28/building-a-website-starting-out/#comments</comments>
		<pubDate>Mon, 28 May 2012 12:23:47 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[mind map]]></category>
		<category><![CDATA[universe of discourse]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[whatsthisbrew]]></category>

		<guid isPermaLink="false">http://anthony-arnold.com/?p=362</guid>
		<description><![CDATA[Read from the beginning. Update 2012/05/31: Universe of Discourse v1.1 What&#8217;s the Name? The naming of websites is a difficult matter. It isn&#8217;t just one of your holiday games&#8230;. I brainstormed for a while for a name that said reviews, information, and beer. After some trial and error to find an available domain name, the [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=362&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><small>Read from the <a href='http://wp.me/p1MqdA-54'>beginning</a>.</small><br />
<br />
<small><strong>Update </strong>2012/05/31: Universe of Discourse v1.1</small> </p>
<h1>What&#8217;s the Name?</h1>
<p>
<em>The naming of websites is a difficult matter. It isn&#8217;t just one of your holiday games&#8230;.</em>
</p>
<p>
I brainstormed for a while for a name that said <em>reviews</em>, <em>information</em>, and <em><strong>beer</strong></em>. After some trial and error to find an available domain name, the idea clicked. I&#8217;m proud to announce my successful procurement of the following domain names:</p>
<ul>
<li>whatsthisbrew.com</li>
<li>whatsthisbrew.net</li>
</ul>
<p>So now the website has a name. <strong>What&#8217;s This Brew?</strong>
</p>
<h1>Brainstorming</h1>
<p>
To kick of the process, I began brainstorming. This is a great way to to get the idea onto paper and get some momentum.</p>
<p>The brainstorming method is normally best done with multiple people. This way, you get a good mix of different ideas. If you do decide to fly solo when you develop a piece of software, make sure you vet your ideas and get plenty of feedback as you go.</p>
<p>Brainstorming is meant to be an <em>outpouring</em> of different ideas. No matter how unrealistic the idea, just get it written down. You can always strip away the bad ideas later. The reason for this is that brainstorming should make use of your intuitive thoughts. Your intuitive reasoning is based on your life experience, as well as your inherent intelligence. You will usually be right.</p>
<p>Here is a a brainstorming <a href='http://anthonyarnolddotcom.files.wordpress.com/2012/05/wtb_1kttwcc7.png'>mind map</a> which I made with the great free tool <a href='http://bubbl.us'>bubbl.us</a>.</p>
<h1>Universe of Discourse</h1>
<p>The universe of discourse, in this context, differs from a formal universe of discourse used in mathematics and formal logic. Here, I&#8217;m talking about an informal document which describes the entities which exist in the context of the system. It is a volatile document, which may change when new data types are added or removed.</p>
<p>The universe of discourse document is usually accompanied by more structured documentation like an Entity Relationship diagram and a schema mapping; both of which are based on the information contained within the UoD document. Therefore, it is important to maintain the UoD in line with reliant documents.</p>
<p>Here is the current <a href='http://anthonyarnolddotcom.files.wordpress.com/2012/05/uodv1-1.pdf'>Universe of Discourse</a> document.</p>
<h1>Coming Up</h1>
<p>
Still to come are the Entity Relationship diagram and schema mapping, as mentioned above.</p>
<p>In tandem, there are a few other documents and stages of the project which I will be working on. They will help to shape these initial diagrams by further honing in on the functions and entities I <em>want</em> and to discard the ideas which I can do without. These include <a href='http://wp.me/p1MqdA-67'>user stories</a> and some very <em>rough</em> design sketches.</p>
<p><a href='http://wp.me/p1MqdA-67'>Onward!</a></p>
<br />Filed under: <a href='http://anthony-arnold.com/category/programming/'>Programming</a>, <a href='http://anthony-arnold.com/category/programming/web/'>Web</a> Tagged: <a href='http://anthony-arnold.com/tag/mind-map/'>mind map</a>, <a href='http://anthony-arnold.com/tag/universe-of-discourse/'>universe of discourse</a>, <a href='http://anthony-arnold.com/tag/web-development/'>web development</a>, <a href='http://anthony-arnold.com/tag/website/'>website</a>, <a href='http://anthony-arnold.com/tag/whatsthisbrew/'>whatsthisbrew</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyarnolddotcom.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyarnolddotcom.wordpress.com/362/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=362&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthony-arnold.com/2012/05/28/building-a-website-starting-out/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19cb74d068404884aa51ca713fe03c15?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">aarnold89</media:title>
		</media:content>
	</item>
		<item>
		<title>Building a Website: The Concept</title>
		<link>http://anthony-arnold.com/2012/05/24/building-a-website-the-concept/</link>
		<comments>http://anthony-arnold.com/2012/05/24/building-a-website-the-concept/#comments</comments>
		<pubDate>Thu, 24 May 2012 08:21:56 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[implementation]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://anthony-arnold.com/?p=336</guid>
		<description><![CDATA[Read from the beginning. The Idea To build a website as an exercise, it&#8217;s important not to get bogged down in defining the initial concept. In the world of popular sites, a winning idea makes all the difference. However, I&#8217;m not concerned with coming up with a great idea; I&#8217;m interested in the execution of [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=336&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><small>Read from the <a href='http://wp.me/p1MqdA-54'>beginning</a>.</small></p>
<h1>The Idea</h1>
<p>To build a website as an exercise, it&#8217;s important not to get bogged down in defining the initial concept. In the world of popular sites, a winning idea makes all the difference. However, I&#8217;m not concerned with coming up with a great idea; I&#8217;m interested in the execution of the idea.</p>
<p>
As such, I&#8217;ve come up with an idea that is simple enough to understand and start working on right away, yet broad enough to provide plenty of opportunity to demonstrate some different techniques. And the idea is&#8230;. <strong>a website about <em>BEER</em></strong>.</p>
<h1>Bring us Pints of Beer</h1>
<p><img src='http://www.monteiths.co.nz/wp-content/media/PilsnerBeer-Bottle.png' alt="Monteith's" title="If you don't drink, you can leave" style="display:block;clear:both;height:150px;width:200px;margin:auto;" /></p>
<p>Specifically, the site will be a review website, where beer critics (i.e. <em>me</em>) will taste as many different beers as possible and write reviews on them. Users will be able to comment on the reviews, or write their own. There will be plenty of opportunity for discussion and interaction on the website, bringing it in line with modern standards. There will be social media integration, typical content management and, well, lots of things. The features will definitely need to be hammered out later using a more formal process.</p>
<h1>Generality</h1>
<p>It is my intention that the resulting schema for the website will be generic. In this regard, the database and the data access layer will be designed so that it is subject-agnostic, that is, it could be used to build a website that reviews <em>anything</em>, not just beer. While for many endeavours this may seem unnecessary, I wanted to add an extra challenge to the database design phase and to showcase the flexibility of reusable code.</p>
<h1>Aims and Objectives</h1>
<p>It&#8217;s important to identify the major goals of a project. State what you want to achieve, then base every design decision, from database to interface, on the fulfilment of one or more of these objectives. </p>
<p>For example, suppose that you&#8217;re designing a commercial airliner. The primary aims of the product could be safety, efficiency and capacity, for instance. During the design process, someone incorporates mounted chainsaws on the wings and a laser rock show in lavatory. Awesome? Maybe. Does it increase safety, efficiency or capacity? Not in the slightest.</p>
<p>The aims and objectives for this project are:</p>
<ol>
<li><strong>Learn New Things</strong></li>
<li><strong>Improve Existing Knowledge</strong></li>
<li><strong>Showcase Design and Implementation Techniques</strong></li>
<li><strong><em>Have Fun</em></strong></li>
</ol>
<h1>I have&#8230; things to do</h1>
<p><img src='http://www.thehobbithole.co.uk/LOTR%20script%20images/FOTR/LOTR%20FOTR%20The%20Shire%2081.jpg' alt='Bilbo Baggins' title="I've put this off for far too long" style="display:block;clear:both;margin:auto;" /></p>
<p>There is a growing list of things to get done in the next few posts. This is by no means a complete list, and is intended cover only the initial stages. In rough order:</p>
<ol>
<li><strong>Concept Map</strong><br />
This is a turgid swamp of ideas excreted from your brain onto a page. It&#8217;s kind of like brainstorming, but with a less awesome name.</li>
<li><strong>Investigation</strong><br />
I will be doing some minimal user investigation, mainly by asking myself questions but possibly interviewing others. In a serious project, you&#8217;d normally take this stage quite seriously; maybe invest some money in paid research.</li>
<li><strong>User Stories</strong><br />
From the <em>investigation</em> comes the user stories. At this stage, this will not be descriptive of the user interface. Rather, the user stories here will be a description of what kind of functions a user should be able to perform and what entities within the discourse they should be interacting with. An example would be: <em>As a beer critic, when I publish a review I want a link posted on Twitter so my followers know about it.</em> Simple stuff, really.</li>
<li><strong>Universe of Discourse</strong><br />
This is a list of all the entities that exist within the context of the website. This entry will be an informal and unstructured description of all the <em>things</em> that the system needs to be aware of. The structure will come as part of the&#8230;</li>
<li><strong>Entity Relationship Diagram</strong><br />
A structured diagram which describes each entity, its attributes and unique identifiers, and the relationships between said entities and cardinality thereof.</li>
<li><strong>Schema</strong><br />
A language- and DBMS-agnostic description of the schema after normalisation.</li>
<li><strong>Technology choices</strong><br />
Including but not limited to
<ul>
<li>Language Choice (C++, C#, Python?)</li>
<li>Data Storage (Couchbase, SQL Server, PostgreSQL, Lucene?)</li>
<li>Web Stack (Pylons, Django, Wt, MVC?)</li>
<li>Other 3rd party libraries (Javascript libraries, data access, authentication, etc. ad infinitum)</li>
</ul>
</li>
</ol>
<p>
<a href='http://wp.me/p1MqdA-5Q'><strong>Onward!</strong></a></p>
<br />Filed under: <a href='http://anthony-arnold.com/category/programming/web/'>Web</a> Tagged: <a href='http://anthony-arnold.com/tag/design/'>design</a>, <a href='http://anthony-arnold.com/tag/implementation/'>implementation</a>, <a href='http://anthony-arnold.com/tag/programming-2/'>programming</a>, <a href='http://anthony-arnold.com/tag/web-development/'>web development</a>, <a href='http://anthony-arnold.com/tag/website/'>website</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyarnolddotcom.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyarnolddotcom.wordpress.com/336/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=336&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthony-arnold.com/2012/05/24/building-a-website-the-concept/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19cb74d068404884aa51ca713fe03c15?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">aarnold89</media:title>
		</media:content>

		<media:content url="http://www.monteiths.co.nz/wp-content/media/PilsnerBeer-Bottle.png" medium="image">
			<media:title type="html">If you don&#039;t drink, you can leave</media:title>
		</media:content>

		<media:content url="http://www.thehobbithole.co.uk/LOTR%20script%20images/FOTR/LOTR%20FOTR%20The%20Shire%2081.jpg" medium="image">
			<media:title type="html">I&#039;ve put this off for far too long</media:title>
		</media:content>
	</item>
		<item>
		<title>Building a Website</title>
		<link>http://anthony-arnold.com/2012/05/23/building-a-website/</link>
		<comments>http://anthony-arnold.com/2012/05/23/building-a-website/#comments</comments>
		<pubDate>Wed, 23 May 2012 12:10:27 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://anthony-arnold.com/?p=314</guid>
		<description><![CDATA[Building a Website Building a website, or any piece of software from the ground up is hard! There are numerous facets of the software engineering process which are unknown to most stakeholders. In fact, people who work closely with programmers still consider some things we do to be some kind of black magic. The properties [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=314&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h1>Building a Website</h1>
<p>
Building a website, or any piece of software from the ground up is <em><strong>hard!</strong></em> There are numerous facets of the software engineering process which are unknown to most stakeholders. In fact, people who work closely with programmers still consider some things we do to be some kind of black magic.</p>
<p>The properties that make up a good website include a good idea, and a solid appreciation for the software process. The second part is where most would-be Internet entrepreneurs fall apart. Many prospective webmasters simply have no clue just what it takes to go from nothing to a working and successful web platform.</p>
<p>One easy way to avoid disappointment is to use a ready-made solution like <a href='http://wordpress.org'>WordPress</a>. With some custom styling, many website ideas could be quite successful using nothing more than <a href='http://www.joomla.org'>Joomla</a>.</p>
<p>However, there comes a point in a website&#8217;s lifetime when it gets too big for the generic solution. While it&#8217;s important to avoid the Not Invented Here syndrome, there are a some advantages to maintaining your own solution.</p>
<h1>Techniques</h1>
<p>Over the coming months, I will be taking a simple idea for a website, and I will build it into a full working product. Everything from defining the problem space, to entity-relationship diagrams, database programming, business logic, user interface and everything in between. Throughout, I will be demonstrating some software development practices that are commonly used, as well as some that <em>should</em> be used more often.</p>
<p>In the end, I will be registering a domain and maintaining the website for real; this will add some real value to the whole project, and hopefully keep people interested. I will make the documentation for the project available as it is produced for readers to review and comment on.</p>
<p>Ultimately, this exercise should clear up a few things about software development, and provide a useful reference for those who are considering embarking on their own web project.</p>
<p>
<strong><br />
<a href='http://wp.me/p1MqdA-5q'>Onward!</a></strong></p>
<br />Filed under: <a href='http://anthony-arnold.com/category/programming/web/'>Web</a> Tagged: <a href='http://anthony-arnold.com/tag/programming-2/'>programming</a>, <a href='http://anthony-arnold.com/tag/web-development/'>web development</a>, <a href='http://anthony-arnold.com/tag/website/'>website</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyarnolddotcom.wordpress.com/314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyarnolddotcom.wordpress.com/314/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthony-arnold.com&#038;blog=26316866&#038;post=314&#038;subd=anthonyarnolddotcom&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthony-arnold.com/2012/05/23/building-a-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19cb74d068404884aa51ca713fe03c15?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">aarnold89</media:title>
		</media:content>
	</item>
	</channel>
</rss>
