<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Paul's development blog</title>
        <link>http://geekswithblogs.net/paulwhitblog/Default.aspx</link>
        <description>Tidbits from Smart Client, Windows Forms, C#, .NET 2.0, XML, and related toys...</description>
        <language>en-US</language>
        <copyright>Paul Whitaker</copyright>
        <managingEditor>paul@whitakerfamily.net</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Paul's development blog</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/paulwhitblog/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Personal Twitter Client Counter</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2008/04/29/personal-twitter-client-counter.aspx</link>
            <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get a count and percentage of how many updates you've had with each twitter tool.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://paulw.us/blog/uploads/TwitterClientCounterWPF.zip"&gt;Download C# 3.5 WPF Source Code&lt;/a&gt; &lt;br /&gt;
Note: This source code is mostly a quick hack to get the data I wanted. Also, if you run this on your own data, note that you may need to wait a few minutes for results to come back.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In testing out various &lt;a href="http://www.readwriteweb.com/archives/top_twitter_clients_definitive_list.php"&gt;twitter clients&lt;/a&gt;, I wanted to get a feel for my personal usage (how much I've used each client), so I decided I'd write some code around it. To begin, here are the results:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;web, 1770, 41.549%  &lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/paulwhitblog/WindowsLiveWriter/PersonalTwitterClientCounter_13E04/Clipboard02_4.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 15px; BORDER-RIGHT-WIDTH: 0px" height="244" alt="Clipboard02" width="219" align="right" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/paulwhitblog/WindowsLiveWriter/PersonalTwitterClientCounter_13E04/Clipboard02_thumb_1.png" /&gt;&lt;/a&gt; &lt;br /&gt;
im, 1214, 28.498% &lt;br /&gt;
txt, 713, 16.737% &lt;br /&gt;
SnapFoo, 153, 3.592% &lt;br /&gt;
twigadge, 146, 3.427% &lt;br /&gt;
Twadget, 128, 3.005% &lt;br /&gt;
TwitterFox, 61, 1.432% &lt;br /&gt;
Snitter, 21, 0.493%  &lt;br /&gt;
Jott, 17, 0.399% &lt;br /&gt;
TwitBin, 16, 0.376% &lt;br /&gt;
twitterfeed, 7, 0.164% &lt;br /&gt;
Spaz, 6, 0.141% &lt;br /&gt;
Twitter Opera widget, 3, 0.070% &lt;br /&gt;
twhirl, 3, 0.070% &lt;br /&gt;
Twittearth, 2, 0.047%&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I snagged an &lt;a href="http://chakkaradeep.wordpress.com/2008/04/05/a-simple-twitter-client-to-demonstrate-backgroundworker/"&gt;API code sample&lt;/a&gt; and fired up my trusty Visual Studio 2005. Thankfully (so I could step out of my box a bit), the code sample was in C# 3.5! So... I popped open my laptop and set out coding (finally, for the first time outside of dragging some controls around) in Visual Studio 2008.&lt;/p&gt;
&lt;p&gt;As part of this, I wrote my first LINQ-to-XML query!&lt;/p&gt;
&lt;p&gt;This code makes a request to twitter (you have to be authenticated first) and gets an &lt;a href="http://en.wikipedia.org/wiki/Anonymous_type"&gt;anonymous type&lt;/a&gt; list called sc that has the key (the name of the source, as shown above) and the count from that page. After that I work some magic to aggregate them across all pages, though I'm investigating how to do the aggregation by first combining the XElement-s from each page (though that would take up a lot of memory).&lt;/p&gt;
&lt;div&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;url = &lt;span style="COLOR: #006080"&gt;"http://twitter.com/account/archive.xml?page="&lt;/span&gt; + x.ToString();

WebRequest Request = HttpWebRequest.Create(url);
Request.Credentials = &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; NetworkCredential(userName, password);
WebResponse Response = Request.GetResponse();
Stream stream = Response.GetResponseStream();
TextReader reader = &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; StringReader(&lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; StreamReader(stream).ReadToEnd());
XElement statuses = XElement.Load(reader);

&lt;span style="COLOR: #008000"&gt;// My first LINQ query!&lt;/span&gt;
var sourceNames = from source &lt;span style="COLOR: #0000ff"&gt;in&lt;/span&gt; statuses.Descendants(&lt;span style="COLOR: #006080"&gt;"source"&lt;/span&gt;)
                  group source by source.Value into sc
                  orderby sc.Count() descending
                  select &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; { sc.Key, MyCount = sc.Count() };&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I also got to play around in WPF just a little. Nothing fancy at all, but it was nice to see the new IDE in action. It feels much more powerful.&lt;/p&gt;
&lt;p&gt;I may play around with this some more, add graphing, toy around with it as a Silverlight 2 app. Or it might just sit there and do nothing ;-)&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121779"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121779" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/121779.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2008/04/29/personal-twitter-client-counter.aspx</guid>
            <pubDate>Wed, 30 Apr 2008 03:35:41 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/121779.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2008/04/29/personal-twitter-client-counter.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/121779.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/121779.aspx</trackback:ping>
        </item>
        <item>
            <title>Latest tool: XPath query field extractor for InfoPath 2003</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2008/04/15/latest-tool-xpath-query-field-extractor-for-infopath.aspx</link>
            <description>&lt;blockquote&gt;   &lt;p&gt;Update: This tool seems to be only relevant with InfoPath 2003. A co-worker pointed out that due to customer pains around a the lack of a feature like this, in InfoPath 2007 you can right-click a node in the data source and choose "Copy XPath". Cool! Thanks to Scott Heim for pointing this out.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So, I love making tools. One-off things that process something. Batch files that lessen monotony. Sexy little WinForm apps for displaying data. XSL transformations that regurgitate and pre-process XML. &lt;/p&gt;  &lt;p&gt;My latest tool is a small WinForms app that pulls out a list of fields form an InfoPath document so they can be referenced as XPath. This is pretty neat because my client needed a documentation artifact, and this saved quite a bit of tedium. Getting this data also proved difficult because the Namespace URI for the "my" namespace is always changing because it includes a timestamp (see solution below).&lt;/p&gt;  &lt;p&gt;Here's a sample of the output. You can use each of these lines as XPath queries against the document:&lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;p&gt;my:MyFields/my:secMain
