Create Custom Dictionaries For Mac OSX

Over the last couple of months I’ve been chipping away at creating an add-on dictionary for the Dictionary application on Mac. I wanted to create a .

Information on how to create such dictionaries was not all that easy to find. So I thought I’d share what I found in case it helps some else.

Apple’s Dictionary Services Programming Tutorial

First up, have a look at this tutorial on Dictionary Services Programming over at developer.apple.com. It provides all the information one needs to get started. You can also of this tutorial.

Template Files for Dictionary

One thing that the tutorial assumes is that you have the template files for dictionary development are. First challenge was to figure out where they were. I found that they are installed with XCode at: /Developer/Examples/Dictionary Development Kit. If you don’t have XCode installed, then you can download the this zip file that contains the .

The Make Command

Before you customize anything in these files, simply run ‘make’ command in directory where you unzip these files. It should create a dictionary called “My Dictionary”. If you move this dictionary to /Library/Dictionaries or ~/Library/Dictionaries, it will start showing up i the Dictionary app.

There are a couple of other things that the make command can do:

  • make clean : cleans older builds
  • make install : installs the created dictionary to ~/Library/Dictionaries folder
  • make : creates the dictionary

Change the XML and Info.plist

Now add the stuff you want in the XML that will be used to create the dictionary. You will have to generate the XML with the appropriate structure and content. Also modify the plist file as required. Run “make” to create your dictionary.

A Big Gotcha – Cached Dictionaries

On thing that really had me flummoxed was that despite making a new dictionary, the Dictionary app was not reliably showing all the changes I expected.

This took a while to figure. There is a bunch of caching that comes into play if you are creating new builds of the dictionary. Cached versions show up and throw you off the track.

So I had to write this . Make sure that you

  • make the script executable before running it, and
  • quit the Dictionary app before you run

I found that I had run this each time I made a change to the XML file.

A downside to doing this is that it resets all Dictionary preferences. So when you start the Dictionary app after running this script, you have go to Preferences and turn on the dictionary you are working on. A bit painful, but not such a biggie.

My Development Workflow

So as I was making changes to the XML file with data, I was running the following commands:

  • ./clean.sh (cleans out all dictionary caches)
  • make clean (cleans out older builds of the dictionary)
  • make (makes the dictionary)
  • make install (installs the dictionary)

Example Dictionary: CFWheels

If you want to see an example of the dictionary that I created, check out:

Look at the XML and Info.plist files.

That’s it… go and have fun creating dictionaries now!

CFWheels Dictionary for Mac OS X

" >Working with any framework involves learning many things like file structure, information flow, etc. One of the most critical aspects of being proficient in a framework is how well one has learned the API. And this holds true of CFWheels as well.

CFWheels provides a simple API that one has to refer to time and again as one learns and develops with it. The CFWheels website has a great section on which lists various API calls. And this helps the process of learning/working with the framework. But…

There were a couple of occasions when I was offline and a few when my connectivity not too good. Under those circumstances it was proving a little slow to figure out various API calls.

So I was browsing around a few months back and came across the . That got me thinking that I should probably do something like that for CFWheels. The nice thing about a dictionary is that it is a desktop application, so it is very quick, has a very nice search, and most importantly, integrates very well with native Mac apps.

So here it is!

Download:

Installation is simple.

  • Unzip the zip file
  • Copy CFWheels.dictionary to either /Library/Dictionaries OR ~/Library/Dictionaries.

Fire up the Dictionary app, and you should see the CFWheels dictionary in the list of dictionaries available.

A few tips:

  • Once the CFWheels dictionary is installed, you can search for the word “api” and it lists a page where all CFWheels API calls are available. You can select what you want.
  • If you use a native Mac app like Panic’s Coda or TextMate the Mac dictionary service integrates beautifully with them. What that means is that you can select a word and right-click it and then “Look Up in Dictionary”. It opens dictionary and information about the text you selected.
  • Setup a keyboard shortcut (through System Preferences > Keyboards > Keyboard Shortcuts) for “Look Up in Dictionary” so that you can fire it up through keyboard.
  • If you want you can enable/disable various dictionaries through the Preferences menu of the Dictionary app. I find that to be quite handy.

