SPUG:DB two-way synchronization
tnight at pobox.com
Thu May 15 18:22:38 CDT 2003
Michael R. Wolf wrote:
> It's the same problem as a PDA sync'ing to a PC for calendar, note,
> email, or contact information. I know it's not an easy theoretical
> algorithm, but at least it's one that's been solved. I'd like to build
> my solution on top of that work rather than reinvent it.
I'm not personally aware of any such algorithm, but that doesn't mean it
does not exist. The way I've seen this sort of problem handled is
through the use of update timestamps and a few reasonable assumptions.
The best-case scenario is having an update timestamp for every field of
data. Then, the merge is a simple matter of going through the data,
field by field, and comparing the update dates. The most recent wins.
Usually, you don't have a field-based update timestamp, but a
record-based timestamp. In that case, you have to let the most recently
updated record win, except when the data in a field in the most recently
updated record is blank or meaningless (fails a /\w+/ match, for
example), and the same field in the less recently updated record
contains more meaningful data.
> A and B are not just arbitrary names:
> A is for ACT!, a contact manager that should be ODBC-accessible
> B is for BBDB, emacs' Big Brother Data Base
> I know the DBD::ODBC module exists. (I'll have to come up to speed on
> it. )
It's not bad. To get started, I'd recommend using ActivePerl and a
Microsoft Access Database. Set up a data source for your Access
database, and write a few simple Perl scripts to manipulate the data
using DBI with DBD::ODBC. Then, move on to trying to access and
manipulate the Act! data.
> I'll have to build a DBD::application::emacs::BBDB interface, either
> directly to its lisp-like textual file representation, or through the
> behaviors coded in emacs' elisp as an API. Anyone done something
> similar? Ideas? It's no small feat, I'd imagine. 
If the data is really stored in a text format, you're probably better
off writing a DBD::whatever module to interface with the text file
directly. There should be at least a few pure-Perl DBD drivers out on
CPAN that you could use as a starting point. The DBD::Sprite module is
one that I can think of off hand.
Best of luck!
Terry Nightingale <tnight at pobox.com>
Web Developer, Philosopher, Geek
"In theory, there is no difference between theory and practice. But, in
practice, there is." -- Jan L.A. van de Snepscheut
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 3411 bytes
Desc: S/MIME Cryptographic Signature
Url : http://mail.pm.org/pipermail/spug-list/attachments/20030515/2552d1e1/smime.bin
More information about the spug-list