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:

Compositional Architecture FTW

June 9, 2011 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.     Recompose It   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.     Writing this code did not take long.     Lean on the container   Allowing the container to compose my types for me frees me from having to worry about minutia. There are other things…

Dovetail Software is Multi-Core Aware

April 12, 2011 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 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. Web Applications Most of our customers use one of our web applications. Dovetail Agent,  Agent Lite, and Dovetail Mobile, and Dovetail Administration are implicitly multi-threaded because the web server (IIS) that they run on uses a thread per web request being processed. Note: There is a limit to the number of threads IIS will put into…

Making ASP.Net Custom Errors Less Dookie

January 13, 2011 I wanted to share some lessons learned from an experience recently adding custom error pages to one of our FubuMVCprojects deployed to IIS7.   Treat your users well Having good looking error pages in your app is a nice sign of polish. They mean that you care about your user’s experience even when things go wrong. Github, who always seems to knock it out of the park, recently updated their error pages. I love the 404 page complete with parallax JavaScript effects.   ASP.Net has this all handled right?   Sure they do. Well sort of. Lets take a look at your web.config.   httpErrors – good for static content   An httpError seems to allow you to customize error pages for static sites and the parts of your app that do not flow through the ASP.Net runtime. For us this worked well for our…

How To Setup hMailServer To Use a SSL Certificate

August 17, 2010   I am adding IMAP support to one of our products. Likely more that one person out there a needed to do this, so enjoy. I’ll take you from creating an SSL certificate to configuring hMailServer to work with both secure and regular connections to testing your setup.   Creating a Self Signed SSL Certificate   First things first you’ll need to download OpenSSL. I downloaded the 64bit 1.0 light version which required Visual C++ 2008 Redistributables (x64) to be installed first. I told the installer to put OpenSSL in my c:utilites folder.   Create a Key   Next up you’ll need to create a key. I recommend you replace <host> with your machine name.   >openssl genrsa -out <host>.key 1024   Certificate Request   Now you need to create a certificate request. This is the file you normally send…

How To Configure Log4J via C#

August 12, 2010 One of our products is currently using IKVM to interop with a java library. I kept seeing console warnings saying: log4j:WARN Please initialize the log4j system properly.   Clearly the java library uses log4j and it is not getting initialized by my application. A customer was rightfully confused by this message so I spent a little time getting log4j setup and working.   At first I was hoping I could host log4j configuration XML along side my log4net configuration but sadly that was a pipedream. I opted for this approach.   public const string Log4JConfigFileName = "log4j.config"; private static void ConfigureLog4J() {     if(File.Exists(Log4JConfigFileName))     {         PropertyConfigurator.configureAndWatch(Log4JConfigFileName);         return;     }     var patternLayout = new PatternLayout("%d [%t] %-5p %c - %m%n");     var consoleAppender = new ConsoleAppender(patternLayout);     var fileAppender = new RollingFileAppender(patternLayout, "./logs/file-extraction-errors.log", true);     fileAppender.setMaxFileSize("1MB");     fileAppender.setMaxBackupIndex(5);              var rootLogger = Logger.getRootLogger();     rootLogger.setLevel(Level.ERROR);     rootLogger.addAppender(fileAppender);     rootLogger.addAppender(consoleAppender); }   Look for…

Seeker Indexer Architecture Changes

August 6, 2010 Great changes are happening with our Dovetail Seeker search product. I wanted to talk about a core change to the product. By moving our application architecture to use messaging we are seeing increased flexibility, testability and performance. Why Messaging? Based on our experience building Dovetail Carrier (pdf), our messaging oriented enterprise integration solution, we decided messaging was a great fit for Seeker’s search indexing windows service. We decomposed the indexer’s behaviors into work (message) producers and consumers. For example to keep your database in-sync with the search index we have a service which watches the database for changes to the objects Seeker is indexing. When a database item is added or updated a message is created which gets put onto a work queue. We have many message consumer threads standing by waiting for work to munch on. Our message consumers…

AspNetHostingPermission exception got you down? Unblock Your Assemblies.

July 29, 2010 We ran into trouble with a web applications deployment of our only .Net product without a windows installer. Little did we know when you zip up a web application, have your on-site expert consultant download said zip file and extract it with Windows Explorer (Note: it does not happen with WinRar or 7zip) You will run into this exception trying spin up that web application. Security Exception Description: The application attempted to perform an operation not allowed by the security policy.  To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file. Exception Details: System.Security.SecurityException: Request for the permission of type 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of…

Lucene’s docFreq Got You Down? Replace It With a Custom Collector

July 21, 2010 I came across a weird thing with Lucene using their document frequency API.   int docFreq(Term term) - Expert: Returns the number of documents containing term. Called by search code to compute term weights.   You can use this call to quickly find the number of documents in your index matching a term you give it. The problem I ran into was that when you delete documents they still show up in the count of documents returned by docFreq(). Worse yet document frequencies will include deleted documents until an index optimization is done. Yikes! Index optimization is very very slow and expensive so I really do not want to optimize just because we deleted a few documents. The real answer is not to use docFreq at all. We can instead use a custom Collector to get the desired effect.   My Problem   I have an…

Using Dovetail SDK Using Visual Basic.Net

July 14, 2010 A customer recently asked for a code example demonstrating how to use our Dovetail SDK to do data access custom objects using Generics (the Dovetail kind not the C# kind) Imports FChoice.Foundation.Clarify Imports System.Collections.Specialized Imports FChoice.Foundation Imports NUnit.Framework Module SDKExample <TestFixture()> Public Class SDK_test <Test()> Public Sub update_case_title() InitializeDovetailSDK() UseGenericToUpdateExistingCaseTitle("1", "new title") End Sub End Class Sub InitializeDovetailSDK() Dim config As New NameValueCollection 'These are hard coded database credentials. More typically you'd use application configuration config.Add("fchoice.dbtype", "mssql") config.Add("fchoice.connectionstring", "Data Source=.; Initial Catalog=SDKcl125_2k5; User Id=sa; Password=sa;") ClarifyApplication.Initialize(config) End Sub Sub UseGenericToUpdateExistingCaseTitle(ByVal caseId As String, ByVal title As String) Dim session As ClarifySession session = ClarifyApplication.Instance.CreateSession("sa", "sa", ClarifyLoginType.User) Dim dataset As New ClarifyDataSet(session) Dim caseGeneric As ClarifyGeneric caseGeneric = dataset.CreateGeneric("case") caseGeneric.AppendFilter("id_number", StringOps.Equals, caseId) caseGeneric.Query() If caseGeneric.Rows.Count < 1 Then Throw New ApplicationException(String.Format("Case {0} was not found.", caseId)) End If caseGeneric.Rows(0)("title") = title…

Refreshing Component Guids in your Wix XML

Right now I am working once again with Wix which can be quite shall we put it nicely: freaking traumatic. I promise this post will not entirely be me moaning about Windows Installer crap-titude. Rather, this post may actually help you out of a weird jam some day. My Windows Installer (.msi based) installed application started to refuse to uninstall with a weird error. Registry Component<GUID><GUID> could not be found. The only resulting way for me to get rid of the install was to use the Windows Install Clean Up which is pretty scary because Microsoft doesn’t provide it as a download because: While the Windows Installer Cleanup utility resolved some installation problems, it sometimes damaged other components installed on the computer. Because of this, the tool has been removed from the Microsoft Download Center. Yikes! Anyhow. The reason this…