<?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: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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>joeyDotNet</title>
        <link>http://joeydotnet.com/blog/Default.aspx</link>
        <description>Doing business until He comes or calls -- Luke 19:13</description>
        <language>en-US</language>
        <copyright>Joey Beninghove</copyright>
        <managingEditor>joeybeninghove@gmail.com</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <image>
            <title>joeyDotNet</title>
            <url>http://joeydotnet.com/blog/images/RSS2Image.gif</url>
            <link>http://joeydotnet.com/blog/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/joeydotnet" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
            <title>NHibernate + XML Columns</title>
            <category>nhibernate</category>
            <link>http://feedproxy.google.com/~r/joeydotnet/~3/y9JTGwVvWYc/nhibernate--xml-columns.aspx</link>
            <description>&lt;p&gt;One of the things I’ve been working on recently involves using XML columns in SQL Server.  Starting out, it was simple and I was just doing vanilla ADO.NET (wrapped in a simple Query API) combined with XML serialization/deserialization, which worked pretty well for a while.  &lt;/p&gt;  &lt;p&gt;But as the complexity has grown, it seemed like too much time was being spent enhancing the persistence infrastructure in this particular area of the application.  In comes NHibernate, which is already integrated and available to me on this particular project.  In fact, the only reason I didn’t use NHibernate for this particular feature from day one is because I didn’t see a lot of information available regarding NHibernate and XML columns.  I did find one &lt;a href="http://ayende.com/Blog/archive/2006/05/30/NHibernateAndXMLColumnTypes.aspx"&gt;old blog post by Ayende&lt;/a&gt; and a &lt;a href="http://www.hibernate.org/368.html"&gt;seemingly outdated article&lt;/a&gt; on the NHibernate site.  But I admit I’ve never jumped into creating custom user types in NHibernate and wasn’t yet comfortable moving forward with that approach.  Since what I needed at the time was pretty simple, I went forward without NHibernate for the time being.&lt;/p&gt;  &lt;p&gt;Without going into too much detail, I came to a point where I wanted to spike with NHibernate to see how it handles columns with an XML data type.  I’ve only tried one of a couple approaches so far, but wanted to get some feedback on it so far.&lt;/p&gt;  &lt;p&gt;First, a couple goals:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Store a set of data as XML in a SQL Server XML column &lt;/li&gt;    &lt;li&gt;Ability to deserialize the XML into strongly typed objects for use in the rest of the code base &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Warning: contrived example ahead.  The real implementation is basically for lightweight messages.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 238px; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; 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;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: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Person&lt;/pre&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: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&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: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; contactInformationXml;&lt;/pre&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: #606060"&gt;   4:&lt;/span&gt;  &lt;/pre&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: #606060"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Person(ContactInformation contactInformation)&lt;/pre&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: #606060"&gt;   6:&lt;/span&gt;     {&lt;/pre&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: #606060"&gt;   7:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// NOTE: SerializeToXmlStream extension method not shown&lt;/span&gt;&lt;/pre&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: #606060"&gt;   8:&lt;/span&gt;         contactInformationXml =&lt;/pre&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: #606060"&gt;   9:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StreamReader(contactInformation.SerializeToXmlStream()).ReadToEnd();&lt;/pre&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: #606060"&gt;  10:&lt;/span&gt;     }&lt;/pre&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: #606060"&gt;  11:&lt;/span&gt;  &lt;/pre&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: #606060"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ContactInformation GetContactInformation()&lt;/pre&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: #606060"&gt;  13:&lt;/span&gt;     {&lt;/pre&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: #606060"&gt;  14:&lt;/span&gt;         var xmlDocument = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; XmlDocument();&lt;/pre&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: #606060"&gt;  15:&lt;/span&gt;         xmlDocument.Load(contactInformationXml);&lt;/pre&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: #606060"&gt;  16:&lt;/span&gt;  &lt;/pre&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: #606060"&gt;  17:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// NOTE: DeserializeInto extension method not shown&lt;/span&gt;&lt;/pre&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: #606060"&gt;  18:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; xmlDocument.DeserializeInto&amp;lt;ContactInformation&amp;gt;();&lt;/pre&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: #606060"&gt;  19:&lt;/span&gt;     }&lt;/pre&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: #606060"&gt;  20:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And an excerpt from an example NHibernate mapping for this:&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; 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;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: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ContactInformationXml"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;column&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ContactInformation"&lt;/span&gt; &lt;/pre&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: #606060"&gt;   2:&lt;/span&gt;           &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="String"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;not-null&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;access&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="field.camelcase"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;So in the Person class above, the constructor accepts a strongly typed component for the contact information, serializes it to XML and stores it in a private field as a string.  Then the NHibernate mapping takes care of persisting the serialized string to the XML column named ContactInformation in the database.  To see how it would get used when NHibernate loads a Person, the GetContactInformation() method is an example of deserializing the string into the strongly typed ContactInformation object which it then returns.&lt;/p&gt;

