<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Spontaneous Publicity</title>
    <description>blogs are the new phone book</description>
    <link>http://blog.spontaneouspublicity.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.13</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://blog.spontaneouspublicity.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Luke Foust</dc:creator>
    <dc:title>Spontaneous Publicity</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <geo:lat>47.677471</geo:lat><geo:long>-122.121383</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/lfoust" type="application/rss+xml" /><feedburner:emailServiceId>lfoust</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
      <title>For The Kids</title>
      <description>&lt;p&gt;The things you do for your kids:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="48" alt="image" src="http://blog.spontaneouspublicity.com/BlogImages/ForTheKids_14371/image.png" width="279" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;I put this song in a playlist we play to help our 8 month old sleep. Now the play count is embarrassingly high. I am very tempted to use the reset play count feature of iTunes to cover my tracks…&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/JQtAVQrdRTU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/JQtAVQrdRTU/post.aspx</link>
      <author>luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2009/04/14/For-The-Kids.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=21d397c7-1a71-457b-9922-b193c3ea6636</guid>
      <pubDate>Tue, 14 Apr 2009 00:01:49 -0600</pubDate>
      <dc:publisher>luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=21d397c7-1a71-457b-9922-b193c3ea6636</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=21d397c7-1a71-457b-9922-b193c3ea6636</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2009/04/14/For-The-Kids.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=21d397c7-1a71-457b-9922-b193c3ea6636</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=21d397c7-1a71-457b-9922-b193c3ea6636</feedburner:origLink></item>
    <item>
      <title>Code I Almost Wrote</title>
      <description>&lt;p&gt;The only thing scarier than the code I actually write is the code I thought of and decided not to write. Actually, that is not true. The code I write is always perfect. Until I decide to change it later and make it more perfect.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spontaneouspublicity.com/BlogImages/CodeIAlmostWrote_9EB1/duh.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="duh" border="0" alt="duh" align="right" src="http://blog.spontaneouspublicity.com/BlogImages/CodeIAlmostWrote_9EB1/duh_thumb.png" width="240" height="88" /&gt;&lt;/a&gt; Today I was writing a small console app which I wanted to run indefinitely until the user decides they would like to close it. This posed quite a challenge. Should I stop every 1000 iterations and check if the user has indicated they would like to stop processing? Should this be a windows app so I can have a stop button?&lt;/p&gt;  &lt;p&gt;No, I should just run indefinitely and if they user wants the program to terminate, they will&lt;strong&gt; close the console window&lt;/strong&gt;. So simple. My mind really wanted to complicate this one.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/23rE8QaUL_I" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/23rE8QaUL_I/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2009/01/23/Code-I-Almost-Wrote.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=f601d96f-73a1-496d-b966-7177b92c4f0a</guid>
      <pubDate>Fri, 23 Jan 2009 12:17:02 -0600</pubDate>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=f601d96f-73a1-496d-b966-7177b92c4f0a</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=f601d96f-73a1-496d-b966-7177b92c4f0a</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2009/01/23/Code-I-Almost-Wrote.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=f601d96f-73a1-496d-b966-7177b92c4f0a</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=f601d96f-73a1-496d-b966-7177b92c4f0a</feedburner:origLink></item>
    <item>
      <title>Microsoft Year One</title>
      <description>&lt;p&gt;I can’t believe it but as of today I have already been at Microsoft for a whole year.&lt;img title="windowsvswalls" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="151" alt="windowsvswalls" src="http://blog.spontaneouspublicity.com/image.axd?picture=WindowsLiveWriter/MicrosoftYearOne_619C/windowsvswalls_3.jpg" width="240" align="right" border="0" /&gt; It really has been a great year. Moving up to Washington from San Diego happened so fast my head was spinning for the first couple of months. Now that we feel more settled we really like it up here.&lt;/p&gt;  &lt;h2&gt;What I Have Worked On&lt;/h2&gt;  &lt;p&gt;I work on a team called the Windows Reliability Team. I have actually had the opportunity to work on two different features this past year. I started out working on a testing framework which was really challenging and interesting. It was a great introduction to Microsoft and to the Windows organization because it allowed me to interact with different teams and different technologies. When I joined the Windows team I wasn’t sure how much C# (or any managed code) I would get to use. Windows is, however, still mainly a native code product. And that is the way it should be. It is an operating system. But on the test side of things it is much more common for developers to be using .Net. In fact, I sometimes find myself being sort of an evangelist for .Net and C# within the team which is interesting. I never I thought I would join Microsoft only to teach them about their own technology. But then again with a company with such a wide array of products it is impossible for everybody to know them all.&lt;/p&gt;  &lt;p&gt;The other feature I have been working on for the last 6 months or so is called Windows Reliability Component (RAC). It is a new feature in Vista which monitors the reliability of your machine. In fact, if you run the reliability monitor (another feature owned by my team) it displays data produced by RAC. We are working on some great new features for Windows 7 and I can’t wait until the PDC when people actually get to see some of our work.&lt;/p&gt;  &lt;h2&gt;What I Have Learned&lt;/h2&gt;  &lt;p&gt;Microsoft is a huge company. The opportunities here are immense. The trick is finding something that you are passionate about and pursuing that. Right now, I feel like I am just starting that journey. I have been a developer for almost 10 years and working at Microsoft has shown me that there is so much ahead of me in my career. There are real problems to be solved. Interesting technologies to contribute to.&lt;/p&gt;  &lt;p&gt;So have I found my passion at Microsoft? I would say I am still looking. Windows Reliability is a great place for me to be right now. There is so much to learn and there are some great people on my team to learn from. I have often asked myself if I could work on anything I wanted to what would it be. Unfortunately I don’t have a great answer for that. So I am going to continue to search for that answer. And when I find it I will let you know.&lt;/p&gt;  &lt;h3&gt;Agile Windows&lt;/h3&gt;  &lt;p&gt;It has been interesting to follow the rise of the Alt.Net movement and the popularization of more Agile techniques in the .Net community. It is especially interesting when you look at the principles of Agile and wonder if they could ever scale to the point of a project like Windows. The way that Windows is engineered is nothing short of amazing. Although I think there is a lot an organization like Windows can learn from the Agile community, I don’t think Windows will be jumping on the Agile bandwagon any time soon. But within the small feature teams, like the one I work on, there is a lot of opportunity to apply TDD and continuous integration.&lt;/p&gt;  &lt;h2&gt;What I Am Looking Forward To&lt;/h2&gt;  &lt;p&gt;I am very grateful for the opportunity to work on a product like Windows which is literally used by about a billion people. I can’t wait to get feedback on Windows 7. Internally we have been using it for a while and we love it. Hopefully you will too. I look forward to experiencing everything that goes along with the release of a product like Windows.&lt;/p&gt;  &lt;p&gt;Mostly, I am looking forward to all that I know is in store for me at Microsoft. I feel like I have barely had time to scratch the surface of all that Microsoft is about. Probably the best advice I have received since I have been at Microsoft has been this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Your career at Microsoft is more of a marathon than it is a sprint.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I think of this advice whenever I wonder if I have accomplished enough during my first year. Have I made my mark? No. But I plan on it.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/1DKgmMGMRqg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/1DKgmMGMRqg/post.aspx</link>
      <author>luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/10/22/Microsoft-Year-One.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=9e080892-0ce9-4079-8ec1-0e72ebf8e060</guid>
      <pubDate>Wed, 22 Oct 2008 21:51:16 -0600</pubDate>
      <category>Development</category>
      <category>Personal</category>
      <dc:publisher>luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=9e080892-0ce9-4079-8ec1-0e72ebf8e060</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=9e080892-0ce9-4079-8ec1-0e72ebf8e060</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/10/22/Microsoft-Year-One.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=9e080892-0ce9-4079-8ec1-0e72ebf8e060</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=9e080892-0ce9-4079-8ec1-0e72ebf8e060</feedburner:origLink></item>
    <item>
      <title>Paparazzi For Nerds</title>
      <description>&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="85" alt="Microspotting" src="http://blog.spontaneouspublicity.com/image.axd?picture=WindowsLiveWriter/PaparazziForNerds_11B4E/image_3.png" width="77" align="right" border="0" /&gt; Being a relatively new employee at Microsoft, I have really enjoyed getting to know the culture and the wide array of people that work for Microsoft. To that end, I really enjoy the web site &lt;a href="http://www.microspotting.com/" target="_blank"&gt;Microspotting&lt;/a&gt; which chronicles some of these interesting people. I was hooked as soon as I saw &lt;a href="http://www.microspotting.com/2007/11/the-golden-helmet" target="_blank"&gt;Golden Helmet&lt;/a&gt; and got a good laugh out of the &lt;a href="http://www.microspotting.com/2008/05/jeff-lin-harvey-danger" target="_blank"&gt;Program Managa&lt;/a&gt;. Now I have to go figure out what kind of off beat thing I can do to become featured next...&lt;/p&gt;  &lt;p&gt;BTW: I would live a &lt;a href="http://www.microspotting.com/2008/06/microspotting-tshirts" target="_blank"&gt;free t-shirt&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/0mkaQ1RxlKw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/0mkaQ1RxlKw/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/06/19/Paparazzi-For-Nerds.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=84c7e62d-449e-41ac-8f06-c5c7abebb9ca</guid>
      <pubDate>Thu, 19 Jun 2008 00:14:39 -0600</pubDate>
      <category>Funny</category>
      <category>Microsoft</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=84c7e62d-449e-41ac-8f06-c5c7abebb9ca</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=84c7e62d-449e-41ac-8f06-c5c7abebb9ca</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/06/19/Paparazzi-For-Nerds.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=84c7e62d-449e-41ac-8f06-c5c7abebb9ca</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=84c7e62d-449e-41ac-8f06-c5c7abebb9ca</feedburner:origLink></item>
    <item>
      <title>Hidden Gem in .net 3.5 SP1 Announcement</title>
      <description>&lt;p&gt;There is some great stuff hidden in &lt;a href="http://blogs.msdn.com/tims/archive/2008/05/12/introducing-the-third-major-release-of-windows-presentation-foundation.aspx" target="_blank"&gt;Time Sneath’s post&lt;/a&gt; announcing the WPF aspects of the .net 3.5 SPI release:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;It's been a long time in coming, but we're finally adding the much-requested DataGrid control to WPF. This will ship out-of-band at first, just after we release 3.5 SP1…  &lt;p&gt;...Another oft-requested control is the Office Ribbon, and I'm sure you'll be pleased to know that we're also shipping an implementation of that control, also out-of-band, before the end of the year. The ribbon will be fully implemented in WPF,&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So there you have it, there is a DataGrid and a Ribbon control coming to WPF! This is really cool. Something else that is really great is it appears that the WPF team is starting to adopt the “out of band” release model that other developer tools such as &lt;a href="http://asp.net/mvc/" target="_blank"&gt;Asp.net MVC&lt;/a&gt; are using. I think this is a huge step forward in terms of integrating customer feedback into their products.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/lYizK3Ab44k" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/lYizK3Ab44k/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/05/12/Hidden-Gem-in-net-35-SP1-Announcement.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=20a55fac-c598-46df-aef4-b0df0cb570fa</guid>
      <pubDate>Mon, 12 May 2008 15:38:36 -0600</pubDate>
      <category>.Net</category>
      <category>C#</category>
      <category>WPF</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=20a55fac-c598-46df-aef4-b0df0cb570fa</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=20a55fac-c598-46df-aef4-b0df0cb570fa</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/05/12/Hidden-Gem-in-net-35-SP1-Announcement.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=20a55fac-c598-46df-aef4-b0df0cb570fa</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=20a55fac-c598-46df-aef4-b0df0cb570fa</feedburner:origLink></item>
    <item>
      <title>Vote to Improve Sql Management Studio</title>
      <description>&lt;p&gt;I rarely write feedback to product teams but today I decided that I have had enough of this Identity Specification nonsense. How often do you create tables in Sql Management Studio which have some sort of identity column which is a primary key and an auto incrementing integer. Unless I am way off base, this is probably the most common scenario when creating a new table. So why does it take so many clicks? I have to click the Primary Key button to make the column a primary key and then scroll down in the Column Properties pane and find "Identity Specification" and expand it to change the value of "Is Identity" to "Yes".&amp;nbsp; That is just way too many clicks and scrolls for me.  &lt;p&gt;So I have submitted a suggestion on Microsoft connect:  &lt;p&gt;&lt;a href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=340996"&gt;https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=340996&lt;/a&gt; &lt;p&gt;Vote for it if you agree. If you don’t agree, let me know why.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/GTwV5sZOB6M" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/GTwV5sZOB6M/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/04/29/Vote-to-Improve-Sql-Management-Studio.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=ac2ba3ea-a087-4449-bd26-f207deec154d</guid>
      <pubDate>Tue, 29 Apr 2008 12:49:24 -0600</pubDate>
      <category>Development</category>
      <category>Development</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=ac2ba3ea-a087-4449-bd26-f207deec154d</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=ac2ba3ea-a087-4449-bd26-f207deec154d</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/04/29/Vote-to-Improve-Sql-Management-Studio.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=ac2ba3ea-a087-4449-bd26-f207deec154d</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=ac2ba3ea-a087-4449-bd26-f207deec154d</feedburner:origLink></item>
    <item>
      <title>SubSonic BlogProvider for BlogEngine.net</title>
      <description>&lt;p&gt;One of the things I love about &lt;a href="http://www.dotnetblogengine.net/" target="_blank"&gt;BlogEngine.net&lt;/a&gt; is that it is built with extensibility in mind. On example of this extensibility is the ability to customize the provider which it uses to retrieve and persist posts, pages, categories, etc.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spontaneouspublicity.com/image.axd?picture=WindowsLiveWriter/SubSonicBlogProviderforBlogEngine.net_14637/xmltodatabase_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="50" alt="xmltodatabase" src="http://blog.spontaneouspublicity.com/image.axd?picture=WindowsLiveWriter/SubSonicBlogProviderforBlogEngine.net_14637/xmltodatabase_thumb.png" width="100" align="right" border="0" /&gt;&lt;/a&gt; Currently there are two providers that are supported out of the box: The XmlProvider and the &lt;a href="http://www.dotnetblogengine.net/wiki/SQLServerBlogProvider.ashx" target="_blank"&gt;MSSQLProvider&lt;/a&gt;. After I moved my blog from wordpress.com to BlogEngine.net, I decided I wanted to store my posts and such in a database rather than in xml files. So I set out to get the MSSQLProvider up and running. There is not, however, any established way to convert all of your content from the XmlProvider to the MSSQLProvider. So I first attempted to create my own quick little script to select the content from one provider and insert it using the other. But this didn't work. I ran into connection management problems within the MSSQLProvider code.&lt;/p&gt;  &lt;h3&gt;SubSonic to the Rescue&lt;/h3&gt;  &lt;p&gt;Then it dawned on me: what I really wanted was an easy to use data access layer to access the Sql Server tables which I wanted to store my blog content in. Well, since I was planning on using the schema which ships with BlogEngine.net, I already had the schema created. This is the kind of thing that &lt;a href="http://subsonicproject.com/" target="_blank"&gt;SubSonic&lt;/a&gt; is great at - generating an easy to use data access layer given a database schema.&lt;/p&gt;  &lt;p&gt;Subsonic ships with a console application called Sonic.exe which can be used to generate the data access classes. Since the database schema in this case is fairly static, I figured I could just generate the classes once and not worry about using a BuildProvider or anything fancy like that. So, here is the command line I used to generate the classes:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;sonic generate /override /server HOMIE /db BlogEngine 
