1.      Introduction

Storing the huge number of data we use everyday become a nightmare.

Passwords, banks accounts, various IDs, not to speak of the growing number of internet links that we use on a daily basis turns to be hard to store and structure.

One of the most useful software I ever used is Keynote from http://keynote.prv.pl. Incidentally, I was wondering to start a development of this organizer software (for my personal use and programming pleasure) three years ago when I stepped on Keynote. As I found in this software everything I wished, I stopped my own project and used it with, I must say, a great satisfaction for three years. 

Alas, the author stopped its development a few months ago and some of functions in the current release just don't work (for example, the global search is badly broken, which makes me crazy _the author said that this is related to the Richedit control and I understand this, but, on the other side, a missing global search in this kind of tool is really dramatic)

A number of alternatives started but doesn’t satisfy me, if only they will ever reach production grade software. So, I decided to start working on my own solution…

As I am a pragmatic guy, I will try to use just everything others have developed with success and talent.

Here are my requirements for this kind of software :

-        Easy installation, do not need a gigantic runtime (such a .NET !). Must be able to store the software and data on a small USB key.

-        Structured database in a single file. Proprietary file format are difficult to process for others.

-        Easy search in the whole database ("I remember that I have already found this thingy one time, but…")

-        Strong encryption. I don’t want others to see my Visa card pin code

-        Various types of data for nodes : rich text, structured tables, pictures, externals links

-        Script language. I want to be able to query my data through a script, or automatically update a range of items.

I think that the basic GUI of Keynote is clean and efficient. I will use tabs to sort Sections of informations, each Section having its own tree. In the tree, each node will be able to record a type of data as stated above.

What about the name ?

Well, you know that a palimpeste is a velum where monks wrote text above previous texts. So, as a tribute to Keynote, I will "write" my software above Keynote specs, even if I will not reuse the code.

Technical grounds

Here are the components I will use in my software :

-        Database: SQLite (www.sqlite.org) is a very strong database engine. And very small, just a 300K DLL. I will use the ADUCOM (www.adumcom.com) free Delphi component to access SQLite.

-        Word processing : WPtools (www.wptools.de). A powerfull text editor that will avoid me the headache of Microsoft Rich Text Editor component (which seems to have caused a lot of trouble to Marek, the father of Keynote).

-        Script language : the small, syntax elegant LUA script language (www.lua.org) that I used in my applications for near eight years now. Again, a small DLL will be used.

…and the disclaimer…

Since I am very busy running a software company, I cannot be sure I will ever complete this project which will be low on my priority list. However, I will do my best to succeed. 

2.      Database

The database diagram will be really simple.

-        One table for each item in the organizer

-        One table for software parameters

-        Custom tables for user needs

2.1        Tables

2.1.1      Item table

One record for each item in the organizer.

Name

Type

Comments

ID

INTEGER

Unique ID for this item

ParentID

INTEGER

ID of our parent

Section

TEXT

Section where the item belong

Title

TEXT

Title of item

Keywords

TEXT

Keywords for this item, comma separated

Type

INTEGER

Type of data for this section

1=text

2=structured table : this table will be named usertable[id] in the database

Attribute

INTEGER

Bit field :

 

ItemOrder

INTEGER

Order in the Section

Datas

BLOB

Associated datas

Metadatas

TEXT

Other datas

D_created

TEXT

Creation date (YYYY-MM-DD HH:MM:SS)

D_updated

TEXT

Update date

ImageIndex

INTEGER

Node image index

 

2.1.2      Parameter table

The parameter table will store user preferences, software datas. The registry will not be used except for the name of the last database file used.

Name

Type

Comments

Name

VARCHAR(100)

Name of parameter

Value

TEXT

Value for the parameter

 

3.      Functional specs

3.1        Function enumeration

3.2        Parameter list

Name

Description

TABSLIST

Name of all section tabs (could be deduced from the item table but used here to save a request)

 

 

4.      Script language