<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2titles.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemtitles.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Steve Trefethen's Weblog</title>
    <description>stevetrefethen.com is the blog of Steve Trefethen. I am a software developer interested in .NET, testing, internet applications, automation and anything related to my family and friends.</description>
    <link>http://www.stevetrefethen.com/blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.5.1.26</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www.stevetrefethen.com/blog/opml.axd</blogChannel:blogRoll>
    <dc:creator>Steve Trefethen</dc:creator>
    <dc:title>Steve Trefethen</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <geo:lat>37.057575</geo:lat><geo:long>-122.015071</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><meta xmlns="http://pipes.yahoo.com" name="pipes" content="noprocess" /><image><link>http://www.stevetrefethen.com/blog/</link><url>http://feeds2.feedburner.com/~fc/SteveTrefethensWeblog?bg=FF9900&amp;amp;fg=000000&amp;amp;anim=0</url><title>Steve Trefethen's Blog</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/SteveTrefethensWeblog" type="application/rss+xml" /><feedburner:emailServiceId>SteveTrefethensWeblog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Fixing NameMapping issues in TestComplete when UI changes occur</title>
      <description>&lt;p&gt;&lt;a title="Video: Fixing NameMapping issues in TestComplete when UI changes occur" href="http://tv.falafel.com/default/09-11-03/Fixing_NameMapping_issues_in_TestComplete_when_UI_changes_occur.aspx"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.stevetrefethen.com/blog/image.axd?picture=image_1.png" width="407" height="277" /&gt;&lt;/a&gt; Just posted a new video to &lt;a href="http://tv.falafel.com/"&gt;tv.falafel.com&lt;/a&gt; illustrating how to resolve issues with automated tests when there have been UI changes to the application you’re testing. UI changes can be especially difficult for test automation when you’re relying on a static NameMapping of elements in the UI.&lt;/p&gt;  &lt;p&gt;If you’re working with &lt;a href="http://www.automatedqa.com/products/testcomplete/" target="_blank"&gt;TestComplete&lt;/a&gt; be sure to checkout our other &lt;a href="http://tv.falafel.com/TestComplete.aspx"&gt;related videos&lt;/a&gt;.&lt;/p&gt;  &lt;div style="clear: both"&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rNgYe6r7QEXxD_IauCXIu8seeWw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rNgYe6r7QEXxD_IauCXIu8seeWw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rNgYe6r7QEXxD_IauCXIu8seeWw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rNgYe6r7QEXxD_IauCXIu8seeWw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=vi55k93igEQ:7iT_sPK4U3U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=vi55k93igEQ:7iT_sPK4U3U:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=vi55k93igEQ:7iT_sPK4U3U:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=vi55k93igEQ:7iT_sPK4U3U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=vi55k93igEQ:7iT_sPK4U3U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=vi55k93igEQ:7iT_sPK4U3U:IlIkOUNlVJg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=IlIkOUNlVJg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=vi55k93igEQ:7iT_sPK4U3U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=vi55k93igEQ:7iT_sPK4U3U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=vi55k93igEQ:7iT_sPK4U3U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SteveTrefethensWeblog/~4/vi55k93igEQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/SteveTrefethensWeblog/~3/vi55k93igEQ/post.aspx</link>
      <author>Steve</author>
      <comments>http://www.stevetrefethen.com/blog/FixingNameMappingissuesinTestCompletewhenUIchangesoccur.aspx#comment</comments>
      <guid isPermaLink="false">http://www.stevetrefethen.com/blog/post.aspx?id=35d1be90-36a1-4e94-aa66-c6beb29ac8b2</guid>
      <pubDate>Tue, 03 Nov 2009 11:20:42 -0800</pubDate>
      <category>Automation</category>
      <category>Testing</category>
      <category>Videos</category>
      <dc:publisher>Steve</dc:publisher>
      <pingback:server>http://www.stevetrefethen.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.stevetrefethen.com/blog/post.aspx?id=35d1be90-36a1-4e94-aa66-c6beb29ac8b2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.stevetrefethen.com/blog/trackback.axd?id=35d1be90-36a1-4e94-aa66-c6beb29ac8b2</trackback:ping>
      <wfw:comment>http://www.stevetrefethen.com/blog/FixingNameMappingissuesinTestCompletewhenUIchangesoccur.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.stevetrefethen.com/blog/syndication.axd?post=35d1be90-36a1-4e94-aa66-c6beb29ac8b2</wfw:commentRss>
    <feedburner:origLink>http://www.stevetrefethen.com/blog/post.aspx?id=35d1be90-36a1-4e94-aa66-c6beb29ac8b2</feedburner:origLink></item>
    <item>
      <title>Visual map of my hard drive</title>
      <description>&lt;p&gt;&lt;a href="http://www.stevetrefethen.com/blog/image.axd?picture=image.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 15px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.stevetrefethen.com/blog/image.axd?picture=image_thumb.png" width="407" height="199" /&gt;&lt;/a&gt;Lately, I’ve been combing through my drive and uninstalling old bits like VS.NET 2005. I’ve been using &lt;a href="http://windirstat.info/" target="_blank"&gt;WinDirStat&lt;/a&gt; which is a great tool for performing such a task and it got me wondering how other people’s drives looked. There are a few things of note in this picture (click to enlarge) and one of those is the size of my winsxs (11.8GB&lt;strong&gt;!&lt;/strong&gt;) and Installer (4.1GB!) folders. I’ve Googled on these and without spending a tremendous amount of time it appears there’s not much you can do to shrink these things which is rather disappointing.&lt;/p&gt;  &lt;p&gt;Clearly, I haven’t marked every region of this image though I’ve highlighted what I think are the more interesting parts. I’d like to know if others have winsxs folders that are this large and if anything can be done to shrink it down. It seems to me that it would eventually force a reinstall of the OS and surely seems like a place bits go to die.&lt;/p&gt;  &lt;p&gt;Thoughts?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Cu4E400CC0XSYA8HtIJT7Pj8_eY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Cu4E400CC0XSYA8HtIJT7Pj8_eY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Cu4E400CC0XSYA8HtIJT7Pj8_eY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Cu4E400CC0XSYA8HtIJT7Pj8_eY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=eeoldFPbAsQ:OwZgH9bKzKA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=eeoldFPbAsQ:OwZgH9bKzKA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=eeoldFPbAsQ:OwZgH9bKzKA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=eeoldFPbAsQ:OwZgH9bKzKA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=eeoldFPbAsQ:OwZgH9bKzKA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=eeoldFPbAsQ:OwZgH9bKzKA:IlIkOUNlVJg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=IlIkOUNlVJg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=eeoldFPbAsQ:OwZgH9bKzKA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=eeoldFPbAsQ:OwZgH9bKzKA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=eeoldFPbAsQ:OwZgH9bKzKA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SteveTrefethensWeblog/~4/eeoldFPbAsQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/SteveTrefethensWeblog/~3/eeoldFPbAsQ/post.aspx</link>
      <author>Steve</author>
      <comments>http://www.stevetrefethen.com/blog/Visualmapofmyharddrive.aspx#comment</comments>
      <guid isPermaLink="false">http://www.stevetrefethen.com/blog/post.aspx?id=b8da01ea-2125-4747-9ac9-762b23b9c83e</guid>
      <pubDate>Sun, 01 Nov 2009 20:43:05 -0800</pubDate>
      <category>Tools</category>
      <dc:publisher>Steve</dc:publisher>
      <pingback:server>http://www.stevetrefethen.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.stevetrefethen.com/blog/post.aspx?id=b8da01ea-2125-4747-9ac9-762b23b9c83e</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://www.stevetrefethen.com/blog/trackback.axd?id=b8da01ea-2125-4747-9ac9-762b23b9c83e</trackback:ping>
      <wfw:comment>http://www.stevetrefethen.com/blog/Visualmapofmyharddrive.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.stevetrefethen.com/blog/syndication.axd?post=b8da01ea-2125-4747-9ac9-762b23b9c83e</wfw:commentRss>
    <feedburner:origLink>http://www.stevetrefethen.com/blog/post.aspx?id=b8da01ea-2125-4747-9ac9-762b23b9c83e</feedburner:origLink></item>
    <item>
      <title>CruiseControl.NET VS.NET Starter Kit for plugin development</title>
      <description>&lt;p&gt;At the Silicon Valley Code Camp 2009 I gave a talk called Extending &lt;a href="http://ccnet.thoughtworks.com/" target="_blank"&gt;CruiseControl.NET&lt;/a&gt; through the use of plugins. I discussed the necessary steps and illustrated with an example ISourceControl provider using the &lt;a href="http://www.codeplex.com/LinqToTwitter" target="_blank"&gt;LinqToTwitter&lt;/a&gt; OS project on &lt;a href="http://www.codeplex.com/" target="_blank"&gt;Codeplex&lt;/a&gt;. The provider polls a configurable &lt;a href="http://twitter.com" target="_blank"&gt;Twitter&lt;/a&gt; account looking for Tweets that that start with “CI:” allowing the Tweeter to trigger a build of the project simply be tweeting something like: “CI:Start the build”.&lt;/p&gt;  &lt;p&gt;It’s a simple example but illustrates how easy it is to create CC.NET plugins an extend the platform to uses beyond classic &lt;a href="http://en.wikipedia.org/wiki/Continuous_Integration" target="_blank"&gt;Continuous Integration&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.stevetrefethen.com/files/StarterKits/CCNet/CCNetplugin.vsi" target="_blank"&gt;Here&lt;/a&gt; is a link to the Starter Kit. Btw, &lt;strong&gt;you will need to update the&lt;/strong&gt; &lt;a href="http://www.thoughtworks.com/" target="_blank"&gt;ThoughtWorks&lt;/a&gt; assembly references to match your build of CCNET.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zEuvDLSkIfAlyZbWxneBH6e-MfQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zEuvDLSkIfAlyZbWxneBH6e-MfQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zEuvDLSkIfAlyZbWxneBH6e-MfQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zEuvDLSkIfAlyZbWxneBH6e-MfQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=80rdL0jzFFI:ufo221JRQKE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=80rdL0jzFFI:ufo221JRQKE:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=80rdL0jzFFI:ufo221JRQKE:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=80rdL0jzFFI:ufo221JRQKE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=80rdL0jzFFI:ufo221JRQKE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=80rdL0jzFFI:ufo221JRQKE:IlIkOUNlVJg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=IlIkOUNlVJg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=80rdL0jzFFI:ufo221JRQKE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=80rdL0jzFFI:ufo221JRQKE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=80rdL0jzFFI:ufo221JRQKE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SteveTrefethensWeblog/~4/80rdL0jzFFI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/SteveTrefethensWeblog/~3/80rdL0jzFFI/post.aspx</link>
      <author>Steve</author>
      <comments>http://www.stevetrefethen.com/blog/CruiseControlNETVSNETStarterKitforplugindevelopment.aspx#comment</comments>
      <guid isPermaLink="false">http://www.stevetrefethen.com/blog/post.aspx?id=4b23d9c8-8e2e-404b-857f-0786a2959ff8</guid>
      <pubDate>Fri, 30 Oct 2009 10:59:42 -0800</pubDate>
      <category>.NET</category>
      <category>Development</category>
      <category>howto</category>
      <category>Continuous Integration</category>
      <category>Programming</category>
      <dc:publisher>Steve</dc:publisher>
      <pingback:server>http://www.stevetrefethen.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.stevetrefethen.com/blog/post.aspx?id=4b23d9c8-8e2e-404b-857f-0786a2959ff8</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.stevetrefethen.com/blog/trackback.axd?id=4b23d9c8-8e2e-404b-857f-0786a2959ff8</trackback:ping>
      <wfw:comment>http://www.stevetrefethen.com/blog/CruiseControlNETVSNETStarterKitforplugindevelopment.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.stevetrefethen.com/blog/syndication.axd?post=4b23d9c8-8e2e-404b-857f-0786a2959ff8</wfw:commentRss>
    <feedburner:origLink>http://www.stevetrefethen.com/blog/post.aspx?id=4b23d9c8-8e2e-404b-857f-0786a2959ff8</feedburner:origLink></item>
    <item>
      <title>Switch from dasBlog to BlogEngine.NET</title>
      <description>&lt;p&gt;I finally pulled the trigger on switching to BlogEngine.NET. I tweaked it a bit to maintain all of my old blog post links and probably lost a few links here and there but the switch is made. I'm going to run with this for a few days and see how I like it.&lt;/p&gt;
