REQUEST A DEMO

Author: Kevin Miller

Software Creator

Kevin Miller
Kevin Miller
About:

I am an Austin Texas based software developer flying his geek flag proudly. I work hard creating customer service and support software and web experiences. When I am not creating software or gushing about my toddler. I soak neck deep in Twitter, discover new music at Rdio, host "European" board game meet ups, and read nerdy stuff like Vernor Vinge.


Subscribe to Kevin Miller's RSS feed and never miss a post.

Posts by Kevin Miller:

Using the Tika Java Library In Your .Net Application With IKVM

July 2, 2010 Update   I've created a project page for TikaOnDotNet on github. Tika On DotNet   This may sound scary and heretical but did you know it is possible to leverage Java libraries from .Net applications with no TCP sockets or web services getting caught in the crossfire? Let me introduce you to IKVM, which is frankly magic:   IKVM.NET is an implementation of Java for Mono and the Microsoft .NET Framework. It includes the following components: A Java Virtual Machine implemented in .NET A .NET implementation of the Java class libraries Tools that enable Java and .NET interoperability   Using IKVM we have been able to successfully integrate our Dovetail Seeker search application with the Tika text extraction library implemented in Java. With Tika we can easily pull text out of rich documents from many supported formats. Why Tika?  Because there is nothing comparable in the .Net world as…

Dovetail Seeker Sneak Preview

June 29, 2010 Lately we have been giving some love to Dovetail Seeker our search solution for Clarify/Dovetail CRM. I wanted to share a couple teaser screenshots of a couple features we are working on for our next release.   These screenshots are from an example “reference” web application we are including with Dovetail Seeker to show off all its new fancy features and to get developers excited and empowered to build their own search clients.   The these screens are pretty raw they are from an example app, a proving ground, which will undergo much improvement and change. You’ve Got Your Documents In My Search Index!   The most requested and exciting new feature to Dovetail Seeker is “Rich Document Indexing”.   You select a directory you want indexed and our Seeker will look for files, extracting their content making them searchable.…

Authoring Schema Script to ‘Upsert’ changes to your database. (a.k.a Add and/or Update)

May 17, 2010 Authoring Schema ScriptThis post will teach you the best way to author your Schema Editor schema script to do upserts, adds and/or updates to your Amdocs database schema. Luckily, you do not often have to worry about doing upserts but there is one situation where not doing them can get you into trouble.Anytime you provide schema script which should work whether the object exists or not and must change properties of the original.Sorry if that just lost you. Let's start out with the basics. What is this Schema Script?We created Schema Editor for Amdocs users who need a better way to update the database schema of their Clarify/Amdocs database. When we created SchemaEditor, Gary Sherman was adamant that we needed a new workflow for updating the schema. The classic workflow involved exporting the database schema, manually editing the result, and reapplying the changes. It is not…

Syntax Highlighter

March 22, 2010 This is a sample post using Alex’s very nice looking Syntax Highlighter for code snippets. Let’s see if I can get Community Server to behave. Teaser Code public class SolutionMap : DovetailMap { protected override void MapDefinition() { FromTable("probdesc") .Assign(d => d.SolutionID).FromIdentifyingField("id_number") .MapMany().To(d => d.Resolutions).ViaRelation("probdesc2workaround", workaround => workaround .Assign(d => d.DatabaseIdentifier).FromField("objid") ); } } Update: Looks like I got it working. Sorry about the guinea pig post. The code above is actually something I have been wanting to post about for some time. Maybe now with these super sweet code blocks I’ll get’er done.

Correcting a MIDL compiler error – MIDL1001 : cannot open input file

This post is for me or for any of the poor souls out there still doing COM development and using the MIDL compiler in anger. Every now and again I need to get our build automation working with the MIDL compiler and it always seems to be related to some sort of path issue. I ran into this again today on my new development machine and in frustration am creating this post so I can remind myself what I did to fix it.   midl : command line error MIDL1001 : cannot open input file oaidl.idl   We have a step in our build automation where we generate a type library using midl.exe. Usually when you are using the Visual Studio Command Prompt (vcvars32.bat) this will work fine but something seems to have gone wrong with this on my Windows 7 development machine on which…

