<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Software</title>
        <link>http://geekswithblogs.net/jolson/category/104.aspx</link>
        <description>Software</description>
        <language>en-US</language>
        <copyright>Jason Olson</copyright>
        <managingEditor>jolson88@yahoo.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Yes, I'm a rebellious youth, dang it!</title>
            <link>http://geekswithblogs.net/jolson/archive/2005/04/09/28777.aspx</link>
            <description>&lt;P&gt;Okay, I need to come out and admit something. I'm a rebellious youth. Yes, I admit it. And I'm currently in the process of rebelling against my parent, Microsoft. &lt;/P&gt;
&lt;P&gt;I'm jealous of all my development friends. They've dealt with a lot of non-Microsoft technologies in their history as a techno-geek and they can justify exactly what they like about &amp;lt;insert Microsoft technology here&amp;gt;. Well, I'm not one of these people. Believe it or not, I'm a very young techno-weenie. The first language that I did serious development with was actually C#. My whole development life has been .NET basically (some classic ASP and SQL, too, but still Microsoft technologies nonetheless).&lt;/P&gt;
&lt;P&gt;Lately I've been branching out and discovering other technologies like Python, Ruby on Rails, etc. And what have I found? I've found that I'm becoming more passionate for these non-Microsoft technologies than I am for .NET. Lately, I have been really digging into Ruby on Rails, for example. It may be just me, but I personally think that other communities (let's say the Java community, for instance) is more &amp;#8220;open&amp;#8221;. I guess the best way for me to express what I mean is this. If you find a really cool technology for .NET, the odds are that you will have to fork over some money to use it. On the other side, I have found that there are a ton of really cool technologies in other technologies that tend to be open. Granted, the .NET community is a young community and is still growing, but I have simply been falling in love with stuff I'm finding in other communities. &lt;/P&gt;
&lt;P&gt;I understand that some of this is due to the &amp;#8220;the grass is always green on the other side&amp;#8221; syndrome. But I think some it is based on fact. For example, two technologies that I have come across lately: Ruby Gems, and Ivy. Why do we not have the equivalent of Ruby Gems in the .NET world? It isn't because of time, considering how young and fresh the Ruby community is. I really like the fact that if I want to install Ruby on Rails, all I have to do is execute the statement &amp;#8220;gem install rails&amp;#8221;. How cool is that? It will even install all the dependencies for me. Let's say that I wanted to install NAnt, how could would it be if I could just execute &amp;#8220;opal install NAnt&amp;#8221;? As for Ivy, why is there a severe lack of dependency management packages for .NET? Cruise Control and Draco don't handle dependencies (directly at least). I haven't found a suitable package to handle dependencies as a plug-in to NAnt (like Ivy is for Ant), either. &lt;/P&gt;
&lt;P&gt;So, why is this? I really don't know. A really good friend of mine has a thought on this though. Let's not kid ourselves, Microsoft does quite a bit of innovating. While this is generally &amp;#8220;A Good Thing&amp;#8221;, what is the effect on the community? For example, NAnt was a great technology that emerged (albeit based on a technology already established in the Java world). How does Microsoft react (at least partially, I understand there are different reasons)? MSBuild. Granted, MSBuild and NAnt can exist happily together. But it's no secret that if a great technology exists, Microsoft likes to integrate it into their platform. Another example, refactoring support in the IDE. With this trend developing, how many community members feel that they don't need to innovate because Microsoft will do it anyways? &lt;/P&gt;
&lt;P&gt;Perhaps the problem is that Microsoft provides both the technology framework and the majority of tools used. Similar to everything else about the OS, when everything is directly integrated, where does that leave 3rd parties? Well, while it may not take them out of the equation, it certainly makes the road to success/adoption a lot steeper than it could be otherwise. And I don't buy the argument that this is just the case because Visual Studio is just a superior IDE. In my opinion, look back at the Java world. One of the best IDEs in the Java world is IntelliJ. And, although it may seem blasphemous, I personally believe that IntelliJ is a superior IDE when compared to Visual Studio. There are exceptions to the rule, but by far it seems that the Microsoft community is much more aligned with Capitalism, and Java/Ruby/Python is, well, not. Both approaches have there place. After all, we do live in a capitalist country, so you have to make money somehow.&lt;/P&gt;
&lt;P&gt;Well, this turned out to be a bit more long-winded that I hope. Just be aware, I'm not turning my back on Microsoft technologies. I feel that getting all this experience outside of the Microsoft world will only make me into a better .NET developer/evangelist. So, back on the long road I embark, out into my darkness, rebelling against my development birth parent, Microsoft. Hopefully, I'll see you around (don't worry, I still won't stop blogging or anything like that; although it does bring into question my game development articles).&lt;/P&gt;
&lt;P&gt;All of you who have more experience in this world than me, the techno-virgin, what are your opinions/thoughts/conclusions that you have arrived at in your journeys?&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=28777"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=28777" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jolson/aggbug/28777.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Olson</dc:creator>
            <guid>http://geekswithblogs.net/jolson/archive/2005/04/09/28777.aspx</guid>
            <pubDate>Sat, 09 Apr 2005 20:13:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jolson/comments/28777.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jolson/archive/2005/04/09/28777.aspx#feedback</comments>
            <slash:comments>19</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jolson/comments/commentRss/28777.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jolson/services/trackbacks/28777.aspx</trackback:ping>
        </item>
        <item>
            <title>NEW - CruiseControl.NET and Dependency Management</title>
            <link>http://geekswithblogs.net/jolson/archive/2005/03/29/27642.aspx</link>
            <description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;I have implemented Dependency Management into Cruise Control that I would like to submit a patch for. I&amp;#8217;m not sure what patch formats you except so for now I will just link to the zip file containing the changed and added source files. You can find the link here: &lt;A href="http://members.gamedev.net/managedworld/downloads/CruiseControlPatch.zip"&gt;http://members.gamedev.net/managedworld/downloads/CruiseControlPatch.zip&lt;/A&gt;. These changes are based upon version 0.8.0.822 pulled directly from CCNetLive. &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;The essence of the change is to allow the configuration of projects as such:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;cruisecontrol&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;project&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;Introvert&amp;lt;/name&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/project&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;project&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;Failing&amp;nbsp;&amp;nbsp;&amp;nbsp;Project&amp;lt;/name&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;projectDependency&amp;gt;Introvert&amp;lt;/projectDependency&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/project&amp;gt;&lt;BR&gt;&amp;lt;/cruisecontrol&amp;gt; &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;The ramifications for a project with dependencies are as follows (the behavior, that is):&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;1)&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;If a dependent project is currently building, wait until the dependency is finished building (the project activity will show &amp;#8220;WaitingForDependencies&amp;#8221; on the web dashboard while in this stage)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;2)&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;If a dependent project is in a failed state, then this project will fail also (with a &amp;#8220;DependencyFailure&amp;#8221; state to differentiate from a normal &amp;#8220;Failure&amp;#8221; state)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;The ramifications for a project that is depended upon are as follows:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;1)&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;If I just finished building or I&amp;#8217;m in a failed state, kick off builds for any projects that are dependent upon me&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l0 level2 lfo2; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;a.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;If I failed, kicking off projects dependent upon me will cause them to fail with a &amp;#8220;DependencyFailure&amp;#8221; state to catch dependency issues as soon as possible&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;This functionality addition will also, possibly, circumvent the need for a SingletonBuilder since the root cause of needing a SingletonBuilder was because there was no concept of &amp;#8220;dependencies&amp;#8221; in the build system.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;The new files are all in the core project:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;DependencyManager.cs&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;IDependencyManager.cs&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;IProjectIntegratorRunner.cs&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;NullDependencyManager.cs&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;ProjectIntegratorRunner.cs&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;IProjectIntegratorRunner.cs and ProjectIntegratorRunner.cs are just class extractions of functionality that was implemented in the CruiseServer. This was done so that we can reuse this functionality (kicking off Project Integrators that is) from the Dependency Manager as well to kick off builds that are dependent upon the current project.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;There are many other files that were touched due to a method signature change of IIntegratable. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;I have also added unit tests to these new classes so that they should be relatively easier and ready to plug in to the trunk of the project.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;Obviously, you can tell that this is not actual detailed dependency management, but it certainly has helped making my build process better at home, especially regarding having common codebases that are shared at code-level, rather than binary-dependency level, in order to achieve a true refactoring space among several projects.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;I have submitted this to the mailing list for CruiseControl.NET in hopes that it will be integrated into the trunk of the project. If I hear anything more from them, I will be sure to give updates here. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;Enjoy!&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=27642"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=27642" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jolson/aggbug/27642.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Olson</dc:creator>
            <guid>http://geekswithblogs.net/jolson/archive/2005/03/29/27642.aspx</guid>
            <pubDate>Wed, 30 Mar 2005 00:58:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jolson/comments/27642.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jolson/archive/2005/03/29/27642.aspx#feedback</comments>
            <slash:comments>17</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jolson/comments/commentRss/27642.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jolson/services/trackbacks/27642.aspx</trackback:ping>
        </item>
        <item>
            <title>XNA Studio</title>
            <link>http://geekswithblogs.net/jolson/archive/2005/03/07/25573.aspx</link>
            <description>&lt;P&gt;According to GameGossip, Microsoft announced &lt;A href="http://www.gamegossip.com/pressrelease.php?id=12298"&gt;XNA Studio&lt;/A&gt; at the Game Developers Conference today. From the article:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Based on the Microsoft&amp;#174; Visual Studio&amp;#174; 2005 Team System, the latest innovation of the company's flagship development platform, XNA Studio is an integrated, team-based development environment tailored for game production.&lt;/EM&gt; &lt;/P&gt;
&lt;P&gt;Sounds pretty nifty. I can't wait until we start hearing more things about XNA!!&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=25573"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=25573" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jolson/aggbug/25573.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Olson</dc:creator>
            <guid>http://geekswithblogs.net/jolson/archive/2005/03/07/25573.aspx</guid>
            <pubDate>Tue, 08 Mar 2005 00:49:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jolson/comments/25573.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jolson/archive/2005/03/07/25573.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jolson/comments/commentRss/25573.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jolson/services/trackbacks/25573.aspx</trackback:ping>
        </item>
        <item>
            <title>Falling In Love With Python</title>
            <link>http://geekswithblogs.net/jolson/archive/2005/02/19/23894.aspx</link>
            <description>&lt;P&gt;Lately, I've been spending some private time learning Python. It is definitely a different beast than C#. For one, it has taken a little while to get used to the dynamicism of Python compared to C#. Now, don't get me wrong, I'm still in love with C#, I just am falling in love with certain aspects of the Python language. And, well, I'm going to blog about it here because I don't really have any one to share this with at the moment and I need to get it off my chest. &lt;/P&gt;
&lt;P&gt;I just had my first &amp;#8220;OH SHIT!&amp;#8221; moment in Python. Before I describe that though, a little background to what I've been trying to do with unit testing lately. I've been thinking a lot about mock objects. What I wanted was an easy way to intercept any call to a given class at runtime and redirect it to a mock object. For instance, if class Foo creates an instance of class Bar, I want to say that any future method call to anything in Bar should be redirected to my class MockBar. Now, there are easy ways to solve this issue for most circumstances. For example, passing an IBar object to the method call or to the Foo class constructor is an option most of the time. But, there are times where this can lead to code and APIs that aren't perhaps the most usable APIs.&lt;/P&gt;
&lt;P&gt;Usually, it requires a little give and take. Code that is really testable isn't necessarily the most intuitive to use. You have to compromise (I'm talking generally here). As with many other things, it is something where you have to choose which side to design for. For instance, highly performant code isn't necessarily the easiest code to read. On the other hand, code that is really easy to read isn't necessarily the most performant. At times, it's the same with testability and usability, I believe. You may believe otherwise of course, but that doesn't mean you're right :P. Of course, there are exceptions to everything I'm saying here :).&lt;/P&gt;
&lt;P&gt;Okay, with that out of the way, on to the moment I had just now. Since Python is a dynamic language, and everything is considered an object (even function and class definitions themselves), we can automatically alias our mock objects to test our code. As an example, let's take a small example. First, we will just alias a function definition. Here is a small snippet of code that has a method that we may want to mock. Here is the pre-mocked version:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&amp;gt;&amp;gt;&amp;gt; class&lt;/STRONG&gt; Foo:&lt;BR&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;def bar&lt;/STRONG&gt;(self):&lt;BR&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;print&lt;/STRONG&gt; 'Hello from boring bar'&lt;BR&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; myFoo = Foo()&lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; myFoo.bar()&lt;BR&gt;&lt;FONT color=#ff0000&gt;Hello from boring bar&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;To mock this, we simply need to define a new mock function and re-alias the bar function to point to our mock function. Here's how it might look (and you can see the output):&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&amp;gt;&amp;gt;&amp;gt; def&lt;/STRONG&gt; mockBar(self):&lt;BR&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;print&lt;/STRONG&gt; 'Hello from mockBar, baby!!!'&lt;BR&gt;...&lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; Foo.bar = mockBar&amp;nbsp; &lt;FONT color=#9acd32&gt;&lt;EM&gt;#&amp;lt;-- Alias the bar definition in class foo to our new mockBar function&lt;BR&gt;&lt;/EM&gt;&lt;/FONT&gt;&amp;gt;&amp;gt;&amp;gt; myFoo.bar()&lt;BR&gt;&lt;FONT color=#ff0000&gt;Hello from mockBar, baby!!!&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;That is extremely cool! And it just doesn't stop with functions. You can do the same aliasing at the class level. Remember, EVERYTHING is an object in Python, even class and method declarations. Check it out:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&amp;gt;&amp;gt; &lt;STRONG&gt;class&lt;/STRONG&gt; Foo:&lt;BR&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;def myMethod&lt;/STRONG&gt;(self):&lt;BR&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myBar = Bar()&lt;BR&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myBar.sayHello()&lt;BR&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; &lt;STRONG&gt;class &lt;/STRONG&gt;Bar:&lt;BR&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;def sayHello&lt;/STRONG&gt;(self):&lt;BR&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;print&lt;/STRONG&gt; 'Hello from boring Bar'&lt;BR&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; myFoo = Foo()&lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; myFoo.myMethod()&lt;BR&gt;&lt;FONT color=#ff0000&gt;Hello from boring Bar&lt;/FONT&gt;&lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; &lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; &lt;STRONG&gt;class&lt;/STRONG&gt; MockBar:&lt;BR&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;def sayHello&lt;/STRONG&gt;(self):&lt;BR&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;print&lt;/STRONG&gt; 'Hello from MockBar, Baby!!!!'&lt;BR&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; &lt;FONT color=#9acd32&gt;&lt;EM&gt;#Alias Bar class now&lt;BR&gt;&lt;/EM&gt;&lt;/FONT&gt;&amp;gt;&amp;gt;&amp;gt; Bar = MockBar&lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; &lt;BR&gt;&amp;gt;&amp;gt;&amp;gt; &lt;EM&gt;&lt;FONT color=#9acd32&gt;#Retest myMethod()&lt;BR&gt;&lt;/FONT&gt;&lt;/EM&gt;&amp;gt;&amp;gt;&amp;gt; myFoo.myMethod()&lt;BR&gt;&lt;FONT color=#ff0000&gt;Hello from MockBar, Baby!!!!&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;I love this language!&lt;/P&gt;
&lt;P&gt;Now, there is a method to do something very similar to this with C# using context-bound objects and switching the context at runtime. However, you have to realize that there is overhead involved in making an object and context-bound object. Also, since multiple inheritance is not possible in .NET, sometimes making an object a context-bound object just isn't possible.&lt;/P&gt;
&lt;P&gt;One thing is for sure, I'm sure this love affair isn't over. However, it's not all bright and cheery. There are some things that I have found that I don't like in Python. I think that a lot of those though are simply because I've been so used to using statically-typed languages. Time will tell, and I'm sure you all will hear more about it as time passes.&lt;/P&gt;
&lt;P&gt;NOTE: This doesn't mean that you will automatically write good tests by having this tool available to you. Also, I would say that you should try not to use this testing method every time either. There are better ways to test your code. However, in those situations where other roads aren't available, this could be a life saver (or so I imagine, since I actually haven't been able to use it in a production environment yet). &lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=23894"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=23894" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jolson/aggbug/23894.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Olson</dc:creator>
            <guid>http://geekswithblogs.net/jolson/archive/2005/02/19/23894.aspx</guid>
            <pubDate>Sun, 20 Feb 2005 03:15:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jolson/comments/23894.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jolson/archive/2005/02/19/23894.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jolson/comments/commentRss/23894.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jolson/services/trackbacks/23894.aspx</trackback:ping>
        </item>
        <item>
            <title>Link: Don't Cross Boundaries While Testing</title>
            <link>http://geekswithblogs.net/jolson/archive/2005/02/18/23570.aspx</link>
            <description>I was given &lt;A href="http://www.williamcaputo.com/archives/000019.html"&gt;this link&lt;/A&gt; by a co-worker to an article written about not crossing boundaries when writing unit tests (he originally saw the link posted by &lt;A href="http://weblogs.asp.net/wallen/archive/2005/02/17/375697.aspx"&gt;Wayne Allen&lt;/A&gt;). Highly recommended. It also contains some links inside that are worth checking out. Enjoy!&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=23570"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=23570" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jolson/aggbug/23570.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Olson</dc:creator>
            <guid>http://geekswithblogs.net/jolson/archive/2005/02/18/23570.aspx</guid>
            <pubDate>Sat, 19 Feb 2005 00:37:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jolson/comments/23570.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jolson/archive/2005/02/18/23570.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jolson/comments/commentRss/23570.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jolson/services/trackbacks/23570.aspx</trackback:ping>
        </item>
        <item>
            <title>Steve Jobs and NeXTSTEP</title>
            <link>http://geekswithblogs.net/jolson/archive/2005/01/31/21606.aspx</link>
            <description>&lt;P&gt;A co-worker forwarded me &lt;A href="http://www.openstep.se/jobs/"&gt;this URL&lt;/A&gt; that has some mirrored videos of a demonstration Steve Jobs gave on the capabilities of the NeXTSTEP system back in the day. Considering that this is quite a while ago, the display of the technology is all the more amazing. It appears that even with as much that the Mac took from Xerox PARC's Alto computer, the NeXTSTEP is perhaps the true technological predecessor to the Alto. Very interesting stuff indeed. Apparently, the NeXTSTEP was largely an object-oriented operating system. Some of the stuff you see in the video was truly ahead of its time (as was the Alto computer in the first place). &lt;/P&gt;
&lt;P&gt;You&amp;nbsp;can imagine where the computing world would be if the Alto or NeXTSTEP caught on like the PC did. Enjoy!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=21606"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=21606" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jolson/aggbug/21606.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Olson</dc:creator>
            <guid>http://geekswithblogs.net/jolson/archive/2005/01/31/21606.aspx</guid>
            <pubDate>Tue, 01 Feb 2005 00:47:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jolson/comments/21606.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jolson/archive/2005/01/31/21606.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jolson/comments/commentRss/21606.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jolson/services/trackbacks/21606.aspx</trackback:ping>
        </item>
        <item>
            <title>Managed DirectX Jobs</title>
            <link>http://geekswithblogs.net/jolson/archive/2005/01/27/21248.aspx</link>
            <description>Word comes along from Toronto-based game development firm &lt;A href="http://www.shortstackedstudios.com"&gt;Short Stacked Studio&lt;/A&gt; that they are in the process of hiring developers with C# and Managed DirectX experience for a new project. If you are at all interested, shoot off an email to &lt;A href="mailto:jobs@shortstackedstudios.com"&gt;jobs@shortstackedstudios.com&lt;/A&gt;.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=21248"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=21248" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jolson/aggbug/21248.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Olson</dc:creator>
            <guid>http://geekswithblogs.net/jolson/archive/2005/01/27/21248.aspx</guid>
            <pubDate>Fri, 28 Jan 2005 01:25:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jolson/comments/21248.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jolson/archive/2005/01/27/21248.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jolson/comments/commentRss/21248.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jolson/services/trackbacks/21248.aspx</trackback:ping>
        </item>
        <item>
            <title>Self Improvement / Continuous Integration</title>
            <link>http://geekswithblogs.net/jolson/archive/2005/01/10/19642.aspx</link>
            <description>&lt;P&gt;Before I get up on my soap-box on what I've been doing lately to improve myself as a developer, let me quickly list the development environment tools that I feel are MUST-HAVE tools for any developer serious about his craft (and they are all free):&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome%2Bto%2BCruiseControl.NET"&gt;CruiseControl.NET &lt;/A&gt;(or Draco.NET)&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://subversion.tigris.org"&gt;Subversion&lt;/A&gt; (or CVS or another form of Source Control (try to avoid Source Safe, even though it's better than nothing))&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://nant.sourceforge.net/"&gt;NAnt&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.nunit.org"&gt;NUnit&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://ncover.sourceforge.net/"&gt;NCover&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.gotdotnet.com/team/fxcop/"&gt;FXCop&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Well, in an effort to continue improving my development environment at home, I have&amp;nbsp;finished migrating&amp;nbsp;my source control system from CVS to Subversion. Last time I had used Subversion, it was still in Beta and the integration into Windows was only done through Cygwin. Well, I'm proud to say that Subversion has matured a lot since then. It has all the things I like about CVS, and doesn't have a lot of things that I don't like about CVS. Plus (and this is a big one for a refactorer like me), Subversion inherently supports file renaming. &lt;/P&gt;
