(apologies to those who are also on the Xine list-- I posted a similar
success story there...)

Every year in San Jose there's a science fiction convention called
BayCon (http://www.baycon.org). A bunch of science fiction fans get
together at a DoubleTree hotel for Memorial Day weekend to meet their
favorite writers and artists and hang out together. For the people who
are actually staying in the hotel, there is an in-hotel TV station (we
take over Channel 4) called BayCon TV, or BCTV for short. We play
interviews with our guests of honor, footage taped during the con, fan
videos, old movies, and slides of science fiction history and trivia.
This year, my wife and I were in charge of it.

When BCTV has been running in the past, the crew would build huge
videotapes full of content, then have to wake up in the middle of the
night to switch them out. If they missed a tape change, or if some
footage was shorter than expected, the entire schedule could be thrown
off. Finally, they couldn't do things like accept fan videos and digital
photos at the convention-- everything had been pretaped!

THE PIT AND THE PENDULUM

Since coming aboard as BCTV's general technical person, I'd wanted to
try running the station entirely digital. I used Xine, one of the main
Linux movie players, as my content display system. I still needed a
scheduling system, though-- something precise enough to show scheduled
movies on time, but flexible enough to deal with unplanned events like
missing files. I covered reams of papers with scribbled notes, designing
such a system, until I realized that POE could do it all for me.

Thanks to POE, I could turn the entire system into two agents which I
ran as sessions: the Player and the Scheduler. Personally, I find it
easiest to think of these two as beleagured TV station staffers trying
to get some sleep while keeping the station running. Before Scheduler
goes to sleep, she checks the listings of upcoming programs and sets an
alarm to wake her up right before the next show. When the alarm goes
off, she double-checks the schedule and wakes up Player. She tells
Player what program needs to be played next, sets her alarm for the next
scheduled program, and goes back to sleep. Player, meanwhile, plays the
requested program, then catches some Z's himself.

Substitute some alarm_set() calls for my anthropomorphization above, and
you have my playback system. I had originally imagined a huge system
using multithreading and frequent time checks. POE let me keep it under
1000 lines of code. We did have some system glitches, but none were
remotely related to POE. The playback system was rock-solid-- and I
hadn't had a chance to give it a full system test before the convention
began. I took a gamble that POE would be solid, and I was right. Thanks,
Rocco and other POEts.

THINGS TO COME

Our performance this year was good enough that we've been asked to run
BCTV next year. I have a host of minor improvements that I'm planning on
making, but the biggest feature improvement will be automatic fill
generation. Scheduling programs can be a pain, and the hardest part is
preventing viewers from having to stare at a blank screen between
programs. To that end, we're bringing another agent to our little
virtual team. Call him Phil, if you don't mind. Phil's got an overhead
projector, a boom box, a few short films, a collection of announcements
and slides, and some crayons. His alarm goes off whenever nothing's
being played over the TV station, and it's his job to create filler
until the next scheduled event.

All of this functionality should be easy with POE-- and would be
extremely difficult without it. So again, thanks. I'll give updates as
the system becomes more mature... and if you're in the San Jose area
over next Memorial Day, come to BayCon and look for a (hopefully)
relaxed and well-rested man in a Prisoner jacket. That'll be me, and
I'll be relaxed and well-rested because of POE.

Reply via email to