my:MyFields/my:secMain/my:secPhysicalDescriptionHeader
my:MyFields/my:secMain/my:secDualCitizenshipMain
my:MyFields/my:secMain/my:secDualCitizenshipMain/my:secDualCitizenshipName
my:MyFields/my:secMain/my:secDualCitizenshipMain/my:secDualCitizenship&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;/p&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The tool uses the &lt;a href="http://support.microsoft.com/kb/310618"&gt;CAB SDK&lt;/a&gt;'s extract.exe via a command shell to pull out the template.xml file from the InfoPath XSN file.&lt;/p&gt;

&lt;p&gt;The code for using the SDK was pretty straightforward. In this case (since we want the XML template in the InfoPath, the variable ExtractionFileName is defined as:&lt;/p&gt;

&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ExtractionFileName = &lt;span style="color: #006080"&gt;"template.xml"&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;And fileName is the location of the XSN file. The code for the extraction is:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;// Use the CAB SDK to grab the template file from the InfoPath XSN package&lt;/span&gt;
Process proc = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Process();
proc.StartInfo.FileName = &lt;span style="color: #006080"&gt;".\\EXTRACT.EXE"&lt;/span&gt;;
proc.StartInfo.Arguments = &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080"&gt;"\"{0}\" {1}"&lt;/span&gt;, fileName, ExtractionFileName);
proc.StartInfo.UseShellExecute = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Dealing with the ever-changing "my" namespace&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One particular challenge arose. Since the "my" namespace in InfoPath is defined with a timestamp, every time you change the schema the namespace URI changes. So, I had to do a little preprocessing before I could read the fields (since they're all in the "my" namespace). Thankfully the timestamp is of fixed length.&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;XmlDocument doc = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; XmlDocument();
doc.Load(extractionFilePath);

&lt;span style="color: #008000"&gt;// Use a low-tech way to get the "my:" namespace URI, since it &lt;/span&gt;
&lt;span style="color: #008000"&gt;// differs by form and when changes are made&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; fileContents = File.ReadAllText(extractionFilePath);
&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; myIndex = fileContents.IndexOf(&lt;span style="color: #006080"&gt;"xmlns:my="&lt;/span&gt;) + 10;
&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; myNamespace = fileContents.Substring(myIndex, 75);

XmlNamespaceManager mgr = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; XmlNamespaceManager(doc.NameTable);
mgr.AddNamespace(&lt;span style="color: #006080"&gt;"my"&lt;/span&gt;, myNamespace);

XmlNode myFieldsNode = doc.SelectSingleNode(&lt;span style="color: #006080"&gt;"//my:myFields"&lt;/span&gt;, mgr);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;After you get the "myFieldsNode" you can recursively iterate through the nodes and output the fields.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121275"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121275" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/121275.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2008/04/15/latest-tool-xpath-query-field-extractor-for-infopath.aspx</guid>
            <pubDate>Wed, 16 Apr 2008 02:04:55 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/121275.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2008/04/15/latest-tool-xpath-query-field-extractor-for-infopath.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/121275.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/121275.aspx</trackback:ping>
        </item>
        <item>
            <title>Live Writer: Word+Social media, for bloggers</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2008/04/14/live-writer-wordsocial-media-for-bloggers.aspx</link>
            <description>&lt;p&gt;I just started using &lt;a href="http://windowslivewriter.spaces.live.com/"&gt;Windows Live Writer&lt;/a&gt; to update my blogs*. I'm thoroughly impressed with what I see, both from the practical sense and just how much cool seems to surround this thing.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:84E294D0-71C9-4bd0-A0FE-95764E0368D9:139f9610-f244-4810-af46-774d25b85a3c" style="padding-right: 10px; display: inline; padding-left: 10px; float: right; padding-bottom: 10px; margin: 0px; padding-top: 10px"&gt;&lt;a href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=qgkm0c8kdq18&amp;amp;lvl=1&amp;amp;style=o&amp;amp;scene=24019353&amp;amp;mkt=en-US&amp;amp;FORM=LLWR" id="map-e5f64010-9869-4f21-b6e8-b569b29f9841" alt="Click to view this map on Live.com" title="Click to view this map on Live.com"&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/paulwhitblog/WindowsLiveWriter/LiveWriterWordSocialmediaforbloggers_1367A/map-f75db1b8f557.jpg" width="320" height="240" alt="1) My Apartment Building, Washington, DC" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;label for="map-e5f64010-9869-4f21-b6e8-b569b29f9841" style="font-size:.8em;"&gt;1) My Apartment Building, Washington, DC&lt;/label&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Software+Services is Microsoft's answer to the debate about where the future of computing is going in the near future. My take on what this means is a badass WinForms interface with a sexy back-end built around some Web 2.0-ish stuff. That's the technical explanation.&lt;/p&gt;  &lt;p&gt;Live Writer epitomizes all of this. It's a lightweight, feature- and graphics-rich editing environment, and it's very closely integrated with a bunch of "Web 2.0" sites, including a pile of blog packages and social media sites.&lt;/p&gt;  &lt;p&gt;There are some neat plug-ins "out of the box", including one that took me exactly 12 seconds to show you an image of my apartment building (see image 1).&lt;/p&gt;  &lt;p&gt;Plus, there seems to be an active plug-in community developing things to better pretty up source code, integrate with Flickr, Facebook and other sites. Some of em are crap, but the architecture seems like it must be easy enough to be accessible. One cool one is the Amazon Book Lookup plugin (see example below)&lt;/p&gt;  &lt;p&gt;Some of the interface features I'm falling in love with include the ability to match the style to the blog's style (so I can switch between the three blogs and see how it'll look in each one), and the ability to pull up old posts from the "Open" menu.&lt;/p&gt;  &lt;table align="right" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&lt;a href="http://www.amazon.com/gp/redirect.html%3FASIN=1569245134%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/1569245134%253FSubscriptionId=0525E2PQ81DD7ZTWTK82"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/41VWH81G2KL._SL75_.jpg" border="1" /&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top"&gt;&lt;b&gt;Party of One: The Loners' Manifesto&lt;/b&gt;           &lt;br /&gt;by Anneli Rufus           &lt;br /&gt;          &lt;br /&gt;&lt;a href="http://www.amazon.com/gp/redirect.html%3FASIN=1569245134%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/1569245134%253FSubscriptionId=0525E2PQ81DD7ZTWTK82"&gt;Read more about this book...&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;* My blogs:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://geekswithblogs.net/paulwhitblog"&gt;My GeeksWithBlogs Blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/paulwhit"&gt;My MSDN Blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://paulw.us/blog"&gt;My Personal Blog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121243"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121243" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/121243.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2008/04/14/live-writer-wordsocial-media-for-bloggers.aspx</guid>
            <pubDate>Tue, 15 Apr 2008 02:27:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/121243.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2008/04/14/live-writer-wordsocial-media-for-bloggers.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/121243.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/121243.aspx</trackback:ping>
        </item>
        <item>
            <title>Synchronize XSD from an InfoPath document with a SharePoint project for server-side XSD validation.</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2008/04/14/synchronize-xsd-from-an-infopath-document-with-a-sharepoint-project.aspx</link>
            <description>&lt;p&gt;In order to implement server-side XSD validation against an InfoPath form submission, I had to pull the XSD from the InfoPath document archive (XSN file) and use that to update an embedded resource in a SharePoint solution project (including automated checkout/checkin in TFS). I was able to do it using a batch file. &lt;/p&gt;