jQuery 1.4 breaks ASP.Net MVC actions with array parameters

February 24, 2010 We had a Ajax-ified page break on us today and eventually figured out that the cause was related to an upgrade of jQuery and in particular a change in how jQuery 1.4 does serialization of array parameters for Ajax operations. From the jQuery 1.4 Release Notes. jQuery 1.4 adds support for nested param serialization in jQuery.param, using the approach popularized by PHP, and supported by Ruby on Rails. For instance, {foo: ["bar", "baz"]} will be serialized as “foo[]=bar&foo[]=baz”. In jQuery 1.3, {foo: ["bar", "baz"]} was serialized as “foo=bar&foo=baz”. However, there was no way to encode a single-element Array using this approach. If you need the old behavior, you can turn it back on by setting the traditional Ajax setting (globally via jQuery.ajaxSettings.traditional or on a case-by-case basis via the traditional flag). Our page was using getJSON to get data back…

Carrier – Customizing Your Response Emails

February 3, 2010   Out of the box Dovetail Carrier is very good at receiving emails and allowing you create business functionality which can react to incoming messages. There is a flip side to receiving emails. Sending them. This post will explain how the Email Agent extension uses templates to send email notifications. First we need to explore what information your template will have available to it. We’ll start by setting the stage.   Real World Scenario   In the Email Agent extension. When an email is received by your company’s support account the New Case Support Email rule set is invoked. This rule set determines that the email is a request for support and a new case is created. The next rule action should send a response email. What should the email tell the user?   It should inform them of details…

More On Dovetail Carrier RuleSets

January 28, 2010 I wanted to discuss RuleSets in more detail this time diving deeper into a couple of topics I pulled out of Creating Your First Carrier Extension because they were too advanced for an introduction.RuleSets Have ContextYour conditions and actions need a way to inspect the message they are evaluating. This is accomplished via the RuleContext object with is give to each condition and action being invoked by the RuleSet. Everytime Carrier starts executing your RuleSet it creates a new RuleSetContext object and puts the message being processed into the context.Here is the rule context interface. public interface IRuleContextMESSAGE { MESSAGE Message { get; set; } T FindT() where T : class; bool HasT() where T : class; T PushT(T entity) where T : class; }It is also useful to have a way to communicate state between conditions and actions. This…

Creating Your First Carrier Extension

Extensions are the heart of Dovetail Carrier. The application itself does nothing unless there is an extension present. This makes it important to understand how to create your own extensions. This guide will take you through creating a brand new extension and having it subscribe to one of the core Carrier messages IncomingEmailMessage.   Create The Extension Project   The first thing we are going to do is add a project to the extensions solution included with Carrier. Before you can do this you’ll need to unzip the\developer\extensions-source.zip file shipped with Dovetail Carrier into a directory on a development machine which has Visual Studio 2008 installed.   Next open the extension solution (carrier-extensions.sln) and add a new project to the solution.   File -> Add -> New Project Select a C# Class Library and give it a name. I'll use MyFirstExtension Add…

Configuring Topshelf Using A StructureMap Container

January 20, 2010 At Dovetail we use StructureMap a lot. Lately we’ve also been using Topshelf a lot too. This post takes a look at how you can marry these two technologies together. We will be using the StrucutreMap container to configure which services get started by Topshelf at runtime. Simple Services   Let’s start simple. We need a way to identify which configured types want to get configured to be spun up by Topshelf. To accomplish this I created an interface called ISimpleService which includes only the Start and Stop methods that Topshelf uses to manage the services lifetime.   public interface ISimpleService { void Start(); void Stop(); }   Next up we’ll update and expand the example from my previous post Controlling Application Lifetime In Topshelf to have it implement the ISimpleService. We’ll also add another service in charge of spamming the log file.   public class LogSpamService :…