Older blog entries for pippin (starting at number 13)

Collaborative Bluetooth Slideshow

bluecommon greeting image

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.

My experiments lead to a collaborative slideshow display, where users add images from camera phones using bluetooth. I call it BlueCommon 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.

The Nokia 770 is probably a nice platform to run this, or a modified version on.

Syndicated 2006-08-25 03:43:25 from codecave.org

Roadtrip to SIGGRAPH

This year I got the opportunity to attend my first SIGGRAPH, as a contributor in the art gallery, exhibiting N&aring av da.

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.

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.

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 GEGL development which slowly is picking up momentum and more contributors, as well as investigations into higher level uses of the GEGL technologies.

Syndicated 2006-08-11 01:05:13 from codecave.org

Programming Web Pages

Work has been under way for a while on new webpages for GEGL, I chose to reuse some of the infrastructure I used to build the babl webpages. The tools building the static pages are automake, bash and GEGL itself. Property introspection with gobject provides a nice operation reference. And the gallery is rendered from XML.

I've also made a bootstrapping script that retrieves the sources, and hopefully builds them.

Syndicated 2006-07-17 16:34:26 from codecave.org

Panoramic Summer

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.

The computer has burnt a few cycles stitching magic|scenic views, some of them already added to my panorama gallery.



Syndicated 2006-07-14 11:31:27 from codecave.org

XML based image processing

GEGL now contains gmarkup based parser for a format similar to oxide, and thus what was the basis for my proposal.

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.

The image and XML snippet below illustrates a Layer group, containing a layer clone as well as effect layers.

<gegl>
 <tree>
  <node class='png-save' path='-'/>
  <node class='over'>
    <node class='translate' x='100.0' y='100.0'/>
    <node class='over'>
      <node class='clone' ref='gegl'/>
    </node>
    <node class='translate' x='16.0' y='16.0'/>
    <node class='opacity' value='0.5'/>
    <node class='bcontrast' brightness='-1.0'/>
    <node class='box-blur' radius='16.0'/>
    <node class='png-load' path='data/gegl.png' id='gegl'/>
  </node>
  <node class='jpg-load' path='data/vinci-fly3.jpg'/>
 </tree>
</gegl>

Syndicated 2006-06-26 15:28:00 from codecave.org

Det e'kje GEGL alt so glitra

One of the projects I've been aspiring to make work is GEGL. GIMP's next-generation dataflow (graph based), image processing and compositing engine for GIMP.

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.

The tests and the implemented (some autogenerated) image processing ops have not found their place in CVS yet but are available as a tarball that builds against current GEGL and babl checkouts. The tarball contains my test suite, which produces a HTML gallery of the generated images.

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.

Syndicated 2006-06-05 15:04:28 from codecave.org

Visual Regressions

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:

  1. Add a new .c file that generates it's reference PNG on stdout
  2. Create an empty reference image.
    echo "not a valid PNG" > roi-test-7_ref.png
  3. Run the test suite. The test target of the Makefile will now generate PNG's corresponding to images matching the wildcard *_ref.png, as well as do an MD5 comparison on them.
    make check
  4. 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
    make recheck
    the pngs will be regenerated and checked no matter the timestamps (thus exercising dynamically linked libraries as well)
  5. Make the current rendition of the test the reference when it is rendering correctly.
    cp roi-test-7.png roi-test-7_ref.png
  6. 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.

Screenshot:

pippin@id:~/src/gegl-demo/$ make check
//  snipped away build (gcc) output //
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:
buffer-test-0.png: OK
buffer-test-1.png: OK
roi-test-0.png: OK
roi-test-1.png: OK
roi-test-2.png: OK
roi-test-3.png: OK
roi-test-4.png: OK
roi-test-5.png: OK
roi-test-6.png: OK
roi-test-7.png: FAILED
md5sum: WARNING: 1 of 10 computed checksums did NOT match
make: ** [md5check] Error 1
pippin@id:~/src/gegl-demo/$ make recheck

Syndicated 2006-05-31 09:02:06 from codecave.org

Modern Art Bug Hunting

When pursuing geometrical bugs it is easier and more fun to look at cairo rendered images than scrolling through lines of printf'd coordinates.

Syndicated 2006-05-22 20:52:09 from codecave.org

Public domain for private backups

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.

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.

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.

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.

Syndicated 2006-05-09 21:28:06 from codecave.org

I am my own tool smith

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

Syndicated 2006-05-05 10:40:24 from codecave.org

4 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!