<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Ryan Lanciaux</title>
    <description>New Media Mercenary</description>
    <link>http://www.ryanlanciaux.com/ryanlanciaux/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.0.0.36</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://www.ryanlanciaux.com/ryanlanciaux/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Ryan Lanciaux</dc:creator>
    <dc:title>Ryan Lanciaux</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RyanLanciaux" /><feedburner:info uri="ryanlanciaux" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Gherkin style specification testing in .NET</title>
      <description>&lt;div style="float: right"&gt;&lt;script src="http://tweetmeme.com/i/scripts/button.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;&lt;a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development" target="_blank"&gt;Behavior Driven Development&lt;/a&gt; is something that has interested me forquite awhile. I have constantly tried to write my tests as clear andconcise as possible but once I saw &lt;a href="http://cukes.info/" target="_blank"&gt;Cucumber for Ruby&lt;/a&gt; that became thenew standard for what I was trying to achieve in .NET. This is where&lt;a href="http://specflow.org/" target="_blank"&gt;SpecFlow &lt;/a&gt;comes in.&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;SpecFlow is a BDD library for .NET that aimsto add testing capabilities that are similar to  &lt;a href="http://cukes.info/" target="_blank"&gt;Cucumber&lt;/a&gt; -- that is,specifications are written in human readable Gherkin Format. From the&lt;a href="http://specflow.org/" target="_blank"&gt;project site&lt;/a&gt;:&amp;nbsp;&lt;/p&gt;&lt;blockquote&gt;	&lt;a href="http://specflow.org/" target="_blank"&gt;SpecFlow &lt;/a&gt;aims at bridging the communication gap between domain experts	and developers by binding business readable behavior specifications to	the underlying implementation. &lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;In theory, I really like that domain experts could write the specifications but I would be interested in seeing how that works out. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;So what exactly is this Gherkin format?&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;According to the &lt;a href="http://wiki.github.com/aslakhellesoy/cucumber/gherkin" target="_blank"&gt;Gherkin project&lt;/a&gt; on github, &amp;#39;Gherkin is the language that Cucumber understands. It is a &lt;a href="http://martinfowler.com/bliki/BusinessReadableDSL.html"&gt;Business Readable, Domain Specific Language&lt;/a&gt; that lets you describe software&amp;rsquo;s behaviour without detailing how that behaviour is implemented.&amp;#39; In other words, its a common DSL for describing the required functionality for a given system.&amp;nbsp;&lt;/p&gt;&lt;p&gt;This functionality is typically broken down by feature and each feature has a number of scenarios. A scenario is made up of 3 steps: GIVEN, WHEN and THEN (which seems to somewhat loosely correspond to Arrange, Act, Assert) and in a simplistic world, looks a little like this:&lt;/p&gt;&lt;blockquote&gt;	GIVEN an admin user&lt;br /&gt;	WHEN user requests top secret data&lt;br /&gt;	THEN return the list of data &lt;br /&gt;&lt;/blockquote&gt;If you want to learn more about the Gherkin format check out &lt;a href="http://www.engineyard.com/blog/2009/cucumber-introduction/" target="_blank"&gt;Engine Yard&amp;#39;s Introduction to BDD with Cucumber by Dave Astels&lt;/a&gt;  or &lt;a href="http://wiki.github.com/aslakhellesoy/cucumber/given-when-then" target="_blank"&gt;Given-When-Then by Aslak Helles&amp;oslash;y&lt;/a&gt;&lt;p&gt;&lt;strong&gt;Quick Synopsis&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I&amp;#39;ve recently started to move my blog over to a new server and a new root domain name; this could have an adverse affect on inbound links. In order to make sure this move was successful, I wanted to write an app to perform 301 redirects from the old URL to the new one. &lt;/p&gt;&lt;p&gt;There are a number of &lt;a href="http://www.singingeels.com/Blogs/Nullable/2007/09/14/URL_ReWriting_The_Right_Way_Its_Easy.aspx" target="_blank"&gt;examples out there already for performing 301s&lt;/a&gt; but I wanted to make sure I was testing the code -- It seemed like a great opportunity to get a little more use out of SpecFlow. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Initial Setup&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;	&lt;li&gt;&lt;a href="http://specflow.org/getdoc/b647f699-ff30-48db-9bd5-db6dc45016e8/SpecFlowSetup_v1-1-0.aspx" target="_blank"&gt;Download and run the SpecFlow installer &lt;/a&gt;&lt;/li&gt;	&lt;li&gt;Create a new Project and add a reference to SpecFlow and NUnit Framework&lt;/li&gt;	&lt;li&gt;Add references to your mocking framework (this example is using &lt;a href="http://code.google.com/p/moq/" target="_blank"&gt;Moq&lt;/a&gt;)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;On with the code!&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;After all the references are sorted out add a SpecFlow feature. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ryanlanciaux.com/ryanlanciaux/image.axd?picture=templates.gif" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;The feature file is where we&amp;#39;re going to define our specifications. I want to make sure that when a request is made to the old root it will get redirect to the new root url. So here is what the feature looks like initially:&lt;/p&gt;&lt;blockquote style="width: 550px"&gt;	Feature: Redirection &lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; In order to not upset the google&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; As a blogger who almost never has the time to blog&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; I want to redirect my old url to my new one &lt;br /&gt;	&lt;br /&gt;	Scenario: Redirect root request&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; Given I have entered a request to http://www.frickinsweet.com/ryanlanciaux.com&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; And the old url is frickinsweet.com/ryanlanciaux.com&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; And my new url is ryanlanciaux.com&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; When the request is made&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; Then the response url is http://www.ryanlanciaux.com&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; And the response has a 301 in the status &lt;/blockquote&gt;&lt;p&gt;Notice that over in the Solution Explorer window you can expand the feature to reveal a .cs file. &lt;br /&gt;&lt;img src="http://www.ryanlanciaux.com/ryanlanciaux/image.axd?picture=solution_explorer.gif" alt="" /&gt;&lt;br /&gt;The class is an auto-generated file that updates when the .feature file is changed. We can run this through our test runner to watch it fail and get some extra information as to why it failed. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.ryanlanciaux.com/ryanlanciaux/image.axd?picture=test_runner.gif" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;The tests are failing because there is no real definition to the scenario steps. We can almost directly copy and paste the output from the test runner dialog to a new class and fill in the code for the methods with standard unit testing code. Like I said before, I treat everything that is a GIVEN statement like an arrange section of a standard test; WHEN and THEN like act and assert respectively. &lt;/p&gt;&lt;p&gt;We could hardcode these tests to be specifically run against the urls specified in the scenario but this approach feels brittle and does not encourage code reuse. In order to use these these same steps in our future scenarios we can add wildcard mappings rather than specifying a single url in the attribute definition. The wildcard mapping is the familiar .* surrounded by parenthesis.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="code"&gt;&lt;div style="background-image: none; background-repeat: repeat; background-attachment: scroll; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: white; font-family: 'Courier New'; font-size: 10pt; color: black; background-position: 0% 0%"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;Given&lt;/span&gt;(&lt;span style="color: #a31515"&gt;@&amp;quot;I have entered a request to (.*)&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/div&gt;&lt;div style="background-image: none; background-repeat: repeat; background-attachment: scroll; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: white; font-family: 'Courier New'; font-size: 10pt; color: black; background-position: 0% 0%"&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Also note now that when we have a wildcard mapping, we can pass in a parameter to that ScenarioStepDefinition&lt;/p&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;div style="background-image: none; background-repeat: repeat; background-attachment: scroll; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: white; font-family: 'Courier New'; font-size: 10pt; color: black; background-position: 0% 0%"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; GivenIHaveEnteredARequestToHttpWww_Frickinsweet_ComRyanlanciaux_ComPage2(&lt;span style="color: blue"&gt;string&lt;/span&gt; url)&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;The final result is a lot of code but it is broken down into small, reusable sections. &lt;div class="code"&gt;&lt;div style="background-image: none; background-repeat: repeat; background-attachment: scroll; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: white; font-family: 'Courier New'; font-size: 9pt; color: black; background-position: 0% 0%"&gt;&lt;pre style="margin: 0px"&gt;[&lt;span style="color: #2b91af"&gt;TestFixture&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;[&lt;span style="color: #2b91af"&gt;Binding&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;RedirectTest&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; oldUrl;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; newUrl;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; requestedUrl;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; finalUrl;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;RedirectHandler&lt;/span&gt; _handler;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Mock&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;HttpContextBase&lt;/span&gt;&amp;gt; mockContext;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Mock&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;HttpResponseBase&lt;/span&gt;&amp;gt; mockResponse;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;Given&lt;/span&gt;(&lt;span style="color: #a31515"&gt;@&amp;quot;I have entered a request to (.*)&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; GivenIHaveEnteredARequestToHttpWww_Frickinsweet_ComRyanlanciaux_ComPage2(&lt;span style="color: blue"&gt;string&lt;/span&gt; url)&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; uri = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(url);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; requestedUrl = url;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mockContext = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Mock&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;HttpContextBase&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mockContext.Setup(x =&amp;gt; x.Request.Url).Returns(uri);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;Given&lt;/span&gt;(&lt;span style="color: #a31515"&gt;@&amp;quot;the old url is (.*)&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; GivenTheOldUrlIsFrickinsweet_ComRyanlanciaux_Com(&lt;span style="color: blue"&gt;string&lt;/span&gt; url)&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oldUrl = url;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;Given&lt;/span&gt;(&lt;span style="color: #a31515"&gt;@&amp;quot;my new url is (.*)&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; GivenMyNewUrlIsRyanlanciaux_Com(&lt;span style="color: blue"&gt;string&lt;/span&gt; url)&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; newUrl = url;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//now that we know both old and new url do a replace on httpcontexts&amp;#39; url&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//setup what we expect the called url to be and throw a callback on the mock so we can verify later&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mockResponse = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Mock&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;HttpResponseBase&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mockResponse.SetupProperty(x =&amp;gt; x.Status);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mockResponse.Setup(x =&amp;gt; x.AddHeader(&lt;span style="color: #a31515"&gt;&amp;quot;Location&amp;quot;&lt;/span&gt;, requestedUrl.Replace(oldUrl, newUrl)))&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .Callback(() =&amp;gt; finalUrl = requestedUrl.Replace(oldUrl, newUrl));&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mockContext.Setup(x =&amp;gt; x.Response).Returns(mockResponse.Object);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;When&lt;/span&gt;(&lt;span style="color: #a31515"&gt;@&amp;quot;the request is made&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; WhenTheRequestIsMade()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _handler = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;RedirectHandler&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _handler.ProcessRequest(mockContext.Object, oldUrl, newUrl);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;Then&lt;/span&gt;(&lt;span style="color: #a31515"&gt;@&amp;quot;the response has a 301 in the status&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ThenTheResponseHasA301InTheStatus()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.That(mockContext.Object.Response.Status == &lt;span style="color: #a31515"&gt;&amp;quot;301 Moved Permanently&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;Then&lt;/span&gt;(&lt;span style="color: #a31515"&gt;@&amp;quot;the response url is (.*)&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ThenTheResponseUrlIsTheNewUrl(&lt;span style="color: blue"&gt;string&lt;/span&gt; expectedUrl)&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(expectedUrl, finalUrl);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;Then&lt;/span&gt;(&lt;span style="color: #a31515"&gt;@&amp;quot;301 is not in the headers&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Then_301IsNotInTheHeaders()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.IsNull(mockResponse.Object.Status);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Since we are using wildcards instead of raw urls in the step definitions we can easily write other tests that will just work with out adding any extra code.&lt;/p&gt;&lt;blockquote style="width: 550px"&gt;	&lt;p&gt;	Scenario: Redirect to correct path on new url&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; Given I have entered a request to http://www.frickinsweet.com/ryanlanciaux.com/page2&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; And the old url is frickinsweet.com/ryanlanciaux.com&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; And my new url is ryanlanciaux.com&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; When the request is made&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; Then the response url is http://www.ryanlanciaux.com/page2&lt;br /&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp; And the response has a 301 in the status 	&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;This project, in its entirety, is &lt;a href="http://github.com/ryanlanciaux/Redirect" target="_blank"&gt;hosted on GitHub&lt;/a&gt;. Check it out if you are interested in seeing SpecFlow in the context of the whole (tiny) application. Make sure that you add all the files from the lib dir into your references the first time you run it or you will receive all kinds of errors -- additionally, I wrote this quickly for myself so there is no real warranty / guarantee that the code is free from defects -- use at your own risk. :) &lt;/p&gt;&lt;p&gt;&lt;a href="http://github.com/ryanlanciaux/Redirect" target="_blank"&gt;Download Project from GitHub&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://specflow.org/" target="_blank"&gt;Visit the SpecFlow homepage&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote style="width: 150px"&gt;	&lt;strong&gt;Pass it along&lt;/strong&gt;	&lt;hr /&gt;	&lt;div&gt;	&lt;a href="http://www.dotnetkicks.com/kick/?url=http://ryanlanciaux.com/ryanlanciaux/post/Gherkin-style-BDD-testing-in-NET.aspx"&gt;	&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://ryanlanciaux.com/ryanlanciaux/post/Gherkin-style-BDD-testing-in-NET.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;	&lt;/a&gt;	&lt;/div&gt;	&lt;script type="text/javascript"&gt;	var dzone_url = 'http://ryanlanciaux.com/ryanlanciaux/post/Gherkin-style-BDD-testing-in-NET.aspx';&lt;/script&gt;	&lt;script type="text/javascript"&gt;	var dzone_title = 'Gherkin style BDD testing in .NET';&lt;/script&gt;	&lt;script type="text/javascript"&gt;	var dzone_blurb = 'BDD / Specification testing in .NET with the SpecFlow framework. SpecFlow is a BDD library for .NET that aims to add similar functionality as Cucumber to .NET projects';&lt;/script&gt;	&lt;script type="text/javascript"&gt;	var dzone_style = '1';&lt;/script&gt;	&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;	&lt;/script&gt; 	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;	&lt;script src="http://tweetmeme.com/i/scripts/button.js" type="text/javascript"&gt;	&lt;/script&gt;&lt;/blockquote&gt;</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/qKt7yraRhaY/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/Gherkin-style-BDD-testing-in-NET.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=1699a6ac-0bb7-409d-853a-16a1a6ec3dc5</guid>
      <pubDate>Sun, 31 Jan 2010 20:16:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=1699a6ac-0bb7-409d-853a-16a1a6ec3dc5</pingback:target>
      <slash:comments>2557</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=1699a6ac-0bb7-409d-853a-16a1a6ec3dc5</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/Gherkin-style-BDD-testing-in-NET.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=1699a6ac-0bb7-409d-853a-16a1a6ec3dc5</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=1699a6ac-0bb7-409d-853a-16a1a6ec3dc5</feedburner:origLink></item>
    <item>
      <title>Beginning ASP.NET MVC 1.0 available on Amazon</title>
      <description>&lt;p&gt;
