<?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>AndrewBlogs</title>
	<atom:link href="http://andrewblogs.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://andrewblogs.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 27 Jul 2011 00:29:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JavaScript, Part 1: Objects, Functions, Scoping &amp; Closure.</title>
		<link>http://andrewblogs.com/blog/javascript-part1-objects-functions-scoping-closure/</link>
		<comments>http://andrewblogs.com/blog/javascript-part1-objects-functions-scoping-closure/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 00:19:28 +0000</pubDate>
		<dc:creator>Andrew Kharlamov</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://andrewblogs.com/blog/?p=759</guid>
		<description><![CDATA[Object Literals: JavaScript is mostly composed of objects. You should use objects to collect and store common data and information: var person = { firstName: "john", lastName: "doe", address: { street: "321 Street", zipCode: "94125", county: "San Francisco", state: "CA" } }; An empty JavaScript object, is defined, like so: var person = { }; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Object Literals:</strong><br />
JavaScript is mostly composed of objects. You should use objects to collect and store common data and information:</p>
<pre class="brush:js">
var person = {
    firstName: "john",
    lastName: "doe",
    address: {
         street: "321 Street",
         zipCode: "94125",
         county: "San Francisco",
         state: "CA"
    }
};</pre>
<p>An empty JavaScript object, is defined, like so: </p>
<pre class="brush:js">
var person = { };
</pre>
<p><span id="more-759"></span></p>
<p> &nbsp; </p>
<p><strong>Functions:</strong><br />
Functions are a special type of JavaScript Object. They are a great way to execute a body of work, like so:</p>
<pre class="brush:js">
var changeName = function (firstName, lastName) {
    person.firstName = firstName;
    person.lastName = lastName;
}

changeName("Jane", "Doe");
</pre>
<p>Functions are not methods. However, we could use the method invocation pattern to execute our body of work:</p>
<pre class="brush:js">
var person = {
    firstName: "john",
    lastName: "doe",
    changeName: function (firstName, lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    fullName: function () {
        return firstName + lastName;
    }
};

person.changeName("Jane", "Doe");

alert(person.fullName);
</pre>
<p> &nbsp; </p>
<p><strong>Scoping:</strong><br />
Scoping in JavaScript is crazy and at most times confusing.</p>
<p>Unlike most languages JavaScript has no block level scoping:</p>
<pre class="brush:js">
var hello = "hello ";

if(true) {
    var world = "world!";
}

alert(hello + world);
</pre>
<p>JavaScript has function scoping:</p>
<pre class="brush:js">
var hello = "hello ";

function test()
    var world = "world!";
}

alert(hello + world); // world doesn't exist in this scope!
</pre>
<p>So! Declare your variables at the top of functions not in block level elements:</p>
<pre class="brush:js">
var hello = "hello ", world = "";

if(true) {
    world = "world!";
}

alert(hello + world);
</pre>
<p> &nbsp; </p>
<p><strong>Closure:</strong></p>
<p>Instead of an object, let&#8217;s make our person a function:</p>
<pre class="brush:js">
var person = function () {

};
</pre>
<p>Then, invoke our person function, like so:</p>
<pre class="brush:js">
var person = function () {

}(); //() invoke function
</pre>
<p>Let&#8217;s give our function some fluff:</p>
<pre class="brush:js">
var person = function () {
    var firstName = "John",
        lastName = "Doe",
        data = {};

    return data;
}();
</pre>
<p>Notice the data object, it is being returned from the function. By invoking the function right away, person becomes data.</p>
<p>This way we can&#8217;t get at firstName or lastName.</p>
<p>So lets expose firstName:</p>
<pre class="brush:js">
var person = function () {
    var firstName = "John",
        lastName = "Doe",
        data = {
            getFirstName: function () {
                return firstName;
            }
        };

    return data;
}();
</pre>
<p>Cool, Huh!</p>
<pre class="brush:js">
alert(person.getFirstName()); //result John
</pre>
<p>JavaScript is a very powerful language, with a very bright future ahead. I implore you to jump in an learn it with all of us. You can start here: <a href="http://oreilly.com/catalog/9780596517748" target="_blank">JavaScript: The Good Parts</a></p>
<p>I would also recommend learning these core frameworks: <a href="http://jquery.com" taget="_blank">jQuery</a>, <a href="http://documentcloud.github.com/underscore/" target="_blank">underscore</a>, and <a href="http://knockoutjs.com/" target="_blank">knockout</a>.</p>
<p>More to come&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://andrewblogs.com/blog/javascript-part1-objects-functions-scoping-closure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Paceyourself: Managing client side javascript with require.js</title>
		<link>http://andrewblogs.com/blog/paceyourself-managing-client-side-javascript-with-require-js/</link>
		<comments>http://andrewblogs.com/blog/paceyourself-managing-client-side-javascript-with-require-js/#comments</comments>
		<pubDate>Tue, 31 May 2011 15:36:49 +0000</pubDate>
		<dc:creator>Andrew Kharlamov</dc:creator>
				<category><![CDATA[CowFarm]]></category>

		<guid isPermaLink="false">http://andrewblogs.com/blog/?p=819</guid>
		<description><![CDATA[http://paceyourself.net Managing client side javascript with require.js]]></description>
			<content:encoded><![CDATA[<p>http://paceyourself.net <a target="_blank" href="http://paceyourself.net/2011/05/14/managing-client-side-javascript-with-requirejs/">Managing client side javascript with require.js</a></p>
]]></content:encoded>
			<wfw:commentRss>http://andrewblogs.com/blog/paceyourself-managing-client-side-javascript-with-require-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenID for ASP.NET MVC, A Quick Setup</title>
		<link>http://andrewblogs.com/blog/openid-for-asp-net-mvc-a-quick-setup/</link>
		<comments>http://andrewblogs.com/blog/openid-for-asp-net-mvc-a-quick-setup/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 21:55:41 +0000</pubDate>
		<dc:creator>Andrew Kharlamov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[DotNetOpenAuth]]></category>
		<category><![CDATA[openID asp.net]]></category>
		<category><![CDATA[OpenID for ASP.NET MVC A Quick Setup]]></category>
		<category><![CDATA[openID MVC]]></category>

		<guid isPermaLink="false">http://andrewblogs.com/blog/?p=709</guid>
		<description><![CDATA[I went around the internet looking for a quick tutorial setting up DotNetOpenAuth for a project. No big surprise everything I ran into was either too confusing to follow or filled with useless information. If you need to get your ASP.NET MVC website setup with some basic OpenID Authentication, I can help get you started. [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin-right:10px;" src="http://andrewblogs.com/images/openID.png" align="right" />I went around the internet looking for a <span style="text-decoration:underline">quick</span> tutorial setting up <strong><a href="http://www.dotnetopenauth.net" target="_tab">DotNetOpenAuth</a></strong> for a project. No big surprise everything I ran into was either too confusing to follow or filled with useless information.</p>
<p>If you need to get your ASP.NET MVC website setup with some basic OpenID Authentication, I can help get you started. All you need is a DLL, a view, and two controller actions.</p>
<div><br/></div>
<p>First <a href="https://www.ohloh.net/p/dotnetopenauth/download" target="_tab">download</a> the latest DotNetOpenAuth and extract the zip file. Let&#8217;s start.</p>
<div><br/></div>
<p><span id="more-709"></span></p>
<p>Add DotNetOpenAuth-X.X.X.XXXXX/Bin/DotNetOpenAuth.dll to your project references. <small><em>(DotNetOpenAuth.dll is the only runtime dependency you will need; everything else is described in the README.Bin.html.)</em></small></p>
<div><br/></div>
<p>Let&#8217;s create the authentication page, what’s important here is the form, add something like this to your login page:</p>
<pre class="brush:html">&lt;form action="/Authentication/Authenticate" method="post"&gt;
&lt;label for="openid_identifier"&gt;OpenID: &lt;/label&gt;
&lt;input id="openid_identifier" name="openid_identifier" /&gt;
&lt;input type="submit" value="Login" /&gt;
&lt;/form&gt;</pre>
<p>There are a lot of good plugins, that have images to pre-populate this one input field.</p>
<div><br/></div>
<p>Two key things to note here, openid_identifier and the form action attribute.</p>
<div><br/></div>
<p><strong>openid_identifier:</strong> is a url to an openID provider an example of this is: Google (https://www.google.com/accounts/o8/id), Yahoo (http://yahoo.com/), MyOpenID (http://myopenid.com/), etc</p>
<div><br/></div>
<p>The form action attribute is the url to your controller action. In this case using the basic routing, I have a Controller called AuthenticationController in my Controllers folder, with an action of Authenticate. Hence, /Authentication/Authenticate.</p>
<div><br/></div>
<p>The last step, writing the login and logout actions.</p>
<p>So how does this login action work? We need to send a request to our openid_identifier and receive a response with what’s called a ClaimedIdentifier.</p>
<div><br/></div>
<p><strong>ClaimedIdentifier:</strong> is the constant unique identifier provided from the openID provider, we use this to connect an openID user to a user account on your website, remember though one user can have many openIDs’.</p>
<div><br/></div>
<p>This is what the code would look like, go ahead and add it to your controller and look over the comments and code:</p>
<pre class="brush:csharp">private static OpenIdRelyingParty openid = new OpenIdRelyingParty();

/// &lt;summary&gt;
/// Authentication/Login post action.
/// Original code concept from
/// DotNetOpenAuth/Samples/OpenIdRelyingPartyMvc/Controller/UserController
/// for demo purposes I took out the returnURL, for this demo I
/// always want to login to the home page.
/// &lt;/summary&gt;
[ValidateInput(false)]
public ActionResult Authenticate() {
	var response = openid.GetResponse();
	var statusMessage = "";
	if (response == null) {
		Identifier id;
		//make sure your users openid_identifier is valid.
		if (Identifier.TryParse(Request.Form["openid_identifier"], out id)) {
			try {
				//request openid_identifier
				return openid.CreateRequest(Request.Form["openid_identifier"])
					.RedirectingResponse.AsActionResult();
			} catch (ProtocolException ex) {
				statusMessage = ex.Message;
				return View("Login",statusMessage);
			}
		} else {
			statusMessage = "Invalid identifier";
			return View( "Login" , statusMessage);
		}
	} else {
		//check the response status
		switch (response.Status) {
			//success status
			case AuthenticationStatus.Authenticated:
				Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay;
				FormsAuthentication.SetAuthCookie(response.ClaimedIdentifier, false);

				//TODO: response.ClaimedIdentifier, to login or create new account 

				return RedirectToAction("Index", "Home");

			case AuthenticationStatus.Canceled:
				statusMessage = "Canceled at provider";
				return View( "Login", statusMessage );

			case AuthenticationStatus.Failed:
				statusMessage = response.Exception.Message;
				return View( "Login" , statusMessage );
		}
	}
	return new EmptyResult();
}

public ActionResult Login() {
	//display initial login page with form to call Authenticate Action
	return View();
}
</pre>
<div><br/></div>
<p>Logging out is just as simple, add a link to /Authentication/Logout, and add this Action to your Controller:</p>
<pre class="brush:csharp">public ActionResult Logout() {
    FormsAuthentication.SignOut();

    //redirect to logout success page in page /Authentication/Logout
    return Redirect();
}</pre>
<p>Thats it, start your application and give it a shot!</p>
<div><br/></div>
<p>Some similar source code can be found in the DotNetOpenAuth Samples folder under OpenIdRelyingPartyMvc. If you would like to also provide openID&#8217;s on your website I would recommend you look over the OpenIdProviderMvc Sample&#8217;s Project. It took me about two hours to fully intigrate it within my project.</p>
]]></content:encoded>
			<wfw:commentRss>http://andrewblogs.com/blog/openid-for-asp-net-mvc-a-quick-setup/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>BDD for .NET, Behavior-Driven Development</title>
		<link>http://andrewblogs.com/blog/bdd-net-c-sharp-behavior-driven-development/</link>
		<comments>http://andrewblogs.com/blog/bdd-net-c-sharp-behavior-driven-development/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 15:14:01 +0000</pubDate>
		<dc:creator>Andrew Kharlamov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[BDD .NET]]></category>
		<category><![CDATA[BDD SpecFlow]]></category>
		<category><![CDATA[BDD SpecFlow .NET]]></category>
		<category><![CDATA[Behavior-Driven Development]]></category>
		<category><![CDATA[Behavior-Driven Development SpecFlow]]></category>
		<category><![CDATA[SpecFlow]]></category>

		<guid isPermaLink="false">http://andrewblogs.com/blog/?p=647</guid>
		<description><![CDATA[If you are like me you have tried every testing methodology in the book. Half way through it usually became a crutch, you couldn’t figure out why or how to use it to your advantage. Being an avid reader of Dan North’s blog, a while back I ran into the concept of Behavior-Driven Development. Testing [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://andrewblogs.com/images/testingpreview.jpg" /></p>
<p>If you are like me you have tried every testing methodology in the book. Half way through it usually became a crutch, you couldn’t figure out why or how to use it to your advantage. Being an avid reader of Dan North’s blog, a while back I ran into the concept of <a href="http://blog.dannorth.net/introducing-bdd/" target="_tab">Behavior-Driven Development</a>.</p>
<p>Testing always felt like a bad symptom to me and it got boring quickly. I felt like I was writing tests to prevent others from changing my code. Frankly it was just silly.</p>
<p>Sound familiar?<br />
<span id="more-647"></span></p>
<p>When you are handed a requirements document you skim over it, bold and highlight the important sections (maybe in your head), as you repeat the process details become finer. After that you either write tests or jump to development. Why not turn the skimming process into your tests, after all the most important information comes from that process. In example:</p>
<pre class="brush:plain">Feature:  Search Page
In order to find information on the website.
As a user.
I must navigate to the search page.
Scenario: In order to go to the search page I must click the search link.
	Given I am not on the search page
	Then I should see a search link.
	When I click the search link.
	Then I am redirected to the search page.</pre>
<p>That’s how BDD works. How many times in your code do you think you will have to write tests for: “Then I am redirected to the [] page.” See my point? What if I told you that was your code, you are done. I’d hope to see a big smile on your face. But how, how does it know!</p>
<p>We let it know:</p>
<pre class="brush:c-sharp">[Given(@"I am not on the (.*) page")]
public void GivenIAmNotOnThePage(string pageUrl)
{
   //code to check if you are not on the page.
}

[Then(@"I should see a (.*) link")]
public void ThenIShouldSeeALink (string linkLabel)
{
   //code to check if link exists.
}

[When(@"I click the (.*) link")]
public void WhenIClickTheLink (string linkLabel)
{
   //code to click the link.
}
[Then(@"Then I am redirected to the (.*) page")]
public void ThenIAmRedirectedToThePage (string pageUrl)
{
   //code to check if I am on the page.
}
</pre>
<p>Now you can write an infinite amount of tests to check if you have been redirected to any (.*) page, in plain English. Cool huh?</p>
<p>If you think so you should get SpecFlow:</p>
<p><a href="http://www.specflow.org" target="_tab">http://www.specflow.org</a></p>
<p>And watch this great 30 minute video by the guys over at TekPub:</p>
<p><a href="http://tekpub.com/view/concepts/5" target="_tab">http://tekpub.com/view/concepts/5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://andrewblogs.com/blog/bdd-net-c-sharp-behavior-driven-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zen Coding PHP (Pre 0.7), Zen Coding custom snippet example.</title>
		<link>http://andrewblogs.com/blog/zen-coding-php-zen-coding-custom-snippet-example/</link>
		<comments>http://andrewblogs.com/blog/zen-coding-php-zen-coding-custom-snippet-example/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 01:37:32 +0000</pubDate>
		<dc:creator>Andrew Kharlamov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[add custom zen coding tags]]></category>
		<category><![CDATA[customize zen coding]]></category>
		<category><![CDATA[make zen coding abbreviations]]></category>
		<category><![CDATA[zen coding php]]></category>
		<category><![CDATA[zen coding snippets]]></category>
		<category><![CDATA[zen coding snippets & php]]></category>
		<category><![CDATA[zen coding snippets and php]]></category>
		<category><![CDATA[Zencoding PHP]]></category>
		<category><![CDATA[zencoding snippets]]></category>

		<guid isPermaLink="false">http://andrewblogs.com/blog/?p=577</guid>
		<description><![CDATA[By now you are probably a big fan of Zen Coding, and want more. I am going to run through a tutorial on how to create custom snippets using the &#8220;Zen Coding.js&#8221; file. At the end of this tutorial I have a link to a PHP version I wrote for personal use, feel free to [...]]]></description>
			<content:encoded><![CDATA[<p>By now you are probably a big fan of Zen Coding, and want more. I am going to run through a tutorial on how to create custom snippets using the &#8220;Zen Coding.js&#8221; file.</p>
<p>At the end of this tutorial I have a link to a PHP version I wrote for personal use, feel free to download, edit, destroy, and share it.</p>
<p>Lets dive in.</p>
<p><span id="more-577"></span></p>
<p>If you are using Notepad++, &#8220;Zen Coding.js&#8221; is located here:</p>
<p><em>..\Notepad++\plugins\NppScripting\includes\Zen Coding.js</em></p>
<p>You will need to edit this file to add your own custom snippets/abbreviations.</p>
<p>Locate the following code <em>(contents have been replaced with &#8220;//there is code here&#8221;)</em>:</p>
<pre class="brush:php">
	'html': {
		'filters': 'html',
		'snippets': {
			//there is code here
		},
		'abbreviations': {
			//there is code here
		},
		'element_types': {
		}
	},
	'xsl': {
		'extends': 'html',
		'filters': 'html, xsl',
		'abbreviations': {
			//there is code here
		}
	},</pre>
<p>These are all of the existing html and xsl abbreviations and snippets provided with Zen Coding. </p>
<p>For the sake of time, we are going to add a PHP section right before this line:</p>
<pre class="brush:php">
	'xsl': {</pre>
<p>This will look like this:</p>
<pre class="brush:php">
	'html': {
		'filters': 'html',
		'snippets': {
			//there is code here
		},
		'abbreviations': {
			//there is code here
		},
		'element_types': {
		}
	},
	'php': {
		'filters': 'php, html',
		'snippets': {
			//we will write snippets here
		}
	},
	'xsl': {
		'extends': 'html',
		'filters': 'html, xsl',
		'abbreviations': {
			//there is code here
		}
	},</pre>
<p>Make sure your curly braces, comas, etc. are correct otherwise you will get an error loading the file.</p>
<p>Now locate:</p>
<pre class="brush:php">
	var know_syntaxes = {
		'html': 1,
		//there is more code here

	};
</pre>
<p>Add &#8216;php&#8217;: 1 to this code, like this: </p>
<pre class="brush:php">
	var know_syntaxes = {
		'html': 1,
		'php': 1,
		//there is more code here
	};
</pre>
<p>Finally, lets add a snippet, I am going to create one for an inline function as my blog won&#8217;t let me write out actual php code without rendering it, if you would like to wrap your code in a php tag go right ahead.</p>
<p>So lets try something like this:</p>
<pre class="brush:php">
	'php': {
		'filters': 'php, html',
		'snippets': {
			//we will write snippets here
			'php:func':	'function |() {\n\t\n}',
		}
	},</pre>
<p><strong>|</strong> is the position of your mouse cursor.</p>
<p><strong>\n</strong> is new line</p>
<p><strong>\t</strong> is tab</p>
<p>See simple.</p>
<p>Save your &#8220;Zen Coding.js&#8221; file, restart your application in our case Notepad++. </p>
<p>Now if you were to type in php:func then click Ctrl+E, this would expand to:</p>
<pre class="brush:php">
function () {

}</pre>
<p>tada, and now as promised:</p>
<h3>My attempt at PHP snippets!</h3>
<p>Download/Preview the PHP section, via copy paste from here: <a href="http://andrewblogs.com/zen-coding/Zen%20Coding%20Php.txt" target="_tab">Preview/Download</a>.</p>
<p>Or</p>
<p>Download the entire <a href="http://andrewblogs.com/zen-coding/Zen%20Coding.js" target="_tab">Zen Coding.js</a> file, by right click save as.</p>
<p>&#8212;</p>
<p>As you can see there is so much room for editing and customizing your own abbreviations and snippets. I haven&#8217;t even touched the tip of the iceberg. So go explore and good luck, just make sure to make a backup file. <img src='http://andrewblogs.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://andrewblogs.com/blog/zen-coding-php-zen-coding-custom-snippet-example/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>In other news, QTAgent32.exe Virus?</title>
		<link>http://andrewblogs.com/blog/in-other-news-qtagent32-exe-virus/</link>
		<comments>http://andrewblogs.com/blog/in-other-news-qtagent32-exe-virus/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 21:36:24 +0000</pubDate>
		<dc:creator>Andrew Kharlamov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Dell Computer Slow]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[QTAgent32.exe]]></category>
		<category><![CDATA[QTAgent32.exe Solution]]></category>
		<category><![CDATA[Virus]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>
		<category><![CDATA[VS 2010 QTAgent32]]></category>
		<category><![CDATA[VS10 QTAgent32]]></category>

		<guid isPermaLink="false">http://cowfarm.net/?p=318</guid>
		<description><![CDATA[Microsoft, has officially re-released a self aware Dell Hardware destroying Virus in Visual Studio 2010. This virus will effect your computer if you start running Unit Tests, it is currently masquerading around as what appears to be a QuickTimeAgent32 process, to divert the blame on Apple. Over time it will slowly make your hardware less [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft, has <del datetime="2010-06-23T21:28:00+00:00">officially</del> re-released a self aware Dell Hardware destroying Virus in Visual Studio 2010. This virus will effect your computer if you start running Unit Tests, it is currently masquerading around as what appears to be a QuickTimeAgent32 process, to divert the blame on Apple. </p>
<p>Over time it will slowly make your hardware less functional and will make you want to crawl under your desk, or go after your computer with a baseball bat.</p>
<p>The <a href="http://connect.microsoft.com/VisualStudio/feedback/details/465633/qtagent32-exe-crashes-when-running-a-unit-test-that-calls-itself" target="_blank">current fix</a> is to not run Unit Tests, or if you really have to, you can use ReSharper:</p>
<p> <strong>ReSharper -> Unit Tests -> Run All Tests from Solution.</strong></p>
<p>Yes, this is a <strong>joke</strong>, well the virus part anyway!</p>
]]></content:encoded>
			<wfw:commentRss>http://andrewblogs.com/blog/in-other-news-qtagent32-exe-virus/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Moq Testing Tutorial</title>
		<link>http://andrewblogs.com/blog/moq-testing-tutorial/</link>
		<comments>http://andrewblogs.com/blog/moq-testing-tutorial/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 18:59:18 +0000</pubDate>
		<dc:creator>Andrew Kharlamov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Mock Objects]]></category>
		<category><![CDATA[Mock q]]></category>
		<category><![CDATA[Mocking]]></category>
		<category><![CDATA[Moq]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://cowfarm.net/?p=156</guid>
		<description><![CDATA[If your reading this then I assume you are either looking for or have an interest in a mocking framework for testing your .NET Applications. In this tutorial I will step you through a framework called Moq for (.NET) released under the New BSD License. I will not be discussing what Mocking is here as [...]]]></description>
			<content:encoded><![CDATA[<p>If your reading this then I assume you are either looking for or have an interest in a mocking framework for testing your .NET Applications.</p>
<p>In this tutorial I will step you through a framework called <strong>Moq</strong> for (.NET) released under the <a href="http://www.opensource.org/licenses/bsd-license.php" target="_blank">New BSD License</a>. I will not be discussing what Mocking is here as that&#8217;s outside the scope of this tutorial. <a href="http://en.wikipedia.org/wiki/Mock_object" target="_blank">What is mocking/mock object?</a></p>
<p>Before we jump in to the code, here are some important links:</p>
<p><a href="http://code.google.com/p/moq/" target="_blank">Get Moq.</a></p>
<p><a href="http://code.google.com/p/moq-contrib/" target="_blank">Get Moq Contrib</a></p>
<p><a href="http://www.clariusconsulting.net/labs/moq/index.html" target="_blank">Moq API.</a></p>
<p>So lets dive in, assuming you already added a reference to the Moq DLL and Moq.Contrib DLL in your project. Let&#8217;s start out by creating a new Abstract class to your project. During this session I am going to call this class: UnitBaseAbstractClass for readability.</p>
<p><span id="more-156"></span></p>
<h3>Creating A Base Test Class</h3>
<p><b>UnitBaseAbstractClass:</b> This class is in charge of setting up a Moq based environment for each of your TestClass&#8217;.</p>
<p>1. First let&#8217;s add the Moq and Moq.Contrib namespaces to this UnitBaseAbstractClass class.</p>
<pre name="code" class="brush:c-sharp">

using Moq;
using Moq.Contrib;
</pre>
<p>That was simple!</p>
<p>2. Now lets add the</b> [TestClass] attribute to the top of this class, for anything extending it will now need to be a test.</p>
<pre name="code" class="brush:c-sharp">
using Moq;
using Moq.Contrib;

namespace MyUnitTests
{
    [TestClass]
    public abstract class UnitBaseAbstractClass
    {
    }
}
</pre>
<p>3. This maybe a bit confusing but bare with me; we are now going to add two public members to our UnitBaseAbstractClass class these are of type MockFactory and AutoMockContainer. See the next example:</p>
<p><b>MockFactory:</b> A utility factory used to manage a mocks lifecycle.</p>
<p><b>AutoMockContainer:</b> A container used to automatically inject mocks into desired objects.</p>
<pre name="code" class="brush:c-sharp">
using Moq;
using Moq.Contrib;

namespace MyUnitTests
{
    [TestClass]
    public abstract class UnitBaseAbstractClass
    {

            public MockFactory _factory;
            public AutoMockContainer _container;

    }
}
</pre>
<p>tada&#8230;</p>
<p>4. We will now need to create a method called &#8220;Setup&#8221; which will take in a MockBehavior enum. In this tutorial we will only use: MockBehavior.Default.</p>
<p><b>MockBehavior:</b> Tells the MockFactory how to behave. The <strong>Strict</strong> behavior throws an exception if a mock isn&#8217;t setup exactly like its mocked object. <strong>Loose</strong> will never throw an exception and <strong>Default</strong> is setup to use the Loose behavior. </p>
<p><i>(If you don&#8217;t understand what this means it&#8217;s alright to move on, as it will not affect you yet.)</i></p>
<p>5. We are going to use Setup to instantiate both MockFactory and AutoMockContainer the factory will need the behavior passed into Setup and the AutoMockContainer will need the MockFactory. </p>
<p>Like this:</p>
<pre name="code" class="brush:c-sharp">
using Moq;
using Moq.Contrib;

namespace MyUnitTests
{
    [TestClass]
    public abstract class UnitBaseAbstractClass
    {

    public MockFactory _factory;
    public AutoMockContainer _container;

        public void Setup(MockBehavior behavior)
        {
            _factory = new MockFactory(behavior);
            _container = new AutoMockContainer(_factory);
        }

    }
}
</pre>
<p>6. Last but not least we want to implement our [TestCleanup]. We will call this method VerifyAll, all it will do is verify that all of our mocks were used and that they were used correctly. Making the final code look something like this:</p>
<pre name="code" class="brush:c-sharp">
using Moq;
using Moq.Contrib;

namespace MyUnitTests
{
    [TestClass]
    public abstract class UnitBaseAbstractClass
    {

    public MockFactory _factory;
    public AutoMockContainer _container;

        public void Setup(MockBehavior behavior)
        {
            _factory = new MockFactory(behavior);
            _container = new AutoMockContainer(_factory);
        }

        [TestCleanup]
        public void VerifyAll()
        {
            _factory.VerifyAll();
        }

    }
}
</pre>
<p>Nice, small, and powerful.</p>
<h3>A Test Class using our Base Class</h3>
<p>The fun part!</p>
<p>1. Let&#8217;s start by writing some tests against this pseudo PersonService class:</p>
<pre name="code" class="brush:c-sharp">
namespace MyRear
{

    public class PersonService
    {
        private readonly IRepository _repository;

        public PersonService(IRepository repository)
        {
              _repository = repository;
        }
        public bool SavePerson(Person person)
        {
        		try{
        		   return _repository.Save(person);
        		}
	        	catch (Exception ex){
	        	   throw new CustomException(ex);
	        	}
        }
    }
}
</pre>
<p>2. Lets create our test class using UnitBaseAbstractClass. Our [TestInitialize] will be using the base Setup method we created in UnitBaseAbstractClass and we will use the</b> AutoMockContainer to create a new instance of our PersonService class. We will also create a new person.</p>
<p>That was a mouthful, like this:</p>
<pre name="code" class="brush:c-sharp">
namespace MyRearTests
{
    [TestClass]
    public class PersonServiceTests : UnitBaseAbstractClass
    {
        private readonly PersonService _service;
	     private Person _person;

        [TestInitialize]
        public void SetupPerson()
        {
            Setup(MockBehavior.Default);
            _service = _container.Create&lt;PersonService&gt;();
	         _person = new Person();
	    }

    }
}
</pre>
<p>3. Time to write the tests! Before that though, I want to show you how to mock _repository.Save the code that calls the Database. Which in this case we do not want to access in our testing environment.</p>
<p>This code:</p>
<pre name="code" class="brush:c-sharp">

return _repository.Save(person);
</pre>
<p>4. First we want to get a mock object for IRepository because this is how we are going to call Save.</p>
<p>We do this with this line of code:</p>
<pre name="code" class="brush:c-sharp">

 _container.GetMock&lt;IRepository&gt;()
</pre>
<p>6. We then want to make sure that we can mock Save. We accomplish this via some Linq we call the Expect method.</p>
<p>In it we call Save and pass our _person object.</p>
<pre name="code" class="brush:c-sharp">

 _container.GetMock&lt;IRepository&gt;()
	    .Expect(s => s.Save(_person))
</pre>
<p>7. We then need to tell the object what to return (in this case I return a bool, lets say true). After calling the Returns method make sure to verify that this mock was even needed via Verifiable method.</p>
<pre name="code" class="brush:c-sharp">
 _container.GetMock&lt;IRepository&gt;()
	    .Expect(s => s.Save(_person))
	    .Returns(true)
	    .Verifiable();
</pre>
<p>8. Lets make it a test now!</p>
<pre name="code" class="brush:c-sharp">
namespace MyRearTests
{
    [TestClass]
    public class PersonServiceTests : UnitBaseAbstractClass
    {
        private readonly PersonService _service;
	    private Person _person;

        [TestInitialize]
        public void PersonServiceSetup()
        {
            Setup(MockBehavior.Default);
            _service = _container.Create&lt;PersonService&gt;();
	        _person = new Person();
	    }

        [TestMethod]
        public void SavePersonSuccess()
        {
 	        var result =
        	        _container.GetMock&lt;IRepository&gt;()
		            .Expect(s => s.Save(_person))
	            	    .Returns(true)
		            .Verifiable();

            Assert.IsTrue(result, "Person should have saved.");
        }

    }
}
</pre>
<p>9. Lets add another test that returns false, a failed save.</p>
<pre name="code" class="brush:c-sharp">
namespace MyRearTests
{
    [TestClass]
    public class PersonServiceTests : UnitBaseAbstractClass
    {
        private readonly PersonService _service;
	    private Person _person;

        [TestInitialize]
        public void PersonServiceSetup()
        {
            Setup(MockBehavior.Default);
            _service = _container.Create&lt;PersonService&gt;();
	        _person = new Person();
	    }

        [TestMethod]
        public void SavePersonSuccess()
        {
 	        var result =
        	    _container.GetMock&lt;IRepository&gt;()
		            .Expect(s => s.Save(_person))
		            .Returns(true)
		            .Verifiable();

            Assert.IsTrue(result, "Person should save.");
        }

        [TestMethod]
        public void SavePersonFail()
        {
 	        var result =
        	        _container.GetMock&lt;IRepository&gt;()
		            .Expect(s => s.Save(_person))
		            .Returns(false)
		            .Verifiable();

            Assert.IsFalse(result, "Person should not save.");
        }

    }
}
</pre>
<p>10. The last test is a bit tricky its why we wrapped Save in PersonService with a try catch and threw a custom exception. </p>
<p>First lets write something like this:</p>
<pre name="code" class="brush:c-sharp">

 _container.GetMock&lt;IRepository&gt;()
	    .Expect(s => s.Save(_person))
</pre>
<p>11. Handling exceptions is different then normal asserts throwing them is different too. </p>
<p>In order to throw an exception we need to call the Throws method instead of returns.</p>
<pre name="code" class="brush:c-sharp">
 _container.GetMock&lt;IRepository&gt;()
	    .Expect(s => s.Save(_person))
	    .Throws(new Exception("Save Threw Up"))
	    .Verifiable();
</pre>
<p>12. Lets make sure we handle the code. We do this with the [ExpectedException] attribute on our test methods.</p>
<p>Like so:</p>
<pre name="code" class="brush:c-sharp">
        [TestMethod]
        [ExpectedException(typeof(CustomException))]
        public void SavePersonException()
        {
		        _container.GetMock&lt;IRepository&gt;()
		        .Expect(s => s.Save(_person))
		        .Throws(new Exception("Save Threw Up"))
		        .Verifiable();
	        }
</pre>
<p>13. The Final Test looks like this:</p>
<pre name="code" class="brush:c-sharp">
namespace MyRearTests
{
    [TestClass]
    public class PersonServiceTests : UnitBaseAbstractClass
    {
        private readonly PersonService _service;
	    private Person _person;

        [TestInitialize]
        public void PersonServiceSetup()
        {
            Setup(MockBehavior.Default);
            _service = _container.Create&lt;PersonService&gt;();
	        _person = new Person();
	    }

        [TestMethod]
        public void SavePersonSuccess()
        {
 	        var result =
        	    _container.GetMock&lt;IRepository&gt;()
		    .Expect(s => s.Save(_person))
		    .Returns(true)
		    .Verifiable();

            Assert.IsTrue(result, "Person should save.");
        }

        [TestMethod]
        public void SavePersonFail()
        {
 	        var result =
        	    _container.GetMock&lt;IRepository&gt;()
		    .Expect(s => s.Save(_person))
		    .Returns(true)
		    .Verifiable();

            Assert.IsFalse(result, "Person should not save.");
        }

        [TestMethod]
        [ExpectedException(typeof(CustomException))]
        public void SavePersonException()
        {
		    _container.GetMock&lt;IRepository&gt;()
		     .Expect(s => s.Save(_person))
		     .Throws(new Exception("Save Threw Up"))
		     .Verifiable();
	    }
    }
}
</pre>
<p>I hope this helped you out a bit more in understanding the Moq Framework. Good Luck, let me know if I need to change anything in the tutorial or make anything clearer!</p>
]]></content:encoded>
			<wfw:commentRss>http://andrewblogs.com/blog/moq-testing-tutorial/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Css Syntax Highlighting for Scss</title>
		<link>http://andrewblogs.com/blog/css-syntax-highlighting-for-scss/</link>
		<comments>http://andrewblogs.com/blog/css-syntax-highlighting-for-scss/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 21:33:11 +0000</pubDate>
		<dc:creator>Andrew Kharlamov</dc:creator>
				<category><![CDATA[CowFarm]]></category>

		<guid isPermaLink="false">http://andrewblogs.com/blog/?p=659</guid>
		<description><![CDATA[I wrote a quick little extension for Visual Studio 2010, which allows you to View SCSS with CSS 2.1 Syntax Highlighting and Intellisense, not the greatest thing in the world, but it helps a bit. It can easily be uninstalled through the Extension Manager, if you don&#8217;t want it anymore. I basically took the values [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote a quick little extension for Visual Studio 2010, which allows you to View SCSS with CSS 2.1 Syntax Highlighting and Intellisense, not the greatest thing in the world, but it helps a bit. </p>
<p>It can easily be uninstalled through the Extension Manager, if you don&#8217;t want it anymore.  I basically took the values in my Registry for Css and duplicated them for SCSS.  </p>
<p>Extension Source:</p>
<pre class="brush:plain">[$RootKey$\Languages\File Extensions\.scss]
@="{A764E898-518D-11d2-9A89-00C04F79EFC3}"

[$RootKey$\Editors\{A764E89A-518D-11d2-9A89-00C04F79EFC3}\Extensions]
"scss"=dword:00000040</pre>
<p><strong>READ BEFORE INSTALL!:</strong></p>
<ul>
<li>You must &#8220;Exclude [files] from Project&#8221; [SCSS] after install, then &#8220;View hidden files&#8221; and &#8220;Include files in Project&#8221; to make this work on existing files.</li>
<li>Run the installer as an Administrator.</li>
<li>Remove any entries for &#8220;scss&#8221; from: Tools, Text Editor, File Extension.</li>
</ul>
<p><strong>Download Extension:</strong> <a href="http://andrewblogs.com/ScssInCss.zip">ScssInCss</a></p>
]]></content:encoded>
			<wfw:commentRss>http://andrewblogs.com/blog/css-syntax-highlighting-for-scss/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Consume a WordPress RSS Feed in C# and cache it.</title>
		<link>http://andrewblogs.com/blog/consume-wordpress-rss-feed-in-c-sharp-and-cache-it/</link>
		<comments>http://andrewblogs.com/blog/consume-wordpress-rss-feed-in-c-sharp-and-cache-it/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 15:22:02 +0000</pubDate>
		<dc:creator>Andrew Kharlamov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[how do I load an rss feed in c#]]></category>
		<category><![CDATA[load rssfeed C#]]></category>
		<category><![CDATA[rss feed C#]]></category>
		<category><![CDATA[rssfeed in c#]]></category>
		<category><![CDATA[wordpress feed]]></category>
		<category><![CDATA[wordpress rss feed in c#]]></category>

		<guid isPermaLink="false">http://cowfarm.net/?p=396</guid>
		<description><![CDATA[I couldn&#8217;t find a simple example of reading a WordPress Blog Feed in C# and caching it. So I decided to write out my own. Here is an example to get you started. I wrote it in two parts: A Class that Consumes a Feed (FeedReader) An Object representing a Feed Item (FeedViewModel). And so [...]]]></description>
			<content:encoded><![CDATA[<p>I couldn&#8217;t find a simple example of reading a WordPress Blog Feed in C# and caching it. So I decided to write out my own.</p>
<p>Here is an example to get you started. I wrote it in two parts:</p>
<p><strong>A Class that Consumes a Feed</strong> (FeedReader)<br />
<strong>An Object representing a Feed Item</strong> (FeedViewModel).</p>
<p>And so we begin:</p>
<p><span id="more-396"></span></p>
<pre class="brush:c-sharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace FeedExample
{

	public class FeedReader
	{
		public static IList&lt;FeedViewModel&gt; GetBlogFeed(string feedUrl, int feedCount)
		{
			//Load feed via a feedUrl.
			var doc = XDocument.Load(feedUrl); 

			//Get all the "items" in the feed.
			var feeds = doc.Descendants("item").Select(x =&gt;
					new FeedViewModel
					{
					     //Get title, pubished date, and link elements.
						Title = x.Element("title").Value, //3
						PublishedDate = DateTime.Parse(x.Element("pubDate").Value),
						Url = x.Element("link").Value
					} //  Put them into an object (FeedViewModel)
					)
					// Order them by the pubDate (FeedViewModel.PublishedDate).
					.OrderByDescending(x=&gt; x.PublishedDate)
					//Only get the amount specified, the top (1, 2, 3, etc.) via feedCount.
					.Take(feedCount);

 			//Convert the feeds to a List and return them.
			return feeds.ToList();
		}
	}

	public class FeedViewModel
	{
		public string Title { get; set; }
		public string Url { get; set; }
		public DateTime PublishedDate { get; set; }
	}

}
</pre>
<p>You can get some more items from the feed like: title, link, comments, pubDate, dc:creator, category, guid, description, content:encoded, etc&#8230;</p>
<p>To prevent your website from slowing down you can cache your feed like this:</p>
<pre class="brush:c-sharp">//Check if feed exists
if (HttpRuntime.Cache["Feed"] == null)
				{
					//If it is, insert it into the cache, cache for 10 minutes
					HttpRuntime.Cache.Insert("Feed",
						FeedReader.GetBlogFeed("url", 5), null, SystemTime.Now().AddMinutes(10), Cache.NoSlidingExpiration);
				}

//retrieve cached feeds
var cachedFeeds = (List&lt;FeedItemViewModel&gt;) HttpRuntime.Cache["Feed"]
</pre>
<p>HttpRuntime.Cache is part of the System.Web namespace.</p>
]]></content:encoded>
			<wfw:commentRss>http://andrewblogs.com/blog/consume-wordpress-rss-feed-in-c-sharp-and-cache-it/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC Email Template Solution</title>
		<link>http://andrewblogs.com/blog/asp-net-mvc-email-solution/</link>
		<comments>http://andrewblogs.com/blog/asp-net-mvc-email-solution/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 15:23:25 +0000</pubDate>
		<dc:creator>Andrew Kharlamov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ASP Email]]></category>
		<category><![CDATA[ASP.NET EMAIL Templates]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[email template engine]]></category>
		<category><![CDATA[EmailTemplates]]></category>
		<category><![CDATA[MVC Email]]></category>
		<category><![CDATA[Spark]]></category>
		<category><![CDATA[Spark Email]]></category>
		<category><![CDATA[spark template engine]]></category>
		<category><![CDATA[Spark View Engine]]></category>

		<guid isPermaLink="false">http://cowfarm.net/?p=188</guid>
		<description><![CDATA[If you are like me then you have probably ran into a wall with using ASP.NET MVC View Engine to render your awesome Dynamic HTML Email Templates. At least you put up a fight using a lot of fake data. It is actually possible to get around it! var oldContext = HttpContext.Current; HttpContext.Current = new [...]]]></description>
			<content:encoded><![CDATA[<p>If you are like me then you have probably ran into a wall with using ASP.NET MVC View Engine to render your awesome Dynamic HTML Email Templates. At least you put up a fight using a lot of fake data. It is actually possible to get around it!</p>
<pre name="code" class="brush:c-sharp">

        var oldContext = HttpContext.Current;
        HttpContext.Current = new HttpContext(HttpContext.Current.Request,
        fakeResponse);

        var html = new HtmlHelper(new ViewContext(fakeControllerContext,
        new FakeView(), fakeViewDataDictionary, new TempDataDictionary()),
        new ViewPage());

        html.RenderPartial(viewName, viewData, viewDataDictionary);
        HttpContext.Current = oldContext; //yay 
</pre>
<p>Though, because you’re reading this you&#8217;re like me and you never give up! So how, how do you get around all of this? The answer is Spark. Eeek, another DLL? Yes, Spark is its own View Engine which is an entire different framework. Yes, you have to go to their website download the DLLS, put it in your Lib folder and reference it in your code. Let me tell you now, it is well worth it. Let&#8217;s dive in!</p>
<p>Let&#8217;s write the code to render our email using the Spark. We want our code to take in the template name, something like: &#8220;ForgotUsernameEmail.spark&#8221; and we also want it to reuse our current ViewData Object which is of type ViewDataDictionary and contains Person data, we will need to add this into our own implementation of AbstractSparkView. See samples bellow: </p>
<p><span id="more-188"></span></p>
<p><strong>Render Email Method:</strong></p>
<pre name="code" class="brush:c-sharp">

public string RenderEmail(string sparkViewName, ViewDataDictionary
viewData)
{
     var email = new StringWriter();
     var view = (EmailTemplateBase) _engine.CreateInstance(new
     SparkViewDescriptor().AddTemplate(sparkViewName));
     view.ViewData = viewData;

     try
     {
         view.RenderView(email);
     }
     finally
     {
         _engine.ReleaseInstance(view);
     }
     return email.ToString();
}
</pre>
<p><em>Oops thanks Arnis, forgot to mention EmailTemplateBase is just an extended version of AbstractSparkView that includes the ASP.NET MVC ViewDataDictionary.</em></p>
<p><strong>Custom Spark AbstractSparkView with ViewData implementation:</strong></p>
<pre name="code" class="brush:c-sharp">

    public abstract class EmailTemplateBase : AbstractSparkView
    {
        public ViewDataDictionary ViewData { get; set; }

        public object Eval(string expression)
        {
            return ViewData.Eval(expression);
        }

        public string Eval(string expression, string format)
        {
            return ViewData.Eval(expression, format);
        }

    }
</pre>
<p>So that&#8217;s done, let’s make the template… In my MVC Web Project I am going to add into my Views folder or maybe even Views/Email <img src='http://andrewblogs.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  a file called &#8220;ForgotUsernameEmail.spark&#8221;.</p>
<pre name="code" class="brush:html">

Dear ${#name}:


Your username is ${#userName}.


Thank You.
<use file="~/Views/Email/Signature"/>
</pre>
<p>I also put in a use tag to pull down a Signature file, since this is the same in everyone of my emails. Now let’s actually write the code to call it:</p>
<pre name="code" class="brush:c-sharp">

string email = RenderEmail("ForgotUsernameEmail.spark",ViewData);
</pre>
<p>And that’s all you need to do, well besides read up on spark syntax: <a href ="http://www.sparkviewengine.com/documentation/configuring" target="_blank">http://www.sparkviewengine.com/documentation/configuring</a></p>
]]></content:encoded>
			<wfw:commentRss>http://andrewblogs.com/blog/asp-net-mvc-email-solution/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

