<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Nauman Leghari&amp;#39;s Blog</title><link>http://weblogs.asp.net/nleghari/default.aspx</link><description>Blog about technology, media and other interesting tidbits</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>SequenceViz is going Pro</title><link>http://weblogs.asp.net/nleghari/archive/2009/02/01/sequenceviz-is-going-pro.aspx</link><pubDate>Sun, 01 Feb 2009 17:21:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6873087</guid><dc:creator>laghari78</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6873087</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2009/02/01/sequenceviz-is-going-pro.aspx#comments</comments><description>&lt;SPAN style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 16px 'Times New Roman'; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-stroke-width: 0px" class=Apple-style-span&gt;&lt;SPAN style="FONT-FAMILY: Verdana; FONT-SIZE: 13px" class=Apple-style-span&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"&gt;This is one of the things on my mind for quite some time. As with most other software developers, I wanted to start a microISV to experience the whole product development cycle. To get an idea wasn't as important as the execution so I decided to take one of my open source project to begin with. And that project is SequenceViz.&lt;/DIV&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"&gt;&lt;A href="http://www.codeplex.com/sequenceviz" target=_blank mce_href="http://www.codeplex.com/sequenceviz"&gt;SequenceViz&lt;/A&gt;&amp;nbsp;is my latest open source project which was very interesting to work on and received a lot of community attention. According to the &lt;A href="http://www.codeplex.com/sequenceviz/stats" target=_blank mce_href="http://www.codeplex.com/sequenceviz/stats"&gt;codeplex stats&lt;/A&gt;, the number of downloads are +25000 and that didn't include the downloads before I put it on codeplex. Although this number is not the reason behind selecting SequenceViz.&lt;/DIV&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"&gt;The work on SequenceViz Pro is already started and if everything goes according to the plan, I'll be releasing the beta of SequenceViz Pro soon. This blog&amp;nbsp;will become the primary source for any updates on that project along with my &lt;A href="http://twitter.com/nleghari" target=_blank mce_href="http://twitter.com/nleghari"&gt;twitter feed&lt;/A&gt;.&lt;/DIV&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"&gt;So What'll happen to SequenceViz @ Codeplex:&lt;/DIV&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"&gt;The plan is to leave the open source version as it is and I'll not be taking it any further. I'll also remain as project coordinate so If you're willing to improve the open source version then please &lt;A href="http://weblogs.asp.net/nleghari/contact.aspx" target=_blank mce_href="http://weblogs.asp.net/nleghari/contact.aspx"&gt;contact me&lt;/A&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6873087" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/MicroISV/default.aspx">MicroISV</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Sequence+Diagram/default.aspx">Sequence Diagram</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/.NET/default.aspx">.NET</category></item><item><title>GmailSync on codeplex</title><link>http://weblogs.asp.net/nleghari/archive/2008/11/19/gmailsync-on-codeplex.aspx</link><pubDate>Wed, 19 Nov 2008 22:49:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6746959</guid><dc:creator>laghari78</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6746959</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/11/19/gmailsync-on-codeplex.aspx#comments</comments><description>&lt;P&gt;&lt;SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Arial; WHITE-SPACE: pre-wrap; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0" class=Apple-style-span&gt;By far the most popular tool that I published is&amp;nbsp;&lt;A target=_blank href="http://weblogs.asp.net/nleghari/articles/gmailbackup.aspx" mce_href="http://weblogs.asp.net/nleghari/articles/gmailbackup.aspx"&gt;GmailSync&lt;/A&gt; which&amp;nbsp;was also features on &lt;A target=_blank href="http://lifehacker.com/software/backup-utilities/download-of-the-day-gmailsync-171319.php" mce_href="http://lifehacker.com/software/backup-utilities/download-of-the-day-gmailsync-171319.php"&gt;Lifehacker&lt;/A&gt;. But as I get busier in&amp;nbsp;other &lt;A target=_blank href="http://www.codeplex.com/sequenceviz" mce_href="http://www.codeplex.com/sequenceviz"&gt;projects&lt;/A&gt;, it is getting difficult to put more effort into it. &lt;/SPAN&gt;&lt;SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Arial; WHITE-SPACE: pre-wrap; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0" class=Apple-style-span&gt;Its been a while since I put the last update so&amp;nbsp;I've decided to upload the sources hoping that &lt;/SPAN&gt;&lt;SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Arial; WHITE-SPACE: pre-wrap; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0" class=Apple-style-span&gt;I can find someone to lead on this.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Arial; WHITE-SPACE: pre-wrap; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0" class=Apple-style-span&gt;You can download the binaries and check out the sources from the following url. &lt;SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Arial; WHITE-SPACE: pre-wrap; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0" class=Apple-style-span&gt;As the source code is not the best I've written so I'm willing to work with anyone who is interested. &lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Arial; WHITE-SPACE: pre-wrap; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0" class=Apple-style-span&gt;&lt;/SPAN&gt;&lt;SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Arial; WHITE-SPACE: pre-wrap; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0" class=Apple-style-span&gt;&lt;A href="http://www.codeplex.com/gmailsync"&gt;http://www.codeplex.com/gmailsync&lt;/A&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6746959" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/gmailsync/default.aspx">gmailsync</category></item><item><title>SequenceViz 0.11 :: Reflector Addin support</title><link>http://weblogs.asp.net/nleghari/archive/2008/10/13/sequenceviz-0-11-reflector-addin-support.aspx</link><pubDate>Mon, 13 Oct 2008 21:42:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6679336</guid><dc:creator>laghari78</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6679336</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/10/13/sequenceviz-0-11-reflector-addin-support.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Just uploaded the &lt;A target=_blank href="http://www.codeplex.com/sequenceviz/Release/ProjectReleases.aspx?ReleaseId=18289" mce_href="http://www.codeplex.com/sequenceviz/Release/ProjectReleases.aspx?ReleaseId=18289"&gt;latest release&lt;/A&gt; of SequenceViz which now includes the Reflector plugin with the WPF renderer.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://www.codeplex.com/sequenceviz" mce_href="http://www.codeplex.com/sequenceviz"&gt;Download&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;IMG style="WIDTH: 857px; HEIGHT: 600px" src="http://www.devmobile.net/nleghari/reflector_sequenceviz_wpf.png" width=857 height=600 mce_src="http://www.devmobile.net/nleghari/reflector_sequenceviz_wpf.png"&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6679336" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Cecil/default.aspx">Cecil</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Reflector/default.aspx">Reflector</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Sequence+Diagram/default.aspx">Sequence Diagram</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/SequenceViz/default.aspx">SequenceViz</category></item><item><title>SequenceViz 0.9 :: WPF based Sequence diagram viewer</title><link>http://weblogs.asp.net/nleghari/archive/2008/09/24/sequenceviz-0-9-wpf-based-sequence-diagram-viewer.aspx</link><pubDate>Wed, 24 Sep 2008 18:57:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6640614</guid><dc:creator>laghari78</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6640614</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/09/24/sequenceviz-0-9-wpf-based-sequence-diagram-viewer.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Until now,&amp;nbsp;SequenceViz uses the &lt;A target=_blank href="http://gnuwin32.sourceforge.net/packages/plotutils.htm" mce_href="http://gnuwin32.sourceforge.net/packages/plotutils.htm"&gt;GnuPlot&lt;/A&gt; tool to generate the&amp;nbsp;SVG file that&amp;nbsp;is&amp;nbsp;then rendered in the IE control embedded in the application.&amp;nbsp;Although this worked&amp;nbsp;to prove the concept but&amp;nbsp;there were problems with &lt;A target=_blank href="http://www.codeplex.com/sequenceviz/WorkItem/View.aspx?WorkItemId=2025" mce_href="http://www.codeplex.com/sequenceviz/WorkItem/View.aspx?WorkItemId=2025"&gt;rendering large&amp;nbsp;diagrams&lt;/A&gt; and &lt;A target=_blank href="http://www.codeplex.com/sequenceviz/WorkItem/View.aspx?WorkItemId=2026" mce_href="http://www.codeplex.com/sequenceviz/WorkItem/View.aspx?WorkItemId=2026"&gt;security issues&lt;/A&gt; in Vista.&amp;nbsp;Now thanks to &lt;A target=_blank href="http://blogger.xs4all.nl/mzetstra/" mce_href="http://blogger.xs4all.nl/mzetstra/"&gt;Meile Zetstra&lt;/A&gt; who provided the WPF implementation for the diagram viewer I have released a &lt;A href="http://www.codeplex.com/sequenceviz/Release/ProjectReleases.aspx?ReleaseId=17641" mce_href="http://www.codeplex.com/sequenceviz/Release/ProjectReleases.aspx?ReleaseId=17641"&gt;new version&lt;/A&gt; with this functionality.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://www.codeplex.com/sequenceviz" mce_href="http://www.codeplex.com/sequenceviz"&gt;Download&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 639px; HEIGHT: 432px" src="http://www.devmobile.net/nleghari/sequenceviz_wpf.jpg" width=639 height=432 mce_src="http://www.devmobile.net/nleghari/sequenceviz_wpf.jpg"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Hope you'll like this release and as always, provide your comments and suggestions to improve the application.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6640614" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Sequence+Diagram/default.aspx">Sequence Diagram</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/WPF/default.aspx">WPF</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/.NET/default.aspx">.NET</category></item><item><title>SequenceViz 0.7 :: Quick search</title><link>http://weblogs.asp.net/nleghari/archive/2008/08/10/sequenceviz-0-7-quick-search.aspx</link><pubDate>Sun, 10 Aug 2008 21:01:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6502766</guid><dc:creator>laghari78</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6502766</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/08/10/sequenceviz-0-7-quick-search.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;I managed to spend some time on &lt;A class="" href="http://www.codeplex.com/sequenceviz" target=_blank mce_href="http://www.codeplex.com/sequenceviz"&gt;SequenceViz&lt;/A&gt; this weekend and added quick search functionality. Because the diagrams are not linkable so it is difficult to navigate between methods and types. One thing that could help now is to search for the type or method that you'd like to navigate to and it will take you to the first result. &lt;/P&gt;
&lt;P mce_keep="true"&gt;As always,&amp;nbsp;please enter your comments or suggestions &lt;A class="" href="http://www.codeplex.com/sequenceviz/WorkItem/List.aspx" mce_href="http://www.codeplex.com/sequenceviz/WorkItem/List.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A class="" href="http://www.codeplex.com/sequenceviz/Release/ProjectReleases.aspx?ReleaseId=16196" mce_href="http://www.codeplex.com/sequenceviz/Release/ProjectReleases.aspx?ReleaseId=16196"&gt;Download&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 774px; HEIGHT: 563px" height=563 src="http://www.devmobile.net/nleghari/sequencevizquicksearch.png" width=774 mce_src="http://www.devmobile.net/nleghari/sequencevizquicksearch.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6502766" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Sequence+Diagram/default.aspx">Sequence Diagram</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/SequenceViz/default.aspx">SequenceViz</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/.NET/default.aspx">.NET</category></item><item><title>CodeStore  - Part 4 of n (Refactoring, Hudson CI Tool)</title><link>http://weblogs.asp.net/nleghari/archive/2008/07/21/codestore-part-4-of-n-refactoring-hudson-ci-tool.aspx</link><pubDate>Mon, 21 Jul 2008 19:23:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6428095</guid><dc:creator>laghari78</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6428095</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/07/21/codestore-part-4-of-n-refactoring-hudson-ci-tool.aspx#comments</comments><description>&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Although there is not much in this project yet but I think there are few things that can be improved before moving ahead.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;Moving castle configuration from the App.config file to its own file:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;This is to remove the noise in the main application configuration file and it is as simple as extracting the castle configuration items into another file and passing that file name in the WindsorContainer constructor.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 440px; HEIGHT: 71px" height=71 src="http://www.devmobile.net/nleghari/codestore/4/castle_config.png" width=440 mce_src="http://www.devmobile.net/nleghari/codestore/4/castle_config.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;Abstract IOC container:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;It is a good idea to abstract dependencies and therefore the reason of DI containers. But what about the DI container itself. One way to do this is to abstract it behind a separate class IOC.cs&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 533px; HEIGHT: 384px" height=384 src="http://www.devmobile.net/nleghari/codestore/4/ioc.png" width=533 mce_src="http://www.devmobile.net/nleghari/codestore/4/ioc.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;Moving the engine implementation into a separate namespace. &lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 524px; HEIGHT: 276px" height=276 src="http://www.devmobile.net/nleghari/codestore/4/engine_refactor.png" width=524 mce_src="http://www.devmobile.net/nleghari/codestore/4/engine_refactor.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;Using Hudson as a Continuous Tool:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;I have used CC.NET before and I remember that it wasn't a smooth setup. So for this project, I've decided to try &lt;A class="" href="https://hudson.dev.java.net/" target=_blank mce_href="https://hudson.dev.java.net/"&gt;Hudson&lt;/A&gt;. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Hudson is built on Java but it is extremely easy to setup and the .NET plugins for MsBuild, Nant, Nunit and support for running batch files makes it a viable alternate to CC.NET.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I found an excellent tutorial (&lt;A href="http://redsolo.blogspot.com/2008/04/guide-to-building-net-projects-using.html" mce_href="http://redsolo.blogspot.com/2008/04/guide-to-building-net-projects-using.html"&gt;http://redsolo.blogspot.com/2008/04/guide-to-building-net-projects-using.html&lt;/A&gt;) on setting up Hudson for .NET projects and believe me, it just works.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Once I completed the setup, the hudson dashboard looks like this. I've also &lt;A class="" href="http://code.google.com/p/code-store/source/browse/trunk/hudson-config.xml" target=_blank mce_href="http://code.google.com/p/code-store/source/browse/trunk/hudson-config.xml"&gt;checked in&lt;/A&gt; the configuration file that I used for this project.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 519px; HEIGHT: 384px" height=384 src="http://www.devmobile.net/nleghari/codestore/4/hudson.png" width=519 mce_src="http://www.devmobile.net/nleghari/codestore/4/hudson.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Source: &lt;A href="http://code.google.com/p/code-store/" mce_href="http://code.google.com/p/code-store/"&gt;http://code.google.com/p/code-store/&lt;/A&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;Conclusion:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;In this post, I've done some small refactoring on the project structure and then used Hudson as a CI tool. In the next post, I'll start putting in more functionality into the project.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6428095" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/CodeStore/default.aspx">CodeStore</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Hudson/default.aspx">Hudson</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/.NET/default.aspx">.NET</category></item><item><title>CodeStore - Part 3 of n (Cecil, Moq)</title><link>http://weblogs.asp.net/nleghari/archive/2008/07/18/codestore-part-3-of-n-cecil-moq.aspx</link><pubDate>Fri, 18 Jul 2008 21:38:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6417456</guid><dc:creator>laghari78</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6417456</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/07/18/codestore-part-3-of-n-cecil-moq.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;This is the third part of the series on building CodeStore. In this blog post, I'll finish off the first user story which was&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;1)&amp;nbsp; As a customer, I want to query the Assembly data in the database so that I can get metrics about the assembly.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;The story is further decomposed into two tasks:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;a)&amp;nbsp;&amp;nbsp;&amp;nbsp;Read Assembly Data&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;b)&amp;nbsp;&amp;nbsp;&amp;nbsp;Store Assembly Data in SQLite using Nhibernate.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;We start with completing the unit test for AssemblyDataRepository. If you remember in &lt;A class="" href="http://weblogs.asp.net/nleghari/archive/2008/07/17/codestore-part-2-of-n-sqlite-nhibernate.aspx" target=_blank mce_href="http://weblogs.asp.net/nleghari/archive/2008/07/17/codestore-part-2-of-n-sqlite-nhibernate.aspx"&gt;Part II&lt;/A&gt;&amp;nbsp;&lt;SPAN style="mso-spacerun: yes"&gt; &lt;/SPAN&gt;that I changed the Nhibernate integration to use Castle Nhibernate repository and therefore passing in the ISessionManager to the repository classes.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;So, to test AssemblyDataRepository I'm going to mock ISessionManager to test the behaviour of the method.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;As this project is about learning so I've decided to use Moq (&lt;A href="http://code.google.com/p/moq/"&gt;http://code.google.com/p/moq/&lt;/A&gt;) as the mocking container.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;Moq uses lambdas to set expectations which takes some practice to get used to. You can read more about Moq on Daniel&amp;nbsp;Cazzulino blog (&lt;A href="http://www.clariusconsulting.net/blogs/kzu/"&gt;http://www.clariusconsulting.net/blogs/kzu/&lt;/A&gt;). &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;So we start with a test for adding assembly data using the repository.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 627px; HEIGHT: 471px" height=471 src="http://www.devmobile.net/nleghari/codestore/3/moqaddnewassemblytest.png" width=627 mce_src="http://www.devmobile.net/nleghari/codestore/3/moqaddnewassemblytest.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;It uses the same test flow as other testing (mocking) frameworks. &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Setup data&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Setup mocks, expectations&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Run SUT&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Verity the expectations&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;Once the test is passed, we can check off the second task of the story. I can write few more tests but let's not worry about that for now. The next thing to look into is actually parsing the assembly and extracting the required information from assembly metadata. To read IL, I'm going to use Cecil which can be downloaded from &lt;A href="http://www.mono-project.com/Cecil"&gt;http://www.mono-project.com/Cecil&lt;/A&gt;.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;The initial model for code analysis engine looks like this. (Please note that the following diagram is the snapshot taken at the end of this blog post)&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 382px; HEIGHT: 358px" height=358 src="http://www.devmobile.net/nleghari/codestore/3/codeanalysismodel.png" width=382 mce_src="http://www.devmobile.net/nleghari/codestore/3/codeanalysismodel.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;I started with CodeAnalysisEngine whose job is to ask the CodeAssemblyLoader to load the assembly and then pass it to CodeAssemblyParser to do the actual information extraction.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;Testing CodeAnalysisEngine:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 472px; HEIGHT: 264px" height=264 src="http://www.devmobile.net/nleghari/codestore/3/loadasmtest.png" width=472 mce_src="http://www.devmobile.net/nleghari/codestore/3/loadasmtest.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;The first two statements create the mock objects to use in the actual call. The next line sets the expectation to load the provided assembly file. The implementation of the SUT:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 460px; HEIGHT: 304px" height=304 src="http://www.devmobile.net/nleghari/codestore/3/loadasmimpl.png" width=460 mce_src="http://www.devmobile.net/nleghari/codestore/3/loadasmimpl.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;In the next test, I added the assembly parser in the constructor which prompts a change in the first test to take in another argument.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 655px; HEIGHT: 350px" height=284 src="http://www.devmobile.net/nleghari/codestore/3/asmparsertest.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/3/asmparsertest.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;And the implementation now calls the Parse method on the assembly parser.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 576px; HEIGHT: 311px" height=311 src="http://www.devmobile.net/nleghari/codestore/3/asmparserimpl.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/3/asmparserimpl.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;The next step is to unit test the CodeAssemblyLoader. This class is responsible for loading the assembly file using Cecil, so the test expects a call to Cecil's AssemblyFactory.GetAssembly method. Unfortunately AssemblyFactory.GetAssembly is a static call which makes it impossible to test. If it is Ruby then I can easily mock it but that's another thing :).&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;And, here is the implementation of CodeAssemblyLoader class&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 534px; HEIGHT: 158px" height=158 src="http://www.devmobile.net/nleghari/codestore/3/asmloaderimpl.png" width=534 mce_src="http://www.devmobile.net/nleghari/codestore/3/asmloaderimpl.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;Testing CodeAssemblyParser is also not easy because of the same AssemblyFactory issue so I'm going to load the actual assembly but mock the repository to expect the add method.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 692px; HEIGHT: 303px" height=303 src="http://www.devmobile.net/nleghari/codestore/3/moqasmparsertest.png" width=692 mce_src="http://www.devmobile.net/nleghari/codestore/3/moqasmparsertest.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;Line no. 17 is loading the actual assembly. Then I mocked the repository and set it to the assembly parser. In the end, I set the expectation and call the method to verify.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The Parse method internally calls the AddAssemblyData method with the assembly definition.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 664px; HEIGHT: 278px" height=278 src="http://www.devmobile.net/nleghari/codestore/3/addasmdataimpl.png" width=664 mce_src="http://www.devmobile.net/nleghari/codestore/3/addasmdataimpl.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;So the unit tests are passing, I still need to implement the dependency injection configuration to run the application.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;Setting up Castle configuration for dependency injection:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;There are two different dependencies which we need to resolve here. First, CodeAnalysisEngine depends on the CodeAssemblyLoader and CodeAssemblyParser which it takes in as constructor arguments. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 623px; HEIGHT: 348px" height=303 src="http://www.devmobile.net/nleghari/codestore/3/asmengineconfig.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/3/asmengineconfig.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;Second, to resolve the dependency in assembly parser for assembly data repository which is a property. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 653px; HEIGHT: 186px" height=186 src="http://www.devmobile.net/nleghari/codestore/3/asmparserconfig.png" width=653 mce_src="http://www.devmobile.net/nleghari/codestore/3/asmparserconfig.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;After configuring the dependencies, I can run the application select the TestCases.dll file which we created in part II.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 643px; HEIGHT: 458px" height=458 src="http://www.devmobile.net/nleghari/codestore/3/runselectasm.png" width=643 mce_src="http://www.devmobile.net/nleghari/codestore/3/runselectasm.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;To confirm if it works by opening the codestore.db file in the database browser.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0in 0.375in"&gt;&lt;IMG style="WIDTH: 559px; HEIGHT: 384px" height=384 src="http://www.devmobile.net/nleghari/codestore/3/databrowser.png" width=559 mce_src="http://www.devmobile.net/nleghari/codestore/3/databrowser.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;Source Code: &lt;A href="http://code.google.com/p/code-store/"&gt;http://code.google.com/p/code-store/&lt;/A&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;Conclusion:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;So, this completes the first story which is about storing the information about the assembly into the database. I also looked into interaction based testing and used the Moq framework to implement mocks inside the tests. The assembly parsing is then implemented using Cecil.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;As always, your suggestions and comments are always welcome to improve the project.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6417456" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Cecil/default.aspx">Cecil</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Resharper/default.aspx">Resharper</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/.NET/default.aspx">.NET</category></item><item><title>CodeStore - Part 2 of n (SQLite, NHibernate)</title><link>http://weblogs.asp.net/nleghari/archive/2008/07/17/codestore-part-2-of-n-sqlite-nhibernate.aspx</link><pubDate>Thu, 17 Jul 2008 21:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6412372</guid><dc:creator>laghari78</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6412372</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/07/17/codestore-part-2-of-n-sqlite-nhibernate.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;So, in the &lt;A class="" href="http://weblogs.asp.net/nleghari/archive/2008/07/16/codestore-part-1-of-n-treesurgeon-castle-windsor-log4net.aspx" target=_blank mce_href="http://weblogs.asp.net/nleghari/archive/2008/07/16/codestore-part-1-of-n-treesurgeon-castle-windsor-log4net.aspx"&gt;last&amp;nbsp;post&lt;/A&gt;, I started creating a new application using TreeSurgeon and added Castle Windsor and log4net support. In this post, I'm going to describe how I added the Nhibernate support and the Castle Nhibernate facility. &lt;/SPAN&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.321in; DIRECTION: ltr; FONT-FAMILY: Calibri; unicode-bidi: embed"&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/OL&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;User Stories:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Because CodeStore is about storing metrics about an Assembly therefore I'm going to start by storing the assembly information. Therefore the first user story is:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-STYLE: italic; FONT-FAMILY: Calibri"&gt;1) As a customer, I want to query the Assembly data in the database so that I can get metrics about the assembly.&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.321in; DIRECTION: ltr; FONT-FAMILY: Calibri; unicode-bidi: embed"&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;After breaking the story into tasks, we have:&lt;/P&gt;&lt;/OL&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-STYLE: italic; FONT-FAMILY: Calibri"&gt;a) Read Assembly Data&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-STYLE: italic; FONT-FAMILY: Calibri"&gt;b) Store Assembly Data in SQLite using Nhibernate.&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.321in; DIRECTION: ltr; FONT-FAMILY: Calibri; unicode-bidi: embed"&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/OL&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;Although we can start with any task, but in this scenario I'll go with the second task which is about setting up Nhibernate to store data in the SQLite database.&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in; FONT-SIZE: 11pt; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.321in; DIRECTION: ltr; FONT-FAMILY: Calibri; unicode-bidi: embed"&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/OL&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Pre-Requisites:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;There are few things we need to download and setup&amp;nbsp;before start coding.&lt;/P&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Download SQLite ADO.NET Database Provider (&lt;/SPAN&gt;&lt;A href="http://sqlite.phxsoftware.com/"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://sqlite.phxsoftware.com/&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;). The good thing about this provider is that it embeds the sqlite database engine so you don't need any more dependencies. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Download SQLIte Database Browser to manage the database (&lt;/SPAN&gt;&lt;A href="http://sqlitebrowser.sourceforge.net/"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://sqlitebrowser.sourceforge.net/&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;) but you can also use the native sqlite engine to manage the database from console.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; LIST-STYLE-TYPE: disc"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Download &lt;A class="" href="http://www.hibernate.org/343.html" target=_blank mce_href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/A&gt;.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Once we have the required dependencies, we can start by creating a new datastore. SQLite Database Browser allows you to create a new database but you'll have to create a temporary table so that it can save it in the file.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 466px; HEIGHT: 384px" height=384 src="http://www.devmobile.net/nleghari/codestore/2/sqlitedatabrowser.png" width=466 mce_src="http://www.devmobile.net/nleghari/codestore/2/sqlitedatabrowser.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Then I added a new class AssemblyData in our Core.Domain namespace. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 148px; HEIGHT: 163px" height=163 src="http://www.devmobile.net/nleghari/codestore/2/assemblydataclassdiagram.png" width=148 mce_src="http://www.devmobile.net/nleghari/codestore/2/assemblydataclassdiagram.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Once all the fields are defined, I generated all the properties using Resharper (Alt+Ins)&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 360px; HEIGHT: 236px" height=236 src="http://www.devmobile.net/nleghari/codestore/2/resharpergenprops.png" width=360 mce_src="http://www.devmobile.net/nleghari/codestore/2/resharpergenprops.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;It seems that Resharper doesn't generate the auto properties so you'll have to fix it (Ctrl + Enter).&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 345px; HEIGHT: 114px" height=114 src="http://www.devmobile.net/nleghari/codestore/2/resharperconvertauto.png" width=345 mce_src="http://www.devmobile.net/nleghari/codestore/2/resharperconvertauto.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Or you can just type the auto properties without any help which may be the quickest option :).&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The next step is to create the nhibernate mappings file. When editing the mapping file, it is much better to add the nhibernate mappings schema to get intellisense in the IDE.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 576px; HEIGHT: 316px" height=316 src="http://www.devmobile.net/nleghari/codestore/2/nhschemamapping1.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/2/nhschemamapping1.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 387px; HEIGHT: 210px" height=210 src="http://www.devmobile.net/nleghari/codestore/2/nhuseschema.png" width=387 mce_src="http://www.devmobile.net/nleghari/codestore/2/nhuseschema.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The complete mapping file looks like this. The build action should be set to embedded resource.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&amp;lt;hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;assembly="CodeStore.Core" namespace="CodeStore.Core.Domain"&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;class name="AssemblyData"&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;id name="Id"&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;generator class="guid"/&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/id&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;property name="Name"/&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;property name="FullName"/&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;property name="Version"/&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;property name="EntryPoint"/&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/class&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;As we have the domain class and the corresponding mapping file, we can configure the application to use Nhibernate. For that, I created a separate hibernate.cfg.xml file in the Core application with the following contents. The properties are self-explanatory and you can always learn more by looking into the &lt;A class="" href="http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/session-configuration.html" target=_blank mce_href="http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/session-configuration.html"&gt;Nhibernate documentation&lt;/A&gt;.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&amp;lt;hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;session-factory&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;property name="connection.driver_class"&amp;gt;NHibernate.Driver.SQLite20Driver&amp;lt;/property&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;property name="connection.connection_string"&amp;gt;Data Source=E:\Code\CodeStore\data\codestore.db;Version=3;New=False;Compress=True;&amp;lt;/property&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;property name="dialect"&amp;gt;NHibernate.Dialect.SQLiteDialect&amp;lt;/property&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;property name="query.substitutions"&amp;gt;true=1;false=0&amp;lt;/property&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;property name="show_sql"&amp;gt;true&amp;lt;/property&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/session-factory&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&amp;lt;/hibernate-configuration&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;To check whether the configuration is correct, I quickly wrote a test to generate the schema for the above domain model. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;[TestFixture]&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;public class HibernateTest&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;[Test]&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;public void CanExportSchema()&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;var cfg = new Configuration();&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;cfg.Configure();&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;cfg.AddAssembly(typeof(CodeStore.Core.Domain.AssemblyData).Assembly);&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;new SchemaExport(cfg).Execute(false, true, false, false);&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The above code will generate the AssemblyData table in the database with the defined fields.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 422px; HEIGHT: 384px" height=384 src="http://www.devmobile.net/nleghari/codestore/2/sqlitedbshowtable.png" width=422 mce_src="http://www.devmobile.net/nleghari/codestore/2/sqlitedbshowtable.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;So this is one approach to design&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;(domain driven design) where we started with our domain model and then generate the database in the end. The other side of it is data driven design where you can start with the database and generate your domain from these entities. By using the database, you can also generate the plumbing code for domain model (i.e. Mapping files and Domain classes) using some generation tool like MyGeneration or CodeSmith. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Now, using the &lt;A class="" href="http://martinfowler.com/eaaCatalog/repository.html" target=_blank mce_href="http://martinfowler.com/eaaCatalog/repository.html"&gt;Repository pattern&lt;/A&gt;, I'm going to create a repository to save assembly data into the database. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 412px; HEIGHT: 384px" height=384 src="http://www.devmobile.net/nleghari/codestore/2/repcode.png" width=412 mce_src="http://www.devmobile.net/nleghari/codestore/2/repcode.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Although not TDD, but writing a test now.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 513px; HEIGHT: 654px" height=544 src="http://www.devmobile.net/nleghari/codestore/2/repcodetest.png" width=399 mce_src="http://www.devmobile.net/nleghari/codestore/2/repcodetest.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;If the code looks familiar to you then you must have been to the &lt;A class="" href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx" target=_blank mce_href="http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx"&gt;excellent tutorial&lt;/A&gt; on this &lt;A class="" href="http://blogs.hibernatingrhinos.com/nhibernate/Default.aspx" target=_blank mce_href="http://blogs.hibernatingrhinos.com/nhibernate/Default.aspx"&gt;website&lt;/A&gt;.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Currently we are using plain vanilla Nhibernate through the NHibernateHelper which is not a bad thing but there is Castle NHibernate facility that we can utilise and abstract the Nhibernate plumbing. To do so, there are two different types of integration styles (defined &lt;A class="" href="http://www.castleproject.org/container/facilities/trunk/nhibernate/index.html" target=_blank mce_href="http://www.castleproject.org/container/facilities/trunk/nhibernate/index.html"&gt;here&lt;/A&gt;) I'm using the second approach which looks more straight forward. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The first thing is the change in configuration file.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The hibernate configuration is currently defined in a separate hibernate.cfg.xml file which I'm going to move into the app.config file inside the existing castle/facilities section.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 576px; HEIGHT: 334px" height=334 src="http://www.devmobile.net/nleghari/codestore/2/nhcastlefacility.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/2/nhcastlefacility.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The second thing is to change the repository class to inject ISessionManager (link) in the constructor.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 576px; HEIGHT: 367px" height=367 src="http://www.devmobile.net/nleghari/codestore/2/repsessionmanager.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/2/repsessionmanager.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;And then you can use the data repository as:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 576px; HEIGHT: 228px" height=228 src="http://www.devmobile.net/nleghari/codestore/2/usenhfacility.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/2/usenhfacility.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&lt;STRONG&gt;Source Code:&lt;/STRONG&gt; &lt;A href="http://code.google.com/p/code-store/"&gt;http://code.google.com/p/code-store/&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Conclusion:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;In this blog post, we started with creating a database and the domain model for storing AssemblyData. In the next post, we are going to use mocks to test the repository.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;As always, comments and suggestions are most welcome to improve the project.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6412372" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/CodeStore/default.aspx">CodeStore</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/NHibernate/default.aspx">NHibernate</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Resharper/default.aspx">Resharper</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Sqlite/default.aspx">Sqlite</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/.NET/default.aspx">.NET</category></item><item><title>CodeStore - Part 1 of n (TreeSurgeon, Castle Windsor, Log4net)</title><link>http://weblogs.asp.net/nleghari/archive/2008/07/16/codestore-part-1-of-n-treesurgeon-castle-windsor-log4net.aspx</link><pubDate>Wed, 16 Jul 2008 21:27:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6408531</guid><dc:creator>laghari78</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6408531</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/07/16/codestore-part-1-of-n-treesurgeon-castle-windsor-log4net.aspx#comments</comments><description>&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.02in; DIRECTION: ltr; unicode-bidi: embed"&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;What is CodeStore?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;The idea behind CodeStore is to extract information about .NET assembly and store it in a database. One we have the data, we should be able to run standard SQL queries on the data store. Although, I'm planning to develop a WPF project to show some visualisation but let's see how it'll go.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;So why CodeStore?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;I needed a pet project as it's been some time from my &lt;A class="" href="http://www.codeplex.com/sequenceviz" target=_blank mce_href="http://www.codeplex.com/sequenceviz"&gt;last one&lt;/A&gt;. And I get more into Ruby and Java, this gives me an excuse to keep up my .NET skills. This is also an experiment to maintain a running project diary on this blog.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;Tools to use:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;A class="" href="http://www.hibernate.org/343.html" target=_blank mce_href="http://www.hibernate.org/343.html"&gt;Nhibernate&lt;/A&gt;: data access&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;A class="" href="http://www.castleproject.org/" target=_blank mce_href="http://www.castleproject.org/"&gt;Castle Windsor&lt;/A&gt;: application plumbing&lt;BR&gt;&lt;A class="" href="http://logging.apache.org/log4net/index.html" target=_blank mce_href="http://logging.apache.org/log4net/index.html"&gt;Log4Net&lt;/A&gt;: logging (link)&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;... And many more&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;Setup:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;I started with setting up our development environment and one thing that proved very useful to me in the past is TreeSurgeon (&lt;A href="http://www.codeplex.com/treesurgeon"&gt;http://www.codeplex.com/treesurgeon&lt;/A&gt;).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;TreeSurgeon is an excellent tool to generate your development tree. It&amp;nbsp;definitely saved a lot of time at the start of the project.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;IMG style="WIDTH: 540px; HEIGHT: 493px" height=493 src="http://www.devmobile.net/nleghari/codestore/1/treesurgeon.png" width=540 mce_src="http://www.devmobile.net/nleghari/codestore/1/treesurgeon.png"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;Once the solution is generated, we can quickly check if the build is working.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 570px; HEIGHT: 384px" height=384 src="http://www.devmobile.net/nleghari/codestore/1/buildstatus.png" width=570 mce_src="http://www.devmobile.net/nleghari/codestore/1/buildstatus.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;Code check-in:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Then I created a project on google project hosting which is available at &lt;A href="http://code.google.com/p/code-store/"&gt;http://code.google.com/p/code-store/&lt;/A&gt;.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 576px; HEIGHT: 341px" height=341 src="http://www.devmobile.net/nleghari/codestore/1/googlecodestore.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/1/googlecodestore.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;I used TortoiseSVN (&lt;A href="http://tortoisesvn.tigris.org/"&gt;http://tortoisesvn.tigris.org/&lt;/A&gt;) to import the project and AnkhSVN (&lt;A href="http://ankhsvn.open.collab.net/"&gt;http://ankhsvn.open.collab.net/&lt;/A&gt;) for Visual Studio integration.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;To ignore certain files, I've also setup the following pattern into TortoiseSVN global ignore pattern. (TortoiseSVN-&amp;gt;Settings-&amp;gt;General)&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-STYLE: italic; FONT-FAMILY: Calibri"&gt;bin */bin obj */obj *.suo _ReSharper.* *.resharper *.resharper.user&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;*.user &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;Writing code:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Now we can start plugging in Castle Windsor and setup the configuration to inject a simple class. To do so, I added the three castle dependencies into the CodeStoreConsole project.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 221px; HEIGHT: 81px" height=81 src="http://www.devmobile.net/nleghari/codestore/1/castlereferences.png" width=221 mce_src="http://www.devmobile.net/nleghari/codestore/1/castlereferences.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;And then using the following code inside Main() to resolve CodeAssemblyLoader.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;var container = new WindsorContainer(new XmlInterpreter())&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;var assemblyLoader = container.Resolve&amp;lt;ILoader&amp;gt;("assemblyLoader");&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;assemblyLoader.Load();&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;As you can see, it is using &lt;EM&gt;&lt;A class="" href="http://www.castleproject.org/container/documentation/v1rc3/manual/windsor.html" target=_blank mce_href="http://www.castleproject.org/container/documentation/v1rc3/manual/windsor.html"&gt;WindsorContainer&lt;/A&gt;&lt;/EM&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;EM&gt;&lt;A class="" href="http://www.castleproject.org/container/documentation/v1rc3/manual/windsor.html" target=_blank mce_href="http://www.castleproject.org/container/documentation/v1rc3/manual/windsor.html"&gt;&amp;nbsp;&lt;/A&gt;&lt;/EM&gt; &lt;/SPAN&gt;which is used to read the configuration file and resolve the components from the configuration. And the configuration looks like this.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&amp;lt;components&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;component id="assemblyLoader" service="CodeStore.Core.ILoader, CodeStore.Core"&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;type="CodeStore.Core.CodeAssemblyLoader, CodeStore.Core"&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/component&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&amp;lt;/components&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;You can view the complete application configuration file &lt;A class="" href="http://code.google.com/p/code-store/source/browse/trunk/src/CodeStoreConsole/App.config" target=_blank mce_href="http://code.google.com/p/code-store/source/browse/trunk/src/CodeStoreConsole/App.config"&gt;here&lt;/A&gt;. Here is the output when the application is executed.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 576px; HEIGHT: 280px" height=280 src="http://www.devmobile.net/nleghari/codestore/1/apprun1.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/1/apprun1.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;At the moment, ILoader.Load() takes no argument, but we are going to change it so that it'll take in a file name. The target assembly is selected using the FileOpenDialog. This is a very common behaviour that I use so I think it would be better if I can put that in ReSharper Live Templates. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 521px; HEIGHT: 384px" height=384 src="http://www.devmobile.net/nleghari/codestore/1/resharpertemplate.png" width=521 mce_src="http://www.devmobile.net/nleghari/codestore/1/resharpertemplate.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Now, I can use it using the shortcut.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 404px; HEIGHT: 114px" height=114 src="http://www.devmobile.net/nleghari/codestore/1/templateusage.png" width=404 mce_src="http://www.devmobile.net/nleghari/codestore/1/templateusage.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;After the code to open file, I&amp;nbsp;added a new project in our solution which will be the target test case for&amp;nbsp;the code analysis engine.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Now, when the application is executed, we'll see that the file is successfully selected.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 576px; HEIGHT: 152px" height=152 src="http://www.devmobile.net/nleghari/codestore/1/apprun2.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/1/apprun2.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;At the moment, I'm using Console.Writeline to print the output which is not ideal so I'm going to replace it with log4net. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;One way to add log4net is to directly add it in your code (like I described in &lt;A href="http://weblogs.asp.net/nleghari/articles/easylog.aspx"&gt;http://weblogs.asp.net/nleghari/articles/easylog.aspx&lt;/A&gt;) but there is also Castle Logging facility which makes it possible to abstract the logging engine (although you can also do this quite easily). &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;One that topic, I found a very useful &lt;A class="" href="http://devlicio.us/blogs/casey/archive/2008/06/18/logging-with-castle-windsor-the-logging-facility-and-log4net.aspx" target=_blank mce_href="http://devlicio.us/blogs/casey/archive/2008/06/18/logging-with-castle-windsor-the-logging-facility-and-log4net.aspx"&gt;blog post&lt;/A&gt; by Casey Charlton about adding log4net with &lt;A class="" href="http://www.castleproject.org/container/facilities/v1rc3/logging/index.htm" target=_blank mce_href="http://www.castleproject.org/container/facilities/v1rc3/logging/index.htm"&gt;Castle factilities&lt;/A&gt; . In the end, I did it a little&amp;nbsp;differently by extracting the Logger into its own class to avoid using properties in every method. The output generated in the log file is shown below.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in"&gt;&lt;IMG style="WIDTH: 576px; HEIGHT: 379px" height=379 src="http://www.devmobile.net/nleghari/codestore/1/apprun3.png" width=576 mce_src="http://www.devmobile.net/nleghari/codestore/1/apprun3.png"&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;A class="" href="http://code.google.com/p/code-store/" mce_href="http://code.google.com/p/code-store/"&gt;Source Code&lt;/A&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;&lt;STRONG&gt;Conclusion:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Although&amp;nbsp;I don't have anything to show to the client but we covered starting a new project using TreeSurgeon and then adding support for Castle Windsor and log4net. In the next post, I'll look into Nhibernate to create the domain model and the database in SQLite.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;As always, any suggestions or comments are most welcome in order to improve the application.&lt;/P&gt;&lt;/UL&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6408531" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Castle+Windsor/default.aspx">Castle Windsor</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Resharper/default.aspx">Resharper</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/TreeSurgeon/default.aspx">TreeSurgeon</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Blue Screen Of Death 2.0</title><link>http://weblogs.asp.net/nleghari/archive/2008/07/14/blue-screen-of-death-2-0.aspx</link><pubDate>Mon, 14 Jul 2008 13:22:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6399792</guid><dc:creator>laghari78</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6399792</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/07/14/blue-screen-of-death-2-0.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;&lt;A class="" href="http://confusedofcalcutta.com/2008/07/14/the-new-blue/" mce_href="http://confusedofcalcutta.com/2008/07/14/the-new-blue/"&gt;The New Blue?&lt;/A&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6399792" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>LinkList 13072008 :: Ganymede, Thrift vs Protocol Buffers and Port based Async Messaging</title><link>http://weblogs.asp.net/nleghari/archive/2008/07/13/linklist-13072008-ganymede-thrift-vs-protocol-buffers-and-port-based-async-messaging.aspx</link><pubDate>Sun, 13 Jul 2008 23:16:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6397251</guid><dc:creator>laghari78</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6397251</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/07/13/linklist-13072008-ganymede-thrift-vs-protocol-buffers-and-port-based-async-messaging.aspx#comments</comments><description>&lt;P&gt;Things i like in Ganymede &lt;BR&gt;&lt;A href="http://sureshkrishna.wordpress.com/2008/07/11/things-i-like-in-ganymede/" mce_href="http://sureshkrishna.wordpress.com/2008/07/11/things-i-like-in-ganymede/"&gt;http://sureshkrishna.wordpress.com/2008/07/11/things-i-like-in-ganymede/&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.eclipse.org/ganymede/" target=_blank mce_href="http://www.eclipse.org/ganymede/"&gt;Ganymede&lt;/A&gt; is the 3.4 release of the Eclipse project. Releasing 23 simultaneous projects itself it a really huge achievement. 
&lt;P&gt;Thrift vs. Protocol Buffers&lt;BR&gt;&lt;A href="http://stuartsierra.com/2008/07/10/thrift-vs-protocol-buffers" mce_href="http://stuartsierra.com/2008/07/10/thrift-vs-protocol-buffers"&gt;http://stuartsierra.com/2008/07/10/thrift-vs-protocol-buffers&lt;/A&gt;&lt;BR&gt;First &lt;A href="http://www.cio.com/article/print/365513" target=_blank mce_href="http://www.cio.com/article/print/365513"&gt;Cisco Etch&lt;/A&gt;, then &lt;A href="http://developers.facebook.com/thrift/" target=_blank mce_href="http://developers.facebook.com/thrift/"&gt;Thrift&lt;/A&gt; and now &lt;A href="http://code.google.com/p/protobuf/" target=_blank mce_href="http://code.google.com/p/protobuf/"&gt;Protocol Buffers&lt;/A&gt;. Is it &lt;A href="http://www.25hoursaday.com/weblog/2008/07/10/TheRevengeOfRPCGoogleProtocolBuffersAndFacebookThrift.aspx" target=_blank mce_href="http://www.25hoursaday.com/weblog/2008/07/10/TheRevengeOfRPCGoogleProtocolBuffersAndFacebookThrift.aspx"&gt;the revenge of RPC&lt;/A&gt;&lt;A href="http://www.25hoursaday.com/weblog/2008/07/10/TheRevengeOfRPCGoogleProtocolBuffersAndFacebookThrift.aspx)?" mce_href="http://www.25hoursaday.com/weblog/2008/07/10/TheRevengeOfRPCGoogleProtocolBuffersAndFacebookThrift.aspx)?"&gt;?&lt;/A&gt; 
&lt;P&gt;Introduction to Port-Based Asynchronous Messaging&lt;BR&gt;&lt;A href="http://dvanderboom.wordpress.com/2008/04/21/introduction-to-port-based-asynchronous-messaging/" mce_href="http://dvanderboom.wordpress.com/2008/04/21/introduction-to-port-based-asynchronous-messaging/"&gt;http://dvanderboom.wordpress.com/2008/04/21/introduction-to-port-based-asynchronous-messaging/&lt;/A&gt; 
&lt;P&gt;Democratizing the Cloud (Video)&lt;BR&gt;&lt;A href="http://www.infoq.com/presentations/Meijer-linq-cloud" mce_href="http://www.infoq.com/presentations/Meijer-linq-cloud"&gt;http://www.infoq.com/presentations/Meijer-linq-cloud&lt;/A&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6397251" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Java/default.aspx">Java</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/LinkList/default.aspx">LinkList</category></item><item><title>LinkList 11072008 :: Erlang Exchange Videos, SchemaSpy, Capacity Management and Scala supervisors</title><link>http://weblogs.asp.net/nleghari/archive/2008/07/10/linklist-11072008-erlang-exchange-videos-schemaspy-capacity-management-and-scala-supervisors.aspx</link><pubDate>Thu, 10 Jul 2008 23:48:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6386320</guid><dc:creator>laghari78</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6386320</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/07/10/linklist-11072008-erlang-exchange-videos-schemaspy-capacity-management-and-scala-supervisors.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Federation at Flick&lt;BR&gt;&lt;A href="http://www.scribd.com/doc/2592098/DVPmysqlucFederation-at-Flickr-Doing-Billions-of-Queries-Per-Day"&gt;http://www.scribd.com/doc/2592098/DVPmysqlucFederation-at-Flickr-Doing-Billions-of-Queries-Per-Day&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Capacity Management for Web Operations&lt;BR&gt;&lt;A href="http://www.slideshare.net/jallspaw/velocity2008-capacity-management1-484676"&gt;http://www.slideshare.net/jallspaw/velocity2008-capacity-management1-484676&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;SchemaSpy - Excellent Database Graphs for Free&lt;BR&gt;&lt;A href="http://sql.dzone.com/news/schemaspy-excellent-database-g"&gt;http://sql.dzone.com/news/schemaspy-excellent-database-g&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Dissecting today's Internet traffic spikes&lt;BR&gt;&lt;A href="http://lethargy.org/~jesus/archives/118-Dissecting-todays-Internet-traffic-spikes.html"&gt;http://lethargy.org/~jesus/archives/118-Dissecting-todays-Internet-traffic-spikes.html&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Erlang exchange videos&lt;BR&gt;&lt;A href="http://video.google.com/videosearch?q=erlang+exchange"&gt;http://video.google.com/videosearch?q=erlang+exchange&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;Understanding the Difference Between Column-Stores and OLAP Data Cubes&lt;BR&gt;&lt;A href="http://www.databasecolumn.com/2008/07/understanding-the-difference-b.html"&gt;http://www.databasecolumn.com/2008/07/understanding-the-difference-b.html&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Build Scalable Systems That Handle Failure Without Losing Data&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/en-us/magazine/cc663023.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc663023.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Erlang-style Supervisor Module for Scala Actors&lt;BR&gt;&lt;A href="http://jonasboner.com/2008/06/16/erlang-style-supervisor-module-for-scala-actors/"&gt;http://jonasboner.com/2008/06/16/erlang-style-supervisor-module-for-scala-actors/&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Event-Based Architectures&lt;BR&gt;&lt;A href="http://www.ddj.com/architect/208801141"&gt;http://www.ddj.com/architect/208801141&lt;/A&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6386320" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/Erlang/default.aspx">Erlang</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/LinkList/default.aspx">LinkList</category></item><item><title>LinkShrink - Learning Ruby on Rails</title><link>http://weblogs.asp.net/nleghari/archive/2008/04/12/linkshrink-learning-ruby-on-rails.aspx</link><pubDate>Sat, 12 Apr 2008 17:31:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6092269</guid><dc:creator>laghari78</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6092269</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/04/12/linkshrink-learning-ruby-on-rails.aspx#comments</comments><description>&lt;P&gt;T&lt;A id=Introduction&gt;he best way to learn something is to develop an application with it. So when it comes to &lt;/A&gt;&lt;A href="http://www.rubyonrails.org/" rel=nofollow&gt;Rails&lt;/A&gt;, I decided [*]&amp;nbsp;to develop a clone of &lt;A class="" href="http://tinyurl.com/" target=_blank rel=nofollow mce_href="http://tinyurl.com/"&gt;TinyUrl&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Here is the&amp;nbsp;screen shot&amp;nbsp;of the&amp;nbsp;website. The &lt;A class="" href="http://code.google.com/p/linkshrink/" target=_blank mce_href="http://code.google.com/p/linkshrink/"&gt;source code&lt;/A&gt; is hosted at google project hosting and you can find the summary of the development &lt;A class="" href="http://code.google.com/p/linkshrink/wiki/ProjectNotes" mce_href="http://code.google.com/p/linkshrink/wiki/ProjectNotes"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.devmobile.net/nleghari/linkshrink/finalsite.png" mce_src="http://www.devmobile.net/nleghari/linkshrink/finalsite.png"&gt;&lt;/P&gt;
&lt;P&gt;[*] The suggestion to develop this as a starting point came via &lt;A class="" href="http://www.axisebusiness.com/adnano/" target=_blank mce_href="http://www.axisebusiness.com/adnano/"&gt;Adnan Masood&lt;/A&gt; who is running &lt;A class="" href="http://www.linkcutter.com/" target=_blank mce_href="http://www.linkcutter.com/"&gt;LinkCutter&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6092269" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Rails/default.aspx">Rails</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Ruby/default.aspx">Ruby</category></item><item><title>BookNotes : Practical Rails Projects</title><link>http://weblogs.asp.net/nleghari/archive/2008/03/27/booknotes-practical-rails-projects.aspx</link><pubDate>Thu, 27 Mar 2008 18:20:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6038019</guid><dc:creator>laghari78</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=6038019</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/03/27/booknotes-practical-rails-projects.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Once in a while; when I try to remember something that I read in some book some time ago, I&amp;nbsp;don't usually succeed in that and&amp;nbsp;then I have to start from scratch which is like &lt;A class="" href="http://en.wikipedia.org/wiki/Don't_repeat_yourself" target=_blank mce_href="http://en.wikipedia.org/wiki/Don't_repeat_yourself"&gt;DRY&lt;/A&gt;. So, I'm trying to do something new here by posting anything interested and useful that I read in a book.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;This is like a customized index to the book. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A class="" href="http://www.apress.com/book/view/9781590597811" target=_blank mce_href="http://www.apress.com/book/view/9781590597811"&gt;&lt;IMG title="Practical Rails Projects" style="WIDTH: 125px; HEIGHT: 164px" height=164 alt="Practical Rails Projects" src="http://www.apress.com/resource/bookcover/9781590597811?size=medium" width=125 border=0 mce_src="http://www.apress.com/resource/bookcover/9781590597811?size=medium"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;The following notes are from a book titled "&lt;A class="" href="http://www.apress.com/book/view/9781590597811" target=_blank mce_href="http://www.apress.com/book/view/9781590597811"&gt;Practical Rails Projects&lt;/A&gt;". In my quest to learn as much languages as I can, I found it refreshing to learn about rails and ruby.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There are a number of things from Rails that I'd like to see tightly integrated with ASP.NET.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;With more dynamic features in C#, ASP.NET MVC, MonoRail&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;and SubSonic, I'm sure it will be fun again to develop with .NET :).&lt;/P&gt;
&lt;P mce_keep="true"&gt;A little summary of the book. Pratical Rails Projects covers a niche area of learning. While you get to learn about the basics of Ruby and Rails&amp;nbsp;in "&lt;A class="" href="http://www.pragprog.com/titles/rails2" target=_blank mce_href="http://www.pragprog.com/titles/rails2"&gt;Agile Web Development with Rails&lt;/A&gt;" and get in depth with "&lt;A class="" href="http://www.amazon.com/Rails-Way-Addison-Wesley-Professional-Ruby/dp/0321445619" target=_blank mce_href="http://www.amazon.com/Rails-Way-Addison-Wesley-Professional-Ruby/dp/0321445619"&gt;The Rails Way&lt;/A&gt;", you still need to learn how to effectively apply the technology on a real-life project. While many of the projects built in the book are not real-life examples but they all have the potential.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Anyway, you get the idea, right? So here are the notes:&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=disc&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chapter 1:&amp;nbsp;About installing Rails, Setting up a project so skipping it.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chapter 2:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=circle&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Stylesheets: YUI reset-fonts-grids.css for CSS layouts&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Freezing Rails:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Freeze other gems:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://nubyonrails.com/articles/2005/12/22/freeze-other-gems-to-rails-lib-directory"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://nubyonrails.com/articles/2005/12/22/freeze-other-gems-to-rails-lib-directory&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chapter 3,4,5: MonkeyTasks: A Todo list application&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=circle&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;User authentication and management: acts_as_authenticated plugin&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;before_filter, after_filter - AOP like methods on controllers&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Create model with --skip-migration to bypass the creation of migration file&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chronic gem( gem install chronic) : natural language parser for date (Yesterday, this Monday etc)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Calendar plugin:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://topfunky.net/svn/plugins/calendar_helper/"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://topfunky.net/svn/plugins/calendar_helper/&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Design tip: Skinny controllers, Fat models&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chapter 6,7,8: Exercisr : REST based application&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=circle&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Mapping resources for REST&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;scaffold_resource&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Authentication: restful_authentication&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Graphs: &lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=disc&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;CSS Graphs:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Plugin: &lt;/SPAN&gt;&lt;A href="http://topfunky.net/svn/plugins/css_graphs"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://topfunky.net/svn/plugins/css_graphs&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Sparklines: gem install sparklines&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Gruff: gem install gruff&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Scruffy: gem install scruffy (gruff for svg)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Ziya&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chapter 9: Blog application&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=circle&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Typo: &lt;/SPAN&gt;&lt;A href="http://typosphere.org/"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://typosphere.org/&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Rails startup process&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Schema.rb for complete database schema&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;AOP around_filter&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Nifty Corners: &lt;/SPAN&gt;&lt;A href="http://www.html.it/articoli/niftycube/index.html"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://www.html.it/articoli/niftycube/index.html&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt; &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chapter 10: Simple Blog: Web Services, MetaBlog API, Blogger API&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=circle&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Action Web Service: SOAP and XML-RPC based services&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Using ExtJS for Layout: &lt;/SPAN&gt;&lt;A href="http://www.extjs.com/"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;www.extjs.com&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Pagination: will_paginate plugin: svn://errtheblog.com/svn/plugins/will_paginate&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Creating a URL with title text: title.gsub(/[^a-z1-9]+/i, '-')&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Permanent link: plugin: &lt;/SPAN&gt;&lt;A href="http://svn.techno-weenie.net/projects/plugins/permalink_fu/"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://svn.techno-weenie.net/projects/plugins/permalink_fu/&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Adding comments to a web page: &lt;/SPAN&gt;&lt;A href="http://juixe.com/svn/acts_as_commentable"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://juixe.com/svn/acts_as_commentable&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Tagging: acts_as_taggable, acts_as_polymorph&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chapter 12, 13, 14: Comic: Caching&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=circle&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Attachments: Attachment Fu, &lt;/SPAN&gt;&lt;A href="http://svn.techno-weenie.net/projects/plugins/attachment_fu/"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://svn.techno-weenie.net/projects/plugins/attachment_fu/&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Page Caching: caches_page, expire_page. Will not work for different types of users.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Cache sweeper&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Action caches: caches_action :index, :webcomic. Causes duplication&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Fragment caching: cache do .. End&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Rails forum:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://svn.techno-weenie.net/projects/beast/"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://svn.techno-weenie.net/projects/beast/&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chapter 15, 16, 17: Church Community&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=circle&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Users, Profiles, Blog, Home Page, Comments, Photo Gallery, Rich edit control&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Batch image uploading with SWFUpload, activeupload&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Image cropping: &lt;/SPAN&gt;&lt;A href="http://kropper.captchr.com/"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;http://kropper.captchr.com/&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt; works with attachment_fu&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chapter 18: Gaming Trends: Rewrite of an old PHP project&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=circle&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;ExtJS layouts, grids&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Applying Rails database migrations for an existing database&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Building a custom generator&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;In Place Edit&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Versioning: acts_as_versioned&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Acts_as_paranoid, delete_at check in database instead of actually deleting the record.&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Chapter 24: Highrise&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.375in; DIRECTION: ltr; unicode-bidi: embed" type=circle&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Mashup with Highrise API, Yahoo Maps, ExtJS&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"&gt;Rails 2.0 features&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6038019" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/BookNotes/default.aspx">BookNotes</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Rails/default.aspx">Rails</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Ruby/default.aspx">Ruby</category></item><item><title>LinkList 19032008 - Google Visualisation API, amCharts for ASP.NET and Django on IronPython</title><link>http://weblogs.asp.net/nleghari/archive/2008/03/19/linklist-19032008-google-visualisation-api-amcharts-for-asp-net-and-django-on-ironpython.aspx</link><pubDate>Wed, 19 Mar 2008 20:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5999852</guid><dc:creator>laghari78</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/nleghari/rsscomments.aspx?PostID=5999852</wfw:commentRss><comments>http://weblogs.asp.net/nleghari/archive/2008/03/19/linklist-19032008-google-visualisation-api-amcharts-for-asp-net-and-django-on-ironpython.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;How Apple Got Everything Right by Doing Everything Wrong&lt;BR&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;&lt;A href="http://www.wired.com/techbiz/it/magazine/16-04/bz_apple?currentPage=all"&gt;http://www.wired.com/techbiz/it/magazine/16-04/bz_apple?currentPage=all&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;Google Visualisation API ( out of &lt;A class="" href="http://www.gapminder.org/" mce_href="http://www.gapminder.org/"&gt;Gapminder&lt;/A&gt; )&lt;BR&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;&lt;A href="http://google-code-updates.blogspot.com/2008/03/introducing-google-visualization-api.html"&gt;http://google-code-updates.blogspot.com/2008/03/introducing-google-visualization-api.html&lt;/A&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;&lt;BR&gt;ASP.NET Controls for amCharts&lt;BR&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;&lt;A href="http://www.amcharts.com/aspnet"&gt;http://www.amcharts.com/aspnet&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;Django running on IronPython&lt;BR&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;&lt;A href="http://unbracketed.org/2008/mar/16/pycon-2008-django-now-plays-dark-side/"&gt;http://unbracketed.org/2008/mar/16/pycon-2008-django-now-plays-dark-side/&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;&lt;SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px 'Lucida Grande'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: pre; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5999852" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/nleghari/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/LinkList/default.aspx">LinkList</category><category domain="http://weblogs.asp.net/nleghari/archive/tags/.NET/default.aspx">.NET</category></item></channel></rss>