Cyperacea Papyrus XVD14

Papyrus Baselines

Papyrus 1 Process

Papyrus 9 Moving

Production Notes

ffmpeg, potrace, scripting inkscape, imagemagic

Rooftop Sand Drifting Experiments

Experiments with site-specific and durational sculpture, in the form of human-engineered aeolian landscapes.

Site Plan

Experiment 1

Forcibly relocate existing drifts, partial drifts, and proto-drifts to installation site from Pacific Ocean-facing native site. Hoist up to tree-house level. Re-plant in designated areas.

Still and video documentation of site beforehand, at initial placement, day intervals, marking desired shapes. Try to set positions and shoot from minimum two angles/sites for each drift.

Experiment #1, Day #0, Site Location #1 Westward

Experiment #1, Day #0, Site Locations 1-3, North and Westward

Experiment #1, Day #2, Site Locations 1-3, North and Westward

Experiment #1, Day #2, Site Location #3 Overhead, King Low Tide to Sunset 4x

Experiment 2

Concept #1

devpac-roof-plan-2-triangleConcept #2

In planning phase. Potential changes:

  • Create a small, mirrored barrier to shape the deposition
  • Increase contrast with background, perhaps by rendering the background black.
  • Create open, semi-open, or arbitrailly-open structures to record or shape deposition
  • And what of overhead surveillance, passive monitoring?

Production Notes

Pulley systems. Design to gain mechanical advantage to roof for 100lb loads.

Structural weight limit. Assume an allowable load of 40lb / square foot. A 5 gallon, 1 foot diameter round plastic container weighs 53 lbs when filled to 10 inches, and 40 lbs when 7.5 inches. Normalizing to 80lbs/square foot. Thus, try to keep the drifts under 6 inches?

Wind load. In particular, securing sculptural objects in the face of 70-knot westward winds. Assuming wind breaks are a collection of loose objects on the surface of the roof, what weight or mounting is required to anchor them to the roof surface in the face of potentially significant horizontal wind force? Given a 6″ vertical face area around 12″ long, what is the wind load? What support system and mounting options would work?

For video, shoot on DSLR raw and then edit on linux. Compression via handbrake, and then once compressed time collapsing/expanding via ffmpeg tools for speeding up/slowing down audio and video, for instance changing the frame rate from 30 to 120 for a 4x increase. WordPress embedding YouTube hacks for autoplay, looping. See the helpful docs, yo.

What materials to use for outdoor sculpture? Metal frame, and attach to the structure of the roof? Or heavy, and use the weight of the plinth to hold down the meta-structure in the face of 50-70mph Pacific winds? What weight would be necessary to hold down a base plinth without being attached to the roof?

Using 16″ x 6″ blue acrylic wind breaks, secured via drilling and bolting on either side with 12-10″ 2 x 4 material, Krylon spray-painted black.

What surface on the wind breaks? Louvered would modulate the air flow. Laser-drilled could form patterns. Computer-modeling in opencv or openFrameworks is necessary to form precise shapes or gain insight into wind erosion.

Research Notes

Agnes Martin, Writings, Hatje Cantz Publishers, 2005
Daniel Buren, Sulle vigne: punti di vista (2001), Castello Di Ama
Félix González-Torres, “Untitled” (Placebo), 1991
Desert Breath, D.A.S.T Arteam, 1997
Today for Tomorrow, National Institute of the Conservation of Cultural Property
San Francisco Bay Tide Chart, 2014
San Francisco Bay Wind Patterns, realtime
Surfrider Foundation, San Francisco Chapter
Ocean Beach, Golden Gate National Parks Conservancy
Sand Dunes, National Parks Service
California Costal Comission, DRAFT Sea-Level Rise Policy Guidance
Terraserver, commercial satellite imagery.

Gone Awry Goes Kindle



Create an experimental electronic artist book for Kindle. Using the Manga/Comic/Graphic Novel example provided as part of Kindle Format 8 Publishing Tools to create the electronic version of Gone Awry.

