<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gurock Software Blog &#187; Dennis Gurock</title>
	<atom:link href="http://blog.gurock.com/postings/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gurock.com</link>
	<description>Our products, programming &#38; business.</description>
	<lastBuildDate>Thu, 22 Jul 2010 14:01:41 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Free TestRail licenses for open source projects</title>
		<link>http://blog.gurock.com/postings/free-testrail-licenses-for-open-source-projects/1584/</link>
		<comments>http://blog.gurock.com/postings/free-testrail-licenses-for-open-source-projects/1584/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 13:27:55 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[DelphiFeeds.com]]></category>
		<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[TestRail]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=1584</guid>
		<description><![CDATA[We are happy to announce an offer to provide free licenses of our web-based test management software TestRail to open source projects and teams. As more and more users and organizations depend on open source software, introducing a dedicated test management tool to manage test cases and to ensure great release quality gets more important [...]]]></description>
			<content:encoded><![CDATA[<p>We are happy to announce an offer to provide free licenses of our web-based <a href="http://www.gurock.com/testrail/">test management</a> software TestRail to open source projects and teams. As more and more users and organizations depend on open source software, introducing a dedicated test management tool to manage test cases and to ensure great release quality gets more important for projects.</p>
<p>Open source teams already use various tools to manage their software development process such as bug trackers, project management tools and source control. Teams can also benefit from a test management software to manage, organize and execute their tests. TestRail allows contributors to participate in projects&#8217; software testing efforts and even enables non-technical users to contribute to projects.</p>
<p>We decided to make free licenses of our test management software available to open source teams as a way to give back to the community. Gurock Software is using various open source projects to power the infrastructure and development process so this makes a lot of sense for us. Interested open source teams can contact us or learn more about the offer on the <a href="http://www.gurock.com/testrail/opensource/">dedicated web page</a>.</p>
<p><strong>Learn more:</strong> <a href="http://www.gurock.com/testrail/opensource/">Free TestRail licenses for open source projects</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/free-testrail-licenses-for-open-source-projects/1584/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New server infrastructure</title>
		<link>http://blog.gurock.com/postings/new-server-infrastructure/1580/</link>
		<comments>http://blog.gurock.com/postings/new-server-infrastructure/1580/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 09:37:40 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[DelphiFeeds.com]]></category>
		<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[SmartInspect]]></category>
		<category><![CDATA[TestRail]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=1580</guid>
		<description><![CDATA[We have been busy upgrading all Gurock Software services and websites to new servers this past weekend. Since the launch of our test management software TestRail earlier this year, we introduced a new hosted trial to make the evaluation of the product easier. The hosted trial has been quite popular so we decided to put [...]]]></description>
			<content:encoded><![CDATA[<p>We have been busy upgrading all Gurock Software services and websites to new servers this past weekend. Since the launch of our <a href="http://www.gurock.com/testrail/">test management</a> software TestRail earlier this year, we introduced a new hosted trial to make the evaluation of the product easier. The hosted trial has been quite popular so we decided to put this on a dedicated machine.</p>
<p>Additionally, we wanted to separate <a href="http://www.delphifeeds.com/">DelphiFeeds.com</a> and our blog from our website for performance and security reasons, so we also put those sites on different machines. The good news is that our websites should become a lot faster because of the server move, especially DelphiFeeds.com. If you notice any problems, we would appreciate a quick email.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/new-server-infrastructure/1580/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Updated SmartInspect for PostSharp aspect library</title>
		<link>http://blog.gurock.com/postings/updated-smartinspect-for-postsharp-aspect-library/1567/</link>
		<comments>http://blog.gurock.com/postings/updated-smartinspect-for-postsharp-aspect-library/1567/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 17:10:22 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[SmartInspect]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=1567</guid>
		<description><![CDATA[Ever since our friends over at SharpCrafters released the first beta versions of their improved PostSharp 2.0 AOP library for .NET, we received requests from SmartInspect users for an updated aspect library. Now that the latest PostSharp release candidate reached an important milestone (all APIes are frozen) we decided to update our existing aspect library. [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: right; margin-left: 1em; margin-bottom: 1em" src="http://blog.gurock.com/wp-content/uploads/2010/07/postsharp.png" alt="" title="" width="180" height="70" class="alignnone size-full wp-image-1574" />Ever since our friends over at <a href="http://www.sharpcrafters.com/">SharpCrafters</a> released the first beta versions of their improved PostSharp 2.0 AOP library for .NET, we received requests from SmartInspect users for an updated <a href="http://blog.gurock.com/postings/aspect-oriented-logging-for-net-with-postsharp-and-smartinspect/848/">aspect library</a>. Now that the latest PostSharp release candidate reached an important milestone (all APIes are frozen) we decided to update our existing aspect library. So we are happy to announce that of today, an updated SmartInspect library for PostSharp 2.0 is <a href="http://code.gurock.com/p/smartinspect-postsharp/">available on code.gurock.com</a>. </p>
<p>The new aspect library now also supports tracing and logging of property values as PostSharp introduced support for this functionality with its new version. If you have any questions about the new version or if you find any problems, please let us know!</p>
<p><strong><a href="http://code.gurock.com/p/smartinspect-postsharp/">SmartInspect for PostSharp</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/updated-smartinspect-for-postsharp-aspect-library/1567/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TestRail Mini API</title>
		<link>http://blog.gurock.com/postings/testrail-mini-api/1561/</link>
		<comments>http://blog.gurock.com/postings/testrail-mini-api/1561/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 15:53:32 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[TestRail]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=1561</guid>
		<description><![CDATA[Integrating automated testing tools with TestRail and having an API to push test results is a popular feature request that we receive regularly. We have big plans in this regard and we are going to publish a new TestRail roadmap for the second half of 2010 at the end of the summer.
However, after discussing ideas [...]]]></description>
			<content:encoded><![CDATA[<p>Integrating automated testing tools with <a href="http://www.gurock.com/testrail/">TestRail </a>and having an API to push test results is a popular feature request that we receive regularly. We have big plans in this regard and we are going to publish a new TestRail roadmap for the second half of 2010 at the end of the summer.</p>
<p>However, after <a href="http://www.gurock.com/support/forum/topic/411/api-plans/">discussing ideas</a> about a simple API with a customer, the idea for the TestRail Mini API was born. This optional PHP script can be added to a TestRail installation and allows you to submit test changes and results via simple HTTP requests. </p>
<p>Until we have a complete API and support for automated testing tools directly integrated in TestRail, the mini API is a great way to submit your test results. You can download the API and learn more about its usage on the project site:</p>
<p><strong><a href="http://code.gurock.com/p/testrail-miniapi/">TestRail Mini API</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/testrail-mini-api/1561/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Launch of code.gurock.com</title>
		<link>http://blog.gurock.com/postings/launch-of-code-gurock-com/1550/</link>
		<comments>http://blog.gurock.com/postings/launch-of-code-gurock-com/1550/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 12:38:57 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[DelphiFeeds.com]]></category>
		<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[SmartInspect]]></category>
		<category><![CDATA[TestRail]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=1550</guid>
		<description><![CDATA[We always wanted to have some place where we could post code and add-on projects related to our products, but we didn&#8217;t like the idea of using Google Code or other public code hosting services for this. So when RemObjects announced their own project hosting website some time ago, we immediately knew that something like [...]]]></description>
			<content:encoded><![CDATA[<p>We always wanted to have some place where we could post code and add-on projects related to our products, but we didn&#8217;t like the idea of using Google Code or other public code hosting services for this. So when <a href="http://www.remobjects.com/">RemObjects</a> announced their own <a href="http://code.remobjects.com/">project hosting website</a> some time ago, we immediately knew that something like this would also work very well for us. When I asked about the software they were using, they referred me to the excellent <a href="https://www.indefero.net/">Indefero</a> project hosting software.</p>
<p>So as of today, we have our own project hosting website at <a href="http://code.gurock.com">code.gurock.com</a>. We will use this website to host product-related projects and we invite you to contribute. We are also happy to host your projects if they are related to SmartInspect or TestRail, so feel free to contact us if you are interested in this.</p>
<p>For now there are just two projects on the site: PostSharp for SmartInspect (which will get a major rewrite soon, stay tuned) and a new TestRail mini API (more about this in a later posting). We plan to add other projects to the site in the future and open more of our code for contributions from the community. Enjoy!</p>
<p><strong><a href="http://code.gurock.com">code.gurock.com</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/launch-of-code-gurock-com/1550/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>TestRail 1.3 released</title>
		<link>http://blog.gurock.com/postings/testrail-1-3-released/1491/</link>
		<comments>http://blog.gurock.com/postings/testrail-1-3-released/1491/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 12:34:46 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[TestRail]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=1491</guid>
		<description><![CDATA[We are happy to announce TestRail 1.3, a new version of our web-based test management software. The new version introduces support for custom fields, a major feature that allows you to further customize TestRail for your needs. TestRail 1.3 also comes with a new alternative way to enter and manage test case steps and also [...]]]></description>
			<content:encoded><![CDATA[<p>We are happy to announce TestRail 1.3, a new version of our web-based <a href="http://www.gurock.com/testrail/">test management</a> software. The new version introduces support for custom fields, a major feature that allows you to further customize TestRail for your needs. TestRail 1.3 also comes with a new alternative way to enter and manage test case steps and also ships with various other improvements and bug fixes.</p>
<h2>Custom Fields</h2>
<p>When we initially designed TestRail, we decided to only include the most basic and often used fields in the user interface to make it easier to enter cases and test results. It became clear early on that this was a good design decision. Users didn&#8217;t really need all those extra fields some of our competitors include that make their products cluttered and hard to use.</p>
<p>However, although all the basic fields we offer are used by most customers, users emailed us that they had <em>slightly</em> different needs for their particular projects. They didn&#8217;t ask us to make TestRail&#8217;s user interface complicated, mind you, but adding just <em>that one field</em> would make TestRail just perfect for their needs.</p>
<p>So instead of adding all those extra fields customers asked for to TestRail, the idea for custom fields was born. Custom fields allow you to add your own fields to TestRail&#8217;s test case and test result forms, making it easy to customize TestRail for your projects.</p>
<div class="framed-image">
<a href="http://blog.gurock.com/wp-content/uploads/2010/06/cutom-fields.png"><img src="http://blog.gurock.com/wp-content/uploads/2010/06/cutom-fields-small.png" alt="" title="" width="550" height="343" class="alignnone size-full wp-image-1501" /></a><br />
<span>Custom field configuration in TestRail&#8217;s administration area</span>
</div>
<p>To configure custom fields, a new <em>Custom Fields</em> section was added to TestRail&#8217;s administration area. Fields for test cases and test results are configured separately. TestRail supports various custom field types including dropdowns, dates, checkboxes, text fields and others.</p>
<p>TestRail also allows you to specify different custom field options for your various projects. For example, let&#8217;s say you added a <em>Project Area</em> field to TestRail so that users could select the project area a case is associated with (such as <em>Installer</em>, <em>Backend</em>, <em>API</em> etc). You only need to define this field once and can specify a different list of areas for each of your projects. TestRail&#8217;s way of separating custom fields and their project assignments/options is a powerful concept that makes this feature very flexible.</p>
<div class="framed-image">
<img src="http://blog.gurock.com/wp-content/uploads/2010/06/assignments.png" alt="" title="" width="550" height="169" class="alignnone size-full wp-image-1505" /><br />
<span>Assigning custom fields to projects with varying options</span>
</div>
<p>Some of the built-in types were converted to custom fields, enabling you to change or even remove and replace those fields. For test cases specifically, we have converted the <em>Preconditions</em>, <em>Steps</em> and <em>Expected Results</em> fields to custom fields. TestRail generally differentiates between <em>small</em> (such as dropdowns or checkboxes) and <em>large</em> fields (such as text). Depending on the field type, test case fields are displayed at the top or bottom of the form.</p>
<div class="framed-image">
<img src="http://blog.gurock.com/wp-content/uploads/2010/06/cases.png" alt="" title="" width="580" height="321" class="alignnone size-full wp-image-1512" /><br />
<span>Cases and custom field positions</span>
</div>
<p>Similar to test cases, the position of custom fields in the test result dialog depends on the actual field type. Large fields are displayed on the left side of the dialog, small fields are displayed in the sidebar.</p>
<div class="framed-image">
<img src="http://blog.gurock.com/wp-content/uploads/2010/06/test-results.png" alt="" title="" width="570" height="279" class="alignnone size-full wp-image-1516" /><br />
<span>Test results and custom field positions</span>
</div>
<h2>Test Steps</h2>
<p>Prior to TestRail 1.3, the only way to enter test case steps was via a simple text box. While we really like this clean and simple approach and most customers were happy with this solution, some users needed a more structured way to manage their test steps. So with the new TestRail version we are introducing an optional way to enter individual test steps separately.</p>
<div class="framed-image">
<a href="http://blog.gurock.com/wp-content/uploads/2010/06/steps.png"><img src="http://blog.gurock.com/wp-content/uploads/2010/06/steps-small.png" alt="" title="" width="550" height="463" class="alignnone size-full wp-image-1524" /></a><br />
<span>Entering separate test case steps</span>
</div>
<p>If the new alternative way of managing test case steps is a good fit for your needs, chances are good that you also want to enter separate test results for your steps. Fortunately, TestRail 1.3 makes this easy and provides a way to mark individual test steps as <em>Passed</em> or <em>Failed</em>.</p>
<div class="framed-image">
<a href="http://blog.gurock.com/wp-content/uploads/2010/06/result-steps.png"><img src="http://blog.gurock.com/wp-content/uploads/2010/06/result-steps-small.png" alt="" title="" width="550" height="380" class="alignnone size-full wp-image-1528" /></a><br />
<span>Test steps in the Add Test Result dialog</span>
</div>
<p>Structured test steps are an optional feature. By default, TestRail 1.3 comes with the &#8216;old&#8217; way of managing test steps. To use the new alternative approach for one or all of your projects, just configure the <em>Steps</em> and <em>Step Results</em> custom fields.</p>
<h2>Other Improvements</h2>
<p>TestRail 1.3 also comes with other improvements, changes and bug fixes. For example, the updated <em>Add Result Dialog</em> can now be resized. TestRail automatically remembers the dialog size, making it more convenient to work with larger monitors. We also improved the test suite page to make it easier to add multiple test cases at once by keeping the text box visible until you press <code>ESC</code>.</p>
<div class="framed-image">
<img src="http://blog.gurock.com/wp-content/uploads/2010/06/add-case.png" alt="" title="" width="577" height="318" class="alignnone size-full wp-image-1532" /><br />
<span>Improved inline adding of test cases</span>
</div>
<p>Other improvements include the option to disable Markdown formatting for text fields (such as <em>Prerequisites</em> and <em>Expected Results</em>) and new <em>Select All</em> links in the Select Configuration dialog.</p>
<h2>Getting the new version</h2>
<p>Existing customers can download the new version from our <a href="http://www.gurock.com/portal/">customer portal</a>. New users can download TestRail or <a href="http://www.gurock.com/testrail/trial/">request a hosted trial</a> of TestRail from our website. To view the complete list of changes for TestRail 1.3, please see our <a href="http://www.gurock.com/support/forum/topic/415/testrail-13-released/">announcement forum</a>. Please refer to TestRail’s <a href="http://www.gurock.com/support/docs/testrail/admin/installation-upgrading.html">Admin Manual</a> on how to upgrade an existing installation.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/testrail-1-3-released/1491/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WCF logging and tracing with SmartInspect</title>
		<link>http://blog.gurock.com/postings/wcf-logging-and-tracing-with-smartinspect/1442/</link>
		<comments>http://blog.gurock.com/postings/wcf-logging-and-tracing-with-smartinspect/1442/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 13:21:26 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[SmartInspect]]></category>
		<category><![CDATA[si-article]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=1442</guid>
		<description><![CDATA[Distributed software applications are usually difficult to debug. Bugs and performance issues can occur on the client, on the server or in the communication stack. Finding the root cause of such problems is often not trivial, especially if the issue only occurs on a production system. Luckily, .NET logging tools like SmartInspect help with this [...]]]></description>
			<content:encoded><![CDATA[<p>Distributed software applications are usually difficult to debug. Bugs and performance issues can occur on the client, on the server or in the communication stack. Finding the root cause of such problems is often not trivial, especially if the issue only occurs on a production system. Luckily, <a href="http://www.gurock.com/smartinspect/">.NET logging</a> tools like SmartInspect help with this and allow you to trace method execution end-to-end and log critical application data to analyze the inner-workings of your programs.</p>
<p>The Windows Communication Foundation (WCF) is Microsoft&#8217;s approach to service-oriented architectures and allows you to easily built client/server and distributed applications with .NET. SmartInspect can be used to debug applications that make use of WCF and this article (and the attached demo project) explains how to do this. The demo application is based on <a href="http://msdn.microsoft.com/en-us/library/ms734712.aspx">Microsoft&#8217;s WCF tutorial</a>, so if you haven&#8217;t worked with WCF before, the tutorial is a good way to start.</p>
<h2>The service application</h2>
<p>The service application that is part of the demo project exposes a simple service that offers various calculation methods (add, subtract, multiply, and divide). We use SmartInspect to log the method execution, parameters and results:</p>
<pre class="brush: csharp;">
class CalculatorService : ICalculator
{
	public double Add(double n1, double n2)
	{
		SiAuto.Main.EnterMethod(this, &quot;Add({0},{1})&quot;,
			new object[] {n1, n2});
		double result = n1 + n2;
		SiAuto.Main.LogValue(&quot;Result&quot;, result);
		SiAuto.Main.LeaveMethod(this, &quot;Add&quot;);
		return result;
	}

	// [..]
}
</pre>
<h2>The client application</h2>
<p>The client application connects to the service and uses the exposed methods to calculate various results. The client application is also instrumented with SmartInspect log calls and logs the calculation results returned from service:</p>
<pre class="brush: csharp;">
static void Calculate(CalculatorClient client)
{
	SiAuto.Main.EnterMethod(&quot;Program.Calculate&quot;);

	// Call the Add service operation
	double value1 = 100.00D;
	double value2 = 15.99D;
	double result = client.Add(value1, value2);
	SiAuto.Main.LogMessage(&quot;Add({0},{1}) = {2}&quot;, value1, value2, result);

	// [..]

	SiAuto.Main.LeaveMethod(&quot;Program.Calculate&quot;);
}
</pre>
<h2>Debugging with the SmartInspect Console</h2>
<p>When you launch both demo applications, the SmartInspect Console automatically receives the log messages via named-pipes (make sure to start Visual Studio as administrator, as this is required by WCF to register the service). You can also redirect the logging data to log files or other protocols by setting the connection string accordingly.</p>
<p>The SmartInspect Console makes it easy to see the log messages and data in context or to separate the log messages of the client and service. The Console also helps with tracking the involved threads and processes (e.g. you can see in the screenshot that .NET starts and recycles two threads to serve the four service calls).</p>
<div class="framed-image">
<a href="http://blog.gurock.com/wp-content/uploads/2010/05/console.png"><img src="http://blog.gurock.com/wp-content/uploads/2010/05/console-small.png" alt="" title="" width="550" height="397" class="alignnone size-full wp-image-1450" /></a><br />
<span>Log messages of the client and service in the <a href="http://www.gurock.com/smartinspect/tour/">SmartInspect Console</a></span>
</div>
<h2>Tracing WCF</h2>
<p>WCF also has some tracing and logging capabilities of its own. This allows you to trace the messages and packets WCF sends and receives. Inspecting the exchanged messages is especially useful if you need to debug interoperability issues with other platforms and frameworks. WCF uses .NET&#8217;s built-in tracing API to log messages and packets. </p>
<p>Fortunately, SmartInspect makes it easy to receive .NET debug messages as it comes with a custom trace listener. To redirect WCF diagnostic messages to SmartInspect, simply add the <code>Gurock.SmartInspect.DebugTrace</code> assembly as a reference to your project and add the following code to the App.config (the demo projects already come with all the required bits pre-configured; you just need to uncomment the config settings):</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;configuration&gt;
  &lt;system.diagnostics&gt;
    &lt;sources&gt;
      &lt;source name=&quot;System.ServiceModel.MessageLogging&quot; &gt;
        &lt;listeners&gt;
          &lt;clear /&gt;
          &lt;add name=&quot;SmartInspect&quot;
              type=&quot;Gurock.SmartInspect.DebugTrace.SmartInspectTraceListener,        Gurock.SmartInspect.DebugTrace&quot; /&gt;
        &lt;/listeners&gt;
      &lt;/source&gt;
    &lt;/sources&gt;
  &lt;/system.diagnostics&gt;
  &lt;system.serviceModel&gt;
      &lt;diagnostics&gt;
        &lt;messageLogging
             logEntireMessage=&quot;true&quot;
             logMalformedMessages=&quot;true&quot;
             logMessagesAtServiceLevel=&quot;true&quot;
             logMessagesAtTransportLevel=&quot;true&quot;
             maxMessagesToLog=&quot;3000&quot;
             maxSizeOfMessageToLog=&quot;2000&quot;/&gt;
      &lt;/diagnostics&gt;
    &lt;/system.serviceModel&gt;
&lt;/configuration&gt;
</pre>
<p>The full demo application will be included in the next SmartInspect release, but you can also <a href="http://blog.gurock.com/wp-content/uploads/2010/05/smartinspect-wcf.zip">download a copy</a> of the demo project from this site in the meantime.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/wcf-logging-and-tracing-with-smartinspect/1442/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New SmartInspect demos</title>
		<link>http://blog.gurock.com/postings/new-smartinspect-demos/1440/</link>
		<comments>http://blog.gurock.com/postings/new-smartinspect-demos/1440/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 13:16:08 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[SmartInspect]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=1440</guid>
		<description><![CDATA[Over the next few weeks we are going to rewrite some of the demo applications we ship with SmartInspect and also add new ones. So far we just had a handful of demo applications for each supported platform (.NET, Java and Delphi) and we feel that users would benefit from additional demos that showcase more [...]]]></description>
			<content:encoded><![CDATA[<p>Over the next few weeks we are going to rewrite some of the demo applications we ship with SmartInspect and also add new ones. So far we just had a handful of demo applications for each supported platform (.NET, Java and Delphi) and we feel that users would benefit from additional demos that showcase more of SmartInspect&#8217;s capabilities.</p>
<p>I will also document some of the more interesting demo applications here on this blog and I&#8217;m going to start with an article about <a href="http://blog.gurock.com/postings/wcf-logging-and-tracing-with-smartinspect/1442/">WCF logging and tracing</a>. If you have any suggestions for new SmartInspect demos you would like to see, just let us know. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/new-smartinspect-demos/1440/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aspect-oriented logging for .NET with Unity and SmartInspect</title>
		<link>http://blog.gurock.com/postings/aspect-oriented-logging-for-net-with-unity-and-smartinspect/1386/</link>
		<comments>http://blog.gurock.com/postings/aspect-oriented-logging-for-net-with-unity-and-smartinspect/1386/#comments</comments>
		<pubDate>Mon, 31 May 2010 11:59:34 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Gurock Software]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[SmartInspect]]></category>
		<category><![CDATA[si-article]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=1386</guid>
		<description><![CDATA[This article is part of a series about aspect-oriented logging with SmartInspect, our logging tool for .NET, Java and Delphi. Please see the first article of this series for a complete overview of the available posts.
Michael Baarz recently emailed us as he was a looking for a modern .NET logging tool for his company&#8217;s complex [...]]]></description>
			<content:encoded><![CDATA[<p><em>This article is part of a series about aspect-oriented logging with <a href="http://www.gurock.com/smartinspect/">SmartInspect</a>, our logging tool for .NET, Java and Delphi. Please see the <a href="http://blog.gurock.com/postings/aspect-oriented-logging-and-smartinspect/814/">first article of this series</a> for a complete overview of the available posts.</em></p>
<p>Michael Baarz recently emailed us as he was a looking for a modern .NET logging tool for his company&#8217;s complex telecommunication and PBX software. Michael was about to redesign his company&#8217;s flagship product and was planning to use Microsoft&#8217;s dependency injection framework <a href="http://unity.codeplex.com/">Unity</a>.</p>
<p>He told us that he really enjoyed working with SmartInspect and because Unity also supports some aspect oriented programming features, Michael decided to write an unofficial library to integrate SmartInspect with Unity so he could benefit from this useful combination. This posting introduces Michael&#8217;s library and will explain how to get started with the extension to integrate and benefit from SmartInspect and Unity.</p>
<h2>Unity, a dependency injection container</h2>
<p>Unity is Microsoft&#8217;s dependency injection container and framework and is part of their <a href="http://msdn.microsoft.com/en-us/practices/default.aspx">Patterns &#038; Practices</a> initiative. If you are new to dependency injection in general, I recommend taking a look at <a href="http://martinfowler.com/articles/injection.html">this article</a> by Martin Fowler that explains the basic concepts and benefits. Besides common dependency injection features, Unity also supports aspect oriented programming by allowing you to intercept and wrap method calls.</p>
<p>The big difference between dependency injection (DI) frameworks and classic AOP tools such as PostSharp is that DI frameworks are configured at run-time, whereas PostSharp injects and builds its aspects at compile time. Both approaches have their pros and cons, so it really depends on the circumstances which one you should use (DI frameworks are usually more flexible as you can change the behavior at run-time, whereas &#8216;classic&#8217; AOP tools support more features and are usually faster).</p>
<h2>Using the SmartInspect Unity Interception Extension</h2>
<p>Michael&#8217;s library to integrate SmartInspect and Unity is called the <a href="http://siunity.codeplex.com/">SmartInspect Unity Interception Extension</a> and can be downloaded from CodePlex. To get started with the library, either <a href="http://siunity.codeplex.com/SourceControl/list/changesets">check out the source code</a> via Subversion or download one of the <a href="http://siunity.codeplex.com/SourceControl/list/changesets">releases</a> (there wasn&#8217;t a release at the time of this writing yet).</p>
<p>To use the library in your solution, you first need to add a few assembly references to your projects. First of all, you need to reference the <code>Microsoft.Practices.Unity</code> and <code>Microsoft.Practices.Unity.Interception</code> assemblies; these are part of Unity and are automatically installed and registered when you <a href="http://unity.codeplex.com/releases">download and install Unity</a>. The next assembly reference you need to add is <code>Gurock.SmartInspect</code>, as this is required to use SmartInspect logging. Last but not least you need to add Michael&#8217;s <code>SmartInspect.Extensions.Unity</code> assembly as a reference to your project, either by adding a reference to the compiled DLL or by adding the project to your solution and using a project reference.</p>
<h2>Tracing method execution</h2>
<p>One of the more useful aspects (no pun intended) of AOP is the capability to easily trace method execution, so this is the first thing I&#8217;m going to demonstrate. Unity is a dependency injection framework so we will need to properly register and instantiate all classes we want to intercept for logging. The first thing we need to do is to define the interface for the class we want to instantiate through Unity. Because one of the design goals of DI is that we can easily replace the actual implementation for an interface, using interfaces is mandatory here. For our <code>Hello, World</code> example, I&#8217;ve defined an interface and implementation class:</p>
<pre class="brush: csharp;">
interface IHello
{
	int Count { get; set; }
	void SayHello(string name);
	string SayGoodbye(string name);
	void RaiseException(string name);
}
</pre>
<p>The actual implementation already makes use of SmartInspect to log various messages:</p>
<pre class="brush: csharp;">
class Hello : IHello
{
	public int Count { get; set; }

	public void SayHello(string name)
	{
		SiAuto.Main.LogMessage(&quot;Hello, {0}.&quot;, name);
	}

	public string SayGoodbye(string name)
	{
		string msg = String.Format(&quot;Goodbye, {0}.&quot;, name);
		SiAuto.Main.LogMessage(msg);
		return msg;
	}

	public void RaiseException(string name)
	{
		SiAuto.Main.LogMessage(&quot;Hello, {0}.&quot;, name);
		throw new Exception(&quot;This is a test exception&quot;);
	}
}
</pre>
<p>Now to intercept and trace the method calls, we first need to make sure that we register and instantiate the interface and implementation with Unity. To do this, we use an instance of <code>UnityContainer</code> and add and configure the <code>Interception</code> extension. Here&#8217;s the full Main method of our example program:</p>
<pre class="brush: csharp;">
static void Main(string[] args)
{
	// Enable SmartInspect logging
	SiAuto.Si.Enabled = true;

	// Create the Unity dependency injection container,
	// register the Interception extension and register our
	// our example class
	IUnityContainer container = new UnityContainer();
	container
		.AddNewExtension&lt;Interception&gt;()
		.RegisterType&lt;IHello, Hello&gt;();

	// Now tell Unity how to intercept IHello method calls
	container.Configure&lt;Interception&gt;()
		.SetInterceptorFor&lt;IHello&gt;(new TransparentProxyInterceptor());

	// Instead of creating our Hello class directly, we ask
	// Unity to resolve the dependency for the IHello interface
	IHello hello = container.Resolve&lt;IHello&gt;();

	// Call The IHello methods and assign property values
	hello.SayHello(&quot;World&quot;);
	hello.SayGoodbye(&quot;World&quot;);

	Random r = new Random();
	for (int i = 0; i &lt; 10; i++)
	{
		hello.Count = r.Next(100);
		Thread.Sleep(1000);
	}

	hello.RaiseException(&quot;Hello World&quot;);
}
</pre>
<p>Now to actually use the the SmartInspect Unity extension and trace method calls, we just need to add a single attribute to the interface, namely the <code>[SiMethodCall]</code> attribute (which can be found in the <code>SmartInspect.Extensions.Unity</code> namespace):</p>
<pre class="brush: csharp;">
[SiMethodCall]
interface IHello
{
	// [..]
}
</pre>
<p>The attributes come with various properties to influence the behavior of the log calls, such as changing the log level, adding name prefixes/suffixes and so on. For a complete list of properties just see the Intellisense help within Visual Studio. Once we launch the example application, we see the following output in the SmartInspect Console (also take a look at the viewer toolbox at the bottom right of the window, it shows the method arguments of the selected log entry):</p>
<div class="framed-image">
<a href="http://blog.gurock.com/wp-content/uploads/2010/05/methods.png"><img src="http://blog.gurock.com/wp-content/uploads/2010/05/methods-small.png" alt="" title="" width="550" height="425" class="alignnone size-full wp-image-1410" /></a><br />
<span>Log messages and method tracing in the <a href="http://www.gurock.com/smartinspect/tour/">SmartInspect Console</a></span>
</div>
<h2>Logging exceptions</h2>
<p>Logging occurred exceptions is another useful thing you can automate with AOP. The SmartInspect Unity extension comes with its own attribute to log exceptions, namely the <code>[SiException]</code> attribute. The attribute doesn&#8217;t handle the exceptions (it just logs them) so it doesn&#8217;t change the behavior of your code. To use the attribute, just specify it for an interface or method like this:</p>
<pre class="brush: csharp;">
[SiException(LogArgumentsToViewer = true)]
interface IHello
{
	// [..]
}
</pre>
<p>The resulting log messages in the SmartInspect Console look like this:</p>
<div class="framed-image">
<a href="http://blog.gurock.com/wp-content/uploads/2010/05/exceptions.png"><img src="http://blog.gurock.com/wp-content/uploads/2010/05/exceptions-small.png" alt="" title="" width="550" height="425" class="alignnone size-full wp-image-1410" /></a><br />
<span>Logged exception in the <a href="http://www.gurock.com/smartinspect/tour/">SmartInspect Console</a></span>
</div>
<h2>Watching property values</h2>
<p>SmartInspect allows you to easily log and watch field and property values. The SmartInspect Unity extension comes with an attribute to automatically log changes of properties as they occur. To benefit from this, simply add the <code>[SiWatch]</code> attribute to the <code>set</code> method of your properties:</p>
<pre class="brush: csharp;">
interface IHello
{
	int Count { get; [SiWatch]set; }
}
</pre>
<p>This blog posting is intended to give you an overview of the capabilities the SmartInspect Unity extension library provides, but it cannot explain all the useful options and features that the library comes with. So to get started with the library and learn about all its capabilities, I recommend <a href="http://siunity.codeplex.com/">downloading it</a> and start playing with it.</p>
<p>Please also note that the SmartInspect Unity extension introduced here is not a Gurock Software product and is not official supported by us. To send feedback and to contribute to the project, please take a look at the <a href="http://siunity.codeplex.com/">CodePlex project page</a>. Thanks Michael for writing the library and for contributing to the SmartInspect ecosystem!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/aspect-oriented-logging-for-net-with-unity-and-smartinspect/1386/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding a great product name</title>
		<link>http://blog.gurock.com/postings/finding-a-great-product-name/1378/</link>
		<comments>http://blog.gurock.com/postings/finding-a-great-product-name/1378/#comments</comments>
		<pubDate>Fri, 07 May 2010 13:01:56 +0000</pubDate>
		<dc:creator>Dennis Gurock</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[DelphiFeeds.com]]></category>

		<guid isPermaLink="false">http://blog.gurock.com/?p=1378</guid>
		<description><![CDATA[&#8220;Around a year ago we desperately needed a name for the new test management software we had been working on. We aren’t very good with names. In fact, we used a codename for the project until the very last minute, so that we didn’t have to come up with the product name earlier. Still, even [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8220;Around a year ago we desperately needed a name for the new <a href="http://www.gurock.com/testrail/">test management</a> software we had been working on. We aren’t very good with names. In fact, we used a codename for the project until the very last minute, so that we didn’t have to come up with the product name earlier. Still, even with many months to think about a name, it was difficult to find one that we liked.&#8221;</p></blockquote>
<p>Read more in a guest posting I wrote for the <a href="http://successfulsoftware.net/">Successful Software</a> blog:<br />
<strong><a href="http://successfulsoftware.net/2010/05/05/how-to-find-a-great-software-product-name/">How to find a great software product name</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gurock.com/postings/finding-a-great-product-name/1378/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