I know I&amp;#39;ve been quiet for a little bit here but wanted to point out some great news. Simone Chiaretta and Keyvan Nayyeri&amp;#39;s book &lt;a href="http://www.amazon.com/gp/product/047043399X/105-8603807-8434027?ie=UTF8&amp;amp;tag=keyvannayyeri-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=047043399X" target="_blank"&gt;Beginning ASP.NET MVC 1.0 &lt;/a&gt;is available for purchase in the US on Amazon. Both Simone and Keyvan have a wealth of knowledge about the framework, so I&amp;#39;m really looking forward to the book. For more information check out
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://codeclimber.net.nz/archive/2009/08/05/beginning-asp.net-mvc-1.0-available-on-amazon.aspx" target="_blank"&gt;Simone&amp;#39;s site&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://nayyeri.net/blog/beginning-asp-net-mvc-1-0-ndash-finally-available/" target="_blank"&gt;Keyvan&amp;#39;s site&lt;/a&gt;&lt;br /&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/Q-QE_CBzhRI/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/Beginning-ASPNET-MVC-10-available-on-Amazon.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=1eb0c3aa-7ecc-431b-8866-ebc7632b1e3e</guid>
      <pubDate>Fri, 07 Aug 2009 07:37:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=1eb0c3aa-7ecc-431b-8866-ebc7632b1e3e</pingback:target>
      <slash:comments>32</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=1eb0c3aa-7ecc-431b-8866-ebc7632b1e3e</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/Beginning-ASPNET-MVC-10-available-on-Amazon.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=1eb0c3aa-7ecc-431b-8866-ebc7632b1e3e</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=1eb0c3aa-7ecc-431b-8866-ebc7632b1e3e</feedburner:origLink></item>
    <item>
      <title>Are you a Control Freak?</title>
      <description>&lt;p&gt;
