<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.simpable.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.simpable.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:georss="http://www.georss.org/georss" version="2.0"><channel><title>Simpable</title><link>http://simpable.com/</link><description>Learning something new everyday</description><generator>Graffiti CMS 1.0 (build 1.0.0.937)</generator><lastBuildDate>Thu, 15 May 2008 09:30:58 GMT</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.simpable.com/Simpable" type="application/rss+xml" /><item><title>Enhancing Desktop Computing with the Cloud</title><link>http://simpable.com/software/cloudtop/</link><pubDate>Thu, 15 May 2008 12:30:58 GMT</pubDate><guid isPermaLink="true">http://simpable.com/software/cloudtop/</guid><dc:creator>Scott Watermasysk</dc:creator><slash:comments>8</slash:comments><category domain="http://simpable.com/software/">Software</category><description>&lt;p&gt;There is a lot of (rightfully so) hype around cloud computing and web based tools. One area, that I find very interesting which gets very little coverage is desktop computing with &lt;strong&gt;support in the cloud&lt;/strong&gt;. There are three tools that I use all the time which marry a desktop experience which is enhanced in the cloud.&lt;/p&gt;


&lt;h3&gt;Three Great Tools&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://evernote.com/" title="Remember everything. | Evernote Corporation"&gt;Evernote&lt;/a&gt;&lt;/strong&gt; - (Mac &amp;amp; PC) "&lt;em&gt;Evernote allows you to easily capture information in any environment using whatever device or platform you find most convenient, and makes this information accessible and searchable at anytime, from anywhere&lt;/em&gt;". I primarily enter notes on my &lt;a href="http://simpable.com/technology/greener-grass/" title="Life on a Mac - the Grass is Greener : Simpable"&gt;MBP&lt;/a&gt;, but since it will sync itself across multiple devices it is very to retrieve those notes when I am on a PC. In addition, there is a web based access and a new iPhone specific interface. What really sets Evernote apart from other software (OneNote) are the options for adding notes (dragging images, printing directly to it, copy and paste with images). In addition, if making your content accessible wasn't enough, images are processed with &lt;a href="http://en.wikipedia.org/wiki/Optical_character_recognition" title="Optical character recognition - Wikipedia, the free encyclopedia"&gt;OCR&lt;/a&gt;. What this means is that when you do a search you are not only searching text, but potentially text from your images. &lt;a href="http://www.youtube.com/watch?v=i_ncr1Ee9e8"&gt;Video Overview&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://skitch.com/" title="Skitch.com + Skitch = fast and fun screen capture and image sharing."&gt;&lt;strong&gt;Skitch&lt;/strong&gt;&lt;/a&gt; - (Mac only) "&lt;em&gt;Skitch.com is a webservice that works hand in hand with our application Skitch to give you 1-click
uploading of images for fast and fun image sharing&lt;/em&gt;". I have &lt;a href="http://simpable.com/software/mac-five-months/" title="Life on a Mac - Five Months Later : Simpable"&gt;mentioned Skitch&lt;/a&gt; before. This tool just rocks and of the three tools I am writing about today, it is the one I would be totally lost without. It makes it so simple and easy to share an a screenshot/picture/image I am not sure what I would do without. And of course, it works flawlessly with Evernote. &lt;a href="http://www.viddler.com/explore/plasq/videos/2/"&gt;Video Overview&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;&lt;a href="http://jingproject.com/" title="Jing Project: Visual conversation starts here. Mac or Windows."&gt;Jing&lt;/a&gt;&lt;/strong&gt; - (Mac &amp;amp; PC) Jing allows you in an effortless way capture images and video of your desktop and share them with the world (or privately). Since I am a Skitch fan, I do not use the image sharing often, but the video feature has become an integral part of &lt;a href="http://telligent.com"&gt;our software development process&lt;/a&gt;. &lt;a href="http://video.techsmith.com/jing/latest/demo/introvideo/index.html?keepThis=true&amp;TB_iframe=true&amp;height=440&amp;width=640"&gt;Video Overview&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;One Annoying Thing&lt;/h3&gt;

&lt;p&gt;There is one thing these three tools/services have in common that annoys the hell out of me. All of them are currently in beta and free to use. I fully expect they will all at some point charge for their software and services. I have zero problems paying for great software, especially for software I find as useful as these three tools. However, all three of the companies behind these tools have been very quite about their future intentions. I suspect all three will be reasonably priced, but it definitely worries me to have such a personal dependency on something without a known cost.&lt;/p&gt;

&lt;h3&gt;You?&lt;/h3&gt;

&lt;p&gt;Are there any other tools you are using? If so, please let me know in the comments.&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://simpable.com/software/"&gt;Software&lt;/a&gt; 
 and tagged as 