Use KindleGen and Kindle Previewer to create the electronic edition and check quality. The linux version of calibre is used to check the generated .mobi file, and to tag and edit metadata. Then, upload the generated .mobi file to the Kindle Direct Publishing web-app, and fill in all rest of the metadata in a browser.

From the web app, publishing it on Amazon is easy.


Amazon’s current proprietary format is: Kindle Format 8, or KF8. The file extension is .mobi. The Amazon specifications are in: Amazon Kindle Publishing Guidelines.

Parts of this also use OPF, the packaging for epub.

Target Display Hardware

Some key data points about display resolution of select current-model e-readers. Plan is to only support color, high-resolution devices.

  • Kindle Fire HD 7″ resolution is 1280 x 800 x 216 ppi8.9″ resolution is 1920 x 1200 x 254 ppi
  • Nexus Tablets 7″ resolution is 1920 x 1200 x 323 ppi (WUXGA, 1.6), 10″ resolution is 2560 x 1600 x 300 ppi (WQXGA, 1.6)
  • iPad 7″ resolution is 1024 x 768 x 163 ppi (XGA, 1.3), 9.7″ resolution is 2048 x 1536 x 264 ppi (QXGA, 1.3)

Versus layout for Gone Awry.

  • Print (19 x 13, 1.46)
  • ebook 1 (19.2 x 12, 1.6)
  • kindle publishing guidelines for fixed layout (1024 x 600 or 1536 x 900 zoom, 1.7)

Image Sizing and Aspect Ratio

First, resize existing .svg base documents in inkscape to the correct aspect ratio. For this project, the aspect ratio is 1.6. Thus, inkscape page sizes are changed from 19 x 13 inches to 19.2 x 12 inches.

This file is then exported as a transparent bitmap, at 2560 x 1600 @ 300dpi.

Next step is to process it in CS6 Photoshop on Mac OS X. The following transforms:

  • Layer->Flatten
  • Image->Image Size to 2560 x 1600
  • File->Save As jpeg, 9, 10, 11 qualities, but adjust to hit below 800k

HTML doc

Re-write example to suit Gone Awry, based on prototyping with a DocBook 5.0 XML form to generate the beginning HTML. Take this, edit the .opf and .ncx files to create a manifest and a table of contents/touch list, and bundle it up with the toplevel “images” directory such that the resulting filenames in the generated “gone-awry.opf” file are correct.

Kindle (KF8) doc

Unpack kindle binaries on linux, and run on the master list of files (the .opf file) as:

kindlegen gone-awry-v2.html -c0 -verbose gone-awry.opf

That should chug along, spewing a bunch of information. Pay attention, and fix any issues. The last bit of information before a successful creation of the .mobi file is related to the file size, and download time. Something like:

Info(prcgen):I1041: The file format version is V8
Info(prcgen):I1032: PRC built successfully
Info(prcgen):I15000:  Approximate Standard Mobi Deliverable file size :   0019466KB
Info(prcgen):I15001:  Approximate KF8 Deliverable file size :   0019526KB

From this, one can make back-of-the-envelope calculations about the royalty rates. For 70% royalties, the publisher must pay Amazon $0.15 per 1MB of .mobi file delivered. Thus, for a 40MB file, the delivery charge would be $6. So, the price would have to be more than this to break even. For 30% royalties, there is no delivery fee so pricing could feasibly drop below $6.


The final book looks like “Gone Awry Kindle Edition” on Amazon’s marketplace.

Future work would be to shift to SVG containers, improving text legibility by un-rasterizing the text or presenting a vector text layer, and look at ways to add “scroll anchors” such that a “page flick” motion would speed through the next couple of pages before alighting on the specified anchor.


Some notes from 2011 on self-publishing.

Current best sellers in the Kindle Store. August graphic novel sales, information, reviews.

Some of the meta-problems with pagination, and mapping electronic books to print books. Some meta-hating on some aspects of the current state-of-the-art.

A Digital Shift: Libraries, Ebooks and Beyond. Corey Doctorow, Library of Congress, 2013

libabigail aka C++ Instrumentation and Analysis


Libabigail is shorthand for the alternative, which just so happens to be a bit of a mouthful: “GNU Application Binary Interface Generic Analysis and Instrumentation Library.”

This is a current compiler/language research topic to provide a serialized XML form of C++11 sources as compiled by GNU g++, and a way of looking at the data produced. This data can be parsed to more accurately determine ABI compatibility, to better understand code additions and changes and how these change the exported interface, to examine and prototype how C++11 language usage determines linkage, etc.

Discussions about this functionality started at the “C++ ABI BOF” at the GNU Tools Cauldron 2012 Prague. This work was created at Red Hat, by Benjamin Kosnik, Jason Merrill, and Dodji Seketeli. Some updates at 2013 Cauldron. See “Cauldron 2013 GCC ABI BOF.”

Development sources are written in mixed C++2003/C++11, hosted in git, based on GCC trunk, and tracking what will to be gcc-4.9.0. The branch is administered by Dodji Seketeli.

Please feel free to try it out, but know that the state is experimental and quite raw.

Feedback and assistance is welcome.

Starting from a git working tree as described in GitMirror, add the libabigail repository as follows:

git checkout -b libabigail origin/libabigail

To stay up to date, use:

git pull


How is this expected to be used? First, a libabigail top-level directory is either added to the GCC sources or compiled as a first step and put into some PREFIX directory. The GNU C++ compiler, g++, is configured to use this new library with:

configure .. --with-abigail=$PREFIX

Thus configured, the C++ front end is built, installed, and used as the primary compiler. All sources are compiled with an additional flag, -fdump-abi.

So, this command:

g++ -c -fdump-abi

Creates two files:

  • somefile.o

    The object file


    The XML instrumentation file



Toplevel namespace is abigail.

The interface header files in libabigail:


Doxgen is used to document the sources: try make html to generate, and look in libabigail-build-dir/doc/api/html/index.html to read it.

And then the binary interface is in


Each object file is compiled to a translation_unit. The sum of all translation_units is a corpus.

Compiler-generated files are read as serialized input to a translation_unit and de-serialized. And any modified form is written to an output file in serialized form.

The interface to the C++ intermediate representation is best viewed in the class documentation.

Opinions and Wild Guesses

1. Some formatting tips.

– classes “read” as types, data, members functions. In that order.

– doxygen gives feedback on the state of the doxygen parse in the form of a log, as you run “make html.” Read this log: doxygen is a fuzzy parse. There are formatting things you can do to make it better. Do them. It’s easier to fix up these errors then figure out why the generated HTML is poor.

2. Use of shared_ptr is intriguing.

There are not really a lot of existing usage patterns for std::shared_ptr in libstdc++ (in C++11 , , ). If you look at the page of boost idioms for shared_ptr usage:

One notices that there’s not a lot of use of shared_ptrs in interfaces. Yet in libabigail, that is very common. I’m curious about this style question.

And most usage is up for debate, see this stack overthow discussion about using shared_ptrs as function arguments. Should the parameters be const reference or just shared_ptr? And another.

Some interesting thinking from microsoft on shared_ptr usage.

3. Use of virtual binary operators is odd.

The old adage is that operators cause havoc in overload resolution. These are binary operators, but the stigma lingers. A vague feeling is not the same as something definite that’s a hard no. It’s more like the pirate code than a strict coding convention or hard rule. I would say that if you ever start to see strange bugs due to overloading, consider making these (non-operator) functions.

Otherwise, do it.

Piracy Project, Passport Photogravure Planning

First printed image/impression of the Pirate Passports, all six plates inked black. See “Piracy Project, aka The New Sharing” for other fragments recovered in 2011. All etching/printing via Emily York.

First Print

Etched Plates

For the second round of  prints, start by labelling the plates as follows.







Then use these plates to create different compositions. These compositions will be printed on Fabriano Rosasapina paper, and cut to a convenient work size for plate image + margin, assuming centered 5 x 8 in the photogravure. Say 11 x 16, with 3 inch horizontal margins, and 4 inch vertical margins.

The four combinations of plates: desert, sky, text, lines.

