<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Matthew Skelton</title>
	<atom:link href="http://matthewskelton.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://matthewskelton.wordpress.com</link>
	<description>@matthewpskelton</description>
	<lastBuildDate>Sun, 19 Feb 2012 22:22:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='matthewskelton.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Matthew Skelton</title>
		<link>http://matthewskelton.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://matthewskelton.wordpress.com/osd.xml" title="Matthew Skelton" />
	<atom:link rel='hub' href='http://matthewskelton.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Speed up Web Applications with SSL Offloading</title>
		<link>http://matthewskelton.wordpress.com/2012/02/19/115/</link>
		<comments>http://matthewskelton.wordpress.com/2012/02/19/115/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 20:35:01 +0000</pubDate>
		<dc:creator>Matthew Skelton (@matthewpskelton)</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://fournines.wordpress.com/?p=69</guid>
		<description><![CDATA[Reblogged from Four Nines: Web sites and web applications are increasingly using secure connections (HTTPS) for all traffic not just obviously sensitive data, as a way to guard against security threats. However, HTTPS requires encryption/decryption of data, which is computationally intensive. Web applications can therefore benefit from “offloading” the encryption/decryption processing required for HTTPS to specialised [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=115&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="reblog-post">
<p class="reblog-from"><img alt='' src='http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=25&amp;d=retro&amp;r=G' class='avatar avatar-25' height='25' width='25' /> <a href="http://fournines.wordpress.com/2011/12/08/speed-up-web-applications-with-ssl-offloading/">Reblogged from Four Nines:</a></p>
<p><a href="http://fournines.wordpress.com/2011/12/08/speed-up-web-applications-with-ssl-offloading/" target="_self"><img src="http://s0.wp.com/imgpress?url=http%3A%2F%2Ffarm1.staticflickr.com%2F113%2F264394467_ab3800c85c.jpg&#038;w=640" alt="Click to visit the original post" class="size-full" /></a>
<ul class="thumb-list">
<li><a href="http://fournines.wordpress.com/2011/12/08/speed-up-web-applications-with-ssl-offloading/" target="_self"><img src="http://fournines.files.wordpress.com/2011/12/ssl-offload-1.png?crop=1&#038;w=72&#038;h=72#038;w=72&#038;h=72" alt="Click to visit the original post" class="size-thumb" width="72" height="72" /></a></li>
<li><a href="http://fournines.wordpress.com/2011/12/08/speed-up-web-applications-with-ssl-offloading/" target="_self"><img src="http://fournines.files.wordpress.com/2011/12/ssl-offload-2.png?crop=1&#038;w=72&#038;h=72#038;w=72&#038;h=72" alt="Click to visit the original post" class="size-thumb" width="72" height="72" /></a></li>
<li><a href="http://fournines.wordpress.com/2011/12/08/speed-up-web-applications-with-ssl-offloading/" target="_self"><img src="http://fournines.files.wordpress.com/2011/12/ssl-offload-3.png?crop=1&#038;w=72&#038;h=72#038;w=72&#038;h=72" alt="Click to visit the original post" class="size-thumb" width="72" height="72" /></a></li>
</ul>
<p dir='auto'>
Web sites and web applications are increasingly using secure connections (HTTPS) for all traffic not just obviously sensitive data, as a way to guard against security threats. However, HTTPS requires encryption/decryption of data, which is computationally intensive. Web applications can therefore benefit from “offloading” the encryption/decryption processing required for HTTPS to specialised hardware devices. &hellip;
</p>
</div>
<div class="reblogger-note"><img alt='' src='http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=25&amp;d=retro&amp;r=G' class='avatar avatar-25' height='25' width='25' />
<div class='reblogger-note-content'>
Originally posted at Four Nines (http://fournines.wordpress.com/2011/12/08/speed-up-web-applications-with-ssl-offloading/)
</div>
</div>
<br />Filed under: <a href='http://matthewskelton.wordpress.com/category/uncategorized/'>Uncategorized</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthewskelton.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthewskelton.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthewskelton.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthewskelton.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/matthewskelton.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/matthewskelton.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/matthewskelton.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/matthewskelton.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthewskelton.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthewskelton.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthewskelton.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthewskelton.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthewskelton.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthewskelton.wordpress.com/115/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=115&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://matthewskelton.wordpress.com/2012/02/19/115/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">matthewpskelton</media:title>
		</media:content>

		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=25&#38;d=retro&#38;r=G" medium="image" />

		<media:content url="http://s0.wp.com/imgpress?url=http%3A%2F%2Ffarm1.staticflickr.com%2F113%2F264394467_ab3800c85c.jpg&#38;w=640" medium="image">
			<media:title type="html">Click to visit the original post</media:title>
		</media:content>

		<media:content url="http://fournines.files.wordpress.com/2011/12/ssl-offload-1.png?crop=1&#38;w=72&#38;h=72" medium="image">
			<media:title type="html">Click to visit the original post</media:title>
		</media:content>

		<media:content url="http://fournines.files.wordpress.com/2011/12/ssl-offload-2.png?crop=1&#38;w=72&#38;h=72" medium="image">
			<media:title type="html">Click to visit the original post</media:title>
		</media:content>

		<media:content url="http://fournines.files.wordpress.com/2011/12/ssl-offload-3.png?crop=1&#38;w=72&#38;h=72" medium="image">
			<media:title type="html">Click to visit the original post</media:title>
		</media:content>

		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=25&#38;d=retro&#38;r=G" medium="image" />
	</item>
		<item>
		<title>Site Reliabililty at Scale &#8211; Discussion Roundup</title>
		<link>http://matthewskelton.wordpress.com/2012/02/05/site-reliabililty-at-scale-discussion-roundup/</link>
		<comments>http://matthewskelton.wordpress.com/2012/02/05/site-reliabililty-at-scale-discussion-roundup/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 19:57:41 +0000</pubDate>
		<dc:creator>Matthew Skelton (@matthewpskelton)</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[reliability]]></category>

		<guid isPermaLink="false">http://matthewskelton.wordpress.com/?p=107</guid>
		<description><![CDATA[There have been several useful discussion threads on the LinkedIn Site Reliability at Scale group (http://www.linkedin.com/groups?home=&#38;gid=4200099) recently: Is extreme high availability a bad thing? &#8220;&#8230;having a higher degree of PER ELEMENT failure, while allowing an architecture to get you to extremely high overall reliability, is one of the more transformative features of many cloud options&#8230;&#8220; Several [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=107&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There have been several useful discussion threads on the LinkedIn <a href="http://www.linkedin.com/groups?home=&amp;gid=4200099">Site Reliability at Scale</a> group (<a href="http://www.linkedin.com/groups?home=&amp;gid=4200099">http://www.linkedin.com/groups?home=&amp;gid=4200099</a>) recently:</p>
<p><span id="more-107"></span></p>
<p><a href="http://inhabitat.com/renzo-pianos-shard-skyscraper-will-tower-over-london/"><img class="alignnone" title="The Shard, London" src="http://www.inhabitat.com/wp-content/uploads/shard.jpg" alt="The Shard, London" width="537" height="401" /></a></p>
<h3 class="groups" style="outline-width:0;outline-style:initial;outline-color:initial;font-weight:inherit;font-size:16px;font-family:Arial, Helvetica, 'Nimbus Sans L', sans-serif;vertical-align:baseline;color:#333333;background-color:#ffffff;border-color:initial;border-style:initial;border-width:0;margin:0;padding:0;"><span style="text-decoration:underline;"><a style="outline-width:initial;outline-style:none;outline-color:initial;font-style:inherit;font-family:inherit;vertical-align:baseline;color:#006699;text-decoration:underline;border-color:initial;border-style:initial;border-width:0;margin:0;padding:0;" href="http://www.linkedin.com/groups/Is-extreme-high-availability-bad-4200099.S.88174558?qid=e5dfc22f-09e9-4bee-ad32-7aa9c75b6b38&amp;trk=group_most_recent_rich-0-b-ttl&amp;goback=%2Egmr_4200099">Is extreme high availability a bad thing?</a></span></h3>
<ul>
<li>&#8220;<em>&#8230;having a higher degree of PER ELEMENT failure, while allowing an architecture to get you to extremely high overall reliability, is one of the more transformative features of many cloud options&#8230;</em>&#8220;</li>
<li>Several comments about how reliability is less immediately appealing to businesses  than new features, but of course reliability is the slow-burning coal, whereas new features are often just so much kindling (and therefore &#8220;burn out&#8221; very quickly).</li>
</ul>
<h3 class="groups" style="outline-width:0;outline-style:initial;outline-color:initial;font-weight:inherit;font-size:16px;font-family:Arial, Helvetica, 'Nimbus Sans L', sans-serif;vertical-align:baseline;color:#333333;background-color:#ffffff;border-color:initial;border-style:initial;border-width:0;margin:0;padding:0;"><span style="text-decoration:underline;"><a style="outline-width:initial;outline-style:none;outline-color:initial;font-style:inherit;font-family:inherit;vertical-align:baseline;color:#006699;text-decoration:underline;border-color:initial;border-style:initial;border-width:0;margin:0;padding:0;" href="http://www.linkedin.com/groups/What-are-you-using-server-4200099.S.87438890?qid=e5dfc22f-09e9-4bee-ad32-7aa9c75b6b38&amp;trk=group_most_recent_rich-0-b-ttl&amp;goback=%2Egmr_4200099">What are you using for server and network monitoring?</a></span></h3>
<ul>
<li>Zabbix and Nagios are the usual suspects, with Splunk in the mix too (obviously not a direct comparison), with Zenoss making waves. Little input from anyone running SCOM for Windows; presumably these folks are using Zabbix or Nagios(?!).</li>
</ul>
<h3 class="groups" style="outline-width:0;outline-style:initial;outline-color:initial;font-weight:inherit;font-size:16px;font-family:Arial, Helvetica, 'Nimbus Sans L', sans-serif;vertical-align:baseline;color:#333333;background-color:#ffffff;border-color:initial;border-style:initial;border-width:0;margin:0;padding:0;"><span style="text-decoration:underline;"><a style="outline-width:initial;outline-style:none;outline-color:initial;font-style:inherit;font-family:inherit;vertical-align:baseline;color:#006699;text-decoration:underline;border-color:initial;border-style:initial;border-width:0;margin:0;padding:0;" href="http://www.linkedin.com/groups/Literature-on-website-scalability-4200099.S.89766859?qid=e5dfc22f-09e9-4bee-ad32-7aa9c75b6b38&amp;trk=group_most_recent_rich-0-b-ttl&amp;goback=%2Egmr_4200099">Literature on website scalability</a></span></h3>
<p>Some useful print and online resources for building reliable websites, including:</p>
<ul>
<li><a href="http://pragprog.com/book/rwdata/seven-databases-in-seven-weeks">Seven Databases in Seven Weeks</a>
<ul>
<li><a href="http://pragprog.com/book/rwdata/seven-databases-in-seven-weeks">http://pragprog.com/book/rwdata/seven-databases-in-seven-weeks</a></li>
</ul>
</li>
<li><a href="http://shop.oreilly.com/product/9780596529307.do">High Performance Web Sites</a>[although this probably needs updating now to include WebSockets, Node.js, etc.]
<ul>
<li><a href="http://shop.oreilly.com/product/9780596529307.do">http://shop.oreilly.com/product/9780596529307.do</a></li>
</ul>
</li>
<li><a href="http://www.gigaspaces.com/wiki/display/XAP8/Product+Architecture">Gigaspaces XAP architecture overview</a>
<ul>
<li><a href="http://www.gigaspaces.com/wiki/display/XAP8/Product+Architecture">http://www.gigaspaces.com/wiki/display/XAP8/Product+Architecture</a></li>
</ul>
</li>
<li><a href="http://www.akamai.com/dl/technical_publications/ExperiencewithsomePrinciplesforBuildinganInternetScaleReliableSystem.pdf">Experience with some Principles for Building an Internet-Scale Reliable System</a>(Akamai &#8211; PDF, 160 Kb)
<ul>
<li><a href="http://www.akamai.com/dl/technical_publications/ExperiencewithsomePrinciplesforBuildinganInternetScaleReliableSystem.pdf">http://www.akamai.com/dl/technical_publications/ ExperiencewithsomePrinciplesforBuildinganInternetScaleReliableSystem.pdf</a></li>
</ul>
</li>
</ul>
<br />Filed under: <a href='http://matthewskelton.wordpress.com/category/computer-systems/architecture/'>Architecture</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/monitoring/'>Monitoring</a> Tagged: <a href='http://matthewskelton.wordpress.com/tag/infrastructure/'>infrastructure</a>, <a href='http://matthewskelton.wordpress.com/tag/logging/'>logging</a>, <a href='http://matthewskelton.wordpress.com/tag/monitoring-2/'>monitoring</a>, <a href='http://matthewskelton.wordpress.com/tag/reliability/'>reliability</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthewskelton.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthewskelton.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthewskelton.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthewskelton.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/matthewskelton.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/matthewskelton.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/matthewskelton.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/matthewskelton.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthewskelton.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthewskelton.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthewskelton.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthewskelton.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthewskelton.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthewskelton.wordpress.com/107/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=107&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://matthewskelton.wordpress.com/2012/02/05/site-reliabililty-at-scale-discussion-roundup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">matthewpskelton</media:title>
		</media:content>

		<media:content url="http://www.inhabitat.com/wp-content/uploads/shard.jpg" medium="image">
			<media:title type="html">The Shard, London</media:title>
		</media:content>
	</item>
		<item>
		<title>CLR-COM Interop</title>
		<link>http://matthewskelton.wordpress.com/2012/01/29/clr-com-interop/</link>
		<comments>http://matthewskelton.wordpress.com/2012/01/29/clr-com-interop/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 20:40:03 +0000</pubDate>
		<dc:creator>Matthew Skelton (@matthewpskelton)</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Archive Material]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[COM]]></category>

		<guid isPermaLink="false">http://matthewskelton.wordpress.com/?p=100</guid>
		<description><![CDATA[[This is a very old article I wrote back in 2002 when I worked for a company which built MRI scanners and was subsequently bought by Oxford Instruments. With COM being once again relevant with the introduction of WinRT, I thought it might be useful to revisit some core COM and .NET concepts.] Details CLR-to-Native Win32 The CLR subsystem [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=100&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>[This is a very old article I wrote back in 2002 when I worked for a company which built MRI scanners and was subsequently bought by <a href="http://www.oxford-instruments.com/" target="_parent">Oxford Instruments</a>. With COM being once again relevant with the introduction of <a href="http://tirania.org/blog/archive/2011/Sep-15.html" target="_parent">WinRT</a>, I thought it might be useful to revisit some core COM and .NET concepts.]</em></p>
<h3>Details</h3>
<h4>CLR-to-Native Win32</h4>
<p>The CLR subsystem responsible for managing access to the native platform is known as <em>P/Invoke</em>. These services are included in an application by use of the namespace System.Runtime.InteropServices, and the [DllImport(“&lt;DLL_NAME&gt;”)] attribute prepended to the function prototype.</p>
<p>When a call goes out to a piece of Unmanaged code from Managed code (CLR), a flag is set on the application’s CLR (pseudo-) stack. This causes the GC not to collect during the duration of the Unmanaged call. The <em>Security Subsystem</em> responds to the flag by searching up the stack for permissions to enter Unmanaged code. The security check can be suppressed by a call to System.Security.SuppressUnmanagedCodeSecurity, which prevents stack crawling by the Security Subsystem beyond the point at which the call was made.</p>
<p><span id="more-100"></span></p>
<p>P/Invoke builds a second stackframe to use when calling the Unmanaged code. Some types can be blitted from the CLR stackframe to the Unmanaged frame, e.g. integers. Other types such as System.String are less easy to transfer to the new frame; instead of a reference to the string memory being passed, a char*-compatible copy is made, meaning that the intended manipulation of the character string inside the Unmanaged code does not get transferred back to the CLR string.<a href="#_ftn1">[1]</a></p>
<p>P/Invoke performs type conversion/coercion automatically on-the-fly. The precise native (Win32) type of converted CLR types can by controlled using the MarshallAs directive.</p>
<p>Note that a call through P/Invoke is expensive: a minimum of 32 machine instructions is required for the Managed-to-Unmanaged transition. In practice this figure will be much larger.</p>
<h4>CLR-to-COM</h4>
<p>The CLR can interop with COM. CLR types appear as COM objects to COM via CCWs, and COM objects appear as CLR types to the CLR via RCWs. The tools TLBIMP.exe and TLBEXP.exe can be used to generate CCWs and RCWs.</p>
<p>ComImport is a compiler directive (== metadata property) that directs the CLR to create the object to which it refers using the classic COM CoCreateInstance rather than from its own GC-managed heap.</p>
<h4>COM-to-CLR</h4>
<p>The tool RegAsm.exe registers types found in a .NET assembly as COM objects. These COM objects are hosted in mscoree.exe as InProc servers.<a title="" href="#_ftn2">[2]</a> mscoree.dll and mscorlib.dll are the CLR COM Type Libraries.</p>
<h3>Comments</h3>
<p>This document is based on a lecture given at <a href="http://www.devweek.com/">DevWeek</a> 2002.</p>
<h3>Glossary</h3>
<ul>
<li>CCW&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. COM-Callable Wrapper</li>
<li>CLR&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; Common Language Runtime</li>
<li>GC&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. Garbage Collector</li>
<li>P/Invoke&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; Platform Invoke</li>
<li>RCW&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. Runtime-Callable Wrapper</li>
</ul>
<div>
<hr align="left" size="1" width="33%" />
<div>
<p><a name="_ftn1"></a>[1] N.B. System.String is immutable, i.e. should not be modified once created. Passing a string by reference to a native Win32 DLL could allow modification, and so memory corruption. Use System.StringBuilder to manipulate strings.</p>
</div>
<div>
<p><a name="_ftn2"></a>[2] A public key must be used to generate a GUID for CLR types marked for export as COM objects, because the standard GUID generation is not used in .NET.</p>
</div>
</div>
<br />Filed under: <a href='http://matthewskelton.wordpress.com/category/computer-systems/architecture/'>Architecture</a>, <a href='http://matthewskelton.wordpress.com/category/archive-material/'>Archive Material</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/software/'>Software</a> Tagged: <a href='http://matthewskelton.wordpress.com/tag/net-framework/'>.NET Framework</a>, <a href='http://matthewskelton.wordpress.com/tag/com/'>COM</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthewskelton.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthewskelton.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthewskelton.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthewskelton.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/matthewskelton.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/matthewskelton.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/matthewskelton.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/matthewskelton.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthewskelton.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthewskelton.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthewskelton.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthewskelton.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthewskelton.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthewskelton.wordpress.com/100/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=100&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://matthewskelton.wordpress.com/2012/01/29/clr-com-interop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">matthewpskelton</media:title>
		</media:content>
	</item>
		<item>
		<title>Advanced Call Processing in the CLR</title>
		<link>http://matthewskelton.wordpress.com/2012/01/29/advanced-call-processing-in-the-clr/</link>
		<comments>http://matthewskelton.wordpress.com/2012/01/29/advanced-call-processing-in-the-clr/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 20:25:17 +0000</pubDate>
		<dc:creator>Matthew Skelton (@matthewpskelton)</dc:creator>
				<category><![CDATA[Archive Material]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[JIT]]></category>

		<guid isPermaLink="false">http://matthewskelton.wordpress.com/?p=90</guid>
		<description><![CDATA[[This is a very old article I wrote back in 2002 when I worked for a company which built MRI scanners and was subsequently bought by Oxford Instruments. With COM being once again relevant with the introduction of WinRT, I thought it might be useful to revisit some core COM and .NET concepts.] Details Method Calls Every object in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=90&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>[This is a very old article I wrote back in 2002 when I worked for a company which built MRI scanners and was subsequently bought by <a href="http://www.oxford-instruments.com/" target="_parent">Oxford Instruments</a>. With COM being once again relevant with the introduction of <a href="http://tirania.org/blog/archive/2011/Sep-15.html" target="_parent">WinRT</a>, I thought it might be useful to revisit some core COM and .NET concepts.]</em></p>
<h3>Details</h3>
<h4>Method Calls</h4>
<p>Every object in the CLR has type information associated with it, in the form of a 36-byte header:</p>
<p><a href="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-1.png"><img class="alignnone size-full wp-image-95" title="Advanced-Call-Processing-in-the-CLR-1" src="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-1.png?w=640" alt="Advanced-Call-Processing-in-the-CLR-1"   /></a></p>
<p>Every method on the object has an entry in the method table (which acts in a similar way to a vtable in C++). Each entry is in effect a function pointer, and all method calls on the object come via the method table.</p>
<p>Immediately following object construction (using the .ctor or .cctor method) the objects method table appears thus:</p>
<p><a href="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-2.png"><img class="alignnone size-full wp-image-91" title="Advanced-Call-Processing-in-the-CLR-2" src="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-2.png?w=640" alt="Advanced-Call-Processing-in-the-CLR-2"   /></a></p>
<p><span id="more-90"></span></p>
<p>The entry in the object’s method table points to the first element of the Pre-stub worker (the Instruction Pointer). This in turn has been initialised to point to an execution block in the JIT compiler. The JIT compiler then dereferences the second element (the IL Pointer) of the Pre-stub worker to read the IL code for the requested method from the Assembly where the method resides.</p>
<p>The JIT compiler then JITs the IL code to produce native machine code (e.g. x86 instructions), and then redirects the first member of the Pre-worker stub to point to that native code instead:</p>
<p><a href="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-3.png"><img class="alignnone size-full wp-image-92" title="Advanced-Call-Processing-in-the-CLR-3" src="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-3.png?w=640" alt="Advanced-Call-Processing-in-the-CLR-3"   /></a></p>
<p>Following JITting, the method pointer has only a single indirection in the stub before reaching native code. This is actually better than native Win32 DLLs, where, due to base address relocation, there is usually a second indirection.</p>
<h4>Interface Method Calls</h4>
<p>There is no obvious order for interface method implementations in the method table; unlike the situation for classes, a derived object can implement the methods of a ‘higher’ interface than its ancestor. Therefore, an extra level of indirection is needed to map the method table entries of interface methods to their implementations:</p>
<p><a href="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-4.png"><img class="alignnone size-full wp-image-93" title="Advanced-Call-Processing-in-the-CLR-4" src="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-4.png?w=640" alt="Advanced-Call-Processing-in-the-CLR-4"   /></a></p>
<h4>Dynamic Code Execution</h4>
<p>How to execute code based on user input, e.g. “Execute the method called ‘FooBar’” is solved in a much more efficient way than under COM, where the IDispatch interface with Invoke was notoriously slow.</p>
<p>Under .NET there are three basic options:</p>
<h5>1. Interface and case statement</h5>
<p>Devise an interface (e.g. IDynamicExecute) and have the implementing class instance check in a case statement the requested method name against the list of methods it implements.</p>
<p><strong>Disadvantage</strong>: no compile-time type checking.</p>
<h5>2. GetMethod, Invoke</h5>
<p>Use GetType.GetMethod(&lt;methodname&gt;) and &lt;method&gt;.Invoke. Use the MethodInfo type to return a list of methods by signature (but not return value).</p>
<p><strong>Disadvantage</strong>: about 1000× slower than standard method calls, due to run-time type-checking.</p>
<h5>3. Delegates</h5>
<p>To grab a function pointer, Method.MethodHandle.GetFunctionPointer can be used, but IL assembly code is required to make use of this.</p>
<p>Use Delegate.CreateDelegate to create a method variable dynamically bound to a specific object instance. Delegate methods are marked with the runtime modifier to show that their implementations will be created on-the-fly by the CLR when the delegate object is created. The code they execute is specified at runtime.</p>
<p>Execution overhead is small, with only eight extra machine instructions; the ecx register (this pointer) is flipped by the CLR to point to the code to execute.</p>
<p><a href="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-5.png"><img class="alignnone size-full wp-image-94" title="Advanced-Call-Processing-in-the-CLR-5" src="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-5.png?w=640" alt="Advanced-Call-Processing-in-the-CLR-5"   /></a></p>
<h4>Asynchronous Methods</h4>
<p>Asynchronous method calls use Delegates. Events allow [un]registration for specified conditions, and are also implemented using Delegates. Threads from the CLR thread pool are used to fulfil the async request<a href="#_ftn1">[1]</a>.</p>
<p>Rules developed for async method calls in COM+ and MTS apply here.</p>
<h3>Comments</h3>
<p>This document is based on a lecture given at <a href="http://www.devweek.com/">DevWeek</a> 2002.</p>
<h3>Glossary</h3>
<ul>
<li>vtable: virtual method table</li>
<li>.ctor: constructor method</li>
<li>.cctor: class (static) constructor method</li>
</ul>
<div>
<hr align="left" size="1" width="33%" />
<div>
<p><a name="_ftnref1"></a>[1] There is no guarantee that a CLR thread maps to a hard OS thread; in fact Microsoft may use fibers in a future CLR implementation.</p>
</div>
</div>
<br />Filed under: <a href='http://matthewskelton.wordpress.com/category/archive-material/'>Archive Material</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/software/'>Software</a>, <a href='http://matthewskelton.wordpress.com/category/uncategorized/'>Uncategorized</a> Tagged: <a href='http://matthewskelton.wordpress.com/tag/net-framework/'>.NET Framework</a>, <a href='http://matthewskelton.wordpress.com/tag/jit/'>JIT</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthewskelton.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthewskelton.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthewskelton.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthewskelton.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/matthewskelton.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/matthewskelton.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/matthewskelton.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/matthewskelton.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthewskelton.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthewskelton.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthewskelton.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthewskelton.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthewskelton.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthewskelton.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=90&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://matthewskelton.wordpress.com/2012/01/29/advanced-call-processing-in-the-clr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">matthewpskelton</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-1.png" medium="image">
			<media:title type="html">Advanced-Call-Processing-in-the-CLR-1</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-2.png" medium="image">
			<media:title type="html">Advanced-Call-Processing-in-the-CLR-2</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-3.png" medium="image">
			<media:title type="html">Advanced-Call-Processing-in-the-CLR-3</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-4.png" medium="image">
			<media:title type="html">Advanced-Call-Processing-in-the-CLR-4</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/advanced-call-processing-in-the-clr-5.png" medium="image">
			<media:title type="html">Advanced-Call-Processing-in-the-CLR-5</media:title>
		</media:content>
	</item>
		<item>
		<title>CLR Contexts</title>
		<link>http://matthewskelton.wordpress.com/2012/01/29/clr-contexts/</link>
		<comments>http://matthewskelton.wordpress.com/2012/01/29/clr-contexts/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 19:43:11 +0000</pubDate>
		<dc:creator>Matthew Skelton (@matthewpskelton)</dc:creator>
				<category><![CDATA[Archive Material]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://matthewskelton.wordpress.com/?p=80</guid>
		<description><![CDATA[[This is a very old article I wrote back in 2002 when I worked for a company which built MRI scanners and was subsequently bought by Oxford Instruments. With COM being once again relevant with the introduction of WinRT, I thought it might be useful to revisit some core COM concepts.] Details Definitions A Context is a way [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=80&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>[This is a very old article I wrote back in 2002 when I worked for a company which built MRI scanners and was subsequently bought by <a href="http://www.oxford-instruments.com/" target="_blank">Oxford Instruments</a>. With COM being once again relevant with the introduction of <a href="http://tirania.org/blog/archive/2011/Sep-15.html">WinRT</a>, I thought it might be useful to revisit some core COM concepts.]</em></p>
<h3>Details</h3>
<h4>Definitions</h4>
<p>A Context is a way to group together CLR objects having similar runtime (execution) requirements. Contexts are created as needed by the CLR. Cross-context calls require proxies, in a similar manner to cross-Apartment calls in COM.</p>
<p>Execution requirements could include:</p>
<ul>
<li>Synchronisation</li>
<li>Transactional support</li>
<li>Database updates</li>
</ul>
<p>Contexts also allow arbitrary message processing to be ‘plugged-in’ to the method-processing architecture by the use of Proxies.</p>
<p><span id="more-80"></span></p>
<h4>Example</h4>
<p><a href="http://matthewskelton.files.wordpress.com/2012/01/clr-contexts-1.png"><img class="alignnone size-full wp-image-85" title="CLR-Contexts-1" src="http://matthewskelton.files.wordpress.com/2012/01/clr-contexts-1.png?w=640" alt="CLR-Contexts-1"   /></a></p>
<p>CLR Process 1 contains a single AppDomain, which in turn contains two Contexts. Object C must be marked with special processing requirements (say, Interlocked access), and so is placed in a Context which supports this feature. The default (first) Context has no special processing features.</p>
<p>Objects A &amp; B were marked with no special requirements, and so were placed in the Default Context. In order to access Object C, Object B must call through the Proxy. To B, the Proxy appears just like C; in fact B does not know that a proxy is being used. Likewise, if C needs to call A, it uses a Proxy which resembles A in terms of method signatures etc.</p>
<h4>Context Creation</h4>
<p>The CLR creates Contexts <strong>automatically</strong> as required: if the Context attributes of the current context do not fit the attributes of the object about to be created, then a new Context is created, and the object placed in there.</p>
<h4>Sinks &amp; Properties</h4>
<p>Sinks and Properties are entities within Context Proxies which allow interception of cross-Context Object access, and the ‘plugging-in’ of arbitrary additional or replacement processing of method calls. For example, a Sink may decide, based on some security settings, to refuse to pass on a method call to the real object and simply return False:</p>
<ul>
<li>Sink  - read-write access to cross-Context messages</li>
<li>Property &#8211; read-only access to messages</li>
</ul>
<p>A typical use of a Sink would be to acquire and release a Synchronisation lock around a method call:</p>
<p><a href="http://matthewskelton.files.wordpress.com/2012/01/clr-contexts-2.png"><img class="alignnone size-full wp-image-83" title="CLR-Contexts-2" src="http://matthewskelton.files.wordpress.com/2012/01/clr-contexts-2.png?w=640" alt="CLR-Contexts-2"   /></a></p>
<p>This means that the client object (<a href="http://matthewskelton.files.wordpress.com/2012/01/clr-contexts-3.png"><img class="alignnone size-full wp-image-84" title="CLR-Contexts-3" src="http://matthewskelton.files.wordpress.com/2012/01/clr-contexts-3.png?w=640" alt="CLR-Contexts-3"   /></a>) does not need to know anything about synchronisation locks, and can be re-used on a scenario without them, or indeed with some other type of processing around the method call.</p>
<h3>Comments</h3>
<p>This document is based on a lecture given at <a href="http://www.devweek.com/">DevWeek</a> 2002.</p>
<h3>Glossary</h3>
<p>Context-Agile Object &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; object refs can be passed between Contexts</p>
<p>Context-Bound Object &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. object access between Contexts is via a proxy</p>
<p>AppDomain &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; logical process space within the CLR</p>
<br />Filed under: <a href='http://matthewskelton.wordpress.com/category/archive-material/'>Archive Material</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/software/'>Software</a> Tagged: <a href='http://matthewskelton.wordpress.com/tag/net-framework/'>.NET Framework</a>, <a href='http://matthewskelton.wordpress.com/tag/windows/'>Windows</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthewskelton.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthewskelton.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthewskelton.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthewskelton.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/matthewskelton.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/matthewskelton.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/matthewskelton.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/matthewskelton.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthewskelton.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthewskelton.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthewskelton.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthewskelton.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthewskelton.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthewskelton.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=80&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://matthewskelton.wordpress.com/2012/01/29/clr-contexts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">matthewpskelton</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/clr-contexts-1.png" medium="image">
			<media:title type="html">CLR-Contexts-1</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/clr-contexts-2.png" medium="image">
			<media:title type="html">CLR-Contexts-2</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/clr-contexts-3.png" medium="image">
			<media:title type="html">CLR-Contexts-3</media:title>
		</media:content>
	</item>
		<item>
		<title>Assert-based Error Reporting in Delphi</title>
		<link>http://matthewskelton.wordpress.com/2012/01/29/assert-based-error-reporting-in-delphi/</link>
		<comments>http://matthewskelton.wordpress.com/2012/01/29/assert-based-error-reporting-in-delphi/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 19:16:41 +0000</pubDate>
		<dc:creator>Matthew Skelton (@matthewpskelton)</dc:creator>
				<category><![CDATA[Archive Material]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[error journey]]></category>
		<category><![CDATA[exceptions]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://matthewskelton.wordpress.com/?p=67</guid>
		<description><![CDATA[[This is a very old article I wrote back in 2002 when I worked for a company which built MRI scanners and was subsequently bought by Oxford Instruments. The driver for this was "...Until Delphi acquires native functions equivalent to the C [__LINE__ and __FILE__] macros, &#8230; the need for this Assert-based framework &#8230; will remain&#8221; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=67&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em><em>[This is a very old article I wrote back in 2002 when I worked for a company which built MRI scanners and was subsequently bought by <a href="http://www.oxford-instruments.com/" target="_blank">Oxford Instruments</a>. The driver for this was "</em></em>...Until Delphi acquires native functions equivalent to the C [__LINE__ and __FILE__] macros, &#8230; the need for this Assert-based framework &#8230; will remain<em><em>&#8221; The need to trace errors to a specific class and line number, especially in production code, has only become stronger since then.]</em></em></p>
<h3><strong>Summary</strong></h3>
<p>This note describes a simple but flexible error-reporting and tracing framework for Delphi 4 and above based on Assert, which provides the unit name and line number at which errors were trapped and traces made.</p>
<h3><strong>Details</strong></h3>
<h4><em>Background</em></h4>
<p>Under the Delphi Language there is no simple way of replicating the C/C&#8217;++ macros <sub>—</sub>FILE<sub>—</sub> and _LINE_ to obtain the unit name and line number of memory address at runtime. However, in his paper <a href="http://blong.com/Conferences/BorCon2002/Debugging/3188.htm" target="_blank">&#8220;Non-Obvious Debugging Techniques&#8221; Brian Long</a> points out that the Delphi compiler provides both unit name and line number during a call to Assert, and describes how assertions can be exploited to provide detailed execution tracing.</p>
<p>The framework described here extends this idea to allow flexibility in the processing of assertions. Assertion processing can be switched on and off at runtime; arbitrary filtering can be applied to any assertion; and both execution tracing and &#8216;standard&#8217; assertion behaviour (i.e. raising an exception) can be effected. Assertions can therefore be left enabled in production code, at the expense of a slightly larger binary executable.</p>
<p><span id="more-67"></span></p>
<h4><em>Design</em></h4>
<p>If SysUtils is included in the uses clause of a unit within a project, the default Pascal-style Run-Time Error (RTE) error handling of the System unit is replaced with one based on exceptions. By default a failed assertion causes RTE 227, but with SysUtils an <em>EAssertionFailed </em>exception is raised instead, which normally just displays a message box:</p>
<pre><strong>procedure</strong> TForm1.Button1C1ick(Sender: TObject);
 <strong>begin</strong>
Assert(False, ‘Inside Button1Click’);
<strong>end;</strong></pre>
<p><a href="http://matthewskelton.files.wordpress.com/2012/01/image2a.png"><img class="alignnone size-full wp-image-72" title="Image2a" src="http://matthewskelton.files.wordpress.com/2012/01/image2a.png?w=640&#038;h=188" alt="Image2a" width="640" height="188" /></a></p>
<p>The default behaviour is changed by <a href="http://blong.com/Conferences/BorCon2002/Debugging/3188.htm" target="_blank">reassigning the AssertErrorProc variable to a custom routine</a>. The failed assertion, along with all the unit and line number information, can then be extracted and passed to a logging or error recovery mechanism.</p>
<p>The library unit AssertLib.pas redirects assertion handling to its own custom routine; when an assertion fails, the message string is checked for special substrings, and the assertion logged or an exception thrown as appropriate. Assuming a hypotheical <em>Assertion </em>object, the general algorithm is:</p>
<pre><em>// assertion handler routine</em>
 it IsDebugString(Assertion.Messaqe) then
  LogDebugString
else if IsSevereError(Assertion.Message) then
   raise ESevereError...
 else
   raise ENormalError...;</pre>
<p>The exception handling of the application or DLL is relied upon to deal with the exceptions raised. Crucial here is that the unit name and line number are extracted before the exceptions are raised, and stored in custom fields of the exception objects:</p>
<pre>type EAssertDetails = class(Exception)
public
constructor CreatedDetailed( const Msg, AUnitName : string;
AlineNumber, AAddress : Integer);
   property UnitName : string read FUnitName write SetUnitName;
   property LineNumber : Integer read FLineNumber write SetLineNumber;
   property Address    Integer read FAddress write SetAddress; end;
EAssertDetailsFatal   = class(EAssertDetails);
 .
 .

 <em>// inside the assertion handler</em>
 else if IsSevereError(Assertion.Message) then
raise EAssertDetailsFatal.CreateDetailed( Assertion.Message, UnitName, LineNumber, ErrorAddress);</pre>
<p>If the logging/exception framework is aware of these special fields, it can extract the information easily, and tailor its behaviour to the way in which Assert is being used:</p>
<pre>procedure TForml.HandleException(Sender: TObject; E:Exception);
 var temp : string;
begin
if E is EAssertDetails then
begin
 <em> // Extract unit name and line number from special exception object</em>

 temp := Format (Sender %s reports exception: %s. + Unit: %s, Line: %d, Address: %d.’, [Sender.ClassName, E.Message, E.UnitName, E.LineNumber, E.Address]);
<em>// Notify the user with a message dialog if required</em>
   if E is EAssertDetailsNotify then ShowMessage(temp);
<em>// The assertion was deemed fatal, so terminate the app</em>
 if E is EAssertDetailsFatal then
ShowMessage(temp);
Application.Terminate;
end;

 <em>// Add other specialized descendents of EAssertDetails as required</em>

 end
else
temp := E.Message;

 <em>// Log all errors</em>
 Memol.Lines.Add(temp);
 end;</pre>
<p><a href="http://matthewskelton.files.wordpress.com/2012/01/image4a.png"><img class="alignnone size-full wp-image-73" title="Image4a" src="http://matthewskelton.files.wordpress.com/2012/01/image4a.png?w=640" alt="Image4a"   /></a></p>
<h4><strong><em>Usage</em></strong></h4>
<p>Assert can be used to pinpoint error locations whenever it can be assumed that assertions are turned on ({C+}). For example, low-level code and support classes should not use assertions for error reporting, because they cannot rely on assertions being enabled. In general, if a section of code expects flow to be broken in an error condition, then exceptions must be used as normal.</p>
<p>User interface code, on the other hand, can usually use Assert in safety, because the exceptions raised in the custom assertion handler will be handled by code at the same level (probably with Application.OnException). Also, User Interface code can trap exceptions raised at a lower level, and then use Assert combined with Delphi&#8217;s Run-Time Type Information to report the exception:</p>
<pre>procedure TrapException;
var i : Integer;
begin try
i := 10 div 0;
except
on E: Exception do
Assert(False, E.ClassName + ' ' + E.Message);
end;
end;</pre>
<p>In this way, most of the information provided by the exception is retained (e.g. the class reference is lost), but we gain information about which section of code was executing when the exception was trapped.</p>
<h4><em>Advanced Features</em></h4>
<p>Because failed assertions are routed through a custom routine, their behaviour can be controlled at runtime. The GAssertEnabled flag in AssertLib determines whether a failed assertion should be acted upon or ignored. This behaviour is dependent  upon the instantaneous value of GAssertEnabled, so can be switched on and off for different sections of code.</p>
<p>As alluded to above, Assert can be used for debugging traces. By prepending the constant S<sub>—</sub>DEBUG<sub>—</sub>TRACE to the assertion error message, and forcing an assertion failure, line-by-line traces of a code path can be logged.</p>
<p>The custom AssertErrorProc checks for S_DEBUG_TRACE and passes the assertion information (including line number etc.) to a special debug trace procedure, set using SetDebugLogProcedure. In this case, an exception is <em>not </em>raised, so that the logic flow is not broken in the traced routine. Acknowledgement of these trace assertions can be controlled independently of other assertions, because it is assumed that trace assertions may be much more common than &#8216;error&#8217; assertions. The flag GRecogniseDebugAssertions controls this behaviour:</p>
<pre>procedure TraceMeBaby;
begin
  Assert(False, S DEBUG TRACE + ‘entering TraceMeBaby...’);
   // do some work
   // ...
   Assert(False, S_DEBUG_TRACE + ‘...leaving TraceMeBaby’);
 end;</pre>
<p><a href="http://matthewskelton.files.wordpress.com/2012/01/image3a.png"><img class="alignnone size-full wp-image-74" title="Image3a" src="http://matthewskelton.files.wordpress.com/2012/01/image3a.png?w=640" alt="Image3a"   /></a></p>
<p>By defining other special prefixes and prepending them to assertion messages, the custom AssertErrorProc can distinguish further uses of Assert.</p>
<p>S<sub>—</sub>SEVERE<sub>—</sub>ERROR is one such indicator; it is used to report severe but foreseen errors in program operation.</p>
<h4><em>Limitations and Improvements</em></h4>
<p>Because Assert is the only easy way to access unit name and line number information in Delphi, such information is only valid for the place where Assert was called (contrast this with the C/C++ macros __FILE__ and __LINE__ which can be used anywhere). The location of the Assert call may not correspond to the true location of the error, but rather to the point at which the error was detected. Until Delphi acquires native functions equivalent to the C macros, this limitation (and the need for this Assert-based framework) will remain.</p>
<p>Control of assertions could be made more extensible by being given a class wrapper, with the concept of registering different assertion conditions:</p>
<pre><em>// Assertion class to call MessageBeep() on assertion failure</em>
 EAssertDetailsBeep = class(EAssertDetails);
<em>// Register new assertion class, using prefix identifier string and class reference</em>
 AssertionManager.RegisterAssertionClass(‘[B]’, EAssertDetailsBeep);</pre>
<p>&#8216;This would allow arbitrary classes deriving from <em>EAssertDetails </em>to be defined outside AssertLib.pas; the <em>AssertionManager </em>would search a list of identifier prefixes for all registered assertion classes and raise the appropriate exception.</p>
<p>Another improvement would be to allow per-thread control of assertion behaviour, by marking switches such as GAssertEnabled with the threadvar keyword. This would solve some concurrency issues that would otherwise occur if the framework were used in a multithreaded application.</p>
<h4><em>Conclusion</em></h4>
<p>The ability to trace detection of an error to a specific line in the source code is very useful, but <a href="http://www.delphi-jedi.org/" target="_blank">fully-featured frameworks</a> to achieve this are by necessity complex. The framework described here requires no changes to existing code, other than AssertLib to be initialized after SysUtils, a small number of variables to be set, and assertions enabled.</p>
<br />Filed under: <a href='http://matthewskelton.wordpress.com/category/archive-material/'>Archive Material</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/software/'>Software</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/testing/'>Testing</a> Tagged: <a href='http://matthewskelton.wordpress.com/tag/delphi/'>Delphi</a>, <a href='http://matthewskelton.wordpress.com/tag/error-journey/'>error journey</a>, <a href='http://matthewskelton.wordpress.com/tag/exceptions/'>exceptions</a>, <a href='http://matthewskelton.wordpress.com/tag/logging/'>logging</a>, <a href='http://matthewskelton.wordpress.com/tag/windows/'>Windows</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthewskelton.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthewskelton.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthewskelton.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthewskelton.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/matthewskelton.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/matthewskelton.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/matthewskelton.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/matthewskelton.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthewskelton.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthewskelton.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthewskelton.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthewskelton.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthewskelton.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthewskelton.wordpress.com/67/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=67&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://matthewskelton.wordpress.com/2012/01/29/assert-based-error-reporting-in-delphi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">matthewpskelton</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/image2a.png" medium="image">
			<media:title type="html">Image2a</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/image4a.png" medium="image">
			<media:title type="html">Image4a</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2012/01/image3a.png" medium="image">
			<media:title type="html">Image3a</media:title>
		</media:content>
	</item>
		<item>
		<title>Test automation tools for WinForms desktop applications</title>
		<link>http://matthewskelton.wordpress.com/2012/01/08/test-automation-tools-for-winforms-desktop-applications/</link>
		<comments>http://matthewskelton.wordpress.com/2012/01/08/test-automation-tools-for-winforms-desktop-applications/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 20:48:28 +0000</pubDate>
		<dc:creator>Matthew Skelton (@matthewpskelton)</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[qa tools]]></category>
		<category><![CDATA[test automation tools]]></category>
		<category><![CDATA[win32 api]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://matthewskelton.wordpress.com/?p=59</guid>
		<description><![CDATA[For a client in the financial services sector, I recently had to identify some candidate products for use in automating the testing their WinForms and VC++/MFC Windows desktop applications. The applications are used for trading financial instruments, so correct operation is absolutely essential. After a bit of investigation and digging round in the more murky [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=59&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>For a client in the financial services sector, I recently had to identify some candidate products for use in automating the testing their WinForms and VC++/MFC Windows desktop applications. The applications are used for trading financial instruments, so correct operation is absolutely essential.</div>
<div></div>
<div>
<div class="wp-caption alignnone" style="width: 342px"><a href="http://www.flickr.com/photos/h34dy/2753834391/sizes/m/in/photostream/"><img class=" " title="By Christoph Bauer - http://www.flickr.com/photos/h34dy/" src="http://farm4.staticflickr.com/3280/2753834391_174178a7cc.jpg" alt="Drop Test by Christoph Bauer - http://www.flickr.com/photos/h34dy/" width="332" height="500" /></a><p class="wp-caption-text">Drop Test by Christoph Bauer - http://www.flickr.com/photos/h34dy/</p></div>
</div>
<div></div>
<div>After a bit of investigation and digging round in the more murky reaches of my memory, I came up with the following list of  test automation tools for Windows desktop  applications:</div>
<div><span id="more-59"></span></div>
<ol>
<li><strong>White</strong> (built atop the <a href="http://msdn.microsoft.com/en-us/library/ms747327.aspx" target="_blank">Microsoft UIAutomation library</a> - free ($0): <a href="http://white.codeplex.com/" target="_blank">http://white.codeplex.com/</a> but roll your own test harness. This is a <a href="http://www.thoughtworks.com/" target="_blank">ThoughtWorks</a> project, so pretty high quality. Some usage examples here: <a href="http://blog.benhall.me.uk/2008/02/project-white-automated-ui-testing.html" target="_blank">http://blog.benhall.me.uk/2008/02/project-white-automated-ui-testing.html</a></li>
<li><strong>Test Automation FX</strong>: <a href="http://www.testautomationfx.com/" target="_blank">http://www.testautomationfx.com/</a> - free ($0) and commercial versions (~ $300)</li>
<li><strong>TestComplete</strong>: <a href="http://smartbear.com/products/qa-tools/automated-testing/" target="_blank">http://smartbear.com/products/qa-tools/automated-testing/</a> - between $1000 and $4500 per license</li>
<li><strong>HP Quick Test Pro</strong> (QTP): <a href="http://www8.hp.com/uk/en/software/software-product.html?compURI=tcm:183-936981" target="_blank">http://www8.hp.com/uk/en/software/software-product.html?compURI=tcm:183-936981</a> - $$$ but does web testing also.</li>
</ol>
<p>Since it&#8217;s been several years since I built any serious systems using WinForms or VC++/MFC, I cannot really comment on the effectiveness of any of these, but  an ex-colleague of mine tells me that although TestComplete is okay (and good value for money), it has its problems: poor product support, and apparently it intermittently does &#8220;weird things&#8221; like &#8220;stuff just randomly stops working&#8221; (never a good sign).</p>
<p>It seems like using the <a href="http://msdn.microsoft.com/en-us/library/ms747327.aspx" target="_blank">Microsoft UIAutomation library</a> (as <a href="http://white.codeplex.com/">White</a> does) is the best bet at the moment; it&#8217;ll be interesting to see what comes out as <a href="http://tirania.org/blog/archive/2011/Sep-15.html">WinRT</a> becomes more adopted, as <a href="http://www.infoq.com/news/2011/09/WinRT-API">WinRT avoid many of the problems of the existing Win32 API</a>, and therefore automating desktop applications should (I hope) become simpler and less error-prone (the current <a href="http://en.wikipedia.org/wiki/Message_loop_in_Microsoft_Windows">Window message-queue implementation</a> is pretty long in the tooth).</p>
<br />Filed under: <a href='http://matthewskelton.wordpress.com/category/computer-systems/software/'>Software</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/testing/'>Testing</a> Tagged: <a href='http://matthewskelton.wordpress.com/tag/automation/'>automation</a>, <a href='http://matthewskelton.wordpress.com/tag/desktop/'>desktop</a>, <a href='http://matthewskelton.wordpress.com/tag/qa-tools/'>qa tools</a>, <a href='http://matthewskelton.wordpress.com/tag/test-automation-tools/'>test automation tools</a>, <a href='http://matthewskelton.wordpress.com/tag/win32-api/'>win32 api</a>, <a href='http://matthewskelton.wordpress.com/tag/windows/'>Windows</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthewskelton.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthewskelton.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthewskelton.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthewskelton.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/matthewskelton.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/matthewskelton.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/matthewskelton.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/matthewskelton.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthewskelton.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthewskelton.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthewskelton.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthewskelton.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthewskelton.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthewskelton.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=59&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://matthewskelton.wordpress.com/2012/01/08/test-automation-tools-for-winforms-desktop-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">matthewpskelton</media:title>
		</media:content>

		<media:content url="http://farm4.staticflickr.com/3280/2753834391_174178a7cc.jpg" medium="image">
			<media:title type="html">By Christoph Bauer - http://www.flickr.com/photos/h34dy/</media:title>
		</media:content>
	</item>
		<item>
		<title>By 2015, HTTPS Will Be Everywhere</title>
		<link>http://matthewskelton.wordpress.com/2011/12/23/by-2015-https-will-be-everywhere/</link>
		<comments>http://matthewskelton.wordpress.com/2011/12/23/by-2015-https-will-be-everywhere/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 21:41:39 +0000</pubDate>
		<dc:creator>Matthew Skelton (@matthewpskelton)</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://matthewskelton.wordpress.com/?p=51</guid>
		<description><![CDATA[Public WiFi connections are often unsecured, leaving their connections open to being hijacked or &#8220;sniffed&#8221; by malicious people. To protect users from data and privacy loss due to insecure and untrusted connections, web sites and applications are increasingly being run entirely over secure connections (HTTPS). My prediction is that by 2015, it will be bad [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=51&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Public WiFi connections are often unsecured, leaving their connections open to being hijacked or &#8220;sniffed&#8221; by malicious people. To protect users from data and privacy loss due to insecure and untrusted connections, web sites and applications are increasingly being run entirely over secure connections (HTTPS).</p>
<p>My prediction is that by 2015, it will be bad practice to access web sites via HTTP, and users will increasingly demand HTTPS. This has interesting implications for hardware manufacturers and software development teams alike.</p>
<p><span id="more-51"></span></p>
<h3>Introduction</h3>
<p><a href="http://www.ons.gov.uk/ons/rel/rdit2/internet-access---households-and-individuals/2011/stb-internet-access-2011.html">Public WiFi connections</a> – such as hotspots in coffee shops, trains, airports and libraries – are often unsecured out of necessity, leaving their connections open to being hijacked or &#8220;sniffed&#8221; by malicious people using freely-available tools such as <a href="http://www.sniffwifi.com/">SniffWifi</a>, <a href="http://www.kismetwireless.net/">Kismet</a> and <a href="http://www.netstumbler.com/">NetStumbler</a>.</p>
<p>To protect users from data and privacy loss due to insecure and untrusted connections, web sites and applications are increasingly being run entirely over secure connections (HTTPS – the so-called &#8220;green address bar&#8221;). <a href="https://www.google.co.uk/">Google</a>, <a href="https://www.facebook.com/FourNines">Facebook</a>, <a href="https://twitter.com/FourNines">Twitter</a> and <a href="https://github.com/">Github</a> are examples of popular websites offering (or forcing) the use of HTTPS to users on the site.</p>
<p><a href="http://matthewskelton.files.wordpress.com/2011/12/github-ssl.png"><img class="alignnone size-full wp-image-52" title="Github-SSL" src="http://matthewskelton.files.wordpress.com/2011/12/github-ssl.png?w=640" alt="Github SSL"   /></a></p>
<p><em>The popular source code collaboration site Github serves all content via secure HTTPS</em></p>
<p>My prediction is that by 2015, internet users will expect a secure connection when accessing every website and by extension every type of content. Using HTTP is analogous to writing postcards: everyone can see the message as it’s sent across the communication network. Only the most trivial of messages are written on postcards; for all other correspondence, sealed envelopes are used for privacy.</p>
<h2>Implications of Ubiquitous Secure Connections</h2>
<p>The implications of &#8220;HTTPS Everywhere&#8221; seem to be:</p>
<ol>
<li>Hardware acceleration of HTTPS encryption/decryption will provide a speed advantage</li>
<li>Use of response headers and other settings will need to be improved</li>
<li>The deployment and revocation of SSL/TLS certificates will need to be increasingly automated</li>
<li>Wildcard certificates and turn-key single sign-on systems will become more popular</li>
</ol>
<h3>Dedicated Encryption Hardware and SSL Offload</h3>
<p>Dedicated hardware is generally faster than an equivalent software implementation (for any algorithm). Innovations such as Intel’s <a href="http://www.intel.com/content/www/us/en/architecture-and-technology/advanced-encryption-standard--aes-/data-protection-aes-general-technology.html">AES-NI (Advanced Encryption Standard New Instructions)</a> can provide a speed advantage for client computers because the encryption/decryption needed when communicating over HTTPS can be greatly accelerated.</p>
<p>Likewise, at the server side, hardware with dedicated SSL/TLS-handling hardware will outperform software-based or virtualised SSL/TLS routines (such as when <a href="http://forums.iis.net/t/1177704.aspx">IIS or Apache handles HTTPS termination</a>, or when a <a href="http://www.vmware.com/appliances/directory/591503">virtual appliance is used as a content switch</a>).</p>
<p>.</p>
<h3>Improving Use of Response Headers and Other Settings</h3>
<p>Given that, in general, HTTPS connections are slower than those over HTTP, due to the extra time needed to encrypt/decrypt the data, any web sites which take advantage of <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html">HTTP Cache Control Headers</a> and other <a href="http://code.google.com/speed/page-speed/docs/caching.html">HTTP response headers</a> in an intelligent and relevant way will improve the experience for the user (although there can be some <a href="http://blogs.msdn.com/b/ieinternals/archive/2010/04/21/internet-explorer-may-bypass-cache-for-cross-domain-https-content.aspx">security implications for some older browsers, which can cache HTTPS content to disk</a> (!)). In particular, text content which has Gzip compression applied on the server before being encrypted for HTTPS will often arrive at the browser more quickly than if it were not compressed.</p>
<h3>Automated Certificate Deployment and Revocation</h3>
<p>It will become increasing important to be able to both deploy certificates and revoke certificates using automation. Automatic provisioning of new certificates for HTTPS is relatively common already, but the importance of timely <a href="http://en.wikipedia.org/wiki/Certificate_revocation_list">certificate revocation</a> in the event of a break in the chain of trust will be vital for a company’s reputation (such as when a <a href="http://arstechnica.com/security/news/2011/09/comodo-hacker-i-hacked-diginotar-too-other-cas-breached.ars">root CA has been compromised</a>).</p>
<h3>Wildcard Certificates</h3>
<p>So-called <a href="http://www.verisign.com/ssl-certificates/wildcard-ssl-certificates/index.html">&#8220;wildcard&#8221; certificates</a> are digital certificates which can apply to more than one server address, so instead of a certificate being valid for (say) secure.domain.com, it is issued for *.domain.com (hence the name &#8220;wildcard&#8221;).</p>
<p>As more and more users expect all communication to be secure, wildcard certificates will be increasingly useful to website owners, because a wildcard certificate will cover all parts of the website, such as images.domain.com, login.domain.com and www.domain.com, all of which will need to be delivered by HTTPS to avoid &#8220;<a href="http://ssl.entrust.net/blog/?p=757">mixed content vulnerabilities</a>&#8220;.</p>
<p><a href="http://matthewskelton.files.wordpress.com/2011/12/broken-https-gmail.png"><img class="alignnone size-full wp-image-53" title="Broken-HTTPS-Gmail" src="http://matthewskelton.files.wordpress.com/2011/12/broken-https-gmail.png?w=640" alt="Broken HTTPS in Gmail"   /></a></p>
<p><em>Even Google doesn&#8217;t always avoid &#8220;mixed content&#8221;</em></p>
<p><a href="http://matthewskelton.files.wordpress.com/2011/12/mixed_content_warning_ie8.png"><img class="alignnone size-full wp-image-54" title="mixed_content_warning_ie8" src="http://matthewskelton.files.wordpress.com/2011/12/mixed_content_warning_ie8.png?w=640" alt="mixed content warning in ie8"   /></a></p>
<p><em>The feared (and confusing) &#8220;mixed content&#8221; warning in IE8</em></p>
<p>Without a wildcard certificate, a website owner would typically need to buy individual certificates for each subdomain separately, a significant cost.</p>
<h2>Summary</h2>
<p>I cannot see how the spread of secure (HTTPS) connections will do anything other than increase in the next few years. This has some interesting implications for those owning, building and hosting websites, as they will need to raise their game in terms of encryption/decryption speed, content caching and certificate management.</p>
<br />Filed under: <a href='http://matthewskelton.wordpress.com/category/computer-systems/architecture/'>Architecture</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/software/'>Software</a> Tagged: <a href='http://matthewskelton.wordpress.com/tag/browser/'>browser</a>, <a href='http://matthewskelton.wordpress.com/tag/encryption/'>encryption</a>, <a href='http://matthewskelton.wordpress.com/tag/https/'>HTTPS</a>, <a href='http://matthewskelton.wordpress.com/tag/infrastructure/'>infrastructure</a>, <a href='http://matthewskelton.wordpress.com/tag/security/'>Security</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthewskelton.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthewskelton.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthewskelton.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthewskelton.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/matthewskelton.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/matthewskelton.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/matthewskelton.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/matthewskelton.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthewskelton.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthewskelton.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthewskelton.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthewskelton.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthewskelton.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthewskelton.wordpress.com/51/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=51&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://matthewskelton.wordpress.com/2011/12/23/by-2015-https-will-be-everywhere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">matthewpskelton</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2011/12/github-ssl.png" medium="image">
			<media:title type="html">Github-SSL</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2011/12/broken-https-gmail.png" medium="image">
			<media:title type="html">Broken-HTTPS-Gmail</media:title>
		</media:content>

		<media:content url="http://matthewskelton.files.wordpress.com/2011/12/mixed_content_warning_ie8.png" medium="image">
			<media:title type="html">mixed_content_warning_ie8</media:title>
		</media:content>
	</item>
		<item>
		<title>Node.js is faster on Windows than on Linux &#8211; what can we learn?</title>
		<link>http://matthewskelton.wordpress.com/2011/12/12/learning-from-node-js-on-windows-what-can-we-learn/</link>
		<comments>http://matthewskelton.wordpress.com/2011/12/12/learning-from-node-js-on-windows-what-can-we-learn/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 17:14:51 +0000</pubDate>
		<dc:creator>Matthew Skelton (@matthewpskelton)</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[cross-platform]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[porting]]></category>

		<guid isPermaLink="false">http://matthewskelton.wordpress.com/?p=44</guid>
		<description><![CDATA[In an interesting interview on DevBeat (http://venturebeat.com/2011/12/09/node-js-rackspace/), Rackspace systems architect and Node.js contributor Paul Querna talks about the Node.js implementation on Windows. (Original video here: http://vimeo.com/33248104) [Posting this here, as the only comments which seems to have been approved on the OP itself are those talking abut how "cute" the interviewer is - epic fail] Paul&#8217;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=44&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In an interesting interview on DevBeat (<a href="http://venturebeat.com/2011/12/09/node-js-rackspace/">http://venturebeat.com/2011/12/09/node-js-rackspace/</a>), <a href="http://www.rackspace.com/">Rackspace </a>systems architect and <a href="http://nodejs.org/">Node.js</a> contributor <a href="http://journal.paul.querna.org/">Paul Querna</a> talks about the Node.js implementation on Windows. (Original video here: <a href="http://vimeo.com/33248104">http://vimeo.com/33248104</a>)</p>
<p><span style="color:#999999;"><em>[Posting this here, as the only <a href="http://venturebeat.com/2011/12/09/node-js-rackspace/#disqus_thread">comments which seems to have been approved on the OP itself</a> are those talking abut how "cute" the interviewer is - epic fail]</em></span></p>
<p>Paul&#8217;s points in the interview about making use of <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa365198(v=vs.85).aspx">I/O completion ports on Windows</a> highlights a key issue in cross-platform software development: Windows has some incredibly powerful and advanced APIs, which &#8211; if used directly &#8211; can provide huge performance benefits for software that uses them.</p>
<p><span id="more-44"></span></p>
<p>The common model of &#8220;develop for Linux first, then port to Windows&#8221; can mean that the ported software performs poorly on Windows installations, at least partly because you&#8217;re imposing a Linux-y execution model on a Windows system. You only need to look at the number of application handles opened by <a href="http://dev.mysql.com/doc/refman/5.1/en/index.html">32-bit MySQL running on Windows</a> (at least 32k handles at startup &#8211; for *what* reason, exactly?) to see an example of a such a non-idiomatic Linux-to-Windows port.</p>
<p>The spoken language analogy would be using Google Translate for all your i18n needs: a big fail. Paul also points out that there is a large installed base of Windows servers out there which are not going away any time soon, so ignoring Windows when developing software is somewhat negligent.</p>
<p>In fact, Node in effect re-implemented I/O completion ports (<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa365198(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/aa365198(v=vs.85).aspx</a>, &#8220;<em>an efficient threading model for processing multiple asynchronous I/O requests on a multiprocessor system</em>&#8220;) inside the Node code, effectively making them available on Linux too.</p>
<p>Under the cover of all the Windows marketing/sales hype, there is a [largely-] POSIX-compliant, well-architected OS with some features (such as I/O completion ports) which Linux lacks. Linux obviously has features (User-mode Linux, for instance) which Windows could really use; my point here is to highlight that the &#8220;Linux first, then transliterate for Windows&#8221; is missing a trick or two.</p>
<br />Filed under: <a href='http://matthewskelton.wordpress.com/category/computer-systems/architecture/'>Architecture</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/software/'>Software</a> Tagged: <a href='http://matthewskelton.wordpress.com/tag/cross-platform/'>cross-platform</a>, <a href='http://matthewskelton.wordpress.com/tag/linux/'>Linux</a>, <a href='http://matthewskelton.wordpress.com/tag/porting/'>porting</a>, <a href='http://matthewskelton.wordpress.com/tag/windows/'>Windows</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthewskelton.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthewskelton.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthewskelton.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthewskelton.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/matthewskelton.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/matthewskelton.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/matthewskelton.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/matthewskelton.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthewskelton.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthewskelton.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthewskelton.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthewskelton.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthewskelton.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthewskelton.wordpress.com/44/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=44&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://matthewskelton.wordpress.com/2011/12/12/learning-from-node-js-on-windows-what-can-we-learn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">matthewpskelton</media:title>
		</media:content>
	</item>
		<item>
		<title>ThoughtWorks AWS Training in London</title>
		<link>http://matthewskelton.wordpress.com/2011/12/05/thoughtworks-aws-training-in-london/</link>
		<comments>http://matthewskelton.wordpress.com/2011/12/05/thoughtworks-aws-training-in-london/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 21:22:34 +0000</pubDate>
		<dc:creator>Matthew Skelton (@matthewpskelton)</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://matthewskelton.wordpress.com/?p=38</guid>
		<description><![CDATA[Just back from the ThoughtWorks AWS training in London at Wallace Space. Great day: good pace, with some excellent discussions and lots of learning. The take-home points were emphasised in the last 15 mins when James Lewis ran through details of the AWS outage in April this year which brought down video streaming service Netflix: The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=38&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Just back from the <a href="http://www.thoughtworks.com/continuous-delivery/events/aws-training-course">ThoughtWorks AWS training in London</a> at <a href="http://www.wallacespace.com/">Wallace Space</a>. Great day: good pace, with some excellent discussions and lots of learning.</p>
<p><span id="more-38"></span></p>
<p>The take-home points were emphasised in the last 15 mins when <a href="https://twitter.com/boisy">James Lewis</a> ran through details of the <a href="http://techblog.netflix.com/2011/04/lessons-netflix-learned-from-aws-outage.html">AWS outage in April this year which brought down video streaming service Netflix</a>:</p>
<ul>
<li>The cloud can be incredibly flexible and rapid for provisioning</li>
<li>The cloud hides much of the complexity of traditional data centre configuration</li>
<li>However, we still need to <a href="http://broadcast.oreilly.com/2011/04/the-aws-outage-the-clouds-shining-moment.html">design for failure</a> (as we always have)</li>
</ul>
<p>The <a href="http://aws.amazon.com/message/65648/">root-cause analysis by Amazon</a> makes for interesting reading (as it goes into some detail about how their cloud services work). Ultimately, though, they make the point that:</p>
<blockquote><p>if your systems failed in the Amazon cloud this week, it wasn&#8217;t Amazon&#8217;s fault. You either deemed an outage of this nature an acceptable risk or you failed to design for Amazon&#8217;s cloud computing model.</p></blockquote>
<p>This is why software developers and architects still need to understand failure modes, resiliency, redundancy and so on, and design their software to <span style="text-decoration:underline;">expect</span> failure and deal with it.</p>
<p>&#8220;The Cloud&#8221; does not absolve software developers from planning for failures, and <a href="http://fournines.wordpress.com/about/">four nines (99.99%) uptime is still hard to achieve</a>.</p>
<br />Filed under: <a href='http://matthewskelton.wordpress.com/category/computer-systems/architecture/'>Architecture</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/devops/'>DevOps</a>, <a href='http://matthewskelton.wordpress.com/category/computer-systems/software/'>Software</a> Tagged: <a href='http://matthewskelton.wordpress.com/tag/aws/'>AWS</a>, <a href='http://matthewskelton.wordpress.com/tag/cloud/'>cloud</a>, <a href='http://matthewskelton.wordpress.com/tag/ec2/'>EC2</a>, <a href='http://matthewskelton.wordpress.com/tag/infrastructure/'>infrastructure</a>, <a href='http://matthewskelton.wordpress.com/tag/linkedin/'>linkedin</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthewskelton.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthewskelton.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthewskelton.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthewskelton.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/matthewskelton.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/matthewskelton.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/matthewskelton.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/matthewskelton.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthewskelton.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthewskelton.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthewskelton.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthewskelton.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthewskelton.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthewskelton.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthewskelton.wordpress.com&amp;blog=30133948&amp;post=38&amp;subd=matthewskelton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://matthewskelton.wordpress.com/2011/12/05/thoughtworks-aws-training-in-london/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2814cc20402299cffb1e46898424e84f?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">matthewpskelton</media:title>
		</media:content>
	</item>
	</channel>
</rss>