&lt;a href="http://simpable.com/tags/mac/"&gt;mac&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/jing/"&gt;jing&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/evernote/"&gt;evernote&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/skittish/"&gt;skittish&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/cloud/"&gt;cloud&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://simpable.com/technology/iphone-vs-blackberry/"&gt;iPhone vs. BlackBerry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/mac-software/"&gt;What Software do I use on the Mac?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/mac-five-months/"&gt;Life on a Mac - Five Months Later&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.simpable.com/~a/Simpable?a=MCNp6R"&gt;&lt;img src="http://feeds.simpable.com/~a/Simpable?i=MCNp6R" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><georss:point>40.330487,-74.410492</georss:point><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=Simpable&amp;itemurl=http%3A%2F%2Fsimpable.com%2Fsoftware%2Fcloudtop%2F</feedburner:awareness></item><item><title>Developer Choice</title><link>http://simpable.com/code/developer-choice/</link><pubDate>Wed, 14 May 2008 13:03:14 GMT</pubDate><guid isPermaLink="true">http://simpable.com/code/developer-choice/</guid><dc:creator>Scott Watermasysk</dc:creator><slash:comments>5</slash:comments><category domain="http://simpable.com/code/">Code</category><description>&lt;p&gt; This post initially started as a set of notes related to my own research around NHibernate and Linq to SQL. However, it quickly turned into a very obvious "ah ha" moment. &lt;/p&gt;