&lt;p&gt;Please let me know if you notice anything weird. Btw, if you see any $g(...) macros those were previously Google search links under dasblog which aren't supported here.&lt;/p&gt;
&lt;p&gt;One of the major things I hope this will resolve is the issue of dasBlog losing comments.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A_sDXz-cF4gv-ZzDq4aU981KnEU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A_sDXz-cF4gv-ZzDq4aU981KnEU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A_sDXz-cF4gv-ZzDq4aU981KnEU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A_sDXz-cF4gv-ZzDq4aU981KnEU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=PiyhFQEq2rE:_Ip-av9V6ZI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=PiyhFQEq2rE:_Ip-av9V6ZI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=PiyhFQEq2rE:_Ip-av9V6ZI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=PiyhFQEq2rE:_Ip-av9V6ZI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=PiyhFQEq2rE:_Ip-av9V6ZI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=PiyhFQEq2rE:_Ip-av9V6ZI:IlIkOUNlVJg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=IlIkOUNlVJg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=PiyhFQEq2rE:_Ip-av9V6ZI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=PiyhFQEq2rE:_Ip-av9V6ZI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=PiyhFQEq2rE:_Ip-av9V6ZI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SteveTrefethensWeblog/~4/PiyhFQEq2rE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/SteveTrefethensWeblog/~3/PiyhFQEq2rE/post.aspx</link>
      <author>Steve</author>
      <comments>http://www.stevetrefethen.com/blog/SwitchfromdasBlogtoBlogEngineNET.aspx#comment</comments>
      <guid isPermaLink="false">http://www.stevetrefethen.com/blog/post.aspx?id=c324aa9a-c104-4f6b-8ec1-89134c5d9575</guid>
      <pubDate>Wed, 28 Oct 2009 22:33:00 -0800</pubDate>
      <category>Blog</category>
      <dc:publisher>Steve</dc:publisher>
      <pingback:server>http://www.stevetrefethen.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.stevetrefethen.com/blog/post.aspx?id=c324aa9a-c104-4f6b-8ec1-89134c5d9575</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.stevetrefethen.com/blog/trackback.axd?id=c324aa9a-c104-4f6b-8ec1-89134c5d9575</trackback:ping>
      <wfw:comment>http://www.stevetrefethen.com/blog/SwitchfromdasBlogtoBlogEngineNET.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.stevetrefethen.com/blog/syndication.axd?post=c324aa9a-c104-4f6b-8ec1-89134c5d9575</wfw:commentRss>
    <feedburner:origLink>http://www.stevetrefethen.com/blog/post.aspx?id=c324aa9a-c104-4f6b-8ec1-89134c5d9575</feedburner:origLink></item>
    <item>
      <title>Using Google Playground Examples in VS.NET</title>
      <description>&lt;p&gt;&lt;a href="http://www.stevetrefethen.com/blog/content/binary/WindowsLiveWriter/FTP/de35c995be14_131B1/image.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://www.stevetrefethen.com/blog/content/binary/WindowsLiveWriter/FTP/de35c995be14_131B1/image_thumb.png" width="322" height="285" /&gt;&lt;/a&gt; I’ve been working on ways to leverage &lt;a href="http://code.google.com/apis/calendar/data/2.0/developers_guide_protocol.html" target="_blank"&gt;Google’s Calendar API&lt;/a&gt; to publish &lt;a href="http://training.falafel.com/TrainingCalendar.ashx" target="_blank"&gt;Falafel’s training calendar&lt;/a&gt; entries to the web. One of the things I stumbled into was the &lt;a href="http://code.google.com/apis/ajax/playground/" target="_blank"&gt;Google Code Playground&lt;/a&gt; which is a cool tool for testing out various Google API’s. The Playground includes &lt;a href="http://getfirebug.com/lite.html" target="_blank"&gt;Firebug lite&lt;/a&gt; which is also something I hadn’t run into, I love finding new cool things!&lt;/p&gt;  &lt;p&gt;At any rate, this post is about how to get from the Playground to something live. In the screenshot to the right you can see the JavaScript source code in a code editor at the top right hand side of the screen. The missing piece here is that to get the code from the Playground to work on your own site you need to do a few things. First, you have to get an &lt;a href="http://code.google.com/apis/gdata/signup.html" target="_blank"&gt;API Key&lt;/a&gt;. Once you’ve done that you can then add a &amp;lt;script&amp;gt; tag to include the Google GData API in your page.&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;    &amp;lt;script src=&amp;quot;http://www.google.com/jsapi?key=&amp;lt;your_key&amp;gt;&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;