/userid OMMITED /password OMMITED /out C:\code\out 
/generatedNamespace BlogEngine.Core.Providers.SubSonic /stripTableText be_&lt;/pre&gt;

&lt;p&gt;I used the stripTableText option to replace take out the 'be_' prefix from each table which is present in the Sql schema. This results in classes which are named 'Post' and 'Page' rather than 'BePost' and 'BePage'.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="413" alt="ssconvert" src="http://blog.spontaneouspublicity.com/image.axd?picture=WindowsLiveWriter/SubSonicBlogProviderforBlogEngine.net_14637/ssconvert_3.png" width="459" border="0" /&gt; &lt;/p&gt;

&lt;p&gt;Now that I had my data access layer, it was time to write the BlogProvider.&lt;/p&gt;

&lt;h3&gt;All Your Provider Are Belong To Us&lt;/h3&gt;

&lt;p&gt;Implementing the provider was pretty straight forward. There isn't really documentation I can find about exactly how the provider should behave so I based my code of the MSSQLProvider. I will not really go over the code too much here because there is not all that much to it. Mostly, it is a matter of mapping the SubSonic generated data access objects to the BlogEngine.net types like this:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Post GetPost(SubSonicPost p)
{
    Post post = &lt;span class="kwrd"&gt;new&lt;/span&gt; Post();
    post.Id = p.PostID;
    post.Title = p.Title;
    post.Content = p.PostContent;
    post.Description = p.Description;
    post.DateCreated = p.DateCreated ?? DateTime.MinValue;
    post.DateModified = p.DateModified ?? DateTime.MinValue;
    post.Author = p.Author;
    post.IsPublished = p.IsPublished ?? &lt;span class="kwrd"&gt;false&lt;/span&gt;; ;
    post.IsCommentsEnabled = p.IsCommentEnabled ?? &lt;span class="kwrd"&gt;false&lt;/span&gt;;
    post.Raters = p.Raters ?? 0;
    post.Rating = p.Rating ?? 0;
    post.Slug = p.Slug;
    
    &lt;span class="kwrd"&gt;return&lt;/span&gt; post;
}&lt;/pre&gt;

