REQUEST A DEMO

Tag: Kevin Miller

Cleanly Handling Ctrl-C In Console Applications

June 4, 2008 I find myself writing Console applications now and again. Command line ninjas know that if you want to stop a running console application you can hit Ctrl-C to  exit the application. In our Dovetail Seeker product, which we will be releasing with the next version of Dovetail Agent, when you cancel out of the indexer while it is running it would corrupt the search index. Not a big problem as the search indexes can be easily recreated but that can sometimes take a long time. Besides allowing scenario to exist where the user can corrupt application data is just plain wrong. Luckily it was easy to fill in this hole.   My Google-Fu took me to Curt Nichol's post on Ctrl-C and the .NET console application where he introduces the System.Console.CancelKeyPress event and demonstrates using an anonymous method for handling…

Twitter Agent – Decoupling From Dependencies

May 15, 2008 Lately I have been posting about a Twitter/Dovetail CRM integration we have been working on. Recently I made some architectural changes that I will hopefully get to in a future post. This time around I wanted to talk about how a problem with the jabber-net XMPP library led to a better more testable design. Connection Stability Last post I talked about how we are using XMPP to send and receive direct messages with Twitter and when Twitter's XMPP presence is up it works great. Really well in fact. The main challenge has been keeping the connection to our Jabber server stable. The jabber-net library has an auto-reconnection issue when DNS cannot be resolved it gives up trying to reconnect. I did get some guidance from their Google Group on correcting this issue but unfortunately had already moved to a different…

Spring Alt.Net Pledge Drive

April 23, 2008 I just wanted to take a moment out of our regular blog-cast to tell you that Alt.Net is supported by listeners readers like you. Smart people work really hard volunteering all their free time and energy to put out great open source software for our community. We need to keep these people coding not wasting their time drumming up consulting gigs or looking for jobs. Just wanted to read off a couple names of people that just contributed. Thank you Ray Houston for donating. You must have deep pockets with that sir name. Oh, and I see Chad Myers donated he is always a regular contributor. I see that Anders donated. Thanks Anders for your donation and for C# we all love it. You TOO can make a difference and if you act right now we have a matching pledge…

Moving the Dovetail Twitter Integration To Jabber/XMPP

April 22, 2008 Quickly after creating a Twitter Integration with Dovetail I ran into rate limiting issues using Twitter's API. Twitter currently only allows 70 requests per hour. Here is their guidance... If you are developing an application that requires more frequent requests to the Twitter API, please contact us and we'll see what we can do.  We maintain a white list of known-good screen names who have high-volume API needs.  We also suggest researching Jabber/XMPP if your application needs to deliver a near-realtime experience (for example, a bot that replies to direct messages). I emailed Twitter support asking nicely for higher volume API usage but still haven't gotten a response. Then I realized that if we want to release this Dovetail/Twitter integration to our customers we it need to work within the rate limiting guidelines, so I listened to Twitter's guidance and…

Pairing Your Twitter Account With a Jabber Client

Twitter will send direct messages and updates for friends you follow who have notifications turned on to a device. Cool. Better yet a device can be a mobile phone (SMS) or an Instant Messaging account. The goal of this post is to show how to sending and receive messages to Twitter using a Jabber device. To do this we will be using the excellent IM client Digsby which it turns out has excellent Jabber support. Here is what we will be doing. Creating a Jabber ID in Digsby. Adding the Twitter Jabber ID as a contact for your new Jabber ID. Pair your new Jabber ID with your Twitter account. Testing it out. Creating a Jabber ID To create a Jabber ID using Digsby click on Add IM Account in your preferences. Fill in the Jabber Account form and one…

Creating A Twitter Integration

April 15, 2008 I have been doing some work using Twitter as a notification mechanism for case events taking place in Dovetail CRM. I also wanted to expose an API of sorts driven by Twitter direct messages which would allow support agents to work on cases via Twitter. I created a twitter account for Dovetail and went crazy. To the right is a screen shot of my favorite twitter client showing me being notified of a case created by a customer and accepting it via Twitter. This goal of this post is a brain dump what I have learned so far on my journey into Twitterland. Twitter? - what is this Twitter you speak of Twitter is a micro-blogging service on which you can post short messages called tweets. People usually post what they are up to, thinking about, and sadly what clothing…

Creating Windows Installers: Deploying Monorail Web Applications

March 7, 2008 I recently built a small Monorail application and used my Wix-fu to build an installer and I wanted to share. Not really much to add to my previous post about building installers for web applications except that when you are deploying a Monorail (rc3) application you need to register the .castle extension as something that IIS should care about. This is pretty easy to do. Take a look at this snippet of Wix XML:Adding a handler for an ISAPI extension to the web application is just a matter of telling Wix about where it is. The ASP.Net ISAPI extension lives at the root of the .Net framework's folder. The first thing we do is use a <RegistrySearch> to find where the .Net framework lives and put that information into a property.<Property Id="NETFRAMEWORKROOT" Secure="yes"><RegistrySearch Id="NetFrameworkRoot" Root="HKLM" Key="SOFTWAREMicrosoft.NETFramework" Name="InstallRoot" Type="raw"/></Property> ... <Component…

Can we help you purchase more software?

February 13, 2008 As I mention in a previous post we are using Campfire a lot these days. I just asked Doc to add an account for our Dovetail to Campfire integration and it caused us to brush up against our user limit. Campfire lets you know this in a non-invasive and graceful way. As an administrator you may not like the idea of all your users seeing a message like this. But it works. Users know to expect issues if more people login and they can email the application administrator if necessary. Also making this limitation visible likely helps Campfire sell more software. At Dovetail Software our user licensing has the idea of a grace license limit. If you hit your user limit on Dovetail CRM we can allow a few more users into the system so that you have time to…

Creating Windows Installers Using WIX: The Journey Begins

December 7, 2007 We all use them. Installers. They help get that sexy, shiny, new software safely onto our PCs and into our lives letting us frolic and play. Later, if things go sour or if the thrill is gone the installer is still there to reverse the process to help arbitrate the separation and keep what's yours intact. Recently I needed to make an installer for a web application product we have called Bolt. Dovetail's own Gary Sherman created Bolt and it was good. It is a great too if you are a Clarify developer. Exciting things are in store for Clarify users regarding Bolt but I can't steal that thunder. Creating the installer for Bolt made me realize I have a lot locked up in my head about deploying software. This is the first in a series of posts that are…

Trailing wildcards fail to %MATCH% text At the end of the field on Oracle9i

December 4, 2007 I have some software that generates SQL we support multiple versions of Microsoft SQL Server and Oracle. I ran into a failing test on Oracle today that was totally unexpected. [Test] public void Case_History_containing_a_queue_tag_should_be_destined_for_that_queue() { string queueName = "SUPPORT"; string caseHistory = String.Format("case is in queue {0}", queueName); string caseIDNumber = "275"; SetCaseHistoryForCase(caseIDNumber, caseHistory); string ruleText = String.Format(@"(case_history contains '{0}') -> ""{0}""", queueName); string[] queues = AutoDestRule.RunRule("case", ruleText, caseIDNumber); Assert.AreEqual(1, queues.Length); Assert.AreEqual(queueName, queues[0]); } The Gist There is a bit of noise in the test but the gist is that RunRule() generates and executes the following SQL: Here is what the database looks like for table_case: id_number case_history "275" "case is in queue SUPPORT" The test passes in Microsoft SQL Server but fails against Oracle. There is no difference in the SQL being generated between databases. I fired up Query…