I have a lot of programming niche interests -- video, VNC, static analysis, PDF, filesystems, Flash, SOAP, etc. Most of all, I love it when these interests intersect. For example, I wrote still-closed-source (sigh) library that converts a VNC stream to QuickTime. A prototype of that software was the basis for the YAPC::NA 2006 videos I produced.
Another convergence happened last week. Google released MacFUSE 1.x, a Mac port of the Linux user-mode filesystem code. I had tried an earlier version, but I never got the Perl bindings (Fuse.pm) to work right. What can this do? It lets you write your own mountable virtual filesystem in a couple hundred lines of code.
Back in 2002-2005, I did a ton of PDF work. A result of that was a base library, CAM::PDF. I got authority to release it to CPAN about the same time the business motivation for the library dried up. But in the process, I learned the PDF specification inside and out. PDF is basically a serialization of an arbitrary tree structure: strings, numbers, hashes, arrays, references and blobs, all in an almost-human-readable syntax.
You can store anything in PDF. Most of that tree is focused on storing pages, text and graphics, but the fascinating part is that's just convention. The underlying data structure is generic.
So why not put filesystem data and metadata inside a PDF? I mentioned the idea at the last Madison Perl Mongers meeting and they laughed at me! (LAUGHED! at ME!) Well, that was enough motivation! A weekend later, I released Fuse:PDF v0.01 to CPAN. It's still very worthy of the v0.01 label (no symlinks, no hardlinks, no large files) but it's usable.
What do you think? Inspired or daft? Should I have put it in the Acme:: namespace?
[Along the way, I'm also writing Test::Virtual::Filesystem which is a collection of typical file I/O actions that should work on any mounted filesystem.]