(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.
