<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="http://feed.damieng.com/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feed.damieng.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" version="2.0">

<channel>
	<title>DamienG</title>
	
	<link>http://damieng.com</link>
	<description>A .NET developer in Vancouver</description>
	<pubDate>Tue, 13 May 2008 13:03:52 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feed.damieng.com/DamienG" type="application/rss+xml" /><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feed.damieng.com/DamienG" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="zune://subscribe/?DamienG=http%3A%2F%2Ffeed.damieng.com%2FDamienG" src="https://www.feedburner.com/fb/images/partners/sslchicklets/zune.gif">Subscribe with Zune Marketplace</feedburner:feedFlare><item>
		<title>Localizing MVC for ASP.NET views and master pages</title>
		<link>http://damieng.com/blog/2008/04/27/localizing-mvc-for-aspnet-views-and-master-pages</link>
		<comments>http://damieng.com/blog/2008/04/27/localizing-mvc-for-aspnet-views-and-master-pages#comments</comments>
		<pubDate>Sun, 27 Apr 2008 01:17:49 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[globalization]]></category>

		<category><![CDATA[localization]]></category>

		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=906</guid>
		<description>Microsoft's MVC for ASP.NET is still under serious development but at the moment support for localization is a little weak. Here's one approach that works with the 04/16 source-drop.
LocalizingWebFormViewLocator class
This class helps by trying to identify language-specific versions of views, user controls and master-pages where they exist, falling back to the generic one where necessary.

public [...]</description>
			<content:encoded><![CDATA[<p>Microsoft's <a href="http://www.codeplex.com/aspnet" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.codeplex.com');">MVC for ASP.NET</a> is still under serious development but at the moment support for localization is a little weak. Here's one approach that works with the 04/16 source-drop.</p>
<h3>LocalizingWebFormViewLocator class</h3>
<p>This class helps by trying to identify language-specific versions of views, user controls and master-pages where they exist, falling back to the generic one where necessary.</p>
<pre class="code">
<strong>public class</strong> LocalizingWebFormViewLocator : ViewLocator
{
	<strong>public </strong>LocalizingWebFormViewLocator() : <strong>base</strong>()
	{
		ViewLocationFormats = <strong>new</strong>[] { "~/Views/{1}/{0}.{2}aspx", "~/Views/{1}/{0}.{2}ascx",
			"~/Views/Shared/{0}.{2}aspx", "~/Views/Shared/{0}.{2}ascx" };
		MasterLocationFormats = <strong>new</strong>[] { "~/Views/{1}/{0}.{2}master", "~/Views/Shared/{0}.{2}master" };
	}

	<strong>protected override string </strong>GetPath(RequestContext requestContext, <strong>string</strong>[] locationFormats, <strong>string </strong>name)
	{
		<strong>string </strong>foundView = FindViewLocation(locationFormats, requestContext, name, CultureInfo.CurrentUICulture.Name + ".");
		<strong>if </strong>(String.IsNullOrEmpty(foundView))
			foundView = FindViewLocation(locationFormats, requestContext, name, "");
		<strong>return </strong>foundView;
	}

	<strong>protected string </strong>FindViewLocation(<strong>string</strong>[] locationFormats, RequestContext requestContext, <strong>string </strong>name, <strong>string </strong>cultureSuffix)
	{
		<strong>string </strong>controllerName = requestContext.RouteData.GetRequiredString("controller");
		foreach (<strong>string </strong>locationFormat <strong>in </strong>locationFormats) {
			<strong>string </strong>viewFile = <strong>string</strong>.Format(CultureInfo.InvariantCulture, locationFormat, name, controllerName, cultureSuffix);
			<strong>if </strong>(HostingEnvironment.VirtualPathProvider.FileExists(viewFile))
				<strong>return </strong>viewFile;
		}
		<strong>return </strong>null;
	}
}
</pre>
<h3>Using the class</h3>
<p>To use the class you must set the ViewLocator on the WebFormViewEngine to a new instance of LocalizingWebFormViewLocator (either in the constructor or in your common controller subclass) and ensure that any master pages are specified on the RenderView calls to ensure the localized version is detected.</p>
<pre class="code">
<strong>public class </strong>HomeController : Controller
{
	<strong>public </strong>HomeController() {
		((WebFormViewEngine)ViewEngine).ViewLocator = <strong>new </strong>LocalizingWebFormViewLocator();
	}

	<strong>public </strong>ActionResult Index() {
		<strong>return </strong>RenderView("Index", "Site");
	}

	<strong>public </strong>ActionResult About() {
		<strong>return </strong>RenderView("About", "Site");
	}
}
</pre>
<p>You must also ensure the thread's current UI culture is set. The easiest way to do this is to specify the following in your <em>web.config </em>file's <em>system.web </em>section which will pick it up automatically from the user's browser settings via the HTTP language-accept header.</p>
<pre class="code">
&lt;globalization responseEncoding="UTF-8" requestEncoding="UTF-8" culture="auto" uiCulture ="auto" /&gt;
</pre>
<p><img src="http://images.damieng.com/blog/MVCJapan.png" alt="MVC for ASP.NET default page in pseudo-Japanese via the Babelfish" style="float:right" /><br />
Then all you need to do is create views and master pages that have the culture name appended between the name and .aspx, e.g:</p>
<p>/Views/Home/Index.aspx (common fall-back for this view)<br />
/Views/Home/Index.ja.aspx (Japanese view)<br />
/Views/Home/Index.en-GB.aspx (British English view)</p>
<p>/Views/Shared/Site.Master (common fall-back for this masterpage)<br />
/Views/Shared/Site.ja.Master (Japanese masterpage)</p>
<h3>Caveats</h3>
<p>There are some limitations to this solution:</p>
<h4>Only primary language is attempted</h4>
<p>Only the user's primary language specified in their browser is attempted despite browsers having a complete list in order of preference. Ideally we would scan down this entire list before giving up but that would need more code and there is the issue of whether scanning for several languages across several folders could be too much of a performance hit.</p>
<h4>Specifying the masterpage on RenderView</h4>
<p>It would be nice if you didn't have to specify the masterpage on renderview but if you do not then the ViewLocator never gets called to resolve the actual masterpage address. This may be for backward compatibility within MVC.</p>
<h4>Creating files in Visual Studio</h4>
<p>Visual Studio 2008 seems to get a little confused if you create a Index.ja.aspx or Site.ja.aspx - whilst the files are created okay the names are not and you will need to adjust the class names to ensure they don't conflict and make sure the opening declaration on the .aspx file points to the right code-behind page and inherits from the correct name.</p>
<p class="new">Of course the beauty of this approach is you can mix-and-match using dedicated views where required and <a href="http://damieng.com/blog/2006/11/04/globalising-net-web-applications" >localising labels in the fall-back view</a> when it isn't.
</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=LHbIeg"><img src="http://feed.damieng.com/~f/DamienG?i=LHbIeg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780069" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/27/localizing-mvc-for-aspnet-views-and-master-pages/feed</wfw:commentRss>
		</item>
		<item>
		<title>Boot Camp 2.1, VMware Fusion 1.1.2 and MacBook Pro firmware</title>
		<link>http://damieng.com/blog/2008/04/24/boot-camp-21-vmware-fusion-112-and-macbook-pro-firmware</link>
		<comments>http://damieng.com/blog/2008/04/24/boot-camp-21-vmware-fusion-112-and-macbook-pro-firmware#comments</comments>
		<pubDate>Thu, 24 Apr 2008 23:47:05 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Apple]]></category>

		<category><![CDATA[boot-camp]]></category>

		<category><![CDATA[MacBook-Pro]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=905</guid>
		<description>Boot Camp 2.1
Apple have released Boot Camp 2.1 which finally includes official 64-bit support on Vista and support for Windows XP Service Pack 3.
This update may mean that 3D games will play without locking up or installing NVidia's own drivers and that the trackpad functions correctly again (broken since Boot Camp 1.x)
MacBook Pro Firmware 1.5.1
Apple's [...]</description>
			<content:encoded><![CDATA[<h3>Boot Camp 2.1</h3>
<p>Apple have released <a href="http://www.apple.com/bootcamp" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.apple.com');">Boot Camp 2.1</a> which finally includes official 64-bit support on Vista and support for Windows XP Service Pack 3.</p>
<p>This update may mean that 3D games will play without locking up or installing NVidia's own drivers and that the trackpad functions correctly again (broken since Boot Camp 1.x)</p>
<h3>MacBook Pro Firmware 1.5.1</h3>
<p>Apple's <a href="http://www.apple.com/support/downloads/macbookproefifirmwareupdate151.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.apple.com');">MacBook Pro Firmware Update 1.5.1</a> applies to all recent MacBook Pro's including the ones with MBP31.0070.B05 firmware that the 1.5 update failed to upgrade leaving 17" owners on MBP31.0070.B07.</p>
<p class="new">The new firmware does not fix a problem where <a href="http://discussions.apple.com/thread.jspa?threadID=1206438&#038;tstart=105" onclick="javascript:pageTracker._trackPageview('/outbound/article/discussions.apple.com');">trackpad input would become jerky after suspending/sleeping</a> and turning Airport off would make it even worse.</p>
<h3>VMware Fusion 1.1.2</h3>
<p><a href="http://www.vmware.com/download/fusion/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.vmware.com');">VMware Fusion 1.1.2</a> is just out and includes a <a href="http://blogs.vmware.com/teamfusion/2008/04/vmware-fusion-1.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/blogs.vmware.com');">host of fixes and improvements</a> including:</p>
<ul>
<li>Windows XP Service Pack 3</li>
<li>Network and USB compatibility</li>
<li>Time Machine compatibility</li>
</ul>
<p>Now that VMware lets Time Machine backup the VM image file and that Time Machine backs up modified files in their entirety you might want to exclude ~/Documents/Virtual Machines it unless you fancy loosing several gigabytes per hour whilst using a VM. Of course if you have your VM running off it's own partition to allow Boot Camp too then that's not an issue.</p>
<p>With any luck VMware will figure out a way of Time Machine backing up changed individual files within the Windows filesystem... </p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=CXQL4g"><img src="http://feed.damieng.com/~f/DamienG?i=CXQL4g" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780070" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/24/boot-camp-21-vmware-fusion-112-and-macbook-pro-firmware/feed</wfw:commentRss>
		</item>
		<item>
		<title>WordPress 2.5 notes from the field</title>
		<link>http://damieng.com/blog/2008/04/18/wordpress-25-notes-from-the-field</link>
		<comments>http://damieng.com/blog/2008/04/18/wordpress-25-notes-from-the-field#comments</comments>
		<pubDate>Fri, 18 Apr 2008 13:59:04 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Internet]]></category>

		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=904</guid>
		<description>It's been a few weeks since I upgraded to WordPress 2.5 and whilst the upgrade went well it hasn't been all plain sailing.
