As I had mentioned before, I've been tinkering about with the Domino C API, specifically with Ruby. Although I'm not sure I'll actually have a use for it (from what I can tell, the C API is very tied to ID files and threads, which would make a multi-user web server thing cumbersome), I've decided to go for it and write a wrapper for the API generally based on the Java/LotusScript API. This is serving a number of purposes:
- It gets me off my (metaphorical) duff and in front of a text editor during my off hours.
- It lets me work with Ruby in a real capacity. And moreover, it'll expose me to how to write a Ruby library.
- It's introducing me to proper version control, something I absolutely need to do better.
- It will eventually force me to write structured documentation, which I haven't had to do in the past.
- It should fill a hole currently only partially filled with OLE-based libraries, though the ID-file thing will make it awkward.
- It brings me back to the world of C structures and pointers, albeit cushioned by FFI.
- By the time I'm done, I'll know Domino inside and out.
So far, I have some of the basics working: creating a "Session" by passing in the program directory and the path to an INI file, fetching databases, traversing and full-text-searching views, reading view entries, and reading basic and simple MIME data from documents. Obviously, there's plenty more work to do, and I don't know if I'll bother implementing the more esoteric classes like NotesRegistration, but it's off to a fun start so far:
Point 7 on that list has proven surprisingly interesting. It's fun to see the bits that apparently never fully made it onto the product (like number ranges), the little optimized paths where the documentation goes out of its way to point out that it's particularly efficient, and all the data structure sizes that create the various limitations that make Domino programming such an... experience.