In the table below, print order value zero means the first plate printed, one means the second plate, and two means the third plate. There are two color palettes: color and color alt. Ideally each combination would be printed twice, one with each color palette. The first color palette is light cyan/medium blue/70% gray. The second color palette is yellow/dark yellow/burnt red.

A layering template can be composed by adding the six plates above into a photoshop document, with each plate on a separate layer. Each layer is composed of some degree of transparency and then multiplied with all the rest of the layers to produce the final composite image. That is step one in layering: compositing.

Step two is to get the colors. (Old way: an effects layer for color/adjustment layer is added to each of the six layers containing a raster image, with light cyan/blue/70% gray variants saved off as separate files with “lighten” blending options, to respectively simuate a cyan, blue, or 70% gray inking of a plate.) Via Rikk Flohr at the Adobe Pop-Up store: use a combination of mode changes and mono-toning to simulate different color inks. The workflow goes like this: open each of the six grayscale plates. For each of them, one first converts the mode to Grayscale, and then to Duotone, and then from that one can go down to Monotone and then select a color besides black. Once the image is the right color, then convert the mode back to CYMK and paste into the compositing file.

The third step to to make a photoshop document for each of the  four compositions that models both the color and composition. In this document, the colored layers are stacked in groups representing the image, and then only one of the colors is selected for each image, and multiplied with the specific color selected for the second plate, etc. This is the final visualization for the engraved plate.

Here is the result for the primary plates, as per the instructions above.

01: desert

print order               plate name                  color                        color alt

2                                guilloche-3                   wedgewood             dark yellow

1                                guilloche-1                    light cyan                 yellow

0                               photo-sky                      70% gray                 cardinal red

02: sky

print order               plate name                  color                        color alt

2                              guilloche-3                   light cyan                 yellow

1                              guilloche-2                   wedgewood             dark yellow

0                              photo-desert               70% gray                 cardinal red

03: text

print order               plate name                  color                        color alt

2                              text                             70% gray                 cardinal red

1                              guilloche-2                  wedgewood              dark yellow

0                              guilloche-3                  light cyan                  yellow

04: line

print order               plate name                  color                        color alt

2                              guilloche-3                 wedgewood               orange

1                              guilloche-2                  70% gray                   dark gray or silver

0                              guilloche-1                  light cyan                   yellow

Gone Awry Project Planning



This is an experiment in book form.

This is an experiment in artist book form.

Instead of a book composed of a sequence of all-the-same size pages and spreads of two facing pages, Gone Awry is intended to be a linear list of pages with individual spread sizes constructed as multiples of one, two, three, or four individual pages. (This is what the second column on the index means.)

So, instead of opening a conventional book and seeing a spread of page one and two, Gone Awry is intended to be displayed as page-one-two-three-four as one spread, page-five-six as the second spread, etc. In this way, the bound object can tessellate out, like a solar sail. Expanding out from the confines of the space occupied by the bound object to occupy two, three, four times the size.

Is this what electronic books will look like, when iPads have stretchable screens? Micro-ized projection? The physical book form adapts to a new form after examining the opportunity offered by electronic counterparts. What is a book? What is a scroll?

If it is to be viewed all at once (let’s admit this is unlikely due to the massive size), then the spread end and beginning are expected to form one plane, and the next spread is intended to be at an angle veering off. So, it would be viewed as a long squiggle. This is different than Yve Klein’s Store Poème (Scroll Poem, 1960) although this work is charmingly related in literary genre and total length.

Pages as per version two. Final composition shifted for the version three scaling operation.

The paper is KM04, Natural Kozo with Gampi from Hiromi Paper in Santa Monica. Each 25″ x 38″ sheet is cut in half vertically, and then imaged via high-resolution inkjet.

Of Interest:

1) Kathan Brown, Paradise, 1982

2) Yves Klein, Store Poème (Scroll Poem), 1962 (1480 x 77.9cm)

3) Ansel Adams, Sierra Nevada the John Muir Trail, 1938

4) Robinson Jeffers, Granite and Cypress, 1975