&lt;p&gt;Pretty specialized need, but maybe somebody could make use of it someday ;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;@echo off &lt;/p&gt;
&lt;p&gt;rem *********************************************************** &lt;br /&gt;
rem This batch file is used to extract the XSD files from each of the InfoPath forms, and copy them into the source tree &lt;br /&gt;
rem Download and install the Microsoft CAB SDK from &lt;a href="http://support.microsoft.com/kb/310618"&gt;http://support.microsoft.com/kb/310618&lt;/a&gt; to c:\cabsdk &lt;br /&gt;
rem *********************************************************** &lt;/p&gt;
&lt;p&gt;rem IMPORTANT: Set these values to your system. Do not include trailing slashes, and include values in quotes if necessary &lt;/p&gt;
&lt;p&gt;set CABSDK_PATH=c:\cabsdk\bin &lt;br /&gt;
set ROOT=C:\projects\projectname &lt;br /&gt;
set TFS_USERNAME="domain\user.name" &lt;br /&gt;
set TFS_PASSWORD=password&lt;/p&gt;
&lt;p&gt;rem These should be relatively fixed &lt;br /&gt;
set FORMS_ROOT=%ROOT%\Project.Namespace\12\TEMPLATE\Layouts\infopathForms &lt;br /&gt;
set XSD_ROOT=%ROOT%\Project.Namespace\12\Resources &lt;br /&gt;
set TF_PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE &lt;/p&gt;
&lt;p&gt;echo. &lt;br /&gt;
echo ********* InfoPath Form 1 ********* &lt;br /&gt;
echo. &lt;br /&gt;
set FORM_PATH=%FORMS_ROOT%\Form 1\Form1.xsn &lt;br /&gt;
set XSD_PATH=%XSD_ROOT%\Form1.xsd &lt;br /&gt;
set RETURN=FINISH &lt;br /&gt;
goto UPDATE_SCHEMA &lt;/p&gt;
&lt;p&gt;:FINISH &lt;br /&gt;
goto FINISH_BATCH&lt;/p&gt;
&lt;p&gt;:UPDATE_SCHEMA &lt;br /&gt;
echo Checking file out... &lt;br /&gt;
"%TF_PATH%\tf.exe" edit "%XSD_PATH%" /login:%TFS_USERNAME%,%TFS_PASSWORD% /noprompt &amp;gt;/nil &lt;/p&gt;
&lt;p&gt;echo Extracting file... &lt;br /&gt;
del myschema.xsd &lt;br /&gt;
"%CABSDK_PATH%\extract.exe" "%FORM_PATH%" myschema.xsd &amp;gt;/nil &lt;/p&gt;
&lt;p&gt;echo Replacing file... &lt;br /&gt;
copy myschema.xsd "%XSD_PATH%" &amp;gt;/nil &lt;/p&gt;
&lt;p&gt;echo Checking file in... &lt;br /&gt;
"%TF_PATH%\tf.exe" checkin "%XSD_PATH%" /login:%TFS_USERNAME%,%TFS_PASSWORD% /noprompt /comment:"Automated checkin from XsdExtractor script" &amp;gt;/nil &lt;/p&gt;
&lt;p&gt;goto %RETURN% &lt;/p&gt;
&lt;p&gt;:FINISH_BATCH&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121242"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121242" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/121242.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2008/04/14/synchronize-xsd-from-an-infopath-document-with-a-sharepoint-project.aspx</guid>
            <pubDate>Tue, 15 Apr 2008 01:43:25 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/121242.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2008/04/14/synchronize-xsd-from-an-infopath-document-with-a-sharepoint-project.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/121242.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/121242.aspx</trackback:ping>
        </item>
        <item>
            <title>Use the DescriptionAttribute with an Enum to display status messages.</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2008/03/31/use-the-descriptionattribute-with-an-enum-to-display-status-messages.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;I've been working on various forms of displaying status messages from enums, and here's the latest preferred iteration of how to do this. Regurgitated and tweaked from &lt;a href="http://blog.waynehartman.com/articles/84.aspx"&gt;WayneHartman.com&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;        public enum XmlValidationResult&lt;br /&gt;
        {&lt;br /&gt;
            [Description("Success.")]&lt;br /&gt;
            Success,&lt;br /&gt;
            [Description("Could not load file.")]&lt;br /&gt;
            FileLoadError,&lt;br /&gt;
            [Description("Could not load schema.")]&lt;br /&gt;
            SchemaLoadError,&lt;br /&gt;
            [Description("Form XML did not pass schema validation.")]&lt;br /&gt;
            SchemaError&lt;br /&gt;
        }&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;        private string GetEnumDescription(Enum value)&lt;br /&gt;
        {&lt;br /&gt;
            // Get the Description attribute value for the enum value&lt;br /&gt;
            FieldInfo fi = value.GetType().GetField(value.ToString());&lt;br /&gt;
            DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);&lt;br /&gt;
            if (attributes.Length &amp;gt; 0)&lt;br /&gt;
            {&lt;br /&gt;
                return attributes[0].Description;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                return value.ToString();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;It's possible to do something even cooler like &lt;a href="http://biasecurities.com/blog/2006/text-description-for-enum-values/"&gt;&lt;font color="#800080"&gt;cache the values&lt;/font&gt;&lt;/a&gt; or &lt;a href="http://blogs.msdn.com/abhinaba/archive/2005/10/21/483337.aspx"&gt;add a ToDescription() method&lt;/a&gt; (in C#3.0), but I just wanted an simple, repeatable way to do this.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120895"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120895" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/120895.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2008/03/31/use-the-descriptionattribute-with-an-enum-to-display-status-messages.aspx</guid>
            <pubDate>Mon, 31 Mar 2008 19:19:13 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/120895.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2008/03/31/use-the-descriptionattribute-with-an-enum-to-display-status-messages.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/120895.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/120895.aspx</trackback:ping>
        </item>
        <item>
            <title>Recap of VS2008 InstallFest in Indianapolis</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2007/12/13/recap-of-vs2008-installfest-in-indianapolis.aspx</link>
            <description>&lt;img src="http://paulw.us/blog/uploads/7070733-1213200718158.jpg" alt="" /&gt;  &lt;br /&gt;
&lt;br /&gt;
I just got back from the Visual Studio 2008 InstallFest in Indianapolis. &lt;a href="http://davebost.com"&gt;Dave Bost&lt;/a&gt; from Microsoft was on hand with some awesome prizes from the source. I won a IndyTechFest polo shirt. There was Xbox360 to be had, awesome catered food (lasagna, salad, cake!), and some good networking.&lt;br /&gt;
&lt;br /&gt;
There were also open-mic style code demos. Topics included:&lt;br /&gt;
&lt;br /&gt;
- Syndication services&lt;br /&gt;
- Unit testing&lt;br /&gt;
- Javascript debugger in VS2008&lt;br /&gt;
- Code metrics&lt;br /&gt;
- System.HashSet&lt;br /&gt;
- System.AddIns&lt;br /&gt;
&lt;br /&gt;
I &lt;a title="My Twitter" href="http://twitter.com/paulwhit"&gt;twittered&lt;/a&gt; from the event and took some pictures with &lt;a href="http://snapfoo.com/paulwhit"&gt;SnapFoo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://paulw.us/blog/uploads/9473382-1213200719102.jpg" alt="" /&gt; &lt;br /&gt;
&lt;br /&gt;
We collected Toys for the WRTV6 toy drive. I brought one of those things that you stick your hand or whatever on and it makes a 3d "image" out of the impression in pins. I have one and love it, hopefully some kid gets as excited about it as I do. Haha.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117693"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117693" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/117693.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2007/12/13/recap-of-vs2008-installfest-in-indianapolis.aspx</guid>
            <pubDate>Fri, 14 Dec 2007 02:36:01 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/117693.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2007/12/13/recap-of-vs2008-installfest-in-indianapolis.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/117693.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/117693.aspx</trackback:ping>
        </item>
        <item>
            <title>Fix for Firefox not rendering GridView columns properly</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2007/10/02/Fix-for-Firefox-not-rendering-GridView-columns-properly.aspx</link>
            <description>Doesn't seem to be super well documented, so I figured I'd regurgitate it here.

In Firefox, apparently whitespace in a table is treated as "important" by default, and prevents wrapping. To turn this off add this little CSS nugget

&lt;code&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
white-space:normal !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/code&gt;

Source:
http://www.telerik.com/community/forums/thread/b311D-ehhed.aspx&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115792"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115792" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/115792.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2007/10/02/Fix-for-Firefox-not-rendering-GridView-columns-properly.aspx</guid>
            <pubDate>Tue, 02 Oct 2007 22:02:32 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/115792.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2007/10/02/Fix-for-Firefox-not-rendering-GridView-columns-properly.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/115792.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/115792.aspx</trackback:ping>
        </item>
        <item>
            <title>Access deep object graph properties by string with LLBGen</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2007/08/20/Access-deep-object-graph-properties-by-string-with-LLBGen.aspx</link>
            <description>&lt;p&gt;PDF form and template-based emails often require accessing property values deep within an object graph. For example, in my current project the first name property of an employee is accessed via Employee.Person.FirstName.&lt;br /&gt;
&lt;br /&gt;
The following method takes an object path as a string (such as "Employee.Person.Address.Line1") and, using recursion, returns its property value no matter how deep within the graph the desired property exists.&lt;/p&gt;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;private&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;static&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; GetObjectFromPath(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; objectPath, &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;EntityBase2&lt;/font&gt;&lt;font size="2"&gt; currentEntity)&lt;br /&gt;
{&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;   string&lt;/font&gt;&lt;font size="2"&gt;[] parts = objectPath.Split(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;'.'&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;   string&lt;/font&gt;&lt;font size="2"&gt; firstPath = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;   object&lt;/font&gt;&lt;font size="2"&gt; propertyValue = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;br /&gt;
   if&lt;/font&gt;&lt;font size="2"&gt; (parts.Length &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
      firstPath = parts[0];&lt;br /&gt;
&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;br /&gt;
      PropertyInfo&lt;/font&gt;&lt;font size="2"&gt; prop = currentEntity.GetType().GetProperty(firstPath);&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;      if&lt;/font&gt;&lt;font size="2"&gt; (prop != &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt;&lt;font size="2"&gt;)&lt;br /&gt;
      {&lt;br /&gt;
         propertyValue = prop.GetValue(currentEntity, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;
      }&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;br /&gt;
      if&lt;/font&gt;&lt;font size="2"&gt; (propertyValue &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;is&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;EntityBase2&lt;/font&gt;&lt;font size="2"&gt;)&lt;br /&gt;
      {&lt;br /&gt;
         objectPath = objectPath.Replace(firstPath + &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;"."&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;""&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;         return&lt;/font&gt;&lt;font size="2"&gt; GetObjectFromPath(objectPath, propertyValue &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;as&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;EntityBase2&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;/font&gt;&lt;font size="2"&gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;   if&lt;/font&gt;&lt;font size="2"&gt; (propertyValue == &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt;&lt;font size="2"&gt;)&lt;br /&gt;
   {&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;      return&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;   return&lt;/font&gt;&lt;font size="2"&gt; propertyValue.ToString();&lt;br /&gt;
}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114798"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114798" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/114798.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2007/08/20/Access-deep-object-graph-properties-by-string-with-LLBGen.aspx</guid>
            <pubDate>Mon, 20 Aug 2007 15:22:03 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/114798.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2007/08/20/Access-deep-object-graph-properties-by-string-with-LLBGen.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/114798.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/114798.aspx</trackback:ping>
        </item>
        <item>
            <title>Social content in context with Google Reader's "Next" bookmarklet</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2007/08/13/Social-content-in-context-with-Google-Readers-Next-bookmarklet.aspx</link>
            <description>&lt;!-- s9ymdb:15 --&gt;
&lt;p&gt;&lt;img style="BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BORDER-LEFT-WIDTH: 1px; BORDER-LEFT-COLOR: black; FLOAT: right; BORDER-BOTTOM-WIDTH: 1px; BORDER-BOTTOM-COLOR: black; MARGIN: 15px; BORDER-TOP-COLOR: black; BORDER-RIGHT-WIDTH: 1px; BORDER-RIGHT-COLOR: black" alt="" src="http://paulw.us/blog/uploads/delicious_googlereader.jpg" /&gt; I don't regularly use desktop or web-based RSS feed aggregators for the fact that they take the content away from its context. It usually doesn't add much, but sometimes I can gauge things like professionalism and creativity of the writer (such as is the case with &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman's blog&lt;/a&gt;--it's snappy layout reinforces its content). Besides, tech blogs usually come through with code samples all screwy, images out of whack, and a variety of other distortions. &lt;/p&gt;
&lt;p&gt;What I do enjoy about them, however, is independent of their presentation: knowing what I've read, informing me of new content, and allowing me to categorize feeds. &lt;/p&gt;
&lt;p&gt;Enter Google Reader's "Next" bookmarklet. I'll admit I glossed over the &lt;a href="http://googlereader.blogspot.com/2007/06/doing-shuffle.html"&gt;"official" blog post&lt;/a&gt; back in June, which reminded users about the feature. If I want "Next" I'll just go to the web site and hit "j", I may have thunk. But alas, it's not that at all. &lt;/p&gt;
&lt;p&gt;It's a web link that takes you to the site itself, in it's original context. Plus, it logs that you've read the post. Keep clicking the link, keep getting the next unread post in line. Plus, you can have separate links for different categories. It reminds me of a self-controlled &lt;a href="http://en.wikipedia.org/wiki/Webring"&gt;webring&lt;/a&gt; (remember those?), which is always in tune with my interests. Brilliant! &lt;/p&gt;
&lt;p&gt;Next step--Figure out how to hotkey that sucker. I can do some &lt;a href="http://ask.metafilter.com/23032/How-do-I-assign-a-hotkey-to-a-Firefox-bookmark"&gt;goofy stuff &lt;/a&gt;with the default bookmarks, but since I use the del.icio.us plugin, I'd rather keep it in there and have it hotkeyed...&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114625"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114625" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/114625.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2007/08/13/Social-content-in-context-with-Google-Readers-Next-bookmarklet.aspx</guid>
            <pubDate>Mon, 13 Aug 2007 21:14:50 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/114625.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2007/08/13/Social-content-in-context-with-Google-Readers-Next-bookmarklet.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/114625.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/114625.aspx</trackback:ping>
        </item>
        <item>
            <title>Serialize and deserialize objects as Xml using generic types in C# 2.0</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2007/07/20/114076.aspx</link>
            <description>&lt;p&gt;I've been using Object&amp;lt;&amp;gt;Xml serialization in .NET based on &lt;a href="http://www.dotnetjohn.com/articles.aspx?articleid=173"&gt;this post&lt;/a&gt; for a while. I decided to enhance it a tad bit with some generics, so I could use it more broadly. Here's what I came up with:&lt;/p&gt;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; System.Collections.Generic;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; System.Text;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; System.Xml;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; System.IO;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; System.Xml.Serialization;&lt;/font&gt;&lt;font color="#808080" size="2"&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#808080" size="2"&gt;/// &lt;/font&gt;&lt;font color="#808080" size="2"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#008000"&gt; To convert a Byte Array of Unicode values (UTF-8 encoded) to a complete String.&lt;br /&gt;
&lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;param name="characters"&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;Unicode Byte Array to be converted to String&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;returns&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;String converted from Unicode Byte Array&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt; UTF8ByteArrayToString(&lt;font color="#0000ff"&gt;byte&lt;/font&gt;[] characters)&lt;br /&gt;
{&lt;br /&gt;
&lt;font color="#2b91af"&gt;   UTF8Encoding&lt;/font&gt; encoding = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;UTF8Encoding&lt;/font&gt;();&lt;br /&gt;
&lt;font color="#0000ff"&gt;   string&lt;/font&gt; constructedString = encoding.GetString(characters);&lt;br /&gt;
&lt;font color="#0000ff"&gt;   return&lt;/font&gt; (constructedString);&lt;br /&gt;
}&lt;font color="#808080"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#808080" size="2"&gt;/// &lt;/font&gt;&lt;font color="#808080" size="2"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#008000"&gt; Converts the String to UTF8 Byte array and is used in De serialization&lt;br /&gt;
&lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;param name="pXmlString"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#2b91af"&gt;Byte&lt;/font&gt;[] StringToUTF8ByteArray(&lt;font color="#0000ff"&gt;string&lt;/font&gt; pXmlString)&lt;br /&gt;
{&lt;br /&gt;
&lt;font color="#2b91af"&gt;   UTF8Encoding&lt;/font&gt; encoding = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;UTF8Encoding&lt;/font&gt;();&lt;br /&gt;
&lt;font color="#0000ff"&gt;   byte&lt;/font&gt;[] byteArray = encoding.GetBytes(pXmlString);&lt;br /&gt;
&lt;font color="#0000ff"&gt;   return&lt;/font&gt; byteArray;&lt;br /&gt;
}&lt;font color="#808080"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#808080" size="2"&gt;/&lt;/font&gt;&lt;font color="#808080" size="2"&gt;// &amp;lt;summary&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#008000"&gt; Serialize an object into an XML string&lt;br /&gt;
&lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;typeparam name="T"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;param name="obj"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt; SerializeObject&amp;lt;T&amp;gt;(T obj)&lt;br /&gt;
{&lt;br /&gt;
&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;   try&lt;br /&gt;
&lt;/font&gt;   {&lt;br /&gt;
&lt;font color="#0000ff"&gt;      string&lt;/font&gt; xmlString = &lt;font color="#0000ff"&gt;null&lt;/font&gt;;&lt;br /&gt;
&lt;font color="#2b91af"&gt;      MemoryStream&lt;/font&gt; memoryStream = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;MemoryStream&lt;/font&gt;();&lt;br /&gt;
&lt;font color="#2b91af"&gt;      XmlSerializer&lt;/font&gt; xs = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;XmlSerializer&lt;/font&gt;(&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;(T));&lt;br /&gt;
&lt;font color="#2b91af"&gt;      XmlTextWriter&lt;/font&gt; xmlTextWriter = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;XmlTextWriter&lt;/font&gt;(memoryStream, &lt;font color="#2b91af"&gt;Encoding&lt;/font&gt;.UTF8);&lt;br /&gt;
      xs.Serialize(xmlTextWriter, obj);&lt;br /&gt;
      memoryStream = (&lt;font color="#2b91af"&gt;MemoryStream&lt;/font&gt;)xmlTextWriter.BaseStream;&lt;br /&gt;
      xmlString = UTF8ByteArrayToString(memoryStream.ToArray());&lt;font color="#0000ff"&gt;      return&lt;/font&gt; xmlString;&lt;br /&gt;
   }&lt;br /&gt;
&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;   catch&lt;br /&gt;
&lt;/font&gt;   {&lt;br /&gt;
&lt;font color="#0000ff"&gt;      return&lt;/font&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt;.Empty;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;font color="#808080"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#808080" size="2"&gt;/// &lt;/font&gt;&lt;font color="#808080" size="2"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#008000"&gt; Reconstruct an object from an XML string&lt;br /&gt;
&lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;param name="xml"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;
///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; T DeserializeObject&amp;lt;T&amp;gt;(&lt;font color="#0000ff"&gt;string&lt;/font&gt; xml)&lt;br /&gt;
{&lt;br /&gt;
&lt;font color="#2b91af"&gt;   XmlSerializer&lt;/font&gt; xs = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;XmlSerializer&lt;/font&gt;(&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;(T));&lt;br /&gt;
&lt;font color="#2b91af"&gt;   MemoryStream&lt;/font&gt; memoryStream = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;MemoryStream&lt;/font&gt;(StringToUTF8ByteArray(xml));&lt;br /&gt;
&lt;font color="#2b91af"&gt;   XmlTextWriter&lt;/font&gt; xmlTextWriter = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;XmlTextWriter&lt;/font&gt;(memoryStream, &lt;font color="#2b91af"&gt;Encoding&lt;/font&gt;.UTF8);&lt;br /&gt;
&lt;font color="#0000ff"&gt;   return&lt;/font&gt; (T)xs.Deserialize(memoryStream);&lt;br /&gt;
}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114076"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114076" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/114076.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2007/07/20/114076.aspx</guid>
            <pubDate>Fri, 20 Jul 2007 20:35:21 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/114076.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2007/07/20/114076.aspx#feedback</comments>
            <slash:comments>10</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/114076.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/114076.aspx</trackback:ping>
        </item>
        <item>
            <title>Javascript debugging in VS.NET</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2006/05/09/77726.aspx</link>
            <description>&lt;P&gt;To simply regurgitate another post from GWB here (so that I can remember it), &lt;A href="http://blogs.telerik.com/blogs/rumen_stankov/archive/2006/02/21/125.aspx"&gt;Javascript debugging is possible in Visual Studio .NET&lt;/A&gt;. In essence, it's not very good, but it's better than nothing and its integration with the common IDE keeps it familiar.&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=77726"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=77726" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/77726.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2006/05/09/77726.aspx</guid>
            <pubDate>Wed, 10 May 2006 06:48:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/77726.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2006/05/09/77726.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/77726.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/77726.aspx</trackback:ping>
        </item>
        <item>
            <title>Sort a generic list (IList) by ToString() value</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2006/05/08/77581.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;For whatever reason, Microsoft didn't provide a Sort method in IList. So it seems like sorting a generic list requires that the list be adapted to an ArrayList. Here's a class and method call that supports sorting any list&amp;nbsp;by the ToString() value of its members.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;public class ToStringComparer : IComparer&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; public int Compare(object x, object y)&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return x.ToString().CompareTo(y.ToString());&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;ArrayList.Adapter(list).Sort(new ToStringComparer());&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=77581"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=77581" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/77581.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2006/05/08/77581.aspx</guid>
            <pubDate>Tue, 09 May 2006 02:27:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/77581.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2006/05/08/77581.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/77581.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/77581.aspx</trackback:ping>
        </item>
        <item>
            <title>Using msbuild to change App.config and Web.config files</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2006/04/11/74844.aspx</link>
            <description>&lt;P&gt;Using the msbuild community tasks project it becomes easy to change App.config and Web.config files as part of the build process. I've recently implemented a&amp;nbsp;build script for a smart client application that allows building&amp;nbsp;in multiple locations connecting to different application servers.&lt;/P&gt;
&lt;P&gt;First, download the msbuild community tasks project. You can get this from subversion using the following command:&lt;/P&gt;
&lt;P&gt;svn checkout &lt;A href="http://msbuildtasks.tigris.org/svn/msbuildtasks/trunk"&gt;http://msbuildtasks.tigris.org/svn/msbuildtasks/trunk&lt;/A&gt; msbuildtasks --username guest&lt;/P&gt;
&lt;P&gt;Check the project out, build it and transfer the library and the .targets file to the desired directory. You can then import all of the tasks and start using the XmlUpdate task.&lt;/P&gt;
&lt;P&gt;In order to work with App.config and Web.config you must add the appropriate namespace and reference the nodes in the xpath based on a custom-defined prefix. Here is a sample of this task in action:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;Import Project=".\MSBuild.Community.Tasks.Targets"/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;Target Name="UpdateConfigs" DependsOnTargets="GetVersion"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;XmlUpdate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Namespace="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/.NetConfiguration/v2.0"&gt;&lt;FONT face="Courier New" size=2&gt;http://schemas.microsoft.com/.NetConfiguration/v2.0&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlFileName="$(SourceDir)\Core\ABSuite\ABClient\App.config"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Xpath="//configuration/appSettings/add[@key='Main.ConnectionString']/@value"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value="$(DatabaseConnectionString)"&lt;BR&gt;&amp;nbsp;&amp;nbsp;/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;XmlUpdate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Namespace="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/.NetConfiguration/v2.0"&gt;&lt;FONT face="Courier New" size=2&gt;http://schemas.microsoft.com/.NetConfiguration/v2.0&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlFileName="$(SourceDir)\Core\ABSuite\ABClient\App.config"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Xpath="//configuration/appSettings/add[@key='Main.WebServer']/@value"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value="$(AppServiceServer)$(AppServiceVirtualDir)/"&lt;BR&gt;&amp;nbsp;&amp;nbsp;/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;XmlUpdate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Namespace="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/.NetConfiguration/v2.0"&gt;&lt;FONT face="Courier New" size=2&gt;http://schemas.microsoft.com/.NetConfiguration/v2.0&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlFileName="$(SourceDir)\Core\ABSuite\GenesisAppServer\WebService\Web.config"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Xpath="//configuration/appSettings/add[@key='Main.ConnectionString']/@value"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value="$(DatabaseConnectionString)"&lt;BR&gt;&amp;nbsp;&amp;nbsp;/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;XmlUpdate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Namespace="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/.NetConfiguration/v2.0"&gt;&lt;FONT face="Courier New" size=2&gt;http://schemas.microsoft.com/.NetConfiguration/v2.0&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlFileName="$(SourceDir)\Core\ABSuite\GenesisAppServer\WebService\Web.config"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Xpath="//configuration/appSettings/add[@key='CatalogNameToUse']/@value"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value="$(DatabaseName)"&lt;BR&gt;&amp;nbsp;&amp;nbsp;/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;XmlUpdate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Prefix="n"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Namespace="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/.NetConfiguration/v2.0"&gt;&lt;FONT face="Courier New" size=2&gt;http://schemas.microsoft.com/.NetConfiguration/v2.0&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlFileName="$(SourceDir)\Core\ABSuite\GenesisAppServer\WebService\Web.config"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Xpath="//n:configuration/n:appSettings/n:add[@key='Server.Version']/@value"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value="$(Major).$(Minor).$(Build).$(Revision)"&lt;BR&gt;&amp;nbsp;&amp;nbsp;/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;XmlUpdate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Prefix="n"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Namespace="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/developer/msbuild/2003"&gt;&lt;FONT face="Courier New" size=2&gt;http://schemas.microsoft.com/developer/msbuild/2003&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlFileName="$(SourceDir)\Core\ABSuite\ABClient\ABClient.csproj"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Xpath="/n:Project/n:PropertyGroup/n:PublishUrl"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value="$(ClickOnceServer)$(ClickOnceVirtualDir)/"&lt;BR&gt;&amp;nbsp;&amp;nbsp;/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;XmlUpdate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Prefix="n"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Namespace="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/developer/msbuild/2003"&gt;&lt;FONT face="Courier New" size=2&gt;http://schemas.microsoft.com/developer/msbuild/2003&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlFileName="$(SourceDir)\Core\ABSuite\ABClient\ABClient.csproj"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Xpath="/n:Project/n:PropertyGroup/n:BootstrapperComponentsUrl"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value="$(ClickOnceServer)$(ClickOnceVirtualDir)/"&lt;BR&gt;&amp;nbsp;&amp;nbsp;/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;XmlUpdate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Prefix="n"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Namespace="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/developer/msbuild/2003"&gt;&lt;FONT face="Courier New" size=2&gt;http://schemas.microsoft.com/developer/msbuild/2003&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt;"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlFileName="$(SourceDir)\Core\ABSuite\ABClient\ABClient.csproj"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Xpath="/n:Project/n:PropertyGroup/n:ApplicationVersion"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value="$(Major).$(Minor).$(Build).$(Revision)"&lt;BR&gt;&amp;nbsp;&amp;nbsp;/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;lt;/Target&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=74844"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=74844" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/74844.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2006/04/11/74844.aspx</guid>
            <pubDate>Wed, 12 Apr 2006 02:28:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/74844.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2006/04/11/74844.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/74844.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/74844.aspx</trackback:ping>
        </item>
        <item>
            <title>TableLayoutPanel positioning and controlcell relationships</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2006/03/02/71182.aspx</link>
            <description>&lt;P&gt;I've been working with the Windows Forms 2.0 TableLayoutPanel, have run into some stumbling blocks, and was hoping somebody can help.&lt;/P&gt;
&lt;P&gt;1) There doesn't appear to be a way to equate controls with their cell position. I have a need to determine where &amp;#8220;this.txtFirstName&amp;#8221; is in the row 3, cell 4 position. &lt;/P&gt;
&lt;P&gt;2) There doesn't appear to be a way to get the location of a cell, short of calculating the offset, which I've done. &lt;/P&gt;
&lt;P&gt;Is there some way to dig into the panel, maybe using reflection or something, to get the internal relationship between cells and controls, and the cell locations?&lt;/P&gt;
&lt;P&gt;Thanks in advance!&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=71182"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=71182" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/71182.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2006/03/02/71182.aspx</guid>
            <pubDate>Thu, 02 Mar 2006 22:59:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/71182.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2006/03/02/71182.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/71182.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/71182.aspx</trackback:ping>
        </item>
        <item>
            <title>Code snippet for event handler</title>
            <link>http://geekswithblogs.net/paulwhitblog/archive/2006/01/27/67277.aspx</link>
            <description>&lt;FONT color=#0000ff&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000000&gt;&lt;FONT size=2&gt;Code snippets are pretty neat. Here's&amp;nbsp;the first one I've&amp;nbsp;created. It&amp;nbsp;sets up a custom event and a handling routine. To use it, you'll need to &lt;/FONT&gt;&lt;A href="http://paulw.us/eh.snippet"&gt;&lt;FONT size=2&gt;download the .snippet file&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; because uploading the code into the blog proved to be too much of a pain.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000000 size=2&gt;You can import the snippet with Tools-&amp;gt;Manage Code snippets, or just put the file in C:\Program Files\Microsoft Visual Studio 8\VC#\Snippets\1033\Visual C#&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=67277"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=67277" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulwhitblog/aggbug/67277.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Whitaker</dc:creator>
            <guid>http://geekswithblogs.net/paulwhitblog/archive/2006/01/27/67277.aspx</guid>
            <pubDate>Fri, 27 Jan 2006 23:44:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulwhitblog/comments/67277.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulwhitblog/archive/2006/01/27/67277.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulwhitblog/comments/commentRss/67277.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulwhitblog/services/trackbacks/67277.aspx</trackback:ping>
        </item>
    </channel>
</rss>