The Adventures of Joshua Judson Rosen
(action man)

[ sections: VisualIDs | art | movies | everything ]

Sat, 07 Nov 2009

22:56: libvisualid 0.2 released

Version 0.2 of my `applied mathematics and primitive art' project, libvisualid, is out.

There's some new functionality, and a new toy included, but the biggest change is that the internals have been completely refactored to use GObject.

Restructuring everything around GObject has actually been really helpful in clearing up some points of confusion that I encountered during the initial implementation--now those semantic bugs have been squashed.

Now that the big pieces of new architecture are in place, I can start shedding the old (and less usable) interfaces, I can start developing the finer points in the new interface, and I can start evolving the actual functionality to include things like:

  • A glyph-mutator system that can automatically derive new glyphs from existing glyphs (I have a weighted Levenshtein algorithm on which I've been working).
  • New glyph-types (Pam wants butterflies...).
  • More dimensions to the system (colour should be fun).
  • Tools that end users can use to provide feedback to the system and tune its operation.
  • A portable, stable, and re-entrant PRNG (glib provides the base for this).
  • etc.

(look for that stuff to start showing up in 0.3)

The existing patches for Nautilus still work, for anyone who's using them (or who hasn't tried them but would like to).

[From the NEWS file included in the tarball]

Version 0.2.0 is a significant revision of libvisualid, though the
user-interface of the `mkvisualid' command remains mostly unaltered;
visible changes include:

    * A new "--base-weight" option has been added, to set the default
      weight for generators in the probability-set; it's possible to
      disable all generators with "--base-weight=0" and then easily
      enable only specific generators.
    * A new "--autocache-dir" option has been added, allowing the
      glyph-cache directory to be specified.
    * The "--autocache" and "--output" options can now be used
      simultaneously (in the future, the `autocache' files will be in
      a different format capable of storing glyph-structures with all
      attribute-data intact, instead of just storing renditions).
    * If the path specified via the "--output" option exists and is a
      directory, then a file is created in that directory with a name
      according to the input name.

A new `VisualID Explorer' demo-application has been added, using GTK+ with
several alternate GUIs defined using Glade.

The libvisualid library contains several new features, including:

    * visualid_complexity(), a function providing overall
      complexity-metrics for VisualID glyphs.
    * visualid_set_cachedir(), a function that allows the global
      cache-directory to be changed.
    * Automatic limiting of overall glyph-complexity: an integer in
      constants.c (complexity_max) controls the maximum
      glyph-complexity, having a default value of 5000 (a measure of
      something akin to `number of brushstrokes').
    * As the result of everything having been refactored using GObject
      (cf. details below), we finally have a way to *deallocate*
      VisualID glyph-structures!
    * Some bugfixes.

This release of the libvisualid library is binary-incompatible from
all previous releases, and is source-incompatible in a few minor ways:

    * exec_generator() has been renamed to visualid_draw_path().
    * generate_child() has been split into two special-purpose functions:
        - visualid_glyph_new(), for producing root glyphs,
        - visualid_glyph_spawn(), for producing and assigning
          subordinate glyphs.
    * All of the class-specific generator-functions have been reworked
      to have the same parameters as visualid_glyph_spawn().

Aside from the above changes, libvisualid should be source-compatible
in every meaningful way.

The `generator' structs have been converted into GObject classes,
including a base `VisualID_Glyph' class; the existing structs have
been preserved for the time being, but this marks the beginning of
API-redesign whereby terminology will be corrected and the API will be
reformed into something more fit for general consumption (e.g.: public
names put into a namespace).

The naming of the structs in 0.1.x as `*_generator' was somewhat
inappropriate, and due to some misinterpretation of some ambiguous
text in the essay: while the `*_generator' structs /are/ data
/related/ to generators, the `gen_*' function itself (not the data
that it produces) /is/ the generator. The term, "glyph", has been
chosen for the base-class in the VisualIDs `shape grammar' by analogy
with written-language grammar where `glyphs' of typography are
realisations of abstract `characters'; the `characters' of the
shape-grammar would then be the classes per se: `radial', `spiral',
`figure', `line', etc.