<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>durdle.com &#187; Internet</title>
	<atom:link href="http://durdle.com/archives/category/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://durdle.com</link>
	<description></description>
	<lastBuildDate>Mon, 23 Aug 2010 11:25:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Run YOURLS on IIS 7</title>
		<link>http://durdle.com/archives/2010/08/23/run-yourls-on-iis-7/</link>
		<comments>http://durdle.com/archives/2010/08/23/run-yourls-on-iis-7/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 11:23:55 +0000</pubDate>
		<dc:creator>Howard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[iis7]]></category>
		<category><![CDATA[urlrewrite]]></category>
		<category><![CDATA[yourls]]></category>

		<guid isPermaLink="false">http://durdle.com/?p=845</guid>
		<description><![CDATA[If you&#8217;re running YOURLS on an IIS 7 box you&#8217;ll need the correct settings in your web.config to perform the URL Rewriting.  An example web.config with the correct settings is below.  
Note the security section which disables some paranoid protection IIS has switched on by default.  If your server doesn&#8217;t allow double...]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re running <a href="http://yourls.org/">YOURLS</a> on an IIS 7 box you&#8217;ll need the correct settings in your web.config to perform the URL Rewriting.  An example web.config with the correct settings is below.  <span id="more-845"></span></p>
<p>Note the security section which disables some paranoid protection IIS has switched on by default.  If your server doesn&#8217;t allow double escaping of request strings, the YOURLS links with a + in them don&#8217;t work.  This breaks the admin interface and the stats reporting pages.</p>
<p>The rest of the web.config is standard stuff to fix a non-canonical hostname, and make sure the IDs are rewritten to the right pages:</p>
<div class="wp_syntax">
<div class="code">
<pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;system.webServer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;security<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;requestFiltering</span> <span style="color: #000066;">allowDoubleEscaping</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/security<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rewrite<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rules<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rule</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Canonical Host Name&quot;</span> <span style="color: #000066;">stopProcessing</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;(.*)&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;conditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">input</span>=<span style="color: #ff0000;">&quot;{HTTP_HOST}&quot;</span> <span style="color: #000066;">negate</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">pattern</span>=<span style="color: #ff0000;">&quot;^domain\.com$&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/conditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;action</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;Redirect&quot;</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;http://domain.com/{R:1}&quot;</span> <span style="color: #000066;">redirectType</span>=<span style="color: #ff0000;">&quot;Permanent&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rule</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;YOURLS 1&quot;</span> <span style="color: #000066;">stopProcessing</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;^([0-9A-Za-z]+)/?$&quot;</span> <span style="color: #000066;">ignoreCase</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;conditions</span> <span style="color: #000066;">logicalGrouping</span>=<span style="color: #ff0000;">&quot;MatchAll&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">input</span>=<span style="color: #ff0000;">&quot;{REQUEST_FILENAME}&quot;</span> <span style="color: #000066;">matchType</span>=<span style="color: #ff0000;">&quot;IsFile&quot;</span> <span style="color: #000066;">ignoreCase</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000066;">negate</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">input</span>=<span style="color: #ff0000;">&quot;{REQUEST_FILENAME}&quot;</span> <span style="color: #000066;">matchType</span>=<span style="color: #ff0000;">&quot;IsDirectory&quot;</span> <span style="color: #000066;">ignoreCase</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000066;">negate</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/conditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;action</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;Rewrite&quot;</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;/yourls-go.php?id={R:1}&quot;</span> <span style="color: #000066;">appendQueryString</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rule</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;YOURLS 2&quot;</span> <span style="color: #000066;">stopProcessing</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;^([0-9A-Za-z]+)\+/?$&quot;</span> <span style="color: #000066;">ignoreCase</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;action</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;Rewrite&quot;</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;/yourls-infos.php?id={R:1}&quot;</span> <span style="color: #000066;">appendQueryString</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rule</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;YOURLS 3&quot;</span> <span style="color: #000066;">stopProcessing</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;^([0-9A-Za-z]+)\+all/?$&quot;</span> <span style="color: #000066;">ignoreCase</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;action</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;Rewrite&quot;</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;/yourls-infos.php?id={R:1}&amp;amp;all=1&quot;</span> <span style="color: #000066;">appendQueryString</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rules<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rewrite<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/system.webServer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://durdle.com/archives/2010/08/23/run-yourls-on-iis-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RegExCatchAll Transport Agent for Exchange 2007/2010</title>
		<link>http://durdle.com/archives/2010/05/29/regexcatchall/</link>
		<comments>http://durdle.com/archives/2010/05/29/regexcatchall/#comments</comments>
		<pubDate>Sat, 29 May 2010 15:31:16 +0000</pubDate>
		<dc:creator>Howard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[catchall]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[email suffix]]></category>
		<category><![CDATA[exchange]]></category>
		<category><![CDATA[exchange 2007]]></category>
		<category><![CDATA[exchange 2010]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[transport agent]]></category>

		<guid isPermaLink="false">http://blog.durdle.com/?p=777</guid>
		<description><![CDATA[How moving email services to an Exchange Server revealed email suffix matching as a missing feature, and how to implement that feature using a Transport Agent.]]></description>
			<content:encoded><![CDATA[<p>For a number of years now I have been doing two things with email:</p>
<p>1) I run my own <a href="http://www.microsoft.com/exchange/">Exchange Server</a>.  <a href="/wp-content/uploads/Exchange2010Logo.png" rel="lightbox[818]"><img class="alignleft  size-full wp-image-805" title="Exchange 2010 Logo" src="/wp-content/uploads/Exchange2010Logo.png" alt="Exchange 2010 Logo" width="150" height="150" /></a>It provides <a href="http://technet.microsoft.com/en-us/exchange/bb288524.aspx">ActiveSync</a>, <a href="http://www.microsoft.com/exchange/code/OWA/index.html">Outlook Web Access</a>, and <a href="http://office.microsoft.com/en-us/outlook/hp101024441033.aspx">Outlook Anywhere</a> for my company’s email domains and my personal durdle.com domain.</p>
<p>2) I provide email addresses at durdle.com for family members (and a few people who just happen to share the family name).</p>
<p>&nbsp;<br />
&nbsp;</p>
<p>Historically all those family emails have been maintained by <a href="http://www.gradwell.com/">Gradwell</a> without going near my Exchange Server.  The durdle.com <a href="http://en.wikipedia.org/wiki/MX_record">MX records</a> in DNS pointed to Gradwell’s servers for mail delivery and I had a forwarder at Gradwell that would redirect my – and only my – messages to the Exchange Server.  For a number of reasons I needed to change this so that all email is delivered via my Exchange Server.  I made this change yesterday, discovering one problem in the process.</p>
<h5>Email Suffixes</h5>
<p>Gradwell’s mail server supports email suffix matching.  If you have a <a href="http://mail.google.com/">GMail</a> account you may be familiar with the approach.  Say you have an email <a href="mailto:john@gmail.com">john@gmail.com</a>.  Gmail will actually deliver mail to <a href="mailto:john+anything@gmail.com">john+anything@gmail.com</a>; you can add any suffix you like after the + and GMail will still deliver it to your inbox.  Gradwell support this by allowing you to place a period after the local part so you can use <a href="mailto:john.anything@example.com">john.anything@example.com</a>.  You don’t have to create these email addresses anywhere – you can just start using it and the mail server will make sure it gets to you.</p>
<p>This is fantastically useful because it means that when a website asks for your email address you can give out a custom throwaway email just for that site.  So when you sign up at DodgyCo.com, you give them the email <a href="mailto:john.dodgyco@example.com">john.dodgyco@example.com</a>.  If you ever receive spam because DodgyCo sold your email address you’ll know a) who sold you out, and b) which email address to add to your spam filter.</p>
<h5>Exchange Server</h5>
<p>Enter Microsoft Exchange Server.  I’m currently running the 2010 edition, but the problem I’m about to describe (and solve!) exists in every recent version.  Exchange Server doesn’t support email suffixes.  Every recipient has to have an alias created on the server.  If you want to deliver to <a href="mailto:john.suffix@example.com">john.suffix@example.com</a> you’d better remember to create an alias for that user, otherwise the Exchange Recipient Filter will reject the message since – as far as it is concerned – the user does not exist on the server.</p>
<p>Worse, Exchange doesn’t even implement any generic <a href="http://en.wikipedia.org/wiki/Catch-all">CatchAll</a> functionality.  CatchAll would allow the server to redirect messages for non-existing recipients to a specific address. <a href="http://catchallagent.codeplex.com/" target="_blank">Smart people</a> have created solutions to the CatchAll problem but all that does is allow you to define one mailbox for ALL non-deliverable messages to be delivered to.  Since I need to provide suffix matching to multiple users this doesn’t work for me.</p>
<p>Time to extend Exchange’s functionality!</p>
<h5>Transport Agents</h5>
<p><a href="http://technet.microsoft.com/en-us/library/bb125012.aspx" target="_blank">Transport Agents</a> were introduced in Exchange 2007 to replace Exchange 2003’s SMTP Event Sinks and have been retained largely unchanged in Exchange 2010.  Broadly speaking when a message arrives at an Exchange Server it is moved through the transport pipeline as each SMTP event occurs.  Each <a href="http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol">SMTP event</a> (Connect, MAIL FROM, RCPT TO, etc) can trigger an interested Transport Agent to perform some actions on the message.<br />
The complete list of SMTP events and their sequence is described on <a href="http://technet.microsoft.com/en-us/library/bb125012.aspx" target="_blank">this Exchange Server TechCenter page</a>.</p>
<p>Transport Agents are simply DLLs written in managed code that fire on SMTP events.  Back when I contracted for the <a href="http://www.mod.uk/">MOD</a> I wrote a Transport Agent for Exchange 2007 which demonstrated that Exchange was capable of performing Dominance Checking on outgoing emails so I knew that it wouldn&#8217;t take to long to write a Transport Agent to filter incoming messages.  I was able to reuse some of that code and also made use of some of <a href="http://www.codeplex.com/site/users/view/wilbertdg" target="_blank">Wilbert De Graaf</a>’s <a href="http://catchallagent.codeplex.com/" target="_blank">CatchAll Agent</a> code which made the handling of a configuration file very quick to implement.  Thank you Wilbert!</p>
<h5>Requirements</h5>
<p>I had a couple of requirements for my Transport Agent:</p>
<p>1) It should allow redirection of multiple suffixes to different recipients.</p>
<p>2) It should allow me to ban delivery to any previously used suffixes and ensure that the sender receives a non-deliverable report.</p>
<p>I ended up meeting these requirements by using C# to write a Transport Agent that accepts its configuration from an XML file.  The config.xml defines multiple regular expressions to match against along with associated redirect addresses.  It also lists banned email addresses which the Transport Agent should reject.</p>
<p>To mimic the <a href="http://www.gradwell.com/support/howto/article/392">Gradwell behaviour</a> which we were already making use of I needed to match firstname then a dot and then any word before the domain.  This is a fairly simple <a href="http://support.microsoft.com/kb/308252">regular expression in C#</a>, and looks like this:</p>
<div class="wp_syntax">
<div class="code">
<pre class="xml" style="font-family:monospace;">^firstname+\.[a-z]+@example.com$</pre>
</div>
</div>
<p>The config.xml takes the form:</p>
<div class="wp_syntax">
<div class="code">
<pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;redirect</span> <span style="color: #000066;">pattern</span>=<span style="color: #ff0000;">&quot;^john+\.[a-z]+@domain.com$&quot;</span> <span style="color: #000066;">address</span>=<span style="color: #ff0000;">&quot;john@domain.com&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;redirect</span> <span style="color: #000066;">pattern</span>=<span style="color: #ff0000;">&quot;^jane+\.[a-z]+@domain.com$&quot;</span> <span style="color: #000066;">address</span>=<span style="color: #ff0000;">&quot;jane.doe@gmail.com&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;banned</span> <span style="color: #000066;">address</span>=<span style="color: #ff0000;">&quot;john.spam@domain.com&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;banned</span> <span style="color: #000066;">address</span>=<span style="color: #ff0000;">&quot;jane.newsletter@domain.com&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre>
</div>
</div>
<p>Here we define two patterns for redirect, one to an internal recipient and one redirect to an external SMTP address.  We also ban two known &#8220;bad&#8221; recipient addresses.</p>
<p>You’ll need to provide at least one redirect entry, but you’re not required to ban any addresses if you don&#8217;t want to.  Also, while redirects specifiy regular expressions to match, banned addresses are just strings which are simply compared.  I leave it as an exercise for the reader to add regular expressions to the banned list!</p>
<h5>The Code</h5>
<p>Whenever the config.xml file is changed, the agent reloads it and parses the XML.  It puts the banned emails into a List and the regular expression patterns and redirect addresses into a Dictionary.  If any of the emails in the config appear invalid the new configuration is rejected and the agent continues to use the running config.</p>
<p>The agent defines a RCPT TO: handler.  This event is fired as soon as the sending MTA starts to transmit the recipient addresses.  rcptArgs contains the argument we need: RecipientAddress, which we store as a lowercase string for comparison.  Although the spec (<a href="http://www.faqs.org/rfcs/rfc2821.html">RFC2821</a>) actually requires email addresses to be case sensitive, I&#8217;ve never met an MTA that adheres to that part of the spec.  So for our purposes email addresses are case insensitive and we can do all comparisons in lowercase.</p>
<div class="wp_syntax">
<div class="code">
<pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> RcptToHandler<span style="color: #000000;">&#40;</span>ReceiveCommandEventSource source, RcptCommandEventArgs rcptArgs<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #008080; font-style: italic;">// Get the recipient address as a lowercase string.</span>
<span style="color: #FF0000;">string</span> strRecipientAddress <span style="color: #008000;">=</span> rcptArgs.<span style="color: #0000FF;">RecipientAddress</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToLower</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre>
</div>
</div>
<p>It performs two checks.  First &#8211; is the recipient address in the ban list?</p>
<div class="wp_syntax">
<div class="code">
<pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">// Search the banned email List for the recipient.</span>
<span style="color: #FF0000;">bool</span> exists <span style="color: #008000;">=</span> catchAllConfig.<span style="color: #0000FF;">Banned</span>.<span style="color: #0000FF;">Exists</span><span style="color: #000000;">&#40;</span>element <span style="color: #008000;">=&gt;</span> element <span style="color: #008000;">==</span> strRecipientAddress<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>exists<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #008080; font-style: italic;">// If found respond to the sending MTA with the reject response.</span>
	source.<span style="color: #0000FF;">RejectCommand</span><span style="color: #000000;">&#40;</span>CatchAllAgent.<span style="color: #0000FF;">rejectResponse</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
	<span style="color: #008080; font-style: italic;">// No further processing.</span>
	return<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre>