&lt;p&gt;Now, putting aside the reasons for or against using XML in this way, using XML columns in general or the fact that serialization concerns shouldn’t be placed inside a class like this…&lt;/p&gt;

&lt;p&gt;I’m looking for feedback on this approach and if anyone else has any better ways of doing this.  I’ve yet to go down the path of creating a custom NHibernate user type, even though I think doing it that way would be a bit cleaner and flexible in the future.&lt;/p&gt;

&lt;p&gt;Anyone have any other good examples of using NHibernate for persisting data to XML columns?&lt;/p&gt;&lt;img src="http://joeydotnet.com/blog/aggbug/115.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=y9JTGwVvWYc:yqq_wXGDmnk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?i=y9JTGwVvWYc:yqq_wXGDmnk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=y9JTGwVvWYc:yqq_wXGDmnk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=y9JTGwVvWYc:yqq_wXGDmnk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Joey Beninghove</dc:creator>
            <guid isPermaLink="false">http://joeydotnet.com/blog/archive/2009/01/14/nhibernate--xml-columns.aspx</guid>
            <pubDate>Wed, 14 Jan 2009 05:30:15 GMT</pubDate>
            <wfw:comment>http://joeydotnet.com/blog/comments/115.aspx</wfw:comment>
            <comments>http://joeydotnet.com/blog/archive/2009/01/14/nhibernate--xml-columns.aspx#feedback</comments>
            <wfw:commentRss>http://joeydotnet.com/blog/comments/commentRss/115.aspx</wfw:commentRss>
        <feedburner:origLink>http://joeydotnet.com/blog/archive/2009/01/14/nhibernate--xml-columns.aspx</feedburner:origLink></item>
        <item>
            <title>Looking for some awesome .NET developers (work from home)</title>
            <link>http://feedproxy.google.com/~r/joeydotnet/~3/oAZiJiNv44c/looking-for-some-awesome-.net-developers-work-from-home.aspx</link>
            <description>&lt;p&gt;Are you:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;an experienced and passionate .NET developer&lt;/li&gt;    &lt;li&gt;looking to join a profitable and growing company who creates software solutions for a niche industry that is booming despite the current economy&lt;/li&gt;    &lt;li&gt;wanting to work from home&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Excerpts from our &lt;a href="http://www.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?job_did=J8H26J65BJ33RS3SZF6&amp;amp;cbRecursionCnt=1&amp;amp;cbsid=28f33a8393f5495e8119cca9609c29cd-275741196-wf-6" target="_blank"&gt;job posting&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Company: &lt;/strong&gt;      &lt;br /&gt;TrackAbout, Inc.      &lt;br /&gt;&lt;a href="http://www.trackabout.com"&gt;www.trackabout.com&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;TrackAbout is a small, profitable and growing software company that provides Software as a Service (SaaS) asset tracking services through the combination of a hosted web platform and various mobile devices that run our custom software. We have a solid, international customer base, are experiencing high demand for our services and are looking at exciting times ahead. We are looking for an &lt;strong&gt;exceptional and experienced &lt;/strong&gt;developer who is interested in playing a pivotal role in the growth of a small company. If you’re truly passionate about technology, we want to talk to you.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt;      &lt;br /&gt;TrackAbout's main office is just outside of Pittsburgh, PA.  However, our development staff is completely virtual (no office) and each developer works from home.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Position Details: &lt;/strong&gt;      &lt;br /&gt;We're seeking a full-time developer (no contractors please) with a minimum of 5 years of experience in web development, object-oriented programming and relational database programming. Agile experience is a plus.  You'll be working on all aspects of the TrackAbout offering including our ASP.NET website and web services, MS SQL Server 2005 and various wireless mobile devices.&lt;/p&gt;    &lt;p&gt;Your responsibilities will include architecting, designing and building new features, enhancing existing features, and fixing bugs. On occasion, you may be asked to provide second-tier technical customer support for requests that require deeper technical skills than our first-tier support engineers can handle.&lt;/p&gt;    &lt;p&gt;All members of our development team are dedicated to keeping up with the latest techniques, technologies and tools related to software development. We take time out to share our knowledge with one another and improve both our skills and our distributed development environment. We often experiment with and integrate new tools into our environment. We use ReSharper, CruiseControl.NET, TDD with NUnit, FXCop, NCover, Bugzilla, and Drupal to supplement our development efforts.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So if you're interested and want to come help me sling some code, check out the &lt;a href="http://www.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?job_did=J8H26J65BJ33RS3SZF6&amp;amp;cbRecursionCnt=1&amp;amp;cbsid=28f33a8393f5495e8119cca9609c29cd-275741196-wf-6" target="_blank"&gt;full job posting&lt;/a&gt; and reply there.&lt;/p&gt;&lt;img src="http://joeydotnet.com/blog/aggbug/114.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=oAZiJiNv44c:pLUK3_pks4g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?i=oAZiJiNv44c:pLUK3_pks4g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=oAZiJiNv44c:pLUK3_pks4g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=oAZiJiNv44c:pLUK3_pks4g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Joey Beninghove</dc:creator>
            <guid isPermaLink="false">http://joeydotnet.com/blog/archive/2008/09/26/looking-for-some-awesome-.net-developers-work-from-home.aspx</guid>
            <pubDate>Fri, 26 Sep 2008 16:37:53 GMT</pubDate>
            <wfw:comment>http://joeydotnet.com/blog/comments/114.aspx</wfw:comment>
            <comments>http://joeydotnet.com/blog/archive/2008/09/26/looking-for-some-awesome-.net-developers-work-from-home.aspx#feedback</comments>
            <wfw:commentRss>http://joeydotnet.com/blog/comments/commentRss/114.aspx</wfw:commentRss>
        <feedburner:origLink>http://joeydotnet.com/blog/archive/2008/09/26/looking-for-some-awesome-.net-developers-work-from-home.aspx</feedburner:origLink></item>
        <item>
            <title>MVC - Free Yourself from Web Forms!</title>
            <category>presentations</category>
            <link>http://feedproxy.google.com/~r/joeydotnet/~3/09Y--wwbhVk/mvc---free-yourself-from-web-forms.aspx</link>
            <description>&lt;p&gt;Thanks to all who came out last night to hear my talk on MVC at the &lt;a href="http://richmonddotnet.org" target="_blank"&gt;Richmond .NET User Group&lt;/a&gt;.  It was a blast.  I wish we had more time to dig into some more code, but maybe next time.  90 minutes flies by!&lt;/p&gt;  &lt;p&gt;As promised, here are the &lt;a href="http://joeydotnet.com/blogattachments/MVC_FreeYourselfFromWebForms.pptx" target="_blank"&gt;slides from the presentation&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://joeydotnet.com/blog/aggbug/113.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=09Y--wwbhVk:oT43PqfTVRM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?i=09Y--wwbhVk:oT43PqfTVRM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=09Y--wwbhVk:oT43PqfTVRM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=09Y--wwbhVk:oT43PqfTVRM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Joey Beninghove</dc:creator>
            <guid isPermaLink="false">http://joeydotnet.com/blog/archive/2008/09/05/mvc---free-yourself-from-web-forms.aspx</guid>
            <pubDate>Fri, 05 Sep 2008 14:13:25 GMT</pubDate>
            <wfw:comment>http://joeydotnet.com/blog/comments/113.aspx</wfw:comment>
            <comments>http://joeydotnet.com/blog/archive/2008/09/05/mvc---free-yourself-from-web-forms.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://joeydotnet.com/blog/comments/commentRss/113.aspx</wfw:commentRss>
        <feedburner:origLink>http://joeydotnet.com/blog/archive/2008/09/05/mvc---free-yourself-from-web-forms.aspx</feedburner:origLink></item>
        <item>
            <title>How did I get started in software development?</title>
            <category>personal</category>
            <link>http://feedproxy.google.com/~r/joeydotnet/~3/A6Xj8JndF2M/how-did-i-get-started-in-software-development.aspx</link>
            <description>&lt;p&gt;Well apparently &lt;a href="http://devlicio.us/blogs/derik_whittaker/default.aspx"&gt;Derik&lt;/a&gt; is trying to bring me out of my blogging hiatus by &lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2008/06/24/how-did-i-get-started-in-software-development.aspx"&gt;tagging me&lt;/a&gt; with the meme of the week.  :)  My story is pretty boring, but I'll play along in an effort to bring me out of my recent break from the blogosphere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How old were you when you started programming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I suppose I was 14 (9th grade) when I first started dabbling on an Apple IIe with all the joys of line numbers and "gotos".  I enjoyed it but I definitely wasn't as smart as the kid who created a program to generate one of those "magic eye" pictures that were all the rage at the time.  Besides, I was a &lt;span style="text-decoration: line-through;"&gt;band geek&lt;/span&gt; super cool drummer for most of my high school days.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What was your first language?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I guess technically Apple Basic and QBasic were my first languages where I would mess with my Mom by writing stupid little QBasic programs to simulate her computer exploding.  Ahh, those were the days.  But I would probably say that my Pascal class in 11th grade was where I really started to learn how to create stuff and solve problems by typing "codes" into some crazy thing called a "computer".&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What was the first real program you wrote?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Probably the first "real" program I ever wrote was a Pick 3 lottery program in my Pascal class followed later by a standard 5 card draw poker game, with stunning graphics!  :)  Looking back, I'm not sure if those were assigned projects or if I came up with those on my own, but regardless, either the school was encouraging the students to write gambling software or I had some weird attraction to writing software that could possibly ruin people's lives.  Both equally disturbing... LOL.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you knew then what you know now, would you have started programming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Oh yeah.  I actually started my "professional" career on the hardware/networking side of things but ultimately I always knew I was a codemonkey at heart and eventually moved in that direction professionally.  Besides, the money is a heck of a lot better too.  :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If there is one thing you learned along the way that you would tell new developers, what would it be?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So, what's my size limit for this answer?  :D&lt;/p&gt;