&lt;strong&gt;No Controls?&lt;/strong&gt;&lt;br /&gt;
Since the very early ASP.NET MVC previews, the
most common argument I&amp;#39;ve heard against using the framework is the lack
of user controls. In my opinion, this is a mixed blessing, however, for
some, this is a show stopper. What can you do to provide a rich user
interface with the MVC framework, while not reinventing the wheel? &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;jQuery&lt;/strong&gt;&lt;br /&gt;
Now
you could go ahead and program a full fledged data grid or WYSIWYG
editor, however, unless you have a bit of time to spare this is not the
ideal solution. As most may realize, jQuery fits very nicely to fill in
the gaps left by the absence of user controls. For the most part, the
controls are not going to let you just drag-and-drop, type in a dataset
and profit but a lot of the pain is kept to a minimum. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Examples&lt;/strong&gt;&lt;br /&gt;
&lt;a id="k9ve" href="http://www.reconstrukt.com/ingrid/" title="Ingrid"&gt;Ingrid&lt;/a&gt; &lt;br /&gt;
&lt;img src="/ryanlanciaux.com/image.axd?picture=ingrid.gif" alt="" /&gt;&lt;br /&gt;
If
you&amp;#39;re looking for a data grid there are a number of options available
pictured above is Ingrid. &lt;strong&gt;Flexigrid &lt;/strong&gt;is another good one that people
have &lt;a id="zc7x" href="http://www.codeproject.com/KB/aspnet/MVCFlexigrid.aspx" title="used with the MVC framework"&gt;used with the MVC framework&lt;/a&gt;, however, &lt;em&gt;their site appears to be down&lt;/em&gt; at the moment.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/" target="_blank"&gt;Treeviews&lt;/a&gt; are available 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="/ryanlanciaux.com/image.axd?picture=treeview.gif" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://code.google.com/p/jquery-checkbox/" target="_blank"&gt;Radio Buttons / Check Boxes
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="/ryanlanciaux.com/image.axd?picture=check_box.gif" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://plugins.jquery.com/" target="_blank"&gt;Check out the jQuery plugin database&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Getting Started&lt;br /&gt;
&lt;/strong&gt;So,
if you&amp;#39;ve decided you want to look more into using jQuery plugins -- a
couple of tips that may make the transition a little easier:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	Obviously,
	familiarize yourself with jQuery. Some of the plugins will work with
	almost 0 configuration but it&amp;#39;s much better to actually know what&amp;#39;s
	going on. &lt;a href="http://www.smashingmagazine.com/2008/09/16/jquery-examples-and-best-practices/" target="_blank"&gt;View more info on getting started with jQuery&lt;/a&gt;&lt;br /&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;
	The &lt;a href="http://nayyeri.net/blog/using-jsonresult-in-asp-net-mvc-ajax/" target="_blank"&gt;JsonResult&lt;/a&gt; is your friend -- &lt;a href="http://www.dev102.com/2008/08/19/jquery-and-the-aspnet-mvc-framework/" target="_blank"&gt;learn it well&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Read up on what people using different languages are doing. I&amp;#39;m
	not saying that you should necessarily go out and learn Rails or
	CakePHP/CodeIgniter (although, it is beneficial). but at least look at the
	techniques that programmers from that realm of things are doing -- see how they are implementing their controls. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
What tips do you have for creating robust user interfaces with the MVC framework?
&lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://frickinsweet.com/ryanlanciaux.com/post/Are-you-a-Control-Freak.aspx"&gt;
&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://frickinsweet.com/ryanlanciaux.com/post/Are-you-a-Control-Freak.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/2H8w62HIrng/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/Are-you-a-Control-Freak.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=b1237d6f-53a3-431a-bd34-3ce8b54a9377</guid>
      <pubDate>Tue, 24 Mar 2009 21:04:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=b1237d6f-53a3-431a-bd34-3ce8b54a9377</pingback:target>
      <slash:comments>11</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=b1237d6f-53a3-431a-bd34-3ce8b54a9377</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/Are-you-a-Control-Freak.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=b1237d6f-53a3-431a-bd34-3ce8b54a9377</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=b1237d6f-53a3-431a-bd34-3ce8b54a9377</feedburner:origLink></item>
    <item>
      <title>Findlay .NET UserGroup Recap</title>
      <description>&lt;p&gt;