&lt;p&gt;&lt;font face="Lucida Sans Unicode"&gt;Pretty boring and repetitive code.&lt;/font&gt;&lt;/p&gt;

&lt;h3&gt;Configuration&lt;/h3&gt;

&lt;p&gt;In order to configure your site to use this provider you must first configure it for SubSonic and then add the SubSonic provider. First, add the SubSonic config section to your confSections in your web.config:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SubSonicService&amp;quot;&lt;/span&gt;
   &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SubSonic.SubSonicSection, SubSonic&amp;quot;&lt;/span&gt;
   &lt;span class="attr"&gt;requirePermission&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;
   &lt;span class="attr"&gt;allowDefinition&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;MachineToApplication&amp;quot;&lt;/span&gt;
   &lt;span class="attr"&gt;restartOnExternalChanges&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;And here is the SubSonic section:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SubSonicService&lt;/span&gt; &lt;span class="attr"&gt;defaultProvider&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Default&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clear&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Default&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SubSonic.SqlDataProvider, SubSonic&amp;quot;&lt;/span&gt; 
         &lt;span class="attr"&gt;connectionStringName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;BlogEngine&amp;quot;&lt;/span&gt;
         &lt;span class="attr"&gt;generatedNamespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;BlogEngine.Core.Providers.SubSonic&amp;quot;&lt;/span&gt;
         &lt;span class="attr"&gt;enableTrace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SubSonicService&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Lastly, you can edit the blogProvider section:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;BlogEngine&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;blogProvider&lt;/span&gt; &lt;span class="attr"&gt;defaultProvider&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SubSonicProvider&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;XmlBlogProvider&amp;quot;&lt;/span&gt;
       &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;BlogEngine.Core.Providers.XmlBlogProvider, BlogEngine.Core&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;MSSQLBlogProvider&amp;quot;&lt;/span&gt;
       &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;BlogEngine.Core.Providers.MSSQLBlogProvider, BlogEngine.Core&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SubSonicProvider&amp;quot;&lt;/span&gt;
       &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;BlogEngine.Core.Providers.SubSonicProvider, BlogEngine.Core.Providers.SubSonic&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;blogProvider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;BlogEngine&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3&gt;One Gotcha&lt;/h3&gt;

