Pending Projects

Warning

The purpose of this page is more my own notepad, where I put everything I would like to make one nice day I have too much free time. If you have the impression some of it is impossible, do not tell me that, unless you want to force me do it.

On the contrary, if you have the impression it is too easy and you can not live without writing it, I will not stop you. The only thing I ask for is you tell me about it, so we do not end up both writing the same thing, we can share the results at the end (it will be GPL for sure anyway).

XMPPFS

It will be a virtual filesystem describing an XMPP connectin, oriented mostly to IM. It will contain the contacts as directories, writing to a file would send a message, however direct XML access would be possible too. Sending files by copying them somewhere is obviousity.

It will be implemented as Plan9 file server.

Notify system

How does a computer report a new email? By a pop-up window? That disturbs. Besides, it does not stay there for long enough time.

Notify system should be a system gathering events and state of the computer and showing them in various ways, including:

Network Manager

Runlevels are just not enough when running around with a laptop and changing network interfaces.

Something in that direction is already started, but definitely not finished. It's called NetProfile.

The next thing I would like to do is splitting setup of an interface into modules. Each module would know how to start and stop itself, making it possible to roll back to default state when something fails and keep the system in consistent state.

Turing Virtual Machine

Why have turing machine as a think model only? Have an emulator.

PS Notes

I often read some PS or PDF. It might be handy to be able to add notes into them - directly into it.

It must be possible to just add code to draw over the existing page.

Smart TODO List

Writing things I need to do has many disadvantages. It is slow to search for items regarding specific project. It does not sort by priority. It does not tell which events are close to deadline.

So a program that keeps the items with time, tags, dependencies and priorities would be nice. It needs to be controllable by keyboard only and probably be able to live in console (mode, where it steps out to GUI is possible too). And allowing batch operations („tell me 5 things with highest priority“).

Nice feature would be printing of statistics (number of events close to deadline, total number of events) bound to console prompt.

Syncer

Do you have more than one computer? Or computer, PDA and cell phone? If so, you probably know what it means to keep data synchronized. Who would remember, where you put that contact, if the version of the file is the newest one or somewhere else is something newer, why you read the email for a third time, end so on.

There are tools that try to solve this, but they seem all wrong to me. One group does it by synchronizing files. This is not enough. First, files do not contain enough information to solve collisions, the system does not know the semantics. Second, it can not work „live“ ‒ if you read email, it should be marked read in other locations too, right away, even if you have it still opened.

Another ones are synchronizer protocols for some areas. They are not generic enough, they usually cover only organizer (calendar, notes, addressbook, etc). And they are seldom live too.

Requirements

I would like this synchronizer system to accomplish this:

  • Synchronize any kind of objects, not just some small area.
  • Allow some synchronization of data for existing programs. It means some kind of filesystem with live-synchronized files.
  • Possibility to work on objects with some metadata, describing kind of the object, relations, links, etc.
  • Synchronize „live“, when a connection is available. If an object is changed on some system, it shall be propagated to other programs and machines.
  • Use as little bandwidth as possible.
  • Prioritize transfers of data, so more often or currently needed data are transfered first.
  • Work without a central server.
  • Have profiling support ‒ some machines may have a different configuration (window manager on PDA needs a different configuration than PC, so PCs would synchronize between themselves and PDAs likewise).
  • Some machines may be interested only in some subset of data.
  • Installation of new machine just by connecting it to an existing one an synchronizing.
  • Sharing of some objects with other people (with access lists, etc).
  • Solve when A sees B, B sees C, but A does not see C.
  • Solve collisions automatically, whenever possible.
  • Let user know, which data are synchronized, where they are stored, etc.
  • Work in disconnected mode too (would resynchronize after connecting). Must work on disconnecting any sets of machines.

Objects

Data will be organized into objects. Each object have some metadata. One of them is a type. Types would form a tree structure. Then, each object may have some content and arbitrary many (named) references to other objects. Therefore, objects form a directed graph. One object is considered a root of the graph and any other can be described by a path trough the graph (one object can have more paths).

List of object interesting to a machine can be be defined by filtering trough the paths and trough the types.

Implementation ideas

First, since it is live, some kind of daemon is needed to communicate the changes, do the synchronizations, etc. It has some amount of disk space to cache the objects, in usual files.

Through some kind of socket or other means of IPC, applications requests the objects and manipulate them. The manipulation shall be at last as easy as reading and writing data trough files (in case of good design of the object representation in memory, serialization could be done automatically by the library communicating with the daemon).

A FUSE filesystem could be created, to represent some of the objects to old applications. They could be either special objects with file type, or some representation of all the objects.

Email Labeler

Many of us filter their email into distinct folders. This helps to get oriented in them, organize the work, prioritize reading them and alike. However, sometimes, it is possible to one finds out an email should be at more places at once ‒ something like categories, labels, tags or call it as you like. Something like that is used by gmail. However, using gmail is uncomfortable, bound to a single corporation, with emails stored on some random server on the Internet (which is a securiti risk) and has many other disadvantages. Besides that, it doesn't have anything like inbox for anything that does not belong elsewhere.

It would be nice to implement something like that into Mutt. Well, there is something (for example this), but it doesn't do everything. For example, some kind of index, which would count new and flagged messages, show the categories colored, give them priorities and like that would be nice. And some other tools would be needed, like an archiver.

Hijack FS

It would be a filesystem (probably a FUSE), that would mirror other filesystem as is. But it would have few useful functions: