<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>geek# &#187; .NET</title>
	<atom:link href="http://geeksharp.com/tag/dotnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://geeksharp.com</link>
	<description>techno-babble for the masses</description>
	<lastBuildDate>Thu, 27 May 2010 14:57:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>EF4: Bug in StoreGeneratedPattern SSDL</title>
		<link>http://geeksharp.com/2010/05/27/ef4-bug-in-storegeneratedpattern-ssdl/</link>
		<comments>http://geeksharp.com/2010/05/27/ef4-bug-in-storegeneratedpattern-ssdl/#comments</comments>
		<pubDate>Thu, 27 May 2010 14:57:24 +0000</pubDate>
		<dc:creator>Scott Anderson</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Entity Framework 4]]></category>

		<guid isPermaLink="false">http://geeksharp.com/2010/05/27/ef4-bug-in-storegeneratedpattern-ssdl/</guid>
		<description><![CDATA[Recently at work, I’ve had the pleasure of working on a new project written in ASP.NET MVC2 under .NET 4.0.&#160; Our team has decided to use Entity Framework 4 for data access, and for the most part, we’ve been very pleased with this decision.&#160; One of the things I tend to make use of pretty [...]]]></description>
			<content:encoded><![CDATA[<p>Recently at work, I’ve had the pleasure of working on a new project written in ASP.NET MVC2 under .NET 4.0.&#160; Our team has decided to use Entity Framework 4 for data access, and for the most part, we’ve been very pleased with this decision.&#160; One of the things I tend to make use of pretty regularly is default values for columns in SQL server.&#160; In doing this, I’ve encountered a pretty nasty bug in EF4.&#160; Here’s the deal:</p>
</p>
<p>I have several tables in my application where I add some basic auditing columns, such as CreateDate, CreatedBy, LastUpdatedDate, and LastUpdatedBy.&#160; These columns are pretty self explanatory, and I prefer to use the SQL GETDATE() function as the default value for the date columns.&#160; This way I don’t have to worry about setting these dates when a new row is inserted, because SQL will handle it for me.</p>
<p>The first thing you have to do is tell EF4 that these columns are computed by SQL server.&#160; The way you do this is by opening the Entity Data Model (EDM) and finding the matching columns in each entity.&#160; Once you select a column, check out the Properties pane for the column.&#160; You should see something like this:</p>
<p><a href="http://geeksharp.com/wp-content/uploads/2010/05/columnproperties.png"><img style="border-right-width: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="column-properties" border="0" alt="column-properties" src="http://geeksharp.com/wp-content/uploads/2010/05/columnproperties_thumb.png" width="289" height="409" /></a> Notice that I’ve highlighted the <strong>StoreGeneratedPattern</strong> property in this image.&#160; This property tells EF4 how to handle the default value of this column.&#160; More specifically, toggling this property to <strong>Computed</strong> will tell EF4 that you want the database to handle initializing this property for you.&#160; If you don’t set this properly, EF4 will attempt to insert the default value for whatever data type the column is.&#160; In this case, in .NET 4.0, the <strong>DateTime</strong> default is <strong>DateTime.MinValue</strong>, which is “1/1/1 00:00:00.000.”&#160; If you try to insert this into a regular SQL <strong>datetime</strong> field, you’ll generate an exception because SQL’s regular <strong>datetime</strong> type cannot handle a date that far in the past.</p>
<p>One would think that simply setting <strong>StoreGeneratedPattern</strong> to <strong>Computed</strong> would fix this problem (and it actually should), however there’s a nice bug in the EDM designer that prevents this from working as intended.&#160; Basically, EF4 EDM’s are broken into a few areas.&#160; You have the SSDL, which is how the EDM describes your database objects and their relationships (think storage models).&#160; Then there is the CSDL which is how your entities themselves are defined (think classes).&#160; Finally there’s the mapping layer which acts as the man in between the SSDL and CSDL.&#160; It’s in charge of mapping the storage models in the SSDL with the entity models in the CSDL.</p>
<p>So what about this bug?&#160; Well, the problem is that when you change the <strong>StoreGeneratedPattern</strong> property in the EDM designer, only the CSDL is updated.&#160; The SSDL is left in the dark about this change, and because of that, you will continue to experience the out of range exceptions generated above.&#160; There is a way, however, to fix this problem if you aren’t afraid of cracking open an text editor.</p>
<p>First you need to open your *.edmx file in any text editor.&#160; I prefer to use one with XML syntax highlighting just because it makes things easier to find, and it helps me avoid typos.&#160; Right at the top of the file, you should see the SSDL defined.&#160; First you will see the main tables defined, followed by any relationships.&#160; Finally you will start to see your tables defined as storage models like this:</p>
<pre class="brush: xml;">&lt;EntityType Name=&quot;tblAnswerDefinitions&quot;&gt;
  &lt;Key&gt;
    &lt;PropertyRef Name=&quot;AnswerDefinitionID&quot; /&gt;
  &lt;/Key&gt;
  &lt;Property Name=&quot;AnswerDefinitionID&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; StoreGeneratedPattern=&quot;Identity&quot; /&gt;
  &lt;Property Name=&quot;QuestionID&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;AnswerTypeID&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;Value&quot; Type=&quot;varchar&quot; Nullable=&quot;false&quot; MaxLength=&quot;50&quot; /&gt;
  &lt;Property Name=&quot;Points&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;IsDeleted&quot; Type=&quot;bit&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;CreatedBy&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;CreatedDate&quot; Type=&quot;datetime&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;LastUpdatedBy&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;LastUpdatedDate&quot; Type=&quot;datetime&quot; Nullable=&quot;false&quot; /&gt;
&lt;/EntityType&gt;</pre>
<p>Notice that the CreatedDate and LastUpdatedDate columns don’t have the <strong>StoreGeneratedPattern</strong> property set, even though we’ve defined them in the EDM designer!&#160; The fix is to simply change the lines and add the property.&#160; When you’re done, it will look like this:</p>
<pre class="brush: xml;">&lt;EntityType Name=&quot;tblAnswerDefinitions&quot;&gt;
  &lt;Key&gt;
    &lt;PropertyRef Name=&quot;AnswerDefinitionID&quot; /&gt;
  &lt;/Key&gt;
  &lt;Property Name=&quot;AnswerDefinitionID&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; StoreGeneratedPattern=&quot;Identity&quot; /&gt;
  &lt;Property Name=&quot;QuestionID&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;AnswerTypeID&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;Value&quot; Type=&quot;varchar&quot; Nullable=&quot;false&quot; MaxLength=&quot;50&quot; /&gt;
  &lt;Property Name=&quot;Points&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;IsDeleted&quot; Type=&quot;bit&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;CreatedBy&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;CreatedDate&quot; Type=&quot;datetime&quot; Nullable=&quot;false&quot; StoreGeneratedPattern=&quot;Computed&quot; /&gt;
  &lt;Property Name=&quot;LastUpdatedBy&quot; Type=&quot;int&quot; Nullable=&quot;false&quot; /&gt;
  &lt;Property Name=&quot;LastUpdatedDate&quot; Type=&quot;datetime&quot; Nullable=&quot;false&quot; StoreGeneratedPattern=&quot;Computed&quot; /&gt;
&lt;/EntityType&gt;</pre>
<p>The final step is to save the EDMX file, and then open it in Visual Studio.&#160; Make a minor change (like moving the position of one of the entities in the design view), and then save it.&#160; Once the file is saved, the code generator will re-run, and the problem should be solved.&#160; One other pretty annoying thing I’ve noticed is that if you ever have to set another field’s <strong>StoreGeneratedPattern</strong> property, you actually have to repeat this entire process for all fields, because the designer will wipe out your manual changes.&#160; There is a <a href="http://connect.microsoft.com/VisualStudio/feedback/details/505178/storegeneratedpattern-property-in-ado-net-entity-model-designer-sets-cdsl-annotation-but-not-ssdl-attribute" target="_blank">Microsoft Connect ticket</a> open on this issue, but it has been closed as fixed.&#160; It’s most definitely not fixed, so it could use your attention!&#160; Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://geeksharp.com/2010/05/27/ef4-bug-in-storegeneratedpattern-ssdl/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010 Context Menus&#8230;WTF?</title>
		<link>http://geeksharp.com/2010/04/13/visual-studio-2010-context-menuswtf/</link>
		<comments>http://geeksharp.com/2010/04/13/visual-studio-2010-context-menuswtf/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 20:10:27 +0000</pubDate>
		<dc:creator>Scott Anderson</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Geek Rage]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://geeksharp.com/2010/04/13/visual-studio-2010-context-menuswtf/</guid>
		<description><![CDATA[So I know it’s been a while since my last post, but I just couldn’t resist this one.&#160; Here at work, we’re upgrading to Visual Studio 2010 since it’s finally been released, and overall I’m very pleased with the latest and greatest from Microsoft.&#160; During the testing phases I installed the Beta 2 and RC [...]]]></description>
			<content:encoded><![CDATA[<p>So I know it’s been a while since my last post, but I just couldn’t resist this one.&#160; Here at work, we’re upgrading to Visual Studio 2010 since it’s finally been released, and overall I’m very pleased with the latest and greatest from Microsoft.&#160; During the testing phases I installed the Beta 2 and RC versions of VS2010, and aside from horrible performance in the beta (which was later fixed), I’ve always been relatively happy.</p>
<p>Today, however, I came across perhaps one of the most ridiculous design flaws I’ve ever seen.&#160; Anyone that uses Visual Studio will tell you that the right-click context menus in the solution explorer are critical.&#160; As developers we’re constantly right-clicking stuff in solution explorer and accessing the “Properties” command or perhaps some source control commands.&#160; Much to my surprise, Microsoft decided to implement <strong>scrolling</strong> in these context menus for reasons unknown to me.&#160; Check this out:</p>
<p><a href="http://geeksharp.com/wp-content/uploads/2010/04/scrollingcontext1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="scrollingcontext" border="0" alt="scrollingcontext" src="http://geeksharp.com/wp-content/uploads/2010/04/scrollingcontext_thumb1.png" width="565" height="484" /></a> </p>
<p>Now before you reply telling me about a lack of screen real estate, let me ensure you that this isn’t the problem.&#160; It has some sort of weird dependency on the item you click being positioned somewhere near the center of the solution explorer.&#160; For example: if I simply expand a few more folders and force the selected item closer to the bottom of the solution explorer, the context menu renders fine:</p>
<p><a href="http://geeksharp.com/wp-content/uploads/2010/04/scrollingcontextfixed1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="scrollingcontextfixed" border="0" alt="scrollingcontextfixed" src="http://geeksharp.com/wp-content/uploads/2010/04/scrollingcontextfixed_thumb1.png" width="567" height="438" /></a> </p>
<p><a href="http://connect.microsoft.com/VisualStudio/feedback/details/532806/context-menus-open-in-scrolling-mode-while-there-is-place-to-show-the-whole-menu" target="_blank">This issue was reported in February</a>.&#160; Remember when Microsoft delayed the release of VS2010 to fix some speed and usability issues?&#160; Why wasn’t this fixed?&#160; GRRRRR!&#160; <a href="https://connect.microsoft.com/VisualStudio/feedback/details/532806/context-menus-open-in-scrolling-mode-while-there-is-place-to-show-the-whole-menu" target="_blank">Please vote on the Microsoft Connect issue</a> to get this fixed as soon as possible.&#160; Asking us to wait until SP1 is asinine.</p>
]]></content:encoded>
			<wfw:commentRss>http://geeksharp.com/2010/04/13/visual-studio-2010-context-menuswtf/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Switching to OSX Full-Time</title>
		<link>http://geeksharp.com/2010/01/14/switching-to-osx-full-time/</link>
		<comments>http://geeksharp.com/2010/01/14/switching-to-osx-full-time/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 03:33:12 +0000</pubDate>
		<dc:creator>Scott Anderson</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[VMWare]]></category>

		<guid isPermaLink="false">http://geeksharp.com/2010/01/14/switching-to-osx-full-time/</guid>
		<description><![CDATA[I’ve been stuck for a while now.&#160; There are so many amazing technologies and frameworks out there, and I’ve finally decided to devote some serious time to one of the best (in my opinion) which is Rails.&#160; I know I’ve talked about this in the past, and, frankly, I’ve been either too busy or too [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been stuck for a while now.&#160; There are so many amazing technologies and frameworks out there, and I’ve finally decided to devote some serious time to one of the best (in my opinion) which is Rails.&#160; I know I’ve talked about this in the past, and, frankly, I’ve been either too busy or too lazy to seriously devote time to it.&#160; But this year I’ve decided to make a resolution to seriously learn Rails by rebuilding this blog with it.&#160; I know there are a million blog platforms out there, especially when you consider the fact that every geek seems to write their own.&#160; I know I’m going to be re-inventing the wheel here, and I am in no way disappointed with WordPress.&#160; But the best way for me to learn is to just dive in head-first and get my hands dirty, so that’s exactly what I’m doing.</p>
<p>In the spirit of truly immersing myself in Rails development, I’ve come to realize that even though it’s 100% possible to write Rails applications on Windows, the experience is less than ideal.&#160; I’m sure some of you out there are very successful Rails developers using Windows as your primary OS and more power to you!&#160; But this is my journey, and I feel like I really should use the best-of-breed development environment for the task at hand, and Windows just isn’t going to cut it.&#160; So… I decided that OSX was the best for me.&#160; It seems like the vast majority of the Rails community uses OSX for development, and I don’t mind following in their well-established footsteps!</p>
<p>“But wait!,” I hear you say, “Aren’t you a .NET developer, and don’t you have production websites running on ASP.NET MVC?”&#160; Ah, yes, my fair reader, you are correct!&#160; But in today’s world of virtualization, especially on an OSX host, there’s no reason you can’t run your entire .NET development environment inside a beefy VM, and my main machine is definitely beefy enough to handle it!&#160; See for yourself:</p>
<p><a href="http://geeksharp.com/wp-content/uploads/2010/01/vs2008onOSX.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="vs2008onOSX" border="0" alt="vs2008onOSX" src="http://geeksharp.com/wp-content/uploads/2010/01/vs2008onOSX_thumb.png" width="643" height="403" /></a> </p>
<p>On my main machine, I’m actually running Snow Leopard now.&#160; I installed OSX 10.6 from a retail DVD (thanks Apple Store!) and I’m loving every minute of it.&#160; My virtual machine is a Windows 7 32-bit install with the “Windows Classic” theme because it honestly looks cleaner to me.&#160; VMWare Fusion makes all of this possible, and I couldn’t be happier.&#160; My performance is rock solid, so far.&#160; And the best part is, now I can work in the best .NET environment through sweet virtualization, and the best Rails environment because let’s face it:&#160; TextMate on OSX is sexy as hell:</p>
<p><a href="http://geeksharp.com/wp-content/uploads/2010/01/railsdevosx.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="railsdevosx" border="0" alt="railsdevosx" src="http://geeksharp.com/wp-content/uploads/2010/01/railsdevosx_thumb.png" width="643" height="403" /></a> </p>
<p>If there’s interest in a more specific outline of how I got all this set up, I could definitely make a “How To” post or maybe a screencast that details everything.</p>
]]></content:encoded>
			<wfw:commentRss>http://geeksharp.com/2010/01/14/switching-to-osx-full-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Web Platform Installer</title>
		<link>http://geeksharp.com/2009/11/29/microsoft-web-platform-installer/</link>
		<comments>http://geeksharp.com/2009/11/29/microsoft-web-platform-installer/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 23:20:00 +0000</pubDate>
		<dc:creator>Scott Anderson</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General Information]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Windows Server]]></category>

		<guid isPermaLink="false">http://geeksharp.com/2009/11/29/microsoft-web-platform-installer/</guid>
		<description><![CDATA[A while back I wrote about my experiences installing SQL (and additionally .NET 3.5 SP1) on a Windows Server 2008 VPS.&#160; For various reasons I decided not to keep the VPS server at the time (mostly because of the cost, and the fact that I didn’t really have a strong need for it).&#160; Recently, however, [...]]]></description>
			<content:encoded><![CDATA[<p>A while back I wrote about my experiences installing SQL (and additionally .NET 3.5 SP1) on a Windows Server 2008 VPS.&#160; For various reasons I decided not to keep the VPS server at the time (mostly because of the cost, and the fact that I didn’t really have a strong need for it).&#160; Recently, however, I’ve really begun to ramp up my ASP.NET MVC development work, and it’s blatantly apparent that I need a Windows server full time.&#160; After shopping around for a while, I decided to go back to <a href="http://www.kickassvps.com/" target="_blank">KickAssVPS.com</a> and see what their packages looked like.&#160; Having ordered my shiny new VPS, the next step was to get the environment configured for hosting my MVC applications.</p>
<p>Earlier this year I attended MIX09, and one of the key takeaways was the <a href="http://www.microsoft.com/web/Downloads/platform.aspx" target="_blank">Microsoft Web Platform Installer</a>.&#160; Microsoft has realized that for the “average Joe,” setting up a new Windows-based web server with all the necessary configurations and supporting frameworks can be rather cumbersome.&#160; This is even more obvious when you begin to work with IIS7, given the fact that the administration system has changed drastically.&#160; The idea behind this specialized installer is to perform all of the work for you.&#160; Sounds neat, huh?&#160; Well after screwing around with my VPS for hours, I can tell you that things aren’t exactly as easy as they seem.&#160; To make a very long story quite a bit shorter, I’ve found through my troubles that things need to be installed in a very specific order:</p>
<ol>
<li>Grab the <a href="http://www.microsoft.com/web/Downloads/platform.aspx" target="_blank">Web Platform Installer</a>. </li>
<li>Open the “Web Platform” tab and ensure that you only install components from the “Web Server” and “Frameworks and Runtimes” sections.&#160; You might be tempted to add in SQL Server 2008 Express, but <strong>don’t</strong>.&#160; Trust me when I tell you this. </li>
<li>Once everything is finished (which will take forever), now you can attempt to install the SQL Server 2008 Express SP1 package, but don’t bother with the Express Management Studio because it will fail no matter what.&#160; If you must have this package, I recommend purchasing a license for Microsoft SQL Server Developer edition and installing only the client tools on the VPS.&#160; No matter which way I tried, I could never get the Express Management Studio to install properly. </li>
<li>Pray to the Microsoft gods that everything goes without a hitch. </li>
<li>If you’re lucky, you have a working Windows-based web server. </li>
</ol>
<p>Good luck to the brave souls that wish to venture into this territory.&#160; I had nothing but issues with it and I wonder if I wouldn’t have been more successful if I’d have just done it manually from the start.&#160; Perhaps these issues are just because of the VPS environment that I’m installing in, but I can’t be the only one out there that uses a virtual server for their web deployments!</p>
]]></content:encoded>
			<wfw:commentRss>http://geeksharp.com/2009/11/29/microsoft-web-platform-installer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning Rails (and Ruby too!)</title>
		<link>http://geeksharp.com/2009/06/06/learning-rails-and-ruby-too/</link>
		<comments>http://geeksharp.com/2009/06/06/learning-rails-and-ruby-too/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 04:16:19 +0000</pubDate>
		<dc:creator>Scott Anderson</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://geeksharp.com/2009/06/06/learning-rails-and-ruby-too/</guid>
		<description><![CDATA[Over the past couple days I’ve been reading what’s shaping up to be an excellent book about Ruby on Rails called “Agile Web Development with Rails (Third Edition).”&#160; This book takes a practical approach to teaching Rails by building a demonstration shopping cart application called “Depot.”&#160; I must say that, so far, learning Rails has [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past couple days I’ve been reading what’s shaping up to be an excellent book about <a href="http://rubyonrails.org/" target="_blank">Ruby on Rails</a> called “<a href="http://www.pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition" target="_blank">Agile Web Development with Rails (Third Edition)</a>.”&#160; This book takes a practical approach to teaching Rails by building a demonstration shopping cart application called “Depot.”&#160; I must say that, so far, learning Rails has been a complete pleasure.&#160; I really enjoy the MVC methodology and the idea of “convention over configuration.”&#160; The basic idea behind Rails is that we (as web developers) generally know what we’re doing, and we can follow some simple default conventions to avoid the mountains of configuration files that are so common in other technologies and frameworks (ASP.NET is a prime example of those “other” technologies).</p>
<p>Over the next few weeks I plan on spending a lot more time with Rails and <a href="http://www.asp.net/mvc/" target="_blank">ASP.NET MVC</a>.&#160; My end goal is to present an overview of the benefits and faults of each technology, and hopefully I can provide a somewhat objective point of view for people new to MVC.&#160; Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://geeksharp.com/2009/06/06/learning-rails-and-ruby-too/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Password Hashing in .NET</title>
		<link>http://geeksharp.com/2009/05/15/mysql-password-hashing-in-net/</link>
		<comments>http://geeksharp.com/2009/05/15/mysql-password-hashing-in-net/#comments</comments>
		<pubDate>Fri, 15 May 2009 15:01:08 +0000</pubDate>
		<dc:creator>Scott Anderson</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Useful Tricks]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SHA1]]></category>

		<guid isPermaLink="false">http://geeksharp.com/2009/05/15/mysql-password-hashing-in-net/</guid>
		<description><![CDATA[As I was surfing through StackOverflow today, I noticed a question that got me thinking.&#160; This developer had been working with a classic ASP application that used MySQL for it’s backend database.&#160; The project on his plate was to convert this application to ASP.NET with MS-SQL as the database.&#160; The only problem he encountered was [...]]]></description>
			<content:encoded><![CDATA[<p>As I was surfing through <a href="http://stackoverflow.com/questions/868482/simulating-mysqls-password-encryption-using-net-or-ms-sql/" target="_blank">StackOverflow</a> today, I noticed a question that got me thinking.&#160; This developer had been working with a classic ASP application that used MySQL for it’s backend database.&#160; The project on his plate was to convert this application to ASP.NET with MS-SQL as the database.&#160; The only problem he encountered was the fact that passwords were stored in the database using a MySQL-specific hashing algorithm called via the PASSWORD() function.&#160; He needed a way to convert these passwords to .NET.</p>
<p>Given that I have a MySQL database laying around, I decided to poke around in the source code to see exactly how MySQL’s PASSWORD() function really works.&#160; It didn’t take me long to find inside the file “libmysql/password.c” this little gem:</p>
<pre class="brush: objc;">/*
    MySQL 4.1.1 password hashing: SHA conversion (see RFC 2289, 3174) twice
    applied to the password string, and then produced octet sequence is
    converted to hex string.
    The result of this function is used as return value from PASSWORD() and
    is stored in the database.
  SYNOPSIS
    make_scrambled_password()
    buf       OUT buffer of size 2*SHA1_HASH_SIZE + 2 to store hex string
    password  IN  NULL-terminated password string
*/

void
make_scrambled_password(char *to, const char *password)
{
  SHA1_CONTEXT sha1_context;
  uint8 hash_stage2[SHA1_HASH_SIZE];

  mysql_sha1_reset(&amp;sha1_context);
  /* stage 1: hash password */
  mysql_sha1_input(&amp;sha1_context, (uint8 *) password, (uint) strlen(password));
  mysql_sha1_result(&amp;sha1_context, (uint8 *) to);
  /* stage 2: hash stage1 output */
  mysql_sha1_reset(&amp;sha1_context);
  mysql_sha1_input(&amp;sha1_context, (uint8 *) to, SHA1_HASH_SIZE);
  /* separate buffer is used to pass 'to' in octet2hex */
  mysql_sha1_result(&amp;sha1_context, hash_stage2);
  /* convert hash_stage2 to hex string */
  *to++= PVERSION41_CHAR;
  octet2hex(to, (const char*) hash_stage2, SHA1_HASH_SIZE);
}</pre>
<p>As you can see, the password algorithm uses a double-SHA1 hash to format the password.&#160; The other little tidbit is that any passwords generated post-4.1 will be pre-pended with an asterisk (*).&#160; Given that I have spent a fair amount of time recently working with cryptography in .NET, it didn’t take long to adapt this code to C#.&#160; The following function produces the same output as the MySQL PASSWORD() function.</p>
<pre class="brush: csharp;">public string GeneralteMySQLHash(string key)
{
    byte[] keyArray = Encoding.UTF8.GetBytes(key);
    SHA1Managed enc = new SHA1Managed();
    byte[] encodedKey = enc.ComputeHash(enc.ComputeHash(keyArray));
    StringBuilder myBuilder = new StringBuilder(encodedKey.Length);

    foreach (byte b in encodedKey)
        myBuilder.Append(b.ToString(&quot;X&quot;));

    return &quot;*&quot; + myBuilder.ToString();
}</pre>
<p>I hope this helps someone out there. I know it was kinda of fun to put on my super-slueth hat for a while <img src='http://geeksharp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><strong>Update 5/29/2009:</strong> I found a neat way to do this in T-SQL also.  It&#8217;s a bit ugly, but it works!</p>
<pre class="brush: sql;">SELECT '*' + SUBSTRING(master.dbo.fn_varbintohexstr(HASHBYTES('SHA1',HASHBYTES('SHA1','VALUE-TO-ENCRYPT-GOES-HERE'))),1,42)</pre>
]]></content:encoded>
			<wfw:commentRss>http://geeksharp.com/2009/05/15/mysql-password-hashing-in-net/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>.NET 3.5 SP1 on a Windows 2008 VPS</title>
		<link>http://geeksharp.com/2009/05/05/net-35-sp1-on-a-windows-2008-vps/</link>
		<comments>http://geeksharp.com/2009/05/05/net-35-sp1-on-a-windows-2008-vps/#comments</comments>
		<pubDate>Tue, 05 May 2009 16:42:39 +0000</pubDate>
		<dc:creator>Scott Anderson</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General Information]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[vps]]></category>
		<category><![CDATA[Windows Server]]></category>

		<guid isPermaLink="false">http://geeksharp.com/2009/05/05/net-35-sp1-on-a-windows-2008-vps/</guid>
		<description><![CDATA[Recently I’ve been debating moving my site over to a Windows VPS.&#160; If I make this move, I’m hoping to take advantage of the new features available in Windows Server 2008 as well as .NET 3.5 SP1 and IIS 7.&#160; After some preliminary research, I decided to give KickAssVPS.com a try.&#160; Within a few hours [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I’ve been debating moving my site over to a Windows VPS.&#160; If I make this move, I’m hoping to take advantage of the new features available in Windows Server 2008 as well as .NET 3.5 SP1 and IIS 7.&#160; After some preliminary research, I decided to give <a href="http://www.kickassvps.com/" target="_blank">KickAssVPS.com</a> a try.&#160; Within a few hours of my order, they had my VPS up and running, and so far I’ve been fairly pleased with the performance.</p>
<p>When I logged into my VPS, one of the things I wanted to install right away was SQL Server 2008.&#160; In order for SQL Server 2008 to install, you must first have installed the Microsoft .NET Framework 3.5 SP1.&#160; I figured it was no big deal and decided to let SQL handle my install.&#160; Once the installer got going, it immediately halted and displayed an error message telling me it couldn’t be installed.&#160; After checking the log file, I found the following:</p>
<blockquote><p>WapUI: [2] DepCheck indicates Microsoft .NET Framework 2.0SP1 (x64) (CBS) is not installed. </p></blockquote>
<p>Obviously on Windows Server 2008 SP1, the .NET Framework 2.0SP1 is already installed by default.&#160; Just to prove it to myself, I downloaded and ran the installer.&#160; Sure enough, it failed before it even started, telling me that it could not be installed on Windows Vista.&#160; So I began to poke around the VPS.&#160; One of the things that jumped out at me was the fact that the Windows Update service was disabled.&#160; When I checked with my VPS provider’s documentation, they indicated that Windows updates must be disabled because they are slipstreamed into the OS build.&#160; Updating your VPS through Windows Update can (and probably will) break it.&#160; Yikes!</p>
<p>After a bit more searching, I found a solution to the problem.&#160; It turns out that the .NET Framework 3.5 SP1 installer requires the Windows Update service to be running, but you can still set your server to “Never check for updates.”&#160; By temporarily enabling the Windows Update service, I was able to install .NET 3.5 SP1 without a hitch.&#160; I hope this helps anyone else using a VPS, because it sure gave me a little bit of a headache!</p>
]]></content:encoded>
			<wfw:commentRss>http://geeksharp.com/2009/05/05/net-35-sp1-on-a-windows-2008-vps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
