Tycho
A PIM
in Ruby
for Linux
|
|
|
Overview
This project stems from my love of the Windows program Info Select and my
wish that I had something similar on Linux.
When we hear the term "PIM" (Personal Information Manager), it is
usually used to describe a boring program like a contact manager. I have
used or looked at various programs of this nature in the past; some were
the boring type, and others were almost operating systems in their own
right, like Commence or Ecco.
But my favorite has long been Info Select. I’ve been a user off and
on since 1987, when it was still called Tornado. If you’re curious
about it, you can go to their website
to learn more.
What I liked about Tornado was basically three things. It was
extraordinarily easy to use; it handled totally random information, without
making any assumptions about format, length, or content; and it had a
blindingly fast incremental search feature.
Of course, in those days it was a DOS program that ran as a TSR. Later on,
there was a Windows incarnation. This was not in itself a bad thing. But
then the feature bloat set in. Info Select is now apparently a web browser,
email client, bookmark handler, calendar/reminder system, image catalog
program, and more.
Even if I could, I wouldn’t implement all the features in the current
Info Select. It has some features I hate. But, in any case, we have to walk
before we can run.
The Tycho Model
There’s no basic metaphor involved here, unless it is that of the
"yellow sticky note" that is so ubiquitous in our culture. At its
heart, Tycho is storing nothing but notes.
I’m prematurely discussing some interface issues here, since the user
interface is so intimately tied to the concept of "how this software
works."
Each note will be kept in a small window of its own which may be minimized
or maximized. The notes will be viewed onscreen as a bunch of overlapping
windows with the current one highlighted in some way. Each note will
typically have a short one-line title; in the absence of a title, the first
line of the note will be used as such.
Edit a note by first clicking on it. End editing by clicking somewhere
outside the note or pressing escape.
The notes can be arranged under topics; the hierarchy of topics will be
shown in a tree view. There will be three basic views or modes.
In every view, the topic tree is on the left, and the "pile of
notes" is on the right. In the first view, this description summarizes
what we see on the screen. Here’s a crude drawing of what it would
look like:
In the second view, we’re a little more organized. A middle pane has
been added which shows all the titles of the notes in the current topic.
For topics that have many notes, this will scroll. Here’s another
drawing showing this view:
In the third view, we add the note titles to the topic tree itself, making
it one big hierarchy (see image below). This may be preferable for users
who do not store much information.
Initial features
With relatively few features, this could be a useful app. Basically you
need to be able to manipulate topics and notes in all the obvious ways:
Add, delete, move, copy, edit, and so on.
The one remaining feature that is absolutely critical is search
(and I mean incremental search, which was cool in 1987 and is
still cool today).
So here are some rough notes on the essential features of Tycho.
- Hierarchical topics. We have to allow an arbitrary nesting of
topics.
- Topic ordering. I favor three possible sort methods for the topics:
Manual, alphabetic, and Zipfian (which I explain in this digression).
Ascending/descending could be picked for any of these, of course (though
who ever wants reverse alpha order?). Also note that this should be on a
per-subtree basis.
- Topic manipulation. At least the following operations should be
supported:
- add
- delete
- edit
- copy (?)
- print
- move
- promote
- demote
- sort
- turn into note
- assign default properties for child notes
- Note manipulation. We should be able to do (at minimum) these note
operations:
- new
- delete
- copy
- split
- join
- to-file
- from-file
- print
- move up
- move down
- move to top
- move to bottom
- maximize to fill pane
- minimize to title
- resize note window (mouse)
- sort
- Metadata stored. We need to keep certain information, especially if
we want to do "Zipf"-style sorting.
- Creation timestamp
- Last modification timestamp
- Last access timestamp (?)
- Last search timestamp
- Frequency (count) modified
- Frequency (count) accessed
- Frequency (count) found in search
- Lines of text
- Chars of text
- Manually-assigned keywords
- Dump metadata into note?
- Searching. We want to be able to locate notes by any of various
means. Some of these will simply be implemented in the UI as checkboxes.
- Search globally or within subtree
- Search note titles
- Search note texts
- Search note keywords
- Save search results as new (real or virtual) topic
- Search other metadata (size, timestamps, …)
- Ability to specify regular expressions
- Presentation and navigation.
- Left pane has tree view of topics
- Left pane can contain note titles (view 3)
- Optional middle pane lists titles in current topic
- Right pane contains pile (stack) of notes
- Notes can be navigated by cursor-up, cursor-down, home, end
- Other user interface issues.
- Need some menu structure, but I like toolbars better
- Toolbar should have all common operations (ideally configurable)
- Tooltips pretty much everywhere
- Context-sensitive help?
- Note window widget should support bold italic code
and colors; not sure about fonts
- Need macro capabilities
- Scripting in Ruby, of course
- Ability to create new toolbar icon associated with a custom script
- Auto-insert of date (etc.)
- Templates for new notes on per-topic basis?
- Click on a note to edit it; esc or click right pane to quit
- Context-sensitive keyboard shortcuts. Example: Insert key in left pane: new
topic. In right pane: new note. While editing: toggle insert mode.
- Multi-level undo/redo
- The programmatic interface. I favor exposing an API that will
essentially treat Tycho as a kind of database which can be manipulated via
Ruby just as one can manipulate it by hand. This will be distinct from the
"Ruby scripting" one does inside Tycho, as the GUI will not
necessarily be involved.
Progress so far
There’s almost none. I have a skeleton of a GUI in place.
Here’s a screenshot.
Features for later
Why should I worry about the future when a working app is still so far off?
But I need to preserve my notes and ideas, so here they are.
- Search:
- by color/font?
- Levenstein?
- successive filters?
- invoke singleton (??)
- save search request?
- Miscellaneous
- graphics?
- fonts?
- web interface
- extract keywords by guessing
- "Syncable" interface with other copies of app
- Metadata:
- styles, colors,
- formatted? rec fmt?
- crc32
- ticklers (target, advance)
- Formatted data? (rec fmt in metadata?)
- "Quick" topics
- Intra-note sort
- Hyperlinks?
- "Recently" widget
- Web server?
- Stack-authoring tools
- Versioning of notes
- Convert subtree to outline
- Applets based on Tycho
- Where Is It?
- Paper Files
- Circle of Friends
- Tempus Fugit
To be continued…