&lt;p&gt;After, that you need to initialize the GData API and get the code from the Playground to execute. To do that I did two things.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Wrapped the JavaScript code from the Playground page in a function. &lt;/li&gt;

  &lt;li&gt;Added the following code to my page with a reference to call the JavaScript function&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="xml" name="code"&gt;    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
        //&amp;lt;![CDATA[

        google.load(&amp;quot;gdata&amp;quot;, &amp;quot;1&amp;quot;);
        google.setOnLoadCallback(loadItems);
        //]]&amp;gt;
    &amp;lt;/script&amp;gt;&lt;/pre&gt;

&lt;p&gt;”loadItems” above is the name of the function I created in Step 1. Next, I had to add a DIV tag to the page as a target for the new content:&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;At this point, the page (plain HTML) can be debugged from VS.NET and/or &lt;a href="http://www.stevetrefethen.com/files/GoogleCalendarAPIExample.htm" target="_blank"&gt;uploaded to your domain&lt;/a&gt; and function correctly. Anyway, I learned a few things along the way and thought this might be useful.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MHN3FeUkfPP3sRNabRL76eB0cTs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MHN3FeUkfPP3sRNabRL76eB0cTs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MHN3FeUkfPP3sRNabRL76eB0cTs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MHN3FeUkfPP3sRNabRL76eB0cTs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=1BOGTIJD3SA:kROmpyBeXVc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=1BOGTIJD3SA:kROmpyBeXVc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=1BOGTIJD3SA:kROmpyBeXVc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=1BOGTIJD3SA:kROmpyBeXVc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=1BOGTIJD3SA:kROmpyBeXVc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=1BOGTIJD3SA:kROmpyBeXVc:IlIkOUNlVJg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=IlIkOUNlVJg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=1BOGTIJD3SA:kROmpyBeXVc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=1BOGTIJD3SA:kROmpyBeXVc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=1BOGTIJD3SA:kROmpyBeXVc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SteveTrefethensWeblog/~4/1BOGTIJD3SA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/SteveTrefethensWeblog/~3/1BOGTIJD3SA/post.aspx</link>
      <author>Steve</author>
      <comments>http://www.stevetrefethen.com/blog/UsingGooglePlaygroundExamplesinVSNET.aspx#comment</comments>
      <guid isPermaLink="false">http://www.stevetrefethen.com/blog/post.aspx?id=9e3c83cb-dec9-471b-8963-2777f5f86ebe</guid>
      <pubDate>Tue, 06 Oct 2009 05:43:00 -0800</pubDate>
      <category>.NET</category>
      <dc:publisher>Steve</dc:publisher>
      <pingback:server>http://www.stevetrefethen.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.stevetrefethen.com/blog/post.aspx?id=9e3c83cb-dec9-471b-8963-2777f5f86ebe</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.stevetrefethen.com/blog/trackback.axd?id=9e3c83cb-dec9-471b-8963-2777f5f86ebe</trackback:ping>
      <wfw:comment>http://www.stevetrefethen.com/blog/UsingGooglePlaygroundExamplesinVSNET.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.stevetrefethen.com/blog/syndication.axd?post=9e3c83cb-dec9-471b-8963-2777f5f86ebe</wfw:commentRss>
    <feedburner:origLink>http://www.stevetrefethen.com/blog/post.aspx?id=9e3c83cb-dec9-471b-8963-2777f5f86ebe</feedburner:origLink></item>
    <item>
      <title>dasBlog provider for use with BlogEngine.NET</title>
      <description>&lt;p&gt;&lt;a title="BlogEngine.NET" href="http://blogengine.codeplex.com/" target="_blank"&gt;&lt;img style="border-bottom-style: none; border-right-style: none; margin: 0px 0px 0px 10px; display: inline; border-top-style: none; border-left-style: none" align="right" src="http://www.stevetrefethen.com/blog/content/binary/WindowsLiveWriter/4a3edc662948_1260F/image_thumb_1.png" /&gt;&lt;/a&gt; I’ve used &lt;a href="http://dasblog.info" target="_blank"&gt;dasBlog&lt;/a&gt; since I first began hosting my own blog and &lt;a href="http://www.stevetrefethen.com/blog/ConsideringASwitchFromDasBlogToBlogEngineNET.aspx" target="_blank"&gt;previously considered a move to BlogEngine.NET&lt;/a&gt; (BE) but the URL’s aren’t compatible so there remains some investigation to figure out the best mechanism prior to switching. Unfortunately, dasblog seems to be &lt;a href="http://dasblog.codeplex.com/Thread/View.aspx?ThreadId=64956" target="_blank"&gt;on it’s final legs&lt;/a&gt; so spending time there at this point doesn’t seem wise.&lt;/p&gt;  &lt;p&gt;To that end, I’ve been investigating various issues involved in a switch and in an attempt to make a transition easier I’ve created a BE provider which reads/writes blog posts and comments using dasBlog’s IBlogDataService rather than BE’s own XML provider. Basically, I’ve replace one XML provider with another, actually that’s not entirely true as this new provide is a descendant of XmlBlogProvider included with BE. Using this approach I avoid having to constantly re-import my blog data as I look into solving the URL issues.&lt;/p&gt;  &lt;p&gt;I’ve made the code available via SVN on Google Code &lt;a href="http://code.google.com/p/dasblogprovider/" target="_blank"&gt;here&lt;/a&gt; so feel free to grab it and give it a go. I chose Google Code over &lt;a href="http://www.codeplex.com/" target="_blank"&gt;Codeplex&lt;/a&gt; because the latter &lt;a href="http://codeplex.codeplex.com/Wiki/View.aspx?title=CodePlex%20FAQ&amp;referringTitle=CodePlex%20Help%20Wiki#Requirements" target="_blank"&gt;doesn’t want abandoned projects&lt;/a&gt; and I don’t see this as an ongoing project as it’s scope is quite narrow. What I’m interested in is any feedback regarding issues using the code and taking this sort of approach. In my initial playing around with BE it seems to function properly and allows me to use the “slug” feature of BE to “fix” at least part of the URL problem by simply removing spaces from Titles rather than replacing then with dashes.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="" border="0" alt="" align="right" src="http://www.stevetrefethen.com/blog/content/binary/WindowsLiveWriter/dasBlogproviderforusewithBlogEngine.NET_BB7/image_6.png" width="327" height="285" /&gt; Things I’ve tested (manually)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Adding/Editing/Deleting posts &lt;/li&gt;    &lt;li&gt;Adding/Editing/Deleting comments &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I haven’t played with images or attachments though my blog data seems to render fairly well. I can see some limitations such as no support for threaded comments though I don’t view this as a long term solution but I think it’s a step in the right direction.&lt;/p&gt;  &lt;p&gt;Things that need testing/implementation:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;DateTime conversions from dasBlog to BE &lt;/li&gt;    &lt;li&gt;Image uploads &lt;/li&gt;    &lt;li&gt;Windows Live support &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Btw, I’m looking for help with the problem of retaining my existing URLs so if you’re a dasblog user and potentially interested in switching ping me and perhaps we can collaborate.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MEbmVy6LnQTpNgzBDUbMALStkEo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MEbmVy6LnQTpNgzBDUbMALStkEo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MEbmVy6LnQTpNgzBDUbMALStkEo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MEbmVy6LnQTpNgzBDUbMALStkEo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=hUU4KGdNZkw:sHQ4-Nst1xo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=hUU4KGdNZkw:sHQ4-Nst1xo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=hUU4KGdNZkw:sHQ4-Nst1xo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=hUU4KGdNZkw:sHQ4-Nst1xo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=hUU4KGdNZkw:sHQ4-Nst1xo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=hUU4KGdNZkw:sHQ4-Nst1xo:IlIkOUNlVJg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=IlIkOUNlVJg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=hUU4KGdNZkw:sHQ4-Nst1xo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=hUU4KGdNZkw:sHQ4-Nst1xo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=hUU4KGdNZkw:sHQ4-Nst1xo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SteveTrefethensWeblog/~4/hUU4KGdNZkw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/SteveTrefethensWeblog/~3/hUU4KGdNZkw/post.aspx</link>
      <author>Steve</author>
      <comments>http://www.stevetrefethen.com/blog/dasBlogproviderforusewithBlogEngineNET.aspx#comment</comments>
      <guid isPermaLink="false">http://www.stevetrefethen.com/blog/post.aspx?id=c14b80ef-3e5c-4c8b-8920-9a675f454641</guid>
      <pubDate>Mon, 14 Sep 2009 08:36:00 -0800</pubDate>
      <category>.NET</category>
      <category>Open Source</category>
      <category>Programming</category>
      <dc:publisher>Steve</dc:publisher>
      <pingback:server>http://www.stevetrefethen.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.stevetrefethen.com/blog/post.aspx?id=c14b80ef-3e5c-4c8b-8920-9a675f454641</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.stevetrefethen.com/blog/trackback.axd?id=c14b80ef-3e5c-4c8b-8920-9a675f454641</trackback:ping>
      <wfw:comment>http://www.stevetrefethen.com/blog/dasBlogproviderforusewithBlogEngineNET.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.stevetrefethen.com/blog/syndication.axd?post=c14b80ef-3e5c-4c8b-8920-9a675f454641</wfw:commentRss>
    <feedburner:origLink>http://www.stevetrefethen.com/blog/post.aspx?id=c14b80ef-3e5c-4c8b-8920-9a675f454641</feedburner:origLink></item>
    <item>
      <title>Using TestComplete Stores and Checkpoints</title>
      <description>&lt;p&gt;&lt;a title="Stores and Checkpoints in TestComplete" href="http://tv.falafel.com/default/TestComplete_Videos/Setting_up_Distributed_Testing_in_TestComplete.aspx"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.stevetrefethen.com/blog/content/binary/WindowsLiveWriter/841072f96c3c_B0E5/image_3.png" width="403" height="258" /&gt;&lt;/a&gt; I’ve recorded a video for &lt;a href="http://tv.falafel.com/"&gt;Falafel TV&lt;/a&gt; illustrating how to use &lt;a href="http://www.automatedqa.com/products/testcomplete/" target="_blank"&gt;TestComplete&lt;/a&gt;’s Stores and Checkpoints features including v7’s new Checkpoint Wizard dialog. In &lt;a title="Distributed testing using TestComplete" href="http://tv.falafel.com/default/TestComplete_Videos/Setting_up_Distributed_Testing_in_TestComplete.aspx"&gt;the video&lt;/a&gt; I demonstrate recording a Keyword test and leveraging various checkpoints to validate the test has performed as expected. The checkpoints illustrated in this video include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Object &lt;/li&gt;    &lt;li&gt;Table &lt;/li&gt;    &lt;li&gt;File &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you have questions or have suggestions for future videos &lt;a href="http://tv.falafel.com/default/09-09-07/Using_Stores_amp_Checkpoints_in_a_TestComplete_Keyword_Test.aspx#comments"&gt;leave a comment&lt;/a&gt;. Also, if you’re looking for &lt;a href="http://www.falafel.com/testcomplete/testcomplete_services.aspx"&gt;&lt;font color="#800080"&gt;training or consulting on TestComplete&lt;/font&gt;&lt;/a&gt; feel free to &lt;a href="http://www.stevetrefethen.com/blog/email.aspx"&gt;&lt;font color="#0066cc"&gt;contact me&lt;/font&gt;&lt;/a&gt; or call the Falafel office at (831) 462-0457.&lt;/p&gt;  &lt;p&gt;One more note, &lt;a href="http://www.falafel.com/"&gt;Falafel&lt;/a&gt; is hosting a &lt;a href="http://www.automatedqa.com/support/training/testcomplete-online-training-agenda/"&gt;TestComplete Online Training Summit&lt;/a&gt; Oct 5-7th or November 9-11th which you can &lt;a href="http://training.falafel.com/AboutTestCompleteOnlineSummit.ashx"&gt;learn more about&lt;/a&gt; and &lt;a href="http://store.falafel.com/p-45-testcomplete-online-training-summit.aspx"&gt;sign up for here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Other videos:    &lt;br /&gt;&lt;a href="http://www.stevetrefethen.com/blog/DistributedTestingUsingTestComplete.aspx"&gt;Distributed Testing Using TestComplete&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.stevetrefethen.com/blog/HTTPLoadTestingUsingTestComplete.aspx"&gt;HTTP Load Testing Using TestComplete&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F2IE9U9oSljCYnRJSdL5q8otyrs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F2IE9U9oSljCYnRJSdL5q8otyrs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F2IE9U9oSljCYnRJSdL5q8otyrs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F2IE9U9oSljCYnRJSdL5q8otyrs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=UwzBll6qy70:ZqpuIFz6Y_I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=UwzBll6qy70:ZqpuIFz6Y_I:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=UwzBll6qy70:ZqpuIFz6Y_I:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=UwzBll6qy70:ZqpuIFz6Y_I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=UwzBll6qy70:ZqpuIFz6Y_I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=UwzBll6qy70:ZqpuIFz6Y_I:IlIkOUNlVJg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=IlIkOUNlVJg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=UwzBll6qy70:ZqpuIFz6Y_I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=UwzBll6qy70:ZqpuIFz6Y_I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=UwzBll6qy70:ZqpuIFz6Y_I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SteveTrefethensWeblog/~4/UwzBll6qy70" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/SteveTrefethensWeblog/~3/UwzBll6qy70/post.aspx</link>
      <author>Steve</author>
      <comments>http://www.stevetrefethen.com/blog/UsingTestCompleteStoresandCheckpoints.aspx#comment</comments>
      <guid isPermaLink="false">http://www.stevetrefethen.com/blog/post.aspx?id=f3399578-a1d1-4ecb-9c5c-2d9e6b3f2d98</guid>
      <pubDate>Fri, 11 Sep 2009 21:52:00 -0800</pubDate>
      <category>Automation</category>
      <category>Videos</category>
      <dc:publisher>Steve</dc:publisher>
      <pingback:server>http://www.stevetrefethen.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.stevetrefethen.com/blog/post.aspx?id=f3399578-a1d1-4ecb-9c5c-2d9e6b3f2d98</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.stevetrefethen.com/blog/trackback.axd?id=f3399578-a1d1-4ecb-9c5c-2d9e6b3f2d98</trackback:ping>
      <wfw:comment>http://www.stevetrefethen.com/blog/UsingTestCompleteStoresandCheckpoints.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.stevetrefethen.com/blog/syndication.axd?post=f3399578-a1d1-4ecb-9c5c-2d9e6b3f2d98</wfw:commentRss>
    <feedburner:origLink>http://www.stevetrefethen.com/blog/post.aspx?id=f3399578-a1d1-4ecb-9c5c-2d9e6b3f2d98</feedburner:origLink></item>
    <item>
      <title>Text file processing with LINQ</title>
      <description>&lt;p&gt;After working on &lt;a href="http://www.stevetrefethen.com/blog/MailServerLogMIMEHeaderParsing.aspx"&gt;this problem&lt;/a&gt; the other day I started Googling looking for posts written about using LINQ for text file processing. I found the post &lt;a href="http://blog.einbu.no/2009/03/parsing-textfiles-with-linq/" target="_blank"&gt;Parsing textfiles with LINQ (or LINQ-to-TextReader)&lt;/a&gt; by &lt;a href="http://blog.einbu.no/"&gt;Arjan Einbu&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;LINQ shows us alternate ways to write code, introducing a more declarative coding paradigm. To use LINQ over the lines of a file, we can read all the lines in the file into a collection, and use LINQ over that collection. There’s some overhead to this; the need to read the entire file upfront and to fit the entire file in memory at once.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The solution was to create an extension method on TextReader for IEnumerable&amp;lt;string&amp;gt;. That post was followed up by &lt;a href="http://blog.einbu.no/2009/06/the-trouble-with-delimited/" target="_blank"&gt;another post,&lt;/a&gt; rather &lt;a href="http://www.stevetrefethen.com/blog/IncludeSearchTermsInTheTitleOfEachBlogEntry.aspx"&gt;unfortunately titled&lt;/a&gt;, improving upon the solution using&amp;#160; &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx"&gt;TextFieldParser class&lt;/a&gt; in the Microsoft.VisualBasic.FileIO namespace, something I wasn’t aware existed and now find it odd this class is stuck well off in left field.&lt;/p&gt;  &lt;p&gt;One of the reasons this subject interests me is I’ve been &lt;a href="http://www.stevetrefethen.com/blog/UsingCruiseControlNETToManageEDIInvoiceProcessing.aspx"&gt;working with EDI files&lt;/a&gt; for awhile now and querying data directly from this file format would be really nice. For example, given a PO with line item segments like this:&lt;/p&gt;  &lt;pre&gt;PO1*1*&lt;span style="background-color: yellow"&gt;36&lt;/span&gt;*CA*11.15*PE***VP*RRSKRC85*PI*0001111091127~