I had a great time tonight at the Findlay .NET User group! Thanks everyone that battled the weather to come out and hear me talk about the ASP.NET MVC Framework. As promised, I have posted the route constraint to allow only alphabetical values to be accepted as valid input for the display named message. 
&lt;/p&gt;
&lt;div style="background: #383838 none repeat scroll 0% 0%; font-family: Monaco; font-size: 10pt; color: #cfcfcf; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
routes.MapRoute(&lt;span style="color: #fe2f93"&gt;&amp;quot;Message&amp;quot;&lt;/span&gt;,
&lt;/p&gt;
&lt;p style="margin: 0px"&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; &lt;span style="color: #fe2f93"&gt;&amp;quot;Message/{action}/name/{Name}/&amp;quot;&lt;/span&gt;,
&lt;/p&gt;
&lt;p style="margin: 0px"&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; &lt;span style="color: #c3fe2f"&gt;new&lt;/span&gt; { controller = &lt;span style="color: #fe2f93"&gt;&amp;quot;Message&amp;quot;&lt;/span&gt;, action = &lt;span style="color: #fe2f93"&gt;&amp;quot;HelloWorld&amp;quot;&lt;/span&gt;, name = &lt;span style="color: #fe2f93"&gt;&amp;quot;&amp;quot;&lt;/span&gt; },
&lt;/p&gt;
&lt;p style="margin: 0px"&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; &lt;span style="color: #c3fe2f"&gt;new&lt;/span&gt; {name=&lt;span style="color: #fe2f93"&gt;&amp;quot;[a-zA-Z]+&amp;quot;&lt;/span&gt;}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp; );
&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;
I apologize about the lapse in memory -- The regular expression needed a + at the end to signify that it was more than one character whoops :)&amp;nbsp; For more information on Routes check out &lt;a href="http://www.codethinked.com/post/2008/08/20/Exploring-SystemWebRouting.aspx" target="_blank"&gt;Justin Etheredge&amp;#39;s post on routing&lt;/a&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/vmL6RwKRYzY/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/Findlay-NET-UserGroup-Recap.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=7d954e00-2e82-4f47-9be4-4da2cc590b80</guid>
      <pubDate>Tue, 27 Jan 2009 20:48:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=7d954e00-2e82-4f47-9be4-4da2cc590b80</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=7d954e00-2e82-4f47-9be4-4da2cc590b80</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/Findlay-NET-UserGroup-Recap.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=7d954e00-2e82-4f47-9be4-4da2cc590b80</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=7d954e00-2e82-4f47-9be4-4da2cc590b80</feedburner:origLink></item>
    <item>
      <title>MVC Framework Talk : Findlay .NET User Group</title>
      <description>I will be giving a talk on the ASP.NET MVC Framework at the &lt;a href="http://www.fanug.org" target="_blank"&gt;Findlay .NET User Group &lt;/a&gt;on Tuesday, January 27th (5:30pm - 7:30pm). If you&amp;#39;re in NW Ohio and want to learn more about the MVC framework and how to get up and running with it you might be interested. The talk is taking place at the Marathon building downtown -- 539 S. Main St., Findlay, OH - Room 106M. More information is available at the &lt;a href="http://www.fanug.org" target="_blank"&gt;User Group site&lt;/a&gt;. Hope to see you there!
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/9P9coAHyL2E/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/MVC-Framework-Talk-Findlay-NET-User-Group.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=0d7fcdec-216e-4c67-a659-ccf42af524b7</guid>
      <pubDate>Fri, 23 Jan 2009 07:58:00 -0400</pubDate>
      <category>Development</category>
      <category>General</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=0d7fcdec-216e-4c67-a659-ccf42af524b7</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=0d7fcdec-216e-4c67-a659-ccf42af524b7</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/MVC-Framework-Talk-Findlay-NET-User-Group.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=0d7fcdec-216e-4c67-a659-ccf42af524b7</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=0d7fcdec-216e-4c67-a659-ccf42af524b7</feedburner:origLink></item>
    <item>
      <title>Do you suffer from this condition?</title>
      <description>&lt;blockquote&gt;
	&lt;p&gt;
	&lt;strong&gt;Oxitis&lt;/strong&gt; [oks - ahy - tis]&lt;br /&gt;
	&lt;em&gt;-Noun&lt;/em&gt; 
	&lt;/p&gt;
	&lt;p&gt;
	Acute or chronic anxiety toward sharing code online; this anxiety is usually caused by fear of public ridicule or excessive criticism regarding imperfections in code. 
	&lt;/p&gt;
	&lt;p style="color: #777777"&gt;
	Origin:&amp;nbsp; &lt;br /&gt;
	2008, &lt;a href="http://weblogs.asp.net/dotjosh/default.aspx" target="_blank"&gt;Josh Schwartzberg&lt;/a&gt; (n.); &lt;a href="http://weblogs.asp.net/dotjosh/archive/2008/12/15/mvc-jquery-meets-x-mas-music-project.aspx" target="_blank"&gt;Oxitephobia&lt;/a&gt;; avoidance of placing imperfect code online; initially referring to &lt;a href="http://www.codeplex.com/oxite" target="_blank"&gt;Microsoft Oxite&lt;/a&gt;
	&lt;/p&gt;
	&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://frickinsweet.com/ryanlanciaux.com/post/Do-you-have-this-condition.aspx"&gt;
&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://frickinsweet.com/ryanlanciaux.com/post/Do-you-have-this-condition.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;
&lt;/a&gt;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/j3Gls3d4TfI/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/Do-you-have-this-condition.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=7498bdd6-0947-4ef3-a3af-a0e4e6bc40b3</guid>
      <pubDate>Wed, 17 Dec 2008 12:40:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=7498bdd6-0947-4ef3-a3af-a0e4e6bc40b3</pingback:target>
      <slash:comments>13</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=7498bdd6-0947-4ef3-a3af-a0e4e6bc40b3</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/Do-you-have-this-condition.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=7498bdd6-0947-4ef3-a3af-a0e4e6bc40b3</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=7498bdd6-0947-4ef3-a3af-a0e4e6bc40b3</feedburner:origLink></item>
    <item>
      <title>What Constitutes Ethical SEO?</title>
      <description>&lt;blockquote&gt;
	&lt;em&gt;&amp;quot;nice post!!thanks for the info..that&amp;#39;s great and cool&amp;quot;&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;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -Random Spammer&lt;/em&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
As
a web developer / someone who has a blog, I understand dealing with
spam is one of the necessary evils of having a comments enabled on my
site. For the most part, my site has remained far enough under the
radar that most spammers do not waste their time. More recently,
however, there has been a gradual influx of comment spam with a title
something along the lines of &amp;quot;[Company Name] SEO Test.&amp;quot; There is worse
spam for sure but it was definitely annoying. &lt;br /&gt;
&lt;br /&gt;
A quick Google
search pointed me to a Web Development and Search Engine Optimization
company hosting an SEO competition. I checked the rules and sure enough,
there was a rule stating that only Ethical SEO Techniques would be
permitted. Quickly, I emailed the organization one of the comments
(with url, ip, email, etc) exepecting the offending parties would be
removed from the competition, eliminating additional garbage comments.
I was shocked to receive their reply.&lt;br /&gt;
&lt;blockquote&gt;
	&lt;em&gt;Unfortunately
	this is not against the rules of the competition &amp;ndash; I would encourage
	you to remove the spamming links for your website to discourage this
	behaviour but as I said I can&amp;rsquo;t actually penalise this person
	for making posts on other peoples websites.&lt;/em&gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;em&gt;Sorry about the spam.&lt;/em&gt;&lt;br /&gt;