</div>
</div>
<p>And second, does the recipient address match any of the regular expressions?</p>
<div class="wp_syntax">
<div class="code">
<pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">// For each pair of regexps to email addresses</span>
<span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>var pair <span style="color: #0600FF;">in</span> catchAllConfig.<span style="color: #0000FF;">AddressMap</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #008080; font-style: italic;">// Create the regular expression and the routing address from the dictionary.</span>
	Regex emailPattern <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Regex<span style="color: #000000;">&#40;</span>pair.<span style="color: #0000FF;">Key</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
	RoutingAddress emailAddress <span style="color: #008000;">=</span> pair.<span style="color: #0000FF;">Value</span><span style="color: #008000;">;</span>
&nbsp;
	<span style="color: #008080; font-style: italic;">// If the recipient address matches the regular expression.</span>
	<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>emailPattern.<span style="color: #0000FF;">IsMatch</span><span style="color: #000000;">&#40;</span>strRecipientAddress<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
	<span style="color: #000000;">&#123;</span>
		<span style="color: #008080; font-style: italic;">// And if the recipient is NOT in the address book.</span>
		<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">addressBook</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">&amp;&amp;</span>
			<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">addressBook</span>.<span style="color: #0000FF;">Find</span><span style="color: #000000;">&#40;</span>rcptArgs.<span style="color: #0000FF;">RecipientAddress</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #008080; font-style: italic;">// Redirect the recipient to the other address.</span>
			rcptArgs.<span style="color: #0000FF;">RecipientAddress</span> <span style="color: #008000;">=</span> emailAddress<span style="color: #008000;">;</span>