PID*F****PRSL ROMNE BBY TRAY ORGNC~
PO1*2*&lt;span style="background-color: yellow"&gt;84&lt;/span&gt;*CA*11.15*PE***VP*RSMKRC85*PI*0001111091131~
PID*F****PRSL SPRG BBY TRAY ORGNC~
PO1*3*&lt;span style="background-color: yellow"&gt;84&lt;/span&gt;*CA*11.15*PE***VP*RBSKRC85*PI*0001111091128~
PID*F****PRSL SPNCH BBY TRAY ORGNC~
PO1*4*&lt;span style="background-color: yellow"&gt;72&lt;/span&gt;*CA*11.15*PE***VP*RHEKRC85*PI*0001111091126~
PID*F****PRSL SPRG W/HRB CLM ORGNC~&lt;/pre&gt;

&lt;p&gt;You can calculate the total quantity, highlighted in yellow, of all line items using LINQ like this: &lt;/p&gt;

&lt;pre class="c#" name="code"&gt;using (var reader = new StreamReader(&amp;quot;c:\\edi\\inbound\\850_09022009_1311_89.txt&amp;quot;))
{
    var query = (from line in reader.GetSplittedLines(&amp;quot;*&amp;quot;)
                            where line[0].Equals(&amp;quot;PO1&amp;quot;) &amp;amp;&amp;amp; line[2].Length &amp;gt; 0
                            select Convert.ToInt32(line[2])).Sum();&lt;br /&gt;    ...
}&lt;/pre&gt;