New and changed
Manage files removed
The Manage &amp;#62; Files administration function has been silently removed despite still appearing in the on-line documentation.
If you don't have FTP access this was the only way to modify [...]</description>
			<content:encoded><![CDATA[<p>It's been a few weeks since I upgraded to WordPress 2.5 and whilst the upgrade went well it hasn't been all plain sailing.</p>
<h3>New and changed</h3>
<h4>Manage files removed</h4>
<p>The <em>Manage &gt; Files</em> administration function has been silently removed despite still appearing in the <a href="http://codex.wordpress.org/Design_Theme_Editor_SubPanel" onclick="javascript:pageTracker._trackPageview('/outbound/article/codex.wordpress.org');">on-line documentation</a>.</p>
<p>If you don't have FTP access this was the only way to modify your .htaccess and other important files without installing additional software. I can understand such a powerful function could be abused but an option to turn it back on or even a warning about its removal in the upgrade notes/read-me would have been useful.</p>
<p>Hopefully somebody will repackage the old functionality into a plug-in.</p>
<h4>New look administration</h4>
<p>I'm not sold on the new administration theme look but Dean J Robinson has crafted <a href="http://deanjrobinson.com/projects/fluency-admin/" onclick="javascript:pageTracker._trackPageview('/outbound/article/deanjrobinson.com');">a plug-in called Fluency</a> that refines the styling.</p>
<p>Generally usability in the administration user interface is better, the write post screen makes a lot more sense and the category &amp; tag management is more logical.</p>
<h4>Auto update plug-ins</h4>
<p>I love this new feature, it shows you when a new version of a plug-in is available and then lets you automatically update. It isn't without issue however, specifically it:<br />
<img src="http://images.damieng.com/blog/WordPress25AutoUpdate.png" style="float:right" alt="Screen-shot of WordPress 2.5's automatic plug-in upgrade feature" /></p>
<ol>
<li>overwrites modified local versions without warning</li>
<li>may go wrong (it "upgraded" my wp-PostViews to wp-DBManager)</li>
<li>does not provide a roll-back or revert facility</li>
</ol>
<p>Still it's a v1 feature and I'm sure it'll get some refinement in 2.6.</p>
<h3>Compatibility</h3>
<h4>Live search broken (Redoable theme)</h4>
<p>The Ajax-enabled live search is broken in <a href="http://deanjrobinson.com/projects/redoable/" onclick="javascript:pageTracker._trackPageview('/outbound/article/deanjrobinson.com');">Redoable</a> although the normal search works. There have been no signs of an update in quite despite an un-patched <a href="http://secunia.com/advisories/25310/" onclick="javascript:pageTracker._trackPageview('/outbound/article/secunia.com');">HTML injection vulnerability</a>.</p>
<h4>Gregarious</h4>
<p>This social bookmarking plug-in is broken in 2.5 and the author is <a href="http://lipidity.com/web/wordpress/wp-plugin-gregarious/" onclick="javascript:pageTracker._trackPageview('/outbound/article/lipidity.com');">too busy to fix it right now</a> and the search for an alternative led me to Joost and his <a href="http://www.joostdevalk.nl/wordpress/sociable/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.joostdevalk.nl');">Sociable plug-in</a>.</p>
<p>I'm not 100% happy with the output from Sociable right now but that can wait until my new theme is finished. </p>
<h3>Other tweaks</h3>
<p>These weren't caused by the 2.5 upgrade but once you start messing with one thing there's always that urge to fix other things you know aren't right.</p>
<h4>Google Analytics</h4>
<p>Whilst testing my site I found XHTML compliance was broken. It turns out that Joost's <a href="http://www.joostdevalk.nl/wordpress/google-analytics/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.joostdevalk.nl');">Google Analytics for WordPress</a> incorrectly rewrites the hyperlinks when they parent another element such as an image. Putting on my PHP hacking hat I managed to fix it by editing the plug-in and changing the last line of <strong>ga_parse_link</strong> to:</p>
<pre class="code"><strong>return </strong>'&lt;a ' . $matches[1] . 'href="' . $matches[2] . '//' . $matches[3] . '"' . ' ' . $coolBit . $matches[4] . '&gt;' . $matches[5] . '&lt;/a&gt;';</pre>
<h4>Subscriber counts</h4>
<p>My feed subscriber counts have been bugging me for a while as they jump up and down seemingly at random. In fact, it can be traced down to two things:</p>
<ol>
<li>If you base it on less than 5 days of activity you'll get the weekend dip<br />Solution: Count 7 days worth of individual subscribers</li>
<li>Google Reader etc. sometimes stop passing the subscriber count from time to time<br />Solution: Use single most recent multi-subscriber header for each service/feed in the last 30 days </li>
</ol>
<p>If you want to do the same you need to edit the Feed Statistics plug-in and change the how_many_subscribers function to:</p>
<pre class="code">
$q = "SELECT subscribers, CASE WHEN subscribers = 1 THEN identifier ELSE CONCAT(identifier, feed) END AS ident
	FROM ".$table_prefix."feed_subscribers  WHERE (
			(subscribers = 1 AND
			date > '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days")))."' ) OR
			(subscribers = 1 AND LOCATE('###',identifier) != 0 AND
			date > '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days") * 3))."' ) OR
			(subscribers > 1 AND date > '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * 30 * 3))."' ) )
	ORDER BY ident ASC, date DESC";
</pre>
<p>This should help but it's not ideal with individual readers counted more than once if they change IP and groups counted as one if they are sharing an IP/NAT.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=4qCIsg"><img src="http://feed.damieng.com/~f/DamienG?i=4qCIsg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780071" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/18/wordpress-25-notes-from-the-field/feed</wfw:commentRss>
		</item>
		<item>
		<title>Four Windows apps for home-sick Mac users</title>
		<link>http://damieng.com/blog/2008/04/17/four-windows-apps-for-home-sick-mac-users</link>
		<comments>http://damieng.com/blog/2008/04/17/four-windows-apps-for-home-sick-mac-users#comments</comments>
		<pubDate>Thu, 17 Apr 2008 11:08:16 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Apple]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[dash]]></category>

		<category><![CDATA[digsby]]></category>

		<category><![CDATA[e text editor]]></category>

		<category><![CDATA[libra]]></category>

		<category><![CDATA[windows applications]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=893</guid>
		<description>Libra (like Delicious Library)
Delicious Library is a DVD, game and book organisation tool I've been using since my PowerBook G4 and a 2.0 version has been dangling from Wil Shipley's mouth longer than I care to remember.
Windows users however will find Libra a very interesting clone and it features some of the same great features [...]</description>
			<content:encoded><![CDATA[<h3>Libra (like Delicious Library)</h3>
<p><a href="http://www.delicious-monster.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.delicious-monster.com');">Delicious Library</a> is a DVD, game and book organisation tool I've been using since my PowerBook G4 and a 2.0 version has been dangling from Wil Shipley's mouth longer than I care to remember.</p>
<p>Windows users however will find <a href="http://www.getlibra.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.getlibra.com');">Libra</a> a very interesting clone and it features some of the same great features such as bar-code scanning via a web cam, tracking loans, a rendered virtual shelf and fast queries.</p>
<p>Unlike Delicious Library 1.x it also features sharing your library on-line, tweaking the types and rendering and a more advanced query engine and is available free for non-commercial use.</p>
<h3>E Text Editor (like TextMate)</h3>
<p><a href="http://macromates.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/macromates.com');">TextMate</a> is a programming editor for the Mac that can be extended through the use of Bundles to provide additional syntax highlighting, menu options and command processing. It is fast, feels lightweight and therefore incredibly customisable all of which contribute to it's success.</p>
<p><a href="http://www.e-texteditor.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.e-texteditor.com');">E Text Editor</a> is a Windows clone of TextMate that doesn't just mimic the user interface but also provides compatibility with TextMate bundles allowing you to take advantage of some of the many great enhancements available and at $34 is almost half the price although it doesn't feel as snappy as it's Mac counterpart.</p>
<h3>Digsby (like Adium)</h3>
<p><a href="http://www.adiumx.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.adiumx.com');">Adium</a> is my instant messaging client of choice allowing me a single app to manage MSN, ICQ and Google Talk (I wish they would get basic Skype support in there too).</p>
<p><a href="http://www.digsby.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.digsby.com');">Digsby</a> provides similar functionality whilst also throwing social networking (Facebook, Twitter) and email notification (Hotmail, GMail, Yahoo Mail etc.) into the mix.</p>
<h3>Dash (like Quicksilver)</h3>
<p><a href="http://docs.blacktree.com/quicksilver/what_is_quicksilver" onclick="javascript:pageTracker._trackPageview('/outbound/article/docs.blacktree.com');">QuickSilver</a> provides a quick keyboard-based entry system for performing a wide variety of tasks and selections within Mac OS X and what it doesn't do can often be added with plug-ins.</p>
<p><a href="http://www.trydash.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.trydash.com');">Dash</a> achieves a similar effect on Windows but I have to admit I'm not really sold on either yet. I think the movement from keyboard to mouse and back every now and then must be a good break for your hands if not for your productivity...</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=qHoApg"><img src="http://feed.damieng.com/~f/DamienG?i=qHoApg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780072" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/17/four-windows-apps-for-home-sick-mac-users/feed</wfw:commentRss>
		</item>
		<item>
		<title>More screen-shots of Envy Code R preview #7</title>
		<link>http://damieng.com/blog/2008/04/14/more-screen-shots-of-envy-code-r-preview-7</link>
		<comments>http://damieng.com/blog/2008/04/14/more-screen-shots-of-envy-code-r-preview-7#comments</comments>
		<pubDate>Mon, 14 Apr 2008 08:23:51 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Fonts]]></category>

		<category><![CDATA[Coding-fonts]]></category>

		<category><![CDATA[Envy-Code-R]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=902</guid>
		<description>Work on my Envy Code R programming font has resumed and I've spent hours playing with the hinting process to ensure it looks good at sizes above and below 10 point:

These look great - even more so when you consider there are no embedded bitmaps and very few delta hints.
There is still a lot of [...]</description>
			<content:encoded><![CDATA[<p>Work on my Envy Code R programming font has resumed and I've spent hours playing with the hinting process to ensure it looks good at sizes above and below 10 point:</p>
<p><img src="http://images.damieng.com/blog/EnvyCodeR-PR7-none.png" alt="Screen-shot of Envy Code R PR7 without smoothing on Windows" /><img src="http://images.damieng.com/blog/EnvyCodeR-PR7-standard.png" alt="Screen-shot of Envy Code R PR7 with standard smoothing on Windows" /><img src="http://images.damieng.com/blog/EnvyCodeR-PR7-ClearType.png" alt="Screen-shot of Envy Code R PR7 with ClearType on Windows" /></p>
<p>These look great - even more so when you consider there are no embedded bitmaps and very few delta hints.</p>
<p>There is still a lot of work to do - all the foreign characters, symbols and box-drawing characters (another 600 glyphs) require hinting and I should test it on the Mac, Java and Flash font rendering engines to make sure there are no show-stoppers there.</p>
<p>Preview 7 will consist of <strike>of just a plain style</strike> regular and bold because I need to get this out - it's been too long since the last release. Preview 8 will add back italics and the Visual Studio italics-as-bold hack shortly afterwards.</p>
<p class="new">Check out<a href="http://www.talios.com/envy_code_r_pr7_vs_pr6__preview_thoughts.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.talios.com');"> Talios's shots using Java/Linux</a> and <a href="http://priscimon.com/blog/2008/04/17/latest-preview-of-envy-code-r-preview-7/" onclick="javascript:pageTracker._trackPageview('/outbound/article/priscimon.com');">Eddy Young's shots in NetBeans</a>.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=RRX9Pg"><img src="http://feed.damieng.com/~f/DamienG?i=RRX9Pg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780073" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/14/more-screen-shots-of-envy-code-r-preview-7/feed</wfw:commentRss>
		</item>
		<item>
		<title>Using LINQ to foreach over an enum in C#</title>
		<link>http://damieng.com/blog/2008/04/10/using-linq-to-foreach-over-an-enum-in-c</link>
		<comments>http://damieng.com/blog/2008/04/10/using-linq-to-foreach-over-an-enum-in-c#comments</comments>
		<pubDate>Thu, 10 Apr 2008 15:35:15 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[CSharp]]></category>

		<category><![CDATA[linq]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=901</guid>
		<description>I can't be the only person in the world who wants to foreach over the values of an enum otherwise Enum.GetValues(Type enumType) wouldn't exist in the framework. Alas it didn't get any generics love in .NET 2.0 and unhelpfully returns an array.
Thanks to the power of LINQ you can do this:
foreach(CustomerTypes customerType in Enum.GetValues(typeof(CustomerTypes)).Cast&amp;#60;CustomerTypes&amp;#62;())
That is [...]</description>
			<content:encoded><![CDATA[<p>I can't be the only person in the world who wants to foreach over the values of an enum otherwise Enum.GetValues(Type enumType) wouldn't exist in the framework. Alas it didn't get any generics love in .NET 2.0 and unhelpfully returns an array.</p>
<p>Thanks to the power of LINQ you can do this:</p>
<pre class="code"><strong>foreach</strong>(CustomerTypes customerType <strong>in </strong>Enum.GetValues(<strong>typeof</strong>(CustomerTypes)).Cast&lt;CustomerTypes&gt;())</pre>
<p>That is okay, but this is more concise:</p>
<pre class="code"><strong>foreach</strong>(CustomerTypes customerType <strong>in </strong>Enums.Get&lt;CustomerTypes&gt;())</pre>
<p>The tiny class to achieve that is, of course:</p>
<pre class="code">
<strong>using </strong>System.Collections.Generic;
<strong>using </strong>System.Linq;

<strong>public static class</strong> Enums {
<strong>	public static </strong>IEnumerable&lt;T&gt; Get&lt;T&gt;() {
		<strong>return </strong>System.Enum.GetValues(<strong>typeof</strong>(T)).Cast&lt;T&gt;();
	}
}</pre>
<p>Great.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=xAeJsg"><img src="http://feed.damieng.com/~f/DamienG?i=xAeJsg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780074" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/10/using-linq-to-foreach-over-an-enum-in-c/feed</wfw:commentRss>
		</item>
		<item>
		<title>Calendar spam, the next nuisance?</title>
		<link>http://damieng.com/blog/2008/04/07/calendar-spam-the-next-nuisance</link>
		<comments>http://damieng.com/blog/2008/04/07/calendar-spam-the-next-nuisance#comments</comments>
		<pubDate>Mon, 07 Apr 2008 20:57:24 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Internet]]></category>

		<category><![CDATA[google calendar]]></category>

		<category><![CDATA[scam]]></category>

		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=900</guid>
		<description>Tomorrow morning at 5am where I can enjoy an advanced fee scam! I've had these in email format before but never in my calendar...

Oddly there are no emails about this in my inbox and I sure didn't tell it to add one to my calendar. As there is no 'Report Spam' link for calendar entries [...]</description>
			<content:encoded><![CDATA[<p>Tomorrow morning at 5am where I can enjoy an <a href="http://en.wikipedia.org/wiki/Advance_fee_fraud" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');">advanced fee scam</a>! I've had these in email format before but never in my calendar...</p>
<p><img src="http://images.damieng.com/blog/CalendarSpam.png" alt="Screen-shot of some spam in my calendar" width="645" height="365" /></p>
<p>Oddly there are no emails about this in my inbox and I sure didn't tell it to add one to my calendar. As there is no 'Report Spam' link for calendar entries I had to return to calendar view, delete it from there and hope nothing else shows up.</p>
<p class="new"><a href="http://lifehacker.com/377925/keep-spammers-out-of-your-google-calendar" onclick="javascript:pageTracker._trackPageview('/outbound/article/lifehacker.com');">Digital Inspiration</a> also wrote about this and provide a link to <a href="http://www.google.com/support/calendar/bin/request.py?page=&#038;contact_type=abuse" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');">Google's spam reporting page</a>.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=eMVgmg"><img src="http://feed.damieng.com/~f/DamienG?i=eMVgmg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780075" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/07/calendar-spam-the-next-nuisance/feed</wfw:commentRss>
		</item>
		<item>
		<title>Windows 2008 Server on my MacBook Pro</title>
		<link>http://damieng.com/blog/2008/04/02/windows-2008-server-on-my-macbook-pro</link>
		<comments>http://damieng.com/blog/2008/04/02/windows-2008-server-on-my-macbook-pro#comments</comments>
		<pubDate>Wed, 02 Apr 2008 13:37:06 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[windows 2008 server]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=894</guid>
		<description>A troublesome disk (a story for another time) has forced me to reinstall my MacBook Pro and review my Windows partition.
My Boot Camp partition was running Vista Ultimate x86 which felt sluggish, ignored the last 1GB and bugged me with UAC. One Windows update kept failing to install which also prevented SP1 from completing.
Apple's Boot [...]</description>
			<content:encoded><![CDATA[<p>A troublesome disk (a story for another time) has forced me to reinstall my MacBook Pro and review my Windows partition.</p>
<p>My Boot Camp partition was running Vista Ultimate x86 which felt sluggish, ignored the last 1GB and bugged me with UAC. One Windows update kept failing to install which also prevented SP1 from completing.</p>
<p>Apple's Boot Camp doesn't support 64-bit Windows (except on the Mac Pro) and my 64-bit experiences have been unpleasant so far (no Flash for IE x64, limited 64-bit shell extensions, Live! refusing to install, drivers etc.) The increased x64 memory consumption would also be an issue when running in a 1.5GB virtual machine via Parallels or VMware Fusion.</p>
<p>Windows XP was one option but losing IIS7 and DirectX 10 would see me reinstalling Vista within weeks so I decided to try Windows 2008 Server x86.</p>
<p>Boot Camp happily accepted the 2008 Server x86 CD where I chose the BOOTCAMP partition, formatting it as NTFS and electing for a standard installation. The Boot Camp drivers subsequently installed without complaint, all 4GB of RAM was accessible and there are no 64-bit compatibility issues.</p>
<p>Microsoft are giving away 1 year evaluation copies of Windows 2008 Enterprise Server x86 as part of their Heroes Happen Here launch program for Windows 2008, SQL Server 2008 and Visual Studio 2008 if you don't happen to have an MSDN subscription to hand. There are however a few tweaks you need to do to get a more desktop-like experience:</p>
<h3>Install desktop features</h3>
<p>Head into <em>Server Manager</em> and <em>Add Features</em> then choose <em>Desktop Experience</em> to install Windows Media Player, Aero etc.</p>
<p>Go into <em>Services </em>and set the <em>Themes </em>service to <em>Automatic </em>and <em>Start </em>it to make themes available and then choose <em>Browse...</em> from the <em>Theme Settings</em> in <em>Personalisation </em>to select <em> %windir%\Resources\Themes\Aero.theme</em></p>
<h3>Install wireless networking</h3>
<p>This one had me stumped for a while as I thought my wireless card/drivers weren't working. The reality is that 2008 Server has wireless networking removed by default so head into <em>Server Manager &gt; Add Features &gt; Wireless LAN Service </em>to install it.</p>
<h3>Enabling hibernate</h3>
<p>Open a command prompt and enter:</p>
<pre class="code">powercfg.exe /hibernate on</pre>
<h3>Remove annoying shutdown</h3>
<p>Head into the registry to <em>HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Reliability</em> and change the <em>ShutdownReasonOn </em>DWORD key to <em>0</em>.</p>
<h3>Relaxing local password policy</h3>
<p>A controversial change I'm sure but I'd rather choose something complex and unique that will last 90+ days than something memorable every 30.  Head into <em>Local Security Policy</em> &gt; <em>Account Policies</em> &gt; <em>Password Policy</em> &gt; <em>Maximum password age</em> and change it to something more reasonable.</p>
<h3>Going further</h3>
<p>A great guide with <a href="http://www.win2008workstation.com/wordpress/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.win2008workstation.com');">screen-shots on additional tweaks for a more workstation-like experience</a> also exists - wish I known about that earlier!</p>
<div class="new"><a href="http://codeclimber.net.nz/archive/2008/04/07/Running-Win2008-on-my-Mac.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/codeclimber.net.nz');">Simone Chiaretta</a> has highlighted the that tap-to-click is absent and there are some Bluetooth issues stemming from missing drivers.</div>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=eluH5g"><img src="http://feed.damieng.com/~f/DamienG?i=eluH5g" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780076" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/02/windows-2008-server-on-my-macbook-pro/feed</wfw:commentRss>
		</item>
		<item>
		<title>Joining the LINQ to SQL team at Microsoft</title>
		<link>http://damieng.com/blog/2008/04/01/joining-the-linq-to-sql-team-at-microsoft</link>
		<comments>http://damieng.com/blog/2008/04/01/joining-the-linq-to-sql-team-at-microsoft#comments</comments>
		<pubDate>Tue, 01 Apr 2008 15:12:24 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[Personal]]></category>

		<category><![CDATA[linq-to-sql]]></category>

		<guid isPermaLink="false">http://damieng.com/?p=899</guid>
		<description>I've been quiet on my blog lately largely because I have been preparing to change job and relocate half-way around the world to Vancouver in the beautiful province of British Columbia (where I spent my 2004 summer holiday).
In February I travelled out to Redmond for three days of interviews (one position grew to two, then [...]</description>
			<content:encoded><![CDATA[<p>I've been quiet on my blog lately largely because I have been preparing to change job and relocate half-way around the world to Vancouver in the beautiful province of British Columbia (where I spent my 2004 summer holiday).</p>
<p>In February I travelled out to Redmond for three days of interviews (one position grew to two, then three). Having read the <a href="http://blogs.msdn.com/jobsblog/" onclick="javascript:pageTracker._trackPageview('/outbound/article/blogs.msdn.com');">Microsoft Jobs Blog</a> I was prepared for long hard days but in reality the process was incredibly enjoyable and exciting.</p>
<p>So much so I wanted to find a desk and move in right then.</p>
<p>With some luck I also found myself at Hanselman's geek dinner which involved some great discussions and the chance to meet <a href="http://www.hanselman.com/blog/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.hanselman.com');">Scott</a> himself, <a href="http://bradwilson.typepad.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/bradwilson.typepad.com');">Brad Wilson</a> and <a href="http://www.nikhilk.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.nikhilk.net');">Nikhil Kothari</a> who I knew from .NET on-line community as well as some 35 other developers from both within Microsoft and the outside world. It was one fun evening and my thanks go to Scott for kindly driving me back to my hotel in Redmond town centre.</p>
<p>Many white-boards and a few lunches later (including an unexpected one with <a href="http://haacked.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/haacked.com');">Phil Haack</a>, Nikhil and two more guys from ASP.NET team - I wish I could remember all the names of the people I met!) I found myself with the hard task of choosing a position.</p>
<p>I settled on a developer role within the <a href="http://msdn2.microsoft.com/en-us/library/bb425822.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/msdn2.microsoft.com');">LINQ to SQL</a> team starting mid-May and am counting down the days...</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=ChjAKg"><img src="http://feed.damieng.com/~f/DamienG?i=ChjAKg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780077" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/04/01/joining-the-linq-to-sql-team-at-microsoft/feed</wfw:commentRss>
		</item>
		<item>
		<title>Visual Studio, Windows Server and SQL Server 2008 launch in Guernsey</title>
		<link>http://damieng.com/blog/2008/03/19/visual-studio-windows-server-and-sql-server-2008-launch-in-guernsey</link>
		<comments>http://damieng.com/blog/2008/03/19/visual-studio-windows-server-and-sql-server-2008-launch-in-guernsey#comments</comments>
		<pubDate>Wed, 19 Mar 2008 10:08:43 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Guernsey]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[heroes happen here]]></category>

		<category><![CDATA[visual studio 2008]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/03/19/visual-studio-windows-server-and-sql-server-2008-launch-in-guernsey</guid>
		<description>The various Heroes Happen Here community events in the UK/USA to celebrate the launch of Visual Studio 2008 etc. made me envious that we don't get such events and goodies here on the little island of Guernsey so I thought I'd so something about it!
We at the Guernsey Software Developer Forum are hosting a community [...]</description>
			<content:encoded><![CDATA[<p>The various Heroes Happen Here community events in the UK/USA to celebrate the launch of Visual Studio 2008 etc. made me envious that we don't get such events and goodies here on the little island of Guernsey so I thought I'd so something about it!</p>
<p>We at the <a href="http://developers.org.gg" onclick="javascript:pageTracker._trackPageview('/outbound/article/developers.org.gg');">Guernsey Software Developer Forum</a> are hosting a <a href="http://www.heroescommunitylaunch.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.heroescommunitylaunch.com');">community event in conjunction with Microsoft</a> to celebrate the launch of Visual Studio 2008, Windows Server 2008 and SQL Server 2008.</p>
<p>The event starts at 6:30pm on March 27th (next Thursday) at <a href="http://www.lesrocquettesguernsey.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.lesrocquettesguernsey.com');">La Rocquettes hotel</a> in St. Peter Port, Guernsey.</p>
<p>We will be giving away a bunch of goodies including the Heroes Happen Here launch packs with promotional copies of Visual Studio 2008 Standard, Windows 2008 Enterprise Server and SQL Server 2008 Developer as well as demonstrating some of the new features of Visual Studio 2008 and .NET 3.5.</p>
<p><img src="http://www.microsoft.com/heroeshappenhere/images/hero_event.jpg" alt="Heroes Happen Here launch event" style="align:center" /></p>
<p>I'm hoping this event will be bigger than normal GSDF events given the cool stuff we are giving away and the interest from non-developers in Windows 2008 and SQL Server 2008 so tell your friends (if you're in Guernsey of course)</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=rAkfSg"><img src="http://feed.damieng.com/~f/DamienG?i=rAkfSg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780078" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/03/19/visual-studio-windows-server-and-sql-server-2008-launch-in-guernsey/feed</wfw:commentRss>
		</item>
		<item>
		<title>Safari 3.1 includes developer tools</title>
		<link>http://damieng.com/blog/2008/03/18/safari-31-includes-developer-tools</link>
		<comments>http://damieng.com/blog/2008/03/18/safari-31-includes-developer-tools#comments</comments>
		<pubDate>Tue, 18 Mar 2008 13:58:54 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Cocoa]]></category>

		<category><![CDATA[Safari]]></category>

		<category><![CDATA[webkit]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/03/18/safari-31-includes-developer-tools</guid>
		<description>Safari 3.1 has just been released and besides the partial CSS3 (fonts) and partial HTML5 (media tags, off-line storage) support there are some new developer tools included.
Safari has had a hidden Debug menu for some time and WebKit featured developer tools but with 3.1 Apple have unleashed them to the masses.
Head into Preferences &gt; Advanced [...]</description>
			<content:encoded><![CDATA[<p><a href="http://www.apple.com/safari/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.apple.com');">Safari 3.1 has just been released</a> and besides the partial CSS3 (fonts) and partial HTML5 (media tags, off-line storage) support there are some new developer tools included.<br />
Safari has had a hidden Debug menu for some time and WebKit featured developer tools but with 3.1 Apple have unleashed them to the masses.</p>
<p>Head into <em>Preferences </em>> <em>Advanced </em>and choose <em>Show Develop menu in menu bar </em> to get this new Develop menu.</p>
<p>It includes:</p>
<ul>
<li>Open Page With (Internet Explorer, Firefox 2/3, Camino, MobileSafari etc.)</li>
<li>User Agent switching</li>
<li>Show Web Inspector (inspect element)</li>
<li>Show Error Console (including HTML errors)</li>
<li>Show Network Timeline (like Firebug's network view)</li>
<li>Show Snippet Editor</li>
<li>Disable Caches/Images/Styles</li>
<li>Disable JavaScript/Runaway JavaScript Timer/Site-specific hacks</li>
</ul>
<p>Here's the Network Timeline in action on OS X:<br />
<img src="http://images.damieng.com/blog/Safari31Net.png" alt="Screen-shot of Safari 3.1's Network Timeline on Mac OS X" /></p>
<p>There are some odd drawing issues within the snippet editor and inspecting from the inspector on Windows but with this, Firebug and <a href="http://msdn2.microsoft.com/en-us/library/cc304131(VS.85).aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/msdn2.microsoft.com');">Internet Explorer 8's Developer Tools</a> we're spoilt for choice!</p>
<p><em>[)amien</em><br />
<sub>And no, it doesn't pass the rather abstract <a href="http://acid3.acidtests.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/acid3.acidtests.org');">Acid3 test</a></sub></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=KT4GIg"><img src="http://feed.damieng.com/~f/DamienG?i=KT4GIg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780079" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/03/18/safari-31-includes-developer-tools/feed</wfw:commentRss>
		</item>
		<item>
		<title>Facebook’s bizarre search algorithm</title>
		<link>http://damieng.com/blog/2008/03/18/facebooks-bizarre-search-algorithm</link>
		<comments>http://damieng.com/blog/2008/03/18/facebooks-bizarre-search-algorithm#comments</comments>
		<pubDate>Tue, 18 Mar 2008 13:52:23 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Internet]]></category>

		<category><![CDATA[facebook]]></category>

		<category><![CDATA[search algorithm]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/03/18/facebooks-bizarre-searching-algorithm</guid>
		<description>I've been having some problems trying to locate friends on Facebook and now I know why.
Facebook's search algorithm is the most bizarre search algorithm known to man.
If you know how to spell their name exactly and type it all in lower-case that works fine. As soon as you introduce a capital or partial then spacing, [...]</description>
			<content:encoded><![CDATA[<p>I've been having some problems trying to locate friends on Facebook and now I know why.</p>
<p>Facebook's search algorithm is the most bizarre search algorithm known to man.</p>
<p>If you know how to spell their name exactly and type it all in lower-case that works fine. As soon as you introduce a capital or partial then spacing, which letters are capitalised and the length of the match all seem to play their part in the bizarre matching process that never delivers what you would expect although does deliver the same results every time.</p>
<p>I'll use my name as an example (~ indicates additional space character):</p>
<h3>Damien Guard / damien guard </h3>
<p>Finds me, two coast guards named Nick Zieser and Patrick Fernandez, a person called Romy Domingo and two groups that match on description.  The other people have nothing in the "Matches" field to indicate why they were bought in but not too strange.</p>
<h3>Damie guar</h3>
<p>Finds me, Damien Guarnieri and Kyle Damien Guarco. This one makes sense.</p>
<h3>damien guar / ~damie guar</h3>
<p>Should return same as above but oddly excludes Kyle.</p>
<h3>Damien Guar / damie Guar~ / ~Damie Guard / dami Guard~ / dami guar / dami guard / dami guar</h3>
<p>No matches at all.</p>
<h3>damie guar</h3>
<p>Curiously only Damien Guarnieri. Worrying given that many people search with lower case.</p>
<h3>damie Guar</h3>
<p>Damien Guarnieri and Kyle Damien Guarco only. No sign of me.</p>
<h3>dami gua</h3>
<p>The above two plus Damian La Guardia but still no sign of me or Damian Guard.</p>
<h3>Damie guard / damie guard / damie Guard / Damie Guard / damien Guar / ~damie Guar~</h3>
<p>Just me.</p>
<h3>dam guar</h3>
<p>Finds a Damian Guard in Tulsa but nobody else.</p>
<h3>~dami gua~</h3>
<p>Includes most of the people mentioned here but excludes my partial-namesake Damian Guard.</p>
<h3>Damia Guar</h3>
<p>Finds Damian Guardia and Damian La Guardia which didn't show for "Dami Guar" yet excludes Damian Guard again.</p>
<p>It's likely a case of devs trying to be intelligent and ending up with a usability nightmare but until they get their act together be prepared to try all sorts of combinations for partial matching.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=4nMcfg"><img src="http://feed.damieng.com/~f/DamienG?i=4nMcfg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780080" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/03/18/facebooks-bizarre-search-algorithm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Access AIM and ICQ via Google Chat</title>
		<link>http://damieng.com/blog/2008/03/18/access-aim-and-icq-via-google-chat</link>
		<comments>http://damieng.com/blog/2008/03/18/access-aim-and-icq-via-google-chat#comments</comments>
		<pubDate>Tue, 18 Mar 2008 00:25:24 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Internet]]></category>

		<category><![CDATA[aim]]></category>

		<category><![CDATA[google chat]]></category>

		<category><![CDATA[icq]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/03/18/access-aim-and-icq-via-google-chat</guid>
		<description>Google just added support for AIM to Google Chat so you can just enter your login details and chat right away from your GMail or Google Apps for Domains account as if they were Google Chat users.
Better yet you can actually enter your ICQ number in the user-name box, fill in your password and integrate [...]</description>
			<content:encoded><![CDATA[<p>Google just added <a href="https://mail.google.com/support/bin/answer.py?answer=61024" onclick="javascript:pageTracker._trackPageview('/outbound/article/mail.google.com');">support for AIM to Google Chat</a> so you can just enter your login details and chat right away from your GMail or Google Apps for Domains account as if they were Google Chat users.</p>
<p>Better yet you can actually enter your ICQ number in the user-name box, fill in your password and integrate your ICQ account although this is seemingly undocumented and likely just a result of the ICQ and AIM integration from some time back.</p>
<p>It's not as comprehensive as the fantastic Mac-app <a href="http://www.adiumx.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.adiumx.com');">Adium</a> or the clever <a href="http://www.meebo.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.meebo.com');">Meebo</a> web-interface and doesn't offer support for MSN Messenger like those two but it's a great extra tool to have at your disposal when stuck behind a proxy needing to get hold of someone.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=xcgiDg"><img src="http://feed.damieng.com/~f/DamienG?i=xcgiDg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780081" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/03/18/access-aim-and-icq-via-google-chat/feed</wfw:commentRss>
		</item>
		<item>
		<title>Testing web sites with the iPhone SDK</title>
		<link>http://damieng.com/blog/2008/03/07/testing-web-sites-with-the-iphone-sdk</link>
		<comments>http://damieng.com/blog/2008/03/07/testing-web-sites-with-the-iphone-sdk#comments</comments>
		<pubDate>Fri, 07 Mar 2008 13:28:29 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Cocoa]]></category>

		<category><![CDATA[iPhone]]></category>

		<category><![CDATA[iphone sdk]]></category>

		<category><![CDATA[mobilesafari]]></category>

		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/03/07/testing-web-sites-with-the-iphone-sdk</guid>
		<description>Apple's iPhone SDK is now available in beta format for free download (running your apps on a real iPhone is a one-time $99 charge).
The 2.1GB download contains the full XCode 3.1 environment for Mac app development but also an extra 22MB of iPhone-specific SDK goodness including an iPhone simulator named Aspen Simulator (perhaps the code-name [...]</description>
			<content:encoded><![CDATA[<p>Apple's iPhone SDK is now available in beta format for <a href="http://developer.apple.com/iphone/program/" onclick="javascript:pageTracker._trackPageview('/outbound/article/developer.apple.com');">free download</a> (running your apps on a real iPhone is a one-time $99 charge).</p>
<p>The 2.1GB download contains the full XCode 3.1 environment for Mac app development but also an extra 22MB of iPhone-specific SDK goodness including an iPhone simulator named Aspen Simulator (perhaps the code-name for iPhone). Whilst most of the iPhone's apps are absent you can still access settings, photos, Safari and contacts.</p>
<p>Besides the cool idea of creating real iPhone apps you can also use Mobile Safari to test your sites on an iPhone - very cool!  Here's DamienG.com in the simulator when twisted round 90'.</p>
<p><img src="http://images.damieng.com/blog/damieng-iphone.png" alt="DamienG.com rendered on the iPhone" /></p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=G2oCPg"><img src="http://feed.damieng.com/~f/DamienG?i=G2oCPg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780082" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/03/07/testing-web-sites-with-the-iphone-sdk/feed</wfw:commentRss>
		</item>
		<item>
		<title>Future of AnkhSVN (Subversion for Visual Studio)</title>
		<link>http://damieng.com/blog/2008/03/04/future-of-ankhsvn-subversion-for-visual-studio</link>
		<comments>http://damieng.com/blog/2008/03/04/future-of-ankhsvn-subversion-for-visual-studio#comments</comments>
		<pubDate>Tue, 04 Mar 2008 15:07:35 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[AnkhSVN]]></category>

		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/03/04/future-of-ankhsvn-subversion-for-visual-studio</guid>
		<description>Now that AnkhSVN 1.0.3 is out with support for Visual Studio 2008 we can discuss our future plans for AnkhSVN.
We have moved over to openCollabNet and welcomed Jeremy Whitlock and Bert Huijben to the team!
Our preliminary roadmap for AnkhSVN 2.0 is:

Improve user experience

Refine windows, options and icons
Localise dialogs and messages
Support customisation of icons &amp;#38; menus
Develop [...]</description>
			<content:encoded><![CDATA[<p>Now that <a href="http://ankhsvn.open.collab.net/servlets/ProjectProcess?pageID=3794" onclick="javascript:pageTracker._trackPageview('/outbound/article/ankhsvn.open.collab.net');">AnkhSVN 1.0.3 is out</a> with support for Visual Studio 2008 we can discuss our future plans for AnkhSVN.</p>
<p>We have moved over to <a href="http://ankhsvn.open.collab.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/ankhsvn.open.collab.net');">openCollabNet</a> and welcomed <a href="http://dev2dev.bea.com/blog/jcscoobyrs/" onclick="javascript:pageTracker._trackPageview('/outbound/article/dev2dev.bea.com');">Jeremy Whitlock</a> and <a href="http://bert.huijben.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/bert.huijben.net');">Bert Huijben</a> to the team!</p>
<p>Our preliminary roadmap for AnkhSVN 2.0 is:</p>
<ul>
<li>Improve user experience</li>
<ul>
<li>Refine windows, options and icons</li>
<li>Localise dialogs and messages</li>
<li>Support customisation of icons &amp; menus</li>
<li>Develop interactive log window</li>
<li>Add keyboard support (short cuts &amp; tab order)</li>
</ul>
<li>Extend integration</li>
<ul>
<li>Subversion 1.5 <a href="http://blogs.open.collab.net/svn/2007/09/what-subversion.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/blogs.open.collab.net');">branch &amp; merge tracking</a> </li>
<li>Subversion <a href="http://svnbook.red-bean.com/nightly/en/svn.advanced.props.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/svnbook.red-bean.com');">property editing</a></li>
<li>Visual Studio 2005/2008 source provider model for better integration</li>
</ul>
<li>Foster developer participation</li>
<ul>
<li>Simplify build environment with MSBuild</li>
<li>Reduce code-base with <a href="http://ankhsvn.opencollab.net/servlets/ProjectProcess?tab=3 " onclick="javascript:pageTracker._trackPageview('/outbound/article/ankhsvn.opencollab.net');">SharpSvn</a></li>
<li>Switch Visual Studio API from automation to source control</li>
<li>Provide source-on-demand using <a href="http://code.google.com/p/sourceserversharp/" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');">Sourceserver</a></li>
</ul>
</ul>
<p>Switching the provider model means we have to drop Visual Studio 2003 support for 2.0 but means we get to use .NET 2.0+ features as well as a much faster and more robust mechanism for extending Visual Studio.</p>
<p>The timetable is quite aggressive and I'm hoping we can get quick regular builds out for people to try.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=3EHl5g"><img src="http://feed.damieng.com/~f/DamienG?i=3EHl5g" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780085" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/03/04/future-of-ankhsvn-subversion-for-visual-studio/feed</wfw:commentRss>
		</item>
		<item>
		<title>DLookup for Excel</title>
		<link>http://damieng.com/blog/2008/02/28/dlookup-for-excel</link>
		<comments>http://damieng.com/blog/2008/02/28/dlookup-for-excel#comments</comments>
		<pubDate>Thu, 28 Feb 2008 13:33:02 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[excel]]></category>

		<category><![CDATA[SQL]]></category>

		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/02/28/dlookup-for-excel</guid>
		<description>I had to do a couple of ad-hoc Excel jobs today and found that whilst Excel has a VLookup function for spreadsheet/ranges it doesn't have one for databases.
It's been a while since I touched VBA and Access but the DLookup function was quite useful so here it is for Excel. Read the warnings below before [...]</description>
			<content:encoded><![CDATA[<p>I had to do a couple of ad-hoc Excel jobs today and found that whilst Excel has a VLookup function for spreadsheet/ranges it doesn't have one for databases.</p>
<p>It's been a while since I touched VBA and Access but the DLookup function was quite useful so here it is for Excel. Read the warnings below before you use it!</p>
<pre class="code">
Public Function DLookup(expression As String, domain As String, criteria As String, Optional connectionString As String)

    Dim con As ADODB.connection
    Set con = New ADODB.connection
    If IsMissing(connectionString) Then
        con.Open "Driver={SQL Server};Server=abc;Database=def;Trusted_Connection=Yes;"
    Else
        con.Open connectionString
    End If

    Dim rs As ADODB.Recordset
    Dim sql As String
    sql = "SELECT TOP 1 " + expression + " FROM " + domain + " WHERE " + criteria
    Set rs = con.Execute(sql)
    If Not rs.EOF Then DLookup = rs(0)
    rs.Close
    Set rs = Nothing

    con.Close
    Set con = Nothing

End Function
</pre>
<p>Copy and paste the code above into an Excel module and replace the "Driver=... with what you want to be your default connection.</p>
<p>Some examples of use:</p>
<p>To select the Name column from the Customers table where the numeric ID is held in column 2.</p>
<pre class="code">
=DLookup("Name","Customers","ID=" &#038; A2)
</pre>
<p>To return Forename and Surname columns joined together with a space from the Contacts table in the crm database using the postcode from column 5</p>
<pre class="code">
=DLookup("Forname + ' ' + Surname","crm..Contact","PostCode='" &#038; A5 &#038; "'")
</pre>
<p>To return Description from a Products table held in another connection using a partial like match from column 1:</p>
<pre class="code">
=DLookup("Description","Products","OrderCode LIKE '" &#038; A1 &#038; "%'", "DSN=SecondaryDSN")
</pre>
<p>I think you get the idea!</p>
<div class="alert">
There are a few caveats you need to be aware of using this function:</p>
<ul>
<li>It only returns the first value of the first row</li>
<li>DLookup's are not efficient opening a connection each time it is referenced. This could put a lot of strain on your server.</p>
<li>DLookup syntax is open-ended and has some attack vectors.</li>
</ul>
</div>
<p>If that doesn't scare you then give it a shot. As usual no warranty expressed or implied!</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=LHibJg"><img src="http://feed.damieng.com/~f/DamienG?i=LHibJg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780086" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/02/28/dlookup-for-excel/feed</wfw:commentRss>
		</item>
		<item>
		<title>Hibernate presentation in Guernsey</title>
		<link>http://damieng.com/blog/2008/02/25/hibernate-presentation-in-guernsey</link>
		<comments>http://damieng.com/blog/2008/02/25/hibernate-presentation-in-guernsey#comments</comments>
		<pubDate>Mon, 25 Feb 2008 10:56:28 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Guernsey]]></category>

		<category><![CDATA[gsdf]]></category>

		<category><![CDATA[hibernate]]></category>

		<category><![CDATA[installfest]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/02/25/hibernate-presentation-in-guernsey</guid>
		<description>My good friend Steve Streeting is giving a talk about the Hibernate object-relational mapper at the Guernsey Software Developer Forum tomorrow night. Hibernate is a very successful ORM for Java which has been ported to .NET under the moniker NHibernate.
The event, as always, is open to everyone and commences at 6pm at the Guernsey Training [...]</description>
			<content:encoded><![CDATA[<p>My good friend <a href="http://www.stevestreeting.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.stevestreeting.com');">Steve Streeting</a> is giving a talk about the <a href="http://www.hibernate.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.hibernate.org');">Hibernate</a> object-relational mapper at the <a href="http://www.developers.org.gg/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.developers.org.gg');">Guernsey Software Developer Forum</a> tomorrow night. Hibernate is a very successful ORM for Java which has been ported to .NET under the moniker <a href="http://www.nhibernate.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.nhibernate.org');">NHibernate</a>.</p>
<p>The event, as always, is open to everyone and commences at 6pm at the Guernsey Training Agency above the old Post Office in Smith Street, St. Peter Port. They normally run for around 1 hour followed by an optional 30 minutes in the pub for those who can't get enough (code, not alcohol).</p>
<p>In related news I have been liasing with Microsoft who have agreed to provide support to host a VS 2008 InstallFest event to celebrate the launch of Visual Studio 2008. The idea is you bring along your laptop (if you have one) and install one of the copies of Visual Studio 2008 Professional we will be giving away (full, not-for-resale copies) as well as enjoying some food, demos of the new features of .NET 3.5 and a bit of Xbox 360 guitar hero.</p>
<p>We're just looking for a venue for this event (and potentially future GSDF meetings) as the Post Office has now been sold and will not be available from the end of February :(</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=1GqfCg"><img src="http://feed.damieng.com/~f/DamienG?i=1GqfCg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780092" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/02/25/hibernate-presentation-in-guernsey/feed</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft opens Office binary file format specifications</title>
		<link>http://damieng.com/blog/2008/02/18/microsoft-opens-office-binary-file-format-specifications</link>
		<comments>http://damieng.com/blog/2008/02/18/microsoft-opens-office-binary-file-format-specifications#comments</comments>
		<pubDate>Mon, 18 Feb 2008 13:28:05 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/02/18/microsoft-opens-office-binary-file-format-specifications</guid>
		<description>Microsoft have released the binary file format specifications to their Office suite (the XML ones are already published) under their Open Specification Promise.
I am not a lawyer but as far as I understand this means you are free to implement the standards with a promise that Microsoft will not use any patents under its control [...]</description>
			<content:encoded><![CDATA[<p>Microsoft have released the <a href="http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.microsoft.com');">binary file format specifications to their Office suite</a> (the XML ones are already published) under their <a href="http://www.microsoft.com/interop/osp/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.microsoft.com');">Open Specification Promise</a>.</p>
<p>I am not a lawyer but as far as I understand this means you are free to implement the standards with a promise that Microsoft will not use any patents under its control that are required to implement the specification against you.</p>
<p>Hopefully Apple will now address Keynote's PowerPoint support bug so exported PPT's works with Office 2007.</p>
<p>Now that the .NET Framework 3.5 source is available (for reference) and <a href="http://www.microsoft.com/presspass/exec/guthrie/default.mspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.microsoft.com');">Scott Guthrie (now VP)</a> announcing the <a href="http://weblogs.asp.net/scottgu/archive/2008/02/12/asp-net-mvc-framework-road-map-update.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/weblogs.asp.net');">MVC framework will be user-buildable and patchable</a> (not redistributable) and include project templates for a number of open-source testing frameworks the future is looking very rosy.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=bj2e0g"><img src="http://feed.damieng.com/~f/DamienG?i=bj2e0g" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780094" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/02/18/microsoft-opens-office-binary-file-format-specifications/feed</wfw:commentRss>
		</item>
		<item>
		<title>My favourite WordPress plugins</title>
		<link>http://damieng.com/blog/2008/02/11/my-favourite-wordpress-plugins</link>
		<comments>http://damieng.com/blog/2008/02/11/my-favourite-wordpress-plugins#comments</comments>
		<pubDate>Mon, 11 Feb 2008 13:54:25 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Internet]]></category>

		<category><![CDATA[plugins]]></category>

		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/02/11/my-favourite-wordpress-plugins</guid>
		<description>I've been asked what plugins I recommend for WordPress so here's the ones I currently use. Some of them require work in your theme - I started with the Redoable 1.2 theme which supports many of them.
Akismet
Probably one of the most well-known plugins for WordPress this little wonder
screens all comments for spam using the Akismet [...]</description>
			<content:encoded><![CDATA[<p>I've been asked what plugins I recommend for WordPress so here's the ones I currently use. Some of them require work in your theme - I started with the <a href="http://www.deanjrobinson.com/projects/redoable/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.deanjrobinson.com');">Redoable 1.2 theme</a> which supports many of them.</p>
<h3>Akismet</h3>
<p>Probably one of the most well-known plugins for WordPress this little wonder<br />
screens all comments for spam using the <a href="http://akismet.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/akismet.com');">Akismet</a> web service. Get a key to access the service by signing up for a at <a href="http://wordpress.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/wordpress.com');">WordPress.com</a> and then configuring it in <em>Plugins &gt; Akismet Configuration</em>.</p>
<h3>Feed Statistics</h3>
<p>I'm don't want my subscribers in the control of a third party but I do like FeedBurner's subscriber counts and analysis tools.</p>
<p>The <a href="http://www.chrisfinke.com/wordpress/plugins/feed-statistics/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.chrisfinke.com');">Feed Statistics</a> plugin provides a small subset of that functionality, the important one being a subscriber count which I now show in the sidebar. I went with a 3 day count configured from the <em>Feed</em>in WordPress admin.</p>
<h3>Google Analytics for WordPress</h3>
<p>There are a bunch of Google Analytics integration plugins out there but <a href="http://www.joostdevalk.nl/wordpress/analytics/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.joostdevalk.nl');">Google Analytics for WordPress</a> apears to be the one currently using Google Analytics New Tracking Code ga.js instead of the old Urchin one. This actually uses a new URL and technique that hopefully won't be blocked by so many viewers and also promises access to exciting new features as they become available...</p>
<h3>Google Reader widget</h3>
<p>I'm still in love with <a href="http://reader.google.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/reader.google.com');">Google Reader</a> especially since they added search to it (quite how they forgot that I'll never know).  One of the great things is that you can share your stories with your friends or better yet expose it as another RSS.</p>
<p><a href="http://nothingoutoftheordinary.com/2007/05/26/wordpress-google-reader-widget/" onclick="javascript:pageTracker._trackPageview('/outbound/article/nothingoutoftheordinary.com');">Google Reader widget</a> adds a sidebar widget to show the stories you have chosen to share in your sidebar so no need for the annoying link-list posts (unless you need to add opinion or commentary of course). Configurable via <em>Plugins &gt; Google Analytics</em>.</p>
<h3>Gravatars2</h3>
<p>Blog that don't allow comments don't get onto my Reader list without a fight. Without comments a post can't be trusted - the author isn't interested in any other opinions or thoughts. </p>
<p><a href="http://www.gravatar.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.gravatar.com');">Gravatar</a> is a great site where you can register a picture with your email address so any site implementing Gravatars will show it next to your comments. In no time you'll start recognising faces and pictures and decide if you want to check out their blogs too.</p>
<p>The <a href="http://zenpax.com/gravatars2/" onclick="javascript:pageTracker._trackPageview('/outbound/article/zenpax.com');">Gravatars2 plugin</a> puts those images next to the people who comment on your blog and can helpfully cache them locally for you given permission. It is configured from <em>Options &gt; Gravatars</em> and the cache managed from <em>Manage &gt; Gravatar Cache</em>.</p>
<h3>Gregarious</h3>
<p>Social bookmarking is incredibly popular through sites like Digg, StumbleUpon, Reddit, Delicious, Technorati, Windows Live Favourites or plain old email.</p>
<p><a href="http://dev.lipidity.com/feature/wp-plugin-gregarious" onclick="javascript:pageTracker._trackPageview('/outbound/article/dev.lipidity.com');">Gregarious</a> takes care of providing links to submit your posts to these sites at the whim of a passing viewer.  You can configure it in <em>Options &gt; Gravatars</em> to choose the sites you want (I added DotNetKicks with a URL of http://www.dotnetkicks.com/kick/?url={url} ) as well as emailing you when a post is dugg and draw those famous little 'n diggs' yellow buttons.</p>
<h3>Related Posts</h3>
<p>Problogger's <a href="http://www.problogger.net/archives/2007/08/04/interlinking-posts/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.problogger.net');">Darren Rowse recommends interlinking</a> posts to keep readers on your site and interested.</p>
<p><a href="http://wasabi.pbwiki.com/Related%20Entries" onclick="javascript:pageTracker._trackPageview('/outbound/article/wasabi.pbwiki.com');">Related Posts</a> automatically provides a list of likely related posts &amp; pages based on keyword matching.</p>
<h3>StatPress</h3>
<p>Google Analytics is nice but the stats tend to lag a bit behind and sometimes you want to know what's happening right now.</p>
<p>StatPress collects and reveals interesting real-time stats on <em>Dashboard &gt; StatPress</em> including per-day &amp; month counts of visitors, pageviews, spiders and feeds as well as recent hits, search terms and referrers. It also shows some visitor analysis and an interesting spy mode that shows recent visitors path through the site including how they got there.</p>
<p>My only complaints are that the MySQL database grows quite quickly and the analysis pages are slow. This is most likely caused by logging and analysis of raw data.  Still it seems a lot less resource hungry that <a href="http://firestats.cc/" onclick="javascript:pageTracker._trackPageview('/outbound/article/firestats.cc');">FireStats</a>.</p>
<h3>WP-PostRatings</h3>
<p>An attempt to get quick feedback on what posts people are finding interesting and which aren't with a simple star-rating next to each post.</p>
<p>Through no fault of it's own <a href="http://www.lesterchan.net/portfolio/programming.php" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.lesterchan.net');">WP-PostRatings</a> has failed rather miserably here with few people wanting to click a star to rate a post.  Will be dropped in the redesign.</p>
<h3>WP-PostViews</h3>
<p>Another visitor-retention seeking effort. By presenting the most popular content in the sidebar I'm hoping to entice people to look at a couple of other posts and hit the magic RSS subscribe button.</p>
<p><a href="http://lesterchan.net/portfolio/programming.php" onclick="javascript:pageTracker._trackPageview('/outbound/article/lesterchan.net');">WP-PostViews</a> records the stats and provides a method to get the post stats out you can put into your theme but most importantly comes with a widget to render a sidebar full of your most popular content.</p>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=Rv8Mzg"><img src="http://feed.damieng.com/~f/DamienG?i=Rv8Mzg" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780095" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/02/11/my-favourite-wordpress-plugins/feed</wfw:commentRss>
		</item>
		<item>
		<title>Humane theme for TextMate and Xcode</title>
		<link>http://damieng.com/blog/2008/02/08/humane-theme-for-textmate-and-xcode</link>
		<comments>http://damieng.com/blog/2008/02/08/humane-theme-for-textmate-and-xcode#comments</comments>
		<pubDate>Fri, 08 Feb 2008 05:26:36 +0000</pubDate>
		<dc:creator>Damien Guard</dc:creator>
		
		<category><![CDATA[Cocoa]]></category>

		<category><![CDATA[Coding-fonts]]></category>

		<category><![CDATA[textmate]]></category>

		<category><![CDATA[theme]]></category>

		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://damieng.com/blog/2008/02/08/humane-theme-for-textmate-and-xcode</guid>
		<description>My Humane theme for Visual Studio is getting a fair bit of traffic today courtesy of Scott Hanselman. Given I have been messing with Mac development lately I thought it was worth porting to TextMate and Xcode 3.
Panic Sans coding font
My Envy Code R programming font isn't great on the Mac yet so I have [...]</description>
			<content:encoded><![CDATA[<p>My <a href="http://damieng.com/blog/2007/10/14/colour-schemes-for-visual-studio" >Humane theme for Visual Studio</a> is getting a fair bit of traffic today courtesy of Scott Hanselman. Given I have been messing with Mac development lately I thought it was worth porting to TextMate and Xcode 3.</p>
<h3>Panic Sans coding font</h3>
<p>My Envy Code R programming font isn't great on the Mac yet so I have configured these to use the excellent but overlooked Panic Sans in 12 point which unlike Monaco is available in bold, italic and bold italic variants. (I love my comments to be italics)</p>
<p>To install this font you must:</p>
<ol>
<li>Download <a href="http://www.panic.com/coda/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.panic.com');">Panic Software's Coda application</a></li>
<li>Navigate to the Coda application and choose <em>Show Package Contents</em></li>
<li>Navigate to the <em>Contents/Resources folder</em></li>
<li>Double click on the Panic Sans.dfont and press <em>Install Font</em></li>
<li>Panic Sans is now available to other applications too</li>
</ol>
<h3>TextMate</h3>
<p><img src="http://images.damieng.com/blog/HumaneTextMate.png" alt="Screenshot of the Humane Theme and Panic Sans 12 point inside TextMate" /></p>
<p class="download">Download <a href="http://download.damieng.com/theme/TextMate/Humane.tmTheme" >Humane theme for TextMate (5 KB)</a></p>
<p>Launching the downloaded .tmTheme file will cause it to copy to <em>~/Library/Application Support/TextMate/Themes</em><br />
Select Humane from the <em>Preferences &gt; Fonts &amp; Colors</em> pane in the drop-down list box</p>
<h3>Xcode 3</h3>
<p><img src="http://images.damieng.com/blog/HumaneXcode.png" alt="Screenshot of the Humane Theme and Panic Sans 12 point inside Xcode 3" /></p>
<p class="download">Download <a href="http://download.damieng.com/theme/Xcode/Humane.xccolortheme" >Humane theme for Xcode (4 KB)</a></p>
<p>Copy to <em>~/Library/Application Support/Xcode/Color Themes</em><br />
Select Humane from the <em>Preferences &gt; Fonts &amp; Colors</em> pane in the drop-down list box</p>
<h3>Porting themes</h3>
<p>Until somebody comes up with an IDE-independent theme format or cool converter we'll have to do it by hand. The easiest way I have found is:</p>
<ol>
<li>Install <a href="http://wafflesoftware.net/hexpicker/" onclick="javascript:pageTracker._trackPageview('/outbound/article/wafflesoftware.net');">Hex Color Picker</a> on the Mac to allow entering hex into the standard color picker</li>
<li>Open the Visual Studio theme .vssettings file in a text editor</li>
<li>Open up the Fonts &amp; Colors preferences pane up in your Mac IDE</li>
<li>Go through each one and choose the nearest match in the .vssettings</li>
<li>Transcribe each color by reading the VS colour pairs backward, e.g.  00631409 becomes #091463</li>
</ol>
<p><em>[)amien</em></p>
<div class="feedflare">
<a href="http://feed.damieng.com/~f/DamienG?a=UPg35g"><img src="http://feed.damieng.com/~f/DamienG?i=UPg35g" border="0"></img></a>
</div><img src="http://feed.damieng.com/~r/DamienG/~4/280780097" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damieng.com/blog/2008/02/08/humane-theme-for-textmate-and-xcode/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
