<?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/"
	
xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
>

<channel>
	<title>Kevin Miller &#8211; Clarify Solutions | Dovetail Software</title>
	<atom:link href="http://clarify.dovetailsoftware.com/author/kmiller/feed/" rel="self" type="application/rss+xml" />
	<link>https://clarify.dovetailsoftware.com</link>
	<description>Dovetail solutions for Amdocs Clarify customers deliver cost-effective functionality enhancements and technical support.</description>
	<lastBuildDate>Thu, 22 Aug 2019 14:59:21 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.10</generator>

<image>
	<url>https://i1.wp.com/clarify.dovetailsoftware.com/wp-content/uploads/2018/03/cropped-favicon-1.png?fit=32%2C32</url>
	<title>Kevin Miller &#8211; Clarify Solutions | Dovetail Software</title>
	<link>https://clarify.dovetailsoftware.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">64853589</site>	<item>
		<title>TikaOnDotnet now supports Tika 1.7</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2015/02/06/tikaondotnet-now-supports-tika-1-7/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2015/02/06/tikaondotnet-now-supports-tika-1-7/#comments</comments>
		<pubDate>Fri, 06 Feb 2015 23:01:09 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Kevin Miller]]></category>
		<category><![CDATA[Tika]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/?p=6270</guid>
		<description><![CDATA[<p>TikaOnDotNet has been updated to the latest Tika 1.7. As always a Nuget has been published. Two things were great about this release. Jason Rotello did the heavy lifting grabbing an issue I had marked up for grabs and got it done. This is his second time updating the libray. Thank you very much Jason! [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2015/02/06/tikaondotnet-now-supports-tika-1-7/">TikaOnDotnet now supports Tika 1.7</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>
<a href="http://kevm.github.io/tikaondotnet/">TikaOnDotNet</a> has been updated to the latest <a href="http://tika.apache.org/1.7/index.html">Tika 1.7</a>. As always a <a href="https://www.nuget.org/packages/TikaOnDotNet/">Nuget</a> has been published.
</p>
<p>
Two things were great about this release. </p>
<ol>
<li>
<a href="https://github.com/jrotello">Jason Rotello</a> did the heavy lifting grabbing an issue I had marked <a href="https://github.com/KevM/tikaondotnet/labels/up-for-grabs">up for grabs</a> and got it done. This is his second time updating the libray. Thank you very much Jason!</li>
<li>
It fixes a known problem where indexing mp4 video files would cause the file to be locked.</li>
</ol>
<p>
Great way to end the week.</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2015/02/06/tikaondotnet-now-supports-tika-1-7/">TikaOnDotnet now supports Tika 1.7</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2015/02/06/tikaondotnet-now-supports-tika-1-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">6270</post-id>	</item>
		<item>
		<title>FubuMVC using ModifyChainAttributes</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2015/01/30/fubumvc-using-modifychainattributes/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2015/01/30/fubumvc-using-modifychainattributes/#respond</comments>
		<pubDate>Fri, 30 Jan 2015 15:34:25 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Kevin Miller]]></category>
		<category><![CDATA[fubumvc]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/?p=6235</guid>
		<description><![CDATA[<p>Let&#8217;s take a look at a handy way to quickly modify a FubuMVC behavior chain by simply placing an Attribute on the action method. This technique is handy when you have a one off change you need to make to a specific action and rolling your own site wide convention is too much. The Problem [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2015/01/30/fubumvc-using-modifychainattributes/">FubuMVC using ModifyChainAttributes</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<article class="markdown-body">
<p>Let&#8217;s take a look at a handy way to quickly modify a FubuMVC behavior chain by simply placing an Attribute on the action method. This technique is handy when you have a one off change you need to make to a specific action and rolling your own site wide convention is too much.</p>
<h2>
<a id="user-content-the-problem" class="anchor" href="#the-problem"><span class="octicon octicon-link"></span></a>The Problem</h2>
<p>FubuMVC uses <a href="http://fubuworld.com/fubumvc/conneg/">content negotiation</a> to control how your output model is formatted. Great stuff when you are creating endpoints to be used as an API for your fancy JavaScript framework of choice.</p>
<p>We ran into a problem on a specific API endpoint which supports file uploads where IE9 would barf on a JSON response after uploading a file. In this case the response was not being consumed by the client. No big deal let&#8217;s force the output to be XML to ensure that IE9 is happy. </p>
<p>To do this we will need to remove all non XML output formatters from the behavior chain.</p>
<h2>
<a id="user-content-create-a-modify-chain-attribute" class="anchor" href="#create-a-modify-chain-attribute"><span class="octicon octicon-link"></span></a>Create a Modify Chain Attribute</h2>
<p>Implementing a chain modifying attribute is easy. </p>
<ul>
<li>Subclass ModifyChainAttribute.</li>
<li>Edit the parent behavior chain (via the ActionCall) </li>
<li>Done</li>
</ul>
<p><a href="https://camo.githubusercontent.com/20e1437a1a80ea57964a93229b8f8c000883dd7c/687474703a2f2f636c2e6c792f696d6167652f314e314c314f31753077326a2f496d616765253230323031352d30312d33302532306174253230392e32352e3534253230414d2e706e67" target="_blank"><img src="https://camo.githubusercontent.com/20e1437a1a80ea57964a93229b8f8c000883dd7c/687474703a2f2f636c2e6c792f696d6167652f314e314c314f31753077326a2f496d616765253230323031352d30312d33302532306174253230392e32352e3534253230414d2e706e67" alt="image of code gist until my blog is fixed"></a></p>
<p>You then simply apply your new custom attribute to your action. Take a look at FubuDiagnostics and see the changes to your chain. In this case there is only one output formatter <em>XmlFormatter</em>.</p>
<p><a href="https://camo.githubusercontent.com/f184e4de7c2f3995e3237d8fe63aa4f20acf7b18/687474703a2f2f636c2e6c792f696d6167652f3261313831643076333532642f496d616765253230323031352d30312d32392532306174253230322e31332e3032253230504d2e706e67" target="_blank"><img src="https://camo.githubusercontent.com/f184e4de7c2f3995e3237d8fe63aa4f20acf7b18/687474703a2f2f636c2e6c792f696d6167652f3261313831643076333532642f496d616765253230323031352d30312d32392532306174253230322e31332e3032253230504d2e706e67" alt="Fubu Diagnostics showing the only output formatter is for XML"></a></p>
<h2>
<a id="user-content-more-on-behaviors" class="anchor" href="#more-on-behaviors"><span class="octicon octicon-link"></span></a>More On Behaviors</h2>
<ul>
<li>
<p>Get started with <a href="http://fubuworld.com/fubumvc/terminology">Fubu terminology</a> like behaviors, endpoints, input and output models.</p>
</li>
<li>
<p>Chad Myers has a great series of Fubu posts and of course one about <a href="http://lostechies.com/chadmyers/2011/06/23/cool-stuff-in-fubumvc-no-1-behaviors/">behaviors</a>.</p>
</li>
<li>
<p>I&#8217;ve posted in the past about creating a behavior for <a href="https://clarify.dovetailsoftware.com/kmiller/2012/04/24/fubumvc-hijacking-behaviors/">supporting single page apps</a>.</p>
</article>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2015/01/30/fubumvc-using-modifychainattributes/">FubuMVC using ModifyChainAttributes</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2015/01/30/fubumvc-using-modifychainattributes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">6235</post-id>	</item>
		<item>
		<title>FubuMVC Wisdom: Bottles and StructureMap Registries</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2015/01/29/fubumvc-wisdom-bottles-and-structuremap-registries/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2015/01/29/fubumvc-wisdom-bottles-and-structuremap-registries/#respond</comments>
		<pubDate>Thu, 29 Jan 2015 21:11:56 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Kevin Miller]]></category>
		<category><![CDATA[bottles]]></category>
		<category><![CDATA[fubumvc]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/?p=6230</guid>
		<description><![CDATA[<p>FubuMVC Bottles are pretty great. You can mix code, web endpoints and views in a &#8220;Bottle&#8221; assembly. Package them up as Nugets and you can re-use application functionality between your web applications just by adding a reference to a Bottle assembly. Auto Import Referenced Bottle Registries It is a really common pattern when you are [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2015/01/29/fubumvc-wisdom-bottles-and-structuremap-registries/">FubuMVC Wisdom: Bottles and StructureMap Registries</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>FubuMVC Bottles are pretty great. You can mix code, web endpoints and views in a &#8220;Bottle&#8221; assembly. Package them up as <a href="http://www.nuget.org">Nugets</a> and you can re-use application functionality between your web applications just by adding a reference to a Bottle assembly. </p>
<h3>Auto Import Referenced Bottle Registries</h3>
<p>It is a really common pattern when you are using an IoC container like StructureMap in your Bottle that you want a registry imported when your bottle is loaded. Add the following code to the StructureMap Registry which you use when spinning up your FubuMVC application and your Bottle registries will be imported. </p>
<p><img src="https://i2.wp.com/cl.ly/image/1b3U261a2H0V/Image%202015-01-29%20at%203.25.00%20PM.png" alt="" title="" border="0" width="" height="" data-recalc-dims="1" /></p>
<h3>More On Bottles If you Like</h3>
<p>Josh Arnold has a<br />
<a href="http://lostechies.com/josharnold/2011/09/05/modularity-via-bottles/">post<br />
</a> or <a href="http://lostechies.com/josharnold/2011/10/11/modularity-via-bottles-continued/">two</a> about Bottles.</p>
<p>Also Jeremy Miller did a nice <a href="https://vimeo.com/78971925">presentation on Bottles</a> at Monkey Square.</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2015/01/29/fubumvc-wisdom-bottles-and-structuremap-registries/">FubuMVC Wisdom: Bottles and StructureMap Registries</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2015/01/29/fubumvc-wisdom-bottles-and-structuremap-registries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">6230</post-id>	</item>
		<item>
		<title>TikaOnDotNet 1.4 Released as a Nuget</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2013/07/12/tikaondotnet-1-4-released-as-a-nuget/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2013/07/12/tikaondotnet-1-4-released-as-a-nuget/#comments</comments>
		<pubDate>Fri, 12 Jul 2013 20:29:16 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Dovetail for Clarify]]></category>
		<category><![CDATA[Kevin Miller]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[Tika]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/kmiller/2013/07/12/tikaondotnet-1-4-released-as-a-nuget/</guid>
		<description><![CDATA[<p>A while back I shared a post about how we were successfully able to use the excellent , yet Java based Tika text extraction library in our .NET based applications.  Along side that post I also created a GitHub repo where the code for TikaOnDotNet lives and is maintained. At Dovetail Software we continue to [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2013/07/12/tikaondotnet-1-4-released-as-a-nuget/">TikaOnDotNet 1.4 Released as a Nuget</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>A while back I <a href="https://clarify.dovetailsoftware.com/kmiller/2010/07/02/using-the-tika-java-library-in-your-net-application-with-ikvm/">shared a post </a>about how we were successfully able to use the excellent , yet Java based <a href="http://tika.apache.org/">Tika text extraction library</a> in our .NET based applications.  Along side that post I also created a GitHub repo where the code for <a href="https://github.com/KevM/tikaondotnet">TikaOnDotNet</a> lives and is maintained. At Dovetail Software we continue to use this library with great success on the .NET platform. Externally I’ve gotten responses from people using the ideas in the project but often they have problems creating their own release or getting Tika up and running in their projects.  Today I gave the project some love and some polish and updated it to support being consumed as a Nuget package which makes it really easy to use from your code base. Let’s take a look at how to use Tika in your .Net projects.</p>
<h2>From Zero to Text Extraction</h2>
<h3>Step 1 &#8211; Install the <a href="https://nuget.org/packages/TikaOnDotNet/">Nuget</a></h3>
<p><a title="The TikaOnDotnet nuget gallery" href="https://nuget.org/packages/TikaOnDotNet/"><img alt="" src="https://i1.wp.com/cl.ly/image/0J0x2t0d381E/Image%202013-07-12%20at%203.11.54%20PM.png" data-recalc-dims="1" /></a></p>
<h3>Step 2 – New up a <a href="https://github.com/KevM/tikaondotnet/blob/master/src/TikaOnDotnet/TextExtractor.cs">TextExtractor</a></h3>
<p>Something to note here. The text extractor class uses Tika&#8217;s auto detection mechanism. We are not explicitly use Tika&#8217;s Office document extraction parsers. Tika has the capability to detect the incoming content and extract the text from it. This is very useful for search engines like <a href="http://dovetailsoftware.com/?page_id=82">Dovetail Seeker</a>. Tika is an extensive library and I have just wrapped this one mechanism. If you like you can use the full power of Tika directly from your .NET code. Check out <a href="http://www.amazon.com/gp/product/1935182854?ie=UTF8&amp;camp=213733&amp;creative=393185&amp;creativeASIN=1935182854&amp;linkCode=shr&amp;tag=kevimill-20">Tika In Action</a> for more about what Tika can do.</p>
<h3>Finale – Compare the text with the original</h3>
<p>The code above runs an ancient Word document through Tika text extraction engine. This document is part of our testing of Tika’s compatibility with… ancient word documents.</p>
<h5>Original</h5>
<p><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="" src="https://i2.wp.com/f.cl.ly/items/1Y1y0Z0J0f1h1Q143L46/Image%202013-07-12%20at%203.09.52%20PM.png" border="0" data-recalc-dims="1" /></p>
<h5>Extracted Text</h5>
<p><img alt="" src="https://i1.wp.com/cl.ly/image/2w1w10300O3D/Image%202013-07-12%20at%203.16.02%20PM.png" data-recalc-dims="1" /></p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2013/07/12/tikaondotnet-1-4-released-as-a-nuget/">TikaOnDotNet 1.4 Released as a Nuget</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2013/07/12/tikaondotnet-1-4-released-as-a-nuget/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">4384</post-id>	</item>
		<item>
		<title>Getting a ASP.Net request URL into a log4net context</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2012/10/05/getting-a-asp-net-request-url-into-a-log4net-context/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2012/10/05/getting-a-asp-net-request-url-into-a-log4net-context/#comments</comments>
		<pubDate>Fri, 05 Oct 2012 20:29:48 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Dovetail for Clarify]]></category>
		<category><![CDATA[Kevin Miller]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/kmiller/2012/10/05/getting-a-asp-net-request-url-into-a-log4net-context-2/</guid>
		<description><![CDATA[<p>We make a lot of web applications and we use a lot of logging to diagnose problems on production systems. Often I find myself wishing I knew what URL was being rendered for a given log. In this post I’ll take you through a good solution for adding the current request URL to the log4net [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/10/05/getting-a-asp-net-request-url-into-a-log4net-context/">Getting a ASP.Net request URL into a log4net context</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>We make a lot of web applications and we use a lot of logging to diagnose problems on production systems. Often I find myself wishing I knew what URL was being rendered for a given log. In this post I’ll take you through a good solution for adding the current request URL to the log4net context. Better yet we will do this a configurable way so that you can turn this on and off when needed.</p>
<p>One perfectly good way to do this would be to add a debug log to the start of each web request.&#160; What I don’t like about this is that it can be tricky to scan logs with simultaneous requests and thus URLs being handled and keep track of which thread is being used to render what URL. Log4net has a context mechanism where you “push” <a href="http://logging.apache.org/log4net/release/manual/contexts.html">context</a> into “stacks”.</p>
<p> <script src="https://gist.github.com/3840130.js?file=logrequestcontext.cs"></script>  </p>
<p>The push method returns a log context which implements IDisposible. When the context is disposed the context is popped off the stack. This allows you to push many different contexts onto the stack. </p>
<p>Let’s take a look at a simple HttpModule which you can use to push the current request’s url into the log context</p>
<p> <script src="https://gist.github.com/3840130.js?file=logrequestcontext.cs"></script>  </p>
<p>This module registers two event handlers on begin and end request where begin gets a logger from an IoC container pushes the request url into the context. When the request completes (or the module is disposed) the context is cleaned up effectively removing the url off the log context stack.</p>
<p>A nice side-effect of making this a HTTPModule is that you can add or remove this HttpModule to your application as needed using IIS Manager or by editting your web.config.</p>
<p> <script src="https://gist.github.com/3840130.js?file=web.config.xml"></script>  </p>
<p>And make sure you configure log4net appenders to include the context in log output pattern.</p>
<p> <script src="https://gist.github.com/3840130.js?file=log4net.config.xml"></script>  </p>
<p>Finally here is an example of this module in action with the configuration settings you are seeing above.</p>
<p> <script src="https://gist.github.com/3840130.js?file=log-examples.txt"></script>  </p>
<p>I hope you find this handy. If so <a href="http://twitter.com/kevm">let me know</a>. Not so much? Go watch <a href="http://www.youtube.com/watch?v=go43XeW6Wg4">kitten videos</a> on youtube</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/10/05/getting-a-asp-net-request-url-into-a-log4net-context/">Getting a ASP.Net request URL into a log4net context</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2012/10/05/getting-a-asp-net-request-url-into-a-log4net-context/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">4383</post-id>	</item>
		<item>
		<title>Dovetail Bootstrap – Now With Service</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2012/09/13/dovetail-bootstrap-now-with-service/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2012/09/13/dovetail-bootstrap-now-with-service/#respond</comments>
		<pubDate>Thu, 13 Sep 2012 20:15:33 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Dovetail for Clarify]]></category>
		<category><![CDATA[Kevin Miller]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/?p=994</guid>
		<description><![CDATA[<p>A customer recently asked me how to best create a Windows service using our Dovetail SDK. To me this sounds like a task for Dovetail Bootstrap. We have already provided a nice example of using Bootstrap of to build a web application. We did not, until now, have an example of using Bootstrap and Dovetail SDK [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/09/13/dovetail-bootstrap-now-with-service/">Dovetail Bootstrap – Now With Service</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>A customer recently asked me how to best create a Windows service using our Dovetail SDK. To me this sounds like a task for <a href="https://github.com/DovetailSoftware/dovetail-bootstrap">Dovetail Bootstrap</a>. We have already provided a nice example of using Bootstrap of to build a web application. We did not, until now, have an example of using Bootstrap and Dovetail SDK to create a Windows service. Bootstrap makes it easy to pull data out of your Clarify database and <a href="http://topshelf-project.com/">Topshelf</a> makes it easy to roll your own Windows services . Let’s put them both together and build an example Windows service that monitors case creation in your Clarify database.</p>
<p>&nbsp;</p>
<p>If you&#8217;d like to skip right to the example you can find it in our <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/tree/master/source/Service">Dovetail Bootstrap source repository</a>.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>Topshelf</h3>
<p>&nbsp;</p>
<p>At Dovetail we are <a href="http://www.dovetailsoftware.com/blogs/kmiller/archive/2010/01/20/controlling-application-lifetime-in-topshelf">big</a> <a href="http://www.dovetailsoftware.com/blogs/kmiller/archive/2010/01/20/configuring-topshelf-using-a-structuremap-container">fans</a> of Topshelf and its ability to easily create Windows services from plain .Net console applications. Our <a href="http://www.dovetailsoftware.com/dovetail-seeker">Dovetail Seeker</a> and <a href="http://www.dovetailsoftware.com/dovetail-carrier">Dovetail Carrier</a> products both use Topshelf for this purpose. First let’s take a look at how Topshelf configuration of your Windows service is done when your application starts up.</p>
<p>&nbsp;</p>
<p><script type="text/javascript" src="https://gist.github.com/KevM/3716577.js?file=program.cs"></script><br />
&nbsp;</p>
<p>The code above informs Topshelf on how to configure Windows when you install this application as  a Windows service.  As the comment notes. The installation of the Windows service is done using the command line. It is easy to have your deployment script or windows installer automate this step. The most important part here is the service registration. You are not limited to registering only one service. BootstrapService wires everything up so let’s take a look at that.  <br />
<script type="text/javascript" src="https://gist.github.com/KevM/3716577.js?file=BootstrapService.cs"></script></p>
<p>&nbsp;</p>
<p>Topshelf is using an interface here to ensure you have methods for starting and stopping the service. In this example the start method constructs the IoC container and uses it to create a CaseMonitor which will do all the work. The IoC container is there because Bootstrap uses it to bring a lot of value. Things like automatic population of settings objects, getting a ClarifySession for the current user, logging support, and much more. Additionally using IoC containers make writing tests easier. Lets move on and take a look at the CaseMonitor.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>Polling The Database</h3>
<p>&nbsp;</p>
<p><script type="text/javascript" src="https://gist.github.com/KevM/3716577.js?file=CaseMonitor.cs"></script><br />
&nbsp;</p>
<p>CaseMonitor starts a timer that pulses every 15 seconds polling the database using a model map filtered by a timespan. It them simply writes to a logger what it finds.  The IoC container is in charge of providing the CaseMonitor’s constructor with instances of the types it is dependent on. The more interesting thing here is the IModelBuilder or RecentCaseModel. This builder uses a Model Map to know how to pull data from a Clarify database.    </p>
<h3></h3>
<h3></h3>
<h3>Model Maps</h3>
<p>&nbsp;<br />
<script type="text/javascript" src="https://gist.github.com/KevM/3716577.js?file=modelmap.cs"></script></p>
<p>&nbsp;</p>
<p>At Dovetail we use <a href="http://www.dovetailsoftware.com/blogs/kmiller/archive/2009/04/27/introducing-dovetail-datamap">Model Maps</a> extensively in our applications when we need to pull data out of the database into models (Projection) which we’ll be using in our MVC based applications.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>Wrap Up</h3>
<p>&nbsp;</p>
<p>You might notice how little data access code we actually wrote. That is the beauty of Model Map. To make the Windows service aspect of your application you only need to give Topshelf some details and implement a ServiceControl based class. The two Dovetail applications I mentioned use the basic pattern demonstrated here but push TopShelf harder registering many Services <a href="http://www.dovetailsoftware.com/blogs/kmiller/archive/2010/01/20/configuring-topshelf-using-a-structuremap-container">using the IoC container</a> and <a href="http://www.dovetailsoftware.com/blogs/kmiller/archive/2009/08/26/producing-and-consuming-messages-using-masstransit-and-structuremap">utilizing</a> a message bus architecture <a href="http://masstransit-project.com/">MassTransit</a> from the same smart people <a href="http://codebetter.com/drusellers/">Dru Sellers</a> and <a href="http://lostechies.com/chrispatterson/">Chris Patterson</a> that brought you Topshelf. This extra messaging sauce which makes it easy to produce and consume a lot of work across many threads making the most of your server hardware.</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/09/13/dovetail-bootstrap-now-with-service/">Dovetail Bootstrap – Now With Service</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2012/09/13/dovetail-bootstrap-now-with-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">994</post-id>	</item>
		<item>
		<title>FubuMVC Hijacking Behaviors</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2012/04/24/fubumvc-hijacking-behaviors/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2012/04/24/fubumvc-hijacking-behaviors/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 03:24:21 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Dovetail for Clarify]]></category>
		<category><![CDATA[Kevin Miller]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/kmiller/2012/04/24/fubumvc-hijacking-behaviors-2/</guid>
		<description><![CDATA[<p>Have you every wanted a convention to wrap an endpoint and conditionally transfer the original chain to a different one? No server redirect here just plain old hijack your currently scheduled response with another one. This is the FubuMVC equivalent of the classic ASP Server.Transfer. Here are a couple of examples on how to do [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/04/24/fubumvc-hijacking-behaviors/">FubuMVC Hijacking Behaviors</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Have you every wanted a convention to wrap an endpoint and conditionally transfer the original chain to a different one? No server redirect here just plain old hijack your currently scheduled response with another one. This is the FubuMVC equivalent of the classic ASP Server.Transfer. Here are a couple of examples on how to do this.</p>
<h3>Scenario: Web Service API <img style="display: inline; float: right" align="right" src="https://i2.wp.com/github.com/DarthFubuMVC/fubu-collateral/raw/master/png/light%20background/FubuMvc_Logo_small.png?ssl=1" data-recalc-dims="1" />Exception Handling</h3>
<p>We have a web services application where when things go wrong we want a pretty error page for the developer type who is consuming the service. You don’t want an ugly yellow and red YSOD you have too much style for that. </p>
<h3>Answer: Wrap the Behavior Chain</h3>
<p>In FubuMVC you can easily wrap one behavior with another. </p>
<p> <script src="https://gist.github.com/2484005.js?file=APIExceptionConvention.cs"></script>  </p>
<p>This simple convention pulled from <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Dovetail.SDK.Fubu/Actions/ActionExceptionWrapper.cs">Dovetail Bootstrap</a> wraps all of our API actions with the exception handling behavior. The generic argument is the type of the request you wish to redirect to when something goes wrong.</p>
<p> <script src="https://gist.github.com/2484006.js?file=ActionExceptionWrapper.cs"></script>  </p>
<p>The behavior does the heavy lifting putting a <i>try/catch</i> around a wrapped behavior. When an exception is thrown and Asp.Net custom errors are enabled we need to hijack the behavior and return a different result. The generic argument type is used to build the target chain’s input model and invoke that behavior chain using a FubuPartial. </p>
<h4>A Partial? What the fsck is a FubuPartial?</h4>
<p>A <strong>FubuPartial</strong> is a really silly way of saying that we want to render the result of an input model. A partial can be rendered two ways: with or without authorization nodes. <em>Invoke() </em>checks the authorization nodes and <em>InvokePartial()</em> does not. Why wouldn’t you want to authorize? Well your behavior is likely already positioned after the authorization nodes&#160; in the behavior chain so it might not benefit anyone to do yet another authorization. Unless that is you do for this particular part of your application. </p>
<p>In the end a <strong>FubuPartial</strong> is a handy way to get and render the contents of any behavior chain given you have the input model. <strong>Tldr;</strong> Ok there you go this was the big take away from this post. The rest is window dressing and example code and chest thumping. </p>
<h3>Scenario: Single Page Web App</h3>
<p>Often with a single page application using a client side framework like <a href="http://documentcloud.github.com/backbone">Backbone.js</a> you want to support deep linking using&#160; <a href="https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history">browser History and pushState</a>. Let’s support transferring web service requests coming from search engines and user’s bookmarks to the site’s actual home page while leaving the URL intact so the client side framework can be in-charge of rendering the page. </p>
<h4>Background </h4>
<p>A single page app does not reload it uses AJAX requests for everything. Your single page FubuMVC application will likely have RESTful-ish web services returning JSON for each of the views presented to the user. Urls like: </p>
<ul>
<li>/customer/new </li>
<li>/customer/1 </li>
<li>/customer/1/edit </li>
</ul>
<p>Your web services only return JSON and likely don’t have HTML versions of their results. If a user bookmarks one of these links they will only get back JSON. Yuck! </p>
<h4>Enter TransferAPIRequestsTo Behavior</h4>
<p>How about we Hijack web service requests that come from actual browsers. We do this in similar fashion as the first example:</p>
<p> <script src="https://gist.github.com/2483356.js?file=TransferAPIRequestsTo.cs"></script>  </p>
<p>The API requests are wrapped with a behavior that checks to see if the request’s mimetype want’s HTML. If so, just like before we get the partial for the generic argument’s input model and render it.</p>
<h3>Conclusion</h3>
<p>A couple of interesting scenarios that leverage the flexibility of FubuMVC in similar yet very different ways.</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/04/24/fubumvc-hijacking-behaviors/">FubuMVC Hijacking Behaviors</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2012/04/24/fubumvc-hijacking-behaviors/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">4381</post-id>	</item>
		<item>
		<title>Dovetail SDK C# Helper Extensions</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2012/02/29/dovetail-sdk-c-helper-extensions/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2012/02/29/dovetail-sdk-c-helper-extensions/#respond</comments>
		<pubDate>Wed, 29 Feb 2012 01:06:52 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Dovetail for Clarify]]></category>
		<category><![CDATA[Kevin Miller]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/?p=1100</guid>
		<description><![CDATA[<p>Dovetail SDK is quite useful for doing data access with your Clarify databases. When using our ClarifyGenerics there is some ceremony to the syntax there for backwards compatibility that always bothered me.  I’ve written a few helper extensions for Dovetail SDK that I use a lot these days so I thought I should share them [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/02/29/dovetail-sdk-c-helper-extensions/">Dovetail SDK C# Helper Extensions</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Dovetail SDK is quite useful for doing data access with your Clarify databases. When using our ClarifyGenerics there is some ceremony to the syntax there for backwards compatibility that always bothered me.  I’ve written a few helper extensions for Dovetail SDK that I use a lot these days so I thought I should share them with you.</p>
<p>&nbsp;</p>
<h4>ClarifyGeneric Extensions</h4>
<p>&nbsp;</p>
<p><script src="https://gist.github.com/KevM/1942703.js"></script></p>
<p>&nbsp;</p>
<p>I use these to help me filter generics in a fluent way. Create and Traverse to generics without needed a separate line to set which fields should be selected.</p>
<p>&nbsp;</p>
<h4>ClarifyDataRow Extensions</h4>
<p>&nbsp;</p>
<p><script src="https://gist.github.com/KevM/1942716.js"></script></p>
<p>&nbsp;</p>
<p>Row fields are plain objects but you always want to put them into a strongly typed variable. I use these to get at fields without having to do a lot of conversions and checking for DBNull.</p>
<p>&nbsp;</p>
<h4>An example of these extensions in play</h4>
<p>&nbsp;</p>
<p><script src="https://gist.github.com/KevM/1942487.js"></script></p>
<p>&nbsp;</p>
<p>Here I create a generic. Filter it in my fancy new way and project the results into many result objects.</p>
<p>&nbsp;</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/02/29/dovetail-sdk-c-helper-extensions/">Dovetail SDK C# Helper Extensions</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2012/02/29/dovetail-sdk-c-helper-extensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">1100</post-id>	</item>
		<item>
		<title>Automating Deployment For Clairfy Using Rake</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2012/02/06/automating-deployment-for-clairfy-using-rake/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2012/02/06/automating-deployment-for-clairfy-using-rake/#respond</comments>
		<pubDate>Mon, 06 Feb 2012 19:03:02 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Dovetail for Clarify]]></category>
		<category><![CDATA[Kevin Miller]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[schemaeditor]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/kmiller/2012/02/06/automating-deployment-for-clairfy-using-rake/</guid>
		<description><![CDATA[<p>Gary posted recently on Automating Deployment For Clarify. A customer recently had an automation need that I answered in a similar way but rather than using NAnt I pulled from our fancy favorite new build automation tool Rake. In this post we’ll take a look at automating common database setup tasks like applying schema scripts [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/02/06/automating-deployment-for-clairfy-using-rake/">Automating Deployment For Clairfy Using Rake</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Gary posted recently on <a href="http://dovetailsoftware.com/?p=1742">Automating Deployment For Clarify</a>. A customer recently had an automation need that I answered in a similar way but rather than using NAnt I pulled from our fancy favorite new build automation tool Rake. In this post we’ll take a look at automating common database setup tasks like applying schema scripts and executing arbitrary SQL using Rake. I hope you find it useful.</p>
<h3>Where is the Code?</h3>
<p>I put together a <a href="https://gist.github.com/1705486">Dovetail Automation gist</a> with everything you need to solve two problems. </p>
<ol>
<li>Applying&#160; Dovetail Schema Editor schema scripts. </li>
<li>Applying all SQL scripts in a directory. </li>
</ol>
<p>Check out the <a href="https://gist.github.com/1705486#file_a_readme.md">readme</a> for setup and execution instructions. Next I’ll talk a little about what each task does.</p>
<h4>Applying Schema Scripts (apply_schemascripts)</h4>
<p>This task looks for a child directory named <strong>schema </strong>below where the <a href="https://gist.github.com/1705486#file_rakefile.rb">rakefile.rb</a> is located. Every file in this directory ending in <strong>schemascript.xml</strong> will be applied to your target database. </p>
<h4>Applying SQL Scripts (apply_sql)</h4>
<p>This task looks for the child directory named <strong>database</strong> again below the current working directory. Every file ending in <strong>.sql </strong>is </p>
<h4>Ordering</h4>
<p>Both these tasks apply files to your database in the order they are found in the file system. This means you’ll want your scripts to be orthogonal to each other. </p>
<p><img alt="fork" src="https://i1.wp.com/a248.e.akamai.net/assets.github.com/images/gist/buttons/fork_button.png?ssl=1" data-recalc-dims="1" /></p>
<p>I’ll leave it as an exercise to the reader to customize these scripts to follow a conventional file ordering. If you do fork the gist and <a href="http://twitter.com/kevm">let me know</a>.</p>
<h3>My Quick Argument For Rake over Nant</h3>
<p>The main difference between to Nant and Rake is that NAnt encodes its behaviors using XML and Rake uses the scripting language Ruby. I am a self proclaimed NAnt Ninja but I do everything I can in Rake these days. Why? XML is pretty terrible at expressing useful behavior compared to a top shelf language like Ruby with lots of extensibility via its deep repository of Gems.</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/02/06/automating-deployment-for-clairfy-using-rake/">Automating Deployment For Clairfy Using Rake</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2012/02/06/automating-deployment-for-clairfy-using-rake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">4380</post-id>	</item>
		<item>
		<title>Introducing Dovetail Bootstrap</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2012/01/24/introducing-dovetail-bootstrap/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2012/01/24/introducing-dovetail-bootstrap/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 05:24:46 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Dovetail for Clarify]]></category>
		<category><![CDATA[Kevin Miller]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/kmiller/2012/01/24/introducing-dovetail-bootstrap-2/</guid>
		<description><![CDATA[<p>Over the years we’ve grown a lot of infrastructure for building web applications on Dovetail SDK. These infrastructure pieces get used by a lot of different Dovetail products. Today we are launching Dovetail Bootstrap which packages up many handy capabilities like dynamic case history and case creation on top of common infrastructure like: model projection, [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/01/24/introducing-dovetail-bootstrap/">Introducing Dovetail Bootstrap</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Over the years we’ve grown a lot of infrastructure for building web applications on Dovetail SDK. These infrastructure pieces get used by a lot of different Dovetail products. Today we are launching <b>Dovetail Bootstrap</b> which packages up many handy capabilities like dynamic case history and case creation on top of common infrastructure like: model projection, authentication, logging, and session management. The core goal of Dovetail Bootstrap is to get Dovetail SDK developers up and creating web applications quickly.</p>
<h3></h3>
<p>  <!--break-->  </p>
<h3>How do I get it?</h3>
<p>The code for Bootstrap is <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/license.txt">open</a> and available on <a href="https://github.com/DovetailSoftware/dovetail-bootstrap">GitHub</a>. Feel free to watch, fork and improve the code. We’d love to work with you to add great new things to Bootstrap. I recommend reading the <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/readme.md">ReadMe</a> as it takes you through setting up a development environment.</p>
<h3>What Can Bootstrap Do?</h3>
<p>Bootstrap is not a product but a starting point giving you the building blocks of your own applications. Let’s take a look at the basic features that are there now.</p>
<h4>Authentication</h4>
<p>Implementing authentication is a pain. Bootstrap’s “Hello Bootstrap” web application has a simple one. When a user is not authenticated they are redirected to the Sign In page. </p>
<p><a href="https://i0.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-authentication.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bootstrap-authentication" border="0" alt="bootstrap-authentication" src="https://i1.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-authentication_thumb.png?resize=488%2C374" width="488" height="374" data-recalc-dims="1" /></a></p>
<p>After signing in, the user is taken to the URL they originally requested. Your code can easily get the current user of the current incoming web request. This is all pretty typical stuff for web developers but a pain to write and wire up. Below, the master layout uses a partial to display the current user.</p>
<p><a href="https://i1.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-home-with-signout_0.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bootstrap-home-with-signout" border="0" alt="bootstrap-home-with-signout" src="https://i1.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-home-with-signout_thumb_0.png?resize=604%2C358" width="604" height="358" data-recalc-dims="1" /></a></p>
<h4>Case Listing </h4>
<p>The home screen, above, demonstrates showing the user’s open cases. To accomplish this we are using a <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Web/Handlers/home/UserOpenCaseListingMap.cs#L27-34">Model Map</a> to pull case details from a view (qry_case_view) to a view model object which the Spark view engine will consume.</p>
<p>Clicking on the case ID takes us to the case history.</p>
<h4>Dynamic History </h4>
<p>We have invested a lot in our dynamic history infrastructure and here we are sharing it with you. Getting good case history is a tricky problem. There is the static history on the case record which is not that useful as its length maxes out at 32K. The better alternative is to use the activity entries logged for every action taken, but hand building history via activity entry queries and collating results is a tricky and manual data access task. </p>
<p><a href="https://i0.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-history_0.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bootstrap-history" border="0" alt="bootstrap-history" src="https://i0.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-history_thumb_0.png?resize=604%2C453" width="604" height="453" data-recalc-dims="1" /></a></p>
<p>All the work to build this view is done by Bootstrap’s <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Web/Handlers/api/history/get_Type_Id_handler.cs#L18-25">history assembler</a> and it works for cases, subcases, and solutions. Better yet the output of the history generated can be extensively customized:</p>
<p>· <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Dovetail.SDK.Bootstrap/History/TemplatePolicies/SamplePolicy.cs#L10-14">Add or remove</a> which history (activity) entries are shown</p>
<p>· Edit history contents, including <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Dovetail.SDK.Bootstrap/History/TemplatePolicies/SubcaseActEntryTemplatePolicy.cs#L27-33">getting records related to the activity entry</a>.</p>
<p>· Child object history can be mixed in e.g. case history can contain selected sub case history items.</p>
<p>The output of the history assembler is a <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Dovetail.SDK.Bootstrap/History/HistoryViewModel.cs">history view model</a> and is rendered by the <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Web/Handlers/api/history/history.spark">appropriate view</a>.</p>
<h4>Create Case</h4>
<p>Most everyone wants to create a case at one time or another. Bootstrap comes with an example of doing this using our Dovetail SDK</p>
<p><a href="https://i1.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-create-case.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bootstrap-create-case" border="0" alt="bootstrap-create-case" src="https://i1.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-create-case_thumb.png?resize=514%2C530" width="514" height="530" data-recalc-dims="1" /></a></p>
<p>Look in the <em>/api/cases/create</em> handler directory. The get_handler class is in charge of showing the form for GET requests of<em> /api/cases/create </em>url. The post_handler class handles POSTs to the same URL and creates the case based in the input model.</p>
<p>Take a look a the drop downs for the case Type, Severity and Priority. The dropdown values are automatically populated by a feature of FubuMVC called HTML Conventions.</p>
<p><a href="https://i1.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-create-case-dropdowns.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bootstrap-create-case-dropdowns" border="0" alt="bootstrap-create-case-dropdowns" src="https://i1.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-create-case-dropdowns_thumb.png?resize=457%2C245" width="457" height="245" data-recalc-dims="1" /></a></p>
<p>In this case we set an attribute on the output model of the create case GET. We have trained the web application to render special Html when trying to display an input for this “special” attributed property. HTML Conventions are another whole blog post. I put together <a href="https://gist.github.com/1672372">a gist</a> containing all the moving parts that make this happen.</p>
<h4>Application List Listing (try to say that fast) </h4>
<p>Application lists (GBSTs) are used a lot in Clarify. In fact, I just talked a bit too much about conventionally showing drop downs for them above. As an example in Bootstrap we provide a simple listing and detail view of application lists. </p>
<p><a href="https://i1.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-gbst-listing_0.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bootstrap-gbst-listing" border="0" alt="bootstrap-gbst-listing" src="https://i2.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-gbst-listing_thumb_0.png?resize=604%2C466" width="604" height="466" data-recalc-dims="1" /></a></p>
<p>Take a look at how easy it is to do the ClarifyGeneric query used to <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Web/Handlers/api/gbst/get_handler.cs#L19-25">generate the listing</a>. Here is a detail view of one of the lists showing off its elements.</p>
<p><a href="https://i0.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-gbst-list-detail_0.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bootstrap-gbst-list-detail" border="0" alt="bootstrap-gbst-list-detail" src="https://i2.wp.com/dovetailsoftware.com/wp-content/uploads/bootstrap-gbst-list-detail_thumb_0.png?resize=604%2C466" width="604" height="466" data-recalc-dims="1" /></a></p>
<p>To show this list detail view we <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Web/Handlers/api/gbst/show/get_Name_handler.cs#L18-38">project a view model</a> from the Dovetail SDK’s list cache ordered by rank highlighting the default list element.</p>
<p>That finishes our fly through of the Bootstrap Web example. There is an extremely exciting About page that I did not show off. I’ll let you grab the code and take it for a spin to see that gem.</p>
<h3>What exactly is in Bootstrap?</h3>
<p>Bootstrap is written in .Net 4.0. It currently consists of 3 libraries and a web application pulling the libraries together showing it all off.</p>
<ul>
<li><b>Bootstrap</b> – SDK session management, history builder, settings (configuration) support. </li>
<li><b>ModelMap</b> – map view models to your database schema and easily populate them (awesome). </li>
<li><b>Fubu</b> – FubuMVC specific infrastructure: list rendering conventions, forms and token based authentication. </li>
<li><b>Web</b> – An example Agent authenticated web application with a user customized home page, case history rendering, create case example, application lists </li>
</ul>
<h4>Retrieving data using ModelMap </h4>
<p>Long ago I talked about the first iteration of ModelMap called DataMapper.</p>
<blockquote>
<p>“<s>DataMap</s> ModelMap makes it easy to populate model objects from a Clarify/Dovetail CRM database. It is a sort of one-way Clarify specific object relational mapper tool.”</p>
</blockquote>
<p>Model Map saves you from having to write a lot of data access code for querying and mapping data from query results into view models. For more details take a look at <a href="http://dovetailsoftware.com/?p=1203">my original post</a> and at the <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Web/Handlers/home/UserOpenCaseListingMap.cs#L27-34">example map</a> shipped with Bootstrap which is used by the home page to build <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/blob/master/source/Web/Handlers/home/get_handler.cs#L17">a list</a> of the current user’s open cases. If you don’t find anything else useful about Bootstrap do stop and take a look at the power of ModelMap at Dovetail we use it everywhere.</p>
<h4>Web Application Framework</h4>
<p>The Bootstrap web application is built on ASP.Net using the <a href="http://mvc.fubu-project.org/">FubuMVC web framework</a>. At Dovetail we use FubuMVC a lot. My secondary goal of Bootstrap is to make our customers more aware of “Fubu” by shipping great and useful examples of using it. </p>
<p>By no means are you required to write only FubuMVC apps using Bootstrap. In fact, I’ve updated our <a href="http://dovetailsoftware.com/?page_id=112">Dovetail Mobile</a> product (based on ASP.Net MVC 2) to use Bootstrap to prove out this assertion. I may later provide guidance for using Bootstrap with ASP.Net MVC. Let me know if this interests you. </p>
<h3>Wrap Up</h3>
<p>That is about it for the main features and examples in the Bootstrap web application example. Bootstrap is by no means is done. We are starting to use Bootstrap as a foundation for our products at Dovetail and it has been really handy publishing the Bootstrap libraries as <a href="http://nuget.org/">Nuget</a> packages for use by us internally. </p>
<p>The name of the project is a blatant rip-off of <a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a> which we use in the web application.</p>
<p>I apologize for glossing over a lot of FubuMVC detail there is an <a href="http://mvc.fubu-project.org/getting-started/">ever improving about of educational information</a> on Fubu out there. Go ahead and <a href="https://twitter.com/fubumvc">follow them</a> on the Twitters. </p>
<p>If you have any suggestions or find bugs hit me on or <a href="http://twitter.com/kevm">Twitter</a> or create a <a href="https://github.com/DovetailSoftware/dovetail-bootstrap/issues">GitHub issue</a>. If you are stuck please do send me a line.</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2012/01/24/introducing-dovetail-bootstrap/">Introducing Dovetail Bootstrap</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2012/01/24/introducing-dovetail-bootstrap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">4379</post-id>	</item>
		<item>
		<title>Compositional Architecture FTW</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2011/06/09/compositional-architecture-ftw/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2011/06/09/compositional-architecture-ftw/#respond</comments>
		<pubDate>Thu, 09 Jun 2011 01:15:14 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Dovetail for Clarify]]></category>
		<category><![CDATA[Kevin Miller]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/?p=1104</guid>
		<description><![CDATA[<p>While doing a deployment of our Dovetail Carrier product our customer was having connectivity issues with their email server. We ran into situation where we needed prove that the product could connect and simply firing up an email client was not as good as proving that our code worked. The compositional architecture of Carrier allowed [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2011/06/09/compositional-architecture-ftw/">Compositional Architecture FTW</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a title="Composition FTW!!!" href="http://www.flickr.com/photos/zigazou76/4486195717/"><br />
<img alt="" src="https://i2.wp.com/farm5.static.flickr.com/4003/4486195717_3e5c848ff8.jpg" style="width: 200px; height: auto;" align="right" data-recalc-dims="1" /></a>While doing a deployment of our Dovetail Carrier product our customer was having connectivity issues with their email server. We ran into situation where we needed prove that the product could connect and simply firing up an email client was not as good as proving that our code worked. The compositional architecture of Carrier allowed me to quickly build a little console application to detect email configuration problems.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>Recompose It</h3>
<p>&nbsp;</p>
<p>Plucking the necessary pieces of code out of our application and recomposing a utility to solve the problem at hand was easy. Here is the gist of the console code.</p>
<p>&nbsp;</p>
<p><script src="https://gist.github.com/KevM/1015413.js?file=email-config-tester.cs"></script></p>
<p>&nbsp;</p>
<p>Writing this code did not take long.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h4>Lean on the container</h4>
<p>&nbsp;</p>
<p>Allowing the container to compose my types for me frees me from having to worry about minutia. There are other things going on behind the scenes that I don’t have to worry about. For better output I pulled in our logging infrastructure. Way better than writing to standard out.</p>
<p>&nbsp;</p>
<p><script src="https://gist.github.com/KevM/1015413.js?file=output.txt"></script></p>
<p>&nbsp;</p>
<h3>Validation?</h3>
<p>&nbsp;</p>
<p>Not really. A minute before I posted the console app to the customer figured out the problem was on their side. But had the mystery still been afoot we’d had a tool on our belt.</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2011/06/09/compositional-architecture-ftw/">Compositional Architecture FTW</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2011/06/09/compositional-architecture-ftw/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">1104</post-id>	</item>
		<item>
		<title>Dovetail Software is Multi-Core Aware</title>
		<link>https://clarify.dovetailsoftware.com/kmiller/2011/04/12/dovetail-software-is-multi-core-aware/</link>
		<comments>https://clarify.dovetailsoftware.com/kmiller/2011/04/12/dovetail-software-is-multi-core-aware/#respond</comments>
		<pubDate>Tue, 12 Apr 2011 21:31:08 +0000</pubDate>
		<dc:creator><![CDATA[Kevin Miller]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Dovetail for Clarify]]></category>
		<category><![CDATA[Kevin Miller]]></category>

		<guid isPermaLink="false">http://clarify.dovetailsoftware.com/kmiller/2011/04/12/dovetail-software-is-multi-core-aware/</guid>
		<description><![CDATA[<p>A customer recently asked if they should provision multiple CPUs on virtual machines hosting Dovetail applications. The short answer is Yes most of our applications do a pretty good job taking advantage of multiple CPU cores. Let’s take a look at this in a bit more detail. Our Clarify products all use our .Net Dovetail [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2011/04/12/dovetail-software-is-multi-core-aware/">Dovetail Software is Multi-Core Aware</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>A customer recently asked if they should provision multiple CPUs on virtual machines hosting Dovetail applications. The short answer is <strong>Yes </strong>most of our applications do a pretty good job taking advantage of multiple CPU cores. Let’s take a look at this in a bit more detail.</p>
<p><a href="https://i2.wp.com/www.intel.com/pressroom/enhanced/research/rockcreek/gallery/images/p_scc-h-wafer.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px 0px 0px 6px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="48-core-intel" border="0" alt="48 Core " align="right" src="https://i2.wp.com/blogs.dovetailsoftware.com/sites/default/files/kmiller/image_5.png?resize=179%2C174" width="179" height="174" intel?="Intel?" from="from" chip="chip" CloudCcomputing?="CloudCcomputing?" data-recalc-dims="1" /></a>Our Clarify products all use our .Net Dovetail SDK. The SDK is not itself multi-threaded (each thread runs on a CPU core) but most Dovetail products using the SDK utilize multiple cores in one way or another. </p>
<h3>Web Applications</h3>
<p>Most of our customers use one of our web applications. <a href="https://clarify.dovetailsoftware.com/user-applications/agent/" title="Agent">Dovetail Agent</a>,&#160; <a href="https://clarify.dovetailsoftware.com/user-applications/agent-lite/" title="Agent Lite">Agent Lite</a>, and <a href="https://clarify.dovetailsoftware.com/user-applications/mobile/" title="Mobile">Dovetail Mobile</a>, and <a href="https://clarify.dovetailsoftware.com/supporting-applications/admin/" title="Admin">Dovetail Administration</a> are implicitly multi-threaded because the web server (IIS) that they run on uses a thread per web request being processed. </p>
<p>Note: There is a limit to the <a href="http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx">number of threads IIS will put into play</a>.</p>
<h3>Message Based Applications</h3>
<p><a href="https://clarify.dovetailsoftware.com/supporting-applications/seeker/" title="Seeker">Dovetail Seeker</a> and <a href="https://clarify.dovetailsoftware.com/supporting-applications/carrier/" title="Carrier">Dovetail Carrier</a> are message based applications which run as Windows services. They both use multiple threads to produce and consume messages. This architecture does a very good job at parallelizing the work being done. For example Dovetail Seeker is a bit CPU intensive when indexing a large amount of content. We have seen a linear increase in the amount of content that can be indexed concurrently when adding additional cores. Here is a screenshot from my development machine doing some heavy Dovetail Seeker indexing.</p>
<p><a href="https://i0.wp.com/blogs.dovetailsoftware.com/sites/default/files/kmiller/image_6.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://i2.wp.com/blogs.dovetailsoftware.com/sites/default/files/kmiller/image_thumb_4.png?resize=484%2C128" width="484" height="128" data-recalc-dims="1" /></a></p>
<p>Seeker’s usage is not purely CPU as there is still a bit of waiting that occurs while talking to the database and file system. It doesn’t hurt to have a fast&#160; database server and local file system where the search indexes get written.</p>
<h3>Dovetail RuleManager</h3>
<p><a href="https://clarify.dovetailsoftware.com/supporting-applications/rulemanager/" title="RuleManager">Dovetail RuleManager</a> is very much like our message base applications. It is a Windows service and uses multiple threads. We wrote this application before our experience with message based architectures. If I did major rework this application would become message based. RuleManager uses a producer consumer multi-threading model where one thread polls the database for events feeding consumer threads work to do when events are found.</p>
<h3>Conclusion</h3>
<p>Should you use multiple CPUs for Dovetail applications? Yes. How many? I would recommend at least 2 cores for web applications. Our message based applications can in theory use as many CPUs as you throw at them.</p>
<p>The post <a rel="nofollow" href="https://clarify.dovetailsoftware.com/kmiller/2011/04/12/dovetail-software-is-multi-core-aware/">Dovetail Software is Multi-Core Aware</a> appeared first on <a rel="nofollow" href="https://clarify.dovetailsoftware.com">Clarify Solutions | Dovetail Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://clarify.dovetailsoftware.com/kmiller/2011/04/12/dovetail-software-is-multi-core-aware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">4377</post-id>	</item>
	</channel>
</rss>