&lt;p&gt;Using &lt;a href="http://blog.einbu.no/2009/06/the-trouble-with-delimited/"&gt;Arjan’s implementation of GetSpittedLines&lt;/a&gt;, that’s his name not mine for the extension method he wrote, you can apply logic to any of the columns from the file which is pretty cool.&lt;/p&gt;

&lt;p&gt;Of course, there are a myriad of ways of doing the same thing but it’s interesting to have access to the columns allowing for calculations and querying. For my EDI work I’m using &lt;a href="http://filehelpers.sourceforge.net/" target="_blank"&gt;FileHelpers&lt;/a&gt; which works well though I really like this LINQ option. That said, I haven’t done any benchmarking so I’m not sure about the performance but most of the PO’s I’m working with are less than 4KB and the volume isn’t so great that this would be a major factor. At any rate, I hope you find useful for you too.&lt;/p&gt;

&lt;p&gt;Btw, if you’re looking for custom EDI implementations feel free to &lt;a href="http://www.stevetrefethen.com/blog/email.aspx"&gt;contact me&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A3lfvKQMV7QsbwZ5C5ARui9VA9k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A3lfvKQMV7QsbwZ5C5ARui9VA9k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A3lfvKQMV7QsbwZ5C5ARui9VA9k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A3lfvKQMV7QsbwZ5C5ARui9VA9k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=Ql4N37y4NaA:Yaq3Csm5SbQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=Ql4N37y4NaA:Yaq3Csm5SbQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=Ql4N37y4NaA:Yaq3Csm5SbQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=Ql4N37y4NaA:Yaq3Csm5SbQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=Ql4N37y4NaA:Yaq3Csm5SbQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=Ql4N37y4NaA:Yaq3Csm5SbQ:IlIkOUNlVJg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=IlIkOUNlVJg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=Ql4N37y4NaA:Yaq3Csm5SbQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=Ql4N37y4NaA:Yaq3Csm5SbQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=Ql4N37y4NaA:Yaq3Csm5SbQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SteveTrefethensWeblog/~4/Ql4N37y4NaA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/SteveTrefethensWeblog/~3/Ql4N37y4NaA/post.aspx</link>
      <author>Steve</author>
      <comments>http://www.stevetrefethen.com/blog/TextfileprocessingwithLINQ.aspx#comment</comments>
      <guid isPermaLink="false">http://www.stevetrefethen.com/blog/post.aspx?id=ee7f75f6-262d-4889-bb15-f622b3b204fe</guid>
      <pubDate>Wed, 09 Sep 2009 07:15:00 -0800</pubDate>
      <category>.NET</category>
      <category>Development</category>
      <dc:publisher>Steve</dc:publisher>
      <pingback:server>http://www.stevetrefethen.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.stevetrefethen.com/blog/post.aspx?id=ee7f75f6-262d-4889-bb15-f622b3b204fe</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.stevetrefethen.com/blog/trackback.axd?id=ee7f75f6-262d-4889-bb15-f622b3b204fe</trackback:ping>
      <wfw:comment>http://www.stevetrefethen.com/blog/TextfileprocessingwithLINQ.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.stevetrefethen.com/blog/syndication.axd?post=ee7f75f6-262d-4889-bb15-f622b3b204fe</wfw:commentRss>
    <feedburner:origLink>http://www.stevetrefethen.com/blog/post.aspx?id=ee7f75f6-262d-4889-bb15-f622b3b204fe</feedburner:origLink></item>
    <item>
      <title>Distributed Testing Using TestComplete</title>
      <description>&lt;p&gt;&lt;a title="Distributed Testing in TestComplete" href="http://tv.falafel.com/default/TestComplete_Videos/Setting_up_Distributed_Testing_in_TestComplete.aspx"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://www.stevetrefethen.com/blog/content/binary/WindowsLiveWriter/DistributedTestingusingTestComplete_9679/image_3.png" width="419" height="238" /&gt;&lt;/a&gt;I’ve recorded a video for &lt;a href="http://tv.falafel.com/"&gt;Falafel TV&lt;/a&gt; illustrating how to use &lt;a href="http://www.automatedqa.com/products/testcomplete/" target="_blank"&gt;TestComplete&lt;/a&gt;’s distributed testing features. In &lt;a title="Distributed testing using TestComplete" href="http://tv.falafel.com/default/TestComplete_Videos/Setting_up_Distributed_Testing_in_TestComplete.aspx"&gt;the video&lt;/a&gt; I demonstrate recording a Keyword test and adding the necessary support to allow it to be executed in a distributed fashion. If you’re just getting started this is a good introduction and should get you headed in the right direction. I’ve got some notes for an advanced video on the subject but if you have suggestions let me know.&lt;/p&gt;  &lt;p&gt;If you have questions or have suggestions for future videos leave a comment. If you’re looking for &lt;a href="http://www.falafel.com/testcomplete/testcomplete_services.aspx"&gt;&lt;font color="#800080"&gt;training or consulting on TestComplete&lt;/font&gt;&lt;/a&gt; feel free to &lt;a href="http://www.stevetrefethen.com/blog/email.aspx"&gt;&lt;font color="#0066cc"&gt;contact me&lt;/font&gt;&lt;/a&gt; or call the Falafel office at (831) 462-0457.&lt;/p&gt;  &lt;p&gt;One more note, &lt;a href="http://www.falafel.com/"&gt;Falafel&lt;/a&gt; is hosting a TestComplete online training Summit Oct 5-7th which you can &lt;a href="http://training.falafel.com/AboutTestCompleteOnlineSummit.ashx"&gt;learn more about&lt;/a&gt; and &lt;a href="http://store.falafel.com/p-45-testcomplete-online-training-summit.aspx"&gt;sign up for here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zR7_yCVPQdzh_sOVulB3cQdquJI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zR7_yCVPQdzh_sOVulB3cQdquJI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zR7_yCVPQdzh_sOVulB3cQdquJI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zR7_yCVPQdzh_sOVulB3cQdquJI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=r7TxqJnDyZ4:0iOND5cuTGQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=r7TxqJnDyZ4:0iOND5cuTGQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=r7TxqJnDyZ4:0iOND5cuTGQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=r7TxqJnDyZ4:0iOND5cuTGQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=r7TxqJnDyZ4:0iOND5cuTGQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=r7TxqJnDyZ4:0iOND5cuTGQ:IlIkOUNlVJg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=IlIkOUNlVJg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=r7TxqJnDyZ4:0iOND5cuTGQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=r7TxqJnDyZ4:0iOND5cuTGQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=r7TxqJnDyZ4:0iOND5cuTGQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SteveTrefethensWeblog/~4/r7TxqJnDyZ4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/SteveTrefethensWeblog/~3/r7TxqJnDyZ4/post.aspx</link>
      <author>Steve</author>
      <comments>http://www.stevetrefethen.com/blog/DistributedTestingUsingTestComplete.aspx#comment</comments>
      <guid isPermaLink="false">http://www.stevetrefethen.com/blog/post.aspx?id=c5c15671-1d9d-4195-a72a-841e2cc1af1a</guid>
      <pubDate>Tue, 08 Sep 2009 04:46:35 -0800</pubDate>
      <dc:publisher>Steve</dc:publisher>
      <pingback:server>http://www.stevetrefethen.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.stevetrefethen.com/blog/post.aspx?id=c5c15671-1d9d-4195-a72a-841e2cc1af1a</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.stevetrefethen.com/blog/trackback.axd?id=c5c15671-1d9d-4195-a72a-841e2cc1af1a</trackback:ping>
      <wfw:comment>http://www.stevetrefethen.com/blog/DistributedTestingUsingTestComplete.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.stevetrefethen.com/blog/syndication.axd?post=c5c15671-1d9d-4195-a72a-841e2cc1af1a</wfw:commentRss>
    <feedburner:origLink>http://www.stevetrefethen.com/blog/post.aspx?id=c5c15671-1d9d-4195-a72a-841e2cc1af1a</feedburner:origLink></item>
    <item>
      <title>Mail Server Log MIME Header Parsing</title>
      <description>&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.stevetrefethen.com/blog/content/binary/WindowsLiveWriter/MIMEParsing_79A4/image3_1.png" width="238" height="206" /&gt;The other day a friend, whose not a developer, approached me looking for help with a problem they were having dealing a few large server log files. The file contained 100’s of &lt;a href="http://www.google.com/search?q=MIME+headers"&gt;MIME headers&lt;/a&gt; listed one after the other each with a starting comment and separated by a blank line. I was given a sample containing 1400 MIME headers which at first I opened in Windows Notepad and looked like what you see to the right. They had been trying to work with this file using Excel but not having much luck because the headers were inconsistent sizes and I imagine extracting the right fields was clearly a problem. The desired result was a format from which they could perform some analysis of the data and particularly of the X-Originating-IP field.&lt;/p&gt;  &lt;p&gt;After about 10 seconds of staring at the data in Notepad I opened it in &lt;a href="http://notepad-plus.sourceforge.net/" target="_blank"&gt;Notepad++&lt;/a&gt; and things looked a bit more sane and it sort of dawned on me what my friend’s first thoughts probably were when they first glanced at this file. Excel looked better but didn’t make the process any easier.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.stevetrefethen.com/blog/content/binary/WindowsLiveWriter/MIMEParsing_79A4/image_8.png" width="239" height="206" /&gt;&lt;/p&gt;  &lt;p&gt;A few choices entered my mind:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Write a simple parser, regex etc.&lt;/li&gt;    &lt;li&gt;Look for an existing MIME parser&lt;/li&gt;    &lt;li&gt;Use VS.NET editor Macros to extract the content&lt;/li&gt;    &lt;li&gt;grep/findstr&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;My focus desire was to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;not spend much time&lt;/li&gt;    &lt;li&gt;produce a CSV file&lt;/li&gt;    &lt;li&gt;do something my friend could duplicate (lessen “support”)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I opted to search for a MIME parser largely because I figured one written in C# had to exist then write a tool to spit out a CVS file. My first Google search was “parse email header C#” which gave me a few interesting links but nothing that really caught my eye. The next attempt was “parse MIME header C#”:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.stevetrefethen.com/blog/content/binary/WindowsLiveWriter/MIMEParsing_79A4/image_7.png" width="589" height="217" /&gt;&lt;/p&gt;  &lt;p&gt;Bingo.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.codeproject.com/KB/cs/mime_project.aspx" target="_blank"&gt;CodeProject article&lt;/a&gt; is largely code snippets and the first one looked interesting.&lt;/p&gt;  &lt;pre class="c#" name="code"&gt;Mime m = Mime.Parse(&amp;quot;message.eml&amp;quot;);