&nbsp;
			<span style="color: #008080; font-style: italic;">// No further processing.</span>
			return<span style="color: #008000;">;</span>
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre>
</div>
</div>
<p>Note that in both cases as soon as we&#8217;ve got a positive result we stop further processing.  If an address is in the ban list we immediately reject it, and if we find a matching regular expression we use its paired address to redirect the message and stop looking for further matches.</p>
<p>I&#8217;ve given enough information here that a C# developer with some spare time could create this Transport Agent themselves.  However I know that it is really useful to have a package you can just download and install without having to worry about compiling it yourself.  So I&#8217;ve packaged the DLL together with installation scripts and the <a href="/regexcatchall/installation/">install and configuration guide</a>.  </p>
<p>Please visit the <a href="/regexcatchall/">product page</a> for more information and to purchase the Transport Agent.  Payment is via PayPal, you will receive the download link within minutes of payment.</p>
]]></content:encoded>
			<wfw:commentRss>http://durdle.com/archives/2010/05/29/regexcatchall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IIS7 web.config fun</title>
		<link>http://durdle.com/archives/2010/03/08/iis7-web-config-fun/</link>
		<comments>http://durdle.com/archives/2010/03/08/iis7-web-config-fun/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 20:15:11 +0000</pubDate>
		<dc:creator>Howard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[gradwell]]></category>
		<category><![CDATA[iis7]]></category>
		<category><![CDATA[memset]]></category>
		<category><![CDATA[web.config]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[workavoidance]]></category>

		<guid isPermaLink="false">http://blog.durdle.com/?p=747</guid>
		<description><![CDATA[I spent some time last weekend migrating the Work Avoidance site away from Gradwell and onto a dedicated virtual server from MEMSET.  Since this involved a move to a Windows box away from UNIX hosting, I had to configure in IIS7 some of the settings I had in the .htaccess under the UNIX host.
For...]]></description>
			<content:encoded><![CDATA[<p><a href="/wp-content/uploads/iis7-logo.jpg" rel="lightbox[747]"><img src="/wp-content/uploads/iis7-logo.jpg" alt="IIS7 Logo" title="IIS7" width="200" height="125" class="alignleft size-full wp-image-757" /></a>I spent some time last weekend migrating the <a href="http://workavoidance.net">Work Avoidance</a> site away from <a href="http://www.gradwell.net/">Gradwell</a> and onto a dedicated virtual server from <a href="http://www.memset.com/dedicated-servers/virtual.php">MEMSET</a>.  Since this involved a move to a Windows box away from UNIX hosting, I had to configure in IIS7 some of the settings I had in the .htaccess under the UNIX host.<span id="more-747"></span></p>
<p>For example, I want a canonical host name (so visitors always see <a href="http://workavoidance.net">workavoidance.net</a> with no www prefix in the address bar) and to ensure that the <a href="http://wordpress.org/">Wordpress</a> permalinks work properly.  While I was at it I took the opportunity to disable hot-linking of our images, since for some reason a Russian website had taken a shine to some of our <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=303892009&#038;mt=8">Armory</a> graphics.</p>
<p>Below is the <code>web.config</code> I created.  It redirects users to the canonical host name, enables Wordpress permalinks and disables hot-linking of our images.  The redirect proved something of a problem to begin with.  Our iPhone App &#8220;<a href="http://itunes.apple.com/us/app/monkey-shaker/id290779801?mt=8">Monkey Shaker</a>&#8221; has an online <a href="http://workavoidance.net/highscores/shaker/">high score system</a>.  Scores are submitted from the app via an encrypted HTTP POST to a PHP page which decrypts the information and updates the database.  I discovered that when you issue a server side redirect most clients won&#8217;t re-POST their data to the new page &#8211; they will issue a GET for the new page and the original POST data is lost.  This meant that highscore submissions were failing.</p>
<p>(NB: this isn&#8217;t as big a disaster as it sounds since we built a very robust mechanism to retry score submission into the app.)</p>
<p>So, you&#8217;ll note an extra entry in the web.config to exclude that page from a redirect:</p>
<div class="wp_syntax">
<div class="code">
<pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">input</span>=<span style="color: #ff0000;">&quot;{URL}&quot;</span> <span style="color: #000066;">negate</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">pattern</span>=<span style="color: #ff0000;">&quot;scoresubmit\.php$&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre>
</div>
</div>
<p>&#8220;Why not just change the URL in the app to be canonical?!&#8221; You may well ask.  Yes, we probably will, but that relies on issuing an update and getting <strong>over a quarter of a million users</strong> to download it.  This way we don&#8217;t have to rely on that.</p>
<p>Still to come &#8211; how I implemented caching in Wordpress and in our high score system to improve performance.</p>
<p>Here&#8217;s the rewrite rules section of the completed web.config:</p>
<div class="wp_syntax">
<div class="code">
<pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rule</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Canonical Host Name&quot;</span> <span style="color: #000066;">stopProcessing</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;(.*)&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;conditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">input</span>=<span style="color: #ff0000;">&quot;{HTTP_HOST}&quot;</span> <span style="color: #000066;">negate</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">pattern</span>=<span style="color: #ff0000;">&quot;^workavoidance\.net$&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">input</span>=<span style="color: #ff0000;">&quot;{URL}&quot;</span> <span style="color: #000066;">negate</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">pattern</span>=<span style="color: #ff0000;">&quot;scoresubmit\.php$&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/conditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;action</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;Redirect&quot;</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;http://workavoidance.net/{R:1}&quot;</span> <span style="color: #000066;">redirectType</span>=<span style="color: #ff0000;">&quot;Permanent&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rule</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Prevent image hotlinking&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;.*\.(gif|jpg|png)$&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;conditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">input</span>=<span style="color: #ff0000;">&quot;{HTTP_REFERER}&quot;</span> <span style="color: #000066;">pattern</span>=<span style="color: #ff0000;">&quot;^$&quot;</span> <span style="color: #000066;">negate</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">input</span>=<span style="color: #ff0000;">&quot;{HTTP_REFERER}&quot;</span> <span style="color: #000066;">pattern</span>=<span style="color: #ff0000;">&quot;^http://workavoidance\.net/.*$&quot;</span> <span style="color: #000066;">negate</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/conditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;action</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;Rewrite&quot;</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;/no.png&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rule</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;wordpress&quot;</span> <span style="color: #000066;">patternSyntax</span>=<span style="color: #ff0000;">&quot;Wildcard&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;*&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;conditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">input</span>=<span style="color: #ff0000;">&quot;{REQUEST_FILENAME}&quot;</span> <span style="color: #000066;">matchType</span>=<span style="color: #ff0000;">&quot;IsFile&quot;</span> <span style="color: #000066;">negate</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;add</span> <span style="color: #000066;">input</span>=<span style="color: #ff0000;">&quot;{REQUEST_FILENAME}&quot;</span> <span style="color: #000066;">matchType</span>=<span style="color: #ff0000;">&quot;IsDirectory&quot;</span> <span style="color: #000066;">negate</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/conditions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;action</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;Rewrite&quot;</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">&quot;index.php&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rule<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://durdle.com/archives/2010/03/08/iis7-web-config-fun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bad Bell Wire!</title>
		<link>http://durdle.com/archives/2009/03/10/bad-bell-wire/</link>
		<comments>http://durdle.com/archives/2009/03/10/bad-bell-wire/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 20:45:47 +0000</pubDate>
		<dc:creator>Howard</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://blog.durdle.com/?p=426</guid>
		<description><![CDATA[It&#8217;s one of those &#8220;why didn&#8217;t I think of that before?!&#8221; moments.  BT are selling a device called the iPlate at the moment claiming that for 7 out of 10 people it will increase their DSL speed by filtering out the noise from the bell wire in your master socket.  By all accounts it does...]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s one of those &#8220;why didn&#8217;t I think of that before?!&#8221; moments.  BT are selling a device called the <a title="iPlate at BT Shop" href="http://www.shop.bt.com/ProductView.aspx?Quicklinx=58LT&amp;InMerch=1" target="_blank">iPlate</a> at the moment claiming that for 7 out of 10 people it will increase their DSL speed by filtering out the noise from the bell wire in your master socket.  By all accounts it does exactly what they describe.   I only bothered looking this up today after hearing about it a few weeks ago, and it occurred to me: if the bell wire is the offender here, why not just disconnect it from my wiring altogether?  It&#8217;s not as if I have any clunky analogue phones that will suddenly cease ringing.  In fact, I use my BT line purely for DSL anyway, who cares if the phones don&#8217;t ring!<span id="more-426"></span></p>
<p>So, I opened up my master socket and disconnected the wire at pin 3 &#8211; the bell wire.  Plugged it all back in and found an immediate speed boost of approximately 2Mb.  I fully expect this to increase as my ISP (<a title="Be Broadband" href="https://www.bethere.co.uk/" target="_blank">Be Unlimited</a>) rate up their equipment to match my now far less lossy line.</p>
<p>If you&#8217;re handy with a screwdriver and don&#8217;t much care about the rules about messing with BT&#8217;s sockets it could well be worth your while pulling the wire out of pin 3.  And if you&#8217;re a bit scared of that and you have the right master socket, <a title="BroadbandBuyer" href="http://www.broadbandbuyer.co.uk/" target="_blank">BroadbandBuyer</a> can ship you an <a title="BT iPlate at BroadbandBuyer" href="http://www.broadbandbuyer.co.uk/Shop/ShopDetail.asp?ProductID=7256" target="_blank">iPlate</a> for less than BT charge, and they actually have them in stock!</p>
<p>Unsurprisingly, this is old news for <a title="Broadband and Bellwire" href="http://www.jarviser.co.uk/jarviser/broadbandspeed.html" target="_blank">some people</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://durdle.com/archives/2009/03/10/bad-bell-wire/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Three Handy Sites</title>
		<link>http://durdle.com/archives/2008/07/16/three-handy-sites/</link>
		<comments>http://durdle.com/archives/2008/07/16/three-handy-sites/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 07:22:12 +0000</pubDate>
		<dc:creator>Howard</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://blog.durdle.com/?p=300</guid>
		<description><![CDATA[Three handy sites for people who need to manage the volume of email coming in.
Don&#8217;t want to be included on the latest &#8220;funny&#8221; forward, let your correspondent down gently with www.thanksno.com.
Or do you have a contact who doesn&#8217;t know how to use BCC and reveals your email address to everybody else they&#8217;re sending the message...]]></description>
			<content:encoded><![CDATA[<p>Three handy sites for people who need to manage the volume of email coming in.</p>
<p>Don&#8217;t want to be included on the latest &#8220;funny&#8221; forward, let your correspondent down gently with <a href="http://www.thanksno.com/">www.thanksno.com</a>.</p>
<p>Or do you have a contact who doesn&#8217;t know how to use BCC and reveals your email address to everybody else they&#8217;re sending the message to?  (As one of Lindsay&#8217;s contacts did this weekend.)  Send them a link to <a href="http://bccplease.com/">bccplease.com</a> for a quick lesson in email etiquette.</p>
<p>And finally, if you&#8217;re getting swamped with the amount of email you have to reply to, why not instigate a five sentences rule to speed things up a bit.  See <a href="http://five.sentenc.es/">five.sentenc.es</a> for more information.</p>
]]></content:encoded>
			<wfw:commentRss>http://durdle.com/archives/2008/07/16/three-handy-sites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bandwidth Graphs</title>
		<link>http://durdle.com/archives/2008/07/11/bandwidth-graphs/</link>
		<comments>http://durdle.com/archives/2008/07/11/bandwidth-graphs/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 08:55:27 +0000</pubDate>
		<dc:creator>Howard</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://blog.durdle.com/?p=304</guid>
		<description><![CDATA[I&#8217;m a metrics geek, I can&#8217;t help it.  Once again I have to sing the praises of Zen&#8217;s Office 8000 Max ADSL service.  When they say unlimited they really mean it, and since I&#8217;m only about 350m from the Exchange, I actually get the full 8Mb.
Check out the graph (click for bigness) which shows my...]]></description>
			<content:encoded><![CDATA[<p><a href="/wp-content/uploads//bandwidth_large.jpg" rel="lightbox[304]"><img class="alignleft size-thumbnail wp-image-303" style="margin: 2px; float: left;" title="Zen Bandwidth Usage" src="/wp-content/uploads/bandwidth_large-150x150.jpg" alt="" width="150" height="150" /></a>I&#8217;m a metrics geek, I can&#8217;t help it.  Once again I have to sing the praises of Zen&#8217;s <a href="http://www.zen.co.uk/Broadband/ML_Business/medium-large-business-broadband.aspx">Office 8000 Max </a>ADSL service.  When they say unlimited they really mean it, and since I&#8217;m only about 350m from the Exchange, I actually get the full 8Mb.</p>
<p>Check out the graph (click for bigness) which shows my bandwidth usage over the last couple of years.  Of particular note is the time around February this year where I stopped using BitTorrent and started using <a href="http://www.easynews.com/">EasyNews</a> (thanks Fuller!).  At this point you can see my download increase markedly and a massive decrease in the amount of data I upload, down to just 7Gb last month.  My average download usage in the last 12 months is 180Gb.  Kudos to <a href="http://www.zen.co.uk/">Zen</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://durdle.com/archives/2008/07/11/bandwidth-graphs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Broadband Usage</title>
		<link>http://durdle.com/archives/2007/12/02/broadband-usage/</link>
		<comments>http://durdle.com/archives/2007/12/02/broadband-usage/#comments</comments>
		<pubDate>Sun, 02 Dec 2007 10:46:38 +0000</pubDate>
		<dc:creator>Howard</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://blog.durdle.com/archives/2007/12/02/broadband-usage/</guid>
		<description><![CDATA[I was reminded today that my ISP (Zen) provide a portal where their users can check out their broadband usage.  I&#8217;m on an unlimited plan (Zen Office 8000 Max) so don&#8217;t need to worry about it month to month, but I thought the stats were interesting:


Date
Download Usage
Upload Usage


May-2006
98.197 GB
50.660 GB


Jun-2006
50.946 GB
54.701 GB


Jul-2006
14.767 GB
28.157 GB


Aug-2006
44.144...]]></description>
			<content:encoded><![CDATA[<p>I was reminded today that my ISP (<a href="http://www.zen.co.uk/">Zen</a>) provide a <a href="https://portal.zen.co.uk/">portal</a> where their users can check out their broadband usage.  I&#8217;m on an unlimited plan (<a href="http://www.zen.co.uk/Broadband/ML_Business/medium-large-business-broadband.aspx">Zen Office 8000 Max</a>) so don&#8217;t need to worry about it month to month, but I thought the stats were interesting:<span id="more-269"></span></p>
<table width="400" cellspacing="0" cellpadding="2" border="0" style="height: 362px">
<tr>
<td valign="top" style="width: 133px"><strong>Date</strong></td>
<td valign="top" style="width: 133px"><strong>Download Usage</strong></td>
<td valign="top" style="width: 133px"><strong>Upload Usage</strong></td>
</tr>
<tr>
<td valign="top" style="width: 133px">May-2006</td>
<td valign="top" style="width: 133px">98.197 GB</td>
<td valign="top" style="width: 133px">50.660 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Jun-2006</td>
<td valign="top" style="width: 133px">50.946 GB</td>
<td valign="top" style="width: 133px">54.701 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Jul-2006</td>
<td valign="top" style="width: 133px">14.767 GB</td>
<td valign="top" style="width: 133px">28.157 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Aug-2006</td>
<td valign="top" style="width: 133px">44.144 GB</td>
<td valign="top" style="width: 133px">30.682 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Sep-2006</td>
<td valign="top" style="width: 133px">97.251 GB</td>
<td valign="top" style="width: 133px">65.315 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Oct-2006</td>
<td valign="top" style="width: 133px">65.665 GB</td>
<td valign="top" style="width: 133px">87.989 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Nov-2006</td>
<td valign="top" style="width: 133px">129.413 GB</td>
<td valign="top" style="width: 133px">94.857 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Dec-2006</td>
<td valign="top" style="width: 133px">109.799 GB</td>
<td valign="top" style="width: 133px">82.930 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Jan-2007</td>
<td valign="top" style="width: 133px">151.169 GB</td>
<td valign="top" style="width: 133px">98.438 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Feb-2007</td>
<td valign="top" style="width: 133px">79.260 GB</td>
<td valign="top" style="width: 133px">79.619 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Mar-2007</td>
<td valign="top" style="width: 133px">41.485 GB</td>
<td valign="top" style="width: 133px">37.320 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Apr-2007</td>
<td valign="top" style="width: 133px">126.846 GB</td>
<td valign="top" style="width: 133px">73.687 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">May-2007</td>
<td valign="top" style="width: 133px">159.338 GB</td>
<td valign="top" style="width: 133px">102.380 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Jun-2007</td>
<td valign="top" style="width: 133px">157.004 GB</td>
<td valign="top" style="width: 133px">132.604 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Jul-2007</td>
<td valign="top" style="width: 133px">132.938 GB</td>
<td valign="top" style="width: 133px">124.104 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Aug-2007</td>
<td valign="top" style="width: 133px">172.039 GB</td>
<td valign="top" style="width: 133px">113.967 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Sep-2007</td>
<td valign="top" style="width: 133px">214.350 GB</td>
<td valign="top" style="width: 133px">74.302 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Oct-2007</td>
<td valign="top" style="width: 133px">228.137 GB</td>
<td valign="top" style="width: 133px">136.154 GB</td>
</tr>
<tr>
<td valign="top" style="width: 133px">Nov-2007</td>
<td valign="top" style="width: 133px">153.469 GB</td>
<td valign="top" style="width: 133px">86.494 GB</td>
</tr>
</table>
<p>You can see the dip last year where I wasn&#8217;t doing much online, and the growth as more and more of my TV viewing is timeshifted not by Sky+ but via BitTorrent.  In a climate where a lot of ISPs are introducing &#8220;fair-use&#8221; policies to limit bandwidth use, it&#8217;s a testament to the strength and speed of Zen&#8217;s network that my monthly average use over the last year or so is ~117 GB!</p>
]]></content:encoded>
			<wfw:commentRss>http://durdle.com/archives/2007/12/02/broadband-usage/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fontifier fun.</title>
		<link>http://durdle.com/archives/2006/10/12/fontifier-fun/</link>
		<comments>http://durdle.com/archives/2006/10/12/fontifier-fun/#comments</comments>
		<pubDate>Thu, 12 Oct 2006 11:07:50 +0000</pubDate>
		<dc:creator>Howard</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.durdle.com/archives/2006/10/12/fontifier-fun/</guid>
		<description><![CDATA[
I came across the Fontifier site the other day, for 9 USD they&#8217;ll make you a TTF (True Type Font) file of your own handwriting.  It&#8217;s a painless process: print the template, draw your scrappy handwriting into the boxes, then scan and upload it to them.  I&#8217;ve done mine, and it&#8217;s quite fun...]]></description>
			<content:encoded><![CDATA[<p><img width="289" height="43" id="image243" alt="Howard the Font" src="/wp-content/uploads/newfont.jpg" /></p>
<p>I came across the <a href="http://www.fontifier.com/">Fontifier</a> site the other day, for 9 USD they&#8217;ll make you a TTF (True Type Font) file of your own handwriting.  It&#8217;s a painless process: print the template, draw your scrappy handwriting into the boxes, then scan and upload it to them.  I&#8217;ve done mine, and it&#8217;s quite fun to be able to &#8220;type&#8221; your own handwriting into Word!</p>
<p>Neat eh?</p>
]]></content:encoded>
			<wfw:commentRss>http://durdle.com/archives/2006/10/12/fontifier-fun/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IE7 Beta 2 brickbats and bouquets&#8230;</title>
		<link>http://durdle.com/archives/2006/04/28/ie7-beta-2-brickbats-and-bouquets/</link>
		<comments>http://durdle.com/archives/2006/04/28/ie7-beta-2-brickbats-and-bouquets/#comments</comments>
		<pubDate>Fri, 28 Apr 2006 08:57:21 +0000</pubDate>
		<dc:creator>Howard</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.durdle.com/archives/2006/04/28/ie7-beta-2-brickbats-and-bouquets/</guid>
		<description><![CDATA[The public beta of Internet Explorer 7 has been out for a while now, and like the good Microsoft soldier I am, I installed it this week.  It&#8217;s very nice.  If you&#8217;ve only ever used IE it&#8217;ll be full of neat new toys that you&#8217;ve never seen before.  If you&#8217;ve been using Firefox or Safari,...]]></description>
			<content:encoded><![CDATA[<p><img id="image226" title="Internet Explorer 7" alt="Internet Explorer 7" hspace="3" src="/wp-content/uploads/ie7_thumb_logo.gif" align="left" vspace="3" />The public beta of <a href="http://www.microsoft.com/windows/ie/default.mspx" target="_blank">Internet Explorer 7</a> has been out for a while now, and like the good Microsoft soldier I am, I installed it this week.  It&#8217;s very nice.  If you&#8217;ve only ever used IE it&#8217;ll be full of neat new toys that you&#8217;ve never seen before.  If you&#8217;ve been using Firefox or Safari, or most any other browser there will be little that&#8217;ll surprise you.  Tabbed browsing is there of course, and the thumbnail previews of all your tabs is a nice feature.  It incorporates RSS feeds (keeping them along with your favourites) which is a feature I&#8217;ve been waiting for on Windows for ages.</p>
<p>All good things then?  Well, no, unfortunately.  The first casualty of IE7 was my online banking.  Natwest Online failed to let me log in with IE7 &#8211; not that it recognised I was on an unsupported browser, just that IE7 refused to work with the form controls.  Worse than that thought was the realisation that IE7 would not let me log into the Outlook Web Access account I use to check my microsoft.com email address!  Yesterday I actually ended up using Firefox to check my microsoft email.  The irony was not lost on me.</p>
<p>So, I uninstalled IE7, only to find that the problems I&#8217;d found had been left behind: HTML form elements were no longer processed in any web page, and after further investigation it seemed that the jscript and vbscript engines had been unregistered.  So from Start->Run I did the following:</p>
<div class="wp_syntax">
<div class="code">
<pre class="reg" style="font-family:monospace;">regsvr32 jscript
regsvr32 vbscript
regsvr32 /i mshtml</pre>
</div>
</div>
<p>Which seems to have fixed everything. </p>
<p>It&#8217;s a shame, because IE7 looks like it&#8217;s going to be great, but right now, on my system, it appears to be quite broken. </p>
<p>As usual with a beta, caveat emptor: you get what you pay for!</p>
]]></content:encoded>
			<wfw:commentRss>http://durdle.com/archives/2006/04/28/ie7-beta-2-brickbats-and-bouquets/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Philosophy majors shouldn&#039;t write technology editorials</title>
		<link>http://durdle.com/archives/2006/04/19/philosophy-majors-should-not-write-technology-editorials/</link>
		<comments>http://durdle.com/archives/2006/04/19/philosophy-majors-should-not-write-technology-editorials/#comments</comments>
		<pubDate>Wed, 19 Apr 2006 16:17:54 +0000</pubDate>
		<dc:creator>Howard</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Virtualisation]]></category>

		<guid isPermaLink="false">http://blog.durdle.com/archives/2006/04/19/philosophy-majors-should-not-write-technology-editorials/</guid>
		<description><![CDATA[Richard sent me an email yesterday with a link to this article along with the message &#8220;You&#8217;ll love this one&#8230;&#8221;  If you&#8217;ve followed the Windows on Mac saga recently go and read it now, if you&#8217;re anything like me and Richard you&#8217;ll have plenty to say on the subject once you&#8217;ve finished reading.
I couldn&#8217;t believe...]]></description>
			<content:encoded><![CDATA[<p><a title="http://www.peat.me.uk/" href="http://www.peat.me.uk/" target="_blank">Richard</a> sent me an email yesterday with a link to <a title="Boot Camp crashes and burns" href="http://www.californiaaggie.com/home/index.cfm?event=displayArticle&#038;uStory_id=f627685a-3c4d-4924-80f7-5275852db10b" target="_blank">this article</a> along with the message &#8220;You&#8217;ll love this one&#8230;&#8221;  If you&#8217;ve followed the Windows on Mac saga recently go and read it now, if you&#8217;re anything like me and Richard you&#8217;ll have plenty to say on the subject once you&#8217;ve finished reading.</p>
<p>I couldn&#8217;t believe that any publication would bother to publish something like that, even as an &#8220;opinion&#8221; piece in a student paper and even only on their website.  The author, who may be a veritable genius when it comes to philosophy, clearly has no idea what he (she?) is talking about when it comes to technology.  They don&#8217;t seem to understand the difference between emulation, virtualisation and dual booting, and have apparently very little grasp of hardware specifics&#8230;</p>
<blockquote><p>When a Mac starts to emulate a Windows platform completely, the computer must provide additional voltage to provide the computing power.</p></blockquote>
<p>Ignoring the author&#8217;s misconception that the Mac is <em>emulating</em> Windows (it is running Windows natively on an X86 chip remember&#8230;) what&#8217;s this about additional voltage?!  What?!  The intel chip in my MacBook &#8211; when running XP &#8211; is pulling the same power as when it runs OS X, or the same as the identical chip that runs Windows XP in the latest HP notebook.  Windows XP playing games such as UT2004 on the MacBook causes it to generate as much heat as OS X playing the Universal Binary of UT2004.  It&#8217;s hot (really hot), granted, but the idea that Windows is magically making the processor run hotter than OS X will ever allow is false.  It just gets as hot only <em>quicker</em>.</p>
<blockquote><p>getting a Mac to run PC games will result in heartache &#8211; this I can guarantee</p></blockquote>
<p>The author doesn&#8217;t specify exactly what heartache it will result in&#8230; My MacBook runs Half Life 2, CountStrike: Source, Unreal Tournament 2004 and Rise of Nations in some cases significantly faster/smoother than my Dell.  What heartache?  Heat-ache maybe, but no worse than OS X causes!</p>
<blockquote><p>For reiteration, Macs cannot run Windows like PCs can.</p></blockquote>
<p>Urm, yes.  Yes they can.  That&#8217;s rather what all the fuss was about when Apple put Intel chips inside.  <strong>INTEL</strong>.  <strong>x86 chips</strong>.  The same instruction set that nearly every PC on the planet uses to run, oh, for example, Windows!  Do you think the author understands the difference between a PPC and an Intel chip, and the reason why a Mac can now run <em>exactly</em> like a PC?</p>
<p>I can&#8217;t bring myself to refute the fifth paragraph (&#8220;<em>My third point references to the industry</em>.&#8221;) as it is so full of misunderstandings of the technology, the businesses involved and the computer industry&#8217;s recent history that it&#8217;s just not worth it.</p>
<p>Boot Camp crashes and burns?  Hardly.  It&#8217;s beta software.  It came with a warning.  Anyone who chose to ignore that warning and install it on a production machine deserves any hassle they get.  That said, my installation of Boot Camp was utterly without problems and I&#8217;ve heard lots of other positive reports on <a title="Gabe at Penny Arcade on BootCamp" href="http://www.penny-arcade.com/2006/04/19#1145466240" target="_blank">various forums</a>.  I&#8217;m grateful to Apple for providing Boot Camp and the driver suite &#8211; I&#8217;d just like some of my <a title="Why my primary Windows XP machine is still a Dell" href="http://blog.durdle.com/archives/2006/04/12/no-to-macbook-pro/">minor niggles</a> addressed!</p>
]]></content:encoded>
			<wfw:commentRss>http://durdle.com/archives/2006/04/19/philosophy-majors-should-not-write-technology-editorials/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
