[librecat-dev] collaborate with Catmandu ?

Marc Chantreux mc at unistra.fr
Tue Jan 8 15:26:13 CET 2019

Hi Patrick,

(happy new year to everyone if i didn't already whished it)

> Thanks Marc for this,

you're very welcome: you made an amazing job with catmandu and finally
had no opportunity to work with you guys.

> I’ve created for myself a reminder to look at your code.

Please feel very welcome to ask any question: it's probably easier for
me to dig into my memory than for you to read undocumented and
uncommented code.

> I still hope you will find somewhere your way back into
> library stuff a bit ;)

i really appreciate. thanks but no thanks: this is really
improbable as i love my current job here at Renater (FLOSS evangelist
and developer) and there isn't even an opportunity to work on library
related topics.

however, it doesn't mean we can't collaborate:

* catmandu is a multipurpose ETL and can be used to manipulate any
  business object... probably including emails.
* in the sympa project (http://www.sympa.org), we have a system (called
  "scenario") that provides a DSL to drive the dispatch of incoming emails.
  my current work is a complete refactor of it to become
    * extendable (as every keyword is bound to a function)
    * composable (a scenario can contain other scenarii)
    * easy to compose (everything will be stored as a IR (lisp alike)
      format for a VM. as it's just data, scenarii can be build via
      a web interface).
* maybe it could rely Catmandu components.

using our new DSL, we could implement the missing keyworkds

* importer to declare a source
* exporter to declare a destination
* fix to declare a fix
* from to open a stream of items from a source
* to to record the items of the current stream in an exporter
* iso-2709 to stream the content of some raw files to an importer
* a specification to CRUD the records. like
    -999 to delete to remove all the 999 fields
    999$a to get the value of the 999$a subfield

we could write things like:

    (importer 'old-libraries
        (iso-2709 ('

    (exporter 'transfered
        (iso-2709 'to-be-transfered.utf8.raw ))
    (exporter 'removed
        (iso-2709 'new-library.utf8.raw ))

    (fix 'to-utf8 (encoding-> marc8 utf8))
    (fix 'dispatch-in-files
        (if (~ .999$a /damaged|rejected/ )
            (do (-999)
                (to 'removed))
            (to 'transfered)))

    (from 'old-libraries
        (do (fix 'to-utf8 (encoding-> marc8 utf8))
            (fix 'dispatch-in-files))

the very begining of the code is here:


Also, we work on a boilerplate for our perl coding style:


If you see any way to share ideas, code, work between the two projects,
let us run a hackathon! ;) (or at least have a video conference about it).


More information about the librecat-dev mailing list