Writers Assistant

10/15/2005 09:06:35



I have recently been working on a document creation workflow centered around OmniOutliner and Markdown. The idea is to make it easy to organize and write documents of varying length with minimal attention paid to formatting details. The tool should take care of most of the presentational markup; the author should be free to focus on content.

So far, so good. But one issue that has come up is how to keep track of various notes and scraps of information that are needed when writing more complicated documents. Back in school, I was taught to use a collection of index cards where each card contained one thought, as well as notes indicating the source document, page number, etc. This was useful for being able to reorganize your notes while writing, but hardly state of the art today (HipsterPDA’s notwithstanding).

This application, Writer’s Assistant, is designed to blend into this system as a tool for storing various notes, and making it easy to locate a particular thought when you need it.



Where do I get a copy?


What does it do?

Writer’s Assistant is designed to manage scraps of information (Notes) with minimal required formatting. A note consists of:

  • Title
  • Tags
  • Body

The title is pretty self-explanatory. The tags are used to help you organize your notes. You can use as many or as few tags as you like. You can use tags to indicate content, themes, sources, status, or whatever else you like. Simply enter your tags in the field, separated by spaces (tags cannot include spaces). The software keeps an alphabetized list of all of your tags in the Tag Drawer (more on that to come).

As for the body, you can use it to store plain text or formatted text, images, URL’s, etc. A plain text copy is also maintained, to allow you to easily search on this field as well. Drag and drop is supported within the body as well.

How do I search?

There are several ways of searching the database.

First, there is a searchfield in the upper left corner. Simply start typing, and your list of Note titles in the table on the left side will update to show you which notes match your query. You can type as many or as few search terms in the box as you like, and only documents that match all of them will be displayed. The search matches against the title, tags, and body by default, but you can change that with the drop down menu.

Second, you can simply scroll through the left-hand table until you find the title you are looking for. Not as high tech, but useful nonetheless.

Third, you can open the tag drawer. This drawer contains a table of all of your tags. By clicking on tags, you are basically performing a union search - in other words, any note that contains one or more of the tags you have highlighted will be displayed. This is useful for finding notes you might not have thought of initially, as they only match part of your request. If you decide that you want to perform an intersection search (notes that match ALL of your selected tags), you can then type those tags into the searchbox. You’ll notice that as you limit the available notes, the list of available tags will be updated accordingly to help you narrow down your search easily.

Where is my data stored?

Your notes are stored in your Library:

~/Library/Application Support/Writer's Assistant/Writer's Assistant.xml

Rather than using a document-based approach, where you have multiple documents that you have to search, I decided to keep all data in the same document. If you absolutely must have multiple documents, it would be relatively easy to change the project to a document based application in Xcode to accomplish this, but I am not interested in doing this at this time.

Also, the notes are currently stored in an xml file. I suppose that if you have a large database, or include lots of pictures in your notes, that it might be more efficient to use a SQL file format. This can also be changed easily within Xcode.

What next?

Things I would like to include in future versions:

  • Autocompletion of tags in the tag field

  • Autosave the data periodically

  • Consider an option to change the default behavior for the tag drawer to be an intersection search, rather than a union search (low on my list)

  • Consider a “source” field for tracking the sources used for various notes. It would be nice if that was connected to a bibliography tool (Bibdesk, Sente, etc). We’ll see.

  • Add a service to allow you to highlight text and automatically create a note with the highlighted text.

  • Consider something like Tagyu to automatically suggest tags based on content. There is now a REST API that could be used. Even better would be to have a similar algorithm that suggests tags based on what is in your own database.

  • Add a count to the tag drawer that indicates how many notes are tagged with each tag - this would update as your search was updated. Might seriously slow down performance on bigger files…. But then again, Core Data is pretty fast.

Known bugs

  • When first launched, the tag drawer is empty. Until you edit a note, or perform a search, the tag drawer will not be updated. This is apparently an artifact of the way I link the behind the scenes Core Data stuff together, and I have been unable to get around it. Any help would be appreciated!

  • For some reason, Writer’s Assistant occasionally becomes prone to crashing. I’m not sure what’s going on here, and I am not the best at reviewing the crash reports to see what the problem is. I will keep looking into this, and keep making improvements to try and improve stability. I’m not sure whether the problem is within my code (more likely), or in Core Data (less likely, but still possible as it’s fairly new)

Version History

  • 1.1 - Initial public release

Similar Pages