&lt;p&gt;The one problem I ran into was that SubSonic doesn't appear to run in a medium trust environments because it uses Tracing calls which require elevated trust. This does not mix well with BlogEngine.net and running in a medium trust environment. To get around this I commented out the tracing calls from the SubSonic source code and recompiled the SubSonic.dll. This is just a workaround until I find a permanent fix. You can read &lt;a href="http://forums.subsonicproject.com/forums/p/1250/12284.aspx#12284" target="_blank"&gt;this forum post&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;So that's it. Here is the code. Feel free to give me any feedback or questions you have.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.spontaneouspublicity.com/Downloads/BlogEngine.Core.Providers.SubSonic.zip"&gt;BlogEngine.Core.Providers.SubSonic.zip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: The problem with medium trust and SubSonic has since been fixed so I will remove the SubSonic.dll from this site and just send you to the &lt;a href="http://subsonicproject.com/getting-at-the-subsonic-svn-subversion-repository/" target="_blank"&gt;SubSonic site for download&lt;/a&gt;.&lt;/p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.spontaneouspublicity.com%2fpost%2f2008%2f03%2fSubSonic-BlogProvider-for-BlogEnginenet.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.spontaneouspublicity.com%2fpost%2f2008%2f03%2fSubSonic-BlogProvider-for-BlogEnginenet.aspx" border="0" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/SxAK4-xwi20" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/SxAK4-xwi20/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/03/28/SubSonic-BlogProvider-for-BlogEnginenet.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=34e63c53-d9ec-482c-87d7-b18e7d9bb7d4</guid>
      <pubDate>Fri, 28 Mar 2008 03:06:56 -0600</pubDate>
      <category>.Net</category>
      <category>BlogEngine.net</category>
      <category>C#</category>
      <category>Development</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=34e63c53-d9ec-482c-87d7-b18e7d9bb7d4</pingback:target>
      <slash:comments>23</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=34e63c53-d9ec-482c-87d7-b18e7d9bb7d4</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/03/28/SubSonic-BlogProvider-for-BlogEnginenet.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=34e63c53-d9ec-482c-87d7-b18e7d9bb7d4</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=34e63c53-d9ec-482c-87d7-b18e7d9bb7d4</feedburner:origLink></item>
    <item>
      <title>Dotnetkicks Penance</title>
      <description>&lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 10px; border-right-width: 0px" height="238" alt="penance" src="http://blog.spontaneouspublicity.com/image.axd?picture=WindowsLiveWriter/DotnetkicksPenance_CF76/penance_3.png" width="240" align="right" border="0"&gt; I am a big fan of &lt;a href="http://www.dotnetkicks.com/" target="_blank"&gt;Dotnetkicks&lt;/a&gt;. I have found several interesting articles written by mostly lesser known authors (like myself) on that site. I have also received the benefits (more traffic) of getting some of my articles on the front page. As has been &lt;a href="http://devblog.ailon.org/devblog/post/2008/02/The-DotNetKicks-Effect---Enjoy-While-it-Lasts.aspx" target="_blank"&gt;discussed previously&lt;/a&gt;, the “&lt;a href="http://www.frickinsweet.com/ryanlanciaux.com/post/The-DotNetKicks-Effect.aspx" target="_blank"&gt;Dotnetkicks Effect&lt;/a&gt;” is very unpredictable due to the fact that there aren’t many people who regularly read the “&lt;a href="http://www.dotnetkicks.com/upcoming" target="_blank"&gt;Upcoming&lt;/a&gt;” section of the site. As a result, you can never really know if articles you submit to Dotnetkicks will get many views because there are so many different factors that contribute to your article being popular.&lt;/p&gt; &lt;p&gt;Sometimes this feeling of guilt comes over me. A little voice in my head says: “Why haven’t you visited the upcoming section of Dotnetkicks.com lately and given some kick love to your fellow unknown bloggers?” So I dutifully visit the site and read through the first 3 pages of upcoming articles to see if anything seems kick-worthy. I call this Dotnetkicks penance. Does anybody else do this? Could this possibly be the mystery contributing factor that keeps the steady flow of articles from the upcoming page to the front page? I imagine if my fellow guilty bloggers unite we could keep the signal to noise ratio on the front page at a healthy level.&lt;/p&gt; &lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.spontaneouspublicity.com%2fpost%2f2008%2f03%2fDotnetkicks-Penance.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.spontaneouspublicity.com%2fpost%2f2008%2f03%2fDotnetkicks-Penance.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/yGt3nHoiCX4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/yGt3nHoiCX4/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/03/26/Dotnetkicks-Penance.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=1eae818d-21b6-40fa-8acf-7c4b175e3ccf</guid>
      <pubDate>Wed, 26 Mar 2008 20:45:10 -0600</pubDate>
      <category>Development</category>
      <category>Personal</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=1eae818d-21b6-40fa-8acf-7c4b175e3ccf</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=1eae818d-21b6-40fa-8acf-7c4b175e3ccf</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/03/26/Dotnetkicks-Penance.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=1eae818d-21b6-40fa-8acf-7c4b175e3ccf</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=1eae818d-21b6-40fa-8acf-7c4b175e3ccf</feedburner:origLink></item>
    <item>
      <title>Some of My Favorite Extension Methods</title>
      <description>&lt;p&gt;There has been &lt;a href="http://james.newtonking.com/archive/2008/02/03/why-i-changed-my-mine-about-extension-methods.aspx" target="_blank"&gt;some discussion&lt;/a&gt; about &lt;a href="http://codebetter.com/blogs/gregyoung/archive/2007/11/19/extension-method-best-practices.aspx" target="_blank"&gt;extension methods&lt;/a&gt; and &lt;a href="http://www.vitalygorn.com/blog/post/2008/01/Extension-Methods---Extension-or-Confusion.aspx" target="_blank"&gt;how they should be used&lt;/a&gt; and when. Personally, I try to use them when it will increase the readability of my code. A common candidate for extension methods is the static helper method. These mostly take the form of something like:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; StringHelper
{
     &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Truncate(&lt;span class="kwrd"&gt;string&lt;/span&gt; s, &lt;span class="kwrd"&gt;int&lt;/span&gt; maxLength);
}&lt;/pre&gt;
&lt;p&gt;And is usually consumed with something like:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; newString = StringHelper.Truncate(myString, 10);&lt;/pre&gt;
&lt;p&gt;Now, this isn't too bad, but with extension methods, the signature for this method now looks like:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Truncate(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; s, &lt;span class="kwrd"&gt;int&lt;/span&gt; maxLength)&lt;/pre&gt;
&lt;p&gt;and is used with syntax like the following:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; newString = myString.Truncate(10);&lt;/pre&gt;
&lt;p&gt;So I hope you agree that this improves readability and understanding. And it also prevents you from sprinkling "MyHelperClass.MyMethod" calls everywhere&lt;/p&gt;
&lt;p&gt;I thought I would share some of the extension methods that I am finding invaluable.&lt;/p&gt;
&lt;h3&gt;RenderControl&lt;/h3&gt;
&lt;p&gt;This method allows you to take and WebControl and render it as a string. This is very useful for html code generation. The method signature for the helper method is:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; RenderControl(WebControl control);&lt;/pre&gt;
&lt;p&gt;Since the syntax to use extension methods is slightly different than static methods, I decided to rename this method to RenderAsString:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; RenderAsString(&lt;span class="kwrd"&gt;this&lt;/span&gt; WebControl control)
{
    StringBuilder sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();
    &lt;span class="kwrd"&gt;using&lt;/span&gt; (StringWriter sw = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringWriter(sb))
    {
        &lt;span class="kwrd"&gt;using&lt;/span&gt; (HtmlTextWriter tw = &lt;span class="kwrd"&gt;new&lt;/span&gt; HtmlTextWriter(sw))
        {
            control.RenderControl(tw);
            &lt;span class="kwrd"&gt;return&lt;/span&gt; sb.ToString();
        }
    }
}&lt;/pre&gt;
&lt;h3&gt;GetTableCell&lt;/h3&gt;
&lt;p&gt;This method has many overloads so you can get all of them in the attached download. I will just show one here:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Add(&lt;span class="kwrd"&gt;this&lt;/span&gt; TableCellCollection cells,
                       &lt;span class="kwrd"&gt;string&lt;/span&gt; text, &lt;span class="kwrd"&gt;string&lt;/span&gt; cssClass, &lt;span class="kwrd"&gt;int&lt;/span&gt;? columnSpan)
{
    TableCell cell = &lt;span class="kwrd"&gt;new&lt;/span&gt; TableCell();
    cell.Text = text;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(cssClass))
        cell.CssClass = cssClass;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (columnSpan.HasValue)
        cell.ColumnSpan = columnSpan.Value;
    cells.Add(cell);
}&lt;/pre&gt;
&lt;p&gt;The Syntax for using this is something like:&lt;/p&gt;&lt;pre class="csharpcode"&gt;Table table = &lt;span class="kwrd"&gt;new&lt;/span&gt; Table();
TableRow tr = &lt;span class="kwrd"&gt;new&lt;/span&gt; TableRow();
tr.Cells.Add(&lt;span class="str"&gt;"My Cell"&lt;/span&gt;, &lt;span class="str"&gt;"MyCssClass"&lt;/span&gt;, 2);&lt;/pre&gt;
&lt;p&gt;Which is much better than:&lt;/p&gt;&lt;pre class="csharpcode"&gt;tr.Cells.Add(HtmlHelper.GetTableCell(&lt;span class="str"&gt;"My Cell"&lt;/span&gt;, &lt;span class="str"&gt;"MyCssClass"&lt;/span&gt;, 2));&lt;/pre&gt;
&lt;p&gt;These are just a couple of small examples of how I am finding Extension methods a great tool for making code more readable and concise. You can download the source code for both of these methods here:&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:c954b60e-d6e6-484d-9032-03cac63fbcff" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;p&gt; &lt;a href="http://blog.spontaneouspublicity.com/file.axd?file=WindowsLiveWriter/SomeofMyFavoriteExtensionMethods_CAA8/HtmlHelper.cs" target="_blank"&gt;HtmlHelper.cs&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.spontaneouspublicity.com%2fpost%2fSome-of-My-Favorite-Extension-Methods.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.spontaneouspublicity.com%2fpost%2fSome-of-My-Favorite-Extension-Methods.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/sv9UUZ2H1MI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/sv9UUZ2H1MI/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/03/24/Some-of-My-Favorite-Extension-Methods.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=f7a00eb4-6612-4842-8a69-a4be0c9df11a</guid>
      <pubDate>Mon, 24 Mar 2008 11:24:38 -0600</pubDate>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=f7a00eb4-6612-4842-8a69-a4be0c9df11a</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=f7a00eb4-6612-4842-8a69-a4be0c9df11a</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/03/24/Some-of-My-Favorite-Extension-Methods.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=f7a00eb4-6612-4842-8a69-a4be0c9df11a</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=f7a00eb4-6612-4842-8a69-a4be0c9df11a</feedburner:origLink></item>
    <item>
      <title>New Server for My Blog</title>
      <description>&lt;p&gt;Dont worry - the &lt;a href="http://blog.spontaneouspublicity.com" target="_blank"&gt;address&lt;/a&gt; and &lt;a href="http://feeds.feedburner.com/lfoust" target="_blank"&gt;rss feed&lt;/a&gt; for my blog will remain the same. I have just moved from &lt;a href="http://www.wordpress.com/" target="_blank"&gt;wordpress.com&lt;/a&gt; to hosting my own blog using &lt;a href="http://www.dotnetblogengine.net/" target="_blank"&gt;BlogEngine.net&lt;/a&gt;. I just got too tired of the lack of customization available on wordpress.com.&lt;/p&gt; &lt;p&gt;I have to say, the move was much harder than I had anticipated. Getting my data out of wordpress.com and into BlogEngine.net required a bit of work. Wordpress exports your blog data in its own xml format which is not in the &lt;a href="http://blogml.org/" target="_blank"&gt;BlogML&lt;/a&gt; format that BlogEngine supports. I ended up writing some code to just parse through the wordpress xml file (using &lt;a href="http://msdn2.microsoft.com/en-us/library/bb308960.aspx" target="_blank"&gt;Linq to Xml&lt;/a&gt; of course) and insert the data straight into BlogEngine. If anybody is interested in the code, let me know and I can share it with you.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/Jnq9CqvcPvY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/Jnq9CqvcPvY/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/03/15/New-Server-for-My-Blog.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=859bd428-4169-474b-903b-1895d5e8a16e</guid>
      <pubDate>Sat, 15 Mar 2008 20:39:46 -0600</pubDate>
      <category>Personal</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=859bd428-4169-474b-903b-1895d5e8a16e</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=859bd428-4169-474b-903b-1895d5e8a16e</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/03/15/New-Server-for-My-Blog.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=859bd428-4169-474b-903b-1895d5e8a16e</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=859bd428-4169-474b-903b-1895d5e8a16e</feedburner:origLink></item>
    <item>
      <title>Finding Out which Groups a User is a Member Of When Using Windows Authentication in Asp.Net</title>
      <description>&lt;p&gt;When using Windows authentication with Asp.net, I often need to know which active directory groups a user is a member of. Now I know that you can do something like: &lt;/p&gt;

