<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://devlicio.us/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>Tim Barcz : Tools</title><link>http://devlicio.us/blogs/tim_barcz/archive/tags/Tools/default.aspx</link><description>Tags: Tools</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Jet Brains Development Academy Welcomes Another</title><link>http://devlicio.us/blogs/tim_barcz/archive/2009/08/11/jet-brains-development-academy-welcomes-another.aspx</link><pubDate>Wed, 12 Aug 2009 02:55:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:49999</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=49999</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/08/11/jet-brains-development-academy-welcomes-another.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image_5F00_4.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" alt="image" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image_5F00_thumb_5F00_1.png" width="240" align="right" border="0" height="57" /&gt;&lt;/a&gt; A few years ago I was introduced to &lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper&lt;/a&gt; (&lt;a href="http://www.jetbrains.com"&gt;JetBrains&lt;/a&gt;) from a co-worker (Thanks Grant!).&amp;nbsp; Having always been one who desires to move more quickly through code and take advantage of any shortcut I can, ReSharper felt like &amp;quot;coming home&amp;quot;.&lt;/p&gt;
&lt;p&gt;Last week I was invited to be part of their &lt;a href="http://www.jetbrains.com/devnet/academy/index.jsp"&gt;development academy&lt;/a&gt; as a an &lt;a href="http://www.jetbrains.com/devnet/academy/experts/index.html"&gt;academy expert&lt;/a&gt;.&amp;nbsp; For those of you not aware of this hidden gem that JetBrains has created:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Members of the Academy are recognized experts in various areas of software development. They contribute to Java and .NET communities by advocating best development practices through formal and informal publications and meetings, and serve as a versatile source of expertise.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;#39;ll be entirely honest and say that I don&amp;#39;t consider myself an &amp;quot;expert&amp;quot; in anything, let alone ReSharper.&amp;nbsp; Yes, ReSharper is an integral piece of my development environment and an extension of my finger tips, but I&amp;#39;m always coming across new key commands or features that were always sitting there, begging me to use them, making me realize, I can stretch this tool a bit more (or is it the other way around?).&lt;/p&gt;
&lt;p&gt;The reason I&amp;#39;m so fond of ReSharper is that development tools litter the .NET space.&amp;nbsp; This is plainly visible by picking up a magazine and thumbing through it, taking notice to all of the component manufacturers and tools available.&amp;nbsp; The quality and usefulness of some of these tools can often be called into question.&amp;nbsp; ReSharper, however, is a pleasure to work with.&amp;nbsp; Even in it&amp;#39;s memory hogging days (around version 4.0) I didn&amp;#39;t mind it so much, the productivity gain was entirely worth it (version 4.5 works beautifully).&amp;nbsp; There are tools that I like having and tools that I must have.&amp;nbsp; Had the company I work for not purchased ReSharper, I would have paid for it out of my own pocket.&amp;nbsp; I can&amp;#39;t say that for a great number of tools out there.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=49999" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/ReSharper/default.aspx">ReSharper</category></item><item><title>Your IoC Container Choice is Not a Feature of Your Application</title><link>http://devlicio.us/blogs/tim_barcz/archive/2009/03/29/your-ioc-container-choice-is-not-a-feature-of-your-application.aspx</link><pubDate>Mon, 30 Mar 2009 02:51:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:45231</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>28</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=45231</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2009/03/29/your-ioc-container-choice-is-not-a-feature-of-your-application.aspx#comments</comments><description>&lt;p&gt;I don&amp;#39;t want to be a wet blanket, but someone&amp;#39;s got to put a stop to the IoC love fest going on out there.&amp;nbsp; An Inversion of Control (IoC) container , for those of you were aren&amp;#39;t yet familiar, allows you to retrieve instances of objects at runtime.&amp;nbsp; A relatively common solution to a common problem. In the .NET world there is no lack of choices of IoC containers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.castleproject.org/container/index.html"&gt;Castle&amp;#39;s Winsdor/MicroKernel&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://structuremap.sourceforge.net/Default.htm"&gt;StructureMap&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.springframework.net/"&gt;Spring.NET&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/autofac/"&gt;AutoFac&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://ninject.org/"&gt;Ninject&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc468366.aspx"&gt;Unity&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://funq.codeplex.com/"&gt;Funq&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(I won&amp;#39;t go fully into IoC, but If you&amp;#39;d like more resource you can read &lt;a href="http://martinfowler.com/articles/injection.html"&gt;Martin Fowler&amp;#39;s article on the subject&lt;/a&gt; or post specific questions in the comments or contact me through.&amp;nbsp; Read on, there is value here in this post for you.)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Let me state clearly now, IoC containers are a means to an end and NOT a feature of your application.&lt;/b&gt; The goal is to have loosely coupled applications, IoC containers help get you there, but you can absolutely have a loosely coupled application without an IoC container (see the &lt;a href="http://www.dofactory.com/Patterns/Patterns.aspx"&gt;Gang of Four creational patterns&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Occasionally I&amp;#39;ll hear some comment about IoC and how great a certain container is or how an application would be so much better if another, sexier, container was used.&amp;nbsp; Here are some recent &lt;a href="http://www.twitter.com"&gt;tweets&lt;/a&gt; that illustrate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Man i love #StructureMap, always finding new things i can do, and have fun doing them &lt;/li&gt;
&lt;li&gt;really need to look at structuremap, but we&amp;#39;&amp;#39;ve invested a lot into castle with our own facilities/resolvers/etc &lt;/li&gt;
&lt;li&gt;Ninject is da bomb! &lt;/li&gt;
&lt;li&gt;Switched from Windsor MicroKernel to Ninject in 10KLOC project in &amp;lt; 1 hour by creating a little proxy. Now to complete the conversion. &lt;/li&gt;
&lt;li&gt;It is a talk on Castle Windsor so i guess Ninject will not do. &lt;/li&gt;
&lt;li&gt;Can&amp;#39;t imagine why somebody would use Ninject beside the fact that it&amp;#39;s PURE AND UTTER AWESOME. Yeah! Ninject FTW. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of the statements above are probably innocuous, but some rub me slightly the wrong way.&amp;nbsp; Specifically the two comments above about switching from one container to another. There are probably times when the choice of one container over another makes sense, but I would bet that these scenarios are the exception and not the rule.&lt;/p&gt;
&lt;p&gt;Choosing one container over another won&amp;#39;t make your application a success, the architecture, or lack there of, will have far more of a say on your application than will your container choice. As yoda might say, &amp;quot;The container you choose does not a good app make&amp;quot;. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=45231" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Rant/default.aspx">Rant</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Windsor/default.aspx">Windsor</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Tools/default.aspx">Tools</category></item><item><title>NHProfiler - An Early Look</title><link>http://devlicio.us/blogs/tim_barcz/archive/2008/12/09/nhprofiler-an-early-look.aspx</link><pubDate>Tue, 09 Dec 2008 07:09:17 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:43347</guid><dc:creator>Tim Barcz</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/tim_barcz/rsscomments.aspx?PostID=43347</wfw:commentRss><comments>http://devlicio.us/blogs/tim_barcz/archive/2008/12/09/nhprofiler-an-early-look.aspx#comments</comments><description>&lt;p&gt;&lt;img src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfWhatistheroleoftheDBA_DB9/Icon_thumb.png" align="right" alt="" /&gt; Over the past week I&amp;#39;ve had the distinct opportunity to have a first-hand look into &lt;a href="http://ayende.com/Blog/archive/2008/10/13/nhprof-another-milestone.aspx"&gt;NHProf&lt;/a&gt;, &lt;a href="http://www.ayende.com/blog/"&gt;Ayende&amp;#39;s&lt;/a&gt; upcoming profiler for &lt;a href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/a&gt;.&amp;#160; It&amp;#39;s been an honor to be part of the team that is putting NHProfiler through its paces.&amp;#160; While NHProfiler is still in private beta it is very impressive and I want to let you peek inside.&lt;/p&gt;  &lt;p&gt;This evening I decided to sit down and spend some time poking around an application and watch NHProfiler to see if anything seemed out of sorts.&amp;#160; Here&amp;#39;s what I found:&lt;/p&gt;  &lt;h2&gt;Easy To Understand&lt;/h2&gt;  &lt;p&gt;You can get by without purchasing NHProf, from what I see there&amp;#39;s nothing you can&amp;#39;t &amp;quot;figure out&amp;quot; yourself.&amp;#160; NHProf is a lot like &lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper&lt;/a&gt; or &lt;a href="http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/"&gt;CodeRush&lt;/a&gt;, you can get by without it, but why would you want to?&amp;#160; Here&amp;#39;s what I mean, you can pop open SQL Server Profiler and see what is being executed:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image7.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="412" alt="image" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image7_5F00_thumb.png" width="575" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That&amp;#39;s messy but take a look at how NHProf collates the data:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image3.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="381" alt="image" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image3_5F00_thumb.png" width="249" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Relevant&lt;/h2&gt;  &lt;p&gt;You can sift through the SQL Server Profiler trace if you&amp;#39;d like to but NHProfiler does a great job in giving you the same information, just presented better.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image11.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="578" alt="image" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image11_5F00_thumb.png" width="578" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;From this view I can see that five queries were run and I can see that three of the same queries are being issued which might point to an area where there is some tweaking to do.&lt;/p&gt;  &lt;h2&gt;Performance Gains&lt;/h2&gt;  &lt;p&gt;We all want our applications to run faster.&amp;#160; We want speed and performance but often times its takes quite a bit of time to find performance problems and their subsequent fixes.&amp;#160; NHProfiler allowed me to very quickly find some queries that didn&amp;#39;t need to be executing and tweak some code to eliminate those calls.&amp;#160; Since I can see the code that &lt;a href="http://www.hibernate.org/362.html"&gt;NHibernate&lt;/a&gt; generates I can also make modifications to query I&amp;#39;m submitting to &lt;a href="http://www.hibernate.org/362.html"&gt;NHibernate&lt;/a&gt; for further performance gains.&lt;/p&gt;  &lt;p&gt;In a very short amount of time (the writing of this blog post has taken several times longer) I was able to reduce reduce data access time by a factor of nearly 10.&amp;#160; How do I know that, I have the hard data to prove it.&lt;/p&gt;  &lt;h3&gt;Before:&lt;/h3&gt;  &lt;h2&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image15.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="124" alt="image" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image15_5F00_thumb.png" width="337" border="0" /&gt;&lt;/a&gt;&lt;/h2&gt;  &lt;h3&gt;After:&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image19.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="114" alt="image" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_barcz/image19_5F00_thumb.png" width="314" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;If you use NHibernate, NHProfiler is a must.&amp;#160; By using NHProf to observe my applications I&amp;#39;m able to save my time and not have to burrow through SQL Server Profiler or wonder what is going on at the data level.&amp;#160; I am quickly able to observe what is going on and when and make any necessary modification and then observe the outcome.&amp;#160; While you can use Visual Studio without &lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper&lt;/a&gt; or &lt;a href="http://devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/"&gt;CodeRush&lt;/a&gt; many of you out there have found you just don&amp;#39;t want to.&amp;#160; After using these productivity tools you find that you&amp;#39;re able to work with less friction.&amp;#160; NHProfiler is the same way, you can work without it, but I highly recommend against it.&lt;/p&gt;  &lt;p&gt;Keep your eye on &lt;a href="http://www.ayende.com/blog/"&gt;Ayende&amp;#39;s blog&lt;/a&gt; for information coming soon.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=43347" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/NHibernate/default.aspx">NHibernate</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/NHProf/default.aspx">NHProf</category><category domain="http://devlicio.us/blogs/tim_barcz/archive/tags/Tools/default.aspx">Tools</category></item></channel></rss>