&lt;/blockquote&gt;
&lt;strong&gt;Gaming the System&lt;/strong&gt;&lt;br /&gt;
In
my opinion, Search Engine Optimization should be about perfecting a
website and the website&amp;#39;s content; not tricking google into thinking
more people find your content useful than actuality. &lt;a href="http://www.youngentrepreneur.com/blog/2008/12/11/seo-advice-josh-can-help/" target="_blank"&gt;Optimizing tags
and titles&lt;/a&gt; is one thing but gaming the system to garner search ranking is wrong
and is detrimental to the web as a whole. Just because commenting is
legal and allowable does not make it ethical. Unfortunately, this
practice will continue to exist as long as it gets results and
organizations act as enablers to those who would use these tactics for
financial gain (not to mention increased search engine ranking for the
enabling organizations). &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Link Spam is Digital Graffiti&lt;/strong&gt;&lt;br /&gt;
&lt;div style="float: right"&gt;
&lt;img src="/ryanlanciaux.com/image.axd?picture=spra-paint.jpg" alt="" /&gt;
&lt;/div&gt;
Imagine
for a second if companies condoned this practice outside of the Web --
what if McDonalds or Nike paid for their logos to be spray painted on
other&amp;#39;s property? To make matters worse what if after receiving
numerous complaints they held a press conference and said &amp;quot;soap and
water removes the paint&amp;quot; or &amp;quot;just hire some guards and the problem will
go away.&amp;quot;? I think it&amp;#39;s safe to assume that practice would not be
received so kindly (h/t &lt;a href="http://www.codehinting.com" target="_blank"&gt;Matt Braun&lt;/a&gt; on the graffiti analogy)!
Fortunately a link is not as hard to remove as paint but the concept is
similar. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Solutions anyone?&lt;/strong&gt;&lt;br /&gt;
Social networks such as
&lt;a href="http://www.digg.com" target="_blank"&gt;Digg&lt;/a&gt;, &lt;a href="http://www.dotnetkicks.com" target="_blank"&gt;DotNetKicks &lt;/a&gt;and &lt;a href="http://www.dzone.com" target="_blank"&gt;DZone &lt;/a&gt;have always been plagued by those who would
try to circumvent the rules for personal gain. Where honeypots and
captcha systems would traditionally help against
bots, an increasing number of spammers seem to be actual people. The
administrators of these social networks are constantly coming up with
more sophisticated ways to combat spam but what should small blogs and
websites do?&lt;br /&gt;
&lt;br /&gt;
Currently,
there are a number of methodologies for preventing blog spam that work
with varying degrees of effectiveness but none are ideal. Obviously,
you can moderate comments -- this works okay but is painful if you are
getting a lot of spam or a lot of comments. Also, make sure your
comment links have a rel=&amp;quot;nofollow&amp;quot; attribute (h/t &lt;a href="http://codeclimber.net.nz" target="_blank"&gt;Simone Chiaretta&lt;/a&gt;). Google
does not take nofollow links into account when calculating page rank.
Although this does not reward the spammer, it does not prevent spam. &lt;br /&gt;
&lt;br /&gt;
What I would like to see is a centralized comment system like Disqus or
IntenseDebate that lets a user login with OpenID, Google Friend
Connect, Microsoft LiveID, Facebook Connect (whichever the user wants).
There would be a standard vote up / down vote for every comment a user
makes where the overall votes across all sites would determine the
users rating. Casting a down vote would remove a minimal amount of
points from the voter to prevent someone from going on a down vote
rampage (exactly how &lt;a href="http://www.stackoverflow.com" target="_blank"&gt;StackOverflow &lt;/a&gt;works). Site owners could set
restrictions that would prevent users with a rating less than a
specified number from posting on their site. This may be idealistic and
introduce a new realm of privacy concerns but if done properly, I think it
would help eliminate a great deal of spam.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Wrapping things up&lt;br /&gt;
&lt;/strong&gt;Although there are many less-than ethical tactics to increasing a
site&amp;#39;s ranking, site structure and site content are the best methods of
SEO. I would love to hear your thoughts, ideas and any suggestions you
have in eliminating link spam.
&lt;br /&gt;
&lt;blockquote&gt;
	If you liked this post...
	&lt;table border="0" cellspacing="10"&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td valign="top"&gt;
				&lt;table border="0"&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td&gt;
							&lt;a href="http://www.dotnetkicks.com/kick/?url=http://frickinsweet.com/ryanlanciaux.com/post/What-Constitutes-Ethical-SEO.aspx"&gt;
							&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://frickinsweet.com/ryanlanciaux.com/post/What-Constitutes-Ethical-SEO.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;
							&lt;/a&gt;&lt;/td&gt;
						&lt;/tr&gt;
						&lt;tr&gt;
							&lt;td&gt;
							&lt;script type="text/javascript"&gt;
							var dzone_url = 'http://frickinsweet.com/ryanlanciaux.com/post/What-Constitutes-Ethical-SEO.aspx';&lt;/script&gt;
							&lt;script type="text/javascript"&gt;
							var dzone_title = 'What Constitutes Ethical SEO?';&lt;/script&gt;
							&lt;script type="text/javascript"&gt;
							var dzone_blurb = '';&lt;/script&gt;
							&lt;script type="text/javascript"&gt;
							var dzone_style = '2';&lt;/script&gt;
							&lt;script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"&gt;
							&lt;/script&gt;
							&lt;br /&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
						&lt;tr&gt;
							&lt;td&gt;&lt;a href="http://feeds.feedburner.com/RyanLanciaux"&gt;Subscribe via RSS&lt;/a&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
				&lt;/td&gt;
				&lt;td&gt;
				&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;
				&lt;/script&gt; &lt;br /&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/blockquote&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/U2qE7TxpfOM/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/What-Constitutes-Ethical-SEO.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=200b0f21-0158-40f9-964e-147e10090498</guid>
      <pubDate>Fri, 12 Dec 2008 00:45:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=200b0f21-0158-40f9-964e-147e10090498</pingback:target>
      <slash:comments>356</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=200b0f21-0158-40f9-964e-147e10090498</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/What-Constitutes-Ethical-SEO.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=200b0f21-0158-40f9-964e-147e10090498</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=200b0f21-0158-40f9-964e-147e10090498</feedburner:origLink></item>
    <item>
      <title>MVC HtmlHelper for Gravatar</title>
      <description>&lt;p&gt;
