<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns: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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Chris Miller</title>
	
	<link>http://chris-miller.org</link>
	<description>Life, and how to live it!</description>
	<lastBuildDate>Wed, 14 Apr 2010 08:38:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/chris-miller" /><feedburner:info uri="chris-miller" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Filtered keystrokes with JavaScript</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/5yxewPdPUTs/</link>
		<comments>http://chris-miller.org/archives/2010/04/14/filtered-keystrokes-with-javascript/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 08:36:45 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[keystroke]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=511</guid>
		<description><![CDATA[This small set of scripts should give you a starting point for filtering the valid input to certain form fields to ensure that you shouldn&#8217;t end up with input that you don&#8217;t want*.
Basically you&#8217;d have the following javascript functions defined:

function isNumber( evt ) {
	valid		= true;
	if( evt.which &#124;&#124; ( evt.which != 0 &#038;&#038; evt.charCode != 0 [...]]]></description>
			<content:encoded><![CDATA[<p>This small set of scripts should give you a starting point for filtering the valid input to certain form fields to ensure that you shouldn&#8217;t end up with input that you don&#8217;t want*.</p>
<p>Basically you&#8217;d have the following javascript functions defined:</p>
<pre class="javascript" name="code" id="filtered-keystrokes-with-javascript_functions">
function isNumber( evt ) {
	valid		= true;
	if( evt.which || ( evt.which != 0 &#038;&#038; evt.charCode != 0 ) ) {
		var charCode	= ( evt.which ) ? evt.which : event.keyCode;
		if( charCode > 31 &#038;&#038; ( charCode < 48 || charCode > 57 ) ) {
			valid	= false;
		}
	}
	return valid;
}

function isValidEmailCharacter( evt ) {
	valid	= true;
	if( evt.which == null || ( evt.which != 0 &#038;&#038; evt.charCode != 0 ) ) {
		var charCode	= ( evt.which ) ? evt.which : event.keyCode;
		var char		= String.fromCharCode( charCode );
		var re			= new RegExp( /([0-9A-Za-z-_@.])/ );
		valid			= re.test( char );
	}
	return valid;
}

function isValidPhoneCharacter( evt ) {
	valid	= true;
	if( evt.which == null || ( evt.which != 0 &#038;&#038; evt.charCode != 0 ) ) {
		var charCode	= ( evt.which ) ? evt.which : event.keyCode;
		var char		= String.fromCharCode( charCode );
		var re			= new RegExp( /([0-9+\s\[\]])/ );
		valid			= re.test( char );
	}
	return valid;
}
</pre>
<p><span id="more-511"></span>Then we add an <code>onkeypress</code> event to the relevant form fields to filter out any of the keystrokes you don&#8217;t want.  This would look something like:</p>
<pre class="xhtml" name="code" id="filtered-keystrokes-with-javascript_html">
<input
	type="text" name="num"
	onkeypress="return isNumber( event );"
/>
<input
	type="text" name="year" maxlength="4"
	onkeypress="return isNumber( event );"
/>
<input
	type="text" name="email"
	onkeypress="return isValidEmailCharacter( event );"
/>
<input type="text" name="phone" onkeypress="return isValidPhoneCharacter( event );" />
</pre>
<p>The only problem with this method of filtering input to the form elements is that key combos using filtered characters will not work, i.e. <abbr title="Cmd + A">&#8984;+A</abbr> to select the entire entry in a text field will not work when we&#8217;re applying the isNumber filter to that field.  The solution would be to create a list of key combonations that are allowed.</p>
<p>Not a necessity, but it can&#8217;t hurt.<br />
- Chris</p>
<p>* That&#8217;s not to say you shouldn&#8217;t validate the form when it&#8217;s submitted, the non-JavaScript action will be to allow anything.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=5yxewPdPUTs:uqDwvhIsCag:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=5yxewPdPUTs:uqDwvhIsCag:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=5yxewPdPUTs:uqDwvhIsCag:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=5yxewPdPUTs:uqDwvhIsCag:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=5yxewPdPUTs:uqDwvhIsCag:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=5yxewPdPUTs:uqDwvhIsCag:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=5yxewPdPUTs:uqDwvhIsCag:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=5yxewPdPUTs:uqDwvhIsCag:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=5yxewPdPUTs:uqDwvhIsCag:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=5yxewPdPUTs:uqDwvhIsCag:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/5yxewPdPUTs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2010/04/14/filtered-keystrokes-with-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2010/04/14/filtered-keystrokes-with-javascript/</feedburner:origLink></item>
		<item>
		<title>Getting and Setting anchors with JavaScript</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/-F8KcrzSb5Y/</link>
		<comments>http://chris-miller.org/archives/2010/04/09/getting-and-setting-anchors-with-javascript/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 10:10:49 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[anchor]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=504</guid>
		<description><![CDATA[Something I&#8217;ve been playing with recently that&#8217;s not very well documented is using JavaScript to retrieve and to update the current page anchor from a URL.
It&#8217;s very simple to do.  In order to retrieve the page anchor (i.e. get test from http://chris-miller.org/88#test:

var anchor = self.document.location.hash.substring( 1 );

Setting the anchor to update, for example to [...]]]></description>
			<content:encoded><![CDATA[<p>Something I&#8217;ve been playing with recently that&#8217;s not very well documented is using JavaScript to retrieve and to update the current page anchor from a URL.</p>
<p>It&#8217;s very simple to do.  In order to retrieve the page anchor (i.e. get <code>test</code> from http://chris-miller.org/88#test:</p>
<pre class="javascript" name="code" id="getting-and-setting-anchors-with-javascript_get_snippit">
var anchor = self.document.location.hash.substring( 1 );
</pre>
<p>Setting the anchor to update, for example to http://chris-miller.org/88#newAnchor it can be achived using:</p>
<pre class="javascript" name="code" id="getting-and-setting-anchors-with-javascript_set_snippit">
self.document.location.hash = "newAnchor";
</pre>
<p>Very useful for creating permalinks to AJAX loaded content or JS popups.<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=-F8KcrzSb5Y:tyLNVnah-IQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=-F8KcrzSb5Y:tyLNVnah-IQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=-F8KcrzSb5Y:tyLNVnah-IQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=-F8KcrzSb5Y:tyLNVnah-IQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=-F8KcrzSb5Y:tyLNVnah-IQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=-F8KcrzSb5Y:tyLNVnah-IQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=-F8KcrzSb5Y:tyLNVnah-IQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=-F8KcrzSb5Y:tyLNVnah-IQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=-F8KcrzSb5Y:tyLNVnah-IQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=-F8KcrzSb5Y:tyLNVnah-IQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/-F8KcrzSb5Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2010/04/09/getting-and-setting-anchors-with-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2010/04/09/getting-and-setting-anchors-with-javascript/</feedburner:origLink></item>
		<item>
		<title>Fade between two divs using mootools</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/wCsnkiSEDXw/</link>
		<comments>http://chris-miller.org/archives/2010/04/08/fade-between-two-divs-using-mootools/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 14:17:05 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[fade]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=488</guid>
		<description><![CDATA[I&#8217;ve been playing with mootools for a while, they&#8217;re very nice, making easy work of some nice visual tweens and effects.
One thing I was struggling a bit to do was fade between two divs, having the first one fade out then the second fade in.  Rather than grabbing a plugin to do it I [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://chris-miller.org/wp-content/uploads/2010/04/mootools.png" alt="MooTools" width="184" height="46" class="alignright size-full wp-image-491" />I&#8217;ve been playing with mootools for a while, they&#8217;re very nice, making easy work of some nice visual tweens and effects.</p>
<p>One thing I was struggling a bit to do was fade between two divs, having the first one fade out then the second fade in.  Rather than grabbing a plugin to do it I wanted a small bit of JavaScript I could embed in a page, I couldn&#8217;t find one <em>anywhere</em>.</p>
<p>It&#8217;s pretty simple to do, the code below should give you a starting point to set up some JS to fade between 2 or more divs.</p>
<pre class="javascript" name="code" id="fade-between-two-divs-using-mootools_snippit">
function fadeBetweenDivs( div1, div2 ) {
	$$( div1 ).fade( "out" );
	(function(){
		$$( div1 ).setStyles({
			display:	'none',
			opacity:	0
		});
	}).delay( 150 );
	(function(){
		$( div2 ).setStyles({
			display:	'block',
			opacity:	0
		});
	}).delay( 150 );
	$$( div2 ).fade( "in" );
}
</pre>
<p>That is all,<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=wCsnkiSEDXw:kQ0H4kGD588:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=wCsnkiSEDXw:kQ0H4kGD588:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=wCsnkiSEDXw:kQ0H4kGD588:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=wCsnkiSEDXw:kQ0H4kGD588:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=wCsnkiSEDXw:kQ0H4kGD588:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=wCsnkiSEDXw:kQ0H4kGD588:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=wCsnkiSEDXw:kQ0H4kGD588:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=wCsnkiSEDXw:kQ0H4kGD588:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=wCsnkiSEDXw:kQ0H4kGD588:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=wCsnkiSEDXw:kQ0H4kGD588:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/wCsnkiSEDXw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2010/04/08/fade-between-two-divs-using-mootools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2010/04/08/fade-between-two-divs-using-mootools/</feedburner:origLink></item>
		<item>
		<title>Sequel Pro: Manage MySQL Databases under Mac OS X</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/rXDB2NYmbKk/</link>
		<comments>http://chris-miller.org/archives/2010/04/08/sequel-pro-manage-mysql-databases-under-mac-os-x/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 12:27:41 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Essential Apps]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[DBMS]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHPMyAdmin]]></category>
		<category><![CDATA[Sequel Pro]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=378</guid>
		<description><![CDATA[I do a lot of web development; it&#8217;s my full time job, my hobby and a means to potentially earn some money on the side.  I need a set of good tools in order to make aspects of the work easier or I&#8217;d spend my entire life at odds with what I do.  [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://chris-miller.org/wp-content/uploads/2010/02/Sequel-Pro-Icon.png" alt="Sequel Pro Icon" title="Sequel Pro Icon" width="105" height="128" class="alignright size-full wp-image-380" /><br />
I do a lot of web development; it&#8217;s my full time job, my hobby and a means to potentially earn some money on the side.  I need a set of good tools in order to make aspects of the work easier or I&#8217;d spend my entire life at odds with what I do.  A good Database Management System (DBMS) tool is one such tool since database management and manipulation plays such a large part of developing any content managed website, especially for quick modifications, testing and deployment.</p>
<p>MySQL is my DB of choice, due to working mainly on <abbr title="Linux, Apache, MySQL and PHP">LAMP</abbr> architecture systems.  The best tool by far I&#8217;ve found for managing MySQL databases under Mac OS X is <a target="_blank" href="http://www.sequelpro.com/" title="View the Sequel Pro website">Sequel Pro</a> (previously CocoaMySQL).</p>
<p><span id="more-378"></span><br />
<div id="sequel-pro-manage-mysql-databases-under-mac-os-x_image1" class="wp-caption aligncenter" style="width: 560px"><img src="http://chris-miller.org/wp-content/uploads/2009/12/Sequel-Pro-Scaled.png" alt="Sequel Pro interface showing the table editor view" title="Sequel-Pro-Scaled" width="550" height="401" class="size-full wp-image-387" /><p class="wp-caption-text">Sequel Pro interface showing the table editor view</p></div><br />
Sequel Pro is a very streamlined and powerful program for database management, it provides the facility to add, modify and remove entire databases; supports various import and export formats for singular tables, entire databases or selected query results; allowing modification of table properties as well as inline SQL querying.</p>
<p>Before finding Sequel Pro I was a full-time user of PHPMyAdmin, a system which I continue to use in some instances.  Sequel Pro essentially provides a desktop solution that is very similar to PHPMyAdmin, anyone who has experience using PHPMyAdmin should have no problems to adjusting to using Sequel Pro in its stead.</p>
<p><div id="sequel-pro-manage-mysql-databases-under-mac-os-x_image2" class="wp-caption aligncenter" style="width: 560px"><img src="http://chris-miller.org/wp-content/uploads/2009/12/Annotated-Sequel-Pro.png" alt="Caption" title="Annotated Sequel Pro" width="550" height="401" class="size-full wp-image-379" /><p class="wp-caption-text">Annotated Sequel Pro</p></div><br />
<a href="#sequel-pro-manage-mysql-databases-under-mac-os-x_image2" title="Sequel Pro Annotated View" onmouseover="document.getElementById('sequel-pro-manage-mysql-databases-under-mac-os-x_image2').style.borderColor = '#2266aa'; document.getElementById('sequel-pro-manage-mysql-databases-under-mac-os-x_image2').style.borderWidth = '2px'; document.getElementById('sequel-pro-manage-mysql-databases-under-mac-os-x_image2').style.paddingTop = '3px'; document.getElementById('sequel-pro-manage-mysql-databases-under-mac-os-x_image2').style.paddingBottom = '0px';" onmouseout="document.getElementById('sequel-pro-manage-mysql-databases-under-mac-os-x_image2').style.borderColor = '#d6d6d6'; document.getElementById('sequel-pro-manage-mysql-databases-under-mac-os-x_image2').style.borderWidth = '1px'; document.getElementById('sequel-pro-manage-mysql-databases-under-mac-os-x_image2').style.paddingTop = '4px'; document.getElementById('sequel-pro-manage-mysql-databases-under-mac-os-x_image2').style.paddingBottom = '1px';">The image above</a> is an annotated view of the Sequel Pro interface, the main portions of the interface that I use day-to-day are highlighted and numbered, each of the numbered areas correspond to:</p>
<ol>
<li>
<h4>Database Selector</h4>
<p>		A basic drop-down list where you can select a database to work with or add a new database.
	</li>
<li>
<h4>Table Selector</h4>
<p>		The list of tables in the currently selected database.  If the number of tables is large enough a filter field appears at the top of this list allowing you to filter the tables based upon their names.  Below the list of tables is a small section with meta-data on the currently selected table, under this is the controls for the database tables.  From here we can add, remove, duplicate and truncate tables with ease (with conformation on the obviously destructive actions).
	</li>
<li>
<h4>Field Viewer/Editor</h4>
<p>		This portion of the interface is controlled by whichever view is selected from the icons appearing in the application toolbar.
	</li>
<li>
<h4>Keys Viewer/Editor</h4>
<p>		This area allows you to manage keys and indexes of the table you&#8217;re viewing.  The +/- toggle at the bottom left allows you to add and remove keys/indexes.
	</li>
<li>
<h4>Structure View (shown)</h4>
<p>		Changes the view to the structure view as shown and detailed above.
	</li>
<li>
<h4>Table Contents View</h4>
<p>		Switches to the table contents view.
	</li>
<li>
<h4>SQL Query Editor</h4>
<p>		Switches to the SQL query editor view.
	</li>
</ol>
<p>Another of the real selling points for Sequel Pro for me is the ability to easily import and export data.  From the <code>File > Export</code> menu you can export data in various formats, <code>CSV</code> and <code>XML</code> being the most useful.<br />
<img src="http://chris-miller.org/wp-content/uploads/2009/12/sequel_pro_export.png" alt="sequel_pro_export" title="sequel_pro_export" width="107" height="28" class="alignright size-full wp-image-382" /></p>
<p><abbr title="Cmd + Shift + I">&#8984;+&#8679;+I</abbr> invokes the import dialog which allows you to select an SQL dump or CSV of values to import into the selected database.  The SQL import will obviously just run the query and update the various tables as required, the CSV import on the other hand allows you to select the table and marry rows in the CSV file to those in the table you wish to import to.</p>
<h3 style="vertical-align: center; line-height: 38px; background-image: url( 'http://chris-miller.org/wp-content/uploads/2009/12/table_structure.png' ); background-repeat: no-repeat; padding-left: 35px;">
	Table Structure<br />
</h3>
<p>As detailed above the table structure view allows you to define the structure of the tables in the database and to set up the indexing and keys for the fields.</p>
<p>A nice touch available here is the ability to reorder pre-existing fields by dragging and dropping them in the relevant places and the ability to duplicate fields rather than have to re-enter details for virtually identical fields.</p>
<h3 style="vertical-align: center; line-height: 38px; background-image: url( 'http://chris-miller.org/wp-content/uploads/2009/12/table_contents.png' ); background-repeat: no-repeat; padding-left: 35px;">
	Table Contents<br />
</h3>
<p>From there you can add, modify, duplicate and delete rows in the table, all of which you&#8217;d really expect from the table contents view.</p>
<p>Again, like the table structure view, you can duplicate entries to save re-entering similar data.  Inserting <code>NULL</code> values is as simple as hitting <abbr title="Ctrl + Shift + N">^+&#8679;+N</abbr>.  Copying rows as INSERT statements is a big plus (<abbr title="Ctrl + Optn + Cmd + C">^+&#8997;+&#8984;+C</abbr>) and useful when copying singular entries between a development and live database, rather than dumping the data from a custom query.</p>
<h3 style="vertical-align: center; line-height: 38px; background-image: url( 'http://chris-miller.org/wp-content/uploads/2009/12/sql_query.png' ); background-repeat: no-repeat; padding-left: 35px;">
	SQL Query<br />
</h3>
<p>This view allows you to enter queries and run them against the database.  The editor itself has autocompletion and some niceties like smart quoting of field names.</p>
<p>The power here comes from the ability to store previously used queries and access recent queries via a query history.  Any of the generated result sets can be exported in the previously mentioned formats for easy data filtering and export.</p>
<h3>
	In summary<br />
</h3>
<p>It&#8217;s a bloody useful tool and a <em>must</em> for anyone working with MySQL databases under Mac OS X.  It&#8217;s not a silver-bullet solution of course; it doesn&#8217;t do much more than PHPMyAdmin and the things it does can be replicated in PHPMyAdmin with relative ease; but then it can&#8217;t be a bad thing to have lying about, especially since it&#8217;s free!</p>
<ul>
<li>You can <a href="http://www.sequelpro.com/" title="Download Sequel Pro">download a copy of Sequel Pro from their website</a>.</li>
<li>Developed by <a href="http://www.mjmedia.com.au/" title="mjmedia">mjmedia</a>.</li>
</ul>
<p>Go have a play with Sequel Pro <em>now</em>,<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=rXDB2NYmbKk:RduPZu_R9c4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=rXDB2NYmbKk:RduPZu_R9c4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=rXDB2NYmbKk:RduPZu_R9c4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=rXDB2NYmbKk:RduPZu_R9c4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=rXDB2NYmbKk:RduPZu_R9c4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=rXDB2NYmbKk:RduPZu_R9c4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=rXDB2NYmbKk:RduPZu_R9c4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=rXDB2NYmbKk:RduPZu_R9c4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=rXDB2NYmbKk:RduPZu_R9c4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=rXDB2NYmbKk:RduPZu_R9c4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/rXDB2NYmbKk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2010/04/08/sequel-pro-manage-mysql-databases-under-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2010/04/08/sequel-pro-manage-mysql-databases-under-mac-os-x/</feedburner:origLink></item>
		<item>
		<title>Connectivity in Social Media</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/-eH331x0T2U/</link>
		<comments>http://chris-miller.org/archives/2009/12/17/connectivity-in-social-media/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 01:31:15 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[delicious]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[last.fm]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=391</guid>
		<description><![CDATA[I&#8217;ve been playing around with various social media sites lately, trying to integrate them so my wealth of assorted knowledge gets to as many of the various places as possible.  My Twitter feed now updates my Facebook and Linkedin statuses; Last.fm scrobbled tracks appear here in the sidebar and on Facebook; Flickr photos appear [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing around with various social media sites lately, trying to integrate them so my wealth of assorted knowledge gets to as many of the various places as possible.  My Twitter feed now updates my Facebook and Linkedin statuses; Last.fm scrobbled tracks appear here in the sidebar and on Facebook; Flickr photos appear here as well as on Facebook.</p>
<p>This got me to thinking about the types of people I connect to on each of these social media networking sites.  In my eyes this blog serves a different purpose and has a separate target audience to my Linkedin or Facebook profiles.</p>
<p>In light of this I&#8217;m giving a rundown of the groups and categories of people I connect to via each of these sites and their envisioned usage in my eyes.</p>
<p><span id="more-391"></span><br />
<h3>
<a target="_blank" href="/" title="Blog">Blog</a><br />
</h3>
<p><img src="http://chris-miller.org/wp-content/uploads/2009/12/blog-128x128.png" alt="Blog" title="Blog" width="128" height="128" class="alignright size-full wp-image-406" />The hub of this particular Chris Miller on the web.  It&#8217;s where you&#8217;ll be able to find out about who I am and what I&#8217;m up to.  From here you can branch out onto each of the social media sites I&#8217;m to be found on where more information in each of their specific focuses can be found.</p>
<p>Although technically not a <em>social</em> site it does mark the start of a web of profiles on various other sites as well as providing a blogroll (which is terminally out of date) of other people and sites I follow on the web.</p>
<ul>
<li>My blog is for: me to post random nonsense and technical articles to.</li>
<li>My blog connects me to: other sites I syndicate.</li>
</ul>
<h3>
<a target="_blank" href="http://delicious.com/chrismiller" title="Delicious">Delicious</a><br />
</h3>
<p><img src="http://chris-miller.org/wp-content/uploads/2009/12/delicious-128x128.png" alt="Delicious" title="Delicious" width="128" height="128" class="alignright size-full wp-image-406" />I&#8217;m terrible at using Delicious for bookmarking as well as bookmarking things locally.  I tend to read an article that&#8217;s relevant to the thoughts running around my head at a particular moment then move on, forever forgetting said article (much trolling of web history ensues at a later date).</p>
<p>Although this site allows connections to other people I&#8217;ve shunned away from doing so.  Feeds from the likes of Reddit and the BBC combined with Twitter tends to keep me up to date with any relevant articles flying around.</p>
<ul>
<li>Delicious is for: posting links to interesting/relevant/funny articles and categorising/tagging them.</li>
<li>Delicious connects me to: nobody at the moment.</li>
</ul>
<h3>
<a target="_blank" href="http://www.facebook.com/christopheralexandermiller" title="Facebook">Facebook</a><br />
</h3>
<p><img src="http://chris-miller.org/wp-content/uploads/2009/12/facebook-128x128.png" alt="Facebook" title="Facebook" width="128" height="128" class="alignright size-full wp-image-406" />Facebook is the only site in this list that I&#8217;d truly describe as a <em>social media site</em>.  By this I mean that it serves no other purpose than to be a platform to connect and keep-in-touch with people I know socially.  All the other sites in this list are quite focused in their purpose.</p>
<p>In light of this, Facebook is where most of the connecting comes into play for me.  I have friends on Facebook from various facets of my life: school, university, work and other social situations.  The one thing that sets Facebook apart from most of these other sites is that anyone I am friends with I have actually met, interacted with and have subsequently added as a friend.</p>
<p>The site itself is easy to use, little or no expertise is required to set up an account and start connecting with friends.  There are various &#8216;applications&#8217; to be added, groups to be joined, photos to be looked at&#8230; essentially it&#8217;s a procrastinators wet dream.  This of course means it has no real focus or goal for me other than being stayintouchwithpeople.com.</p>
<ul>
<li>Facebook is for: everyone! Staying in contact with people I know socially.</li>
<li>Facebook connects me to: pretty much everyone I know personally.</li>
</ul>
<h3>
<a target="_blank" href="http://flickr.com/photos/chrismiller" title="Flickr">Flickr</a><br />
</h3>
<p><img src="http://chris-miller.org/wp-content/uploads/2009/12/flickr-128x128.png" alt="Flickr" title="Flickr" width="128" height="128" class="alignright size-full wp-image-406" />Flickr, certainly for me, started out as a tool for online photo storage and organisation.  I jumped on Flickr not long after it started up, before those pesky Yahoo! logins, and a tool was certainly what I was using it solely for.</p>
<p>Over time as the site developed and the whole social media <em>thing</em> took off Flickr added some nice functionality for discovering other people and building a photography community.</p>
<p>Connections I have via Flickr tend to be people I know with a smattering of people who have some interesting photos up.  For the most part I find Flickr a useful tool for distributing photos onto other social media sites and it serves as an online repository of all my photos.  That said however, it does make it very easy to keep up-to-date with photos of peers and colleagues who have a ton more photography skill than I (particularly <a target="_blank" href="http://www.flickr.com/photos/chrishannah/">Chris Hannah</a>, <a target="_blank" href="http://www.flickr.com/photos/filtre/">Jim Moore</a>, <a target="_blank" href="http://www.flickr.com/photos/sdstrowes/">Steve Strowes</a> and <a target="_blank" href="http://www.flickr.com/photos/deanwright/">Dean Wright</a> being of note).</p>
<ul>
<li>Flickr is for: hosting, organising and sharing my photos online.</li>
<li>Flickr connects me to: people I know and other Flickr users with interesting posts.</li>
</ul>
<h3>
<a target="_blank" href="http://www.last.fm/user/chrismiller" title="Last.fm">Last.fm</a><br />
</h3>
<p><img src="http://chris-miller.org/wp-content/uploads/2009/12/lastfm-128x128.png" alt="Last.fm" title="Last.fm" width="128" height="128" class="alignright size-full wp-image-406" />I think I initially signed up to Last.fm just to see what it was, what it offered and to see if it&#8217;d be useful.  Since then I&#8217;ve been off and on using the service to capture the tracks I&#8217;ve been listening to with iTunes.  That is until recently with the switch for most of my music listening to Spotify which offers integrated Last.fm scrobbling.</p>
<p>The stats over time from tracks you&#8217;ve listened to are interesting and the music recommendations can be good especially if, like me, you generally don&#8217;t listen to music that&#8217;s very recent.  I tend to view this more like I did Flickr initially, as a tool to draw information into other social media sites.  That being said, I do have friends added on the site.  The friends I have added tend to be actual friends I know and have somewhat similar music tastes to.</p>
<ul>
<li>Last.fm is for: collecting information about my music listening trends and sharing them on other sites.</li>
<li>Last.fm connects me to: friends I know with similar music tastes.</li>
</ul>
<h3>
<a target="_blank" href="http://uk.linkedin.com/in/camiller" title="Linkedin">Linkedin</a><br />
</h3>
<p><img src="http://chris-miller.org/wp-content/uploads/2009/12/linkedin-128x128.png" alt="Linkedin" title="Linkedin" width="128" height="128" class="alignright size-full wp-image-406" />By far the most professionally oriented of any of the sites listed here and again on my part initially used as a tool rather than a networking site.  Linkedin for me initially was a convenient way of creating an online, plain and simple CV which could be easily updated and seed any full written CVs I&#8217;d need to write.</p>
<p>The focus of this site has shifted quite dramatically for me over time, I view this site as more of a networking site than I did previously.  Now it provides a forum for me to stay contacted with people I&#8217;ve worked and studied with, without as many social faux pas such like drunken photographs or questionable music tastes.  Ok they&#8217;re not hard to find, but the site does provide a professional front for me.</p>
<p>As I&#8217;ve said above, the people I connect with on Linkedin are those I&#8217;ve previously worked and studied with, aside from a few recruitment agencies who try and cram job offers down your throat (can&#8217;t hurt can it?).</p>
<ul>
<li>Linkedin is for: providing a professional front.</li>
<li>Linkedin connects me to: those people who have had the privilege of working or studying with me.</li>
</ul>
<h3>
<a target="_blank" href="http://twitter.com/chrismiller" title="Twitter">Twitter</a><br />
</h3>
<p><img src="http://chris-miller.org/wp-content/uploads/2009/12/twitter-128x128.png" alt="Twitter" title="Twitter" width="128" height="128" class="alignright size-full wp-image-406" />Twitter in my eyes is by far the most loosely defined group of people I follow.  I view Twitter as a pick-it-up put-it-down source of random pieces of information, friend status updates and broadcasts from various companies.</p>
<p>My follow list generally reflects this.  I follow people I know as a means of staying up-to-date with them; companies whose services I use as well as updates on various pieces of software I utilise on a daily basis; and pretty much anyone who posts something interesting or funny.  So the list of Twitter updates I see in my client varies between lunch orders, company/software bulletins, 160 character quips and interesting links.</p>
<p>Twitter is by far the social media service that I read and post to most often, though I tend to skim over a lot of tweets to find those that are relevant or interesting to me.</p>
<ul>
<li>Twitter is for: quickly posting interesting links, thoughts, lazy discussions, product updates&#8230; disseminating information.</li>
<li>Twitter connects me to: absolutely anyone, friends are a given but other than that, anything that interests me.</li>
</ul>
<p>So that&#8217;s my rundown of the social media sites you&#8217;ll see me on and my usage of and connectivity on them.  I&#8217;d assume most people use each of these sites in a similar manner (barring Twitter which has various marketing and advertising uses that I&#8217;m not really clued up on).  Any other uses or different perspectives are welcomed.<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=-eH331x0T2U:cLKpTbqERQc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=-eH331x0T2U:cLKpTbqERQc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=-eH331x0T2U:cLKpTbqERQc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=-eH331x0T2U:cLKpTbqERQc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=-eH331x0T2U:cLKpTbqERQc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=-eH331x0T2U:cLKpTbqERQc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=-eH331x0T2U:cLKpTbqERQc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=-eH331x0T2U:cLKpTbqERQc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=-eH331x0T2U:cLKpTbqERQc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=-eH331x0T2U:cLKpTbqERQc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/-eH331x0T2U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2009/12/17/connectivity-in-social-media/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2009/12/17/connectivity-in-social-media/</feedburner:origLink></item>
		<item>
		<title>Batch renaming files in Mac OS X</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/A0mNJp_0SU8/</link>
		<comments>http://chris-miller.org/archives/2009/12/08/batch-renaming-files-in-mac-os-x/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 20:02:12 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Essential Apps]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Finder]]></category>
		<category><![CDATA[NameChanger]]></category>
		<category><![CDATA[rename]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[spotlight]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=349</guid>
		<description><![CDATA[The Finder is brilliant.  It does exactly what it says on the tin.  You can zoom around your filesystem and find things with relative ease; copy, cut, paste and move files.  It does it all, but it lacks any batch renaming to help any of us who have the laborious task of [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://chris-miller.org/wp-content/uploads/2009/12/NameChangerIcon-150x150.png" alt="NameChanger" title="NameChanger" width="150" height="150" class="alignright size-thumbnail wp-image-350" />The Finder is brilliant.  It does exactly what it says on the tin.  You can zoom around your filesystem and find things with relative ease; copy, cut, paste and move files.  It does it all, but it lacks any batch renaming to help any of us who have the laborious task of renaming dozens, or worse, hundreds of files.</p>
<p>That&#8217;s where <a href="http://www.mrrsoftware.com/MRRSoftware/NameChanger.html" title="NameChanger">NameChanger</a> comes in.  NameChanger is a piece of free software from <a href="http://www.mrrsoftware.com/MRRSoftware/Home.html">MRR Software</a>.  Basically it allows you to rename large batches of files with some simple pattern matching.</p>
<p><span id="more-349"></span><div id="batch-renaming-files-in-mac-os-x_image1" class="wp-caption aligncenter" style="width: 560px"><img src="http://chris-miller.org/wp-content/uploads/2009/12/NameChanger.png" alt="Changing the names of some videos" title="NameChanger in use" width="550 height="327" class="size-full wp-image-352" /><p class="wp-caption-text">Changing the names of some videos</p></div></p>
<p>It&#8217;s all pretty simple really:</p>
<ol>
<li>drag the target files into the application window</li>
<li>select the type of name matching you require from: replace first, replace last, replace all, replace wildcard, append, prepend, sequencing and date-stamping</li>
<li>enter your criteria, <a href="#batch-renaming-files-in-mac-os-x_image1" title="My shopping" onmouseover="document.getElementById('batch-renaming-files-in-mac-os-x_image1').style.borderColor = '#2266aa';" onmouseout="document.getElementById('batch-renaming-files-in-mac-os-x_image1').style.borderColor = '#d6d6d6';">above I&#8217;ve replaced the first occurrence of &#8216;.&#8217; with &#8216;&nbsp;-&nbsp;&#8217;</a></li>
<li>hit the &#8216;Rename&#8217; button and you&#8217;re done</li>
</ol>
<h3>Grab a copy</h3>
<p>Here&#8217;s the blurb</p>
<blockquote><p>
NameChanger<br />
Rename a list of files quickly and easily.<br />
See how the names will change as you type.
</p></blockquote>
<ul>
<li><a href="http://www.mrrsoftware.com/">the developer&#8217;s site</a></li>
<li><a href="http://www.mrrsoftware.com/MRRSoftware/NameChanger.html">NameChanger download page</a></li>
</ul>
<p>Good bit of software.  Simple, free, intuitive; all in all, a keeper.<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=A0mNJp_0SU8:kxMZGNfunsw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=A0mNJp_0SU8:kxMZGNfunsw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=A0mNJp_0SU8:kxMZGNfunsw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=A0mNJp_0SU8:kxMZGNfunsw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=A0mNJp_0SU8:kxMZGNfunsw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=A0mNJp_0SU8:kxMZGNfunsw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=A0mNJp_0SU8:kxMZGNfunsw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=A0mNJp_0SU8:kxMZGNfunsw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=A0mNJp_0SU8:kxMZGNfunsw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=A0mNJp_0SU8:kxMZGNfunsw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/A0mNJp_0SU8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2009/12/08/batch-renaming-files-in-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2009/12/08/batch-renaming-files-in-mac-os-x/</feedburner:origLink></item>
		<item>
		<title>Shopping++</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/rE3mcya2T9U/</link>
		<comments>http://chris-miller.org/archives/2009/10/02/shopping/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 13:08:33 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[delivery]]></category>
		<category><![CDATA[fajitas]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[sainsbury's]]></category>
		<category><![CDATA[Tesco]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=305</guid>
		<description><![CDATA[I&#8217;ve not posted in ages. Sorry.
Just a quick post to say that I&#8217;m very impressed with the Sainsbury&#8217;s delivery service and web store, much more than the Tesco equivalent.
I got over £100 worth of groceries delivered within the one hour slot I picked, not the 2-3 hour slots that Tesco use, and everything was there, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve not posted in ages. Sorry.</p>
<p><div id="shopping_image1" class="wp-caption alignright" style="width: 250px"><a href="http://chris-miller.org/photos/photo/3973729793/shopping.html" title="Shopping++"><img alt="Image 1: Shopping++" src="http://farm4.static.flickr.com/3441/3973729793_c7c81782b6_m.jpg" title="Shopping++" width="240" height="180" /></a><p class="wp-caption-text">Shopping++</p></div>Just a quick post to say that I&#8217;m very impressed with the <a href="http://sainsburys.co.uk">Sainsbury&#8217;s</a> delivery service and web store, much more than the Tesco equivalent.</p>
<p>I got over £100 worth of groceries delivered within the one hour slot I picked, not the 2-3 hour slots that Tesco use, and everything was there, good quality and undamaged.</p>
<p>Not only that but having purchased over <a href="#shopping_image1" title="My shopping" onmouseover="document.getElementById('shopping_image1').style.borderColor = '#2266aa';" onmouseout="document.getElementById('shopping_image1').style.borderColor = '#d6d6d6';">£100 worth of shopping</a> the delivery cost is waived.  So I managed to get a month worth of food and drink without the hassle of going shopping and somehow carting everything back.</p>
<p><span id="more-305"></span><div id="shopping_image2" class="wp-caption alignleft" style="width: 250px"><a href="http://chris-miller.org/photos/photo/3973730311/spicy-fajitas.html" title="Spicy Fajitas"><img alt="Image 2: Spicy Fajitas" src="http://farm3.static.flickr.com/2609/3973730311_f4cb555418_m.jpg" title="Spicy Fajitas" width="240" height="180" /></a><p class="wp-caption-text">Spicy Fajitas</p></div>Everything comes in an orange Sainsbury&#8217;s bag, except anything that&#8217;s been substituted (with the closest match due to lack of stock) which came in blue bags.  The delivery person offered to take any of the substitutions back and my account would be credited with the relevant cost if he did.</p>
<p>My cupboards, fridge and freezer and completely and utterly stocked to the brim, there&#8217;s no room for <em>anything</em> else, at all! Now I&#8217;ve just got to <a href="#shopping_image2" title="FOOD!" onmouseover="document.getElementById('shopping_image2').style.borderColor = '#2266aa';" onmouseout="document.getElementById('shopping_image2').style.borderColor = '#d6d6d6';">eat it all</a>.</p>
<p>All in all, an easy and hassle free transaction.  Qudos to Sainsbury&#8217;s, A+++++ GOOD SELLER, WOULD SHOP AGAIN.<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=rE3mcya2T9U:0_nVlzppv_8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=rE3mcya2T9U:0_nVlzppv_8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=rE3mcya2T9U:0_nVlzppv_8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=rE3mcya2T9U:0_nVlzppv_8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=rE3mcya2T9U:0_nVlzppv_8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=rE3mcya2T9U:0_nVlzppv_8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=rE3mcya2T9U:0_nVlzppv_8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=rE3mcya2T9U:0_nVlzppv_8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=rE3mcya2T9U:0_nVlzppv_8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=rE3mcya2T9U:0_nVlzppv_8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/rE3mcya2T9U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2009/10/02/shopping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2009/10/02/shopping/</feedburner:origLink></item>
		<item>
		<title>JavaScript custom controls</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/XdQrFXyU9Aw/</link>
		<comments>http://chris-miller.org/archives/2009/02/15/javascript-custom-controls/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 20:19:57 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[HCI]]></category>
		<category><![CDATA[custom controls]]></category>
		<category><![CDATA[interaction]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=185</guid>
		<description><![CDATA[I spend a lot of time writing bespoke content management systems, a lot!  I&#8217;m always trying to add some small, lightweight additions to make the user experience a little bit better.  One means of doing this is by providing some better custom controls which give good user feedback and emulate similar offline controls.
One [...]]]></description>
			<content:encoded><![CDATA[<p>I spend a lot of time writing bespoke content management systems, a lot!  I&#8217;m always trying to add some small, lightweight additions to make the user experience a little bit better.  One means of doing this is by providing some better custom controls which give good user feedback and emulate similar offline controls.</p>
<div id="javascript-custom-controls_figure1" class="wp-caption alignright" style="width: 185px"><img alt="Figure 1: Ordering Control" src="http://chris-miller.org/images/ordering_field.png" title="Ordering Control" width="175" height="26" /><p class="wp-caption-text"><strong>Figure 1</strong>: Ordering Control</p></div>One such control is a linear range control, catchy I know, which allows the user to select a value within a particular range with a given default value.  An example of this may be selecting an ordering value for a blog post, <a href="#javascript-custom-controls_figure1" title="Ordering Control" onmouseover="document.getElementById('javascript-custom-controls_figure1').style.borderColor = '#2266aa';" onmouseout="document.getElementById('javascript-custom-controls_figure1').style.borderColor = '#d6d6d6';">Figure 1</a>, ranging from say -100 to 100 with a default value of 0.  Posts in our imaginary blog would be ordered by this ordering field ascending with 0 being the default value, resulting in posts being ordered automatically by date.  Rather than using a plain text box to allow the user to enter the ordering value directly, subsequently giving us little or no control over the contents of the field until the form is submitted and no means to convey the nature of the field itself, we can create controls to manipulate the value ourselves.</p>
<p>Creating a custom control allows us to do a number of things that we just cannot do with a normal HTML form element:<br />
<div id="javascript-custom-controls_figures234" class="wp-caption alignright" style="width: 185px"><img id="javascript-custom-controls_figure2" alt="Figure 2: Lower Bounds" src="http://chris-miller.org/images/ordering_field_lower.png" title="Lower Bounds" width="175" height="26" /> <img id="javascript-custom-controls_figure3" alt="Figure 3: Non-Default Value" src="http://chris-miller.org/images/ordering_field_middle.png" title="Non-Default Value" width="175" height="26" /> <img id="javascript-custom-controls_figure4" alt="Figure 4: Upper Bounds" src="http://chris-miller.org/images/ordering_field_upper.png" title="Upper Bounds" width="175" height="26" /><p class="wp-caption-text"><strong>Figures 2, 3 &amp; 4</strong>: Showing lower bounds, non-default value and upper bounds</p></div>
<ul>
<li>Display relevant information instead of certain values, such as showing Automatic at 0 in <a href="#javascript-custom-controls_figure1" title="Ordering Control" onmouseover="document.getElementById('javascript-custom-controls_figure1').style.borderColor = '#2266aa';" onmouseout="document.getElementById('javascript-custom-controls_figure1').style.borderColor = '#d6d6d6';">Figure 1</a></li>
<li>Show when the upper and lower bounds are reached, for example at <a href="#javascript-custom-controls_figure2" title="Lower Limit" onmouseover="document.getElementById('javascript-custom-controls_figures234').style.borderColor = '#2266aa';" onmouseout="document.getElementById('javascript-custom-controls_figures234').style.borderColor = '#d6d6d6';">-100</a> and <a href="#javascript-custom-controls_figure4" title="Upper Limit" onmouseover="document.getElementById('javascript-custom-controls_figures234').style.borderColor = '#2266aa';" onmouseout="document.getElementById('javascript-custom-controls_figures234').style.borderColor = '#d6d6d6';">100</a> as per our example</li>
<li>Allow the user to reset the value to the default or previous setting</li>
<li>Give some inkling into how the control should be used</li>
</ul>
<p><span id="more-185"></span><br />
<h3>Controls</h3>
<div class="wp-caption alignright" style="width: 323px"><img alt="Annotated Ordering Field" src="http://chris-miller.org/images/ordering_field_annotated.png" title="Annotated Ordering Field" width="313" height="63" /><p class="wp-caption-text"><strong>Figure 5</strong>: Annotated Ordering Field</p></div>By using JavaScript <code>onclick</code> or <code>onmousedown</code> events we can manipulate the contents of our ordering field held behind the scenes.  The addition of functions and some variables defining the bounds and the default value of our control then allows us to constrain the upper and lower limits, as we&#8217;ve seen, and to reset the field back to it&#8217;s defaults.  This gives us the following interaction:</p>
<ul>
<li>Previous/Next: update the value of the field to the previous or next value in the range</li>
<li>Reset: reset the value to the pre-defined default value</li>
<li>Display: allow us to display feedback or custom messages based on the value of the field we&#8217;re manipulating</li>
</ul>
<p>This interaction is fairly rudimentary and not very exciting to say the least.  We really want to provide more desktop-like interaction via our own custom controls such as the ability to click-and-hold a button in order to scroll through available values.  With such a control, in the majority of desktop applications, when the button is held the action that button denotes will be repeated after a short delay usually with increasing speed the longer it&#8217;s held.  We can emulate this in JavaScript using a timeout to create the pause and a modifier to decrease the length of this pause and in turn increase the speed with which the actions are executed.</p>
<p><a href="#javascript-custom-controls_snippit1" onmouseover="document.getElementById('javascript-custom-controls_snippit1').style.borderColor = '#2266aa';" onmouseout="document.getElementById('javascript-custom-controls_snippit1').style.borderColor = '#d6d6d6';" title="Click-and-hold example">Code Snippit 1</a> contains a brief outline of how to create a mechanism for firing events when a button is held.</p>
<div class="code_header">
<p>
<strong>Code Snippit 1</strong>: Rough JavaScript to deal with the click-and-hold updating mechanism
</p>
<pre class="javascript" name="code" id="javascript-custom-controls_snippit1" >
&lt;script type="text/javascript"&gt;
    var timeout          = 1000;
    var timeout_limit    = 200;
    var timeout_speedup  = 1.5;
    var default          = 0;
    var lower_bounds     = -100;
    var upper_bounds     = 100;

    function setView( str, element ) {
        // Update the ordering element setting the values and
        // icons as necessary
      ...
    }

    function updateVariable() {
        // Update variable
        order        = document.getElementById( "ordering" );
        order_disp   = document.getElementById( "order_disp" );

        // Update variable
        order.value  = order.value + 1;

        // Check Bounds
        if( order.value &gt;= upper_bounds )
            setView( "upper_bounds", order_disp );
        elseif( order.value == default )
            setView( "Default", order_disp );
        else
            setView( "" + order.value, order_disp );

        // Start firing click-and-hold events
        if( timeout &gt; timeout_limit )
            timeout = max( timeout / timeout_speedup, timeout_limit );
        t = setTimeout( updateVariable, timeout );
    }

    function buttonStop( t ) {
        timeout = 1000;
        clearTimeout( t );
    }
&lt;/script&gt;
</pre>
</div>
<p><code>timeout</code> is the time between calling button events, the <code>timeout_speedup</code> modifier is used to recalculate the timeout on each event in order to increase the speed with which the event is fired.  We set a lower limit, <code>timeout_limit</code>, to ensure that the events aren&#8217;t called too quickly to update the display and to give the user time to react once they near their desired value.  A plot of time between ticks against ticks is shown in <a href="#javascript-custom-controls_graph1" onmouseover="document.getElementById('javascript-custom-controls_graph1').style.borderColor = '#2266aa';" onmouseout="document.getElementById('javascript-custom-controls_graph1').style.borderColor = '#d6d6d6';" title="Time between ticks vs. Ticks">Graph 1</a>, as you can see it quickly ramps up so <code>timeout</code> is set to the lower limit, much like you would expect from a desktop application&#8217;s click-and-hold button interaction.</p>
<p><div id="javascript-custom-controls_graph1" class="wp-caption aligncenter" style="width: 551px"><img alt="Timeout vs. Ticks" src="http://chris-miller.org/images/timeout_graph.png" title="Timeout vs. Ticks" width="541" height="250" /><p class="wp-caption-text"><strong>Graph 1</strong>: Timeout vs. Ticks</p></div>
<p><a href="#javascript-custom-controls_snippit2" onmouseover="document.getElementById('javascript-custom-controls_snippit2').style.borderColor = '#2266aa';" onmouseout="document.getElementById('javascript-custom-controls_snippit2').style.borderColor = '#d6d6d6';" title="HTML button">Code Snippit 2</a> shows sample HTML used to create the next button with the appropriate <code>onmousedown</code>, <code>onmouseup</code> and <code>onmouseout</code> JavaScript calls to add the desired functionality to the button.</p>
<div id="javascript-custom-controls_snippit2" class="code_header">
<p>
<strong>Code Snippit 2</strong>: Button calling the events when clicked
</p>
<pre class="html" name="code">
&lt;img
    title="Next" src="images/icons/arrow_right.png" alt="&amp;rarr;"
    <!-- Update the variable and fire click-and-hold events -->
    onmousedown="updateVariable();"
    <!-- Stop the timer if mouse released -->
    onmouseup="buttonStop( t );"
    <!-- Stop the timer if the mouse moves off the control -->
    onmouseout="buttonStop( t );"
/&gt;
</pre>
</div>
<p>We use both <code>onmouseup</code> and <code>onmouseout</code> to ensure that the click-and-hold behavior ceases when the user either releases the mouse button or moves the cursor off the control.</p>
<div id="javascript-custom-controls_figure6" class="wp-caption alignright" style="width: 185px"><img alt="Textentry into ordering field" src="http://chris-miller.org/images/ordering_field_textentry.png" title="Textentry into ordering field" width="175" height="36" /><p class="wp-caption-text"><strong>Figure 6</strong>: Textentry into ordering field</p></div>We can extend the custom control even further and give the user a less stringent method of inputting a value by allowing them to type directly into the field in the same manner as the original textbox, <a href="#javascript-custom-controls_figure6" title="Textentry into ordering field" onmouseover="document.getElementById('javascript-custom-controls_figure6').style.borderColor = '#2266aa';" onmouseout="document.getElementById('javascript-custom-controls_figure6').style.borderColor = '#d6d6d6';">Figure 6</a>.</p>
<h3>Feedback</h3>
<p>Here&#8217;s where our custom controls can really begin to shine, we can give the user direct feedback in the control that they&#8217;re manipulating in real-time.  Sure we can do this with JavaScript as it stands, but extending beyond the &#8220;red border = wrong&#8221; methodology we can give visual cues to the user to show that they&#8217;re trying to do something thata&#8217;s wrong and what specifically is wrong with what they&#8217;re doing.</p>
<p>Showing the bounds of the field is easy using the visual cues we&#8217;ve detailed in <a href="#javascript-custom-controls_figures234" title="Upper Limit" onmouseover="document.getElementById('javascript-custom-controls_figures234').style.borderColor = '#2266aa';" onmouseout="document.getElementById('javascript-custom-controls_figures234').style.borderColor = '#d6d6d6';">Figures 2 &#038; 4</a>.  Other visual cues we can use are that of text/background colouring to show that an error occurred.  We can also, using the same timeout methods used for the click-and-hold interaction, display <em>useful</em> messages to the user for a brief time before correcting their mistakes telling them what they did wrong and why their entries have been changed, <a href="#javascript-custom-controls_figure7" title="Error detection and correction" onmouseover="document.getElementById('javascript-custom-controls_figure7').style.borderColor = '#2266aa';" onmouseout="document.getElementById('javascript-custom-controls_figure7').style.borderColor = '#d6d6d6';">Figure 7</a>.</p>
<p><div id="javascript-custom-controls_figure7" class="wp-caption alignright" style="width: 573px"><img alt="Error detection and correction" src="http://chris-miller.org/images/ordering_field_errorcorrection.png" title="Error detection and correction" width="563" height="36" /><p class="wp-caption-text"><strong>Figure 7</strong>: Error detection and correction</p></div>
<h3 style="margin-top: 10px;">It&#8217;s only an example!</h3>
<p><div class="wp-caption alignright" style="width: 319px"><img alt="Other possible controls?" src="http://chris-miller.org/images/controls_other.png" title="Other possible controls?" width="309" height="59" /><p class="wp-caption-text"><strong>Figure 8</strong>: Other possible controls?</p></div>Of course using such controls for an ordering field is only one example where we can extend upon HTML form elements with this simple control.  This type of control mechanism could be used for <em>any</em> field that has a linear progression in values.  Not only that, you could extend upon the functionality of this example to meet your specific requirements, by wrapping the bounds around to the start, having varying degrees of scale over numerous controls that are swapped in and out for fine or granular interaction or just have it toggle between two set values.</p>
<p>What&#8217;s the point?  There&#8217;s so much we can do nowadays in terms of interaction, even on the web.  Try to add a little bit of interactive zest to your HTML controls, it makes everyone&#8217;s experience that little bit easier and better.</p>
<p>Thanks for reading,<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=XdQrFXyU9Aw:yE7N8uwmv-4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=XdQrFXyU9Aw:yE7N8uwmv-4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=XdQrFXyU9Aw:yE7N8uwmv-4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=XdQrFXyU9Aw:yE7N8uwmv-4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=XdQrFXyU9Aw:yE7N8uwmv-4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=XdQrFXyU9Aw:yE7N8uwmv-4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=XdQrFXyU9Aw:yE7N8uwmv-4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=XdQrFXyU9Aw:yE7N8uwmv-4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=XdQrFXyU9Aw:yE7N8uwmv-4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=XdQrFXyU9Aw:yE7N8uwmv-4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/XdQrFXyU9Aw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2009/02/15/javascript-custom-controls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2009/02/15/javascript-custom-controls/</feedburner:origLink></item>
		<item>
		<title>New blog theme – Plainscape</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/V1pZwFRZ0wM/</link>
		<comments>http://chris-miller.org/archives/2009/02/15/new-blog-theme-plainscap/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 03:04:34 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[plainscape]]></category>
		<category><![CDATA[simple]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[white]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=189</guid>
		<description><![CDATA[I&#8217;ve not blogged in a while, although I have been playing with this site, testing various themes that&#8217;re out there on the web.  I tried numerous dark and light varieties, some heavy on design others not so much, many of the image heavy themes looked nice initially but lacked that overall niceness.  I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://chris-miller.org/photos/photo/3279673379/plainscape.html" class="tt-flickr tt-flickr-Small" title="Plainscape"><img class="alignright" src="http://farm4.static.flickr.com/3170/3279673379_feaf7cfc66_m.jpg" alt="Plainscape" width="240" height="202" /></a>I&#8217;ve not blogged in a while, although I have been playing with this site, testing various themes that&#8217;re out there on the web.  I tried numerous dark and light varieties, some heavy on design others not so much, many of the image heavy themes looked nice initially but lacked that overall niceness.  I had finally settled on <a href="http://wordpress.org/extend/themes/inove">iNove</a> but I&#8217;ve since decided that it was too cluttered.  Short of making my own theme up, which I never manage to get all the way through, I thought it best to find a nice clean one on the web.</p>
<p>After hours of painful searching this evening I managed to decided upon using the <a href="http://srinig.com/wordpress/themes/plainscape/">Plainscape</a> theme.  I may well configure it slightly for this blog, I may even go as far as to add a header image, but let&#8217;s not get too adventurous!</p>
<p>So for the foreseeable future this blog will look nice, plain and simple (it&#8217;ll probably change when I get bored but it gives me something to blog about!).<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=V1pZwFRZ0wM:Bkeb2Pm6Agk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=V1pZwFRZ0wM:Bkeb2Pm6Agk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=V1pZwFRZ0wM:Bkeb2Pm6Agk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=V1pZwFRZ0wM:Bkeb2Pm6Agk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=V1pZwFRZ0wM:Bkeb2Pm6Agk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=V1pZwFRZ0wM:Bkeb2Pm6Agk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=V1pZwFRZ0wM:Bkeb2Pm6Agk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=V1pZwFRZ0wM:Bkeb2Pm6Agk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=V1pZwFRZ0wM:Bkeb2Pm6Agk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=V1pZwFRZ0wM:Bkeb2Pm6Agk:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/V1pZwFRZ0wM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2009/02/15/new-blog-theme-plainscap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2009/02/15/new-blog-theme-plainscap/</feedburner:origLink></item>
		<item>
		<title>Get multi-class elements in JavaScript</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/qc0fUdgbJuE/</link>
		<comments>http://chris-miller.org/archives/2008/10/02/get-multi-class-elements-in-javascript/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 20:35:49 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[getElementsByClass]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[multi-class elements]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=184</guid>
		<description><![CDATA[As any person who uses JavaScript for client side interaction knows, getting elements by their class is one essential thing we need to do over and over again.  For the most part using a function equivalent to the one shown below will do.


Code Snippit 1: Simplistic getElementsByClass() JavaScript method


function getElementsByClass( className ) {
  [...]]]></description>
			<content:encoded><![CDATA[<p>As any person who uses JavaScript for client side interaction knows, getting elements by their class is one essential thing we need to do over and over again.  For the most part using a function equivalent to the one <a href="#get-multi-class-elements-in-javascript_snippit1" title="Simple getElementsByClass()" onmouseover="document.getElementById('get-multi-class-elements-in-javascript_snippit1).style.borderColor = '#2266aa';" onmouseout="document.getElementById('get-multi-class-elements-in-javascript_snippit1').style.borderColor = '#d6d6d6';">shown below</a> will do.</p>
<div id="get-multi-class-elements-in-javascript_snippit1" class="code_header">
<p>
<strong>Code Snippit 1</strong>: Simplistic getElementsByClass() JavaScript method
</p>
<pre class="javascript" name="code">
function getElementsByClass( className ) {
    var all =
        document.all ? document.all : document.getElementsByTagName( '*' );
    var elements = new Array();
    for( var e = 0; e < all.length; e++ ) {
        if (all[e].className == className) {
            elements[elements.length] = all[e];
        }
    }
    return elements;
}
</pre>
</div>
<p>This function basically checks the string that is entered into the class attribute for each HTML element and returns all elements where there is an exact match.</p>
<p>This method will fail however if we're trying to select elements that have multiple class associations.  We need to use something more complex when, for example, creating a list of items that are filterable by class when arranged in overlapping groups.  Splitting the class attribute on space characters will allow us to check for matches in these cases:</p>
<div id="get-multi-class-elements-in-javascript_snippit2" class="code_header">
<p>
<strong>Code Snippit 2</strong>: More advanced getElementsByClass() function
</p>
<pre class="javascript" name="code">
function getElementsByClass( className ) {
    var all =
        document.all ? document.all : document.getElementsByTagName( '*' );
    var elements = new Array();
    for( var e = 0; e < all.length; e++ ) {
        var classes = all[e].className.split(/\s/g);
        for( var c = 0; c < classes.length; c++ ) {
            if( classes[c] == className ) {
                elements[elements.length] = all[e];
            }
        }
    }
    return elements;
}
</pre>
</div>
<p>The <a href="#get-multi-class-elements-in-javascript_snippit2" title="Advanced getElementsByClass()" onmouseover="document.getElementById('get-multi-class-elements-in-javascript_snippit2).style.borderColor = '#2266aa';" onmouseout="document.getElementById('get-multi-class-elements-in-javascript_snippit2').style.borderColor = '#d6d6d6';">function above</a> does pretty much the same as the first one, however splits the class attribute string on the spaces and loops through them, trying to match the parts individually.  This should match on elements with singular and multiple class names associated with them and solve any problems with multiple classed elements.<br />
- Chris</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=qc0fUdgbJuE:_DZ9sxs1Rdg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=qc0fUdgbJuE:_DZ9sxs1Rdg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=qc0fUdgbJuE:_DZ9sxs1Rdg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=qc0fUdgbJuE:_DZ9sxs1Rdg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=qc0fUdgbJuE:_DZ9sxs1Rdg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=qc0fUdgbJuE:_DZ9sxs1Rdg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=qc0fUdgbJuE:_DZ9sxs1Rdg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=qc0fUdgbJuE:_DZ9sxs1Rdg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=qc0fUdgbJuE:_DZ9sxs1Rdg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=qc0fUdgbJuE:_DZ9sxs1Rdg:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/qc0fUdgbJuE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2008/10/02/get-multi-class-elements-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2008/10/02/get-multi-class-elements-in-javascript/</feedburner:origLink></item>
		<item>
		<title>Suse Tips</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/g8FnNZW85Zg/</link>
		<comments>http://chris-miller.org/archives/2008/07/01/suse-tips/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 12:59:26 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[scrollbars]]></category>
		<category><![CDATA[Suse]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[workspace switcher]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=182</guid>
		<description><![CDATA[I&#8217;ve been using Suse at work now for over a year.  Once in a while I&#8217;ll find a shortcut or a handy little thing that I&#8217;ll find useful.  This blog post outlines a few of the handy shortcuts and tips that I&#8217;ve picked up and never readily knew.

Workspace Switcher

The Red Hat Workspace Switcher [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using Suse at work now for over a year.  Once in a while I&#8217;ll find a shortcut or a handy little thing that I&#8217;ll find useful.  This blog post outlines a few of the handy shortcuts and tips that I&#8217;ve picked up and never readily knew.</p>
<p><span id="more-182"></span><br />
<h3>Workspace Switcher</h3>
<p><a href="http://www.flickr.com/photos/chrismiller/2628039178/" title="Workspace Switcher by Chris Miller, on Flickr"><img src="http://farm4.static.flickr.com/3155/2628039178_c26827f3d6_o.png" width="500" height="55" alt="Workspace Switcher" /></a><br />
The Red Hat Workspace Switcher is one of the Linux tools I use all the time.  I have two screens at work, however it still isn&#8217;t enough room to keep all my documents open, read mail  and so forth.  For this reason I use the workspace switcher with 4 workspaces, one for my work, another for email, one for FileMaker (the system we use for breifs and work management) and another spare.  One of the most useful key combos, not a particularly hard one to find &#8211; but perhaps the one I use the most heavily, is <code>Ctrl + Alt + [Arrow Key]</code> which allows me to move back and forward between each of these workspaces.</p>
<p>Another handy tip for using the workspace switcher is that you may move an window from one workspace to another simply by dragging it on the workspace switcher &#8211; simple as that.</p>
<h3>Command Line Applet</h3>
<p><a href="http://www.flickr.com/photos/chrismiller/2628039292/" title="SUSE Command Line Applet by Chris Miller, on Flickr"><img style="float: right;" src="http://farm4.static.flickr.com/3148/2628039292_72b7ca1bf9_o.png" width="190" height="51" alt="SUSE Command Line Applet" /></a><br />
Command Line is a GNOME Applet that sits on a panel at the top of my screen, from here you can quickly launch applications or kill processes as necessary &#8211; pretty much anything you would do in a terminal that doesn&#8217;t require feedback.</p>
<p>It&#8217;s not exactly groundbreaking but it&#8217;s handy if you need to quickly launch gedit, gftp or the likes to do something quickly.</p>
<h3>Scrollbars</h3>
<p>Scrollbars, a really common UI element, yet there were a few things I was surprised to find when using them in Suse.  Clicking one of the up or down arrows at either end of the scrollbar will tab the handle up or down as you would expect.  Right clicking on the up or down arrow on the other hand will scroll you to the top and bottom of the scrollable area respectively.</p>
<h3>View Desktop</h3>
<p>I&#8217;m a messy git, I open windows and don&#8217;t close them, layer them up and not bother to sort them in any way shape or form.  Given that, the view desktop shortcut is always useful to minimise all the active windows on the workspace you are in: <code>Ctrl + Alt + D</code></p>
<h3>Tips?</h3>
<p>Ok, so they&#8217;re not great tips, they&#8217;re handy for saving a bit of time here and there.  I do, however, use these all day at work and so the time saved adds up.  Gimme a shout if there&#8217;s any other decent tips that you know of.<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=g8FnNZW85Zg:23u4mUQtBS8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=g8FnNZW85Zg:23u4mUQtBS8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=g8FnNZW85Zg:23u4mUQtBS8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=g8FnNZW85Zg:23u4mUQtBS8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=g8FnNZW85Zg:23u4mUQtBS8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=g8FnNZW85Zg:23u4mUQtBS8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=g8FnNZW85Zg:23u4mUQtBS8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=g8FnNZW85Zg:23u4mUQtBS8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=g8FnNZW85Zg:23u4mUQtBS8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=g8FnNZW85Zg:23u4mUQtBS8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/g8FnNZW85Zg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2008/07/01/suse-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2008/07/01/suse-tips/</feedburner:origLink></item>
		<item>
		<title>Duckworthing</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/zVrq8k_5uvU/</link>
		<comments>http://chris-miller.org/archives/2008/06/11/duckworthing/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 17:54:46 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[broken]]></category>
		<category><![CDATA[Duckworthing]]></category>
		<category><![CDATA[glasses]]></category>
		<category><![CDATA[Jack Duckworth]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=181</guid>
		<description><![CDATA[Well it&#8217;s finally happened, the pair of glasses I&#8217;ve had for going on four or five years now has finally given up.
This morning when I arrived at work and sat at my desk I did what I usually do.  I took my glasses off and gave them a clean on my shirt.  Usually [...]]]></description>
			<content:encoded><![CDATA[<p>Well it&#8217;s finally happened, the pair of glasses I&#8217;ve had for going on four or five years now has finally given up.</p>
<p>This morning when I arrived at work and sat at my desk I did what I usually do.  I took my glasses off and gave them a clean on my shirt.  Usually I just put them back on and get to the nitty-gritty, usually sitting sifting through emails to find out if any of the spam is actually useful.</p>
<p>Today, however was a different story indeed, as soon as I placed the glasses on my face I felt a ping and then everything went blurry.  I thought that the screw holding the lens into my frames had pinged out again, yes it&#8217;s happened before, but alas no!  No, the actual frame had broken right at the point where the rim meets the legs, leaving a jagged edge and a confounded Chris.</p>
<p><span id="more-181"></span><a style="float: right; margin-left: 5px; margin-bottom: 5px;" href="http://www.flickr.com/photos/chrismiller/2571064582/" title="Duckworthing by Chris Miller, on Flickr"><img src="http://farm4.static.flickr.com/3176/2571064582_bdca09d868_m.jpg" width="240" height="180" alt="Duckworthing" /></a></p>
<p>Anyway, after squinting for a while and ruling out superglue as a means to repair my glasses I eventually had to plump for <em>Jack Duckworth</em>ing them using some tape.  After which it was a quick call to the opticians to set up an appointment to get tested and some new glasses.  To my amazement I managed to get an appointment today, earlier this very afternoon.  An hour later and Â£155 down I&#8217;d managed to order two new pairs of glasses which should hopefully arrive sometime next week.</p>
<p>I&#8217;m continue to Duckworth until then though!<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=zVrq8k_5uvU:YEsrZnKyPzU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=zVrq8k_5uvU:YEsrZnKyPzU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=zVrq8k_5uvU:YEsrZnKyPzU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=zVrq8k_5uvU:YEsrZnKyPzU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=zVrq8k_5uvU:YEsrZnKyPzU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=zVrq8k_5uvU:YEsrZnKyPzU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=zVrq8k_5uvU:YEsrZnKyPzU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=zVrq8k_5uvU:YEsrZnKyPzU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=zVrq8k_5uvU:YEsrZnKyPzU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=zVrq8k_5uvU:YEsrZnKyPzU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/zVrq8k_5uvU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2008/06/11/duckworthing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2008/06/11/duckworthing/</feedburner:origLink></item>
		<item>
		<title>Adding non-Apple format movies to iTunes</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/22JtoQZHSrA/</link>
		<comments>http://chris-miller.org/archives/2008/06/10/adding-non-apple-format-movies-to-itunes/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 19:46:53 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[movie]]></category>
		<category><![CDATA[SetFile]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=180</guid>
		<description><![CDATA[I&#8217;ve been having a bit of trouble adding some movies to my iTunes library this evening &#8211; in that I&#8217;d have to convert a movie to a .mov file in order to import it at all.
A few google searches away and I&#8217;d found the answer to all my problems.  If you have the Apple [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been having a bit of trouble adding some movies to my iTunes library this evening &#8211; in that I&#8217;d have to convert a movie to a <span style="font-family: courier;">.mov</span> file in order to import it at all.</p>
<p>A few google searches away and I&#8217;d found the answer to all my problems.  If you have the Apple development tools installed (and are obviously on a Mac), you can simply change the file meta-data of the movies via the terminal in order to allow you to import them.  It&#8217;s very simple to do:<br />
<code>SetFile -t "MooV" movie.avi </code></p>
<p style="font-size: 10px; text-align: right; color: #aaa;">Via: <a target="_blank" href="http://forums.macrumors.com/showpost.php?p=4624340&#038;postcount=14" title="Macrumors Forum">AVI to iTunes</a> on MacRumors Forums</p>
<p>I did, however, have to change the iTunes settings so that it didn&#8217;t take it&#8217;s own copy of the files when importing them.  I have a separate Movies folder for a reason thank-you-very-much iTunes.<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=22JtoQZHSrA:tBv9VaNRCtQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=22JtoQZHSrA:tBv9VaNRCtQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=22JtoQZHSrA:tBv9VaNRCtQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=22JtoQZHSrA:tBv9VaNRCtQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=22JtoQZHSrA:tBv9VaNRCtQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=22JtoQZHSrA:tBv9VaNRCtQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=22JtoQZHSrA:tBv9VaNRCtQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=22JtoQZHSrA:tBv9VaNRCtQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=22JtoQZHSrA:tBv9VaNRCtQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=22JtoQZHSrA:tBv9VaNRCtQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/22JtoQZHSrA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2008/06/10/adding-non-apple-format-movies-to-itunes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2008/06/10/adding-non-apple-format-movies-to-itunes/</feedburner:origLink></item>
		<item>
		<title>R.I.P. PB</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/bqJj8-zN-aY/</link>
		<comments>http://chris-miller.org/archives/2008/05/19/rip-pb/#comments</comments>
		<pubDate>Mon, 19 May 2008 22:46:23 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[dead]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[HDD]]></category>
		<category><![CDATA[PowerBook]]></category>
		<category><![CDATA[RIP]]></category>
		<category><![CDATA[SMART failure]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=179</guid>
		<description><![CDATA[As per my previous post, I&#8217;m getting a new machine.  This is due however, to some unfortunate news: my PowerBook is dead!
The first Mac I ever owned, a PowerBook G4 which has served me very well over the past 5 or 6 years, is pretty much blitzed.  My PowerBook and I visited Matt [...]]]></description>
			<content:encoded><![CDATA[<p>As per my <a href="http://chris-miller.org/archives/2008/05/18/mac-pro/" title="Mac Pro">previous post, I&#8217;m getting a new machine</a>.  This is due however, to some unfortunate news: my PowerBook is dead!</p>
<p><span id="more-179"></span>The first Mac I ever owned, a PowerBook G4 which has served me very well over the past 5 or 6 years, is pretty much blitzed.  My PowerBook and I visited <a href="http://mattgemmell.com" title="Matt Gemmell">Matt</a> in Edinburgh on Saturday to see if we could revive it to it&#8217;s previous glory.  We managed to pull all the stuff I needed from the hard disk, but that was all the good fortune we had.</p>
<p>It turns out the hard disk was suffering from a <a href="http://en.wikipedia.org/wiki/Self-Monitoring%2C_Analysis%2C_and_Reporting_Technology" title="S.M.A.R.T.">S.M.A.R.T.</a> failure and locked up Matt&#8217;s computer when mounted as a target drive.  We eventually managed to format the drive via Matt&#8217;s old PowerBook and everything looked good, but alas it was not to be &#8211; we received kernel panics when trying to install Mac OS X on the drive.</p>
<p>So it looks as if I&#8217;ll have to fork out for a replacement hard disk, which isn&#8217;t too big a deal at about Â£50 for 100Gb which would suit me.  Until I manage to get one and install it my PowerBook is out of service.</p>
<p>/me salutes PowerBook, when my copy of the Necronomicon arrives I will bring you back!<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=bqJj8-zN-aY:t52g2EMqwNw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=bqJj8-zN-aY:t52g2EMqwNw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=bqJj8-zN-aY:t52g2EMqwNw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=bqJj8-zN-aY:t52g2EMqwNw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=bqJj8-zN-aY:t52g2EMqwNw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=bqJj8-zN-aY:t52g2EMqwNw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=bqJj8-zN-aY:t52g2EMqwNw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=bqJj8-zN-aY:t52g2EMqwNw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=bqJj8-zN-aY:t52g2EMqwNw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=bqJj8-zN-aY:t52g2EMqwNw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/bqJj8-zN-aY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2008/05/19/rip-pb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2008/05/19/rip-pb/</feedburner:origLink></item>
		<item>
		<title>Good Sauce</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/wf-LsowV9r4/</link>
		<comments>http://chris-miller.org/archives/2008/05/18/good-sauce/#comments</comments>
		<pubDate>Sun, 18 May 2008 21:22:51 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Photoblog]]></category>
		<category><![CDATA[Recipies]]></category>
		<category><![CDATA[basil]]></category>
		<category><![CDATA[chicken]]></category>
		<category><![CDATA[cooking]]></category>
		<category><![CDATA[courgette]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[garlic]]></category>
		<category><![CDATA[mushroom]]></category>
		<category><![CDATA[olive oil]]></category>
		<category><![CDATA[onion]]></category>
		<category><![CDATA[oregano]]></category>
		<category><![CDATA[pasta]]></category>
		<category><![CDATA[sauce]]></category>
		<category><![CDATA[tomatoes]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=178</guid>
		<description><![CDATA[I&#8217;ve not much food in the house today and since it&#8217;s not long until payday I&#8217;m rather poor, so I decided to make whatever I could based on what I had lying around.  It turned out to be a masterpiece if I do say so myself.
Try it out:

Chicken breast
Pasta
Tin of chopped tomatoes
2 cloves of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve not much food in the house today and since it&#8217;s not long until payday I&#8217;m rather poor, so I decided to make whatever I could based on what I had lying around.  It turned out to be a masterpiece if I do say so myself.</p>
<p><span id="more-178"></span><a target="_blank" href="http://www.flickr.com/photos/chrismiller/2503434758/" title="Good Sauce by Chris Miller, on Flickr"><img style="border: 1px solid #d6d6d6; padding: 3px;" src='http://farm4.static.flickr.com/3044/2503434758_e463db3e52_m.jpg' alt='Chicken pasta with garlic &#038; tomato sauce' class='alignright' /></a>Try it out:</p>
<ul>
<li>Chicken breast</li>
<li>Pasta</li>
<li>Tin of chopped tomatoes</li>
<li>2 cloves of garlic</li>
<li>1 onion</li>
<li>&frac12; punnet of mushrooms</li>
<li>&frac12; courgette</li>
<li>Olive oil</li>
<li>Oregano</li>
<li>Basil</li>
</ul>
<p>I started by slicing the courgette and onion and crushing the garlic.  Then mixed half the garlic and some oil together, put the chicken breast, mushrooms, courgette and onion into an oven dish and poured the oil and garlic over, added a bit of dried oregano and basil and put in the oven for about half an hour.</p>
<p>Then put the tin of tomatoes into a pot, added the rest of the garlic, a bit more olive oil and a load of dried oregano and basil.  When simmering I added the contents of the oven dish and simmered for 20 more minutes.  I hope you&#8217;ll figure out what I did with the pasta on your own!</p>
<p>It was damn fine (see picture) and I&#8217;d highly recommend it.<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=wf-LsowV9r4:5ZbSG9VxMGc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=wf-LsowV9r4:5ZbSG9VxMGc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=wf-LsowV9r4:5ZbSG9VxMGc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=wf-LsowV9r4:5ZbSG9VxMGc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=wf-LsowV9r4:5ZbSG9VxMGc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=wf-LsowV9r4:5ZbSG9VxMGc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=wf-LsowV9r4:5ZbSG9VxMGc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=wf-LsowV9r4:5ZbSG9VxMGc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=wf-LsowV9r4:5ZbSG9VxMGc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=wf-LsowV9r4:5ZbSG9VxMGc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/wf-LsowV9r4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2008/05/18/good-sauce/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2008/05/18/good-sauce/</feedburner:origLink></item>
		<item>
		<title>Mac Pro</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/YVRShaHdzV0/</link>
		<comments>http://chris-miller.org/archives/2008/05/18/mac-pro/#comments</comments>
		<pubDate>Sun, 18 May 2008 18:30:37 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Mac Pro]]></category>
		<category><![CDATA[mighty mouse]]></category>
		<category><![CDATA[nvidia geforce]]></category>
		<category><![CDATA[xeon]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=177</guid>
		<description><![CDATA[I&#8217;ve recently ordered a new Mac, a Mac Pro to be precise.  It is currently en route to my gleeful embrace from Apple.




The specs are as follows:

Processors: Two 2.8GHz Quad-Core Intel Xeon
RAM: 2GB 800MHz DDR2 RAM
Graphics: NVIDIA GeForce 8800 GT 512MB GDDR3
HDD: 500GB 7200-rpm Serial ATA 3Gb/s
Optical: Two 16x SuperDrives
Connectivity: AirPort Extreme Card (Wi-Fi) [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently ordered a new Mac, a Mac Pro to be precise.  It is currently en route to my gleeful embrace from Apple.<br />
<span id="more-177"></span></p>
<div style="width: 229px; margin-left: 20px; float: right;">
<img src="/images/macpro.jpg" alt="Picture of a Mac Pro" />
</div>
<p>The specs are as follows:</p>
<ul>
<li>Processors: Two 2.8GHz Quad-Core Intel Xeon</li>
<li>RAM: 2GB 800MHz DDR2 RAM</li>
<li>Graphics: NVIDIA GeForce 8800 GT 512MB GDDR3</li>
<li>HDD: 500GB 7200-rpm Serial ATA 3Gb/s</li>
<li>Optical: Two 16x SuperDrives</li>
<li>Connectivity: AirPort Extreme Card (Wi-Fi) &#038; Bluetooth</li>
<li>Peripherals: Apple Wireless Mighty Mouse &#038; Apple Wireless Keyboard</li>
</ul>
<p>It should arrive later in the week, I can&#8217;t wait to get my hands on it!<br />
- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=YVRShaHdzV0:-IhO8Fef82U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=YVRShaHdzV0:-IhO8Fef82U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=YVRShaHdzV0:-IhO8Fef82U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=YVRShaHdzV0:-IhO8Fef82U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=YVRShaHdzV0:-IhO8Fef82U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=YVRShaHdzV0:-IhO8Fef82U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=YVRShaHdzV0:-IhO8Fef82U:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=YVRShaHdzV0:-IhO8Fef82U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=YVRShaHdzV0:-IhO8Fef82U:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=YVRShaHdzV0:-IhO8Fef82U:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/YVRShaHdzV0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2008/05/18/mac-pro/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2008/05/18/mac-pro/</feedburner:origLink></item>
		<item>
		<title>You absolute beauty</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/IgLWvQgB1aI/</link>
		<comments>http://chris-miller.org/archives/2008/04/12/you-absolute-beauty/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 13:29:58 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Aberdeen]]></category>
		<category><![CDATA[Dumfries]]></category>
		<category><![CDATA[football]]></category>
		<category><![CDATA[QOS]]></category>
		<category><![CDATA[Scottish Cup]]></category>
		<category><![CDATA[semi-final]]></category>

		<guid isPermaLink="false">http://chris-miller.org/?p=164</guid>
		<description><![CDATA[The local football team in Dumfries, Queen of the South, has made club history by beating Aberdeen 4-3 in the semi-final of the Scottish Cup at Hampden today.
They&#8217;ll be in the final of the Scottish Cup on the 24th May playing either St Johnstone, Rangers or Partick Thistle.
]]></description>
			<content:encoded><![CDATA[<p>The local football team in Dumfries, <a href="http://www.qosfc.com/">Queen of the South</a>, has made club history by beating <a href="http://www.afc.premiumtv.co.uk/page/Home">Aberdeen</a> 4-3 in the <a href="http://news.bbc.co.uk/sport1/hi/football/scot_cups/7341879.stm">semi-final of the Scottish Cup at Hampden today</a>.</p>
<p>They&#8217;ll be in the final of the Scottish Cup on the 24th May playing either St Johnstone, Rangers or Partick Thistle.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=IgLWvQgB1aI:pnIGuxDll4o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=IgLWvQgB1aI:pnIGuxDll4o:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=IgLWvQgB1aI:pnIGuxDll4o:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=IgLWvQgB1aI:pnIGuxDll4o:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=IgLWvQgB1aI:pnIGuxDll4o:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=IgLWvQgB1aI:pnIGuxDll4o:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=IgLWvQgB1aI:pnIGuxDll4o:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=IgLWvQgB1aI:pnIGuxDll4o:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=IgLWvQgB1aI:pnIGuxDll4o:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=IgLWvQgB1aI:pnIGuxDll4o:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/IgLWvQgB1aI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2008/04/12/you-absolute-beauty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2008/04/12/you-absolute-beauty/</feedburner:origLink></item>
		<item>
		<title>Most Popular Stories Now</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/KsyZ8-eTUEk/</link>
		<comments>http://chris-miller.org/archives/2007/10/19/most-popular-stories-now/#comments</comments>
		<pubDate>Fri, 19 Oct 2007 08:57:30 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[BBC]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[ironic]]></category>
		<category><![CDATA[top read]]></category>

		<guid isPermaLink="false">http://chris-miller.org/blog/archives/2007/10/19/most-popular-stories-now/</guid>
		<description><![CDATA[


Isn&#8217;t there something quite ironic about this?
]]></description>
			<content:encoded><![CDATA[<div class="center">
<img src="/images/mostemailed.png" alt="BBC Most Emailed list" />
</div>
<p>
Isn&#8217;t there something quite ironic about this?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=KsyZ8-eTUEk:LTEmqvKRXZ0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=KsyZ8-eTUEk:LTEmqvKRXZ0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=KsyZ8-eTUEk:LTEmqvKRXZ0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=KsyZ8-eTUEk:LTEmqvKRXZ0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=KsyZ8-eTUEk:LTEmqvKRXZ0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=KsyZ8-eTUEk:LTEmqvKRXZ0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=KsyZ8-eTUEk:LTEmqvKRXZ0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=KsyZ8-eTUEk:LTEmqvKRXZ0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=KsyZ8-eTUEk:LTEmqvKRXZ0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=KsyZ8-eTUEk:LTEmqvKRXZ0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/KsyZ8-eTUEk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2007/10/19/most-popular-stories-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2007/10/19/most-popular-stories-now/</feedburner:origLink></item>
		<item>
		<title>Switching to Dreamhost</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/hK4eUdItI4U/</link>
		<comments>http://chris-miller.org/archives/2007/10/05/switching-to-dreamhost/#comments</comments>
		<pubDate>Fri, 05 Oct 2007 01:36:35 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[bytemark]]></category>
		<category><![CDATA[Dreamhost]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://chris-miller.org/blog/archives/2007/10/05/switching-to-dreamhost/</guid>
		<description><![CDATA[I&#8217;m currently in the midst of switching my site hosting over to Dreamhost and you may see some disruption in this or some other sites I host.  It&#8217;ll probably last about a week due to myself getting bored transferring all the files/databases and playing World of Warcraft instead.
Just a note to say, if you [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently in the midst of switching my site hosting over to <a href="http://dreamhost.com" title="Dreamhost">Dreamhost</a> and you may see some disruption in this or some other sites I host.  It&#8217;ll probably last about a week due to myself getting bored transferring all the files/databases and playing World of Warcraft instead.</p>
<p>Just a note to say, if you are ever in need of a virtual machine with very configurable settings or the need to install certain software on it, <a href="http://bytemark.co.uk" title="Bytemark">Bytemark</a> is a good choice &#8211; just a little more than I currently need (and more pricey as well).</p>
<p>- Chris</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=hK4eUdItI4U:CuV1YQJEbGw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=hK4eUdItI4U:CuV1YQJEbGw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=hK4eUdItI4U:CuV1YQJEbGw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=hK4eUdItI4U:CuV1YQJEbGw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=hK4eUdItI4U:CuV1YQJEbGw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=hK4eUdItI4U:CuV1YQJEbGw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=hK4eUdItI4U:CuV1YQJEbGw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=hK4eUdItI4U:CuV1YQJEbGw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=hK4eUdItI4U:CuV1YQJEbGw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=hK4eUdItI4U:CuV1YQJEbGw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/hK4eUdItI4U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2007/10/05/switching-to-dreamhost/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2007/10/05/switching-to-dreamhost/</feedburner:origLink></item>
		<item>
		<title>If I were confectionery I would be a Dip Dab…</title>
		<link>http://feedproxy.google.com/~r/chris-miller/~3/M5CoqVrolxw/</link>
		<comments>http://chris-miller.org/archives/2007/09/04/if-i-were-confectionery-i-would-be-a-di-dab/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 12:20:16 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[confectionery]]></category>
		<category><![CDATA[Dip Dab]]></category>

		<guid isPermaLink="false">http://chris-miller.org/blog/archives/2007/09/04/if-i-were-confectionery-i-would-be-a-dib-dab/</guid>
		<description><![CDATA[&#8230; because they fucking rule!
]]></description>
			<content:encoded><![CDATA[<div class="center"><img src="/images/dib-dab.jpg" alt="DIP DAB!" /></div>
<p>&#8230; because they fucking rule!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/chris-miller?a=M5CoqVrolxw:oTGAwIPrYYE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=M5CoqVrolxw:oTGAwIPrYYE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=M5CoqVrolxw:oTGAwIPrYYE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=M5CoqVrolxw:oTGAwIPrYYE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=M5CoqVrolxw:oTGAwIPrYYE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=M5CoqVrolxw:oTGAwIPrYYE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=M5CoqVrolxw:oTGAwIPrYYE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=M5CoqVrolxw:oTGAwIPrYYE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/chris-miller?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/chris-miller?a=M5CoqVrolxw:oTGAwIPrYYE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/chris-miller?i=M5CoqVrolxw:oTGAwIPrYYE:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/chris-miller/~4/M5CoqVrolxw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://chris-miller.org/archives/2007/09/04/if-i-were-confectionery-i-would-be-a-di-dab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://chris-miller.org/archives/2007/09/04/if-i-were-confectionery-i-would-be-a-di-dab/</feedburner:origLink></item>
	</channel>
</rss>