[code=csharp]
if (User.IsInRole("Admin"))
{
	//Give Access to Secrets
}
[/code]

The problem with this is you need to know the name of the group ahead of time. And what if you are on a network where the full name of a group is not always clear. The actual group name may be &amp;quot;MyDomain\Admin&amp;quot;. So I wrote up a quick way to just get a list of all the groups a user is a member of. It isn't super straight forward (as far as which types you need to cast to) so I thought I would list it out here:
[code=csharp]
public static List&lt;string&gt; GetGroups(RolePrincipal user)
{
	List&lt;string&gt; groups = new List&lt;string&gt;();
	WindowsIdentity identity = p.Identity as WindowsIdentity;
	foreach (IdentityReference group in identity.Groups)
	{
		NTAccount account = 
			(NTAccount)group.Translate(typeof(NTAccount));
		groups.Add(account.Value);
	}
	return groups;
}
[/code]

the user of it on a web page would be something like:
[code=csharp]
List&lt;string&gt; groups = GetGroups(User as RolePrincipal);
[/code]
&lt;p&gt;Keep in mind that this is assuming you are using Windows Authentication. So the weird part of the code above is:&lt;/p&gt;
[code=csharp]
NTAccount account = (NTAccount)group.Translate(typeof(NTAccount));
[/code]
&lt;p&gt;if you do not get this step, you will just get a bunch of Active Directory IDs that won't do you much good. &lt;/p&gt;