Have fun! And do drop me a line if you like it! Or if you find any bugs/issues.

Update: Source Available on GitHub

The source for the dictionary is now on GitHub:

Hello WordPress!

So I’ve finally given in, I’ve switched my blog to run on ." >

This is the fourth time in six-odd years of blogging that I’ve had to change the blogging software.

For the last couple of years, my blog was been running on . It is really nice and I quite liked the fact that it was running on ColdFusion. More important, it was nicely customizable.

Prior to MangoBlog I had been using , and had found a bit restricting in terms of theme support etc. MangoBlog made it easy to re-theme the blog, plus has a nice plugin architecture.

I had toyed with moving to WordPress an year or so back. But wasn’t too convinced. But when I re-evaluated it in detail last month, I was struck by its maturity and the dizzying number of really useful plugins and themes.

This weekend I gave it a whirl and setup a dev instance on an Amazon Micro instance. It didn’t take too long for me to decide that the time had come to switch.

The process of migration from MangoBlog to WordPress was quite simple.

I had to write a couple of simple scripts that gathered data from MangoBlog tables and inserted it into WordPress tables. I also set up a couple redirects so that old links continue to work. And I updated the Feedburner feed details so that the feed from the old blog points to the feed from the new blog.

And here it is! Shiny and new with a decent theme!

While moving the blog across, I decided to do away with the many categories I had in the previous blog. I’m going to now categorize posts based on what broad areas like “Software Development”, “Photography”, etc. This reflects the change in the nature of my blogging. Till now I’ve been quite focused on tech blogging. But I’m going to broaden the scope a bit. And I’ll be using tags to categorize posts as more detailed mechanism of categorization.

The other major change I made was to change the permalink structure of blog entries. It is now extremely simple and minimalistic — server name followed by the slug (e.g., http://nagpals.com/hello-wordpress).

The more I’ve played with Ruby on Rails, Grails, and CFWheels, the more I’ve become a fan of simplicity in URIs. For me they are windows into an application — they give a sneak peak on how well an application is structure. I even go a step further and say that if you look carefully, they give you a view of the mind of the application developer! But more on that in another blog post.

For now, the migration from MangoBlog to WordPress is over. It was very smooth and painless. And I’m quite happy to be getting back to blogging again!

The RSS Feeds for the blog are:

  • Feed for the whole
  • Feed for just the

If you don’t want to be bothered with other ramblings, just subscribe to the Software Development category RSS.

Do drop me a line if you have any questions/issues with the new blog.


Shado and ColdFusion Workshop

" >" >I’m conducting a Shado/ColdFusion workshop in the last week of January 2011 in Auckland, New Zealand

It is going to cover things like:

  • Developing Shado templates
  • Developing applications using the Shado framework
  • Hidden secrets in Shado
  • Advanced ColdFusion concepts
  • Some Railo tricks/tip

If there are aspects of Shado that you’d like to know more about, do let me know and I can try and cover those areas.

I am still in the process of figuring out the full agenda, and exact dates. But it is going to be a 2-3 day event, in Auckland in the last week of January 2011.

Drop me a line if you are interested in participating.

It’s going to be a very hands-on, practical event and will be loads of fun (as much fun as sitting in a room with other nerds like me can be!)

My CFWheels Presentation at CFObjective ANZ

" >Had a great time at CFObjective ANZ down in Melbourne.

I presented on CFWheels, a beautiful ColdFusion framework, inspired by Ruby on Rails.

Mine was the first presentation on day one, and in a way it worked nicely as I could then enjoy others with full attention. This is what I covered in the presenation.

CFWheels is a new-ish ColdFusion (CF) framework inspired by Ruby on Rails.

With its emphasis on convention over configuration, simple code organizing principles, a beautiful Model-View-Controller (MVC) architecture, and a pretty neat Object Relational Mapping (ORM) framework, CFWheels brings agility into applications written in CF.

In this talk, Indy takes you through the building blocks of a CFWheels application. He then shares his experience of learning and developing with CFWheels — an experience he thinks every CF developer should go through.

Come, have a listen, and see how CFWheels brings agility into CF development. And how you end up writing beautiful code, while having loads of fun as you develop.

I’ve added the presentation to Slideshare. .