Based on a great suggestion from &lt;a href="http://flux88.com/" target="_blank"&gt;Ben Scheirman&lt;/a&gt; and &lt;a href="http://www.codeclimber.net.nz" target="_blank"&gt;Simone Chiaretta&lt;/a&gt; I have converted the &lt;a href="http://www.ryanlanciaux.com/ryanlanciaux.com/post/Gravatar-on-ASPNET-MVC.aspx" target="_blank"&gt;Gravatar URL helper class&lt;/a&gt; into a HtmlHelper extension method. This was my first stab at making a HtmlHelper extension but it seems to be working nicely and helps me keep my code a lot cleaner. Instead saving the URL (which I would highly advise against) or doing some weird method calling acrobatics in the Controller, I can simply say &amp;lt;%= Html.Gravatar(&amp;quot;email@email.com&amp;quot;) %&amp;gt; inside the view.
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;ve added a couple different method definitions for various parameters. You can pass in just an e-mail address, an e-mail and gravatar parameters (&lt;a href="http://en.gravatar.com/site/implement/url" target="_blank"&gt;see here for more info on gravatar parameters&lt;/a&gt;) or an e-mail address, gravatar parameters and html attributes. A quick usage summary is listed below (I&amp;#39;m using my &lt;a href="http://www.frickinsweet.com/joelroxor" target="_blank"&gt;brother Joel&amp;#39;s&lt;/a&gt; gravatar in the examples) 
&lt;/p&gt;
&lt;br /&gt;
&lt;table border="0" cellspacing="0" cellpadding="0" style="border: 1px dashed #999999"&gt;
	&lt;tbody&gt;
		&lt;tr style="background-color: #efefef"&gt;
			&lt;td valign="top"&gt;
			&lt;p&gt;
			&lt;strong&gt;&amp;lt;%= Html.Gravatar(&amp;quot;email@email.com&amp;quot;) %&amp;gt;
			&lt;/strong&gt;
			&lt;/p&gt;
			&lt;p&gt;
			Base Gravatar Helper&amp;nbsp; 
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td valign="top"&gt;&amp;nbsp;&lt;img src="/ryanlanciaux.com/image.axd?picture=default-image.gif" alt="" /&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style="background-color: #dddddd"&gt;
			&lt;td valign="top"&gt;
			&lt;p&gt;
			&lt;strong&gt;&amp;lt;%= Html.Gravatar(&amp;quot;email@email.com&amp;quot;, new&amp;nbsp; { s = &amp;quot;128&amp;quot;, r = &amp;quot;pg&amp;quot; })%&amp;gt;&lt;/strong&gt;&lt;em&gt;
			&lt;/em&gt;
			&lt;/p&gt;
			&lt;p&gt;
			Gravatar helper with optional &lt;a href="http://en.gravatar.com/site/implement/url" target="_blank"&gt;Gravatar Parameters&lt;/a&gt; 
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td valign="top"&gt;&amp;nbsp;&lt;img src="/ryanlanciaux.com/image.axd?picture=gravatar-params-image.gif" alt="" /&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style="background-color: #efefef"&gt;
			&lt;td valign="top"&gt;
			&lt;p&gt;
			&lt;strong&gt;
			&amp;lt;%= Html.Gravatar(&amp;quot;email@email.com&amp;quot;, null, new&amp;nbsp; { style = &amp;quot;border:5px solid&amp;quot; })%&amp;gt;&amp;nbsp;&amp;nbsp; 
			&lt;/strong&gt;
			&lt;/p&gt;
			&lt;p&gt;
			Helper with HTML attributes. Please note, this is still expecting the Gravatar parameters -- you can pass in null if you want to just grab the default image with no additional properties. 
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td valign="top"&gt;&amp;nbsp;&lt;img src="/ryanlanciaux.com/image.axd?picture=html-params-image.gif" alt="" /&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style="background-color: #dddddd"&gt;
			&lt;td valign="top"&gt;
			&lt;p&gt;
			&lt;strong&gt;
			&amp;lt;%= Html.Gravatar(&amp;quot;email@email.com&amp;quot;, new { s = &amp;quot;128&amp;quot;, r = &amp;quot;pg&amp;quot; }, new { style=&amp;quot;border:5px solid;&amp;quot;})%&amp;gt;
			&lt;/strong&gt;
			&lt;/p&gt;
			&lt;p&gt;
			Helper with both Gravatar parameters and HTML attributes 
			&lt;/p&gt;
			&lt;/td&gt;
			&lt;td valign="top"&gt;&amp;nbsp;&lt;img src="/ryanlanciaux.com/image.axd?picture=all-image.gif" alt="" /&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
Anyways, I&amp;#39;ve posted the class file below. Hopefully you find it useful -- I would love to hear what your thoughts are or of any changes you would like to see. &lt;br /&gt;
&lt;a rel="enclosure" href="http://www.ryanlanciaux.com/ryanlanciaux.com/file.axd?file=GravatarHelper.cs"&gt;GravatarHelper.cs (2.72 kb)&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="float: left"&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://frickinsweet.com/ryanlanciaux.com/post/MVC-HtmlHelper-for-Gravatar.aspx"&gt;
&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://frickinsweet.com/ryanlanciaux.com/post/MVC-HtmlHelper-for-Gravatar.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;
&lt;/a&gt;
&lt;/div&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/YwKbTCRO-ck/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/MVC-HtmlHelper-for-Gravatar.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=60b8606a-3749-44d4-82fc-a141629be1ee</guid>
      <pubDate>Thu, 13 Nov 2008 22:44:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=60b8606a-3749-44d4-82fc-a141629be1ee</pingback:target>
      <slash:comments>26</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=60b8606a-3749-44d4-82fc-a141629be1ee</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/MVC-HtmlHelper-for-Gravatar.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=60b8606a-3749-44d4-82fc-a141629be1ee</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=60b8606a-3749-44d4-82fc-a141629be1ee</feedburner:origLink></item>
    <item>
      <title>Gravatar on ASP.NET MVC</title>
      <description>&lt;p&gt;
&lt;strong&gt;UPDATE:&lt;/strong&gt; &lt;a href="http://www.ryanlanciaux.com/ryanlanciaux.com/post/MVC-HtmlHelper-for-Gravatar.aspx"&gt;See here &lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
In the near future, I have a web project coming out that I&amp;#39;ve been working on for the past month or so. I&amp;#39;m not going to give too much detail on that just yet, however, in working on this project, I had to come up with a way for users to have profile images. I would rather not host these images on my server, I decided to leverage &lt;a href="http://en.gravatar.com/" target="_blank"&gt;Gravatar &lt;/a&gt;(Globally Recognized Avatars). 
&lt;/p&gt;
&lt;p&gt;
There are a couple &lt;a href="http://www.freshclickmedia.com/blog/2008/02/gravatar-aspnet-control/" target="_blank"&gt;pre-existing options&lt;/a&gt; for dealing with gravatar in the .NET framework, however, I&amp;#39;m using the MVC framework -- standard ASP.NET controls are out of the question. After a brief look on the &lt;a href="http://en.gravatar.com/" target="_blank"&gt;Gravatar&lt;/a&gt; site (specifically the page dealing with &lt;a href="http://en.gravatar.com/site/implement/url" target="_blank"&gt;how the URL is constructed&lt;/a&gt;), it seemed like this would be a pretty easy task to write a class that I could use to get gravatar image paths. Below is the main part of the class I created to retrieve gravatar information based on an e-mail address: 
&lt;/p&gt;
&lt;br /&gt;
&lt;div style="background: #383838 none repeat scroll 0% 0%; line-height: 11px; font-family: Monaco; font-size: 9pt; color: #cfcfcf; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #c3fe2f"&gt;public&lt;/span&gt; &lt;span style="color: #c3fe2f"&gt;static&lt;/span&gt; &lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt; GetGravatarURL(&lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt; email, &lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt; size)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #c3fe2f"&gt;return&lt;/span&gt; (&lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #fe2f93"&gt;&amp;quot;http://www.gravatar.com/avatar/{0}?s={1}&amp;amp;r=PG&amp;quot;&lt;/span&gt;, 
&lt;/p&gt;
&lt;p style="margin: 0px"&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; EncryptMD5(email), size));
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #c3fe2f"&gt;public&lt;/span&gt; &lt;span style="color: #c3fe2f"&gt;static&lt;/span&gt; &lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt; GetGravatarURL(&lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt; email, &lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt; size, &lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt; defaultImagePath)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #c3fe2f"&gt;return&lt;/span&gt; GetGravatarURL(email, size) +&amp;nbsp; &lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #fe2f93"&gt;&amp;quot;&amp;amp;default={0}&amp;quot;&lt;/span&gt;, defaultImagePath);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #c3fe2f"&gt;private&lt;/span&gt; &lt;span style="color: #c3fe2f"&gt;static&lt;/span&gt; &lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt; EncryptMD5(&lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt; Value)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.Security.Cryptography.&lt;span style="color: #4e55df"&gt;MD5CryptoServiceProvider&lt;/span&gt; md5 = &lt;span style="color: #c3fe2f"&gt;new&lt;/span&gt; &lt;span style="color: #4e55df"&gt;MD5CryptoServiceProvider&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #c3fe2f"&gt;byte&lt;/span&gt;[] valueArray = System.Text.&lt;span style="color: #4e55df"&gt;Encoding&lt;/span&gt;.ASCII.GetBytes(Value);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; valueArray = md5.ComputeHash(valueArray);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #c3fe2f"&gt;string&lt;/span&gt; encrypted = &lt;span style="color: #fe2f93"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #c3fe2f"&gt;for&lt;/span&gt; (&lt;span style="color: #c3fe2f"&gt;int&lt;/span&gt; i = &lt;span style="color: #fe2fdf"&gt;0&lt;/span&gt;; i &amp;lt; valueArray.Length; i++)
&lt;/p&gt;
&lt;p style="margin: 0px"&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; encrypted += valueArray[i].ToString(&lt;span style="color: #fe2f93"&gt;&amp;quot;x2&amp;quot;&lt;/span&gt;).ToLower();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #c3fe2f"&gt;return&lt;/span&gt; encrypted;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
All we&amp;#39;re really doing is creating a URL based on the Gravatar path, an MD5 encrypted version of an e-mail address and some user specified parameters. For the methods, Size is how many pixels the image should be (up to 500) and defaultImagePath is the url to use as an alternate image if the user does not have a Gravatar image. There is a rating parameter also but for my site, I&amp;#39;m setting it to PG always.&lt;br /&gt;
&lt;br /&gt;
This is not all that difficult but hopefully useful. I plan to continue writing examples as I make progress on the web application I mentioned.
&lt;/p&gt;
&lt;br /&gt;
&lt;div style="float: left; position: relative; padding-right: 1px"&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://frickinsweet.com/ryanlanciaux.com/post/Gravatar-on-ASPNET-MVC.aspx"&gt;
&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://frickinsweet.com/ryanlanciaux.com/post/Gravatar-on-ASPNET-MVC.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;
&lt;/a&gt; 
&lt;/div&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/7FULw8qyCQ8/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/Gravatar-on-ASPNET-MVC.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=623d2d19-fe10-4290-813b-b1194d813740</guid>
      <pubDate>Sun, 09 Nov 2008 11:56:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=623d2d19-fe10-4290-813b-b1194d813740</pingback:target>
      <slash:comments>56</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=623d2d19-fe10-4290-813b-b1194d813740</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/Gravatar-on-ASPNET-MVC.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=623d2d19-fe10-4290-813b-b1194d813740</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=623d2d19-fe10-4290-813b-b1194d813740</feedburner:origLink></item>
    <item>
      <title>What is your strategy for becoming a better developer?</title>
      <description>&lt;p&gt;