&lt;p&gt;Also, sorry about the long title. I just can't think of a clever title today. Maybe I should add something like &amp;quot;Ultimate Edition for Developers&amp;quot; on the end to make it extra clear. &lt;/p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.spontaneouspublicity.com%2f2008%2f03%2f13%2ffinding-out-which-groups-a-user-is-a-member-of-when-using-windows-authentication-in-aspnet%2f"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.spontaneouspublicity.com%2f2008%2f03%2f13%2ffinding-out-which-groups-a-user-is-a-member-of-when-using-windows-authentication-in-aspnet%2f" border="0" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/uNIC6yTq-F4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/uNIC6yTq-F4/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/03/13/Finding-Out-which-Groups-a-User-is-a-Member-Of-When-Using-Windows-Authentication-in-AspNet.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=db17279f-34ea-4036-9186-bfe87cb1efae</guid>
      <pubDate>Thu, 13 Mar 2008 08:44:00 -0600</pubDate>
      <category>.Net</category>
      <category>C#</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=db17279f-34ea-4036-9186-bfe87cb1efae</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=db17279f-34ea-4036-9186-bfe87cb1efae</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/03/13/Finding-Out-which-Groups-a-User-is-a-Member-Of-When-Using-Windows-Authentication-in-AspNet.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=db17279f-34ea-4036-9186-bfe87cb1efae</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=db17279f-34ea-4036-9186-bfe87cb1efae</feedburner:origLink></item>
    <item>
      <title>What I Miss</title>
      <description>&lt;p&gt;So I have been living up here in Washington for about 5 months now and I am really missing some of the food I am used to in San Diego. In no particular order they are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://lfoust.files.wordpress.com/2008/03/nnout.png" target="_blank"&gt;&lt;img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="138" alt="nnout" src="http://lfoust.files.wordpress.com/2008/03/nnout-thumb.png" width="240" align="right" border="0"&gt; In N Out&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://sandiego.citysearch.com/profile/386721/bonita_ca/lolitas_taco_shop.html" target="_blank"&gt;Lolita's Taco Shop&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.philsbbq.net/" target="_blank"&gt;Phil's Barbeque&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Hopefully it is just a matter of having to learn about the local spots up here for good food. I am not all that hopeful that I will find mexican food up here like they have in San Diego.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/SgZMuq6GkX8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/SgZMuq6GkX8/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/03/11/What-I-Miss.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=bdefa171-18d3-4553-bc81-c09b7b3eb6e9</guid>
      <pubDate>Tue, 11 Mar 2008 08:43:06 -0600</pubDate>
      <category>Personal</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=bdefa171-18d3-4553-bc81-c09b7b3eb6e9</pingback:target>
      <slash:comments>6</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=bdefa171-18d3-4553-bc81-c09b7b3eb6e9</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/03/11/What-I-Miss.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=bdefa171-18d3-4553-bc81-c09b7b3eb6e9</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=bdefa171-18d3-4553-bc81-c09b7b3eb6e9</feedburner:origLink></item>
    <item>
      <title>Using BlogEngine.net as a General Purpose Content Management System - Part I</title>
      <description>&lt;p&gt;So I keep running into the same problem - I am building a small website for somebody (in this case, &lt;a title="My Mom's Website" href="http://www.govizsla.com" target="_blank"&gt;my Mom&lt;/a&gt;) and I need to provide them with a way to update the content of their site so I don't have to. Basically, I need a lightweight and flexible content management system that is easy to use.&lt;/p&gt; &lt;p&gt;In this series of posts, I will show how I converted a small website from just standard .aspx pages into a site where all pages are editable by &lt;a href="http://windowslivewriter.spaces.live.com/" target="_blank"&gt;Windows Live Writer&lt;/a&gt; and via an online interface. In Part I of this series I will just set some background on how I am approaching the creation of this lightweight CMS.&lt;/p&gt; &lt;h3&gt;If The Shoe Fits...&lt;/h3&gt; &lt;p&gt;&lt;img style="border-width:0;margin:0 0 0 5px;" height="125" alt="cms" src="http://lfoust.files.wordpress.com/2008/02/cms.png" width="125" align="right" border="0"&gt;When I first thought of a lightweight CMS, I thought of &lt;a href="http://graffiticms.com/" target="_blank"&gt;graffiti&lt;/a&gt;. It sounds like exactly what I need. So I downloaded the express edition and started evaluating it. It seemed like a nice product and all is not free for commercial use ($399 is the cheapest commercial licence) and I can't afford that price tag when building small websites.&lt;/p&gt; &lt;p&gt;Enter &lt;a href="http://www.dotnetblogengine.net/" target="_blank"&gt;BlogEngine.net&lt;/a&gt;. My favorite blogging platform. There, I said it. I host my blog on &lt;a href="http://www.wordpress.com" target="_blank"&gt;wordpress&lt;/a&gt; but I like BlogEngine.net better. In fact, I will probably be migrating to BlogEngine.net in the near future. How do I know I like it so much? Well, I use it to run &lt;a href="http://www.bossladyblog.com" target="_blank"&gt;my wife's blog&lt;/a&gt; and I am constantly tinkering around with her site all of the time because I enjoy using BlogEngine.net so much.&lt;/p&gt; &lt;p&gt;I thought that BlogEngine.net has all of the key pieces I needed for my lightweight CMS:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;A WYSIWYG Editor  &lt;li&gt;A Metaweblog interface  &lt;li&gt;Tons of extensibility&lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;Basic Idea&lt;/h3&gt; &lt;p&gt;I decided to base my CMS implementation on the concept of pages. Most blog engines have two distinct types of content: pages and posts. Posts are the typical type of content that becomes part of your blogs feed whereas pages are usually static content which can be anything outside of a blog post (for example an 'About Me' page). BlogEngine.net already has everything I need to get the content of page created and persisted in a data store (it supports xml and &lt;a href="http://www.dotnetblogengine.net/wiki/SQLServerBlogProvider.ashx" target="_blank"&gt;sql server&lt;/a&gt; out of the box). I decided to write a web control which I can place on any webpage and include the contents of a given page from the data store.&lt;/p&gt; &lt;p&gt;I made a control called PageViewer which you can place on the page like this:
