<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title>codecave.org</title>
	<link>http://codecave.org/</link>
	<description>peeks at a workbench</description>
	<language>en</language>
<!--GAP-->
<item>
  <guid isPermaLink='false'>hytte</guid>
  <title>my testbed buildsystem</title>
  <link>http://codecave.org/?weblog_id=hytte</link>
  <pubDate>Wed, 27 Aug 2008 21:06:35 +0000
</pubDate>
  <description><![CDATA[
<p>
<a href='http://pippin.gimp.org/hytte/'>Hytte</a> is project skeleton, saving
me from editing Makefile.am when adding, removing, renaming files to some
projects. I use it on bug reports to larger scale 10kloc projects. It works
very well for my development and testing purposes on linux based system with
pkg-config supported dependencies. The hytte website contains a tutorial showing
the steps often involved when I hack on something new.
</p>
<p>
I've found the makefile useful enough to distribute, along with it I bundle a
setup I've been experimenting in <a href='http://gegl.org/babl/'>babl</a> and
<a href='http://gegl.org/'>GEGL</a> -- merging the website README and
documentation.
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>GEGL-logo</guid>
  <title>GEGL Logo</title>
  <link>http://codecave.org/?weblog_id=GEGL-logo</link>
  <pubDate>Wed, 25 Jun 2008 21:15:24 +0000
</pubDate>
  <description><![CDATA[
<center><a href='http://pippin.gimp.org/tmp/GEGL.svg'><img src='http://pippin.gimp.org/tmp/GEGL.png' border='0'/></a></center>

<p>
Four slightly overlapping horizontally distributed white circles with
horizontal and; or vertical cuts tangenting a partial smaller center circle.
The cuts makes the circles form upper case letters from the alphabet, each
circle is set off from the others and the background by the dropshadow it
is causing.
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>gegl_0_0_16</guid>
  <title>GEGL 0.0.16</title>
  <link>http://codecave.org/?weblog_id=gegl_0_0_16</link>
  <pubDate>Thu, 28 Feb 2008 00:34:45 +0000
</pubDate>
  <description><![CDATA[

<center><img src='http://pippin.gimp.org/gegl-0.0.16.png'/></center>

</p>

<p>GEGL is already in use by <a
href='http://www.gnome.org/projects/gnome-scan/index'>GNOME Scan</a> and the
development version of <a href='http://gimp.org/'>GIMP</a> uses GEGL for some
color correction tools. Main highlights of this release is installation of
headers that will enable out-of-tree development of plug-ins as well as improvements to the build system to make it work on OSX.
</p>

<p>
Tarballs of <a href='ftp://ftp.gimp.org/pub/gegl/0.0/gegl-0.0.16.tar.bz2'>GEGL</a> and <a href='ftp://ftp.gimp.org/pub/babl/0.0/babl-0.0.20.tar.bz2'>babl</a> at the <a href='ftp://ftp.gimp.org/pub/'>usual place</a>.
Packages for <a href='https://launchpad.net/~bersace/+archive'>Ubuntu</a> and <a href='http://software.opensuse.org/search?baseproject=openSUSE%3A10.3&p=1&q=gegl'>SU</a><a href='http://software.opensuse.org/search?baseproject=openSUSE%3A10.3&p=1&q=babl'>SE</a> are already available.
</p>
<a href='http://lists.xcf.berkeley.edu/lists/gegl-developer/2008-February/000785.html'>Full announcement.</a>.
]]></description>
</item>


<item>
  <guid isPermaLink='false'>context_spills</guid>
  <title>Mental Context Spills</title>
  <link>http://codecave.org/?weblog_id=context_spills</link>
  <pubDate>Fri, 25 Jan 2008 17:52:48 +0000
</pubDate>
  <description><![CDATA[
<p>I've recently started having context spills between different projects,
mainly rendering APIs. Refering to cairo as clutter in #cairo. Writing
<tt>cairo_chant_class</tt> instead of <tt>gegl_chant_class</tt> in #gegl and
even typing out commands like: <tt>$ cairo push <a href='http://gitweb.freedesktop.org/?p=users/pippin/cairo.git;a=summary'>fdo openvg</a></tt>. in my shell.
</p>

<p>To ease confusion here is a list of possible ways of combining these
projects, some which already are possible others might make sense.
</p>

<ul>
 <li><a href='http://lists.cairographics.org/archives/cairo/2008-January/012838.html'>OpenVG within cairo</a></li>
 <li><a href='http://svn.o-hand.com/view/clutter/trunk/clutter-gegl/'>GEGL within Clutter</a></li>
 <li><a
href='http://svn.gnome.org/viewvc/gegl/trunk/operations/render/text.c?view=markup'>cairo within GEGL</a></li>
 <li><a href='http://svn.o-hand.com/view/clutter/trunk/clutter-cairo/'>cairo within Clutter</a></li>
 <li>GEGL (output) within cairo (drawing)?</li>
 <li>(visual representation of) Clutter (Actors) within GEGL (graphs) (within Clutter, with OpenVG within cairo within Clutter on top)?</a>
</ul>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>going-LGPLv3</guid>
  <title>babl and GEGL going LGPLv3+</title>
  <link>http://codecave.org/?weblog_id=going-LGPLv3</link>
  <pubDate>Sun, 11 Nov 2007 20:26:39 +0000
</pubDate>
  <description><![CDATA[
<p>The next versions of <a href='http://gegl.org/babl/'>babl</a> and <a
href='http://www.gegl.org/'>GEGL</a> will be released under <a
href='http://www.gnu.org/licenses/lgpl-3.0.html'>LGPLv3+</a>, the changes
already apply to the sources in the repository. 
<img src='http://gegl.org/babl/graphics/babl-48x48.png' style='float:right'/>
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>quadentry_in_clutter</guid>
  <title>QuadEntry in Clutter</title>
  <link>http://codecave.org/?weblog_id=quadentry_in_clutter</link>
  <pubDate>Mon, 01 Oct 2007 11:17:06 +0000
</pubDate>
  <description><![CDATA[
<p>QuadEntry is an input method for cursor keys or four-way pads based on
interactive navigation of a <a
href='http://en.wikipedia.org/wiki/Quadtree'>quadtree</a>.</p>

<div><center><img
src='http://pippin.gimp.org/tmp/QuadEntry_in_Clutter.png' alt='QuadEntry in Clutter'/></center></div>

<p>For normal text entry you need three presses, for instance entering an
<em>'a'</em> is achieved by pressing the keys <em>up</em>, <em>left</em>,
<em>up</em>. This would take you to the upper quadrant, then to the left
quadrant of the upper quadrant and finally select the upper pad of that
quadrant.</p>

<p>I originally came up with the concept for QuadEntry when I was playing
experimenting with and exercising <a
href='http://people.freedesktop.org/~pippin/cairo/quadmenu_char_input.png'>cairo
back in 2004</a>. I've resurrected the QuadEntry when I started digging into <a
href='http://clutter-project.org/'>Clutter</a>, which is one of the nifty
projects coming out of <a href='http://openedhand.com/'>OpenedHand</a>, my new
employer. Since being able to use the QuadEntry as a virtual keyboard for
clutter depends on a more capable event handling and filtering system in
Clutter I'll let the actual publishing of the sources wait until it builds
without some hacky changes to Clutter itself.</p>

<p>At <a href='http://www.barcamp.org/mobileCampLondon'>mobilecamp in Lodon</a>
I met the CEO of <a href='http://tikilabs.com/'>tikilabs</a> which is a company
based on a similar input method concept.</p>

]]></description>
</item>


<item>
  <guid isPermaLink='false'>lost_in_time_liberated</guid>
  <title>Sources of lost in time liberated</title>
  <link>http://codecave.org/?weblog_id=lost_in_time_liberated</link>
  <pubDate>Wed, 08 Aug 2007 18:27:16 +0000
</pubDate>
  <description><![CDATA[
  <p><a href='http://pippin.gimp.org/lost-in-time/'>Moments lost in time,
            like tears in the rain.</a> was first exhibited in november 2005
        the collection of four interactive video installations was first
        exhibited at <a href='http://galleribarbarahansen.com/'>Galleri Barbara
            Hansen</a> in Oslo. The exhibit consisted of four works, <em>now by
            then</em>, <em>deja-vu</em>, <em>ghost mirror</em> and
        <em>recursive subdivision</em>. <em>Now by then</em> was also shown at the <a
            href='http://www.siggraph.org/artdesign/gallery/S06/index.html'>shown
            SIGGRAPH art gallery in 2006.</a></p>

        <div><center><img src='http://pippin.gimp.org/lost-in-time/now-by-then-free.jpg' alt='Still of
                now-by-then'/></center></div>

        <p>When I pondered whether it would be possible to finance some of the
        equipment and materials needed for the original exhibition I also
        desired the code and underlying code logic to be reusable by myself and
        others in other projects. The result was a discount scheme based <a
            href='http://pippin.gimp.org/lost-in-time/sales.html'>sales
            model</a>, where licenses that I hope increase the chances of
        myself seeing new and interesting derivative work that I will both have
        the ability to study and elaborate on.
        </p>

        <p>For an <a href='http://www.bkk.no/dh/'><em>Digitale Spor</em></a> an outdoor
        art track in Bergen</a> January 2006 various digital art works were
        desired. I was contact about the possibility of having works from
        <em>lost in time</em> be part of the exhibition. The <a
            href='http://www.hib.no/mediesenteret/english/'><em>Media Centre at
                Bergen University College</a></em> chose to option of paying
        to liberate the sources under GPL which had the largest discount of
        the full price (90% discount).
        You can now <a
            href='http://pippin.gimp.org/lost-in-time/source/'>download the
            source</a> and compile, play, experiment and perhaps tinker with
        the code creating new interesting things.</p>

        <p>The installations are written using <a
            href='http://pippin.gimp.org/gggl/'>gggl</a> as the graph based
        processing engine. At the moment <a href='htp://gegl.org/'>GEGL</a>
        does not perform well enough to drive the installations in real time,
        I do however at some point plan to port <em>now by then</em> to be a
	plug-in for GEGL that exercises and pushes the envelope for the caching
        infrastructure further.
        </p>


]]></description>
</item>


<item>
  <guid isPermaLink='false'>buu</guid>
  <title>buu and suspend</title>
  <link>http://codecave.org/?weblog_id=buu</link>
  <pubDate>Sun, 24 Jun 2007 20:22:58 +0000
</pubDate>
  <description><![CDATA[
<p>Earlier this week I did a fresh reinstall of Ubuntu Edgy Eft on my lenovo
T60 to see if some suspend issues I had had with the dist-upgraded one  would
go away - those issues only did go away after pursuing information on <a href='http://www.thinkwiki.org/wiki/'>ThinkWiki</a>, that told me to set <tt>POST_VIDEO=</tt> in <tt>/etc/default/acpi-support</tt> (the real issue is in the ATI driver.).</p>

<p>Another intervention on top of the default install that I need is a way to
use my mobile phone as a modem with my flatrate GPRS/3G subscription. Since
<a href='http://www.gnome.org/projects/NetworkManager/'>NetWork manager</a> doesn't support this yet, I made a small shell script <a
href='http://pippin.gimp.org/misc/buu.sh'>buu</a> which maintains my uplink when running in a terminal.
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>bubbleview</guid>
  <title>BubbleView</title>
  <link>http://codecave.org/?weblog_id=bubbleview</link>
  <pubDate>Mon, 09 Apr 2007 23:31:21 +0000</pubDate>
  <category>GUI</category>
  <category>code</category>
  <description><![CDATA[
<p>I've been experimenting with a data set visualization concept that acts
like a visualisation of a bubble-sort. At the moment my plans and ideas for
this thing far exceed the fragile proof of concept prototype I've got.</p>

<p><center><a
href='http://pippin.gimp.org/tmp/bubbleview.png'><img
src='http://pippin.gimp.org/tmp/bubbleview.jpg'/></a></center></p>

<p>The simulation engine still needs a lot of performance and stability improvements, and then more interesting possibilities can be explored.</p>

<p>Based on my early experiments with this concepts it seems like it can
evolve into useful interfaces for selecting items, exploring data sets with
different sorting constraints applied. Interaction methods directed at
making CBIR exploration of databases efficient as well as a combined filemanager/media viewer.</p>

<p><center><a
href='http://pippin.gimp.org/tmp/bubbleview.gif'><img
src='http://pippin.gimp.org/tmp/iterations.png'/></a></center>
<a href='http://pippin.gimp.org/tmp/bubbleview.gif'>GIF screencapture.</a></p>

]]></description>
</item>


<item>
  <guid isPermaLink='false'>all-the-ducks-are-swimming-in-the-water</guid>
  <title>Spring has arrived</title>
  <link>http://codecave.org/?weblog_id=all-the-ducks-are-swimming-in-the-water</link>
  <pubDate>Wed, 28 Mar 2007 14:59:03 +0000</pubDate>
  <category>photography</category>
  <description><![CDATA[
<p>The ice on <a href='http://en.wikipedia.org/wiki/Mj%C3%B8sa'>Mjøsa</a> has melted and spring is rapidly proceeding.</p>

<p><center><a
href='http://pippin.gimp.org/tmp/ducks-large.jpg'><img
src='http://pippin.gimp.org/tmp/ducks.jpg'/></a></center></p>

<p>I'm starting to think that I should create a new and better gallery for
my images, my recent adventures in the land of web 2.0 has left me with
some ideas for how to create a minimalistic system that has only static
content on the server which is processed on the client for slideshows, tag based searching and more.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>pong.html</guid>
  <title>DHTML Pong</title>
  <link>http://codecave.org/?weblog_id=pong.html</link>
  <pubDate>Sat, 24 Mar 2007 17:32:49 +0000</pubDate>
  <category>JavaScript</category>
  <description><![CDATA[
<p>Press image below to launch a &mdash; XHTML+CSS+js standards compliant, cross browser supported without hacks &mdash;
implementation of clasiscal digital gamer tennis. Avoid moving your mouse at all after loading
to have two "ai's" competing each other.</p>

<p><center><a
href='http://pippin.gimp.org/pong/'><img
src='http://pippin.gimp.org/pong/screenshot.png'/></a></center></p>

<p>I've been brushing up my js-fu the last couple of weeks due to extra responsiblities
at work that have distracted me from hacking on the usual projects. This has led to a
<a href='http://pippin.gimp.org/pong/'>pong game</a> and a popup-index and tagcloud for
the static content web 2.0 blog renderer at <a href='http://codecave.org/'>codecave.org</a>.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>aquarell</guid>
  <title>Robotic Aquarell Vision</title>
  <link>http://codecave.org/?weblog_id=aquarell</link>
  <pubDate>Thu, 01 Mar 2007 00:03:11 +0000
</pubDate>
  <category>GEGL</category>
  <category>art</category>
  <category>filter</category>
  <category>artistic</category>
  <description><![CDATA[
<p><center><a
href='http://pippin.gimp.org/tmp/aquarell.jpg'><img
src='http://pippin.gimp.org/tmp/aquarell-mixed.jpg'/></a></center></p>
<p>When experimenting with an approach to tonemapping I've stumbled across
a nice artistic aquarell like rendering filter. This <a href='http://pippin.gimp.org/tmp/wtrabbit.jpg'>rabbit</a> looks nice with a more <a href='http://pippin.gimp.org/tmp/rabbit.png'>basic variation</a></p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>fosdem2007</guid>
  <title>The State of GEGL</title>
  <link>http://codecave.org/?weblog_id=fosdem2007</link>
  <pubDate>Mon, 26 Feb 2007 13:03:01 +0000</pubDate>
  <category>GEGL</category>
  <category>FOSDEM</category>
  <category>presentation</category>

  <description><![CDATA[
<p>The presentation I did at <a href='http://www.fosdem.org/'>FOSDEM</a>
this year is now available online. In multiple forms, a <a href='http://ftp.belnet.be/mirrors/FOSDEM/2007/FOSDEM2007-GEGL.ogg'>video</a> (300mb OGG/Theora),
a <a href='http://pippin.gimp.org/fosdem2007/the-state-of-gegl.png'>large image</a> and a <a href='http://pippin.gimp.org/fosdem2007/the-state-of-gegl.tgz'>tarball</a> containing the GEGL compatible XML file with included media assets and a ruby program for viewing it.</p>

<p><center><a
href='http://pippin.gimp.org/fosdem2007/the-state-of-gegl.png'><img
src='http://pippin.gimp.org/fosdem2007/the-state-of-gegl_thumb.png'/></a></center></p>

<p>FOSDEM was a nice experience, the amount of participants increases every
year and it is great fun to meet up with people I haven't talked to for a couple
of years as well as met a bunch of new people doing amazing things using our
free tools and infrastructure.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>GEGL-0.0.12</guid>
  <title>GEGL 0.0.12</title>
  <link>http://codecave.org/?weblog_id=GEGL-0.0.12</link>
  <pubDate>Sun, 18 Feb 2007 23:19:24 +0000
</pubDate>
  <category>GEGL</category>
  <category>Ruby</category>
  <category>C#</category>
  <category>Python</category>
  <category>babl</category>
  <category>release</category>
  <description><![CDATA[
<p>A new <a href='http://gegl.org/'>GEGL</a> release is out, grab <a
href='ftp://ftp.gtk.org/pub/gegl/0.0/gegl-0.0.12.tar.gz'>GEGL 0.0.12</a> and <a
href='ftp://ftp.gtk.org/pub/babl/0.0/babl-0.0.14'>babl 0.0.14</a> now.
</p>

<p><center><img src='http://pippin.gimp.org/tmp/gegl-0.0.12.png'/></center></p>

<p>Some highlights this release:</p>
<ul>
<li> GEGL has been succesfully built on win32</li>
<li> Bindings for <a href='http://gegl.org/gegl-sharp/'>C#</a>, <a href='http://gegl.org/pygegl/'>Python</a> and <a href='http://gegl.org/rgegl/'>Ruby</a></li>
<li> Some profiling induced performence enhancement</li>
</ul>
<p>
<a href='http://lists.xcf.berkeley.edu/lists/gegl-developer/2007-February/000689.html'>Read full announcement</a>
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>FOSDEM-interview</guid>
  <title>FOSDEM Interview</title>
  <link>http://codecave.org/?weblog_id=FOSDEM-interview</link>
  <pubDate>Wed, 31 Jan 2007 19:24:48 +0000</pubDate>
  <category>GEGL</category>
  <category>FOSDEM</category>
  <description><![CDATA[
<p>I have the pleasure to present at <a href='http://fosdem.org'/>FOSDEM</a> this year. Part of doing a main-track presentation at FOSDEM is the speaker interview, the good people of FOSDEM performed it by email. Doing it by email gave me ample time to
consider what I wanted to say, as well as getting help from other people involved with <a href='http://gegl.org'/>GEGL</a> to correct my worst abuses of the english language. <a href='http://fosdem.org/2007/interview/oyvind+kolas'>Read the interview</a>.
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>GEGL-0.0.10</guid>
  <title>GEGL 0.0.10 Released</title>
  <link>http://codecave.org/?weblog_id=GEGL-0.0.10</link>
  <pubDate>Sun, 28 Jan 2007 23:34:28 +0000
  </pubDate>
  <category>GEGL</category>
  <category>release</category>
  <description><![CDATA[
<p>A new <a href='http://gegl.org/'>GEGL</a> release is out, grab <a
href='ftp://ftp.gtk.org/pub/gegl/0.0/gegl-0.0.10.tar.gz'>GEGL 0.0.10</a> and <a
href='ftp://ftp.gtk.org/pub/babl/0.0/babl-0.0.12'>babl 0.0.12</a> now.
</p>
<p>Some highlights this release:</p>
<ul>
<li> <a href='http://gegl.org/api.html'>API documentation</a>
<li> Internal caches for rendering (internal floating point projection)</li>
<li> API for iterative rendering</li>
<li> API for querying node connections.</li>
<li> improved hit detection (still only bounding boxes)</li>
<li> performance enhancements to frequently used code paths.</li>
<li> improved relative path handling in test app</li>

</ul>

<a href='https://lists.xcf.berkeley.edu/lists/gegl-developer/2007-January/000670.html'>full
announcement.</a>-


]]></description>
</item>


<item>
  <guid isPermaLink='false'>rgegl</guid>
  <title>Ruby meets GEGL</title>
  <link>http://codecave.org/?weblog_id=rgegl</link>
  <pubDate>Thu, 25 Jan 2007 23:42:50 +0000
</pubDate>
  <category>GEGL</category>
  <category>Ruby</category>
  <category>pie</category>
  <description><![CDATA[
<p><a href='http://www.gegl.org/'>GEGL</a> is written in C, but I think and hope that interesting applications
will surface written in higher level languages. I am having fun combining GEGL <a href='ihttp://www.ruby-lan.org/'>Ruby</a>, <a href='http://www.gtk.org/'>GTK+</a> and <a href='http://cairographics.org/'>cairo</a> in a test
application that focuses entirely on manipulating objects in a zoomable canvas on the canvas that uses pie menus.
The test application and the rest of the code for the user interface resides in the nicely forming <a href='http://pippin.gimp.org/rgegl/'>rgegl</a> extension for Ruby.</p>

<p><center><a href='http://pippin.gimp.org/tmp/rgegl.gif'><img src='http://pippin.gimp.org/tmp/rgegl.png'/><br/>4mb GIF screen capture</a></center></p>

<p>It is nice to code in Ruby again, it seems like I can get much more done in
one hour with ruby than a whole evening with C.</p> 
]]></description>
</item>


<item>
  <guid isPermaLink='false'>gegl-api.html</guid>
  <title>Public GEGL API Reference</title>
  <link>http://codecave.org/?weblog_id=gegl-api.html</link>
  <pubDate>Thu, 25 Jan 2007 12:06:36 +0000
</pubDate>
<category>GEGL</category>
<category>Ruby</category>
<category>documentation</category>
  <description><![CDATA[
<p>Work is under way on <a href='http://gegl.org/api.html'>documenting the GEGL API</a>. The core of the API is rather small (less than 15 entry points for the core of creating and processing image compositions, and the rest is syntactic sugar or state queries).</p>
<p>Please also look through this API with a critical eye and report thoughts
on the API back to the <a href='https://lists.xcf.berkeley.edu/mailman/listinfo/gegl-developer'>GEGL mailing-list</a>. Improvements to the text itself are best sent as a patch against <a href='http://svn.gnome.org/viewcvs/gegl/trunk/gegl/gegl.h?view=markup'>gegl.h</a> in subversion.</p>

<p>The document is transformed from .h into .html by a ~500 line
HTML/CSS/ruby/regexp <a href='http://svn.gnome.org/viewcvs/gegl/trunk/tools/create-reference.rb?view=markup'>contraption</a>.</p>

<p>The rest of the web on <a href='http://gegl.org/'>gegl.org</a> is still
the one from the previous release, when the next release is done the API
Reference will also be linked from the front page.</a>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>gegl-0.0.4</guid>
  <title>GEGL 0.0.4 released</title>
  <link>http://codecave.org/?weblog_id=gegl-0.0.4</link>
  <pubDate>Sat, 30 Dec 2006 00:04:10 +0000
</pubDate>
  <category>GEGL</category>
  <category>babl</category>
  <category>release</category>
  <description><![CDATA[
<img src='http://pippin.gimp.org/tmp/gegl-0.0.4.png' align='right'/>
<p>The first <a href='http://www.gegl.org/'>GEGL</a> tarball, of version 0.0.4, has just been released from the <a
    href='http://events.ccc.de/congress/2006/'>23rd Chaos Communication
    Congress</a> in Berlin.
<p>Full release announcement follows:</p>
</p>

<p><b>What is GEGL?</b></p>

<p>
GEGL is a graph based image processing framework offering non-destructive image
processing and compositing on large images. GEGL is suitable for projects
ranging from small one-off projects to interactive applications.</p>

<p>
GEGL is built on top of the libraries glib and babl:</p>

<ul>
<li>GLib is the low-level core library, also forming the basis of GTK+ and
   GNOME. It provides data structure handling for C, portability wrappers,
   plug-in handling and object system used for object oriented structuring of
   the framework.</li>
<li>
   babl is a library for dynamically handling pixel formats and managing
   conversions between them.</li>
</ul>

<p><b>What's new in 0.0.4?</b></p>

<p>This is the first public release of GEGL.</p>
<ul>
<li>
<li> 8bit, 16bit integer and 32bit floating point, RGB, CIE Lab, YCbCr and naive
  CMYK output.</li>
<li> Extendable through plug-ins.</li>
<li> XML, C and Python interfaces.</li>
<li> Memory efficient evaluation of sub-regions.</li>
<li> Tiled, sparse, pyramidal and larger than RAM buffers.</li>
<li> Rich core set of processing operations</li>
  <ul>
  <li> PNG, JPEG, SVG, EXR, RAW and other image sources.</li>
  <li> Arithmetic operations, porter duff compositing operations, SVG blend modes, other blend modes, apply mask.</li>
     <ul>
     <li> Gaussian blur.</li>
     <li> Basic color correction tools.</li>
     <li> Most processing done with High Dynamic Range routines.</li>
     <li> Text layouting using pango</li>
 </ul>
  </ul>
</ul>

<p>
The public API is now in a state where extended testing is desirable. The
public API is the functions exposed in gegl.h which most applications using
GEGL will interface with, either directly or through bindings for a dynamic
language. The changes needed as usage patterns emerge are expected to be small.</p>

<p>
Although adding new operations now is easy the API used is still considered
highly experimental. The file format used for testing is not stable either and
is expected to continue maturing.</p>

<p>In the release there is also some sample code exercising the framework, in
proportion to the amount of work put into the library almost no time has yet
been invested in improving the usability of this GUI.</p>

<p><b>Where to get GEGL</b></p>

<p>GEGL, babl and glib can be fetched from:</p>

<p>
<a href='ftp://ftp.gimp.org/pub/babl/0.0/babl-0.0.8.tar.bz2'>ftp://ftp.gimp.org/pub/babl/0.0/babl-0.0.8.tar.bz2</a><br/>
<a href='ftp://ftp.gimp.org/pub/gegl/0.0/gegl-0.0.4.tar.bz2'>ftp://ftp.gimp.org/pub/gegl/0.0/gegl-0.0.4.tar.bz2</a></br>
<a href='ftp://ftp.gimp.org/pub/glib/2.12/glib-2.12.6.tar.bz2'>ftp://ftp.gimp.org/pub/glib/2.12/glib-2.12.6.tar.bz2</a>
</p>

<p>
The integrity of the tarballs can be verified with:
</p>

<pre>$ sha1sum *.bz2
8ba35c6eae58fd1f89e2ba1b09f3927d93dec57e  babl-0.0.8.tar.bz2
3476715723d58fd703a72c93c4f82945e7fb23a2  gegl-0.0.4.tar.bz2
30cf64bc5c93d5fbba23ea00fb9270d29fb81f8d  glib-2.12.6.tar.bz2</pre>

<p><b>Where to get more information about GEGL</b></p>

<p>
Information about GEGL can be found in the GEGL documentation, the README is
a text only version of the HTML documentation generated during a build. This
is also the contents of <a href='http://www.gegl.org/'>http://www.gegl.org/</a>.</p>
<p align='right'>/Øyvind Kolås @23c3</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>aurora</guid>
  <title>Improved Aurora Borealis</title>
  <link>http://codecave.org/?weblog_id=aurora</link>
  <pubDate>Wed, 27 Dec 2006 22:45:03 +0000
</pubDate>
  <category>GEGL</category>
  <category>image-processing</category>
  <description><![CDATA[
<p>I've added a basic local contrast stretching/<a href='http://cvs.gnome.org/viewcvs/gegl/operations/workshop/tonemap.c?view=markup'>tonemapping</a> algorithm to the experimental regions of the GEGL codebase. I reused other ops for most of the functionality needed
and coded it as a meta-op/macro op/graph op, with only a single specialized op to do the
<a href='http://cvs.gnome.org/viewcvs/gegl/operations/workshop/remap.c?view'>actual remapping</a>.
tried reusing as much code as possible. Since then I've been trying to make <a
href='http://www.graphviz.org/'>graphviz</a> based visualization of GEGLs state
(the nodes, graphs and properties).  This allows to see <a
href='http://pippin.gimp.org/tmp/tonemap-graph.png'>how the tonemapper
works</a>, as well as closer inspection of the samples in <a
href='http://pippin.gimp.org/gegl/gallery/'>GEGL gallery.</a>

<p><center><a href='http://pippin.gimp.org/tmp/tonemap-graph.png'><img src='http://pippin.gimp.org/tmp/local-contrast-stretch.jpg'/></a></center></p>

<p>Putting together the pieces used to construct the contrast stretcher, would not be
possible in a tree view such as the one used by the GEGL editor nor in OpenRaster using
the hierarchical stacks, since it needs a node that has three inputs and one output to
work properly. (Thus such macros/scripts should be DAGs like in the SVG Filter specification if OpenRaster is going to support this concept.</p>

<p>The tonemapper isn't good enough to properly with some of the OpenEXR test images (<a href='http://pippin.gimp.org/tmp/tonemap.jpg'>ugly sample</a>). Even just adding a fader to allow controlling the amount will probably improve this situation slightly.
</p>

<p>(Photograph of Aurora Borealis over Gj&oslash;vik <a href='http://einar.slaskete.net/index.php/2006/12/15/nordlys'>by EJH)</a></p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>GEGL-Earth</guid>
  <title>GEGL Earth</title>
  <link>http://codecave.org/?weblog_id=GEGL-Earth</link>
  <pubDate>Tue, 19 Dec 2006 17:49:53 +0000
  </pubDate>
  <category>GEGL</category>
  <category>swap</category>
  <description><![CDATA[
<p>I like large images, sometimes I create my own by stitching them together
like the ones in <a href='http://pippin.gimp.org/gallery/panorama/'>my panorama
galley</a>. The image I'm using to stress <a href='http://gegl.org/'>GEGL</a> at the moment is stitched by
NASA instead, and is the hugest image file I've got, the image measures 86400x43200px (~11G uncompressed 24bpp)</p>
<p><center><a href='http://pippin.gimp.org/tmp/gegl-earth.jpg'><img src='http://pippin.gimp.org/tmp/gegl-earth_512.jpg'/></a></center></p>

<p>Two new features were needed in <a href='http://gegl.org/'>GEGL</a> before I could try to load such a large
(larger than RAM) image.
Both of them planned since I was experimenting with 
<a href='http://pippin.gimp.org/horizon/'>horizon</a> as a protoype
running on my PDA in the beginning of this year. An tiled image pyramid (<a href='http://en.wikipedia.org/wiki/Mipmap'>mipmap</a>) to enable display on screen without needing to access all image data combined with a swapfile backend for
the tile system.
</p>

<p>Both the swapping and the logic for updating the pyramid needs some further
work, swap to gain some more features, the pyramid to be speedier when regions
of the backing data changes.</p>

<p>If I am able to find the time to do what I want I should be able to do
a GEGL composited, editable presentation about GEGL in the style of the <a href='http://pippin.gimp.org/lgm2006/'>presentation</a> I
gave at <a href='http://www.libregraphicsmeeting.org/'>LGM</a> in Lyon last year for <a href='http://fosdem.org/2007/'>FOSDEM</a> next year.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>commit.rb</guid>
  <title>Code committal aids</title>
  <link>http://codecave.org/?weblog_id=commit.rb</link>
  <pubDate>Sat, 25 Nov 2006 21:26:03 +0000
</pubDate>
  <category>code</category>
  <description><![CDATA[
<p>To reduce the number of keypresses needed to do a commit to CVS I use the
following tools:</p>
<dl>
  <dt><a href='http://developer.gnome.org/tools/scripts/prepare-ChangeLog.pl.txt'>prepare-ChangeLog.pl</a></dt>
  <dd>Which extracts which detects which files have changed, and writes a ChangeLog entry template.</dd>
  <dt><a href='http://www.vim.org/'>gvim</a></dt>
  <dd>A text editor to edit code, as well as tuning and trimming the generated <em>ChangeLog</em> entry.</dd>
<em>ChangeLog</em> entry template.</dd>
  <dt><a href='http://www.schleef.org/~ds/cicl'>cicl</a></dt>
  <dd>Which does the commit described in the first <em>ChangeLog</em> entry.</dd>
</dl>
<p>This allows me to trim away the changes not yet ready to be commited, the
commit script then commits the changes with the last entry from the <em>ChangeLog</em> as commit message.
</p>
<p>This termgrab shows how it being used in practise:</p>
<pre><b>$ <a href='http://developer.gnome.org/tools/scripts/prepare-ChangeLog.pl.txt'>prepare-ChangeLog.pl</a></b>
  Updating ChangeLog from cvs repository.
    M ChangeLog
  Running cvs diff to find changes.
  Extracting affected function names from C source files.
  Editing the ChangeLog file.
  Done editing ChangeLog.
<b>$ gvim ChangeLog </b><em>#remove files to be kept from commiting, add comments</em>
<b>$ <a href='http://www.schleef.org/~ds/cicl'>cicl</a></b>
Checking in ChangeLog;
/cvs/gnome/gegl/ChangeLog,v  <--  ChangeLog
new revision: 1.723; previous revision: 1.722
done
Checking in bin/editor.c;
/cvs/gnome/gegl/bin/editor.c,v  <--  editor.c
new revision: 1.14; previous revision: 1.13
done
Checking in bin/editor.h;
/cvs/gnome/gegl/bin/editor.h,v  <--  editor.h
new revision: 1.8; previous revision: 1.7
done
Checking in bin/gegl-view.c;
/cvs/gnome/gegl/bin/gegl-view.c,v  <--  gegl-view.c
new revision: 1.14; previous revision: 1.13
done
<b>$</b> <blink>&#9610;</blink>
</pre>
<p><em>Entry was updated:</em>Changed to reflect current reality, I originally had my own
ruby script to do the commit, but cicl a shorter perl version does the same job,
and already existed</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>rosing2006</guid>
  <title>Rosing awards to StopMotion and OOo translators</title>
  <link>http://codecave.org/?weblog_id=rosing2006</link>
  <pubDate>Tue, 21 Nov 2006 15:16:32 +0000
</pubDate>
  <category>stopmotion</category>
  <category>rosing</category>
  <description><![CDATA[
<p>
<a href='http://stopmotion.bjoernen.com/'>StopMotion</a> received the <em>student</em> award, and <a href='http://openoffice.org'>OpenOffice.org</a>'s <a href='http://no.openoffice.org/translation.html#stiftelsen'>Norwegian translation team</a> the <em>language</em> award at the annual
<a href='http://en.wikipedia.org/wiki/Fredrik_Rosing_Bull'>Rosing</a> award ceremony held by the <a href='http://dataforeningen.no/'>Norwegian Computer Society</a>.</p>

<p><center><img src='http://pippin.gimp.org/rosing2006.jpg' alt='Open Source Rosing Awards 2006, StopMotion and OpenOffice Translation team. Øyvind Kolås, Fredrik Berg Kjøstad, Bjørn Erik Nilsen, Axel Boyer. Photo: Knut Yrvin'
title='Open Source Rosing Awards 2006, StopMotion and OpenOffice Translation team. Øyvind Kolås, Fredrik Berg Kjøstad, Bjørn Erik Nilsen, Axel Boyer. Photo: Knut Yrvin'/></cente</p>

<p>
<a href='http://stopmotion.bjoernen.com/'>StopMotion</a> is a stop-motion animation program for Linux developed in the spring of 2005 at <a href='http://www.hig.no/'>Gjøvik University College</a> as a student project for <a href='http://wiki.skolelinux.no/'>SkoleLinux</a>|<a href='http://wiki.debian.org/DebianEdu'>DebianEdu</a>.

The students created a basic stopmotion animation creation tool for use in schools.
I participated in the supervision of the two students and it was great fun to
observe them adhering to open source methods and practices succesfully - making the application end up in several distros during the initial project period.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>gegl-gui-nov</guid>
  <title>Evolving the GUI^Wpublic API</title>
  <link>http://codecave.org/?weblog_id=gegl-gui-nov</link>
  <pubDate>Mon, 06 Nov 2006 00:10:52 +0000
  </pubDate>
  <category>GUI</category>
  <category>GEGL</category>
  <description><![CDATA[
<p>The <a href='http://gegl.org/'>GEGL</a> GUI testbed is evolving, and is now capable of saving output data
as well. The most experimental new feature is search as you type addition of
filters to a processing stack for non destructive editing. <a
href='http://pippin.gimp.org/gegl/gegl-20061105.gif'>(1.6M gif anim.)</a> It seems like
an interface built on similar ideas could be quite effificent. This addition is 
a rearrangement of the existing code based on an idea from <a href='http://thread.gmane.org/gmane.comp.video.gimp.devel/10084/focus=10084'>GIMP developer mailing list.</a></p>

<p><center><a href='http://pippin.gimp.org/gegl/gegl-20061106.jpg'><img
src='http://pippin.gimp.org/gegl/gegl-20061106t.jpg' alt='All menus and dialogs in the GEGL ui.'/></a></center></p>

<p>Such user interfaces for GEGL should probably not be written in C but in
dynamic programming languages like Ruby or Python. Proper bindings for these
languages do not exist yet. This C based GUI will give insights into what
features are needed to succesfully leverage GEGL in GUI applications.
This GUI is a developer toy and behavior, appearance,
stability, fileformat and scope of features are prone to change with the phase
of the moon.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>piksel06-gegl</guid>
  <title>GEGL and babl mingling with other piksels</title>
  <link>http://codecave.org/?weblog_id=piksel06-gegl</link>
  <pubDate>Mon, 09 Oct 2006 16:53:44 +0000
</pubDate>
  <category>GEGL</category>
  <category>presentation</category>
  <description><![CDATA[

<p>This week I'm going to the <a href='http://www.piksel.no/piksel06/'>piksel
06</a> festival for free/libre and open source audiovisual software, hardware
and art. There I'm going to present the state of <a
href='http://gegl.org/'>GEGL</a>, <a
href='http://gegl.org/babl/'>babl</a> and <a
href='http://create.freedesktop.org/wiki/index.php/OpenRaster'>OpenRaster</a>.

In order to have more demoable things for the presentation, some effort is
going into an initial test GUI, that mostly is code readapted from <a
href='http://pippin.gimp.org/bauxite/'>bauxite</a>, the video compositing
editor built on top of <a href='http://pippin.gimp.org/gggl/'>gggl</a> when
experimenting with concepts for GEGL.  </p>

<p><center><a href='http://pippin.gimp.org/gegl/ui.png'><img
src='http://pippin.gimp.org/gegl/ui_t.jpg'/></a></center></p> <p>It looks a
lot better than it is, it has a few known crasher bugs, it
(or rather GEGL) is a lot slower than neccesary due to lack of
caching/intelligent redraw, and more, but at least it works.  </p>

<p>Another nice thing is that GEGL now supports loading of <a
href='http://www.openexr.com'>OpenEXR</a> thanks to a new file-io operation
made by Dominik Ernst. Getting some of the <a
href='http://download.savannah.nongnu.org/releases/openexr/openexr-images-1.4.0.tar.gz'>sample
images</a> into GEGL and playing with adjustments and blurs confirms
that GEGL is <a
href='http://en.wikipedia.org/wiki/High_dynamic_range_imaging'>HDR
capable</a>, but without range remapping ops, it isn't very interesting.  </p>

<p>There still is time to brush things up before the conference, but I'm
looking forward to demonstrate the current capabilties as well as present the
design, use and extension mechanisms of the current GEGL architecture.</p>

]]></description>
</item>


<item>
  <guid isPermaLink='false'>accelerated-developement</guid>
  <title>Accelerated Development</title>
  <link>http://codecave.org/?weblog_id=accelerated-developement</link>
  <pubDate>Thu, 21 Sep 2006 01:05:40 +0000
  </pubDate>
  <category>GEGL</category>
  <category>panorama</category>
  <description><![CDATA[

<p><a href='http://gegl.org/'>GEGL</a> has gone from being
dead, to be dormant last autumn, then undead this spring. The amount of
required refacoring and polish needed before the releasing a first beta
tarball is decreasing and general development is picking up speed, and
<a href='http://crucible.osdl.org/runs/gegl_report.html'>tools</a>
to monitor performance and regressions are being made.

<p><center><a href='http://pippin.gimp.org/view/?../gallery/panorama/dino-eggs.jpg'><img src='http://pippin.gimp.org/gallery/panorama/dino-eggs_512.jpg'/></a></center></p>

<p>Since GEGL was undead it has gotten contributions from 6 new contributors, this seems to indicate that my work to make the code approachable by others is bearing fruit.
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>panoramaic_summer2</guid>
  <title>Panoramic Summer 2</title>
  <link>http://codecave.org/?weblog_id=panoramaic_summer2</link>
  <pubDate>Mon, 18 Sep 2006 20:06:15 +0000
</pubDate>
  <category>photography</category>
  <category>summer</category>
  <category>panorama</category>
  <description><![CDATA[
<p><a href='http://pippin.gimp.org/gallery/night-factory.jpg'><center><img src='http://pippin.gimp.org/gallery/night-factory_512.jpg'/><br/></center></a></p>

<p>During my <a href='http://codecave.org/?weblog_id=roadtrip_siggraph'>roadtrip</a> in the US, I shot a few panoramic pictures, not all of them came out well, and some of them are yet to be fully processed. Here are two random samplings of the Ontario/upstate New York.</p>

<p><a href='http://pippin.gimp.org/gallery/panorama/american-pine.jpg'><center><img src='http://pippin.gimp.org/gallery/panorama/american-pine_512.jpg'/><br/></center></a></p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>performance-instrumentation</guid>
  <title>Documenting Crappy Performance</title>
  <link>http://codecave.org/?weblog_id=performance-instrumentation</link>
  <pubDate>Mon, 18 Sep 2006 12:36:06 +0000
  </pubDate>
  <category>GEGL</category>
  <category>profiling</category>
  <description><![CDATA[
<p>I added a simple, but powerful instrumentation framework to <a href='http://gegl.org/'>GEGL</a> this weekend.
The original plan was to use SVG, xhtml+css or <a href='http://cairographics.org'>cairo</a> for creating nice graphs
and diagrams, but I settled on making UTF8art bar-diagrams, using the glyphs with incremental horizontal coverage in 1/8 increments instead.
</p>

<pre>./unsharp-mask.xml  usecs: 6256331
gegl                     7.693684   ██████████████████████████████████████████ 
  process                6.345501   ██████████████████████████████████▊
    gaussian-blur        3.025135   ████████████████▋
      babl               2.601660   ██████████████▏
      defined-region     0.000009    
      prepare            0.000005    
      other              0.423461   ██▍
    png-save             1.130282   ██████▏
      babl               0.444080   ██▌
      defined-region     0.000005    
      prepare            0.000004    
      other              0.686193   ███▊
    subtract             0.994492   █████▌
      babl               0.927667   █████ 
      defined-region     0.000006    
      prepare            0.000004    
      other              0.066815   ▍
    add                  0.731857   ████
      babl               0.626452   ███▌       

</pre>

<p>Other profiling tools like <a href='http://valgrind.org/'>valgrind</a>'s Callgrind and <a href='http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindIndex'>KCacheGrind</a> provides even more detailed information about where time is spent, but a condensed and domain specific visualization makes it easier to see what the hot-spots are.
</p>

<p>The core of the instrumentation architecture is the following functions:

<pre><em>glong</em>   <b>gegl_ticks</b>           (<em>void</em>);

<em>void</em>    <b>gegl_instrument</b>      (<em>const gchar</em> *<b>parent_task</b>,
                              <em>const gchar</em> *<b>sub_task</b>,
                              <em>glong</em>        <b>usecs</b>);

<em>gchar *</em> <b>gegl_instrument_utf8</b> (<em>void</em>);        <em>/*<a href='http://cvs.gnome.org/viewcvs/gegl/gegl/gegl-instrument.h?view=markup'>header</a>/<a href='http://cvs.gnome.org/viewcvs/gegl/gegl/gegl-instrument.c?view=markup'>source</a>*/</em>
           
</pre>
<p>The first function is a clock providing usecs (1/1000000 second), which can
be used to measure the execution time of code</p>
<p>The second function registers a named sub-task of an already existing task. (Tasks can be registered by calling <tt>gegl_instrument</tt> with 0 as the usecs parameter, the name of the root is specified with an initial <tt>gegl_instrument</tt> call where both <em>parent_task</em>, and <tt>sub_task</tt> have the same value.</p>
<p>
The last function return a UTF8 breakdown of the time usage recorded.
Each task should register it's own time, a special child is appended in the reports signifying how much time has not been accounted for by it's siblings (for the operations in GEGL this is the time spent doing raster manipulation, globally for GEGL this value is slightly wrong (even negative), since recursive invokations of GEGL during processing of the load operations leads to double registration of some processing time.)
</p>
<p>This instrumentation is now automatically built for the <a href='http://pippin.gimp.org/gegl/gallery/'>gallery</a> of the
web-pages (which are generated in the docs subdir when GEGL is compiled). I hope to get this hooked up with the <a href='http://crucible.osdl.org/runs/gegl_report.html'>Automatic regression tests of GEGL at OSDL</a>. To provide insights
about the performance on various architectures, as well plotting historic data
to be able to track performance changes over time.
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>indexed_metamers</guid>
  <title>Indexed Metamers</title>
  <link>http://codecave.org/?weblog_id=indexed_metamers</link>
  <pubDate>Sun, 10 Sep 2006 19:02:04 +0000</pubDate>
  <category>image-processing</category>
  <description><![CDATA[
<p><em>Palletized images</em> are a subset of <em>indexed images</em>.
I have no personal desire for either, but one is an artifact of the past
and the other possible in the realm of <a href='http://pippin.gimp.org/gegl/'>GEGL.</a></p>

<p><center><img src='http://pippin.gimp.org/image_processing/images/palette.png'/></center></p>

<p>A palettized image is a color image that is reduces to a fixed number of
colors.  For colors that have no exact match in the palette
the closest match is used instead (perhaps in combination with error
diffusion/dithering to improve the perceptual match, like GIMPs current
conversion to indexed supports). This palette reduction
can be done automatically on a per layer basis, or as a global filter for the
entire layer stack (like GIMPs current <a href='http://docs.gimp.org/en/gimp-display-filter-dialog.html'>display filters</a>.)</p>

<p>In an indexed image every pixel is a number, this number indicates which
palette index will be used for displaying the pixel. Some programs add
special meaning to the actual number, and disregard the actual RGB value, to
the extent where they introduces <em>indexed metamers</em>, different palette indices
with the same color value given different interpretation by the program.</p>

<p>For people depending on indexed metamers to be preserved
through processing and editing GEGL is bad news, and they should stick with
GIMP 2.x or an old copy of DeluxePaint, for most purposes though GEGL will
probably seemingly provide even more power when it comes to editing of palettized images.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>babl-0.0.4</guid>
  <title>tarballed BablFish observed</title>
  <link>http://codecave.org/?weblog_id=babl-0.0.4</link>
  <pubDate>Thu, 31 Aug 2006 15:39:40 +0000
</pubDate>
  <category>babl</category>
  <category>release</category>
  <description><![CDATA[
<a href='http://pippin.gimp.org/babl/'><img src='http://pippin.gimp.org/babl/graphics/babl-48x48.png' alt=babl logo'/></a>
<p>
The build environment of <a href='http://gegl.org/'>GEGL</a> has received some sorely needed attention,
and as part of that <a href='http://pippin.gimp.org/babl/'>babl</a> has been
polished into a stable state. Babl is a library providing GEGL with <a href='http://pippin.gimp.org/babl/#Vocabulary'>color model and data type vocabulary</a> as well as conversions between pixel formats.</p>

<p>GEGL now depends on <a href='http://pippin.gimp.org/babl/dist/babl-0.0.4.tar.bz2'>babl 0.0.4</a> or newer. This is the first versioned release of babl. 
Babl in CVS now carries the version 0.0.5, this will be incremented to 0.0.6 prior to creating the next official distribution tarball.</p>

<p>Babl does its job well, but not at the speed it might be capable of.
To make babl more useful for GEGL and other system that might use it  more and faster conversion <a href='http://cvs.gnome.org/viewcvs/babl/extensions/'>extensions</a> must be added. 
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>BlueCommon</guid>
  <title>Collaborative Bluetooth Slideshow</title>
  <link>http://codecave.org/?weblog_id=BlueCommon</link>
  <pubDate>Fri, 25 Aug 2006 03:43:25 +0000
  </pubDate>
  <category>code</category>
  <category>bluetooth</category>
  <description><![CDATA[
<table border='0'><tr><td valign='top'>
<img src='http://pippin.gimp.org/BlueCommon/BlueCommon.jpg' alt='bluecommon greeting image'/>
</td><td valign='top'>
<p>Some of my students might be working on a project using some form of bluetooth communication. It all started out with a desire to learn about Object Exhange (OBEX) as well as
some more of the issues of dealing with bluetooth from the commandline in linux.</p>
</td></tr></table>
<p>
My experiments lead to a <em>collaborative slideshow display</em>, where users add images from camera phones using bluetooth. I call it <a href='http://pippin.gimp.org/BlueCommon'>BlueCommon</a> and it is held together by ducttape^Wruby. It is probably possible to crash it, and if it fails to send you something it wants to send you I suspect it might get annoingly persistent.
</p>
<p>The Nokia 770 is probably a nice platform to run this, or a modified version on.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>roadtrip_siggraph</guid>
  <title>Roadtrip to SIGGRAPH</title>
  <link>http://codecave.org/?weblog_id=roadtrip_siggraph</link>
  <pubDate>Fri, 11 Aug 2006 01:05:13 +0000
</pubDate>
  <category>travel</category>
  <category>art</category>
  <description><![CDATA[
<table border='0'><tr>


<td valign='top'><p>
This year I got the opportunity to attend my first SIGGRAPH, as a contributor in the <a href='http://www.siggraph.org/artdesign/gallery/S06/index.html'>art gallery</a>, exhibiting <em><a href='http://pippin.gimp.org/lost_in_time/now_by_then.html'>N&aring av da</a></em>.</p>

<p>I arrived in the US one week early. My nocturnal european behavior made me a morning person, something the suited my unplanned roadtrip. I rented a car and drove to Boston, from
Boston, via Niagara Falls, Toronto Canada, upstate New York, Vermont, New Hampshire, Maine and my first encounter with a barber wielding a cut-throat blade in Lynn MA.</p>

<p>The SIGGRAPH experience itself was overwhelming, I've met people working with
concepts and media I find very interesting. Made new friends, hung out with old ones, and got disgusted with the american love of freezing indoors at the height of summer.</p>

<p>It was two weeks without the ability to do any coding, I gathered my thoughts, and found inspiration instead. Now I am looking forward to <a href='http://gegl.org/'>GEGL</a> development which slowly is picking up momentum and more contributors, as well as investigations into higher level uses of the GEGL technologies.</p>

</td>

<td valign='top'><a href='http://pippin.gimp.org/lost_in_time/siggraph_stall_side.jpg'><img src='http://pippin.gimp.org/lost_in_time/siggraph_stall.jpg'/></a></td>
</tr></table>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>programming_webpages</guid>
  <title>Programming Web Pages</title>
  <link>http://codecave.org/?weblog_id=programming_webpages</link>
  <pubDate>Mon, 17 Jul 2006 16:34:26 +0000
  </pubDate>
  <category>code</category>
  <category>build</category>
  <category>web</category>
  <description><![CDATA[
<p>Work has been under way for a while on <a href='http://gegl.org/'>new webpages for GEGL</a>, I chose to
reuse some of the infrastructure I used to build the <a href='http://pippin.gimp.org/babl/'>babl</a> webpages.
The tools building the static pages are automake, bash and GEGL itself.
Property introspection with gobject provides a nice <a href='http://gegl.org/operations.html'>operation reference</a>. And the <a href='http://gegl.org/gallery/'>gallery</a> is rendered from XML.</p>
<p>I've also made a <a href='http://pippin.gimp.org/gegl/#bootstrapping'>bootstrapping script</a> that retrieves the sources, and hopefully builds them.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>panoramic_summer</guid>
  <title>Panoramic Summer</title>
  <link>http://codecave.org/?weblog_id=panoramic_summer</link>
  <pubDate>Fri, 14 Jul 2006 11:31:27 +0000
</pubDate>
  <category>photography</category>
  <category>panorama</category>
  <category>summer</category>
  <description><![CDATA[

<p><center><img src='http://pippin.gimp.org/gallery/panorama/skroten_512.jpg'/></center></p>

<p>I'm currently in vacation mode. Photography, relaxation and contemplation.
Probably also a bit of procrastination; an epic battle with the beast of autofoo is
looming in the distance.
</p>
<p>The computer has burnt a few cycles stitching magic|scenic views, some of them
already added to my <a href='http://pippin.gimp.org/gallery/panorama/'>panorama gallery</a>.
</p>
<p><center><img src='http://pippin.gimp.org/gallery/panorama/skroten2_512.jpg'/><br/></center>
<center>
<img src='http://pippin.gimp.org/gallery/panorama/orsta-alps_512.jpg'/><br/></center></p> 
]]></description>
</item>


<item>
  <guid isPermaLink='false'>gegl-xml</guid>
  <title>XML based image processing</title>
  <link>http://codecave.org/?weblog_id=gegl-xml</link>
  <pubDate>Mon, 26 Jun 2006 16:28:00 +0100</pubDate>
  <category>GEGL</category>
  <category>XML</category>
  <description><![CDATA[
<p>GEGL now contains gmarkup based parser for a format similar to <a href='http://pippin.gimp.org/oxide/'>oxide</a>, and thus what was the basis for my <a href='http://pippin.gimp.org/xcf2/'xcf2</a> proposal.
</p>
<p>GEGL is also capable of serializing general any graph containing sources, filter and composers to such hierachies. Thus the mechanism to implement a toggle between a layer/graph view in an application like GIMP is possible as long as the types of operations are restricted to these.</p>
<p>The image and XML snippet below illustrates a Layer group, containing a layer clone as well as effect layers.</p>
<p><a href='http://pippin.gimp.org/gegl/gegl-demo/dropshadow.html'><center><img src='http://pippin.gimp.org/gegl/dropshadow.jpg'/></center></a></p>
<pre>
&lt;gegl&gt;
 &lt;tree&gt;
  &lt;node class='png-save' path='-'/&gt;
  &lt;node class='over'&gt;
    &lt;node class='translate' x='100.0' y='100.0'/&gt;
    &lt;node class='over'&gt;
      &lt;node class='clone' ref='gegl'/&gt;
    &lt;/node&gt;
    &lt;node class='translate' x='16.0' y='16.0'/&gt;
    &lt;node class='opacity' value='0.5'/&gt;
    &lt;node class='bcontrast' brightness='-1.0'/&gt;
    &lt;node class='box-blur' radius='16.0'/&gt;
    &lt;node class='png-load' path='data/gegl.png' id='gegl'/&gt;
  &lt;/node&gt;
  &lt;node class='jpg-load' path='data/vinci-fly3.jpg'/&gt;
 &lt;/tree&gt;
&lt;/gegl&gt;
</pre>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>gegl_awakens</guid>
  <title>Det e'kje GEGL alt so glitra</title>
  <link>http://codecave.org/?weblog_id=gegl_awakens</link>
  <pubDate>Mon, 05 Jun 2006 15:04:28 +0000
  </pubDate>
  <category>GEGL</category>
  <description><![CDATA[
<p>One of the projects I've been aspiring to make work is <a href='http://www.gegl.org/'>GEGL</a>. GIMP's next-generation dataflow (graph based), image processing and compositing engine for <a href='http://www.gimp.org/'>GIMP</a>.
</p>
<p>Upon my initial approach many years ago, GEGL didn't do any image processing,
 and I failed to understand the code base. Both of these things have changed
now.</p>
<p>The tests and the implemented (some autogenerated) image processing ops have
not found their place in CVS yet but are available as a 
<a href='http://pippin.gimp.org/gegl/gegl-demo.tgz'>tarball</a> that builds against current GEGL and <a href='http://pippin.gimp.org/babl/'>babl</a> checkouts.
The tarball contains my test suite, which produces a <a href='http://pippin.gimp.org/gegl/gegl-demo/'>HTML gallery</a> of the generated images.
</p>
<p><a href='http://pippin.gimp.org/gegl/gegl-demo/'>
<center><img src='http://pippin.gimp.org/gegl/gegl-demo/multi-gegl.jpg'/></center></p>
</a>
<p>There is still a lot of work to be done, but hopefully it is now easier for others to join in :) We need to: settle the API, plug memory leaks, swap to disk instead RAM, fine tune the abyss, make optimized non floating point ops that are regression tested against the float version, settle the operation API, document, optimize, integrate with other frameworks, make the system distributed across rendering nodes, multi threading, and more.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>visual_regressions</guid>
  <title>Visual Regressions</title>
  <link>http://codecave.org/?weblog_id=visual_regressions</link>
  <pubDate>Wed, 31 May 2006 09:02:06 +0000
  </pubDate>
  <category>build</category>
  <category>GEGL</category>
  <category>testing</category>
  <description><![CDATA[
<p>I have added regression tests to my GEGL tree. The new tests write PNG
images which are compared to the md5sum of a reference images. Adding a new
test: 
</p>
<ol>
  <li>Add a new <a href='http://pippin.gimp.org/gegl/regression_tessts/roi-test-7.c.txt'>.c</a> file that generates it's reference PNG on stdout</li>
  <li>Create an empty reference image.
<pre>echo "not a valid PNG" > roi-test-7_ref.png</pre>
</li>
  <li>Run the test suite. The <em>test</em> target of the <a href='http://pippin.gimp.org/gegl/regression_tests/Makefile'>Makefile</a> will now generate PNG's corresponding to images matching the wildcard <tt>*_ref.png</tt>, as well as do an MD5 comparison on them.
  <pre>make check</pre></li>
  <li>Visually inspect roi-test-7.png, if the rendered test image is not
satisfactory, do some magic to the code, hope it works and go back to step 3.
   If we run <pre>make recheck</pre> the pngs will be regenerated and checked
   no matter the timestamps (thus exercising dynamically linked libraries as well)</li>
  <li>Make the current rendition of the test the reference when it is rendering correctly.
  <pre>cp roi-test-7.png roi-test-7_ref.png</pre>
</li>

  <li>Do changes, and restructurings on the code, seeing some tests pass and
some tests fail. Make all tests pass when changing something. From time to time
changes crucial parameters like tile-size, caching, backend etc. To exercise
other code paths.
  </li>
</ol>
<p>Screenshot:</p>
<pre>
pippin@id:~/src/gegl-demo/$ make check
<span style='color:gray'>//  snipped away build (gcc) output //</span>
md5sum *_ref.png|sed s/_ref//|md5sum --check -
./buffer-test-0 > buffer-test-0.png
./buffer-test-1 > buffer-test-1.png
./roi-test-0 > roi-test-0.png
./roi-test-1 > roi-test-1.png
./roi-test-2 > roi-test-2.png
./roi-test-3 > roi-test-3.png
./roi-test-4 > roi-test-4.png
./roi-test-5 > roi-test-5.png
./roi-test-6 > roi-test-6.png
./roi-test-7 > roi-test-7.png

Computing checksums:
<a href='http://pippin.gimp.org/gegl/regression_tests/buffer-test-0.png'>buffer-test-0.png</a>: OK
<a href='http://pippin.gimp.org/gegl/regression_tests/buffer-test-1.png'>buffer-test-1.png</a>: OK
<a href='http://pippin.gimp.org/gegl/regression_tests/roi-test-0.png'>roi-test-0.png</a>: OK
<a href='http://pippin.gimp.org/gegl/regression_tests/roi-test-1.png'>roi-test-1.png</a>: OK
<a href='http://pippin.gimp.org/gegl/regression_tests/roi-test-2.png'>roi-test-2.png</a>: OK
<a href='http://pippin.gimp.org/gegl/regression_tests/roi-test-3.png'>roi-test-3.png</a>: OK
<a href='http://pippin.gimp.org/gegl/regression_tests/roi-test-4.png'>roi-test-4.png</a>: OK
<a href='http://pippin.gimp.org/gegl/regression_tests/roi-test-5.png'>roi-test-5.png</a>: OK
<a href='http://pippin.gimp.org/gegl/regression_tests/roi-test-6.png'>roi-test-6.png</a>: OK
<a href='http://pippin.gimp.org/gegl/regression_tests/roi-test-7.png'>roi-test-7.png</a>: FAILED
md5sum: WARNING: 1 of 10 computed checksums did NOT match
make: ** [md5check] Error 1
pippin@id:~/src/gegl-demo/$ make recheck<blink>&#9610;</blink>
</pre>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>modern_art_bug_hunting</guid>
  <title>Modern Art Bug Hunting</title>
  <link>http://codecave.org/?weblog_id=modern_art_bug_hunting</link>
  <pubDate>Mon, 22 May 2006 20:52:09 +0000
</pubDate>
  <category>art</category>
  <category>bug-hunting</category>
  <description><![CDATA[
<p><center><img src='http://pippin.gimp.org/tmp/visual_bug.png'/></center></p>
<p>When pursuing geometrical bugs it is easier and more fun to look at
<a href='http://cairographics.org/'>cairo</a> rendered images than scrolling through lines of printf'd coordinates.
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>temporal_encryption</guid>
  <title>Public domain for private backups</title>
  <link>http://codecave.org/?weblog_id=temporal_encryption</link>
  <pubDate>Tue, 09 May 2006 21:28:06 +0000
  </pubDate>
  <category>DRM</category>
  <category>Encryption</category>
  <description><![CDATA[
<p>To protect our digital heritage source code should be preserved. Currently Free and Open Source Software is the code that have made the largest imprint in those young annals. We cannot trust companies to keep the source (not even individual developers). At some point in the future games from the beginning of computer history will be in the public domain, but the work of the programmer is lost imparing future use and study.
</p>
<p>One solution is a publicly trusted institution to temporal private/public key manufacture service. New public keys to encrypt data is released daily/monthly, and the corresponding private key after 10 years. The encrypted material can be released into the public domain, as can the public key used to encrypt it. The public will not get the key to unlock this until the future.
</p>
<p>After 10 years, one can release temporal locked information with a lock duration of 0-10years. Another option would be to pregenerate a set of disclosure dates, for instance annual.
</p>
<p>The security of the process should be maintained through public disclosure, all aspects of key generation, intermediate storage and disclosure procedures should be open source. And the security of the system be protected by international observers.
</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>submerged</guid>
  <title>I am my own tool smith</title>
  <link>http://codecave.org/?weblog_id=submerged</link>
  <pubDate>Fri, 05 May 2006 10:40:24 +0000</pubDate>
  <category>poetry</category>
  <category>art</category>
  <description><![CDATA[
<div style='width: 100%;background-image: url(http://pippin.gimp.org/flying.jpg); background-position: top right; background-repeat: no-repeat;'>
<pre style='color: #500'
>submerged in
abstract logic

discovering and
reshaping tools

traversing
levels of abstraction

creating
tools from tools
      with tools

reconstructing
deconstructed structures

fetching
iterating processing

orthogonal extent
expansion</pre></div>
]]></description>
</item>




<item>
  <guid isPermaLink='false'>man_in_the_api</guid>
  <title>Man in the API</title>
  <link>http://codecave.org/?weblog_id=man_in_the_api</link>
  <pubDate>Sun, 30 Apr 2006 02:04:10 +0000
</pubDate>
  <category>GEGL</category>
  <category>API</category>
  <description><![CDATA[
<p>
When restructuring some tile management code,

I have stumbled upon a fun code<tt>^W</tt>design pattern, not sure if it is an existing one, and I still don't know how well it works.
<p>The core idea is <em>API enhancement through a <a href='http://en.wikipedia.org/wiki/Man_in_the_middle_attack'>man-in-the-middle-attack</a></em>:
</p>
<center>
<div><a href='http://pippin.gimp.org/gegl/gegl_tile_management2.dia'><img src='http://pippin.gimp.org/gegl/gegl_tile_management2.png' alt='UML diagram'/></a></div>
</center>
<dl>
  <dt>GeglTileStore</dt>
  <dd>The core of the API, implements get_tile(x,y,z) and message(msg_enum, x,y,z,data), which are virtual methods reimplemented by subclasses.
</dd>

  <dt>GeglTileTrait</dt>
  <dd>A Man-in-the middle that filters the API, subclasses will override
  behavior or have other side effects on the behavior of the API. Can provide caching, implementation for "blank" tiles in place of NULL for get_tile(), coordinate translations etc.
  </dd>

   <dt>GeglTileTraits</dt>
   <dd>A chain of men-in-the-middle.
   </dd>

   <dt>GeglBuffer</dt>
   <dd>The object that is the "public" side of this API, the rest of the
classes are implementation details. Automatically manages it's own source of data, caching, blank tile copy on write and more.
	<div>A TileBuffer provides a TileStorage (net, disk or shared mem) as well as a set of associated tratis, and methods do use the associated traits.)</div>
   </dd>

   <dt>GeglSubBuffer</dt>
   <dd>A trait chain using an existing buffer a source, that provides
further offseting/clipping of the region accessed. Buffers as well as SubBuffers act as sub-buffer factories.
    </dd>
   <dt>GeglTileDisk, GeglTileNet...</dt>
   <dd>Persistent tile providers, tileswap/wire protocol or similar,
   adding a new one touches minimal new code.
   </dd>
   <dt>GeglTileCache, GeglTileEmpty ...</dt>
   <dd>Elements of code that need to know what tile communication is
   performed, and/or manipulates the result. Some might depend on
   tuning and additional methods in canvas.
   </dd>
</dl>
<p>Update: The best suggestion for what design pattern it is most similar to is "Chain of command", not a full match though.</p>
]]></description>
</item>


<item>
  <guid isPermaLink='false'>codecave_term</guid>
  <title>Naming things is one of the harder aspects of programming.</title>
  <link>http://codecave.org/?weblog_id=codecave_term</link>
  <pubDate>Thu, 27 Apr 2006 21:48:11 +0000
</pubDate>
  <category>codecave</category>
  <description><![CDATA[
<p>I searched google for <dd>"Code Cave"</dd>, and found the following definition:</p>
<dl>
<dt><b>code cave</b></dt><dd><div>Noun, (<em>plural</em>: code caves)</div>
<p>
   1. In a computer program, it is an unused block of memory that someone, typically a software cracker, can use to inject custom programming code to modify the behavior of a program. This is one of the many tricks available, and is often used to bypass copy protection or add cheat codes to games.</p></dd>

<p>Hmm...</p>
]]></description>
</item>



<item>
  <guid isPermaLink='false'>static_blog</guid>
  <title>Spartan blogging</title>
  <link>http://codecave.org/?weblog_id=static_blog</link>
  <pubDate>Wed, 26 Apr 2006 14:02:46 +0200</pubDate>
  <category>blog</category>
  <category>bash</category>
  <category>JavaScript</category>
  <description><![CDATA[
<p>
This blog is served as <a href='http://codecave.org/.rss'>RSS</a> to you, on <a href='http://codecave.org/'>codecave.org</a> there is a javascript using xmlHTTPRequest, and massaging it into XHTML.
</p>
<p>Blogging is done by AJAX monitoring the scratch text file being edited through ssh. When the contents are right the item is published by issuing <tt>$ ./blog "id" "Title of item"</tt>. This <a href='http://codecave.org/blog'>bash script</a> inserts the new entry into the start of the feed.
</p>
]]></description>
</item>


  </channel>
</rss>