&lt;a href="http://www.codethinked.com"&gt;Justin Etheredge&lt;/a&gt; recently posted &lt;a href="http://www.codethinked.com/post/2008/09/20/What-is-your-strategy-for-becoming-a-better-developer.aspx" target="_blank"&gt;a question&lt;/a&gt; for the community on &lt;a href="http://www.codethinked.com" target="_blank"&gt;his site&lt;/a&gt;. I think this is a good thing to think about because my definition of a good developer is one who continually tries to be better at their craft. My suggestions may be very similar to others but I would love to hear feedback.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Read&lt;/strong&gt; : the first suggestion I have is a bit obvious. I like to read books and blogs on programming -- especially methodologies and architecture. Its hard to find good books becuase there seems to be an over saturation, many of which are not good. That being said, there are quite a few that I would still recommend : &lt;a href="http://www.amazon.com/Head-First-Design-Patterns/dp/0596007124" target="_blank"&gt;Head First Design Patterns&lt;/a&gt;, &lt;a href="http://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0321344758/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1222029313&amp;amp;sr=8-1" target="_blank"&gt;Don&amp;#39;t Make Me Think&lt;/a&gt; (not really a programming book but important for anyone that writes applications with end-users) and &lt;a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/" target="_blank"&gt;Code Complete&lt;/a&gt;. Additionally I&amp;#39;m really looking foward to &lt;a href="http://www.amazon.com/gp/product/047043399X/" target="_blank"&gt;Beginning ASP.NET MVC&lt;/a&gt; by &lt;a href="http://codeclimber.net.nz/" target="_blank"&gt;Simone &lt;/a&gt;and &lt;a href="http://nayyeri.net/" target="_blank"&gt;Keyvan&lt;/a&gt;. As for blogs, there are tons I subscribe to but a few I&amp;#39;ll mention are &lt;a href="http://www.codethinked.com" target="_blank"&gt;Justin&lt;/a&gt;&amp;#39;s, &lt;a href="http://www.noop.nl" target="_blank"&gt;Jurgen Appelo&lt;/a&gt;&amp;#39;s and &lt;a href="http://www.diditwith.net" target="_blank"&gt;Dustin Campbell&lt;/a&gt;&amp;#39;s.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Share &lt;/strong&gt;:&amp;nbsp; I first started my site to help myself and hopefully others with programming topics. As I chose a subject to write about, I realized I did a lot more research than I would if it was just something I wanted to learn. Additionally, there was a lot of experience that I gained from the comments on the articles. Sharing information with a high level of transparency helps you become a better developer because you will get feedback on your work. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Set Goals&lt;/strong&gt; : Set goals to learn new languages / techniques. I start off by reading blogs/books/articles then think of achievable pet project to use these new techniques on. The progress on the project can be used as the baseline for determining your progress. This is not saying you would be an expert in the new area but, in my opinion, is one of the best ways to learn.
&lt;/p&gt;
&lt;p&gt;
There are tons of additional ways to become a better developer and I would love to hear your suggestions! 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/IeaXtntgqjs/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/What-is-your-strategy-for-becoming-a-better-developer.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=0a4d290c-9be8-4d58-b52a-e7e838bbdad6</guid>
      <pubDate>Sun, 21 Sep 2008 11:59:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=0a4d290c-9be8-4d58-b52a-e7e838bbdad6</pingback:target>
      <slash:comments>10</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=0a4d290c-9be8-4d58-b52a-e7e838bbdad6</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/What-is-your-strategy-for-becoming-a-better-developer.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=0a4d290c-9be8-4d58-b52a-e7e838bbdad6</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=0a4d290c-9be8-4d58-b52a-e7e838bbdad6</feedburner:origLink></item>
    <item>
      <title>MVC Framework Talk</title>
      <description>Tonight I have the privilege to be giving a talk on the ASP.NET MVC Framework at the &lt;a href="http://www.nwnug.com" target="_blank"&gt;Northwest Ohio .NET User Group&lt;/a&gt;!