[code=ASPX]
&lt;blog:PageViewer ID="view" runat="server" DisplayTitle="false"
	  PageId="167eb7f3-135b-4f90-9756-be25ec10f14c" /&gt;
[/code]
This control basically just looks up the page using the given id (this functionality is all provided by the existing BlogEngine.Core library) and displays its content. Here is the rendering logic
[code=csharp]
if (PageId != Guid.Empty)
	page = BlogEngine.Core.Page.GetPage(PageId);

if (page != null)
{
	ServingEventArgs arg = new ServingEventArgs(page.Content, 
		ServingLocation.SinglePage);
	BlogEngine.Core.Page.OnServing(page, arg);

	if (arg.Cancel)
	Page.Response.Redirect("error404.aspx", true);

	if (DisplayTitle)
	{
		writer.Write("&lt;h1&gt;");
		writer.Write(page.Title);
		writer.Write("&lt;/h1&gt;");
	}

	writer.Write("&lt;div&gt;");
	writer.Write(arg.Body);
	writer.Write("&lt;/div&gt;");
}
[/code]
	  This code is pretty straight forward - all it does is get an instance of the page and then display its title in &amp;lt;h1&amp;gt; a tag and its body in &amp;lt;div&amp;gt; tag. This logic is actually straight from the existing page retrieval code that already exists in BlogEngine.net. This web control is pretty much the only new code I had to write. The rest of the project mostly involves moving files around and removing parts of the BlogEngine.net framework that I don't need.&lt;/p&gt;
&lt;p&gt;Armed with this control, we are ready to start converting the static pages from the old version of the website to be BlogEngine.net pages which can be stored and retrieved using the BlogEngine.Core classes. &lt;/p&gt;
&lt;p&gt;In part II of this series, I will cover what changes I made to the website project used for BlogEngine.net blogs to make it function like a straight up website, not a blog. Any feedback is welcome.&lt;/p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.spontaneouspublicity.com%2f2008%2f02%2f28%2fusing-blogenginenet-as-a-general-purpose-content-management-system-part-i%2f"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.spontaneouspublicity.com%2f2008%2f02%2f28%2fusing-blogenginenet-as-a-general-purpose-content-management-system-part-i%2f" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/0_Nv3glCjLQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/0_Nv3glCjLQ/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/02/29/Using-BlogEnginenet-as-a-General-Purpose-Content-Management-System-Part-I.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=88c3600b-ef54-4578-9617-52e3a471aeff</guid>
      <pubDate>Fri, 29 Feb 2008 16:32:46 -0600</pubDate>
      <category>.Net</category>
      <category>Development</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=88c3600b-ef54-4578-9617-52e3a471aeff</pingback:target>
      <slash:comments>25</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=88c3600b-ef54-4578-9617-52e3a471aeff</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/02/29/Using-BlogEnginenet-as-a-General-Purpose-Content-Management-System-Part-I.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=88c3600b-ef54-4578-9617-52e3a471aeff</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=88c3600b-ef54-4578-9617-52e3a471aeff</feedburner:origLink></item>
    <item>
      <title>YUI: I Officially Can't Keep Up</title>
      <description>&lt;p&gt;First off, congratulations to Eric Miraglia and the &lt;a href="http://developer.yahoo.com/yui/" target="_blank"&gt;YUI team&lt;/a&gt; - they have just &lt;a href="http://yuiblog.com/blog/2008/02/20/yui-250-released/" target="_blank"&gt;announced the release of YUI 2.5.0&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The YUI Team just released &lt;a href="http://developer.yahoo.com/yui/download/"&gt;version 2.5.0 of the library&lt;/a&gt;. We’ve added six new components — &lt;a href="http://developer.yahoo.com/yui/layout/"&gt;Layout Manager&lt;/a&gt;, &lt;a href="http://developer.yahoo.com/yui/uploader/"&gt;Uploader&lt;/a&gt; (multi-file upload engine combining Flash and JavaScript), &lt;a href="http://developer.yahoo.com/yui/resize/"&gt;Resize Utility&lt;/a&gt;, &lt;a href="http://developer.yahoo.com/yui/imagecropper/"&gt;ImageCropper&lt;/a&gt;, &lt;a href="http://developer.yahoo.com/yui/cookie/"&gt;Cookie Utility&lt;/a&gt; and a &lt;a href="http://developer.yahoo.com/yui/profilerviewer/"&gt;ProfilerViewer Control&lt;/a&gt; that works in tandem with the YUI &lt;a href="http://developer.yahoo.com/yui/profiler/"&gt;Profiler&lt;/a&gt;. This release also contains major improvements to the &lt;a href="http://developer.yahoo.com/yui/datatable/"&gt;DataTable Control&lt;/a&gt; and new&lt;a href="http://developer.yahoo.com/yui/slider/#dual"&gt; Dual-Thumb Slider functionality&lt;/a&gt; in the Slider Control.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Six new components?!? Man, I just can't keep up with learning all this new stuff let alone keep &lt;a href="http://www.codeplex.com/YuiDotNet" target="_blank"&gt;YUI.Net&lt;/a&gt; up to date.&lt;/p&gt; &lt;h3&gt;Roadmap Gone Off Track&lt;/h3&gt; &lt;p&gt;&lt;img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="91" alt="waitup" src="http://lfoust.files.wordpress.com/2008/02/waitup.png" width="158" align="right" border="0"&gt; I was working on a roadmap for YUI.Net but now I have some serious consideration to do about what next steps to take. Although there has been plenty of interest in the YUI.Net project, nobody has really come forward to help out. I am not complaining. I really enjoy working on YUI.Net. I just don't have the time to dedicate to it right now. I am going to continue to follow the development of the YUI, but I don't think I will continue development on the YUI.Net library for the foreseeable future.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/JsKYMDuLMa0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/JsKYMDuLMa0/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/02/20/YUI-I-Officially-Cant-Keep-Up.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=5fde19ae-3485-4966-8591-d5c35314c85c</guid>
      <pubDate>Wed, 20 Feb 2008 06:44:43 -0600</pubDate>
      <category>YUI.Net</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=5fde19ae-3485-4966-8591-d5c35314c85c</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=5fde19ae-3485-4966-8591-d5c35314c85c</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/02/20/YUI-I-Officially-Cant-Keep-Up.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=5fde19ae-3485-4966-8591-d5c35314c85c</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=5fde19ae-3485-4966-8591-d5c35314c85c</feedburner:origLink></item>
    <item>
      <title>Google Charts for Asp.Net now on Codeplex</title>
      <description>&lt;p&gt;&lt;img style="border-width:0;margin:0 0 0 20px;" height="84" alt="image" src="http://lfoust.files.wordpress.com/2008/02/image1.png" width="235" align="right" border="0"&gt; I have received very positive feedback on my &lt;a href="http://blog.spontaneouspublicity.com/2007/12/09/aspnet-control-for-google-charts/" target="_blank"&gt;Asp.Net control for Google charts&lt;/a&gt; so I decided to place it up on &lt;a href="http://www.codeplex.com/GoogleCharts" target="_blank"&gt;Codeplex&lt;/a&gt; to allow people to participate and add code to the project.&lt;/p&gt; &lt;p&gt;I am currently working on a project roadmap so please let me know if you are interested in participating. One feature I have already begun work on is giving the control support for data binding.&lt;/p&gt; &lt;p&gt;Here is some example data binding code I have got working:&lt;/p&gt;&lt;pre&gt;&lt;span style="color:rgb(0,0,255);"&gt;protected&lt;/span&gt; &lt;span style="color:rgb(0,0,255);"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:rgb(0,0,255);"&gt;object&lt;/span&gt; sender, &lt;span style="color:rgb(43,145,175);"&gt;EventArgs&lt;/span&gt; e)
{
    chart.DataSource = GetDataSource();
    chart.DataBind();
}