// Do your stuff with mime&lt;/pre&gt;

&lt;p&gt;I thought, if there is .eml message parsing then I’m good regardless of the fact that it was expecting a file. I downloaded the source and it compiled without error, always encouraging. Next, I looked into the parsing support:&lt;/p&gt;

&lt;pre class="c#" name="code"&gt;// Summary:
//     Parses mime message from byte[] data.
//
// Parameters:
//   data:
//     Mime message data.
public static Mime Parse(byte[] data);
//
// Summary:
//     Parses mime message from stream.
//
// Parameters:
//   stream:
//     Mime message stream.
public static Mime Parse(Stream stream);
//
// Summary:
//     Parses mime message from file.
//
// Parameters:
//   fileName:
//     Mime message file.
public static Mime Parse(string fileName);&lt;/pre&gt;

&lt;p&gt;Sweet. &lt;/p&gt;

&lt;p&gt;For testing I saved off a single MIME header and created a simple console application to try and parse a fake .eml file which worked like a charm. All that was left to do was write some code to read the log file one header at a time and spit out a .CSV file.&lt;/p&gt;

&lt;p&gt;I made one minor change to the MIME parsing code which was to change it’s HeaderFieldCollection from an IEnumerable to IEnumerable&amp;lt;HeaderField&amp;gt; so as to leverage LINQ to search for the “X-Originating-IP”. Of course, I later found out that the &lt;a href="http://www.codeproject.com/KB/cs/mime_project.aspx?msg=3185255#xx3185255xx" target="_blank"&gt;code attached to the article is outdated&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At any rate, I quickly had the file parsed, output to .CVS using a simple console application with input and output filename params which I mailed off. So, if you’re looking for MIME header parsing this library worked well for the 1400 headers I tried and I’m glad I could offer this tiny bit of help in a situation that sounds very serious for the folks involved.&lt;/p&gt;

