Loud ramblings of a Software Artisan

Tuesday 22 March 2016

Exempi 2.3.0 and Rust...

Last week I released Exempi 2.3.0. It adds a couple more APIs and fix a few bugs.

Also I have now released my first Rust crate, that provide a Rust API to Exempi: exempi-rs. Short of rewriting the whole parsing in Rust for safety — the core of Exempi is Adobe official XMP SDK written in C++ —, this will do.

Monday 1 July 2013

Exempi 2.2.1

Just a quick note to announce that I released Exempi 2.2.1. It was long overdue. It is mostly a couple of bugfixes.

Note: so that there is no misunderstanding, since people see this on Planet Mozilla, this is not a Mozilla project. But it is completely Free Software.

Here is the short Changelog

  • Bug #54011: Use POSIX API for files on MacOS. (Misty De Meo)
  • Bug #58175: Replace OS X FlatCarbon headers. (Misty De Meo)
  • Added a manpage for exempi(1).
  • Added the -n option to the command line for arbitrary namespaces.

Next release will be 2.3.0 and will integrate the latest Adobe SDK used in the Creative Cloud.

Wednesday 24 December 2008

Holiday release

Just a quick note to announce that I released Exempi 2.1. It was long overdue.

It fixes several bugs, add a few APIs and resync the internals to Adobe XMP SDK 4.4.1. My openSUSE packages have an additional patch that is not in the release (but in git master).

Monday 28 April 2008

exempi 2.0.1

Just released a bug fix version of exempi. Version 2.0.1 address issues with error handling and some building issues on non-Linux systems.

This is likely to be the last 2.0.x release. 2.1.0 is on its way.

Tuesday 1 April 2008

exempi 2.0.0

I finally released exempi 2.0.0 The changes from previous versions are only for endian detection (I let autoconf do it) and some missing includes.

Now I'll branch, keep the 2.0 branch for eventual fixes, and master will stick for 2.1.

Saturday 12 January 2008

Triple bill

Last night I did a triple release.

The openSUSE packages are being built as we speak.

Edit 01/13/08: I released Exempi 1.99.7 to correct the soversion problem mentioned below.

Thursday 6 December 2007

Exempi mailing list

Thanks to our friends at Freedesktop.org, there is a mailing list for Exempi

Wednesday 7 November 2007

Exempi 1.99.5

Just released Exempi 1.99.5. This will be that last release before 2.0, unless I'm missing something.

Here is the list of changes for 1.99.5:

  • ABI breakage: soversion is now 3
  • Change: API xmp_files_close(), xmp_files_put_xmp(), xmp_files_free(), xmp_free(), xmp_iterator_free(), xmp_iterator_skip() now return bool.
  • Change: API xmp_get_property_and_bits() renamed xmp_get_property().
  • Change: API xmp_set_property2() renamed xmp_set_property().
  • Bug: all API should check about input and return an error if passed NULL.
  • Bug: more exception handling and refactor set_error() use.
  • Bug: add AC_CONFIG_MACRO_DIR to configure.
  • Bug: Lower requirement for libboost to 1.33.0.
  • New: Doxygen API doc generation.

Get the source - GPG signature If you run openSUSE 10.3, get it from my repository

Friday 17 August 2007

Exempi 1.99.4

Yet another release of Exempi 1.99.4. This time mostly with external contributions. Add a few new APIs, and GIF support.

I also now provide SuSE Linux package source using SuSE buildservice. I'll see about providing the other packages when my RPM skills gets better. I have heard that there might be packages officially for both Debian and Fedora as Tracker now has XMP support.

All the details on Exempi wiki page

On a side note, I'm looking for a place to host Exempi more permanently. My request at Freedesktop.org is still unanswered... and the only place I have found for hosting Free Software with git is Savannah. Suggestion welcome.

Tuesday 10 July 2007

Exempi 1.99.3

I just released exempi 1.99.3.

