Greasemonkey script Quickcamp adds keyboard shortcuts to Basecamp.
We use Basecamp for our keeping track of our professional service engagements, and as you can probably tell from my recent posts, I'm quickly becoming a huge fan of GreaseMonkey.
So Quickcamp makes a nice add-on to for my environment.
Cool stuff.
I recently responded to a question about adding a Save button to the CR (Change Request) form in Clarify. Dusting off my Clarify knowledge, I gave some details about how to simply copy the Save button from the Additional Features form. I'm sure not everyone knows about these forms. We wrote about this years ago, in one of our newsletters, but I figured it couldn't hurt to share it again here.
Additional Features Forms
There are three forms in the Clarify Classic Client that are never displayed in a Clarify client session, but which are extremely valuable. Clarify has placed a variety of controls on these controls that can be copy and pasted directly on to specific forms in Clarify, and they will work for you automatically.
There are two forms provided for ClearSupport, and one provided for ClearQuality.
| Form Number | Clarify form you can paste controls to | Description |
| 415 | 411 (or 775 for Service Manager) | Controls to enhance the New Case Form |
| 422 | 420 (or 776 for Service Manager) | Controls to enhance the Edit Case Form |
| 300 | 337 (New CR) and 334 (Edit CR) | Controls to enhance the New and Edit CR Forms |
You can view these forms using UI Editor, and then simply copy & paste the controls from the Additional Features Form to your Case or CR form.
New/Edit Case Enhancements
Virtually all of the controls on forms 415 and 422 are the same. There are only two buttons (one on each form) that cannot be used on both the New and Edit Case Forms. In addition, these controls can be pasted to any of the default tabs of those forms. Each of the enhancements are described in turn.
- Part Selection Controls. On the default New/Edit Case forms, you can optionally associate a case against a site_part (an installed piece of equipment). This is a very useful feature, but there are times where customers wish to link cases to part numbers and revisions, but not to specific site_parts. Many customers don’t even use site_parts, and wish to have their cases only linked to part numbers and revisions.
There are four ways in which these controls can be customized on your forms:
• Only use site_parts (the default mechanism in Clarify)
• Only use parts/revisions
• Allow each case to either be related to a site_part OR a part/revision
• Cases cannot be linked to site_parts OR to parts/revisions
PD 02085 (and a chapter in the old System Administrator Guide) describes this process in detail.
- Quick Close. This button, if placed on your New or Edit Case forms allows you to close the case (once it has been saved) without presenting the Close Case form. All of the times/amounts are totaled, just like the Close Case form, but you may not edit any of the data (such as the resolution code). This is very helpful for the “one and done” cases.
- Fast Close. This button is exactly like Quick Close, only the subcase times/amounts are not totaled in to the Close Case record. This option is not generally recommended.
- Edit Contact/Site. There are two buttons you may paste to either the New or Edit Case forms. On the baseline forms, Clarify presents you with a “…” more info button for more information about the contact or the site. If you press those buttons, the Contact or Site forms are presented, but in read-only mode. The Edit Info buttons allow you to present the Contact and Site forms, but in read-write mode. Some customers put both the More Info buttons and the Edit Info buttons on the forms, and some simply replace the More Info buttons with the Edit Info buttons.
- Edit Alt Contact. This button will allow you to view the alternate contact, and to edit it.
- Find Caller New (only for the New Case Form). This is an alternate version of the Find Caller flow, which allows for additional customization.
- Next Case (only for the Edit Case Form). This button, when pressed, performs a “Find Case By ID” operation. It posts the Find Case By ID form for you to enter a case or subcase ID number.
New/Edit CR Enhancements