&lt;p&gt;Btw, kudos to &lt;a id="ctl00_AboutAuthorRptr_ctl00_AboutAuthor_memberProfileLink" href="http://www.codeproject.com/Members/Ivar-Lumi"&gt;&lt;strong&gt;&lt;font color="#0066cc"&gt;Ivar Lumi&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; for making this available, heck I think writing this post took longer than developing the solution.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Pu14hV5fLCU5Sb6hOObrjaraXeo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pu14hV5fLCU5Sb6hOObrjaraXeo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Pu14hV5fLCU5Sb6hOObrjaraXeo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pu14hV5fLCU5Sb6hOObrjaraXeo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=tOTy-SQmtxk:u7hrzvPSr1Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=tOTy-SQmtxk:u7hrzvPSr1Y:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=tOTy-SQmtxk:u7hrzvPSr1Y:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=tOTy-SQmtxk:u7hrzvPSr1Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=tOTy-SQmtxk:u7hrzvPSr1Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=tOTy-SQmtxk:u7hrzvPSr1Y:IlIkOUNlVJg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=IlIkOUNlVJg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=tOTy-SQmtxk:u7hrzvPSr1Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?i=tOTy-SQmtxk:u7hrzvPSr1Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?a=tOTy-SQmtxk:u7hrzvPSr1Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SteveTrefethensWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SteveTrefethensWeblog/~4/tOTy-SQmtxk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/SteveTrefethensWeblog/~3/tOTy-SQmtxk/post.aspx</link>
      <author>Steve</author>
      <comments>http://www.stevetrefethen.com/blog/MailServerLogMIMEHeaderParsing.aspx#comment</comments>
      <guid isPermaLink="false">http://www.stevetrefethen.com/blog/post.aspx?id=55974b24-b11a-4af2-af94-3509a7887575</guid>
      <pubDate>Sun, 06 Sep 2009 05:12:35 -0800</pubDate>
      <dc:publisher>Steve</dc:publisher>
      <pingback:server>http://www.stevetrefethen.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.stevetrefethen.com/blog/post.aspx?id=55974b24-b11a-4af2-af94-3509a7887575</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.stevetrefethen.com/blog/trackback.axd?id=55974b24-b11a-4af2-af94-3509a7887575</trackback:ping>
      <wfw:comment>http://www.stevetrefethen.com/blog/MailServerLogMIMEHeaderParsing.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.stevetrefethen.com/blog/syndication.axd?post=55974b24-b11a-4af2-af94-3509a7887575</wfw:commentRss>
    <feedburner:origLink>http://www.stevetrefethen.com/blog/post.aspx?id=55974b24-b11a-4af2-af94-3509a7887575</feedburner:origLink></item>
  </channel>
</rss>