&lt;P&gt;I've also been impressed by the quality in the tools that exist for Subversion. Right off the bat, after I installed &lt;A href="http://subversion.tigris.org/"&gt;Subversion&lt;/A&gt;, I installed both &lt;A href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN&lt;/A&gt; (a shell extension for Subversion, based on TortoiseCVS), and &lt;A href="http://ankhsvn.tigris.org/"&gt;AnkhSVN&lt;/A&gt; (a visual studio add-in for Subversion). Now I just need to read the online book for Subversion to make sure that I know how to properly maintain and backup this sucker. &lt;/P&gt;
&lt;P&gt;There are more improvements also. I have moved to &lt;A href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome%2Bto%2BCruiseControl.NET;jsessionid=62620219BEA434D24BB82FD1A110B14D"&gt;CruiseControl.Net&lt;/A&gt; for my continuous integration system. It seemed like CruiseControl.Net took a little longer to setup than Draco, but I think a lot of that is because of the configurability of this sucker. Man, I love it. One piece of advice I would like to give though (which I originally read from someone else), take baby steps when setting up CruiseControl.Net. Don't shoot for the whole she-bang from the get go. You will only cause much frustration for yourself. If you take one little piece at a time, the setup is quite manageable. I still have some more items to add, but for now I got CruiseControl building using NAnt, using Subversion for source control, and using FXCop for best practice validation. The next steps for this evening or to enable the integration with NUnit and NCover for testing. I have my personal web dashboard setup on my build machine already so NUnit and NCover are my last steps. Let me tell you this much, it feels absolutely great.&lt;/P&gt;
&lt;P&gt;I will try to make another post within the next couple days detailing what I did to enable building with NAnt from within Visual Studio without breaking the needed features of Visual Studio. That's right boys and girls, after much searching, I found a way to fire off NAnt when I press Ctrl+Shift+B within Visual Studio. Many of you may not care about this, but it was a pet peeve of mine to have two different build processes in my development environment (one with Visual Studio, and another with NAnt). It's pretty clever how it's done. It's just through a C++ MakeFile project. I originally found a link on how to do it on the NAnt Wiki. &lt;/P&gt;
&lt;P&gt;Anyways, I'm rambling, I will get to that in a later post. I mostly wanted to let you all know that I haven't dropped off the face of the earth. Hopefully by the next time I fire up a post here, I will be a proud developer willing to boast about my personal continuous integration development environment :). That may not sound like much, but I can't emphasize how many headaches you will save yourself by setting this stuff up, not to mention how much of a better developer you will be by practicing/implementing development best practices. &lt;/P&gt;
&lt;P&gt;Just do this for me, if you're not already, put *ALL* of your code into some sort of Source Control. I don't mean burning a CD of all your source code (although that's certainly better than nothing), I mean an actual source control system. There is no excuse not to. Of all the tools I mentioned above, CruiseControl.NET, Subversion, NUnit, NAnt, NCover, and FXCop are all free. And many of them are open source too. &amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=19642"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=19642" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jolson/aggbug/19642.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Olson</dc:creator>
            <guid>http://geekswithblogs.net/jolson/archive/2005/01/10/19642.aspx</guid>
            <pubDate>Tue, 11 Jan 2005 02:48:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jolson/comments/19642.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jolson/archive/2005/01/10/19642.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jolson/comments/commentRss/19642.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jolson/services/trackbacks/19642.aspx</trackback:ping>
        </item>
        <item>
            <title>Open Source and Managed DirectX</title>
            <link>http://geekswithblogs.net/jolson/archive/2005/01/06/19318.aspx</link>
            <description>&lt;P&gt;I'm posting this question out there because I can't really read legalese, and I don't have much experience with licensing issues. I'm in the middle of researching open source and free software some more to see how much I want to adapt it with my personal projects. I was thinking that I want to release all code on Managed World as &lt;A href="http://www.opensource.org/docs/certification_mark.php"&gt;OSI Certified&lt;/A&gt; Open Source Software. However, does the EULA for Managed DirectX allow me to distribute my applications built with Managed DirectX as open source software. That is to say, if I build a game in C# with Managed DirectX, am I legally capable of distributing that game under the CPL, GPL, or MIT licenses?&lt;/P&gt;
&lt;P&gt;If you can shed any light on this issue for me, please do as I'm kind of lost in the sea of legalese right now. Thanks :).&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=19318"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=19318" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jolson/aggbug/19318.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Olson</dc:creator>
            <guid>http://geekswithblogs.net/jolson/archive/2005/01/06/19318.aspx</guid>
            <pubDate>Thu, 06 Jan 2005 22:02:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jolson/comments/19318.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jolson/archive/2005/01/06/19318.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jolson/comments/commentRss/19318.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jolson/services/trackbacks/19318.aspx</trackback:ping>
        </item>
        <item>
            <title>Managed World - Tom Miller Interview</title>
            <link>http://geekswithblogs.net/jolson/archive/2005/01/04/19167.aspx</link>
            <description>I have posted an interview I did with Tom Miller over at Managed World. You can find the interview &lt;A href="http://members.gamedev.net/managedworld/articles/interviews/tommiller.html"&gt;here&lt;/A&gt;. Enjoy my friends!!&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=19167"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=19167" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jolson/aggbug/19167.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Olson</dc:creator>
            <guid>http://geekswithblogs.net/jolson/archive/2005/01/04/19167.aspx</guid>
            <pubDate>Tue, 04 Jan 2005 23:47:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jolson/comments/19167.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jolson/archive/2005/01/04/19167.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jolson/comments/commentRss/19167.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jolson/services/trackbacks/19167.aspx</trackback:ping>
        </item>
    </channel>
</rss>