Program Description

   http://greatfractal.com/IdThreePlugin.html

   (This page is an extremely rough draft and is full of all kinds of
   errors. I will try to improve the documentation over time if I release
   future versions.)

   Foswiki is, in my opinion, the best wiki ever created, but one of
   the least well known. I used it as the basis for my
   LandmarkFilmProductionSystem and OscarPartySystem. The only
   reason I didn't use it for this website is because its dynamic nature
   was too much for the tiny Raspberry Pis that I wanted to use.

   When I created BashTalkRadio, I needed a place to view and play my
   recordings. I experimented with Ampache, Subsonic, XBMC, and MPD, all
   good media servers, but I already had Foswiki server running, so I
   didn't want to manage another server.

   Foswiki could play the files well, through its javascript player,
   creating an experience similar to Subsonic, but it had no mechanism for
   reading the ID3 tags. The ID3 tags were where I stored the show title,
   guests, and show description obtained by my web scraper.

   So I decided to create one. It was my first experience with Perl. It
   reads ID3 tags from mp3, ogg vorbis, and flac files.

Perl dependencies

     * MP3::Info
     * Ogg::Vorbis::Header::PurePerl
     * Audio::FLAC::Header

   The plugin itself creates 4 new Foswiki Macros:

   %ID3GETTAG{}%
     Parameter:               Description
   web="..."      Web where attachment is located.
   topic="..."    Topic where attachment is located.
   filename="..." Filename of attachment.
   tagname="..."  Name of tag to display (e.g. ARTIST)

   %ID3PLAYER{}%
     Parameter:              Description
   web="..."      Web where attachment is located.
   topic="..."    Topic where attachment is located.
   filename="..." Filename of attachment.

   %ID3POPUP{}%
     Parameter:                    Description
   web="..."      Web where attachment is located.
   topic="..."    Topic where attachment is located.
   filename="..." Filename of attachment.
   labeltag="..." Name of tag to display as label (e.g. ARTIST)
     * ID3LIST

    Parameter:            Description
   web="..."   Web where attachment is located.
   topic="..." Topic where attachment is located.
   label="..."
   format="..."

   Variables:

   $popup
   $tag(ARTIST)
   $filesize

   Example:
%TABLE{sort="on" initsort="1" initdirection="up"}%
| *Date* | *Name* | *Artist* | *Album* | *Filesize* |
%ID3LIST{web="webname" topic="topicname" label="TITLE" format="| $percntCALC{$qu
ot$SUBSTRING($filename, 9, 10)$quot}$percnt | $popup | $tag(ARTIST) | $tag(ALBUM
) | $filesize |"}%

Disclaimer

   Warning, this software is not recommended for real data or production.
   Do not use this software unless you are a programmer and know what this
   software is doing! I made it solely for myself and am only releasing
   the source code in the hope that it gives people insight into the
   program structure and is useful in some way. Hopefully you will create
   a much better system and not use this one.

   I run this software because it makes my life simpler. I can tinker with
   the system when I need to. It won't make your life simpler, because
   it's not a self-contained package. It's an interrelating system, so
   there are a lot of pieces that have to be running in just the right way
   or it will crash or error out.

   There are all kinds of bugs in it, but I work around them until I later
   find time to fix them. When I build things for myself, I get them
   working, but I rarely perfect them. I build proof-of-concept
   prototypes, and when I prove that they work and are useful to me, I put
   them into operation to make my life simpler.

   I purposely chose not to add complexity to the software but to keep the
   complexity openly exposed in the system. I don't like closed,
   monolithic systems, I like smaller sets of things that inter-operate.
   Even a Rube Goldberg machine is easy to understand since the
   complexities are within plain view.

   Minimalism in computing is hard to explain; you walk a fine line
   between not adding enough and adding too much, but there is a "zone", a
   small window where the human brain has enough grasp of the unique
   situation it is in to make a difference to human understanding. When I
   find these zones, I feel I must act on them, which is one of my
   motivating factors for taking on any personal project.

   You can sit on a mountaintop and see how the tiny people below build
   their cities, but never meet them. You can meet the people in their
   cities, but not understand the significance of what they are building.
   But there is a middle ground where you can sort of see what they are
   doing and are close enough to them to see the importance of their
   journey.

   The human brain is a lens, but, like a telescope looking at the night
   sky, we can either see stars that are close or stars that are farther
   away, but we can't see all stars at the same time. We have to pick our
   stars.

   I like to think of it like this:

   It is not within our power to do everything, but it is within our
   power to do anything.
     __________________________________________________________________


