<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en"><title type="text">Krzysztof Koźmic's blog</title><link rel="alternate" type="text/html" href="http://kozmic.pl" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/kozmic" /><subtitle type="text">less is more</subtitle><updated>2012-05-10T21:16:17+00:00</updated><generator uri="http://wordpress.org/">WordPress</generator><feedburner:info uri="kozmic" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><id>http://kozmic.pl/feed/atom/</id><geo:lat>50.000000</geo:lat><geo:long>19.900000</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by/2.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><feedburner:emailServiceId>kozmic</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry><title type="html">How to force Nuget not to update log4net to 1.2.11</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/kozmic/~3/2Gc82u7D6rI/" /><category term="Uncategorized" /><author><name>Krzysztof</name></author><updated>2012-01-31T04:30:26-08:00</updated><id>http://kozmic.pl/?p=611</id><summary type="html">That’s a quick one. There’s been a new release of log4net recently that’s signed with a new key, and therefore is incompatible with old version 1.2.10. Therefore, due to near-ubiquity of the library in .NET space, it may cause some problems if you happen to have a dependency (direct or indirect) on it. The matters [...]</summary><content type="html" xml:base="http://kozmic.pl/2012/01/31/how-to-force-nuget-not-to-update-log4net-to-1-2-11/">&lt;p&gt;That’s a quick one. There’s been a new release of log4net recently that’s signed with a new key, and therefore is incompatible with old version 1.2.10.&lt;/p&gt;
&lt;p&gt;Therefore, due to near-ubiquity of the library in .NET space, it may cause some problems if you happen to have a dependency (direct or indirect) on it.&lt;/p&gt;
&lt;p&gt;The matters are made worse by Nuget’s default of getting the latest available version of the package. I dealt with this problem the other day, and I saw a few people in my twitter stream struggling with the same issue.&lt;/p&gt;
&lt;p&gt;The solution is quite simple. It’s not specific to log4net and I’m not picking on log4net here. Here’s how you can restrict Nuget’s package to specific version in your solution.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;So imagine you install a package that has a dependency on log4net. In this case, the dependency is specified as specifically version 1.2.10 (as opposed to Nuget’s default: this version of newer).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2012/01/nuget_core.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="nuget_core" border="0" alt="nuget_core" src="http://kozmic.pl/wp-content/uploads/2012/01/nuget_core_thumb.png" width="660" height="287" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;If after that we install another package that also depends on log4net but doesn’t restrict the version, we’ll have a problem.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2012/01/nuget_log4net_fail.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="nuget_log4net_fail" border="0" alt="nuget_log4net_fail" src="http://kozmic.pl/wp-content/uploads/2012/01/nuget_log4net_fail_thumb.png" width="660" height="327" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The package we were trying to install doesn’t get installed. Actually, even if it did, we would have a problem since it most likely was compiled against log4net 1.2.10 anyway, and if Nuget updated log4net to version 1.2.11 the app would throw an exception at runtime due to mismatched assembly.&lt;/p&gt;
&lt;p&gt;So there is a solution to restrict version of the package to specific version (in this case 1.2.10) &lt;a href="http://docs.nuget.org/docs/reference/versioning" target="_blank"&gt;as specified in the documentation.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2012/01/nuget_log4net_fail_solution.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="nuget_log4net_fail_solution" border="0" alt="nuget_log4net_fail_solution" src="http://kozmic.pl/wp-content/uploads/2012/01/nuget_log4net_fail_solution_thumb.png" width="691" height="339" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;After adding allowedVersions=”[1.2.10]” we can try again and this time the package will install properly.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2012/01/nuget_log4net_fail_avoided.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="nuget_log4net_fail_avoided" border="0" alt="nuget_log4net_fail_avoided" src="http://kozmic.pl/wp-content/uploads/2012/01/nuget_log4net_fail_avoided_thumb.png" width="660" height="226" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Notice it says it installed log4net 1.2.11. I checked my packages folder, and project dependencies and the version referenced was 1.2.10 so all is good.&lt;/p&gt;
&lt;p&gt;Hope that helps&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kozmic/~4/2Gc82u7D6rI" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://kozmic.pl/2012/01/31/how-to-force-nuget-not-to-update-log4net-to-1-2-11/</feedburner:origLink></entry><entry><title type="html">Testing framework is not just for writing… tests</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/kozmic/~3/YnUHQ0UgiG8/" /><category term=".NET" /><category term="Design" /><category term="Tools" /><category term="hacks" /><category term="scratchpad" /><category term="testing" /><author><name>Krzysztof</name></author><updated>2012-01-18T05:17:47-08:00</updated><id>http://kozmic.pl/?p=598</id><summary type="html">Quick question – from the top of your head, without running the code, what is the result of: Or a different one: How about this one from NHibernate? The point being? Well, if you can answer all of the above without running the code, we’re hiring. I don’t, and I suspect most people don’t either. [...]</summary><content type="html" xml:base="http://kozmic.pl/2012/01/18/testing-framework-is-not-just-for-writing-tests/">&lt;p&gt;Quick question – from the top of your head, without running the code, what is the result of:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
var foo = -00.053200000m;
var result = foo.ToString(&amp;quot;##.##&amp;quot;);
&lt;/pre&gt;
&lt;p&gt;Or a different one:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
var foo = &amp;quot;foo&amp;quot;;
var bar = &amp;quot;bar&amp;quot;;
var foobar = &amp;quot;foo&amp;quot; + &amp;quot;bar&amp;quot;;
var concaternated = new StringBuilder(foo).Append(bar).ToString(); 

var result1 = AreEqual(foobar, concaternated);
var result2 = Equals(foobar, concaternated);

public static bool AreEqual(object one, object two)
{
    return one == two;
}
&lt;/pre&gt;
&lt;p&gt;How about this one from NHibernate?&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
var parent = session.Get&amp;lt;Parent&amp;gt;(1); 

DoSomething(parent.Child.Id); 

var result = NHibernateUtil.IsInitialized(parent.Child);
&lt;/pre&gt;
&lt;h3&gt;The point being?&lt;/h3&gt;
&lt;p&gt;Well, if you can answer all of the above without running the code, &lt;a href="http://readify.net/work-with-us" target="_blank"&gt;we’re hiring&lt;/a&gt;. I don’t, and I suspect most people don’t either. That’s fine. Question is – what are you going to do about it? What do you do when some 3rd party library, or part of standard library exhibits unexpected behaviour? How do you go about learning if what you think should happen, is really what does happen?&lt;/p&gt;
&lt;h3&gt;Scratchpad&lt;/h3&gt;
&lt;p&gt;I’ve seen people open up Visual Studio, create ConsoleApplication38, write some code using the API in question including plenty of Console.WriteLine along the way (curse whoever decided Client Profile should be the default for Console applications, switch to full .NET profile) compile, run and discard the code. And then repeat the process with ConsoleApplication39 next time.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The solution I’m using feels a bit more lightweight, and has worked for me well over the years. It is very simple – I leverage my existing test framework and test runner. I create an empty test fixture called Scratchpad.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2012/01/scratchpad.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="scratchpad" border="0" alt="scratchpad" src="http://kozmic.pl/wp-content/uploads/2012/01/scratchpad_thumb.png" width="198" height="185" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2012/01/scratchpad_fixture.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="scratchpad_fixture" border="0" alt="scratchpad_fixture" src="http://kozmic.pl/wp-content/uploads/2012/01/scratchpad_fixture_thumb.png" width="282" height="231" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;This class gets committed to the VCS repository. That way every member of the team gets their own scratchpad to play with and validate their theories, ideas and assumptions. However, as the name implies, this all is a one-off throwaway code. After all, you don’t really need to test the BCL. One would hope Microsoft already did a good job at that.&lt;/p&gt;
&lt;p&gt;If you’re using git, you can easily tell it not to track changes to the file, by running the following command (after you commit the file):&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;git update-index –assume-unchanged Scratchpad.cs&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2012/01/scratchpad_git.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="scratchpad_git" border="0" alt="scratchpad_git" src="http://kozmic.pl/wp-content/uploads/2012/01/scratchpad_git_thumb.png" width="636" height="210" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;With this simple set up you will have quick place to validate your assumptions (and answer questions about API behaviour) with little friction.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2012/01/scratchpad_test.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="scratchpad_test" border="0" alt="scratchpad_test" src="http://kozmic.pl/wp-content/uploads/2012/01/scratchpad_test_thumb.png" width="383" height="147" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;So there you have it, a new, useful technique in your toolbelt.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kozmic/~4/YnUHQ0UgiG8" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://kozmic.pl/2012/01/18/testing-framework-is-not-just-for-writing-tests/</feedburner:origLink></entry><entry><title type="html">Approval testing – value for the money</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/kozmic/~3/5CmhvmSuhcA/" /><category term="c#" /><category term="code snippets" /><category term="TDD" /><category term="Tools" /><category term="testing" /><author><name>Krzysztof</name></author><updated>2012-01-16T12:40:03-08:00</updated><id>http://kozmic.pl/?p=584</id><summary type="html">I am a believer in the value of testing. However not all tests are equal, and actually not all tests provide value at all. Raise your hand if you’ve ever seen (unit) tests that tested every corner case of trivial piece of code that’s used once in a blue moon in an obscure part of [...]</summary><content type="html" xml:base="http://kozmic.pl/2012/01/16/approval-testing-value-for-the-money/">&lt;p&gt;I am a believer in the &lt;a href="http://kozmic.pl/2011/02/27/tests-are-your-airbag/" target="_blank"&gt;value&lt;/a&gt; of testing. However not all tests are equal, and actually not all tests provide value at all. Raise your hand if you’ve ever seen (unit) tests that tested every corner case of trivial piece of code that’s used once in a blue moon in an obscure part of the system. Raise your other hand if that test code was not written by human but generated.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;As with any type of code, test code is a liability. It takes time to write it, and then it takes even more time to read it and maintain it. Considering time is money, rather then blindly unit testing everything we need to constantly ask ourselves how do we get the best value for the money – what’s the best way to spend time writing code, to write the least amount of it, to best cover the widest range of possible failures in the most maintainable fashion.&lt;/p&gt;
&lt;p&gt;Notice we’re optimising quite a few variables here. We don’t want to blindly write plenty of code, we don’t want to write sloppy code, and we want the test code to properly fulfil its role as our safety net, alarming us early when things are about to go belly up.&lt;/p&gt;
&lt;h3&gt;Testing conventions&lt;/h3&gt;
&lt;p&gt;What many people seem to find challenging to test is conventions in their code. When all you have is a hammer (unit testing) it’s hard to hit a nail, that not only isn’t really a nail, but isn’t really explicitly there to being with. To make matters worse the compiler is not going to help you really either. How would it know that LoginController not implementing IController is a problem? How would it know that the new dependency you introduced onto the controller is not registered in your IoC container? How would it know that the public method on your &lt;a href="http://nhforge.org" target="_blank"&gt;NHibernate&lt;/a&gt; entity needs to be virtual?&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;In some cases the tool you’re using will provide some level of validation itself. NHibernate knows the methods ought to be virtual and will give you quite good exception message when you set it up. You can verify that quite easily in a simple test. Not everything is so black and white however. One of diagnostics provided by &lt;a href="http://docs.castleproject.org/Windsor.MainPage.ashx" target="_blank"&gt;Castle Windsor&lt;/a&gt; is called “&lt;strong&gt;Potentially&lt;/strong&gt; misconfigured components”. Notice the vagueness of the first word. They might be misconfigured, but not necessarily are – it all depends on how you’re using them and the tool itself cannot know that. How do you test that efficiently?&lt;/p&gt;
&lt;h3&gt;Enter approval testing&lt;/h3&gt;
&lt;p&gt;One possible solution to that, which we’ve been quite successfully using on my current project is approval testing. The concept is very simple. You write a test that runs producing an output. Then the output is reviewed by someone, and assuming it’s correct, it’s marked as approved and committed to the VCS repository. On subsequent runs the output is generated again, and compared against approved version. If they are different the test fails, at which point someone needs to review the change and either mark the new version as approved (when the change is legitimate) or fix the code, if the change is a bug.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;If the explanation above seems dry and abstract let’s go through an example. Windsor 3 introduced way to programmatically access its diagnostics. We can therefore write a test looking through the potentially misconfigured components, so that we get notified if something on the list changes. I’ll be using &lt;a href="http://approvaltests.sourceforge.net/" target="_blank"&gt;ApprovalTests&lt;/a&gt; library for that.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
[Test]
pub­lic void Approved_potentially_misconfigured_components()
{
    var con­tainer = new Wind­sor­Con­tainer();
    container.Install(FromAssembly.Containing&amp;lt;HomeController&amp;gt;());

    var han­dlers = GetPotentiallyMisconfiguredComponents(container);
    var mes­sage = new String­Builder();
    var inspec­tor = new DependencyInspector(message);
    fore­ach (IEx­poseDe­pen­den­cy­Info han­dler in han­dlers)
    {
        handler.ObtainDependencyDetails(inspector);
    }
    Approvals.Approve(message.ToString());
}

pri­vate sta­tic IHan­dler[] GetPotentiallyMisconfiguredComponents(WindsorContainer con­tainer)
{
    var host = container.Kernel.GetSubSystem(SubSystemConstants.DiagnosticsKey) as IDi­ag­nos­tic­sHost;
    var diag­nos­tic = host.GetDiagnostic&amp;lt;IPotentiallyMisconfiguredComponentsDiagnostic&amp;gt;();
    var han­dlers = diagnostic.Inspect();
    return han­dlers;
}
&lt;/pre&gt;
&lt;p&gt;What’s important here is we’re setting up the container, getting the misconfigured components out of it, produce readable output from the list and passing it down to the approval framework to do the rest of the job.&lt;/p&gt;
&lt;p&gt;Now if you’ve set up the framework to pup-up a diff tool when the approval fails you will be greeted with something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2012/01/approval_diff.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="approval_diff" border="0" alt="approval_diff" src="http://kozmic.pl/wp-content/uploads/2012/01/approval_diff_thumb.png" width="640" height="388" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;You have all the power of your diff tool to inspect the change. In this case we have one new misconfigured component (HomeController) which has a new parameter, appropriately named missingParameter that the container doesn’t know how to provide to it. Now you either slap yourself in the forehead and fix the issue, if that really is an issue, or approve that dependency, by copying the diff chunk from the left pane to the right, approved pane. By doing the latter you’re notifying the testing framework and your teammates that you do know what’s going on and you know it’s not an issue the way things are going to work. Coupled with a sensible commit message explaining why you chose to approve this difference you get a pretty good trail of exception to the rule and reasons behind them.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;That’s quite an elegant approach to a quite hard problem. We’re using it for quite a few things, and it’s been giving us really good value for little effort it took to write those tests, and maintain them as we keep developing the app, and the approved files change.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;So there you have it, a new, useful tool in your toolbelt.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kozmic/~4/5CmhvmSuhcA" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://kozmic.pl/2012/01/16/approval-testing-value-for-the-money/</feedburner:origLink></entry><entry><title type="html">API design challenge – builder</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/kozmic/~3/T8gMDiTZM40/" /><category term="Uncategorized" /><author><name>Krzysztof</name></author><updated>2011-12-30T17:07:54-08:00</updated><id>http://kozmic.pl/2011/12/31/api-design-challenge-builder/</id><summary type="html">Now that Windsor 3 is released I can concentrate on some of my other ideas and projects. While working on one of them, called Cartographer, I encountered an interesting API design problem.   I have a class (a builder to be precise) that has a task of setting up a central object (an IMapper implementation) [...]</summary><content type="html" xml:base="http://kozmic.pl/2011/12/31/api-design-challenge-builder/">&lt;p&gt;Now that &lt;a href="http://kozmic.pl/2011/12/16/castle-windsor-3-0-is-released/" target="_blank"&gt;Windsor 3 is released&lt;/a&gt; I can concentrate on some of my other ideas and projects. While working on one of them, &lt;a href="https://github.com/kkozmic/Cartographer" target="_blank"&gt;called Cartographer&lt;/a&gt;, I encountered an interesting API design problem.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I have a class (a builder to be precise) that has a task of setting up a central object (an IMapper implementation) in Cartographer (If you’ve ever used &lt;a href="http://autofac.org" target="_blank"&gt;Autofac&lt;/a&gt;, it is somewhat analogous to ContainerBuilder). What is interesting about it, is I have three goals for that class:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Provide API for high level configuration and extension points that are universal to and intrinsic to any IMapper implementation. &lt;/li&gt;
&lt;li&gt;Provide API for low level configuration of the default IMapper implementation that the builder creates, that will meet the following criteria:
&lt;ol&gt;
&lt;li&gt;Not force user to customize anything, as the default setup should be enough to get started in most cases. &lt;/li&gt;
&lt;li&gt;Allow users to easily swap/extend parts of the dependency chain of the default mapper. &lt;/li&gt;
&lt;li&gt;Work well and be natural both with and without IoC container . &lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Be simple and discoverable to the users (and provide good Intellisense experience). &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;How would you design the API for this class?&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Oh, and happy new year.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kozmic/~4/T8gMDiTZM40" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://kozmic.pl/2011/12/31/api-design-challenge-builder/</feedburner:origLink></entry><entry><title type="html">Castle Windsor 3.0 is released</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/kozmic/~3/2MKJCa8ehvg/" /><category term="Castle" /><category term="oss" /><category term="Windsor" /><author><name>Krzysztof</name></author><updated>2011-12-16T04:24:30-08:00</updated><id>http://kozmic.pl/2011/12/16/castle-windsor-3-0-is-released/</id><summary type="html">After successful beta and RC releases final version of Castle Windsor (as well as Castle Core, and a whole set of facilities) has now been released. There are no major changes between final version and RC. The difference is some minor bug fixes, improved exception messages and some small improvements all over the place.   [...]</summary><content type="html" xml:base="http://kozmic.pl/2011/12/16/castle-windsor-3-0-is-released/">&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Castle Windsor" border="0" alt="Castle Windsor" src="http://kozmic.pl/wp-content/uploads/2011/12/wc_logo1001.png" width="100" height="100" /&gt; &lt;/p&gt;
&lt;p&gt;After successful &lt;a href="http://kozmic.pl/2011/08/15/windsor-3-beta-1-is-released-along-with-other-goodies/" target="_blank"&gt;beta&lt;/a&gt; and &lt;a href="http://kozmic.pl/2011/11/20/getting-closer-castle-windsor-3-rc-1/" target="_blank"&gt;RC releases&lt;/a&gt; final version of &lt;a href="http://docs.castleproject.org/Windsor.MainPage.ashx" target="_blank"&gt;Castle Windsor&lt;/a&gt; (as well as Castle Core, and a whole set of facilities) has now been released. There are no major changes between final version and RC. The difference is some minor bug fixes, improved exception messages and some small improvements all over the place.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The packages are available now, on &lt;a href="http://docs.castleproject.org/Windsor.MainPage.ashx" target="_blank"&gt;Nuget&lt;/a&gt; (with symbols), and via &lt;a href="http://sourceforge.net/projects/castleproject/files/Windsor/3.0/Castle.Windsor.3.0.0.zip/download" target="_blank"&gt;standard .zip download&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Last but not least — thank you to everyone who downloaded beta and release candidate and provided feedback. You guys rock.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kozmic/~4/2MKJCa8ehvg" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">10</thr:total><feedburner:origLink>http://kozmic.pl/2011/12/16/castle-windsor-3-0-is-released/</feedburner:origLink></entry><entry><title type="html">Getting closer… Castle Windsor 3 RC 1</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/kozmic/~3/2axTY4y98wM/" /><category term="Castle" /><category term="Open Source" /><category term="Windsor" /><author><name>Krzysztof</name></author><updated>2011-11-20T04:14:31-08:00</updated><id>http://kozmic.pl/2011/11/20/getting-closer-castle-windsor-3-rc-1/</id><summary type="html">Few weeks later than originally expected but here it is – Castle Windsor 3.0 (along with its facilities and Castle.Core) achieved release candidate status. There is one major new feature in this release: registration API gained ability to specify properties to ignore/require. There are some scenarios where that’s useful, for example where integrating with some [...]</summary><content type="html" xml:base="http://kozmic.pl/2011/11/20/getting-closer-castle-windsor-3-rc-1/">&lt;p&gt;Few weeks later than originally expected but here it is – Castle Windsor 3.0 (along with its facilities and Castle.Core) achieved release candidate status.&lt;/p&gt;
&lt;p&gt;There is one major new feature in this release: registration API gained ability to specify properties to ignore/require. There are some scenarios where that’s useful, for example where integrating with some 3rd party framework that forces you to inherit from a base class which exposes its dependencies as properties. Creating pass-through constructors for each inherited class can be mundane. In those cases you can simply mark those base class properties as required, in which case Windsor will not allow them to be resolved unless all base property dependencies are satisfied. PropertyFilter enum supports several other most common scenarios, and for advanced cases there’s an overload that gives you more control.&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
Container.Register(
    Classes.FromThisAssembly()
        .BasedOn&amp;lt;ICommon&amp;gt;()
        .Configure(c =&amp;gt; c.Properties(PropertyFilter.RequireBase)));
&lt;/pre&gt;
&lt;p&gt;To address performance hit at startup Windsor no longer enables &lt;a href="http://docs.castleproject.org/Windsor.Performance-Counters.ashx" target="_blank"&gt;performance counters&lt;/a&gt; by default. Now, you have to do it explicitly:&lt;/p&gt;
&lt;pre class="brush: csharp; title: ; notranslate"&gt;
var container = new WindsorContainer();
var diagnostic = LifecycledComponentsReleasePolicy.GetTrackedComponentsDiagnostic(container.Kernel);
var counter = LifecycledComponentsReleasePolicy.GetTrackedComponentsPerformanceCounter(new PerformanceMetricsFactory());
container.Kernel.ReleasePolicy = new LifecycledComponentsReleasePolicy(diagnostic, counter);
&lt;/pre&gt;
&lt;p&gt;Full changelog is included in the packages. Please, if possible, take the time to upgrade to this version and if you find any issues report them so that the final release is rock solid. If no major issues are found, the final release will be published in two weeks.&lt;/p&gt;
&lt;p&gt;The binaries are available on Nuget right now, and soon &lt;a href="http://castleproject.org/castle/projects.html" target="_blank"&gt;on our website&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kozmic/~4/2axTY4y98wM" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://kozmic.pl/2011/11/20/getting-closer-castle-windsor-3-rc-1/</feedburner:origLink></entry><entry><title type="html">Connector: Simple, zero friction Github –&amp;gt; AppHarbor integration</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/kozmic/~3/8otxhP-K-6Q/" /><category term="Git" /><category term="Tools" /><author><name>Krzysztof</name></author><updated>2011-09-18T02:56:54-07:00</updated><id>http://kozmic.pl/2011/09/18/connector-simple-zero-friction-github-appharbor-integration/</id><summary type="html">Recently to play with some new technology I came up with an idea to build an integration layer between Github and AppHarbor. What that means, is give you ability to work with your Github repository, reaping benefits of all of it’s VCS-centric features, and automatically, continuously deploy your code to AppHarbor. The actual scenario I [...]</summary><content type="html" xml:base="http://kozmic.pl/2011/09/18/connector-simple-zero-friction-github-appharbor-integration/">&lt;p&gt;Recently to play with some new technology I came up with an idea to build an integration layer between Github and AppHarbor. What that means, is give you ability to work with your Github repository, reaping benefits of all of it’s VCS-centric features, and automatically, continuously deploy your code to AppHarbor.&lt;/p&gt;
&lt;p&gt;The actual scenario I had in mind is to be able to use that for deployment of Open Source projects. AppHarbor is fantastic, no-headache deployment in the cloud, but Github is perfect for keeping and developing your code in the open, in social way. To have the cake and eat it too, Connector was born.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2011/09/Connector.png"&gt;&lt;img style="border-right-width: 0px; margin: 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Connector" border="0" alt="Connector" src="http://kozmic.pl/wp-content/uploads/2011/09/Connector_thumb.png" width="644" height="391" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I hope you find it useful. it is free, use-at-your-own-risk-and-don’t-sue-me-if-something-breaks software. There’s still some work to be done, feature-wise and a whole lot of polishing but I decided to announce it early and get early feedback. If you have any suggestions, ideas or (gulp) bugs, let me know!&lt;/p&gt;
&lt;p&gt;link: &lt;a title="http://connector.apphb.com/" href="http://connector.apphb.com/"&gt;http://connector.apphb.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hope that helps.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kozmic/~4/8otxhP-K-6Q" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://kozmic.pl/2011/09/18/connector-simple-zero-friction-github-appharbor-integration/</feedburner:origLink></entry><entry><title type="html">Windsor 3 beta 1 – dozen of Nuget packages and SymbolSource.org support</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/kozmic/~3/oit0eLOmYLo/" /><category term="Castle" /><category term="Windsor" /><category term="Nuget" /><author><name>Krzysztof</name></author><updated>2011-09-04T03:48:58-07:00</updated><id>http://kozmic.pl/2011/09/04/windsor-3-beta-1-dozen-of-nuget-packages-and-symbolsource-org-support/</id><summary type="html">As promised, I released Nuget packages for beta 1 of Windsor 3. This is my first major rollout of Nuget packages, so please report any issues working with them. Nuget and beta packages Nuget is quickly evolving and getting more useful with each release. However one feature it’s missing right now is support for pre-release [...]</summary><content type="html" xml:base="http://kozmic.pl/2011/09/04/windsor-3-beta-1-dozen-of-nuget-packages-and-symbolsource-org-support/">&lt;p&gt;As &lt;a href="http://kozmic.pl/2011/08/15/windsor-3-beta-1-is-released-along-with-other-goodies/" target="_blank"&gt;promised&lt;/a&gt;, I released Nuget packages for beta 1 of Windsor 3. This is my first major rollout of Nuget packages, so please report any issues working with them.&lt;/p&gt;
&lt;h3&gt;Nuget and beta packages&lt;/h3&gt;
&lt;p&gt;Nuget is quickly evolving and getting more useful with each release. However one feature it’s missing right now is support for pre-release packages (&lt;a href="http://twitter.com/#!/davidebbo/status/109564923935330305" target="_blank"&gt;this is coming in the next version&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2011/09/davidebbo.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="davidebbo" border="0" alt="davidebbo" src="http://kozmic.pl/wp-content/uploads/2011/09/davidebbo_thumb.png" width="613" height="350" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;This is not really a big deal, however it means there are a few things you should be aware of.&lt;/p&gt;
&lt;h3&gt;Recommended version&lt;/h3&gt;
&lt;p&gt;Since the new package is a pre-release, while I would really like for everyone to start using it immediately and report all issues they find, I quite understand that many people will rather prefer to stick to the last official version for the time being. To accommodate that the new packages are not made recommended versions, so your Nuget explorer will still point to the last stable (2.5.3) version if you search for Windsor, Castle.Core or any other pre-existing package.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2011/09/nuget_explorer.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="nuget_explorer" border="0" alt="nuget_explorer" src="http://kozmic.pl/wp-content/uploads/2011/09/nuget_explorer_thumb.png" width="800" height="450" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;If you go to command line and install one of the packages without specifying version number, it will install the latest, that is beta 1 version.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2011/09/nuget_commandline.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="nuget_commandline" border="0" alt="nuget_commandline" src="http://kozmic.pl/wp-content/uploads/2011/09/nuget_commandline_thumb.png" width="630" height="188" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;SymbolSource.org and debugging into Windsor&lt;/h3&gt;
&lt;p&gt;Folks at &lt;a href="http://www.symbolsource.org/" target="_blank"&gt;SymbolSource.org&lt;/a&gt; added recently support for Nuget (and &lt;a href="http://www.openwrap.org/" target="_blank"&gt;OpenWrap&lt;/a&gt; as well) and the new Castle packages take advantage of that. What it gives you, is you can now easily debug into Windsor’s code, just like .NET framework reference source (&lt;a href="http://www.symbolsource.org/Public/Home/VisualStudio" target="_blank"&gt;there’s a simple guide at SymbolSource on how to do it&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;After you’re all set you can step into any of Castle methods in your debugger and watch the magic happen. Very cool thing, even if I say so myself.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2011/09/windsorsourcedebugging.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="windsor-source-debugging" border="0" alt="windsor-source-debugging" src="http://kozmic.pl/wp-content/uploads/2011/09/windsorsourcedebugging_thumb.png" width="833" height="397" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;/p&gt;
&lt;h3&gt;List of packages&lt;/h3&gt;
&lt;p&gt;Here’s the full list of v3 beta 1 packages (notice those are not all Castle packages, just those that were published as v3 beta 1 rollout of Windsor):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.Core" target="_blank"&gt;Castle.Core&lt;/a&gt; – Contains Castle.Core.dll which includes DynamicProxy, DictionaryAdapter, EmailSender, logging abstractions and some other goodies. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.Core-log4net" target="_blank"&gt;Castle.Core-log4net&lt;/a&gt; – Contains Castle.Services.Logging.Log4netIntegration.dll, that is implementation of Castle logging abstractions for log4net &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.Core-NLog" target="_blank"&gt;Castle.Core-NLog&lt;/a&gt; – Contains Castle.Services.Logging.NLogIntegration.dll, that is implementation of Castle logging abstractions for NLog &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.Windsor" target="_blank"&gt;Castle.Windsor&lt;/a&gt; – Contains Castle.Windsor.dll which has Windsor itself and two most commonly used facilities – &lt;a href="http://docs.castleproject.org/Windsor.Typed-Factory-Facility.ashx" target="_blank"&gt;Typed Factory facility&lt;/a&gt; and &lt;a href="http://docs.castleproject.org/Windsor.Startable-Facility.ashx" target="_blank"&gt;Startable facility&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.LoggingFacility" target="_blank"&gt;Castle.LoggingFacility&lt;/a&gt; – Contains &lt;a href="http://docs.castleproject.org/Windsor.Logging-Facility.ashx" target="_blank"&gt;logging facility&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.Windsor-log4net" target="_blank"&gt;Castle.Windsor-log4net&lt;/a&gt; – Empty package that just installs logging facility and Castle.Core-log4net (and their dependencies obviously). &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.Windsor-NLog" target="_blank"&gt;Castle.Windsor-NLog&lt;/a&gt; – Empty package that just installs logging facility and Castle.CoreNLog (and their dependencies obviously). &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.WcfIntegrationFacility"&gt;Castle.WcfIntegrationFacility&lt;/a&gt; – Windsor’s &lt;a href="http://docs.castleproject.org/Windsor.WCF-Integration-Facility.ashx" target="_blank"&gt;WCF facility&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.SynchronizeFacility"&gt;Castle.SynchronizeFacility&lt;/a&gt; – Windsor’s &lt;a href="http://docs.castleproject.org/Windsor.Synchronize-Facility.ashx" target="_blank"&gt;Synchronize facility&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.RemotingFacility"&gt;Castle.RemotingFacility&lt;/a&gt; – Windsor’s &lt;a href="http://docs.castleproject.org/Windsor.Remoting-Facility.ashx" target="_blank"&gt;Remoting facility&lt;/a&gt; (extracted out of Castle.Windsor.dll) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.EventWiringFacility"&gt;Castle.EventWiringFacility&lt;/a&gt; – Windsor’s &lt;a href="http://docs.castleproject.org/Windsor.Event-Wiring-Facility.ashx" target="_blank"&gt;Event Wiring facility&lt;/a&gt; (extracted out of Castle.Windsor.dll) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Castle.FactorySupportFacility"&gt;Castle.FactorySupportFacility&lt;/a&gt;– Windsor’s &lt;a href="http://docs.castleproject.org/Windsor.Factory-Support-Facility.ashx" target="_blank"&gt;Factory Support facility&lt;/a&gt; (extracted out of Castle.Windsor.dll) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I hope this will make it easier for everyone to test drive Windsor. And if you find any issues, have any suggestions or ideas, do not hesitate to bring them up, either on our &lt;a href="http://groups.google.com/group/castle-project-users" target="_blank"&gt;google group&lt;/a&gt;, or &lt;a href="http://issues.castleproject.org/dashboard" target="_blank"&gt;issue tracker&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kozmic/~4/oit0eLOmYLo" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://kozmic.pl/2011/09/04/windsor-3-beta-1-dozen-of-nuget-packages-and-symbolsource-org-support/</feedburner:origLink></entry><entry><title type="html">Simple guide to running Git server on Windows, in local network (kind of)</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/kozmic/~3/W4MNZKshVkA/" /><category term="Git" /><category term="Open Source" /><category term="Tools" /><category term="git" /><author><name>Krzysztof</name></author><updated>2011-08-20T00:49:12-07:00</updated><id>http://kozmic.pl/2011/08/20/simple-guide-to-running-git-server-on-windows-in-local-network-kind-of/</id><summary type="html">Last year I found myself in a sudden and quick need to set up working environment for a team of four, and as I like Git very much, I wanted to use it as our VCS. The problem was, we weren’t allowed to use any third party provider, so GitHub was off the table. As [...]</summary><content type="html" xml:base="http://kozmic.pl/2011/08/20/simple-guide-to-running-git-server-on-windows-in-local-network-kind-of/">&lt;p&gt;Last year I found myself in a sudden and quick need to set up working environment for a team of four, and as I like Git very much, I wanted to use it as our VCS. The problem was, we weren’t allowed to use any third party provider, so GitHub was off the table. As I searched the Internet there were a few guides to set up team Git environment on Windows, but they all seemed very complicated and time consuming. For our modest needs we experimented a little and came up with a solution that was very simple, didn’t require any additional software to be installed anywhere and worked like a charm.&lt;/p&gt;
&lt;p&gt;Recently I used it again on my current engagement, and one of my colleagues suggested I should blog it, so here goes.&lt;/p&gt;
&lt;h3&gt;Ready, steady, go&lt;/h3&gt;
&lt;p&gt;The guide assumes you already have your local Git set up. For that, there are plenty of resources on the Internet, including &lt;a href="http://kozmic.pl/2011/01/26/git-tooling-for-net-developers/" target="_blank"&gt;my own blogpost about Windows Git tooling&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The entire tricks works like this – expose folder containing your shared Git repository as Windows network share.&lt;/p&gt;
&lt;h3&gt;Step one – bare git repository&lt;/h3&gt;
&lt;p&gt;There are two twists to the entire solution – one of them is – your shared repository needs to be initialized with –bare flag.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2011/08/git_bare_repository.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="git_bare_repository" border="0" alt="git_bare_repository" src="http://kozmic.pl/wp-content/uploads/2011/08/git_bare_repository_thumb.png" width="644" height="375" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Step two – Windows share&lt;/h3&gt;
&lt;p&gt;Second step is to expose the folder with our newly created repository on the Windows share. You also use your standard Windows mechanisms to control and limit access to the folder (make sure you give the developers write access!).&lt;/p&gt;
&lt;h3&gt;Step three – Map the share as network drive&lt;/h3&gt;
&lt;p&gt;This step is perhaps not exactly necessary but I couldn’t get it to work otherwise, so here comes the second twist. In order for your developers to be able to access the shared folder via Git they need to map it as network drive.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2011/08/sshot10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="sshot-10" border="0" alt="sshot-10" src="http://kozmic.pl/wp-content/uploads/2011/08/sshot10_thumb.png" width="632" height="464" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Step four – Add remote repository in Git and code away&lt;/h3&gt;
&lt;p&gt;Last step is the standard Git procedure – every developer on your team needs to add the repository sitting under their newly created network drive as remote. Notice the use of “file:///” prefix in front of the mapped drive name.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kozmic.pl/wp-content/uploads/2011/08/sshot11.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="sshot-11" border="0" alt="sshot-11" src="http://kozmic.pl/wp-content/uploads/2011/08/sshot11_thumb.png" width="644" height="375" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;/p&gt;
&lt;/p&gt;
&lt;h3&gt;Step five&lt;/h3&gt;
&lt;p&gt;That’s all. I hope you find it useful, and if you know a way to eliminate step three, let me know in the comments.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kozmic/~4/W4MNZKshVkA" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://kozmic.pl/2011/08/20/simple-guide-to-running-git-server-on-windows-in-local-network-kind-of/</feedburner:origLink></entry><entry><title type="html">Windsor 3 beta 1 is released (along with other goodies)</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/kozmic/~3/hBZMVXVf_lI/" /><category term="Uncategorized" /><author><name>Krzysztof</name></author><updated>2011-08-15T04:06:54-07:00</updated><id>http://kozmic.pl/2011/08/15/windsor-3-beta-1-is-released-along-with-other-goodies/</id><summary type="html">The title says it all. If you can’t wait grab the binaries here (Windsor with Castle Core and facilities) and here (just Core). Nuget package will hopefully follow soon. What’s in it? This is a major release and there’s quite a lot of new features, as well as some significant changes under the covers. There’s [...]</summary><content type="html" xml:base="http://kozmic.pl/2011/08/15/windsor-3-beta-1-is-released-along-with-other-goodies/">&lt;p&gt;&lt;img src="http://castleproject.org/images/wc_logo.png" /&gt;&lt;/p&gt;
&lt;p&gt;The title says it all. If you can’t wait grab the binaries &lt;a href="http://sourceforge.net/projects/castleproject/files/Windsor/3.0/Castle.Windsor.3.0.0.beta1.zip/download " target="_blank"&gt;here (Windsor with Castle Core and facilities)&lt;/a&gt; and &lt;a href="http://sourceforge.net/projects/castleproject/files/Core/3.0/Castle.Core.3.0.0.beta1.zip/download" target="_blank"&gt;here (just Core)&lt;/a&gt;. Nuget package will hopefully follow soon.&lt;/p&gt;
&lt;h3&gt;What’s in it?&lt;/h3&gt;
&lt;p&gt;This is a major release and there’s quite a lot of new features, as well as some significant changes under the covers. &lt;a href="http://docs.castleproject.org/Windsor.Whats-New-In-Windsor-3.ashx" target="_blank"&gt;There’s a high level overview of highlights for the release in the wiki&lt;/a&gt;, so please have a look there. More detailed changelog, and list of breaking changes is available as part of the package.&lt;/p&gt;
&lt;p&gt;Remember it’s a beta release. Documentation and samples are still being updated and some features are not yet implemented or not fully baked. However it is very important that you don't wait for the final release to upgrade, so that we can find and fix all the issues before final release. I'm not asking you to use it in production, but I'd really appreciate if you'd take the time to branch your apps, try to upgrade, run your unit tests, play with new version, and report any issues you may find. And ask your colleagues, friends and random people on the street to do the same!&lt;/p&gt;
&lt;p&gt;And if you find any issues, &lt;a href="http://issues.castleproject.org" target="_blank"&gt;do report them&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have fun and happy coding,     &lt;br /&gt;I hope you like it&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kozmic/~4/hBZMVXVf_lI" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://kozmic.pl/2011/08/15/windsor-3-beta-1-is-released-along-with-other-goodies/</feedburner:origLink></entry></feed>

