<?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"
	>

<channel>
	<title>Conceptric</title>
	<atom:link href="http://www.conceptric.co.uk/feed" rel="self" type="application/rss+xml" />
	<link>http://www.conceptric.co.uk</link>
	<description>From ideas to applications</description>
	<pubDate>Tue, 18 Nov 2008 20:55:43 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
			<item>
		<title>What Git does best.</title>
		<link>http://www.conceptric.co.uk/what-git-does-best.htm</link>
		<comments>http://www.conceptric.co.uk/what-git-does-best.htm#comments</comments>
		<pubDate>Tue, 18 Nov 2008 20:55:40 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Computing]]></category>

		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://www.conceptric.co.uk/?p=122</guid>
		<description><![CDATA[I've succumbed to the lure of the cool kids version control. GIT has advantages and disadvantage over my current favourite, Subversion.]]></description>
			<content:encoded><![CDATA[<p>I run several remote Subversion repositories and connect using SSH over the Internet. Having local version control for those times I don&#8217;t have an ADSL connection was the main reason I looked at Git.</p>
<p>There&#8217;s a good <a href="http://blog.macromates.com/2008/git-bundle/">TextMate bundle to support Git</a>, but to be honest I&#8217;ve mostly used the command-line.</p>
<h3>Weaknesses.</h3>
<p><a href="http://svnbook.red-bean.com/en/1.0/ch07s04.html">Vendor branching</a> is possible, <a href="http://sourceware.org/frysk/build/git-fu.html">but awkward</a>. I frequently use vendor drops of WordPress, SimpleTest and a number of other libraries. There may be a good way of doing this, but I haven&#8217;t found it online&#8230; yet.</p>
<p>I miss the <a href="http://svnbook.red-bean.com/en/1.0/ch07s03.html">svn:externals</a> functionality, especially in applications that use a lot of plugins: WordPress in particular. Subversion allows me to define particular tagged versions of these to be pulled from their repositories during deployment without needing to bother controlling them myself.</p>
<h3>Strengths.</h3>
<p>Branch merging when trying out new ideas is a dream. I created a new branch, refactored huge sections of the codebase, and merged it all back together flawlessly. With Subversion this would have been a lot slower and more problematic. Git&#8217;s simply great for those investigatory spikes.</p>
<h3>The verdict for Git.</h3>
<p>I&#8217;ve yet to seriously try Git to interface with my remote Subversion repositories, using the &#8216;git svn&#8217; series of commands. Having local copies of these, whilst still being able to use remote Subversion would be very useful. I&#8217;ve found using remote Subversion repositories easy, but trying to push a Git repository to Subversion is not so easy. I&#8217;m also going to try deploying from a Git repository using Capistrano in the near future.</p>
<p>It strikes me that Git is best at programmer related activities and weakest in those of interest to administrators deploying applications. I shall certainly continue to use it, but alongside Subversion.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/what-git-does-best.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Code ignition</title>
		<link>http://www.conceptric.co.uk/code-ignition.htm</link>
		<comments>http://www.conceptric.co.uk/code-ignition.htm#comments</comments>
		<pubDate>Sun, 16 Nov 2008 12:53:11 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Computing]]></category>

		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[codeigniter]]></category>

		<category><![CDATA[design patterns]]></category>

		<category><![CDATA[frameworks]]></category>

		<category><![CDATA[trials]]></category>

		<guid isPermaLink="false">http://www.conceptric.co.uk/?p=111</guid>
		<description><![CDATA[Whilst developing a relatively simple application for managing my budgets, I've decided to experiment with a few different frameworks. With so many to choose from, how do I feel about going for CodeIgniter?]]></description>
			<content:encoded><![CDATA[<p>CodeIgniter is billed as being a lightweight PHP <abbr title="Model - View - Controller">MVC</abbr> framework. Now I&#8217;m not a big fan of PHP, despite using WordPress and Drupal, but I intend to run this application on a Synology <abbr title="Network Attached Storage">NAS</abbr>, so PHP is the only game in town.</p>
<h3>Changing the Architecture.</h3>
<p>I&#8217;m not a keen on the idea of dumping all my code in the web server root directory, so I tested the framework flexibility by rearranged the application structure a little.</p>
<pre class="code">
	-rw-r--r--   1 Capfile
	drwxr-xr-x  14 application
	drwxr-xr-x   3 config
	drwxr-xr-x  13 system
	drwxr-xr-x   5 public
</pre>
<p>Once these locations were updated in the application configuration files it all worked perfectly. The reasons for doing this sort of thing have been <a href="http://capsizedesigns.com/blog/2008/06/getting-started-with-codeigniter-part-5-loose-ends/">documented elsewhere</a>, and I agreed with them from this security standpoint, however this structure also fits better with <a href="http://www.conceptric.co.uk/capistrano-works.htm">Capistrano deployment</a>.</p>
<h3>A positive first impression.</h3>
<p>The Views deal with the presentation logic, and I like the fact that embedding PHP within the HTML is the default, instead of a complex templating system. It&#8217;s not the cleanest approach, but I prefer to have full control over my HTML.</p>
<p>As for the Controllers, the implementation is quite intuitive and you can build a friendly set of URLs with a little help from <a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">mod_rewrite</a> and the <a href="http://codeigniter.com/user_guide/libraries/uri.html"><code>URI</code> class</a>. </p>
<p>The form validation is a great feature that I found easy to implement within the Controllers and Views. I&#8217;ve centralised my validation rules in the global configuration file <a href="http://codeigniter.com/user_guide/libraries/form_validation.html#savingtoconfig">suggested in the documentation</a>, but haven&#8217;t got the automatic rule group feature to work yet.</p>
<p>The <code>Model</code> class is used to represent a single database table. I&#8217;m used to mapping tables with a Class in this way, but normally each instance would represent a row of data. CodeIgniter <code>Models</code> implement the <a href="http://en.wikipedia.org/wiki/Singleton_pattern">Singleton design pattern</a>, only one instance per class, from which the <code>Database</code> class methods can be called.</p>
<p>The <code>Database</code> class provides the data access layer and a good set of robust methods which return an array of <code>stdClass</code> instances representing the resulting data rows. These arrays are then forwarded to the View, where the instance variables can be directly accessed. This is quick and easy, but not very <abbr title="Object Oriented Programming">OOP</abbr>.</p>
<h3>Implementation reservations.</h3>
<p>I believe that the Model should be capable of running as a stand-alone application, once equipped with any interface, even the command-line. It&#8217;s this level of autonomy that results from the MVC design pattern: substitute a different Controller and View and it&#8217;ll still work the same way on a different platform.</p>
<p>Controllers reacting to events, whilst Views shouldn&#8217;t have direct, mutable access to instance variables. The Model should encapsulate both the data and the business logic, not something that can be effectively achieved with Singletons alone. Indeed CodeIgniter blurs this distinction by making Models optional and allowing data manipulation directly in the Controllers.</p>
<p>I&#8217;ve implemented my preferred approach by providing my own classes to replace the <code>stdClass</code>. They don&#8217;t extend the CodeIgniter <code>Model</code> class, but are instantiated within those that do, encapsulating data and business logic; including Object&#8211;relational data mapping and <acronym title="Create - Read - Update - Delete">CRUD</acronym> functionality.</p>
<p>It works well, but I&#8217;m concerned that by introducing a more rigourous approach I&#8217;m losing some of the advantages of the framework. May be I would be better to take CodeIgniter at face value, as a flexible, if a little dirty, rapid development environment that works.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/code-ignition.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Why I like to be Agile</title>
		<link>http://www.conceptric.co.uk/why-i-like-to-be-agile.htm</link>
		<comments>http://www.conceptric.co.uk/why-i-like-to-be-agile.htm#comments</comments>
		<pubDate>Fri, 07 Nov 2008 20:25:11 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Computing]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[agile]]></category>

		<category><![CDATA[projects]]></category>

		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.conceptric.co.uk/?p=109</guid>
		<description><![CDATA[I've practised traditional project management techniques in Heavy Engineering, studied their use in Software Engineering, and found problems throughout. Why am I so interested in Agile techniques?]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s face the reality that no matter how clear the project goals seemed at inception, they rarely look the same by the end. I&#8217;ve worked on projects where the whole scope of the project changed between the initial planning phase and the start of the technical work. What&#8217;s more the timescale tends to shift on a daily basis and your management keep &#8216;borrowing&#8217; your resources for other vital work. This is the primary reason why I now prefer a more responsive approach; essential in a unstable world! </p>
<p>The Agile approach is more adaptable with respect to three key project variables; only the last of which, in my experience, is considered flexible in the waterfall world of engineering.</p>
<ul>
<li>Scope.</li>
<li>Time.</li>
<li>Resources.</li>
</ul>
<h3>Scope contraction.</h3>
<p>Scope flexibility is something of a taboo subject. Scope is something that is added to in both a controlled manner &#8212; providing additional revenue &#8212; or uncontrolled creep. But the point of any project is delivering something that achieves the customers business goals. This is not necessarily the product that they, or the development team, initially envisaged. </p>
<p>One uncomfortably overspent project lead to the realisation that I could have achieved the business objective well under budget by actually drastically reducing the scope. It wouldn&#8217;t have delivered exactly what the customer expected, but it would easily have achieved their goal. </p>
<p>Which is more important, expectation or results? If you have a customer representative on the team it&#8217;s much easier to explain your rationale, and the chances are they&#8217;ll like the idea of results with less work as much as you do.</p>
<h3>Timescales.</h3>
<p>If you have a customer that doesn&#8217;t mind when you deliver, you&#8217;re a rare and lucky project manager, though you&#8217;ll never actually finish anything; deadlines do provide focus. So set plenty of deadlines, that&#8217;s what iterations and releases are about. </p>
<p>Try to answer the most pressing question as quickly as possible. Leave refinements and those ever present scope changes to the next iteration, it&#8217;s probably only a few days away. </p>
<p>This rapid cycle provides useful results, whilst allowing the flexibility to quickly change direction without that wasteful churn: just tidy this up a bit then I&#8217;ll be with you.</p>
<h3>And the resources?</h3>
<p>I&#8217;m afraid the project manager has to earn their money too. Line management will always have the urge to reassign any of your key people they feel aren&#8217;t being fully employed. It&#8217;s important to emphasise that the productivity of any team depends on preventing this happening.</p>
<p>Agile teams don&#8217;t strictly segregate workload on the basis of job descriptions, that&#8217;s why you need versatile individuals. Unfortunately, these are exactly the type of individuals that those managers will want to steal away. Removing the demarcation of tasks will help ensure everyone is kept busy and that work is conducted using the minimum number of people.</p>
<h3>Better than the Waterfall.</h3>
<p>I&#8217;ve found actual project goals shift too frequently for effective use of the Waterfall approach to project management. Using iterations within this framework always felt unnatural; how do you decide how may there will be and when will you actually deliver something?</p>
<p>An Agile approach perversely leaves me feeling more in control by worrying less about control. There are a huge array of Agile software development techniques, many of which can be adapted to other engineering disciplines. </p>
<p>For Software Engineering, I would recommend reading <a href="http://www.amazon.co.uk/Art-Agile-Development-James-Shore/dp/0596527675/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1226088721&#038;sr=8-1"><cite>The Art of Agile Development</cite></a>. The <a href="http://www.agilealliance.org/home">Agile Alliance</a> promote the use of Agile techniques, so take a look at the <a href="http://www.agilemanifesto.org/"><cite>Manifesto for Agile Software Development</cite></a> upon which it&#8217;s all based.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/why-i-like-to-be-agile.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Purposeful technology</title>
		<link>http://www.conceptric.co.uk/purposeful-technology.htm</link>
		<comments>http://www.conceptric.co.uk/purposeful-technology.htm#comments</comments>
		<pubDate>Thu, 30 Oct 2008 14:51:21 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[enterprise systems]]></category>

		<category><![CDATA[processes]]></category>

		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://www.conceptric.co.uk/?p=97</guid>
		<description><![CDATA[Information technology projects frequently catch the headlines, but usually due to spectacular failures. The problem usually results from not asking whether the system is needed at all.]]></description>
			<content:encoded><![CDATA[<p>The point to keep in mind is that the business process comes first. After all, businesses were here long before the <abbr title="Information Technology">IT</abbr> department was born. How do you expect to add technology into the equation without understanding you own business domain?</p>
<h3>Define your business.</h3>
<p>When developing business processes try to keep everything as simple as possible. Simple processes are likely to be followed: complex ones won&#8217;t. This is definitely true of written procedures, but human employees have the ability to sift through the junk and ignore it; you may not like that but it&#8217;s true. </p>
<p>Computers on the other hand don&#8217;t share this aptitude. Your software developers may try to ensure the software follows your monolithic procedures, but the conflicts ignored by human employees will have to be resolved; a long and expensive process.</p>
<p>A systematic approach to this analysis can help, especially with the inevitable documentation, take a look at <a href="http://en.wikipedia.org/wiki/Business_Process_Modeling">business process modeling</a> and the <a href="http://www.bpmn.org/"><abbr title="Object Management Group">OMG</abbr> notation</a>.</p>
<p>Well implemented processes will be familiar to your staff and any software based on them equally so, saving a fortune on training. </p>
<h3>What is success?</h3>
<p>Now you&#8217;ve got a minimalist set of effective processes, you&#8217;re in a position to consider how the application of software and hardware systems might improve or expand your business, and bear in mind that it might not.</p>
<p>What will success would look like? It too needs to be defined as simply as possible if you&#8217;re going to recognise it. Frequently at the start of projects everyone is so excited that this step is lost. It is either overlooked or results in a requirements document so complex nobody can be bothered to read it.</p>
<p>Ask yourself how many other business purchases you would make without actually considering what you&#8217;re expecting to have delivered. Would you be happy if you were hoping for a photocopier and ended up with a filing cabinet?</p>
<h3>Get involved.</h3>
<p>Most organisations expect their involvement to end once they&#8217;ve specified their requirements. The developer will go away, build the software, and deliver it perfect and on schedule. OK, maybe that&#8217;s an exaggeration, but placing your staff in the development team is not an optional extra. </p>
<p>They&#8217;re likely to spend substantial time working closely with the developers, it&#8217;ll be worth it, you&#8217;re likely to get a better system. Most will be involved in user testing, but the customer representative is a key role representing the business interests within the team. Customers are not project managers, they are focused on the benefits to the business and its operational goals.</p>
<p>Primarily involve people that actually undertake the work this system is meant to enhance, and those that will continue to use it. There&#8217;s a huge temptation for senior management to attempt to fulfil this role, but they usually know next to nothing about the processes in question, so resist it. There is a vital role for senior sponsorship, but it&#8217;s not in the development team.</p>
<p>Resulting software will be intuitive, and the <a href="http://www.conceptric.co.uk/what-is-computer-literacy.htm">computer literate</a> will be able to understand it based on their knowledge of their current job, and of course your procedures.</p>
<h3>The pay back.</h3>
<p>Get the basics right &#8212; develop good business processes, define success, and build an effective team &#8212; and your project has a much better chance of delivering satisfaction, on time, and to budget.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/purposeful-technology.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>What is computer literacy?</title>
		<link>http://www.conceptric.co.uk/what-is-computer-literacy.htm</link>
		<comments>http://www.conceptric.co.uk/what-is-computer-literacy.htm#comments</comments>
		<pubDate>Wed, 29 Oct 2008 15:52:14 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Computing]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[people]]></category>

		<category><![CDATA[skills]]></category>

		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://www.conceptric.co.uk/?p=87</guid>
		<description><![CDATA[We all gratuitously refer to computer literacy, but what level of capability does this represent and how do you get it?]]></description>
			<content:encoded><![CDATA[<p>Those reading this blog may be surprised how many people are out there that aren&#8217;t computer literate. No matter how good the software interface, someone encountering a keyboard and mouse for the first time will not figure it out without a lot of help.</p>
<p>This came to my attention a few years ago when my Mother decided to learn how to use a computer. Once she retired she needed to keep up with the technology she&#8217;d avoided for years. I actually think it was a great idea; retirement often increases the perception that the world is leaving you behind. She&#8217;d never used a typewriter: why are those letters in such a strange place? The mouse was a huge challenge to hand&#8211;eye co&#8211;ordination.</p>
<p>She enrolled on <a href="http://www.clait2006.co.uk/">CLAiT</a> Level 1, and she&#8217;s made great progress, but I doubt she&#8217;d claim to be comfortable enough to be able to try something completely new without a lot of support. She can surf the Web, check and send basic email and do a little word processing, but that&#8217;s about it. It&#8217;s more than enough for her needs, but a business is going to need a little more.</p>
<p>The point is that there are a lot of younger people still in the workforce that are in much the same position to my Mother. They are often encouraged to undertake <a title="European Computer Driving License" href="http://www.bcs.org/server.php?show=nav.5829">ECDL</a> training as shown on the <a href="http://www.bcs.org/server.php?show=nav.7060">BCS website</a>:</p>
<blockquote cite="http://www.bcs.org/server.php?show=nav.7060"><p>The European Computer Driving Licence&reg; (ECDL) is the internationally recognized qualification which enables people to demonstrate their competence in computer skills.</p>
<p>The record breaking ECDL is the fastest growing IT user qualification in over 125 countries.</p>
<p>ECDL is designed specifically for those who wish to gain a benchmark qualification in computing to enable them to develop their IT skills and enhance their career prospects.</p></blockquote>
<p>The problem I have is that I&#8217;ve encountered people with these qualifications, and others, purporting to be &lsquo;Microsoft Excel Expert Users&rsquo;, and they haven&#8217;t even figured out that a spreadsheet IS a big calculator! This can&#8217;t be entirely due to the course content, so why are these people allowed to pass this qualification: it has to be in the assessment and a reluctance to fail anyone.</p>
<p>So as an employer facing a knowledge based economy &mdash; according to the UK government &mdash; where success is based on the skills of your employees, how do you decide which candidates are fit for purpose? My experience is that you can&#8217;t rely on these benchmarking qualifications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/what-is-computer-literacy.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>My sequential diploma</title>
		<link>http://www.conceptric.co.uk/my-sequential-diploma.htm</link>
		<comments>http://www.conceptric.co.uk/my-sequential-diploma.htm#comments</comments>
		<pubDate>Sat, 25 Oct 2008 17:13:11 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Computing]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[concurrency]]></category>

		<category><![CDATA[distributed computing]]></category>

		<category><![CDATA[open university]]></category>

		<guid isPermaLink="false">http://www.conceptric.co.uk/?p=84</guid>
		<description><![CDATA[Another Open University course completed having raised my awareness of the nightmare of true concurrent programming. There has to be an easier way?]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m still working towards an <abbr title="Open University">OU</abbr> <a href="http://www3.open.ac.uk/courses/bin/p12.dll?Q01D12">Diploma in Computing</a>, and taking my time about it, hence the title. Despite this theme, my last module in developing concurrent distributed systems &#8212; catchy title, but accurate  &#8212; opened up the world of concurrency, and the ease with which truly parallel applications can be developed using modern tools. Ha, as far as I can tell Java is pretty good in the concurrent minefield of a mutable state environment, but limited IDEs are the equivalent of wandering into it with a blindfold. </p>
<p>The problem is trying to decide which of these mutable resources are likely to be accessed in a concurrent fashion, provide locks to enforce mutual exclusivity; ensuring no other processes is working from an intermediate, invalid state; and all without becoming deadlocked. Traditional debugging and even test&#8212;driven approaches aren&#8217;t much help, because the errors are dependent on the order in which the processes are scheduled to be executed; not very repeatable, and certainly not controllable.</p>
<p>So the course left me itching to have a go, but aware that concurrent object oriented development needs to be done in the right language, oh, and very carefully. A little reading around the topic lead me to the idea of immutable state development. </p>
<p>Now in <acronym title="Object Oriented Programming">OOP</acronym> terms an immutable state is not very helpful, nothing much ever happens. We rely on the software state being stored in the attributes of all those objects, and actions being driven by the exchange of messages between them. But in the <a href="http://en.wikipedia.org/wiki/Functional_programming">functional programming paradigm</a> an immutable state is implicit, since the state is stored in the way functions execute each other, and themselves, no data is actually stored in variables. This means that processes can be executed in any order without any danger of seeing an invalid state: no need for any locking and a much simpler programming job!</p>
<p>I&#8217;ve only just started investigating these ideas, but with the thrust of computing performance in the direction of multiple processors, either on a single machine or via the &#8216;cloud&#8217;, it seems that concurrent, parallel programming may be very important in the future. A couple of languages I want to check out are <a href="http://www.erlang.org/">Erlang</a> and <a href="http://clojure.org/">Clojure</a>. Finally, I found the <a href="http://podcast.rubyonrails.org/">Ruby on Rails Podcast</a> <a href="http://podcast.rubyonrails.org/programs/1/episodes/erubycon-jim-weirich">interview with Jim Weirich</a> an interesting perspective on the programming.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/my-sequential-diploma.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>The device I want</title>
		<link>http://www.conceptric.co.uk/the-device-i-want.htm</link>
		<comments>http://www.conceptric.co.uk/the-device-i-want.htm#comments</comments>
		<pubDate>Fri, 05 Sep 2008 13:13:41 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Computing]]></category>

		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[devices]]></category>

		<category><![CDATA[distributed computing]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/?p=70</guid>
		<description><![CDATA[We're surrounded by smartphones, PDAs and laptops, many are fantastic already, but it'll take something more to part me from my money.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve played with the iPhone, the best handheld device interface I&#8217;ve come across by a large margin, and it would probably be my device of choice at the moment. However, there&#8217;s still a lot of functionality missing before such a device could oust both my mobile phone and laptop.</p>
<p>Here&#8217;s the near future dream; they can get a lot wilder.</p>
<p>I&#8217;m working on my latest project on the train, in a tunnel, whilst I travel to a meeting with a client. I reach a critical part where I need to see the big picture, so I find transfer the output to an LCD display in a coffee bar at the station.</p>
<p>It&#8217;s not going smoothly, and I decide I could use some help, so I call a few colleagues and arrange a conference in 15 minutes time. Once we&#8217;re all virtually present, it&#8217;s early remember, I&#8217;d show them the problem by sharing my display output via the network. Each using our own devices we work together, version controlled and still conferencing, until we crack the problem.</p>
<p>I thank everyone and leave for the Client&#8217;s office. Once there I transfer the presentation of the key project details to a large TV in the conference room and send a hardcopy to the printer in the office. </p>
<p>Oh&#8230; and all seamlessly without wires. Of course, this is a picture of the utopia of perfect interoperability and security, but what are the chances?</p>
<h4>Interoperability.</h4>
<p>The device layer interface is a key feature, with transparent support a wide selection of drivers and protocols, I don&#8217;t want to have to get involved. As many devices aren&#8217;t wireless enabled at the moment, have poor device driver support, or use proprietary communication protocols, this is a real challenge.</p>
<h4>Getting input.</h4>
<p>Input is probably still the good old keyboard and pointing device, of which there are several approaches for those who don&#8217;t mind carrying extra kit.</p>
<ul>
<li>Fabric keyboards that can be folded away, like the <a href="http://www.just-mobileonline.com/products_communicationseries_2.html">Just Mobile RoKy&#178;</a>.</li>
<li>Projected light keyboards like the <a href="http://www.virtual-laser-keyboard.com">I-Tech Virtual Laser Keyboard</a> are compact and lightweight.</li>
<li>The pointing is easier, a wide range of Bluetooth mice and other devices already exist.</li>
</ul>
<p>And for those that do?</p>
<ul>
<li>Traditional mobile phone keyboard. I hate this, I&#8217;m too old to be any good and have an aversion to developing arthritis in my thumbs.</li>
<li>Touch screen keyboards, the Apple iPhone is the best implementation I&#8217;ve come across.</li>
<li>Stylus on touch screen for handwriting recognition as used by Palm.</li>
<li>Or just being able to use any input device I find lying around, wireless of course.</li>
</ul>
<p>There are other options like voice recognition, cameras, and detecting eye movements which could find wider use in the future. I&#8217;d like a direct mental link, so I can just think what I want to do, but I&#8217;d probably end up with a nasty brain wiping piece of malware!</p>
<h4>Displaying output.</h4>
<p>Displaying output raises important issues surrounding the usability of the actual user interface, after all, I&#8217;m proposing to go from working on a typical PDA size display to a 40 inch TV! I want to make the best use of the visible area on any given device, whilst avoiding 4 inch high characters. </p>
<p>The experience of designing for different web browsers, screen resolutions, and colour maps could be leveraged for this new platform.  CSS can be targeted at different media types and such an approach could be adopted throughout the new system.</p>
<h4>Staying mobile.</h4>
<p>Power management is vital for extended mobile operation and I&#8217;d like to be able to work normally for several days at least. </p>
<p>This may be achieved by longer battery life or a totally different energy storage or generation technology. Fuel cells, solar panels or even nuclear power could be used; though even I&#8217;d be a bit concerned about carrying around a nuclear reactor. What if the fuel cell ran on a range of organic feed stocks, just like I do? I could recharge my computer at the same time as myself in any restaurant.</p>
<p>Wireless recharging could be an option, maybe inductive charging such as <a href="http://www.wildcharge.com/">WildCharge pad</a>. I&#8217;d prefer my device to selectively recharge at any opportunity, and from any source, so that I don&#8217;t have to be in any particular place or make any conscious decision. The device could decide to top-up from a nearby power cable, the sun as I walk around, or even using the heat of a warm day. Again, I don&#8217;t want to know it&#8217;s happening or how.</p>
<h4>How long?</h4>
<p>Much of the software architecture and implementation technologies already exist to make my dream device a reality, the real work is in perfecting the hardware at a cost that makes loss or damage acceptable; it&#8217;s portable remember. At the current rate of development I suspect I won&#8217;t have to wait too long for the device itself. But the legacy issues for hardware interoperability?</p>
<p>Ultimately it&#8217;s my guess that computing and the Internet will become indivisible; not sticking my neck out too much since for many of us it already is. If some of the wilder concepts of <a href="http://en.wikipedia.org/wiki/Pervasive_computing">ubiquitous computing</a> come to pass I won&#8217;t need a single device anyway, I&#8217;ll just pick up computing resources whenever I need them from the environment surrounding me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/the-device-i-want.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Capistrano works!</title>
		<link>http://www.conceptric.co.uk/capistrano-works.htm</link>
		<comments>http://www.conceptric.co.uk/capistrano-works.htm#comments</comments>
		<pubDate>Mon, 04 Aug 2008 13:52:10 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Computing]]></category>

		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[capistrano]]></category>

		<category><![CDATA[deployment]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/?p=66</guid>
		<description><![CDATA[Effective version control and Capistrano managed deployment has hugely enhanced my workflow and quality.]]></description>
			<content:encoded><![CDATA[<p>Deploying even my simplest web applications was a complicated matter:</p>
<ol>
<li>Log in as a privileged user.</li>
<li>Create the domain deployment directory.</li>
<li>Export the application code from Subversion.</li>
<li>Update the file ownership and privileges.</li>
</ol>
<p>For Wordpress I also had to export code for each theme or plug&#8212;in to the required locations. So I decided to improve the situation. I&#8217;ve changed the way my Wordpress sites are handled in Subversion; haven&#8217;t moved to <a href="http://git.or.cz/">Git</a> yet like the rest of the world, and I am using <a href="http://www.capify.org/">Capistrano</a> to manage the deployment.</p>
<p>Capistrano is a Ruby based remote task manager, the most commonly used tasks being for web application deployment. Obviously the original target was Ruby on Rails, but many people use it for PHP. It uses Secure Shell (SSH) as the preferred method for logging into remote servers; all communication is then encrypted.</p>
<p>What follows isn&#8217;t a full set of instructions on deploying PHP with Capistrano, <a href="http://www.hostingrails.com/forums/wiki_thread/46">HostingRails.com</a> provide a useful piece and you should look at the <a href="http://manuals.rubyonrails.org/read/chapter/97">Capistrano manual</a>, these are my thoughts. May be something more detailed might come later&#8230; but no promises.</p>
<h3>Managing the source code.</h3>
<p>The Subversion repository for each blog project uses a <a href="http://svnbook.red-bean.com/en/1.1/ch07s05.html">vendor branch</a> of the Wordpress source code and  svn:externals properties to import the required themes and plug&#8212;ins from their respective repositories. </p>
<p>Wordpress updates are integrated into the vendor branch and then into any of my projects without disturbing any custom code changes. For merging changes I can strongly recommend using the svn_load_dirs.pl script, it allows you to maintain file history and makes the whole process easier.</p>
<h3>And now deploy.</h3>
<p>I currently have my main Subversion and Web servers on the same machine, leaving me with the option to use the local <code>file://</code> protocol to retrieve the application files. I wanted to make my deployment script more universal so that I could use it for the production and development platforms. </p>
<p>The obvious choice was the <code>svn+ssh://</code> protocol I normally use, but in addition to SSH, I use public key authorisation with passphrases for all of my servers. A frequent problem was that Capistrano didn&#8217;t like asking for passphrases for remote machines.</p>
<p>Since the repository and deployment machines are one in the same, I can use SSH forwarding to provide a recursive tunnel by defining the following in the <em>deploy.rb</em> script.</p>
<pre>
<code>set :user, "me" </code>
<code>ssh_options[:forward_agent] = true</code>
</pre>
<p>The variable <code>user</code> tells Capistrano which user has SSH access and the <code>forward_agent</code> option allows the same SSH credentials for the tunnel to the Subversion server. Now , if your svn user is different from the ssh user you&#8217;ll need to add another couple of things: </p>
<pre>
<code>set :svn_user, username</code>
<code>set :repository, "--username #{svn_user} svn+ssh://hostname/repository/#{application}/trunk"</code>
</pre>
<p>These variables enabled me to use the default deployment tasks for my application, there&#8217;s no need to override them, just use the <code>before_</code> and <code>after_</code> hooks to define additional functionality.</p>
<h3>The result.</h3>
<p>I have two WordPress blogs deployed on my server using Capistrano and Subversion for remote control, including custom themes and third&#8212;party plugins. I&#8217;ve already redeployed to incorporate changes and everything has worked perfectly.</p>
<p>Next&#8230; Drupal?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/capistrano-works.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Claimed in Technorati</title>
		<link>http://www.conceptric.co.uk/claimed-in-technorati.htm</link>
		<comments>http://www.conceptric.co.uk/claimed-in-technorati.htm#comments</comments>
		<pubDate>Wed, 30 Apr 2008 19:26:54 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/?p=59</guid>
		<description><![CDATA[This is just a post to let me claim my blog in Technorati, like there&#8217;s any chance I&#8217;d give them my username and password. Technorati Profile.
OK, I agree that this has very little to do with the general topics in this blog, but it was a test, looks pretty, and it&#8217;s blue like the overall [...]]]></description>
			<content:encoded><![CDATA[<p>This is just a post to let me claim my blog in Technorati, like there&#8217;s any chance I&#8217;d give them my username and password. <a rel="me" href="http://technorati.com/claim/v8izke6nnd">Technorati Profile</a>.</p>
<div class="wp-caption alignnone" style="width: 170px"><a href="http://www.flickr.com/photos/photograclare/2706974960/"><img title="A blue cornflower" src="http://farm4.static.flickr.com/3053/2706974960_8075bb5ddb_m_d.jpg" alt="A blue cornflower macro photograph taken from the flickr photostream of ToppC" width="160" height="240" /></a><p class="wp-caption-text">A blue cornflower macro photograph taken from the flickr photostream of ToppC</p></div>
<p>OK, I agree that this has very little to do with the general topics in this blog, but it was a test, looks pretty, and it&#8217;s blue like the overall colour scheme.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/claimed-in-technorati.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Drupal revisited</title>
		<link>http://www.conceptric.co.uk/drupal-revisited.htm</link>
		<comments>http://www.conceptric.co.uk/drupal-revisited.htm#comments</comments>
		<pubDate>Thu, 24 Apr 2008 13:46:29 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[club]]></category>

		<category><![CDATA[content management system]]></category>

		<category><![CDATA[drupal]]></category>

		<category><![CDATA[writemaps]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/?p=58</guid>
		<description><![CDATA[Four months on and it's time to review progress on the <a href="http://northamptonshirebirdclub.org.uk/">Northamptonshire Bird Club</a> website. Is Drupal working out the way I hoped?]]></description>
			<content:encoded><![CDATA[<p>OK&#8230; as I mentioned in my <a href="http://www.jameswhinfrey.co.uk/using-drupal.htm">previous article</a>, I&#8217;d had a change of heart on the approach for the <a href="http://northamptonshirebirdclub.org.uk/">Northamptonshire Bird Club</a> website.</p>
<h3>Redefining the Architecture.</h3>
<p>I decided to start again by defining the information architecture for the site based on a proper discussion with the Club committee. The first few meetings on this topic just weren&#8217;t as well focused as they should have been; mostly my fault for not knowing what I wanted from them; but this time I tried targeting those features that the membership would really value. Each of the features that emerged seemed to fall into logical sections of the information architecture:</p>
<ul>
<li>About the Club &#8212; including notices, events and membership contacts.</li>
<li>Content on Birding &#8212; after all it&#8217;s the main focus of the Club.</li>
<li>Social groups within the Club divided by specific interest.</li>
</ul>
<p>These overall sections were used as containers for the more specific features, and these formed the basis for implementation.</p>
<p>I&#8217;ve tried an online tool called <a href="http://writemaps.com/">WriteMaps</a> for developing and sharing the architecture of this site. I haven&#8217;t decided whether it&#8217;s the best way to approach the job yet, but here&#8217;s <a href="http://writemaps.com/sitemaps/shareMap/3b3c848ehee80w3zgak2n5e4wi9m7vblx2ma8n6fmemi1orinj">the link to the detailed sitemap</a>.</p>
<h3>Implementing the Design.</h3>
<p>The original site used custom taxonomy &#8212; tagging &#8212; to enforce the architecture, with multiple sections of the site sharing the same content types. As I mentioned, this made it very confusing for the Club editors, which was reflected in the site presentation.</p>
<h4>Installing new modules.</h4>
<p>I needed to add several new modules to support the new content. There are several ways of doing this; this alone is a substantial topic; but the simplest is to download the module directory containing the code into the modules directory of your Drupal installation.</p>
<h4>Content types.</h4>
<p>For this redesign I decided that each of the features should have a dedicated content type so that users only need select the right one, there&#8217;s help text as you can see, and it&#8217;ll end up in the right place on the website. No more messing about with tags!</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/the-content-types.jpg" title="The new content types" alt="The new create content menu" width="400" height="450" /></div>
<p>A great tool for this is the <a href="http://drupal.org/project/cck">Content Construction Kit (<abbr title="Content Construction Kit">CCK</abbr>)</a> module. It makes implementing new content types very easy; no PHP required; and there are a wide range of modules that provide additional data fields. I&#8217;ve used several to provide dates, images and even GoogleMaps, take a look at <a href="http://drupal.org/project/Modules/category/88">the full list of compatible modules</a> on the Drupal website.</p>
<p>Once the CCK module is installed, all the changes you want to make can be managed from the <em>Content types</em> section of <em>Content Management</em>.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/content-type-management.jpg" title="Content type management" alt="The content type management menu" width="400" height="396" /></div>
<h4>Providing access.</h4>
<p>All these new content types need to have access control set&#8211;up before you can go any further. This is done in <em>Access control</em>, under <em>User Management</em>  in the administration section of Drupal.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/user-management-menu.jpg" title="User management menu" alt="The user management menu" width="400" height="252" /></div>
<p>You should find both create and edit options to set under <em>node module</em> for the new content types.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/node-access-control.jpg" title="Node access control" alt="The node access control options" width="400" height="162" /></div>
<p>Once these are set the content types should appear on the appropriate <em>create content</em> menus.</p>
<h4>Setting up the paths.</h4>
<p>But you&#8217;ll want to set the <abbr title="Uniform Resource Locator">URL</abbr>s to reflect the new architecture before deploying.</p>
<p>I use <a href="http://drupal.org/project/pathauto">Pathauto</a> to provide aliases for my content that better reflect the structure of the website and present friendly URLs. You can do this manually, but if you can&#8217;t rely on your users to do this consistently I would recommend using Pathauto.</p>
<p>The <em>Pathauto</em> settings are under <em>Site Configuration</em>, and it&#8217;s the Node paths you want to set&#8211;up for your new content.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/pathauto-overview.jpg" title="Pathauto overview" alt="Overview of the options for the Pathauto module" width="400" height="234" /></div>
<p>These, combined with the individual content types, provide the structure for the website. For example I wanted the bird guide to appear within the birding section of the site architecture with individual entries beneath this, so I set the pattern to <cite title="Pathauto pattern for the bird guide">birding/birdguide/[title].htm</cite>.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/some-node-path-settings.jpg" title="Node path settings" alt="Examples of node path settings" width="400" height="198" /></div>
<h4>Time for a View.</h4>
<p>The Views module provides the ability to present node data in a range of different formats. With the module installed your views can be managed from the <em>Administer views</em> section found under <em>Site building</em>.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/the-views.jpg" title="Administering Views" alt="Example of the Views administration options" width="400" height="270" /></div>
<p>Here you can define new views for each of the content types and define a URL from which the specific view can be accessed in the browser. In the image above you can seen that I wanted the bird guide list to appear as the default in the bird guide, and gave it the URL <cite title="Views URL for the bird guide">birding/birdguide</cite>. These views can generate lists, tables and customised sorting, in addition to the more standard web page presentations.</p>
<h4>&#8230;And a menu.</h4>
<p>Finally we&#8217;re going to want a menu from which all our good work can be accessed. The menus and blocks in Drupal can all be found in the <em>Site building</em> section.</p>
<p>The sequence is simple, first create a new menu for the features you&#8217;ve implemented, under the <em>Menus</em> section, using the URLs of the views;</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/the-birding-menu.jpg" title="The birding menu" alt="Example of the birding section menu" width="400" height="216" /></div>
<p>and then go to the <em>Blocks</em> section and put the new menu where you want it to appear on the website.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/blocks-in-the-left-sidebar.jpg" title="Defining blocks" alt="Placing the menus in left sidebar on the website" width="400" height="162" /></div>
<p>That should be it! Your new functionality has been added.</p>
<h3>Conclusions?</h3>
<p>Having established this workflow, I implemented each of the identified features one at a time, ensuring it was working and acceptable before moving on to the next.</p>
<p>I believe, and feedback suggests my users agree, that this approach to building a Drupal website is far more successful than a taxonomy based one. I still use taxonomy, but it now provides addition information for particular types of content rather than forming the basis for site architecture.</p>
<p>As for Drupal itself, it&#8217;s relatively easy to use, even without significant PHP knowledge, and the large community provides a huge range of contributed modules and support. This makes it a powerful way to develop feature rich, multi&#8211;user websites very quickly.</p>
<p>On the downside, I&#8217;ve found providing users with an easy way to upload and insert images very difficult. There are serious problems with using the popular <a href="http://drupal.org/project/tinymce">TinyMCE</a> <abbr title="What You See Is What You Get">WYSIWYG</abbr> editor and <a href="http://drupal.org/project/imce">IMCE</a> file handling together; individually they work OK, but together&#8230; I need to look at this again.</p>
<p>I would definitely recommend trying <a href="http://drupal.org/">Drupal</a> out if you need a <abbr title="Content Management System">CMS</abbr>, for an image rich website; such as a gallery; I&#8217;d try <a href="http://www.flickr.com/">Flickr</a> or, for ultimate control, hand coded <abbr title="eXtensible HyperText Markup Language">XHTML</abbr>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/drupal-revisited.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Anatomy of a semantic blog</title>
		<link>http://www.conceptric.co.uk/anatomy-of-a-semantic-blog.htm</link>
		<comments>http://www.conceptric.co.uk/anatomy-of-a-semantic-blog.htm#comments</comments>
		<pubDate>Fri, 18 Apr 2008 20:52:47 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[blogging]]></category>

		<category><![CDATA[semantic]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/?p=48</guid>
		<description><![CDATA[Whilst working on a new Wordpress theme I started wondering what makes a blog semantic. How do you use the mark&#8212;up to convey meaning about the content?]]></description>
			<content:encoded><![CDATA[<p>What are the components of a blog post?</p>
<ul>
<li>The title of the post.</li>
<li>The name of the author.</li>
<li>The date on which the post was published.</li>
<li>An excerpt from the content.</li>
<li>The post body itself.</li>
<li>The tags associated with the post.</li>
<li>The categories into which the post has been placed.</li>
</ul>
<p>I&#8217;m sure that there are more, but this is as far as I got&#8230; so the big question is how do I mark this lot up in order to extract even more meaning?</p>
<p>The two text fields, both being content; the excerpt and post body; don&#8217;t necessarily need any container since they&#8217;re build from paragraphs. However using &lt;div&gt; would give me a lot more control over the CSS, but is this adding unnecessary mark-up?</p>
<p>I thought about creating an unordered list out of the post metadata; author, date, tags and categories. It&#8217;s all very well describing the whole lot using the &#8216;metadata&#8217; label, but that&#8217;s not very helpful because they don&#8217;t belong together.</p>
<p>I figure that the tags and categories are easy since they&#8217;re obviously lists, and unordered ones at that. But the title, author and date are a different matter. Including them to a list is definitely adding extra mark&#8212;up, so I haven&#8217;t.</p>
<p>This is definitely an ongoing problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/anatomy-of-a-semantic-blog.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>A remote future for my Mac mini</title>
		<link>http://www.conceptric.co.uk/a-remote-future-for-my-mac-mini.htm</link>
		<comments>http://www.conceptric.co.uk/a-remote-future-for-my-mac-mini.htm#comments</comments>
		<pubDate>Fri, 11 Apr 2008 16:18:01 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Mac]]></category>

		<category><![CDATA[Posts]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/?p=46</guid>
		<description><![CDATA[I&#8217;ve come up with a brilliant idea to reuse my old Mac mini. I&#8217;m going to convert it into a server on my local network for development and hosting our personal web projects. 
OK&#8230; not very original, but the key point is that I want to be able to use the wireless networking, stick it [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve come up with a brilliant idea to reuse my old Mac mini. I&#8217;m going to convert it into a server on my local network for development and hosting our personal web projects. </p>
<p>OK&#8230; not very original, but the key point is that I want to be able to use the wireless networking, stick it anywhere, and not have to worry about peripherals. A very mobile server.</p>
<p>I already work with remote servers over public networks, and rarely use anything but the command line. For this project I wanted to be able to use the Mac desktop. This seemed the perfect excuse to play with <abbr title="Virtual Network Computing">VNC</abbr>. Additionally, I frequently use <abbr title="Secure SHell">SSH</abbr> and <abbr title="Public Key Infrastructure">PKI</abbr> for encryption and authentication respectively, but not VNC.</p>
<h3>The Plan.</h3>
<p>It seemed to me that there were several parts to the problem, with only one of which I&#8217;m familiar.</p>
<ol>
<li>Configure a VNC Client on the local machine.</li>
<li>Configure a VNC Server on the remote machine behind a firewall.</li>
<li>Enable SSH communication through the firewall.</li>
<li>Lock it all up using an SSH tunnel through the firewall so the Server and Client could talk.</li>
</ol>
<p>Now to work!</p>
<h3>The Client.</h3>
<p>I settled on <a href="http://sourceforge.net/projects/cotvnc/">Chicken of the VNC</a> (<abbr title="Chicken of the VNC">COTVNC</abbr>), a open source project providing a VNC Client for Mac OS-X. Great, that&#8217;s just what I want and it gets good reviews, but I guess most other clients out there would work too.</p>
<p>Once installed COTVNC takes almost no configuration, that all comes later in the SSH and Server.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/cotvnc-login.jpg" title="Connection with COTVNC" alt="Connection set-up dialogue for Chicken of the VNC" width="400" height="247" /></div>
<p>You might be able to see that I set up two connections; one for an unsecured connection, so that I could see if the security measures locked me out later; and this one for the secured connection, that&#8217;s why the host is the local machine.</p>
<h3>The Server.</h3>
<p>First I tried Apple Remote Desktop (<abbr title="Apple Remote Desktop">ARD</abbr>), but found it a little slow, but more importantly I couldn&#8217;t find a way to close the two ports in the firewall that the service automatically opened. While I&#8217;m diligently using SSH tunnelling to avoid compromising the security of my machine, these two ports are sitting there waiting for attack!</p>
<p>Time to try a different approach. I chose to disable the ARD service, closing the firewall again and installed a third party VNC server. The one I selected was <a href="http://www.redstonesoftware.com/products/vine_server">Vine Server from Redstone Software</a>. The reason? Nothing better that I&#8217;d read good things about it in blogs and on message boards, it&#8217;s available for Mac OS-X, and it&#8217;s free.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/vine-server-distro.jpg" title="Vine Server for Mac OS-X" alt="What is in the box for Vine Server on Mac OS-X" width="356" height="208" /></div>
<p>For Mac OS-X it downloads as a disk image containing the Server and a Viewer. I just wanted the Server as I&#8217;m using COTVNC, so a drag toward the Applications folder and a double click later I&#8217;m ready to configure things.</p>
<p>Vine server can be run in two different modes; as a System Server that starts automatically whenever the Mac starts up; or as a Desktop Server that can be run like any other application. Since I want to run my Mac mini as a remote headless &#8212; no keyboard, mouse or monitor &#8212; server, I only configured the System Server.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/system-server-settings.jpg" title="Vine System Server settings" alt="Settings dialogue for Vine System Server" width="456" height="435" /></div>
<p>Not especially difficult, but the eagle&#8210;eyed out there might have spotted that I didn&#8217;t enable the &#8220;Require Remote Login&#8221; option; in fact I did the first time and bang went any connection. I reasoned that I&#8217;m using SSH tunnelling, so the Server won&#8217;t realise that the connection <em>IS</em> via SSH and block it.</p>
<p>Set the System Server running, checking that it starts up again after a restart, and that&#8217;s the Server done.</p>
<h3>The Secure Protocol.</h3>
<p>Actually, this was pretty easy. Go to <em>System Preferences</em> > <em>Sharing</em> and enable the Remote Login service.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/sharing-settings.jpg" title="Sharing settings" alt="Settings to enable the Remote Login service on Mac OS-X" width="400" height="238" /></div>
<p>Make sure that the other services are disabled, unless you have a particular use for them; I&#8217;ll be enabling the Web Sharing service later. This should ensure that the firewall is closed on all ports except the one used for SSH &#8212; port 22.</p>
<h3>The Tunnel.</h3>
<p>The idea of the SSH tunnel was to forward any communications sent between port 5900 &#8212; the default VNC port &#8212; on the local machine and the remote machine, through an encrypted SSH connection.</p>
<p>Now there are lots of utilities to help you manage your SSH world, but I tend to use <a href="http://www.phil.uu.nl/~xges/ssh/">SSH-Agent</a> and the command line. I primarily use SSH-Agent to manage authentication, but it does have the ability to construct tunnels.</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/ssh-agent-tunnel.jpg" title="SSH-Agent tunnel set-up" alt="Set-up dialogue for SSH tunnels in SSH-Agent" width="500" height="112" /></div>
<p>If you&#8217;ve got PKI set up, you won&#8217;t even need to enter any passwords in order to establish the connection. </p>
<h3>The Result.</h3>
<p>Once your tunnel is connected, you can start up COTVNC, or equivalent, and log&#8210;in!</p>
<div style="text-align:center;"><img src="http://www.jameswhinfrey.co.uk/wp-content/uploads/a-remote-mac1.jpg" title="A desktop over VNC" alt="An image of the desktop on the remote machine" width="400" height="257" /></div>
<p>Everything appears to work and I find Vine Server much more responsive than the Apple free offering.</p>
<p><em>By the way, I tried logging in with the unsecured connection and was kicked out.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/a-remote-future-for-my-mac-mini.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>First impressions of MarsEdit</title>
		<link>http://www.conceptric.co.uk/first-impressions-of-marsedit.htm</link>
		<comments>http://www.conceptric.co.uk/first-impressions-of-marsedit.htm#comments</comments>
		<pubDate>Thu, 10 Apr 2008 15:56:39 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Mac]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/?p=39</guid>
		<description><![CDATA[I&#8217;m writing on the 30 day trial of MarsEdit, the blog editing tool for the Mac.  Given that this is my second post of the day &#8212; very rare, I know &#8212; you might have gathered that I like it.
I&#8217;ve always edited my online content remotely, I have a local copy and can work [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m writing on the <a href="http://www.red-sweater.com/marsedit/">30 day trial of MarsEdit</a>, the blog editing tool for the Mac.  Given that this is my second post of the day &#8212; very rare, I know &#8212; you might have gathered that I like it.</p>
<p>I&#8217;ve always edited my online content remotely, I have a local copy and can work off&#8211;line. I use <a href="http://macromates.com/">TextMate</a> for most of my development work and I&#8217;ve been using it for blogging too.</p>
<p>OK&#8230; I was reluctant to change. I like having full control over mark&#8211;up and haven&#8217;t been impressed by a <acronym title="What You See Is What You Get">WYSIWYG</acronym> editor yet, for Web use at least. Untried, I ranked MarsEdit amongst them.</p>
<p>I must apologise to the developers. It&#8217;s a great and flexible tool. Hope I&#8217;ll be doing a little more blogging!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/first-impressions-of-marsedit.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Virtualizing my world</title>
		<link>http://www.conceptric.co.uk/virtualizing-my-world.htm</link>
		<comments>http://www.conceptric.co.uk/virtualizing-my-world.htm#comments</comments>
		<pubDate>Thu, 10 Apr 2008 15:38:01 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/?p=38</guid>
		<description><![CDATA[Virtualization is definitely a big trend in computing and I&#8217;m growing to love it.
On the Web.
My production server environment is virtualized by the Xen hypervisor; providing a more flexible and cost effective solution.
I like the freedom of complete root access but, given my relatively low traffic volumes, the cost of a dedicated server would be [...]]]></description>
			<content:encoded><![CDATA[<p>Virtualization is definitely a big trend in computing and I&#8217;m growing to love it.</p>
<h3>On the Web.</h3>
<p>My production server environment is virtualized by the <a href="http://xen.xensource.com/">Xen hypervisor</a>; providing a more flexible and cost effective solution.</p>
<p>I like the freedom of complete root access but, given my relatively low traffic volumes, the cost of a dedicated server would be prohibitive. However, Xen provides me with my own little chunk of hardware resources that no other user&#8217;s going to break for me. </p>
<p>The great thing is that these resources can be altered very quickly to respond to changes in my requirements; great scalability in a changeable world.</p>
<h3>On the Desktop.</h3>
<p>I&#8217;m also making extensive use of virtualization on my desktop using VMWare Fusion. I&#8217;m a Mac user, but one of the attractions of the VMWare product is the interchangeability of any virtual machine (<abbr title="Virtual Machine">VM</abbr>) between platforms. </p>
<h4>VMWare Fusion.</h4>
<p>VMWare have been in the business of <a href="http://www.vmware.com/virtualization/">Virtualization</a> of a while now, and have a powerful range of products. Whilst many of these are targeted at the enterprise environment, Fusion is definitely a consumer product; in a good way; and the benefits to me so far&#8230;</p>
<ul>
<li>Surprisingly seamless Windows XP including Office, in my experience a much better product than the sadly neglected Mac version. Fusion has a &#8216;Unity&#8217; mode, which places these applications, running in a Windows environment, right on my Mac desktop.</li>
<li>I&#8217;ve tried different Linux flavours for the desktop and server, and I haven&#8217;t needed multiple machines. A great asset when you like to dabble but don&#8217;t have much free space; small house you see; and want to keep the bills down.</li>
<li>I&#8217;ve tried a whole range of software products without the usual worry of messing up my regular working platform, if it all goes wrong I just delete the VM and start again. If I might want to return to this set&#8210;up again, I can take a snapshot of the current installation, or copy the VM file to a backup location so I don&#8217;t have to start from scratch each time.</li>
<li>Finally, I&#8217;ve build VMs of the production server for deployment testing. I know that they&#8217;re not identical, but they&#8217;ve been good enough to iron out problems in build and deployment scripts before unleashing them on the production server itself.</li>
</ul>
<h4>A virtual network.</h4>
<p>Fusion has a built&#8210;in <abbr title="Dynamic Host Configuration Protocol">DHCP</abbr> server to provide <abbr title="Internet Protocol">IP</abbr> addresses, or they can be assigned by an external network using the bridged network option.</p>
<p>After exploring these options I discovered that I could build a virtual development network right on my laptop and make it as private as I want. Oh, yes, you can fix the IPs the server hands out, making it much easier to edit that hosts file.</p>
<p>The <acronym title="Network Address Translation">NAT</acronym> option can access the outside world, to install updates for example, by sharing the host connection. However it&#8217;s protected from external access. My physical home network uses NAT via an <abbr title="Asymmetric Digital Subscriber Line">ADSL</abbr> router, but this is a great option if you&#8217;re likely to take your laptop network out on the road and I use it for the majority of my installations.</p>
<p>If you&#8217;re even more worried about unauthorised access to your latest development project, you can use the host&#8210;only option; access only from the host machine or other local VMs using this network set&#8210;up.</p>
<p>With all the VMs using the same network option, they can all see and access one another. So now I can write my code on the host Mac, test deployment to a virtual <a href="http://www.centos.org/">CentOS</a> Linux server, and check how it looks on Windows. It&#8217;s self contained, I can flip between machines and it&#8217;s all totally mobile.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/virtualizing-my-world.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>The right approach for me</title>
		<link>http://www.conceptric.co.uk/the-right-approach-for-me.htm</link>
		<comments>http://www.conceptric.co.uk/the-right-approach-for-me.htm#comments</comments>
		<pubDate>Fri, 07 Mar 2008 15:20:47 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/the-right-approach-for-me.htm</guid>
		<description><![CDATA[I&#8217;ve heard and read the recommendation to always avoid doing speculative work for free. In most cases this advice refers to website graphic design, and is intended to avoid wasted effort and pilfered designs.
I&#8217;ve always found that the experimentation the most effective way to investigate new ideas, whether methodologies or technology. Frequently, these experiments &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve heard and read the recommendation to always avoid doing speculative work for free. In most cases this advice refers to website graphic design, and is intended to avoid wasted effort and pilfered designs.</p>
<p>I&#8217;ve always found that the experimentation the most effective way to investigate new ideas, whether methodologies or technology. Frequently, these experiments &#8212; prototypes if you prefer &#8212; are also the best demonstration of innovative ideas to everyone else. </p>
<p>This conflicts with the avoidance of working for nothing. All this leads me to conclude that the correct approach depends on personality and the application.</p>
<p><span id="more-37"></span></p>
<p>My preferences are to follow my interests and keep prototyping. Why&#8230; because I&#8217;d do it in any case, just to satisfy my own curiosity. It would seem sensible to make use of this effort, but how?</p>
<p>Free access to a web application provides valuable user feedback and data on server performance. Whilst the rights to the software may be retained, running the application comes at a price. Server and network resources are necessary, but often the greatest cost is the man hours required to implement any software solution.</p>
<p>Website graphic designs requested during the bidding process is often a relatively finished product, open to misuse and varied personal tastes. This type of speculative work is best avoided. It&#8217;s too easy to burn time whilst gaining little interesting experience; graphic design at the mercy of personal tastes.</p>
<p>Software, including client-side scripting, comprises a range of different behaviours, and the best way to communicate functionality is with a working example. For me, this is where the &#8216;fun&#8217; is to be found. Few clients would express personal tastes in code and the feedback on functionality can be very enlightening.</p>
<p>This raises the critical question: What price do I put on my time? The answer is not constant, depending on what I&#8217;m doing. In my opinion, fun can compensate for a reduced income. The less enjoyable the activity, the higher the price. I always consider this when deciding how to spend my time on a project. The meaning of the term &#8216;free&#8217; is not confined to my finances.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/the-right-approach-for-me.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Programming from a different angle</title>
		<link>http://www.conceptric.co.uk/programming-from-a-different-angle.htm</link>
		<comments>http://www.conceptric.co.uk/programming-from-a-different-angle.htm#comments</comments>
		<pubDate>Fri, 15 Feb 2008 21:25:52 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[Everything]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/programming-from-a-different-angle.htm</guid>
		<description><![CDATA[I don&#8217;t feel I&#8217;ve got the programming experience I&#8217;d like for my future plans. So, I&#8217;ve got one of those personal project &#8212; the type that you never seem to get round to &#8212; in mind to provide me with a good workout.
Which programming platform to use for the server-side application? Whilst I have to [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t feel I&#8217;ve got the programming experience I&#8217;d like for my future plans. So, I&#8217;ve got one of those personal project &#8212; the type that you never seem to get round to &#8212; in mind to provide me with a good workout.</p>
<p>Which programming platform to use for the server-side application? Whilst I have to admit that I&#8217;m not the greatest fan of PHP, it&#8217;s definitely the best option. Why? Because I need to run this application locally on a minimal server and PHP is available wherever you find Apache, and the skills should have some commercial value.</p>
<p>I&#8217;ve recently read a great deal about agile development, <abbr title="Test Driven Development">TDD</abbr> and employing software design patterns. As part of this project I&#8217;d like to apply some of what I&#8217;ve learned.</p>
<h3>A test framework.</h3>
<p>Now I&#8217;m going to need a testing framework, and I&#8217;ve gone for <a href="http://simpletest.org/">SimpleTest</a>. This framework not only provides unit testing, but the ability to create tests for web pages. I prefer to run my test suites from the command line, which is relatively easy to arrange with the TextReporter object. I&#8217;ve combined the whole thing with <a href="http://ant.apache.org/">Apache Ant</a> to automate most of the tasks in the project, including deployment.</p>
<p>Unfortunately, it appears that SimpleTest doesn&#8217;t play particularly well with PHP5, although they&#8217;re in the process of making the transition. </p>
<p>I&#8217;ve encountered the mass of error messages generated as the result of <code>E_STRICT</code>. This is easily solved by using a customised php.ini file as an option at the command prompt when executing the test code. Once this is done you can see the actual test messages!</p>
<p>A more significant problem is that the Mock object code cannot be called as static class methods in the way the documentation suggests. A little snooping through the code leads me to think that it&#8217;s due to PHP4 without the <code>static</code> keyword in the method headers required by PHP5. I don&#8217;t have a work-round for this, and I don&#8217;t want to have to alter all this code. I hope they address this as the transition to PHP5 continues, but at the moment my code is simple enough for me to write my own mocks.</p>
<p>When all is said and done, if you know how to use any of the xUnit test frameworks, SimpleTest is very easy to set-up and use.</p>
<h3>Driving with tests.</h3>
<p>Simple the tests may be, but using them to steer the direction of your coding effort takes a different mindset. The hardest part is learning which questions to ask when developing your tests. Asking the right questions about functionality will result in clean, precise code.</p>
<p>There&#8217;s always a temptation add just a little more functionality, but resist it. The point is to remain in control of the code at all times. When it&#8217;s not working, it must be because you&#8217;ve added new tests describing new functionality. The code should never contain functionality that hasn&#8217;t been demanded by a test. Good refactoring can produce beautiful code without breaking the tests &#8212; still in control.</p>
<p>I think I&#8217;m getting the hang of it in relatively simple cases, but there&#8217;s much more to learn. I&#8217;ve found it a very liberating way to develop software, whilst remaining in total control &#8212; you are using version control?</p>
<h3>Patterns in the code</h3>
<p>Whilst there are loads of <abbr title="Model&#8212;View&#8212;Controller">MVC</abbr> based frameworks out there, I want to know how it works first hand. This topic is worth an article of it&#8217;s own, and that&#8217;s what I&#8217;ll give it.</p>
<p>There&#8217;s a good chance that the core application model will need to implement a facade pattern, but lets not make any assumptions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/programming-from-a-different-angle.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Corporate sterility</title>
		<link>http://www.conceptric.co.uk/corporate-sterility.htm</link>
		<comments>http://www.conceptric.co.uk/corporate-sterility.htm#comments</comments>
		<pubDate>Tue, 12 Feb 2008 15:26:15 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<category><![CDATA[culture]]></category>

		<category><![CDATA[environment]]></category>

		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/corporate-sterility.htm</guid>
		<description><![CDATA[I&#8217;ve just spent some time customising a few icons on my desktop. After a while it occurred to me that I could have been doing something productive instead. But what&#8217;s productive and what&#8217;s not?
My partner, Clare, works for a medium sized company that has grown significantly over the last few years. A couple of days [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just spent some time customising a few icons on my desktop. After a while it occurred to me that I could have been doing something productive instead. But what&#8217;s productive and what&#8217;s not?</p>
<p>My partner, Clare, works for a medium sized company that has grown significantly over the last few years. A couple of days ago, she was complaining about the way everything on her computer is now so tightly controlled you can&#8217;t even personalise the desktop background. The working environment has become utterly uniform with a one size fits none approach.</p>
<p>To my mind, an employee&#8217;s existence is not driven to enhance the business that pays their salary. Whilst most staff display a professional pride, at the heart of it their lives are about enjoying themselves. Spending much of that life at work, it&#8217;s understandable that they want a workplace that&#8217;s comfortable, inspiring and enjoyable to be around; minimal aggravation and maximum enrichment.</p>
<p>So why do most companies persist in equating success with the creation of a sterile working environment?</p>
<p>Business isn&#8217;t just about making happier, better people, it&#8217;s about making profit. It&#8217;s ability to do that is proportional to the productivity and creativity of its staff. In turn they&#8217;ve been repeatedly shown to be more cost effective if they&#8217;re happy and motivated.</p>
<p>Creating the icons was a random creative act. I realised later that this initiated a number of useful insights relating to several business focused activities. Thinking back, it isn&#8217;t the first time this has been the case, just the first time I noticed. </p>
<p>Computer systems are endemic in the business today, and they have their part to play in enriching the workplace. </p>
<p>Encouraging general creativity in employees can invigorate business innovation, essential in a rapidly changing world. Letting them express themselves, through background images of friends, family or their own graphic creations for example, will certainly help them feel less like a cog in the machine. These small concessions might lead to your most profitable product.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/corporate-sterility.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Inspirational reading</title>
		<link>http://www.conceptric.co.uk/inspirational-reading.htm</link>
		<comments>http://www.conceptric.co.uk/inspirational-reading.htm#comments</comments>
		<pubDate>Wed, 09 Jan 2008 20:34:28 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/inspirational-reading.htm</guid>
		<description><![CDATA[I love reading, and this Christmas resulted in a pile of new books &#8212; courtesy of the Amazon wish-list. I&#8217;ve been inspired to rethink my approach to development by two titles from this collection.
The first is &#8220;The Art of Agile Development&#8221; by James Shore and Shane Warden. I&#8217;ve been introduced to agile development methods in [...]]]></description>
			<content:encoded><![CDATA[<p>I love reading, and this Christmas resulted in a pile of new books &#8212; courtesy of the Amazon wish-list. I&#8217;ve been inspired to rethink my approach to development by two titles from this collection.</p>
<p>The first is &#8220;<a href="http://www.amazon.co.uk/Art-Agile-Development-Chromatic/dp/0596527675/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1199910128&#038;sr=1-1">The Art of Agile Development</a>&#8221; by <cite>James Shore</cite> and <cite>Shane Warden</cite>. I&#8217;ve been introduced to agile development methods in one of my Open University courses, but this is the first detailed description of the practices adopted by agile teams.</p>
<p>The second tome is &#8220;<a href="http://www.amazon.co.uk/Transcending-CSS-Design-Voices-Matter/dp/0321410971/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1199910014&#038;sr=8-1">Transcending CSS</a>&#8221; by <cite>Andy Clarke</cite>, which I must confess I was unsure about when I asked for it. I needn&#8217;t have worried, this is the best web design book I&#8217;ve yet read. I&#8217;ve learned a lot about the finer points of <abbr title="Cascading Style Sheets">CSS</abbr> positioning and Andy&#8217;s semantic approach to mark-up gels well with my interest in the <abbr title="eXtensible Mark-up Language">XML</abbr> in general.</p>
<p>The most exciting common factor concerns the topic of prototyping. It seems to me that approaching the whole application &#8212; from the persistence to presentation &#8212; with feature targeted development and frequent, early prototyping makes good sense. If nothing else this agile approach fills me with enthusiasm, and that may be half the battle.</p>
<p><span id="more-34"></span></p>
<p>I intend to introduce test driven development to my coding. <a href="http://www.rubyonrails.org/">Ruby on Rails</a> and <a href="http://java.sun.com/">Java</a> make good provision for this within their frameworks. <a href="http://www.php.net/"><abbr title="PHP: Hypertext Preprocessor">PHP</abbr></a> lags these two, and guess which I need to use in my next job? All is not lost though, I&#8217;ve discovered a test framework called <a href="http://simpletest.org/">SimpleTest</a>, which is modelled on <a href="http://www.junit.org/">JUnit</a>, and I&#8217;m going to give it a go.</p>
<p>I&#8217;m also investigating build, testing and deployment automation. Java provides the excellent <a href="http://ant.apache.org/">Ant</a>; a tool I&#8217;ve used to a limited extent in the past. Ant can turn it&#8217;s hand to just about any task that might need automating, but needs Java installed on the server. Unfortunately, this is something a minimal <a href="http://www.centos.org/">CentOS 5</a> server installation doesn&#8217;t possess, a little research and reconfiguration solved that problem.</p>
<p>Ruby has given rise to a deployment automation tool called <a href="http://www.capify.org/">Capistrano</a>. I haven&#8217;t any experience with Capistrano, but most report it to be very powerful and flexible. There are a number of articles on the Web detailing it&#8217;s use for deploying both Ruby and PHP applications. I&#8217;ll be giving this a go as well, but initially only with Ruby on Rails.</p>
<p>I also want to try working much closer with clients using the user story, feature driven and iterative approach. The aforementioned rapid prototyping is a key feature, required to assist communication and control the direction of development.</p>
<p>This extends to the presentation layer in the form of <abbr title="eXtensible HyperText Language">XHTML</abbr> prototypes, using semantic mark-up of the featured content with very little styling. Semantic mark-up and a systematic descriptive naming scheme should allow the design to be applied largely independently.</p>
<p>Will it all work? I hope so, but the motivation alone is appreciated.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/inspirational-reading.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Why recommend Webfusion?</title>
		<link>http://www.conceptric.co.uk/why-recommend-webfusion.htm</link>
		<comments>http://www.conceptric.co.uk/why-recommend-webfusion.htm#comments</comments>
		<pubDate>Mon, 10 Dec 2007 20:45:19 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/why-recommend-webfusion.htm</guid>
		<description><![CDATA[After reading PC Pro magazine issues 159 and 160, I was surprised to find them recommending Webfusion for those wishing to become a web host themselves. My disbelief was due to my own experiences.
I wouldn&#8217;t argue with their observations on this providers reliability, but the main problem with Webfusion, or their parent Pipex, arises when [...]]]></description>
			<content:encoded><![CDATA[<p>After reading PC Pro magazine issues 159 and 160, I was surprised to find them recommending Webfusion for those wishing to become a web host themselves. My disbelief was due to my own experiences.</p>
<p>I wouldn&#8217;t argue with their observations on this providers reliability, but the main problem with Webfusion, or their parent Pipex, arises when you need any technical support. I short, there isn&#8217;t much and that isn&#8217;t very knowledgeable; possibly unless you&#8217;re a national magazine. </p>
<p>I contacted Webfusion about a problem that arose with my <abbr title="Virtual Private Server">VPS</abbr>; six weeks later and after much email, I moved to <a href="http://www.memset.com/index.php">Memset</a> without the matter being resolved. And as for Pipex, I&#8217;m still waiting for an answer to my questions about my broadband package after nearly a month. </p>
<p>Pipex services are low cost, reliable and performance is generally good; which would be great if their accounting and technical support was less dreadful. If your needs are mission critical this makes Pipex the biggest potential problem your business might have. The risk is yours, but it&#8217;s not one I&#8217;m willing to take any more.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/why-recommend-webfusion.htm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Using Drupal</title>
		<link>http://www.conceptric.co.uk/using-drupal.htm</link>
		<comments>http://www.conceptric.co.uk/using-drupal.htm#comments</comments>
		<pubDate>Mon, 03 Dec 2007 17:02:49 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
		
		<category><![CDATA[Everything]]></category>

		<category><![CDATA[Posts]]></category>

		<guid isPermaLink="false">http://www.jameswhinfrey.co.uk/using-drupal.htm</guid>
		<description><![CDATA[I&#8217;ve been working on a website for the Northamptonshire Bird Club which nominated committee members could easily manage themselves. I decided that a Content Management System would be be best way to achieve this, and being a fan of open source I finally settled on Drupal. I liked the modular approach to the software and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a website for the <a href="http://northamptonshirebirdclub.org.uk">Northamptonshire Bird Club</a> which nominated committee members could easily manage themselves. I decided that a Content Management System would be be best way to achieve this, and being a fan of open source I finally settled on <a href="http://drupal.org/">Drupal</a>. I liked the modular approach to the software and I hope this will provide me with the scope to alter the website functionality as the Club&#8217;s needs changed.</p>
<p>The scope for customization in both the information architecture and presentation is huge in these systems, and I have to admit I was pretty shaky on where to start. I read blog posts and watched video tutorials, most of which were excellent, but I have often found that personal experimentation is the best way to find things out.</p>
<p>I started be using taxonomy to link content together. I customized the default content types to present a range of taxonomy terms from which the users could select to define the nature of the document. I&#8217;ve found that this leads to a patch association and presentation which is pretty hard for inexperienced users to follow. Basically, it&#8217;s a bit of a mess!</p>
<p>I&#8217;ve subsequently installed the <a href="http://drupal.org/handbook/modules/cck">Content Construction Kit (CCK) module</a> and I&#8217;m impressed with its flexibility. I don&#8217;t think it&#8217;ll handle some of the more complex content types that I&#8217;ve in mind, but these would be best implemented as separate modules anyway.</p>
<p>The CCK module allowed me to define customized content for each type of blog post, article, or sighting report that the Club needs. What&#8217;s more it creates an input form for each, allowing members to simply select the form they need and fill in the blanks. Much easier to control and far less confusing.</p>
<p>I&#8217;ve also discovered the <a href="http://drupal.org/project/views/">Views module</a>, and I&#8217;m hopeful that this will provide a far better way of ordering the website architecture than the old taxonomy driven solution. This module should allow me to really leverage the new content types I&#8217;ve defined and produce just about any content presentation I want. </p>
<p>I&#8217;ll post how I get on, but right now I&#8217;ve got a video tutorial on <a href="http://learn.awakenedvoice.com/2007/07/30/drupal-cck-and-views-tutorial/">Drupal CCK and Views</a> to watch.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/using-drupal.htm/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