&lt;p&gt;Well of course I'd say to have fun and be passionate and all that jazz.  To me, that's just a given.  But also to focus on &lt;a href="http://codebetter.com/blogs/karlseguin/archive/2008/06/24/foundations-of-programming-ebook.aspx"&gt;the fundamentals&lt;/a&gt;.  Learn *why* it's important to make testability and maintainability a first-level concern when building software.  Get started in the community early because you'll make some great friends and learn a ton along the way.  I could say a ton more, but I don't think the internet could hold them all.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What's the most fun you've ever had ... programming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not sure I can pinpoint a single time, but the times I've been able to do some greenfield projects and make testability a first-class citizen in the design, I've been very happy with the results.  Also the journey towards "beautiful code" is something that I enjoy very much.  Getting creative and coming up with new and useful ways of wiring something together or even just naming a method well is enough to make me happy.  &lt;/p&gt;
&lt;p&gt;Recently, I'd say that my brief stint in the Rails world (not professionally) was the most fun I've had coding in quite a while.  Perhaps that's why I'm getting the Ruby itch again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The poor saps that I'm tagging?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://agilejoe.lostechies.com"&gt;Joe Ocampo&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://jason.lostechies.com"&gt;Jason Meridth&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.refreshinglyblue.com"&gt;Lee Blue&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://blog.softwareishardwork.com/"&gt;Daniel Bullington&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;hints id="hah_hints"&gt;&lt;/hints&gt;&lt;img src="http://joeydotnet.com/blog/aggbug/112.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=A6Xj8JndF2M:p1nKwpDFsfc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?i=A6Xj8JndF2M:p1nKwpDFsfc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=A6Xj8JndF2M:p1nKwpDFsfc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=A6Xj8JndF2M:p1nKwpDFsfc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Joey Beninghove</dc:creator>
            <guid isPermaLink="false">http://joeydotnet.com/blog/archive/2008/06/27/how-did-i-get-started-in-software-development.aspx</guid>
            <pubDate>Fri, 27 Jun 2008 05:02:54 GMT</pubDate>
            <wfw:comment>http://joeydotnet.com/blog/comments/112.aspx</wfw:comment>
            <comments>http://joeydotnet.com/blog/archive/2008/06/27/how-did-i-get-started-in-software-development.aspx#feedback</comments>
            <wfw:commentRss>http://joeydotnet.com/blog/comments/commentRss/112.aspx</wfw:commentRss>
        <feedburner:origLink>http://joeydotnet.com/blog/archive/2008/06/27/how-did-i-get-started-in-software-development.aspx</feedburner:origLink></item>
        <item>
            <title>Change I can achieve in</title>
            <category>personal</category>
            <category>tools</category>
            <link>http://feedproxy.google.com/~r/joeydotnet/~3/GRCtpPuXQl8/change-i-can-achieve-in.aspx</link>
            <description>&lt;p&gt;Well, this post is more of the personal variety, but it may affect future posts in one way or another (however, &lt;a href="http://lostechies.com/blogs/sean_chambers/archive/2008/02/26/what-happened-to-you-ve-been-haacked.aspx"&gt;not like this&lt;/a&gt;).  In short, a season of change is upon me.&lt;/p&gt; &lt;p&gt;&lt;img style="margin: 0px 0px 0px 10px" src="http://joeydotnet.com/images/fall_change.jpg" align="right" /&gt; &lt;/p&gt; &lt;p&gt;Big change #1.  I'm getting out of the consulting world for a while.  It's been grand and I've learned a ton about people, business and technology.  But I felt it was time for something different.  Because of the types of consulting firms I've worked with the past 3 years, the one thing I haven't liked is that I never got to work on a team long enough to really get to know the folks I was working with very well.  Seems like just when my team and I were really getting productive together, we'd all get thrown to different projects, usually with folks we hadn't worked with before.  Obviously some of this has to do with the nature of consulting in general, but I'm sure some firms see the value in keeping teams together as much as possible than others.&lt;/p&gt; &lt;p&gt;Big change #2.  Like &lt;a href="http://lostechies.com/blogs/chad_myers/archive/2008/03/03/ping-pong-pairing-it-s-not-just-for-breakfast-anymore.aspx"&gt;Chad&lt;/a&gt;, I also started a new job this week, for a great product company.  The company is small, which I really like, especially when talking about small development teams.  I'm hoping to learn a lot (drinking from the firehose this week) and be a good contributor along side the other couple developers on the team.  It's an interesting product with some pretty unique challenges to tackle, from what I've seen so far.  I'll be doing mostly ASP.NET work, with maybe a little mobile device stuff thrown in for good measure.&lt;/p&gt; &lt;p&gt;Big change #3.  I'm joining the world of &lt;a href="http://webworkerdaily.com/"&gt;web workers&lt;/a&gt;!  Yep, I'm now working from home exclusively.  This might be the biggest change for me in all of this, but I'm very much looking forward to adapting to this type of lifestyle/work environment.  I'm sure I'll have some things to learn, specifically about how to keep things balanced, but so far it's been enjoyable.  Not to mention, it'll help me kick the "eating out" habit that I was stuck in during my traditional office jobs.  :O&lt;/p&gt; &lt;p&gt;So far I'm finding that my reliance on tools like &lt;a href="http://www.pidgin.im/"&gt;IM&lt;/a&gt;, &lt;a href="http://www.skype.com/"&gt;Skype&lt;/a&gt; and &lt;a href="http://connect.microsoft.com/site/sitehome.aspx?SiteID=94"&gt;SharedView&lt;/a&gt; (which is pretty decent) just grew exponentially.  I'm looking forward to possibly trying out some &lt;a href="http://www.lostechies.com/blogs/jason_meridth/archive/2007/09/17/skype-yugma-logitech-premium-usb-headset-350-remote-pair-programming.aspx"&gt;remote pairing&lt;/a&gt; as soon as I get settled.&lt;/p&gt; &lt;p&gt;To make this post at least somewhat productive, here are a couple tools and a bonus tip that I've been introduced to over the past couple days that you may find useful.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://pidgin-encrypt.sourceforge.net/"&gt;Pidgin-Encryption&lt;/a&gt; (for...umm...encryption)  &lt;/li&gt;&lt;li&gt;&lt;a href="https://secure.logmein.com/products/hamachi/vpn.asp"&gt;Hamachi&lt;/a&gt; (really nice and free VPN software)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Bonus Tip: I've been a huge Pidgin fan ever since it had that weird Gaim name.  I use it for everything.  AIM, Yahoo, GTalk, IRC, Twitter.  One tip that I learned today is how to set up Pidgin to "auto join" you to a particular IRC channel as soon as you login into Pidgin.  Here's how to do it...&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Click Buddies &amp;gt; Add Chat  &lt;/li&gt;&lt;li&gt;Choose your IRC account/server from the Account drop-down  &lt;/li&gt;&lt;li&gt;Type the name of the channel you want to join  &lt;/li&gt;&lt;li&gt;Give the chat an alias (I just used the channel name)  &lt;/li&gt;&lt;li&gt;Click Add  &lt;/li&gt;&lt;li&gt;Now find that new chat in your list of buddies, Right-Click &amp;gt; Auto-join  &lt;/li&gt;&lt;li&gt;That's it!&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;So now when you fire up Pidgin, it'll automatically join you to that room.  Most of you may already know about this, but I thought it was pretty cool.&lt;/p&gt; &lt;p&gt;Anyway, until next time.  I have a lot of things to blog about in the hopper.  Hopefully I can get around to them sometime soon.  *sigh*&lt;/p&gt;&lt;img src="http://joeydotnet.com/blog/aggbug/110.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=GRCtpPuXQl8:SVE69Pj_-G0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?i=GRCtpPuXQl8:SVE69Pj_-G0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=GRCtpPuXQl8:SVE69Pj_-G0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=GRCtpPuXQl8:SVE69Pj_-G0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Joey Beninghove</dc:creator>
            <guid isPermaLink="false">http://joeydotnet.com/blog/archive/2008/03/04/change-i-can-achieve-in.aspx</guid>
            <pubDate>Wed, 05 Mar 2008 03:19:57 GMT</pubDate>
            <wfw:comment>http://joeydotnet.com/blog/comments/110.aspx</wfw:comment>
            <comments>http://joeydotnet.com/blog/archive/2008/03/04/change-i-can-achieve-in.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://joeydotnet.com/blog/comments/commentRss/110.aspx</wfw:commentRss>
        <feedburner:origLink>http://joeydotnet.com/blog/archive/2008/03/04/change-i-can-achieve-in.aspx</feedburner:origLink></item>
        <item>
            <title>Scribbish Skin - For Subtext</title>
            <category>blogging</category>
            <category>web</category>
            <link>http://feedproxy.google.com/~r/joeydotnet/~3/KGCZu8MVDKs/scribbish-skin---for-subtext.aspx</link>
            <description>&lt;p&gt;This is long overdue, but &lt;a href="http://developernotes.com/"&gt;Nick Parker&lt;/a&gt; asked me a long time ago (sorry Nick) where I got the skin I use for my blog and I told him I'd make it available.  I actually ported it myself from the existing &lt;a href="http://quotedprintable.com/pages/scribbish"&gt;Scribbish theme&lt;/a&gt; that was already available for Mephisto, Wordpress and others.  I really liked the simplicity of it so I just grabbed the CSS and hacked away at it myself until I got it looking close enough as a &lt;a href="http://subtextproject.com/"&gt;Subtext&lt;/a&gt; skin.&lt;/p&gt; &lt;p&gt;I submitted it to the &lt;a href="http://subtextskins.com/"&gt;Subtext skins showcase&lt;/a&gt;, but it may take a bit for it to get approved.  So for now, you can just &lt;a href="http://joeydotnet.com/blogattachments/scribbish.zip"&gt;download it from here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I kind of put this together in a hurry, so please let me know if you find any problems with it.&lt;/p&gt; &lt;p&gt;Enjoy!  :)&lt;/p&gt;&lt;img src="http://joeydotnet.com/blog/aggbug/109.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=KGCZu8MVDKs:W9tBSP87hbs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?i=KGCZu8MVDKs:W9tBSP87hbs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=KGCZu8MVDKs:W9tBSP87hbs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=KGCZu8MVDKs:W9tBSP87hbs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Joey Beninghove</dc:creator>
            <guid isPermaLink="false">http://joeydotnet.com/blog/archive/2008/02/10/scribbish-skin---for-subtext.aspx</guid>
            <pubDate>Mon, 11 Feb 2008 03:15:39 GMT</pubDate>
            <wfw:comment>http://joeydotnet.com/blog/comments/109.aspx</wfw:comment>
            <comments>http://joeydotnet.com/blog/archive/2008/02/10/scribbish-skin---for-subtext.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://joeydotnet.com/blog/comments/commentRss/109.aspx</wfw:commentRss>
        <feedburner:origLink>http://joeydotnet.com/blog/archive/2008/02/10/scribbish-skin---for-subtext.aspx</feedburner:origLink></item>
        <item>
            <title>ActiveSupport.NET - Namespace Overhaul</title>
            <category>activesupport.net</category>
            <category>c#</category>
            <category>projects</category>
            <link>http://feedproxy.google.com/~r/joeydotnet/~3/XpcgRl7Gots/activesupport.net---namespace-overhaul.aspx</link>
            <description>&lt;p&gt;Figured I'd try and get this nailed down as early as possible.  So after some recent feedback, I decided to change the namespacing so that it focused more on "behavior/concern" rather than "types".  What this means is...&lt;/p&gt;  &lt;p&gt;Instead of:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;using ActiveSupport.Core.Extensions.String;  // containing string extensions for access, conversions, etc. &lt;/li&gt;    &lt;li&gt;using ActiveSupport.Core.Extensions.Integer;  // containing integer extensions for access, inflections, etc. &lt;/li&gt;    &lt;li&gt;... &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It's now just this:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;using ActiveSupport;  // just basic extensions &lt;/li&gt;    &lt;li&gt;using ActiveSupport.Access // all accessor-based extensions for ALL types &lt;/li&gt;    &lt;li&gt;using ActiveSupport.Conversions // all conversion-based extensions for ALL types &lt;/li&gt;    &lt;li&gt;... &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I'm pretty much thinking the accessor based stuff will probably get used the most.  But either way, by grouping this way, I'm hoping they'll be a bit easier use.  And of course when our R# 4.0 EAP shows up next (right &lt;a href="http://resharper.blogspot.com/"&gt;Ilya&lt;/a&gt;? :) all of this namespace'ry will must magically work for us.  :)&lt;/p&gt;  &lt;p&gt;What do you think?  Is this a better approach to keeping things clean and organized?&lt;/p&gt;&lt;img src="http://joeydotnet.com/blog/aggbug/108.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=XpcgRl7Gots:7x4PnUbPbt0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?i=XpcgRl7Gots:7x4PnUbPbt0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=XpcgRl7Gots:7x4PnUbPbt0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=XpcgRl7Gots:7x4PnUbPbt0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Joey Beninghove</dc:creator>
            <guid isPermaLink="false">http://joeydotnet.com/blog/archive/2008/02/09/activesupport.net---namespace-overhaul.aspx</guid>
            <pubDate>Sat, 09 Feb 2008 05:00:12 GMT</pubDate>
            <wfw:comment>http://joeydotnet.com/blog/comments/108.aspx</wfw:comment>
            <comments>http://joeydotnet.com/blog/archive/2008/02/09/activesupport.net---namespace-overhaul.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://joeydotnet.com/blog/comments/commentRss/108.aspx</wfw:commentRss>
        <feedburner:origLink>http://joeydotnet.com/blog/archive/2008/02/09/activesupport.net---namespace-overhaul.aspx</feedburner:origLink></item>
        <item>
            <title>ActiveSupport.NET - Update</title>
            <category>activesupport.net</category>
            <category>c#</category>
            <category>projects</category>
            <link>http://feedproxy.google.com/~r/joeydotnet/~3/I9CcXsLiVM8/activesupport.net---update.aspx</link>
            <description>&lt;p&gt;So it seems there is some interest in getting something like this up and running.  I went ahead and did some of the basic "project setup" type tasks.  Here are some links of interest...&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://activesupportnet.googlecode.com"&gt;ActiveSupport.NET Google Code Project&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://groups.google.com/group/activesupportnet-discuss"&gt;ActiveSupport.NET.Discuss&lt;/a&gt; (general) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://groups.google.com/group/activesupportnet-developers"&gt;ActiveSupport.NET.Developers&lt;/a&gt; (for future use once we have some a group of committers) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I look forward to some more discussions about the best way to structure things to make it easy to use.  On the google code project site you'll find a brief description of the project as well as a wiki page I've started to give some basic info on how the code base is structured (tools, build targets, etc...).  I'm sure all of this will change/evolve as things progress.&lt;/p&gt;  &lt;p&gt;And thanks &lt;a href="http://blog.joelowrance.com/Default.aspx"&gt;Joe&lt;/a&gt; (for already submitting the first patch) and others that have said they want to get involved.  Should be fun...  :)&lt;/p&gt;&lt;img src="http://joeydotnet.com/blog/aggbug/107.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=I9CcXsLiVM8:BV836yMuP-o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?i=I9CcXsLiVM8:BV836yMuP-o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=I9CcXsLiVM8:BV836yMuP-o:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=I9CcXsLiVM8:BV836yMuP-o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Joey Beninghove</dc:creator>
            <guid isPermaLink="false">http://joeydotnet.com/blog/archive/2008/02/08/activesupport.net---update.aspx</guid>
            <pubDate>Fri, 08 Feb 2008 18:56:35 GMT</pubDate>
            <wfw:comment>http://joeydotnet.com/blog/comments/107.aspx</wfw:comment>
            <comments>http://joeydotnet.com/blog/archive/2008/02/08/activesupport.net---update.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://joeydotnet.com/blog/comments/commentRss/107.aspx</wfw:commentRss>
        <feedburner:origLink>http://joeydotnet.com/blog/archive/2008/02/08/activesupport.net---update.aspx</feedburner:origLink></item>
        <item>
            <title>Introducing ActiveSupport.NET</title>
            <category>c#</category>
            <category>projects</category>
            <category>rails</category>
            <category>ruby</category>
            <category>activesupport.net</category>
            <link>http://feedproxy.google.com/~r/joeydotnet/~3/6pwZnQOJGgs/introducing-activesupport.net.aspx</link>
            <description>&lt;p&gt;To my surprise, none of my googling seemed to come up with anyone doing this.  So I figured I'd start it off (please let me know if you know of any other efforts already underway).  As some would say, taking &lt;a href="http://codebetter.com/blogs/david.hayden/archive/2007/03/28/Extension-Methods-in-C_2300_-3.0-_2D00_-Shiny-New-Hammer-Looking-for-a-Nail-_3A002900_.aspx"&gt;extension method abuse&lt;/a&gt; to a whole new level.  :D  But, I see these little utility methods to be a good fit as extensions methods to make the syntactic sugar that much sweeter.&lt;/p&gt;