Form 300 provides several controls you can cut and paste onto the New CR form (337), or the Edit CR form (334). They include:
- Discard. This button, if pressed, will close either the New CR or Edit CR forms. It is like the Done button,
but it does not check to see if data is dirty. It will exit, even if there is unsaved new data on the form.
- Save/Done. This button, which can be placed on both the New and Edit CR forms, saves any unsaved data
(without a confirmation dialog), and exits the form.
- Save. This button can be placed only on the Edit CR form. It allows you to save changes to the CR without
having to press the Done button.
Summary
And there you have - a bit more arcane Clarify knowledge picked from the depths.
Hope this helps.
I commonly take screen-shots of our web applications, and use them here within my blog. Occasionally when I do this, I want to hide or obfuscate certain pieces of information. For example, I may want to share a screenshot of a case from one of our production systems, or I may have some data that I use in my dev system, that isn't exactly "professional", so I wouldn't want the outside world seeing it. Or perhaps even a URL that I don't want to expose. I used to do a bunch of work, and jump through some hoops in order to make everything professional, hide data, etc. But using Ubiquity, its really easy to change the page on the fly - no programming necessary.
For example, lets say that I start with this page:
I then invoke Ubiquity (ctrl-space), and type edit-page
I can now change the text, delete text, add new text, etc.
I can change the "case" to an "incident", change all of the names, change the status, etc.
Once I'm done, I invoke Ubiquity (ctrl-space), and type stop (short for stop-editing-page).
Here's the result: the exact same page, only edited:
Notice that much of the text has been changed, including names, phone numbers, email addresses, etc.
What I didn't do was write or change any code, add anything new to the database, write any HTML, etc.
I simply edited the web page like it was a text document.
I think this is also useful for quickly making some text or terminology changes, and allowing your team, customer, boss, etc. to envision these changes, and all without lots of development work.
I love Firefox and all the available extensions, including Ubiquity!
What do you think? Have you found other interesting ideas for using the edit-page capabilities?
One of the things I've wanted to do for a long time is have the ability to add comments on objects within the Clarify/Dovetail system. As a specific example, I've wanted to be able to add comments to a solution. For those not versed in Clarify/Dovetail speak, a Solution is essentially a KnowledgeBase (KB) article.
By allowing comments, I (and others) can (hopefully) enhance the information that is within the Solution.
For example, consider a KB article that is available on the web, such as a Microsoft KB article, or a Dovetail KB article. Now, lets say that I use the information in that article, but I run into a bit of a snag, discover another tip or workaround, or perhaps I've even found something wrong in that article. What can I do? I'd like to be able to leave a comment, improving the information, making it easier for the next person who needs to use this information.
First Idea
My initial idea was to write some code that would allow comments to be added, edited, moderated, etc. These comments would be stored in the Clarify/Dovetail database. It would be nice to be able to have threading, pagination, and sorting. Perhaps even add support for email notification of new comments. Perhaps an RSS feed of the comments. Perhaps allow comments on almost any object within the system, more than just solutions. And then I would want to add this code to Dovetail Agent, Dovetail SelfService, Dovetail Mobile Agent, etc. None of it would be overly hard to do, it would just take some time.
Second Idea
Hasn't someone already done this work for me? Yes, indeed they have. JS-Kit Comments.
From the JS-Kit website:
The Comments service provides a full-featured commenting engine for your web site. It is implemented as a lightweight widget and is incredibly easy to install on any static or dynamic web page.
Benefits for visitors:
- no registrations to fill, no logins to forget
- threading, pagination and sorting of comments
- graphical avatars
- safe HTML support
- "karma" for each comment
- optional tracking of replies via email
- automatic interface language selection
So, with just a tiny bit of code, I can add comments to any page that I want.
Away we go...
Adding comments to Solutions within Dovetail SelfService
Just a tiny bit of code to the solution page:
<h2>Comments for this solution:</h2>
<div class="js-kit-comments" path="/solution/<%=solution%>" ></div>
<script type="text/javascript" src="http://js-kit.com/comments.js"></script>
And here's what we get:
Clicking the Leave a Comment link allows users to add a new comment:
Adding comments to Solutions within Dovetail Agent
On the Solution page within Dovetail Agent, I created a new tab for the comments and added the JS-Kit comments code:
<div class="clsTab" id="tab_comments">
<div class="js-kit-comments" label="Leave a Comment" paginate="10" path="/solution/<% =SolnId %>" ></div>
<script type="text/javascript" src="http://js-kit.com/comments.js"></script>
</div>
I also gave it a bit of styling:
<style type="text/css">
.js-poweredBy, .js-commentTool{display:none;}
.js-kit-comments{height:580px;width:550px;overflow:auto;}
.js-CreateComment { width: 400px; }
.js-CreateComment textarea { width: 400px; }
.js-commentControl a{
font-style:normal;color:blue;padding:5px;
}
</style>
And here's what we get:

Here's what it looks like upon clicking the Leave a Comment link:
Notice that the same comments show up for this solution (solution 24) whether its displayed in Dovetail Agent, or in Dovetail SelfService. The only thing I had to do to make this work was set the path property so that its the same:
<div class="js-kit-comments" path="/solution/<% =SolnId %>" ></div>
JS-Kit already has support for:
- WYSIWYG rich text editor
- video comments
- avatars
- moderation
- spam filtering (using Akismet)
- sending email on new messages
- RSS feeds
- and a bunch more...
Here's an example of an RSS feed from the solution above:
Pretty slick.
As I've said before, Its amazing what one can do with powerful (and free!) tools.
Totally rockin announcement today: Microsoft will be shipping jQuery with Visual Studio.
If you follow the Dovetail Developers, you already know that we're big fans of jQuery at Dovetail.
ScottGu has details on his blog about this announcement, as does John Resig. Scott Hanselman also has a good write-up.
From ScottGu's post:
We will distribute the jQuery JavaScript library as-is, and will not be forking or changing the source from the main jQuery branch. The files will continue to use and ship under the existing jQuery MIT license.
We will also distribute intellisense-annotated versions that provide great Visual Studio intellisense and help-integration at design-time.
The jQuery intellisense annotation support will be available as a free web-download in a few weeks.
We will also extend Microsoft product support to jQuery beginning later this year, which will enable developers and enterprises to call and open jQuery support cases 24x7 with Microsoft PSS.
Not only is this awesome for us developers, but its also cool to see Microsoft embracing a library that they didn't invent.
Rockin!
As I mentioned in a previous post, I've started using Dovetail Mobile Agent for my day-to-day case activities. Its still early in its project lifecycle, so it doesn't have all of the bells and whistles (yet), but that's OK with me. For example, you can Log an Email, but it doesn't have the capability to automatically populate a signature within the email. Since this is something that I wanted now, here's how to make that happen, without modifying the application itself.
Ubiquity
In a previous post, I detailed my first Ubiquity command for working with Dovetail Mobile Agent.
Now, we'll add a new command for inserting my signature.
The Ubiquity code:
CmdUtils.CreateCommand({
name: "signature",
icon: "http://www.dovetailsoftware.com/favicon.ico",
author: { name: "Gary Sherman", email: "gary@dovetailsoftware.com"},
description: "Inserts my signature into the selected area.",
preview: function( pblock, input) {
pblock.innerHTML = "Inserts my signature into the selected area.";
},
execute: function cmd_signature() {
var sig = "\n\n\
Regards,\n\
Gary\n\n\
Gary Sherman\n\
Dovetail Software\n\
gary@dovetailsoftware.com\n\
512-610-5466\n\
http://blogs.dovetailsoftware.com/blogs/gsherman/\n\
\n\
This message sent via Dovetail Mobile Agent";
CmdUtils.setSelection(sig );
}
})
I simply type Ctrl-space, then signature (or even just enough of the word to be unique, such as "sig"), and the Ubiquity console shows:
And then my signature is filled into the element I've selected:
GreaseMonkey
The Ubiquity script is cool, but I still have to invoke Ubiquity (Ctrl-Space), and then type signature. I'd like to have this done automatically.
In a previous post, I detailed How to use GreaseMonkey to add my own JavaScript to a web application.
I'll do a similar thing here, using GreaseMonkey to fill in my signature automatically.
The GreaseMonkey script:
function letsJQuery() {
//Insert signature
$("#log-email-form #message").val(signature());
//Set focus to the beginning of the log email message element
if (document.getElementById("log-email-form")){
document.getElementById("message").focus();
document.getElementById("message").selectionStart=0;
document.getElementById("message").selectionEnd=0;
}
}
function signature() {
var sig = "\n\n\
Regards,\n\
Gary\n\n\
Gary Sherman\n\
Dovetail Software\n\
gary@dovetailsoftware.com\n\
512-610-5466\n\
http://blogs.dovetailsoftware.com/blogs/gsherman/\n\
\n\
This message sent via Dovetail Mobile Agent";
return(sig );
}
Now, when I use Dovetail Mobile Agent to Log an Email, my signature is automatically filled in, without having to type anything. Much better.
Summary
Remember, what I did above was enhance the application, without modifying the application itself - all using free tools, plus just a little bit of Javascript.
Rockin!
I've started using Dovetail Mobile Agent for my day-to-day case activities. Its simplicity and ease of use really pleases me.
Even though it was targeted as an app for mobile devices, it works just as well using normal browsers on desktops & laptops.
However, its currently styled for mobile devices, with their limited form factor. We may get to the point of creating different stylesheets for different browsers, but we're just not there yet. But I'm impatient, so last night I decided to take matters into my own hands. The default styles look good on a mobile device, but could be better on a desktop.
Adding my own styles with Stylish
My browser of choice is Firefox. (I am digging Google Chrome, but its current lack of plug-ins keeps it from being my default browser).
One of the extensions available for Firefox is called Stylish.
Stylish is a Firefox, Thunderbird, Flock, SeaMonkey, Mozilla Suite, and Songbird extension that allows easy management of user styles. User styles empower your browsing experience by letting you fix ugly sites, customize the look of your browser or mail client, or just have fun.
Using Stylish, I can style Dovetail Mobile Agent so that it looks much better on a desktop browser.
Here's how it looks on a Mobile Browser:
and with its default styles on a normal browser:
and after a little bit of my own styling:
UPDATE: I've uploaded the actual Stylish CSS code here: http://blogs.dovetailsoftware.com/forums/thread/11477.aspx
Adding my own JavaScript with Greasemonkey
One of the things that CSS doesn't currently allow for is alternating row styles. For example, I wanted every other row of a list of items to be a different color. This is often referred to as Zebra Striping. (CSS3 allows for this, but its browser support is pretty limited at the moment).
However, this is pretty easy using jQuery (my JavaScript library of choice). So how do I inject my own JavaScript into someone else's application? Another Firefox extension to the rescue. This time, it's GreaseMonkey.
Greasemonkey is a Firefox extension that allows you to customize the way webpages look and function. Hundreds of scripts are already available for free. And if you're the tinkerer sort, you can also write your own.
I'm a tinkerer, so away I go.
First, back in Stylish, I define a new style, for the even rows of a table:
.even{
background-color: #eee !important;
}
Then I use some jQuery code to set this style on every other row of case listings, case history, and search results:
$('#listings .case-listing:even').addClass('even');
$('.history:even').addClass('even');
$('.search-result-title:even').addClass('even');
$('.search-results-summary:even').addClass('even');
Getting jQuery itself into play.
Dovetail Mobile doesn't currently include the jQuery library, so I have to somehow get this library loaded. Luckily, someone's already done this, so I just followed the example:
// Add jQuery
var GM_JQ = document.createElement('script');
GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js';
GM_JQ.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(GM_JQ);
// Check if jQuery's loaded
function GM_wait() {
if(typeof unsafeWindow.jQuery == 'undefined') { window.setTimeout(GM_wait,100); }
else { $ = unsafeWindow.jQuery; letsJQuery(); }
}
GM_wait();
// All your GM code must be inside this function
function letsJQuery() {
$('#listings .case-listing:even').addClass('even');
$('.history:even').addClass('even');
$('.search-result-title:even').addClass('even');
$('.search-results-summary:even').addClass('even');
}
Notice that I'm actually loading the jQuery library from Google's AJAX Library. Thanks Google!
The original layout:
Now with the rows shown in alternating colors:
Firebug
When trying to figure out the specifics of a web application, you can simply View Source, or you can use a better tool. Firebug is my tool of choice here. Yep, another Firefox extension.
Firebug integrates with Firefox to put a wealth of web development tools at your fingertips while you browse. You can edit, debug, and monitor CSS, HTML, and JavaScript live in any web page.
Firebug made it super easy to inspect, edit, and tweak the HTML and CSS. If you're a web developer, I would definitely recommend checking out Firebug. Firebug made it super easy to inspect the application, so that I could then make changes using Stylish & GreaseMonkey.
Its amazing what one can do with powerful (and free!) tools.
Rock on.
I received a question today about using Windows authentication with Clarify on SQL Server.
We wrote about this years ago, in one of our newsletters, but I figured it couldn't hurt to share it again here.
Unified Login
Unified Login (sometimes referred to as Integrated Windows Security) is a very useful feature built in the base Clarify product. It is only available for Windows clients, and only if the database is Microsoft SQL Server. But if you have this configuration, you might consider Unified Login.
Unified Login allows you to use your domain login (the login credentials you provided when you logged in to Windows) to log in to the Clarify system. It requires your domain user name be the same as your Clarify login name. If it is not, you cannot use this feature. When you use the feature, Clarify will automatically log in to the database for you. It is important to note the domain password and the Clarify password do NOT have to be the same. Only the user names must be the same.
To use Unified Login, you must do the following:
1. Be using a Windows client.
2. Be using MS SQL Server as your database.
3. Configure your database (in Enterprise Manager) to use Integrated Security. There is full documentation for this in SQL Server.
4. Add the auto_login line in your clarify.env file (auto_login=TRUE), but do NOT add your db_password line (db_password=<your password here>). When Clarify sees the auto_login line without a password, it knows to attempt Unified Login. Note that you must also have the login_name, server_name, and db_name parameters set in the clarify.env file.
Note: there are potential security issues with this. If you do not set up your domain security correctly (if you allow individual users to create new login IDs on their machines), you can have a security breach. For example, suppose that Joe and Fred both have login IDs in Clarify. Further suppose that Fred can create new users on his machine. If he creates one named “Joe” (with any password, remember that Unified Security does not validate passwords), then he can log in to Clarify as Joe. So it is crucial that if you use this feature that you properly set up your domain security.
And there you have - one more piece of arcane Clarify knowledge picked from the depths.
Hope this helps.
We're considering a change to Dovetail EmailAgent, and wanted to float it by our users to see if anyone had any concerns or objections.
Currently, when EmailAgent adds more information to a case, it actually performs a Log Note action. Clarify has a "Email In" activity, but we don't currently use that. This is odd.
EmailAgent also creates attachments for any files that were attached to the email.
One of the issues is that there is no relationship between the notes (notes_log) and the attachments (doc_inst), so it can be difficult to determine exactly which attachments were for which email.
Why Log Notes?
History, mostly.
We don't have an "Email In" API in ClearBasic - which is the language that our original email processing engine was written in (it was then called SuperEmailClerk). So, the "Log Notes" API was used instead.
When SuperEmailClerk was ported from CB to .NET, the functionality stayed the same, including the use of the call to Log Notes.
We also don't currently have an "Email In" API in the fcSDK.
Proposal
We're proposing to create an "Email In" API within the fcSDK, and modify EmailAgent so that it uses this "Email In" API rather than "Log Notes".
This will actually store the contents of the email in the email_log table, as opposed to the notes_log table.
In addition, the email_log table already has a relation to doc_inst.
So, we will fill in this relation, thus all attachments (from that email) will be properly related to the email itself.
What will this affect?
Its possible that this will affect business rules that are setup to fire on "Log Notes", in particular those that are meant to capture Log Notes created by EmailAgent.
These business rules would need to be changed to include a start event of "Email In".
Concerns?
This should only be a minor issue (at worst) for our customers, but before we made this change, we wanted to float it past our users, and see if anyone has any concerns or objections.
Please leave your comments here, or you can also email me: gary [at] dovetailsoftware [dot] com.
I was pretty excited to play with Ubiquity, a new Firefox extension that lets me think and act in a more natural language with my PC.
From the Ubiquity Tutorial:
Ubiquity is an experimental Firefox extension that gives you a powerful new way to interact with the Web.
You're used to telling Firefox where you want to go by typing Web addresses into the URL bar.
With Ubiquity installed, you'll be able to tell Firefox what you want it to do by typing commands into a new Ubiquity input box.
The commands that come with Ubiquity are just the beginning: anyone can create new commands and share them.
Some of the built-in commands include:
- add-to-calendar
- calculate
- define
- ebay-search
- email
- flickr
- google
- map
- search
- tinyurl
- weather
- zoom
After playing with the build-in commands, I was ready to try and write my own.
Naturally, I wanted to tie this in with our Dovetail suite, so I came up with a simple example: Quickly view a case in Dovetail.
Ubiquity commands are written in JavaScript (and Ubiquity can even use jQuery - which I'm a huge fan of).
Here's my first Ubiquity command:
CmdUtils.CreateCommand({
name: "case",
takes: {"caseId": noun_arb_text},
icon: "http://www.dovetailsoftware.com/favicon.ico",
author: { name: "Gary Sherman", email: "gary@dovetailsoftware.com"},
description: "Displays a case in the Dovetail system.",
preview: function( pblock, input) {
pblock.innerHTML = "Will display the summary for case number: " + input.text;
},
execute: function(caseId) {
var url = http://demo.dovetailsoftware.com/mobile/Cases/Summary/ + caseId.text;
Utils.openUrlInBrowser(url);
}
})
To execute a Ubiquity command, type Ctrl-space, then start typing your command. It shows the commands, along with the parameters needed.
For example, if I just type case, here's what is shown:
If I type case 3:
Click enter, and up pops the web page, showing the case;
Notice here that I'm using the new Dovetail Mobile Agent application. Although its intended purpose is for mobile devices, it works super on full-size browsers as well. If I wasn't already logged in to the Mobile Agent, it would prompt me to login, and then automatically take me to the requested case page.
Using Selected Text
Ubiquity also knows how to deal with the selected text on a page. So if I have a case Id number shown in a browser window (such as in Campfire), I can simply highlight the case Id number, and type case this, it fills in the selected text, so I don't even have to type it:
Ubiquity is pretty bad ass. Its just in its infancy, so it will be interesting to see where Mozilla continues to take it, as well as how the community extends the list of available commands.