The SRESI bookmarks manager

Table of Contents




User Manual

Bookmarks Import

Technical Notes

  1. Compilation
  2. Interface
  3. Exports
  4. Code Quality
  5. Character Encoding

Possible Evolutions

XBEL Formatting



Technical Notes


SRESI depends on Objective Caml (obviously) and the following libraries:

The included script tries to find them, either in the Caml installation directory or through findlib, if available, and links them in the produced binary.

Possible options are:

to produce a native executale;
to produce a Caml bytecode and top-level interpreter (avoid this, except for development purposes: performance is dreadful);
builds an RPM package, using checkinstall;
builds a source archive (tar.gz format, depends on the program directory being coordinated with the VERSION environment variable);
removes all object files, except for the compiled program.
removes all object files, including the compiled program.


Sresi does not have any kind of graphical use interface. While this is due in a large part to my lack of interest and skill in such matters, it was also a concious design choice.

The idea is that a command-line program can have the GUI wrapper it wants.
Like cdrecord and mkisofs.

The easiest ones would be CGI or PHP, I guess, but any others are possible.
If somebody wants to program them.

I'll probably give a try to the CGI idea someday, if nobody is kind enough to beat me to it. The rest I wouldn't count on if I were you.
But I'll be glad to host it, should you feel a burning need to shame me with your mad interface and coding skills.


The exports available in sresi are user-friendly presentations of the inner data structures sresi actually works on. These structures are:

a simple bookmarks list
This is actually sresi's storage format: it is compact and all other representations are built from the data it contains. From what I've gathered, RSS bookmarks management may also use this simple representation (without guarantee on my part).
a bookmarks tree
This is the usual format in browsers: there is a hierarchy of folders, but no further information. This format is used for the XBEL and Mozilla exports, and may probably be adapted to most other browsers.
a portal
This is the most complex structure: we add navigation information to the previous arborescence, so we can easily jump from one path to another through a common bookmark. If I've understood Tengis correctly, that is what it does.

These structures are built each in its own module, completely independent from the actual export. As long as you do not need information they do not provide, the exports are more or less straightforward.

Code quality

I have never been a great programmer, one of those driven kids who spend their free time thinking up new tricks to teach their computers and grow up to be great hackers. I just learned in school, and only learned to love computers years later.
To be honest, all that was quite a few years back. I didn't think I'd ever get back to coding, beyond the occasional shell script.

Then I just had a need for a bookmarks management program, and I couldn't find any that did most of what I wanted and was maintained. This last part was kind of depressing, to be honest.

So I took up programming again just for this.
The point?
Do not expect any great code therein.
I have gotten much better, but there is still a lot of room for improvement.

A lot of the code was grown organically, with only a rough idea of were I wanted to go, and how to get there. I try and rework the worst messes every now and then, but the core has gotten most of my attention. Look at and weep (or laugh).

Character encoding

SRESI does not deal with character encoding.

At all.

I just leave everything as is, hoping for the best.

It may not be the smartest policy, but it is the easiest one and it's not as if I had all the other problems quite solved yet.

I will try and do something about it someday, but for now, caveat emptor.

For information, all output is billed as UTF8, because it's what my system currently use. You are welcome to patch the program to fit you if it does not fit your setup, or better yet, to solve the problem for the rest of us if you are both so inclined and able.