(6PM, at the HCR Manor Care building downtown)! If you interested in
learning about some of the reasons for using the MVC framework along
with creating a basic MVC application you might want to check it out :)
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/qfzzQ4GXPaQ/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/MVC-Framework-Talk.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=fbba73fb-2102-48ae-b75b-1ff5489d4a04</guid>
      <pubDate>Tue, 19 Aug 2008 09:23:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=fbba73fb-2102-48ae-b75b-1ff5489d4a04</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=fbba73fb-2102-48ae-b75b-1ff5489d4a04</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/MVC-Framework-Talk.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=fbba73fb-2102-48ae-b75b-1ff5489d4a04</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=fbba73fb-2102-48ae-b75b-1ff5489d4a04</feedburner:origLink></item>
    <item>
      <title>Theme Generator on Channel9!</title>
      <description>&lt;p&gt;
Wow, the &lt;a href="http://www.frickinsweet.com/tools" target="_blank"&gt;theme generator&lt;/a&gt; that my &lt;a href="http://www.frickinsweet.com/joelroxor" target="_blank"&gt;brother&lt;/a&gt; and I made is on &lt;a href="http://channel9.msdn.com/shows/This+Week+On+Channel+9/This-Week-on-C9-Christian-LittleGuru-Liensberger-VS-2008-and-NET-Framework-35-SP1/" target="_blank"&gt;Channel 9&lt;/a&gt;.&lt;br /&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;a style="text-decoration: none" href="http://go.microsoft.com/fwlink/?LinkID=124807"&gt;
&lt;img style="border-style: none" src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
It&amp;#39;s in the video at about 11:30. Thanks to &lt;a href="http://blogs.msdn.com/danielfe/" target="_blank"&gt;Dan&lt;/a&gt; and team for mentioning it! &lt;a href="http://channel9.msdn.com/shows/This+Week+On+Channel+9/This-Week-on-C9-Christian-LittleGuru-Liensberger-VS-2008-and-NET-Framework-35-SP1/" target="_blank"&gt;View the channel 9 site here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/icLw4s4ssMc/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/Theme-Generator-on-Channel9!.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=a06db624-d064-4a96-8dfc-bd3e76dc1e6b</guid>
      <pubDate>Mon, 18 Aug 2008 12:36:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=a06db624-d064-4a96-8dfc-bd3e76dc1e6b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=a06db624-d064-4a96-8dfc-bd3e76dc1e6b</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/Theme-Generator-on-Channel9!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=a06db624-d064-4a96-8dfc-bd3e76dc1e6b</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=a06db624-d064-4a96-8dfc-bd3e76dc1e6b</feedburner:origLink></item>
    <item>
      <title>Business Cards</title>
      <description>&lt;p&gt;
I like to have business cards so I can easily give people my contact information. My amazing wife designed this for me to kind of keep the cards with a programming look and feel.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="/ryanlanciaux.com/image.axd?picture=business-card.gif" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
Let me know what you think!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/FDmYPuYjd_k/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/Business-Cards.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=19f7f090-c907-4786-8d93-e8961bbccb0f</guid>
      <pubDate>Mon, 18 Aug 2008 12:29:00 -0400</pubDate>
      <category>Design</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=19f7f090-c907-4786-8d93-e8961bbccb0f</pingback:target>
      <slash:comments>23</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=19f7f090-c907-4786-8d93-e8961bbccb0f</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/Business-Cards.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=19f7f090-c907-4786-8d93-e8961bbccb0f</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=19f7f090-c907-4786-8d93-e8961bbccb0f</feedburner:origLink></item>
    <item>
      <title>Visual Studio Theme Generator</title>
      <description>&lt;p&gt;
This is a really short post but I wanted to pass the word along. I just finished a fun little ASP.NET MVC Application to generate Visual Studio
themes based off of 3 given colors. I have always felt that selecting
every color to make a coherent theme is way too repetitive. This web
application automatically chooses complements / contrasts based off
your initial color selections (and uses jQuery to let you preview your
theme before creating). I will be making another, more detailed post later that will explain how it all works but for now, &lt;a href="http://www.frickinsweet.com/tools"&gt;check it out&lt;/a&gt; and let me know what you think.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.frickinsweet.com/tools"&gt;View the application &lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/g1s-C11N8Os/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/Visual-Studio-Theme-Generator.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=b9ec1f1d-bf26-4c9e-a18c-0891920a0497</guid>
      <pubDate>Thu, 07 Aug 2008 08:36:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=b9ec1f1d-bf26-4c9e-a18c-0891920a0497</pingback:target>
      <slash:comments>6</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=b9ec1f1d-bf26-4c9e-a18c-0891920a0497</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/Visual-Studio-Theme-Generator.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=b9ec1f1d-bf26-4c9e-a18c-0891920a0497</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=b9ec1f1d-bf26-4c9e-a18c-0891920a0497</feedburner:origLink></item>
    <item>
      <title>Quick Tip: Generate Change Script for SQL Modifications</title>
      <description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
This is probably another thing that many people know but it&amp;#39;s new to me. In the Modify table window, you can generate a script to show the ALTER TABLE that Management Studio creates.
&lt;/p&gt;
&lt;p&gt;
Make your change (add column / delete column / change a columns data type, etc.) 
&lt;/p&gt;
&lt;img src="/ryanlanciaux.com/image.axd?picture=tableWindow.gif" alt="" /&gt;
&lt;p&gt;
&amp;nbsp;
Click the &amp;#39;Generate Change Script&amp;#39; button (this option is not at all hidden but was something I didn&amp;#39;t take the time to use because I never needed it before).&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;img src="/ryanlanciaux.com/image.axd?picture=generateChangeScript.gif" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
View the dialog with the change script
&lt;/p&gt;
&lt;p&gt;
&lt;img src="/ryanlanciaux.com/image.axd?picture=newTableOptions.gif" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Thanks to my friend Ross for pointing this out to me. He really needs to start blogging these tips :) 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/RyanLanciaux/~3/S66pnacsrW4/post.aspx</link>
      <comments>http://www.ryanlanciaux.com/ryanlanciaux/post/Quick-Tip-Generate-Change-Script-for-SQL-Modifications.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=936eb9ba-07d4-4ac1-9a48-0f3978fa76c0</guid>
      <pubDate>Fri, 25 Jul 2008 08:04:00 -0400</pubDate>
      <category>Development</category>
      <dc:publisher>ryan</dc:publisher>
      <pingback:server>http://www.ryanlanciaux.com/ryanlanciaux/pingback.axd</pingback:server>
      <pingback:target>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=936eb9ba-07d4-4ac1-9a48-0f3978fa76c0</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.ryanlanciaux.com/ryanlanciaux/trackback.axd?id=936eb9ba-07d4-4ac1-9a48-0f3978fa76c0</trackback:ping>
      <wfw:comment>http://www.ryanlanciaux.com/ryanlanciaux/post/Quick-Tip-Generate-Change-Script-for-SQL-Modifications.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ryanlanciaux.com/ryanlanciaux/syndication.axd?post=936eb9ba-07d4-4ac1-9a48-0f3978fa76c0</wfw:commentRss>
    <feedburner:origLink>http://www.ryanlanciaux.com/ryanlanciaux/post.aspx?id=936eb9ba-07d4-4ac1-9a48-0f3978fa76c0</feedburner:origLink></item>
  </channel>
</rss>