&lt;p&gt;One of the many great things about working in Rails is the core extensions in the &lt;a href="http://api.rubyonrails.org/"&gt;ActiveSupport&lt;/a&gt; library.  It just *becomes* part of the Ruby language as you work with Rails.  And I wanted to get that same feeling when working in C#.  So this is my attempt to start porting over the core extensions from Ruby's ActiveSupport Library.&lt;/p&gt;
&lt;p&gt;So far I've just ported over a few string access and conversion extensions, but check 'em out and let me know if you'd find something like this to be useful.  Here are some examples of what's currently supported...&lt;/p&gt;
&lt;div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;
&lt;div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 1:&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;// some accessors&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 2:&lt;/span&gt; &lt;span style="color: rgb(0, 96, 128);"&gt;"blah"&lt;/span&gt;.At(2) &lt;span style="color: rgb(0, 128, 0);"&gt;// 'a'&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 3:&lt;/span&gt; &lt;span style="color: rgb(0, 96, 128);"&gt;"blah"&lt;/span&gt;.First() &lt;span style="color: rgb(0, 128, 0);"&gt;// 'b'&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 4:&lt;/span&gt; &lt;span style="color: rgb(0, 96, 128);"&gt;"blah"&lt;/span&gt;.First(2) &lt;span style="color: rgb(0, 128, 0);"&gt;// "bl"&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 5:&lt;/span&gt; &lt;span style="color: rgb(0, 96, 128);"&gt;"blah"&lt;/span&gt;.From(1) &lt;span style="color: rgb(0, 128, 0);"&gt;// "lah"&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 6:&lt;/span&gt; &lt;span style="color: rgb(0, 96, 128);"&gt;"blah"&lt;/span&gt;.Last() &lt;span style="color: rgb(0, 128, 0);"&gt;// 'h'&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 7:&lt;/span&gt; &lt;span style="color: rgb(0, 96, 128);"&gt;"blah"&lt;/span&gt;.Last(2) &lt;span style="color: rgb(0, 128, 0);"&gt;// "ah"&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 8:&lt;/span&gt; &lt;span style="color: rgb(0, 96, 128);"&gt;"blah"&lt;/span&gt;.To(2) &lt;span style="color: rgb(0, 128, 0);"&gt;// "bla"&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 9:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 10:&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;// couple simple conversions (still needs lots of work)&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 11:&lt;/span&gt; &lt;span style="color: rgb(0, 96, 128);"&gt;"1/4/2008"&lt;/span&gt;.ToDate() &lt;span style="color: rgb(0, 128, 0);"&gt;// DateTime&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt; 12:&lt;/span&gt; &lt;span style="color: rgb(0, 96, 128);"&gt;"01:15:35"&lt;/span&gt;.ToTime() &lt;span style="color: rgb(0, 128, 0);"&gt;// DateTime&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can grab the source at its &lt;a href="http://code.google.com/p/activesupportnet/source/checkout"&gt;google code repository&lt;/a&gt;.  You can just do a "build test" from a command line in the trunk to run the unit test suite.&lt;/p&gt;
&lt;p&gt;Enjoy.  :-)&lt;/p&gt;
&lt;hints id="hah_hints"&gt;&lt;/hints&gt;&lt;img src="http://joeydotnet.com/blog/aggbug/106.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=6pwZnQOJGgs:9_JgbPov6l4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?i=6pwZnQOJGgs:9_JgbPov6l4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=6pwZnQOJGgs:9_JgbPov6l4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=6pwZnQOJGgs:9_JgbPov6l4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Joey Beninghove</dc:creator>
            <guid isPermaLink="false">http://joeydotnet.com/blog/archive/2008/02/07/introducing-activesupport.net.aspx</guid>
            <pubDate>Thu, 07 Feb 2008 20:18:14 GMT</pubDate>
            <wfw:comment>http://joeydotnet.com/blog/comments/106.aspx</wfw:comment>
            <comments>http://joeydotnet.com/blog/archive/2008/02/07/introducing-activesupport.net.aspx#feedback</comments>
            <slash:comments>10</slash:comments>
            <wfw:commentRss>http://joeydotnet.com/blog/comments/commentRss/106.aspx</wfw:commentRss>
        <feedburner:origLink>http://joeydotnet.com/blog/archive/2008/02/07/introducing-activesupport.net.aspx</feedburner:origLink></item>
        <item>
            <title>CIFactory.Create(RichmondDNUG);</title>
            <category>presentations</category>
            <category>richmond dnug</category>
            <link>http://feedproxy.google.com/~r/joeydotnet/~3/OVse0-or95E/cifactory.createrichmonddnug.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://jayflowers.com/"&gt;Jay Flowers&lt;/a&gt; came down to our humble &lt;a href="http://richmonddotnet.org/"&gt;Richmond DNUG&lt;/a&gt; tonight to talk about Continuous Integration and his rockin' open-source product, &lt;a href="http://jayflowers.com/WordPress/?p=201"&gt;CI Factory&lt;/a&gt;.  It was a great demonstration of how to get a very robust automated build server up and running in literally minutes.  Having set up quite a few automated build and CI environments myself over the years, I have a great appreciation for all the hard work that's gone into a product like CI Factory.  &lt;/p&gt;  &lt;p&gt;So I'm looking forward to leveraging CI Factory in my future CI server implementations (which will hopefully be soon!)&lt;/p&gt;  &lt;p&gt;Oh and some of the cool stuff he's done in extending CCNet and NAnt was pretty impressive as well.  Not to mention the extension of NCover to drive and generate code coverage for WatiN tests.&lt;/p&gt;  &lt;p&gt;So if you need CI (and trust me, you do), then &lt;a href="http://jayflowers.com/WordPress/?p=201"&gt;download CI Factory&lt;/a&gt; and check it out.&lt;/p&gt;&lt;img src="http://joeydotnet.com/blog/aggbug/104.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=OVse0-or95E:AAuAM9LsGnQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?i=OVse0-or95E:AAuAM9LsGnQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=OVse0-or95E:AAuAM9LsGnQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/joeydotnet?a=OVse0-or95E:AAuAM9LsGnQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/joeydotnet?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Joey Beninghove</dc:creator>
            <guid isPermaLink="false">http://joeydotnet.com/blog/archive/2008/01/10/cifactory.createrichmonddnug.aspx</guid>
            <pubDate>Fri, 11 Jan 2008 03:31:07 GMT</pubDate>
            <wfw:comment>http://joeydotnet.com/blog/comments/104.aspx</wfw:comment>
            <comments>http://joeydotnet.com/blog/archive/2008/01/10/cifactory.createrichmonddnug.aspx#feedback</comments>
            <wfw:commentRss>http://joeydotnet.com/blog/comments/commentRss/104.aspx</wfw:commentRss>
        <feedburner:origLink>http://joeydotnet.com/blog/archive/2008/01/10/cifactory.createrichmonddnug.aspx</feedburner:origLink></item>
    </channel>
</rss>
