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:

Running Multiple Instances of a Windows Service Using TopShelf

September 24, 2009 Here is another one where I post about something Josh and team did that I borrowed and am using to great effect. When a console app or a windows service needed we like to use TopShelf to get the job done. In this post I’ll show how to get two instances of a Windows service running on one machine using TopShelf. Updated: As Mike points out in the comments below as of revision 46 Dru added a command line parameter to handle this scenario. Great! Much better than our hacky solution below (written before this revision). Please skip this post and just add a service install /instance:<name> argument at the command line to install additional windows services. Here is an example: YourApplication.exe service install /instance:NumeroDos Now back to the original post which should be ignored so stop reading now <grin>.…

Extension Methods I Use A Lot

September 23, 2009 C# extensions have been around for some time and it was a fad for a while to post your favorites. I am following way behind the extension party bus with this post of my favorite extensions. Most of these are poached from Chad and Jeremy and Josh with a few sadly only one of my own mixed in. Below is the Basic Extensions class that is common to a lot of our Dovetail projects. I am not a big believer in class libraries for simple little things like these as extensions that are useful on one project will be useless on another. using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Web.Script.Serialization; namespace Dovetail.Commons { public static class BasicExtensions { /// <summary> /// Write string to the console. /// </summary> public static void WriteToConsole(this string stringValue) { Console.WriteLine(stringValue); } ///…

Think About User Experience

August 28, 2009 Separate the user from complexity. Spam filtering is pretty complex stuff. The act of signaling an email is spam should not be. Which of these user interfaces for Spam handling do you think works better? Outlook 2007 – 1 action = navigation + 6 options A classic lesson from Don’t Make Me Think. The cognitive load in Outlook is very high. The steps for a email user wishing to mark an email as spam. Some how know to right click on the email. (acquired knowledge) Click on Junk E-mail.  (Find the menu item) Pick from a list of 6 potential junk email options. (Read and understand what each option means) GMail – 1 to 1 Gmail recently changed their menu items condensing them down and in my opinion reducing their readability. However I find the task of marking email as…

Producing and Consuming Messages using MassTransit and StructureMap

August 26, 2009 I am spiking out right now what it takes to use a Mass Transit as a message bus for handling a simple producer consumer messaging architecture. To be exact I want to see how easy it is to get Mass Transit working using StructureMap for an IoC container. Dovetail uses Inversion of Control extensively to make our code more: testable and able to leap tall buildings, dodge bullets, and all that. Our favorite IoC container is StructureMap. Why? Because it is great and we have two contributors on staff: creator Jeremy Miller and the brainy Josh Flanagan. Getting Started My first step was to grab the Mass Transit trunk from SVN, build it and start up a new solution with three projects: Producer – produces messages. Consumer – consumers messages. Common – code shared between producer and consumer. In this…

Mobile Case Creation

July 30, 2009 One of the most requested features we get for Dovetail Mobile Agent is the ability to create cases. Request no more. Wait no longer. Well, maybe just a bit longer. I just finished an update that adds mobile create case functionality. We are going to use it internally for awhile before shipping it. If you want to take it for a test drive send me an email. Here is a sneak peek for everyone. Finding the correct customer Technically this screen was the most difficult to pull off. Finding a customer is typically the first thing you do when creating a case. In this situation it tells us two very important things: who is the contact for the case and what site are they are working at. Looking at the image above I see room for improvement. See this is…

Dovetail Seeker 1.2 Released

July 21, 2009 If you are not a Dovetail customer be prepared for a boring post. If you are a fan or our search product. Be prepared to be rocked! My last couple of posts have been talking about the cool stuff coming out in the next version of Dovetail Seeker? Well, the next version of Dovetail Seeker is here. I hope you enjoy it. I’d love to know how you are using Seeker in your organization below or if you prefer off-line. What’s new in version 1.2 Important Changes Dovetail Seeker now requires version 3.5 SP1 of the .Net framework. Seek.exe has been renamed to SeekerConsole.exe Application settings are now located in the install directory within the applicationSettings.config file. New Features Dovetail Seeker now includes a Windows service for keeping your search index up to date. For more information see Seeker Windows…

Dovetail Seeker update part deux

July 14, 2009 Yesterday I added a feature that will be in the next release of Dovetail Seeker.Executive Summary: Coming soon, support for indexing against Clarify views.Didn’t it support that already?Well.. No. I was working on a feature for Mobile Agent that I wanted to use some cool search techniques to facilitate and found out a view would work better. When I tried to do just that the indexer exploded with nasty unfriendly errors. What is a developer to do but stop everything and add a feature.Does this great power come with any great responsibilities?Yes. Paths traversing relationships are not allowed when indexing views. What is a path? Well, paths are basically instructions telling the indexer how to find the piece of data you want in the index. Against tables paths can include relations which are not possible for views. This means you…

Dovetail Seeker Update

July 9, 2009 We will soon be releasing a new version of Dovetail Seeker our information retrieval tool for Dovetail/Clarify CRM. The big news in this release is that Seeker now includes a windows service for keeping your indexes in-sync with your database in near real-time. This release also adds the ability to wipe and re-index your search indexes after database purges. Previous Seeker Posts Seeker Introduced Previous Release Post Creating your own Seeker Client Real-Time Indexing Driver Gary and I have been thinking about different scenarios where Seeker could be used. One of them was to use search to replace how users find different types of data. I’ll leave diving into that scenario in more detail to Gary. Think Find Caller using a single search box. One of the requirements that came up was that the search index would need to in-sync…

Introducing Dovetail DataMap

April 27, 2009 Update: I’ve modified this post as what were called DataMaps are now called ModelMaps. You can download the source from the Dovetail Bootstrap project. I want to introduce a handy library called ModelMap we created during the development of Dovetail Mobile. 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. Your CRM data to Objects It is very common to need a way to pull data out of your CRM for creation of a user interface. What if you could define a plain old C# object as your model and a map which defines how data in your Clarify database should populate that .Net model class? Does this sound better than hand rolling your own code every time? I hope it does. Let’s take…

Syntax Highligher

April 24, 2009 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.