&lt;span style="color:rgb(0,0,255);"&gt;private&lt;/span&gt; &lt;span style="color:rgb(43,145,175);"&gt;DataTable&lt;/span&gt; GetDataSource()
{
    &lt;span style="color:rgb(43,145,175);"&gt;DataTable&lt;/span&gt; table = &lt;span style="color:rgb(0,0,255);"&gt;new&lt;/span&gt; &lt;span style="color:rgb(43,145,175);"&gt;DataTable&lt;/span&gt;();
    
    table.Columns.Add(&lt;span style="color:rgb(163,21,21);"&gt;"Type"&lt;/span&gt;, &lt;span style="color:rgb(0,0,255);"&gt;typeof&lt;/span&gt;(&lt;span style="color:rgb(0,0,255);"&gt;string&lt;/span&gt;));
    table.Columns.Add(&lt;span style="color:rgb(163,21,21);"&gt;"Jan"&lt;/span&gt;, &lt;span style="color:rgb(0,0,255);"&gt;typeof&lt;/span&gt;(&lt;span style="color:rgb(0,0,255);"&gt;float&lt;/span&gt;));
    table.Columns.Add(&lt;span style="color:rgb(163,21,21);"&gt;"Feb"&lt;/span&gt;, &lt;span style="color:rgb(0,0,255);"&gt;typeof&lt;/span&gt;(&lt;span style="color:rgb(0,0,255);"&gt;float&lt;/span&gt;));
    table.Columns.Add(&lt;span style="color:rgb(163,21,21);"&gt;"Mar"&lt;/span&gt;, &lt;span style="color:rgb(0,0,255);"&gt;typeof&lt;/span&gt;(&lt;span style="color:rgb(0,0,255);"&gt;float&lt;/span&gt;));

    table.Rows.Add(&lt;span style="color:rgb(163,21,21);"&gt;"Men"&lt;/span&gt;, 68, 78, 88);
    table.Rows.Add(&lt;span style="color:rgb(163,21,21);"&gt;"Women"&lt;/span&gt;, 68, 58, 78);
    table.Rows.Add(&lt;span style="color:rgb(163,21,21);"&gt;"Both"&lt;/span&gt;, 88, 48, 98);
    &lt;span style="color:rgb(0,0,255);"&gt;return&lt;/span&gt; table;
}&lt;/pre&gt;
&lt;p&gt;I am just binding to a simple DataTable which has one column containing the labels for the chart and multiple other columns which contain the data for the chart. The code above produces the following chart:&lt;/p&gt;
&lt;p&gt;&lt;img style="border-width:0;" height="100" alt="image" src="http://lfoust.files.wordpress.com/2008/02/image2.png" width="400" border="0"&gt; &lt;/p&gt;
&lt;p&gt;I look forward to seeing this project improve.&lt;/p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.spontaneouspublicity.com%2f2008%2f02%2f10%2fgoogle-charts-for-aspnet-now-on-codeplex%2f"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.spontaneouspublicity.com%2f2008%2f02%2f10%2fgoogle-charts-for-aspnet-now-on-codeplex%2f" border="0"&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/lfoust/~4/Ub2AQDpOG7Y" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/lfoust/~3/Ub2AQDpOG7Y/post.aspx</link>
      <author>Luke</author>
      <comments>http://blog.spontaneouspublicity.com/post/2008/02/10/Google-Charts-for-AspNet-now-on-Codeplex.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.spontaneouspublicity.com/post.aspx?id=d3604937-de01-4e1e-89a9-1ed88cc359fe</guid>
      <pubDate>Sun, 10 Feb 2008 12:59:00 -0600</pubDate>
      <category>.Net</category>
      <category>C#</category>
      <category>Development</category>
      <category>Google Charts</category>
      <dc:publisher>Luke</dc:publisher>
      <pingback:server>http://blog.spontaneouspublicity.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.spontaneouspublicity.com/post.aspx?id=d3604937-de01-4e1e-89a9-1ed88cc359fe</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://blog.spontaneouspublicity.com/trackback.axd?id=d3604937-de01-4e1e-89a9-1ed88cc359fe</trackback:ping>
      <wfw:comment>http://blog.spontaneouspublicity.com/post/2008/02/10/Google-Charts-for-AspNet-now-on-Codeplex.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.spontaneouspublicity.com/syndication.axd?post=d3604937-de01-4e1e-89a9-1ed88cc359fe</wfw:commentRss>
    <feedburner:origLink>http://blog.spontaneouspublicity.com/post.aspx?id=d3604937-de01-4e1e-89a9-1ed88cc359fe</feedburner:origLink></item>
  </channel>
</rss>