Get it .tar.gz - GPG sig


  • New API wrapped: xmp_serialize{,_and_format}() and the corresponding option bits so that we can serialize XMP packet to a file (like a sidecar)
  • New API wrapped: xmp_get_array_item()

Saturday 9 June 2007

Exempi 1.99.1

I forgot, but Thursday night I released Exempi 1.99.1. The ChangeLog is probably not very obvious be the 2 notable changes are xmp_register_namespace() and NS_CC. The first is to register a new namespace to add to a metadata block. The second is actually the constant for the Creative Commons XMP namespace.

This release is brought to you especially for our friend at Creative Commons.

Download .tar.gz - GPG sig

Tuesday 29 May 2007

Exempi 1.99.0

I think that a release of Exempi 1.99.0 is due.

This release is the first release towards Exempi 2.0. It is based on Adobe own XMP SDK and unlike the original Adobe code, it builds fine on Linux, and even more on x86_64 (I'm not proud of the fix, but it is as good as it gets for now). This version is much more feature complete than Exempi 0.5.1 as it read and writes (serialize) XMP metadata and load from and to files, including, for supported file types, reconciling the existing metadata.

Download: .tar.gz - GPG signature

It is licensed under the BSD license.

The current API is somewhat not definitive, but I hope it is OK. The documentation still has to be written / generated.

One of the question I got asked is how do you add XMP metadata like CC:Licensing to a PDF[1]. Here is a snippet:

#include <exempi/xmp.h>
XmpFilePtr f;
f = xmp_files_open_new("test.pdf", XMP_OPEN_FORUPDATE);
XmpPtr xmp = xmp_files_get_new_xmp(f);
xmp_set_property(xmp, NS_XAP_RIGHTS, "Copyright", "(c) ACME Inc., some rights reserved"
   " - This work is licensed to the public under the Creative Commons Attribution-ShareAlike "
   "license http://creativecommons.org/licenses/by-sa/2.0/");
xmp_files_put_xmp(f, xmp);
xmp_files_close(f, XMP_CLOSE_SAFEUPDATE);

Now a little call: Exempi 1.99.0 supports several media format, but not vorbis... I wish I could add support for it. Any idea? I haven't actually dug into it yet.


[1] could be any of the other supported file types

Tuesday 22 May 2007

XMP support

Exempi2 will use the Adobe XMP SDK as a code base, instead of reinventing the wheel. It will also become BSD licensed to make things easier with the original code.

The reasons are as follow:

  • Adobe XMP SDK implements the whole spec, including scanning XMP out of the various file formats
  • it is somewhat tested (but not on the platform we use)
  • it is less work to fix it than rewriting it
  • it is BSD licensed so perfectly fine for use in GPL applications

The caveats:

  • it needs work to build and work on Linux. I actually have done that.
  • it still fails on 64-bits platforms (fix in progress, don't assume sizeof(void*) == 4)
  • I'm not sure how much it will deviate from upstream as fixes needs to be. I'll do my best to push the changes upstream.
  • It needs a sane API. The APIs are not bad but the are not really designed for dynamic linking as they are based on C++ templates. Templates are not inherently bad, but passing them through dynamic linkage like that is not really a good idea, and worse, it is not language neutral. I'll make some nice C API inspired by what I did in Exempi.

Mental note: explain why XMP is important.

Tuesday 27 March 2007

exempi 0.5.1

I just released exempi 0.5.1. It adds a missing API and fix a serious bug that -Weffc++ revealed. And it also implement parsing structures.

Download .tar.gz - GPG Signature

If you want the SVN, help yourself. http://svn.gna.org/viewcvs/niepce/trunk/exempi/

Submit a bug

Sunday 11 March 2007

exempi 0.5.0

I took some time to release exempi 0.5.0, my library to parse XMP meta data. The C API is in there, the C++ API will come later.

Download .tar.gz - GPG signature

It is LGPL licensed.