&lt;p&gt;
	As I have previously mentioned, I have been doing a lot of &lt;a href="http://simpable.com/code/castle/" title="Castle Project : Simpable"&gt;research lately on various tools&lt;/a&gt;. One area I have focused on recently is data access. This is an area of hot debate for many people and can easily turn into a pissing match, so I first want to share my key take away:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tool in itself, does not matter. It is all about what you are comfortable with.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In hindsight, this is very obvious. It is generally the answer to most developer questions (C# vs. VB, SQL Server vs. MySQL, ASP.Net vs. Rails). There will always be trade offs. The result will never be perfect.&lt;/p&gt;

&lt;p&gt;This of course does not mean you shouldn't try anything new. The world of software is in constant flux. I routinely cringe at code I wrote a year ago. However, if you spend all your time looking for the perfect solution, you won't leave yourself the necessary time to build something great.&lt;/p&gt;

&lt;p&gt;FYI, if you are still interested in the NHibernate vs Linq to SQL, here is a &lt;a href="http://www.callcontext.com/archive/2008/04/04/1163.aspx" title="CallContext : Linq to SQL vs. NHibernate"&gt;nice overview&lt;/a&gt; by &lt;a href="http://www.callcontext.com/" title="CallContext"&gt;Geoff Bennet&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://simpable.com/code/"&gt;Code&lt;/a&gt; 
 and tagged as 
&lt;a href="http://simpable.com/tags/nhiberate/"&gt;nhiberate&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/linq/"&gt;linq&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/active-record/"&gt;active-record&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/x-copy-db/"&gt;X-Copy Database Options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/life/introductions/"&gt;Introductions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/graffiti-v-wordpress-2/"&gt;Graffiti v. Wordpress - Part II&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.simpable.com/~a/Simpable?a=vrsyrA"&gt;&lt;img src="http://feeds.simpable.com/~a/Simpable?i=vrsyrA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><georss:point>40.330487,-74.410492</georss:point><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=Simpable&amp;itemurl=http%3A%2F%2Fsimpable.com%2Fcode%2Fdeveloper-choice%2F</feedburner:awareness></item><item><title>MvcContrib NVelocity Extension</title><link>http://simpable.com/code/mvccontrib-nvelocity/</link><pubDate>Tue, 13 May 2008 14:07:05 GMT</pubDate><guid isPermaLink="true">http://simpable.com/code/mvccontrib-nvelocity/</guid><dc:creator>Scott Watermasysk</dc:creator><slash:comments>2</slash:comments><category domain="http://simpable.com/code/">Code</category><description>&lt;p&gt;One of the major selling points of &lt;a href="http://www.asp.net/mvc"&gt;ASP.Net MVC&lt;/a&gt; is its extensibility options. Almost every piece of it can updated or swapped out. I have been hacking on the bits quite a bit over the last couple of weeks and have been using the &lt;a href="http://codeplex.com/MVCContrib"&gt;MvcContrib&lt;/a&gt; to augment some of the built in ASP.Net functionality.&lt;/p&gt; &lt;p&gt;The main piece of MvcContrib I have been using is it's NVelocity view engine. As I previously mentioned, I personally find &lt;a href="http://simpable.com/code/nvelocity/"&gt;NVelocity much easier to work with&lt;/a&gt; than standard aspx pages. &lt;/p&gt; &lt;p&gt;One of the features I had previously leveraged in NVelocity was the concept of a Toolbox. A toolbox, as the name implies is a collection of objects you can build to make building views easier and a little more &lt;a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself"&gt;DRY&lt;/a&gt;. Previously I have done this via a configuration file, attributes (&lt;a href="http://graffiticms.com/"&gt;Graffiti&lt;/a&gt; &lt;a href="http://dev.graffiticms.com/developer/chalk-extensions/writing-your-own-chalk-extension/"&gt;Chalk Extensions&lt;/a&gt;), or by simply adding items to the NVelocity context. &lt;/p&gt; &lt;p&gt;Adding support to access the NVelocity context would have been pretty easy, but it would have worked against one of the tenants of MVC, separation of concerns. I could have also just sub-classed the base controller and added my tools to ViewData dictionary, but again I would abusing the separation of concerns by introducing a dependency between my views and controllers. &lt;/p&gt; &lt;p&gt;So now I needed to find a (simple) way to add my toolbox items without building a dependency between my controllers and views. I had already been using &lt;a href="http://www.castleproject.org/container/index.html"&gt;Castle Windsor&lt;/a&gt; to manage other dependencies in my project, so with a little trial and error (and some documentation reading) I was able to add optional support for injecting one or more IToolbox instances directly into my view factory which in turn, exposes them to my views.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Unfortunately, I could not figure out a clean was to extend the NVelocityViewFactory, so I took the easy way out and just copied and pasted the code into my own project. [Note: If others find this helpful, I will see if I can get it committed to the main project]. &lt;/p&gt; &lt;p&gt;Once I copied NVelocityViewFactory.cs, the changes I needed to make were very trivial. &lt;/p&gt; &lt;p&gt;First, I created an interface called IToolbox with a single property to implement, Key. Key is used to expose the IToolbox object to the NVelocity view (ie, $key.ToolboxPropertyOrMethod). &lt;/p&gt; &lt;div&gt; &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;interface&lt;/span&gt; IToolbox&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;{&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Key { get; }&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MathTool : IToolbox&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;{&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Key { get { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #006080"&gt;"math"&lt;/span&gt;; } }&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; Add(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; x, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; y)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; x + y;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    }&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; Subtract(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; x, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; y)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; x - y;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    }&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Next, I added a new constructor to the NVelocityViewFactory class which accepted an array of IToolbox as well as one which accepted an array of IToolbox and the standard IDictionary which was already in place. &lt;/p&gt;
&lt;p&gt;Finally, I updated a copy of the NVelocityView class to work with and properly pass along the array of IToolbox. &lt;/p&gt;
&lt;p&gt;You can &lt;a href="http://simpable.com/files/downloads/nvelocity_mvc.rar"&gt;download the code&lt;/a&gt; and add it to your project. To use it, simply wire up the NVelocityViewFactory via Windsor and then configure it to pass along your own IToolbox items as an array. &lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="1.0"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="utf-8"&lt;/span&gt; ?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;components&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;component&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ViewFactory"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #ff0000"&gt;service&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="System.Web.Mvc.IViewEngine, System.Web.MVC"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="WaterCooler.Web.MVC.NVelocityViewFactory, WaterCooler.Web"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;parameters&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tools&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;array&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;item&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;${ToolBox.DateTool}&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;item&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;item&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;${ToolBox.MathTool}&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;item&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;array&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tools&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;parameters&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;component&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;component&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ToolBox.DateTool"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #ff0000"&gt;service&lt;/span&gt; &lt;span style="color: #0000ff"&gt;="WaterCooler.Web.MVC.IToolbox, WaterCooler.Web"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="WaterCooler.Web.MVC.DateTool, WaterCooler.Web"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;component&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ToolBox.MathTool"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #ff0000"&gt;service&lt;/span&gt; &lt;span style="color: #0000ff"&gt;="WaterCooler.Web.MVC.IToolbox, WaterCooler.Web"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="WaterCooler.Web.MVC.MathTool, WaterCooler.Web"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;components&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;And that should be it. Now as you create a new IToolbox, you can quickly and easily inject them to your views. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://simpable.com/files/downloads/nvelocity_mvc.rar"&gt;Download&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://simpable.com/code/"&gt;Code&lt;/a&gt; 
 and tagged as 
&lt;a href="http://simpable.com/tags/mvc/"&gt;mvc&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/nvelocity/"&gt;nvelocity&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/open-source/"&gt;open-source&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://simpable.com/code/nvelocity/"&gt;Simplifying ASP.Net - NVelocity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/unfuddle-review/"&gt;Unfuddle == BaseCamp For Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/technology/iphone-vs-blackberry/"&gt;iPhone vs. BlackBerry&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.simpable.com/~a/Simpable?a=eRf4iR"&gt;&lt;img src="http://feeds.simpable.com/~a/Simpable?i=eRf4iR" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><georss:point>40.330487,-74.410492</georss:point><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=Simpable&amp;itemurl=http%3A%2F%2Fsimpable.com%2Fcode%2Fmvccontrib-nvelocity%2F</feedburner:awareness></item><item><title>Simplifying ASP.Net - NVelocity</title><link>http://simpable.com/code/nvelocity/</link><pubDate>Mon, 12 May 2008 20:53:08 GMT</pubDate><guid isPermaLink="true">http://simpable.com/code/nvelocity/</guid><dc:creator>Scott Watermasysk</dc:creator><slash:comments>11</slash:comments><category domain="http://simpable.com/code/">Code</category><description>&lt;p&gt;&lt;a href="http://www.castleproject.org/others/nvelocity/index.html"&gt;NVelocity&lt;/a&gt;[1] is a .NET port of the &lt;a href="http://velocity.apache.org/engine/releases/velocity-1.5/index.html"&gt;Velocity&lt;/a&gt; open source template engine. I have used NVelocity quite a few times over the last couple of years.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://scottwater.com/blog/pages/csbtl/"&gt;CSBTL&lt;/a&gt; - this project never went public, but basically it removed the need to understand web forums and complicated server controls for building Community Server blog themes.  &lt;li&gt;&lt;a href="http://graffiticms.com/"&gt;Graffiti&lt;/a&gt; - Graffiti supports a very simple theming model which enables building new themes with no knowledge of web forms and/or ASP.Net&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;While you have more options using aspx pages, I generally prefer the simplicity of doing web pages via NVelocity. There are no complicated server controls, complete control over the markup, simple extensibility, and no need to jump between contexts when iterating over a list. &lt;/p&gt; &lt;p&gt;With this in mind, I was very happy to find the NVelocityViewFactory as part of the &lt;a href="http://www.codeplex.com/MVCContrib"&gt;MvcContrib project&lt;/a&gt;. With just a couple configuration steps, I was able to use NVelocity views for my ASP.Net MVC projects. Sweetness! &lt;/p&gt; &lt;p&gt;For example, &lt;a href="http://haacked.com/"&gt;Phil Haack&lt;/a&gt;, has a post which discusses options to doing a &lt;a href="http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx"&gt;simple repeater&lt;/a&gt;. This could be greatly simplified with NVelocity (see below). No code needs to be written, no context switching for properties, etc.&lt;/p&gt; &lt;div&gt; &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;#foreach($hobby in $hobbies)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="#if($velocityCount % 2 == 0)row #else alt-row #end"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;$hobby.Title&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;#end&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In addition, using &lt;em&gt;&lt;a href="http://www.castleproject.org/others/nvelocity/improvements.html#fancyloops"&gt;fancy loops&lt;/a&gt;&lt;/em&gt; we could easily add content to be shown if it is empty and better structure our markup.&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;#foreach($hobby in $hobbies)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;#beforeall&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;#before&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;=&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;#&lt;span style="color: #ff0000"&gt;even&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;"row"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;#odd &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    "alt-row"&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;#each  &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;$hobby.Title&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;#after&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;#afterall&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;#nodata&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;h3&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Sorry, no hobbies&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;h3&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;#end&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The above example takes it to the extreme (all parts are optional), but should give you an indication of power available to you, again, all without requiring you to write a single line of code.&lt;/p&gt;
&lt;p&gt;[1] &lt;em&gt;As mentioned on the Castle site, the original NVelocity project seems to be dead. I have been using the updated version of Castle and recommend you use this version as well.&lt;/em&gt;&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://simpable.com/code/"&gt;Code&lt;/a&gt; 
 and tagged as 
&lt;a href="http://simpable.com/tags/nvelocity/"&gt;nvelocity&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/open-source/"&gt;open-source&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/mvc/"&gt;mvc&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/castle/"&gt;castle&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/graffiti/"&gt;graffiti&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/cs/"&gt;cs&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://simpable.com/code/castle/"&gt;Castle Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/unfuddle-review/"&gt;Unfuddle == BaseCamp For Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/mac-software/"&gt;What Software do I use on the Mac?&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.simpable.com/~a/Simpable?a=cVpGa1"&gt;&lt;img src="http://feeds.simpable.com/~a/Simpable?i=cVpGa1" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><georss:point>40.330487,-74.410492</georss:point><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=Simpable&amp;itemurl=http%3A%2F%2Fsimpable.com%2Fcode%2Fnvelocity%2F</feedburner:awareness></item><item><title>Telligent Hack-A-Thon II</title><link>http://simpable.com/code/hat-ii/</link><pubDate>Fri, 09 May 2008 14:53:41 GMT</pubDate><guid isPermaLink="true">http://simpable.com/code/hat-ii/</guid><dc:creator>Scott Watermasysk</dc:creator><slash:comments>2</slash:comments><category domain="http://simpable.com/code/">Code</category><description>&lt;p&gt;We had our &lt;a href="http://communityserver.com/news/team-blog/community-server-hack-a-thon/" title="Community Server Hack-A-Thon! : Community Server"&gt;second Telligent Hack-A-Thon&lt;/a&gt; last week when the product team was in town to celebrate the release of &lt;a href="http://communityserver.com"&gt;Community Server 2008&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;The objective was pretty simple: Create something useful using the new &lt;a href="http://api.communityserver.org/" title="Community Server API"&gt;Community Server 2008 web service layer&lt;/a&gt; in about 20 hours. Sleep was optional.&lt;/p&gt;

&lt;p&gt;The team did some amazing work (&lt;a href="http://communityserver.com/news/team-blog/community-server-hack-a-thon/" title="Community Server Hack-A-Thon! : Community Server"&gt;videos&lt;/a&gt;). It will take us a couple of weeks, but we are working on a site to host the code/samples/videos from this hack-a-thon and other similar internal events. Maybe we should do a public event or two?&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://simpable.com/code/"&gt;Code&lt;/a&gt; 
 and tagged as 
&lt;a href="http://simpable.com/tags/cs/"&gt;cs&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/web-services/"&gt;web-services&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/hat/"&gt;hat&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/sharepoint-developer/"&gt;SharePoint Developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/business/cs2k8b1/"&gt;Community Server 2008 Beta 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/cs2k8/"&gt;Community Server 2008 Is A Live!&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.simpable.com/~a/Simpable?a=Lgj6vd"&gt;&lt;img src="http://feeds.simpable.com/~a/Simpable?i=Lgj6vd" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><georss:point>40.330487,-74.410492</georss:point><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=Simpable&amp;itemurl=http%3A%2F%2Fsimpable.com%2Fcode%2Fhat-ii%2F</feedburner:awareness></item><item><title>Castle Project</title><link>http://simpable.com/code/castle/</link><pubDate>Fri, 09 May 2008 03:04:54 GMT</pubDate><guid isPermaLink="true">http://simpable.com/code/castle/</guid><dc:creator>Scott Watermasysk</dc:creator><slash:comments>10</slash:comments><category domain="http://simpable.com/code/">Code</category><description>&lt;p&gt; &lt;img src="http://simpable.com/files/media/image/2008-05-08_castleinabox.png" alt="Castleinabox" height="72" width="121" align="left" /&gt;
	For the last couple of weeks I have been digging through a bunch of new projects/concepts with the hope of using some new (to me) things in a couple application samples/prototypes I am itching to build. One of the projects I have been spending a lot of time with recently is the &lt;a href="http://castleproject.org"&gt;Castle Project&lt;/a&gt;.
&lt;/p&gt;


&lt;p&gt;From the site:&lt;/p&gt;

&lt;blockquote&gt;
	Castle is an open source project for .net that aspires to simplify the development of enterprise and web applications. Offering a set of tools (working together or independently) and integration with others open source projects, Castle helps you get more done with less code and in less time.
&lt;/blockquote&gt;

&lt;p&gt;For the longest time, I mistakenly assumed Castle was just &lt;a href="http://www.castleproject.org/monorail/index.html" title="MonoRail :: Castle Project"&gt;Monorail&lt;/a&gt;. I was very wrong. There is a lot of great things in this project that you can easily leverage when building your own solutions...even if you could care less about MVC/Monrail.&lt;/p&gt;

&lt;p&gt;My Favorites:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a href="http://castleproject.org/activerecord/index.html" title="ActiveRecord :: Castle Project"&gt;ActiveRecord&lt;/a&gt;&lt;/strong&gt;: "&lt;em&gt;The enterprise data mapping pattern implemented using NHibernate&lt;/em&gt;". In a nutshell it makes the power of NHibernate extremly accessible with almost zero effort.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a href="http://castleproject.org/container/index.html" title="MicroKernel/Windsor :: Castle Project"&gt;Windsor Container&lt;/a&gt;&lt;/strong&gt; Entperise grade inversion of control container. I have written a lot of plugin/extensibility code in the last couple of years which could have dramatically simplified and reduced with Windsor.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a href="http://castleproject.org/components/validator/index.html" title="Validator Component :: Castle Project"&gt;Validators&lt;/a&gt;&lt;/strong&gt; A light weight validation framework. There is a nice &lt;a href="http://blog.codeville.net/2008/04/" title="Steve Sanderson&amp;#8217;s blog   &amp;raquo; 2008 &amp;raquo; April"&gt;example of integrating&lt;/a&gt; it with &lt;a href="http://www.livevalidation.com/" title="LiveValidation  - Validation as you type"&gt;LiveValidation&lt;/a&gt; and using it with ASP.Net MVC.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is actually quite a bit more there as well. The funny thing is I have been using Castle's updated version of &lt;a href="http://www.castleproject.org/others/nvelocity/index.html" title="NVelocity :: Castle Project"&gt;NVelocity&lt;/a&gt; for quite a while and never really bothered to look around much until recently. If you are unfamiliar with the project, I definitely recommend taking a peak. I am sure you will find something which will help you on a future project.&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://simpable.com/code/"&gt;Code&lt;/a&gt; 
 and tagged as 
&lt;a href="http://simpable.com/tags/castle/"&gt;castle&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/open-source/"&gt;open-source&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/graffiti-cms-faq/"&gt;Graffiti CMS FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/unfuddle-review/"&gt;Unfuddle == BaseCamp For Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/asp-net-mvc/"&gt;ASP.Net MVC - A Step Towards A More Simple ASP.Net?&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.simpable.com/~a/Simpable?a=89LoNS"&gt;&lt;img src="http://feeds.simpable.com/~a/Simpable?i=89LoNS" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><georss:point>40.330487,-74.410492</georss:point><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=Simpable&amp;itemurl=http%3A%2F%2Fsimpable.com%2Fcode%2Fcastle%2F</feedburner:awareness></item><item><title>Telligent Product Team Openings</title><link>http://simpable.com/business/help-wanted/</link><pubDate>Thu, 08 May 2008 20:00:36 GMT</pubDate><guid isPermaLink="true">http://simpable.com/business/help-wanted/</guid><dc:creator>Scott Watermasysk</dc:creator><slash:comments>2</slash:comments><category domain="http://simpable.com/business/">Business</category><description>&lt;p&gt;There are two new openings on the &lt;a href="http://telligent.com/"&gt;Telligent&lt;/a&gt; product team. If you are in the Dallas area and have a passion for building great software, see the listings below.&lt;/p&gt;


&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://jobburner.com/jobs/?job=1119" title="SharePoint Developer at Telligent Systems, Inc."&gt;SharePoint Developer&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://jobburner.com/jobs/?job=1120" title="Performance Developer at Telligent Systems, Inc."&gt;Performance &amp;amp; Scalability&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The open stops are focused on some of our most pressing areas, but we are always looking for great people. If the two areas above don't excite you but you still are still interested in product development at Telligent feel free to drop us a line.&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://simpable.com/business/"&gt;Business&lt;/a&gt; 
 and tagged as 
&lt;a href="http://simpable.com/tags/telligent/"&gt;telligent&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/jobs/"&gt;jobs&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/sharepoint-developer/"&gt;SharePoint Developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/1000-loc/"&gt;1000 Lines Of Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/unfuddle-review/"&gt;Unfuddle == BaseCamp For Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.simpable.com/~a/Simpable?a=UlyW2Q"&gt;&lt;img src="http://feeds.simpable.com/~a/Simpable?i=UlyW2Q" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><georss:point>40.330487,-74.410492</georss:point><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=Simpable&amp;itemurl=http%3A%2F%2Fsimpable.com%2Fbusiness%2Fhelp-wanted%2F</feedburner:awareness></item><item><title>Alex's Lemonade</title><link>http://simpable.com/life/alex/</link><pubDate>Thu, 08 May 2008 14:54:03 GMT</pubDate><guid isPermaLink="true">http://simpable.com/life/alex/</guid><dc:creator>Scott Watermasysk</dc:creator><slash:comments>2</slash:comments><category domain="http://simpable.com/life/">Life</category><description>&lt;p&gt;
 A couple of weeks ago, I got an invitation to my college roommate's son's first birthday. Normally, that would not be worthy of a blog post, but there was something in the card I was not expecting.
&lt;/p&gt;


&lt;p&gt;Inside the card, was a piece of paper with the following:&lt;/p&gt;

&lt;blockquote&gt;
	In lieu of gifts for **** first birthday, we are asking our guests to make a donation to Alex's Lemonade Stand to help fight against childhood cancer.
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.alexslemonade.org/"&gt;About Alex's Lemonade Stand&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
	
	 In 2000, a 4 year old cancer patient named Alexandra "Alex" Scott announced a seemingly simple idea -she was holding a lemonade stand to raise money to help "her doctors" find a cure for kids with cancer. The idea was put into action by Alex and her older brother, Patrick, when they set up the first "Alex's Lemonade Stand for Childhood Cancer" on their front lawn in July of 2000.
&lt;br /&gt;&lt;br /&gt;
	For the next four years, despite her deteriorating health, Alex held an annual lemonade stand to raise money for childhood cancer research. Following her inspirational example, thousands of lemonade stands and other fundraising events have been held across the country by children, schools, businesses, and organizations, all to benefit Alex's Lemonade Stand Foundation for childhood cancer. On August 1st, 2004, Alex died peacefully at the age of 8 -- she had raised over $1 million for childhood cancer research in her short lifetime.
	
&lt;/blockquote&gt;

&lt;p&gt;I had actually read about Alex's Lemonade stand in the past, but for whatever reason never made a donation. In the last couple of years, we have attended many children's birthday parties. All have been fun celebrations, but this will be first where we are not only celebrating another year of life for the birthday boy, but also helping another child hopefully live another year.&lt;/p&gt;

&lt;p&gt;Having a 10 month old daughter certainly makes this particularly charity stand out, but there are lots of other great charities out there. Do yourself a favor, take a couple of minutes and make a quick donation. It will be a great way to start your morning.&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://simpable.com/life/"&gt;Life&lt;/a&gt; 
 and tagged as 
&lt;a href="http://simpable.com/tags/cancer/"&gt;cancer&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/donations/"&gt;donations&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://simpable.com/technology/iphone-vs-blackberry/"&gt;iPhone vs. BlackBerry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/mac-five-months/"&gt;Life on a Mac - Five Months Later&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/mac-software/"&gt;What Software do I use on the Mac?&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.simpable.com/~a/Simpable?a=E5tAsl"&gt;&lt;img src="http://feeds.simpable.com/~a/Simpable?i=E5tAsl" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><georss:point>40.330487,-74.410492</georss:point><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=Simpable&amp;itemurl=http%3A%2F%2Fsimpable.com%2Flife%2Falex%2F</feedburner:awareness></item><item><title>Fun with ISAPI Filters</title><link>http://simpable.com/code/fun-with-isapi-filters/</link><pubDate>Mon, 28 Apr 2008 11:52:06 GMT</pubDate><guid isPermaLink="true">http://simpable.com/code/fun-with-isapi-filters/</guid><dc:creator>Scott Watermasysk</dc:creator><slash:comments>1</slash:comments><category domain="http://simpable.com/code/">Code</category><description>&lt;p&gt;I am a big fan of ISAPI filters and &lt;a href="http://www.isapirewrite.com/" title="Helicon Tech - IIS modules and ISAPI filters for URL rewriting and search engine optimization"&gt;ISAPI_Rewrite&lt;/a&gt; in particular. If you are not familiar with ISAPI filters and ISAPI_Rewrite, in a nutshell:&lt;/p&gt;

&lt;blockquote&gt;
	ISAPI_Rewrite is a powerful URL manipulation engine based on regular expressions. It acts mostly like Apache's mod_Rewrite, but is designed specifically for Microsoft's Internet Information Server (IIS). 
&lt;/blockquote&gt;


&lt;p&gt;For $99 a server, you cannot go wrong (although there is a nice &lt;a href="http://cheeso.members.winisp.net/IIRF.aspx" title="IIRF"&gt;free open source version as well&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;There are many SEO and redirect usages of the product. One of my favorites is cleaning up and simplifying urls to make them more readable and emailable.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
	RewriteRule /search/([a-zA-Z0-9\-\._:]*?)/ /search/?q=$1 [I,L]&lt;br /&gt;
	RewriteRule /search/([a-zA-Z0-9\-\._:]*?)/\?p=(\d+) /search/?q=$1&amp;p=$2 [I,L]
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;
	Using the example code above, I can now build and share search links in my blog (using Graffiti) like this: &lt;a href="http://simpable.com/search/graffiti/"&gt;http://simpable.com/search/graffiti/&lt;/a&gt; (instead of http://simpable.com/search/?q=graffiti). I won't go into all of the ins and outs of ISAPI_Rewrite, but basically:
&lt;/p&gt;
	
	&lt;ul&gt;
		&lt;li&gt;Declare a new rule&lt;/li&gt;
		&lt;li&gt;Provide a regex pattern&lt;/li&gt;
		&lt;li&gt;Provide a url to direct the request to (in this case the Graffiti search url)&lt;/li&gt;
		&lt;li&gt;(optional) Add parameters/settings&lt;/li&gt;
	&lt;/ul&gt;
&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://simpable.com/code/"&gt;Code&lt;/a&gt; 
 and tagged as 
&lt;a href="http://simpable.com/tags/isapi_rewrite/"&gt;isapi_rewrite&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/graffiti-cms-faq/"&gt;Graffiti CMS FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/mac-software/"&gt;What Software do I use on the Mac?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/technology/decenturl/"&gt;DecentURL&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.simpable.com/~a/Simpable?a=AREIcc"&gt;&lt;img src="http://feeds.simpable.com/~a/Simpable?i=AREIcc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><georss:point>40.330487,-74.410492</georss:point><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=Simpable&amp;itemurl=http%3A%2F%2Fsimpable.com%2Fcode%2Ffun-with-isapi-filters%2F</feedburner:awareness></item><item><title>Demo Code Tools</title><link>http://simpable.com/code/demo-code-tools/</link><pubDate>Fri, 25 Apr 2008 12:55:45 GMT</pubDate><guid isPermaLink="true">http://simpable.com/code/demo-code-tools/</guid><dc:creator>Scott Watermasysk</dc:creator><slash:comments>0</slash:comments><category domain="http://simpable.com/code/">Code</category><description>&lt;p&gt;Did you ever just want to test a quick piece of code? Prove an idea? Or even just wanted to see the name of a property to answer an email/forum/support request? Here are a couple of &lt;strong&gt;free tools&lt;/strong&gt; which can make it very easy and convenient. &lt;/p&gt; &lt;p&gt;I have been a &lt;a href="http://scottwater.com/blog/search/snippet/"&gt;long time fan&lt;/a&gt; of &lt;a href="http://weblogs.asp.net/jkey/default.aspx"&gt;Jeff Key's&lt;/a&gt; &lt;a href="http://www.sliver.com/dotnet/SnippetCompiler/"&gt;Snippet Compiler&lt;/a&gt;. I guess I missed the announcement, but it looks like there was a nice update in December. &lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="497" alt="SnippetCompiler" src="http://simpable.com/files/media/image/WindowsLiveWriter/DemoCode_14B05/SnippetCompiler_3.png" width="504" border="0"&gt; &lt;/p&gt; &lt;p&gt;If you have never used Snippet Compiler, in a nutshell, it gives you the ability to execute and test code without the need to create a dummy VS.Net project. In provides templates, intellisence, managed references, and a near instant start up. As the site says, "&lt;em&gt;Snippet Compiler compiles snippets&lt;/em&gt;.".&lt;/p&gt; &lt;p&gt;What actually made me thing to check on an update to Snippet Compiler is another similar tool called &lt;a href="http://www.linqpad.net/"&gt;LinqPad&lt;/a&gt; (by &lt;a href="http://www.albahari.com/"&gt;Joseph Albahari&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="408" alt="LinqPad" src="http://simpable.com/files/media/image/WindowsLiveWriter/DemoCode_14B05/LinqPad_3.png" width="504" border="0"&gt; &lt;/p&gt; &lt;p&gt;LinqPad has quite a bit of functionality, but as the name implies what it really specializes in is quickly writing Linq queries.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Tired of querying in antiquated SQL?&lt;br&gt;Well, you don't have to!&amp;nbsp; LINQPad lets you interactively query SQL databases in a modern query language: LINQ.&amp;nbsp; Kiss goodbye to SQL Management Studio! &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Added Bonus: If you want to take your testing code in Snippet Compiler to a new level &lt;a href="http://www.paraesthesia.com"&gt;Travis Illg&lt;/a&gt; has published a template that will enable you to write your &lt;a href="http://www.paraesthesia.com/archive/2008/02/21/template-for-quick-typemock-testing.aspx"&gt;test code using NUnit&lt;/a&gt;. &lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://simpable.com/code/"&gt;Code&lt;/a&gt; 
 and tagged as 
&lt;a href="http://simpable.com/tags/linqpad/"&gt;linqpad&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/snippetcompiler/"&gt;snippetcompiler&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/tools/"&gt;tools&lt;/a&gt;
,
&lt;a href="http://simpable.com/tags/easy-things/"&gt;easy-things&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://simpable.com/technology/iphone-vs-blackberry/"&gt;iPhone vs. BlackBerry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/mac-software/"&gt;What Software do I use on the Mac?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simpable.com/software/mac-five-months/"&gt;Life on a Mac - Five Months Later&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.simpable.com/~a/Simpable?a=gaMcq7"&gt;&lt;img src="http://feeds.simpable.com/~a/Simpable?i=gaMcq7" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><georss:point>40.330487,-74.410492</georss:point><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetItemData?uri=Simpable&amp;itemurl=http%3A%2F%2Fsimpable.com%2Fcode%2Fdemo-code-tools%2F</feedburner:awareness></item><feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetFeedData?uri=Simpable</feedburner:awareness></channel></rss>
