Mailing List Archive

$1,000 offer for a Myth front-end socket control
I am supposed to present a client with PVR options for their set-top box,
both open source like Myth and VDR, and closed, proprietary ones we license.
We would like to present a Myth-solution, but cannot because we never found
a way to send the Myth front-end commands directly, such as over a socket.
It seems LIRC and other programs that want to control Myth just simulate
keystrokes (ie send an 'up' key when it's time to change the channel).
We've done this too, but the end-result is pretty unusable; we can't
definitely make the EPG appear when the user hits the 'EPG' button on his
remote, we can only send a keypress which, depending on what's onscreen, may
or may not have the desired effect.



I've done similar things with other open source projects, and it's usually a
trivial task, like a day or two. There's probably just 1 place where an
interceptor or hook needs to go that opens a socket and listens for
commands, and relays those commands back into the Myth frontend. And we
already have socket classes to encapsulate all that work. But I know
nothing about Myth front-end's architecture and have some other deadlines,
so I got approval to offer $1,000 to anybody who would do it. Hopefully
with Myth it's also just a day or two for someone who knows where to put
those hooks. Details are:



---------DELIVERABLE-----------

We would provide the 'client app': a C++ console app (ie no X), compilable
with gcc on Linux 2.6 kernel that contains a class with function stubs for
each of the commands to be implemented below. The developer can type the
commands in the console to make the app call the function stubs. We assume
responsibility for giving you this client app. The deliverable is: a)
adding the code to Myth front end so that it allows this external client app
to communicate commands and get status info directly, likely by listening on
a socket, and b) adding the code to the client app to connect to whatever
Myth front end is running on the current box and implementing the function
stubs. The end result is you can run Myth front end (it's sitting at the
menu), and you can run this new client app, which will say something like
'connected to Myth front end', and then you can type into the client app
'goto EPG' and the EPG appears, and 'goto normal tv' and 'tune to channel
50', 'set playback speed=pause', and Myth will be on channel 50 with paused
video. Again, we will give you the client app that accepts the commands
from the console, parses them, and calls the appropriate functions. We
already have a c++ class that handles socket communications if you wish to
use it.



---------PAYMENT TERMS-------------

Payment terms: $500 via your choice of paypal, IKobo, or U.S. check as soon
as you can show that you know how to do it, by providing a client app and
Myth front end where the client app can connect to Myth and do 1 thing, jump
directly to the EPG or live tv no matter what Myth's current state, without
using keyboard stuffing. There's no need to provide source code at this
point-just show that you know how to do it. The other $500 paid immediately
when it's done and we are able to send the commands listed below and have
Myth execute them regardless of the front end's current state. Any code for
Myth must be submitted back under the GPL license, of course, so this same
mechanism can be used for tighter integration with LIRC.



--------------Commands to be implemented----------------



Tune to Specific Channel

Channel Up/Down

Goto time code

Set Playback Speed (ie 4x, -1x rewind, 0x pause, 1/4x, etc.)

Goto Mode or Menu (parameter is the menu: ie goto EPG menu, goto 'normal
viewing tv', goto 'recorded tv options', goto 'setup screen')

Play a given file/recording

Get Current Timecode (including indicating if it's time lapse tv or live tv)

Get Current Status (ie live tv, time lapse tv, etc., and what mode is
active: epg, tv viewing, etc.

Move OSD (move highlight up/down/left/right, page u/d/l/r, hit enter - same
thing like simulating keypresses)

Goto input on TV Tuner card

Jump to beginning of ring buffer

Jump to live TV



Eventually the other Myth commands should be supported, and that can be
discussed later, but this is enough for me to make my demo.



You can email replies back to this list or directly to michael.anderson [at]
plutohome [dot] com
Re: $1,000 offer for a Myth front-end socket control [ In reply to ]
> we can’t definitely make the EPG appear when the user hits the ‘EPG’
> button on his remote, we can only send a keypress which, depending on
> what’s onscreen, may or may not have the desired effect.

Ignoring the whole socket vs external glue (like LIRC)
argument for now, can't you just setup keys to "jump"?

--
Nigel Pearson, nigel@ind.tansu.com.au | "In this city I confess
Telstra Dev. Lab, Sydney, Australia | god is mammon, more is less
Office: 9814 4803 Fax: 9814 4897 | off like lemmings at the gun
Mobile: 0408 664435 Home: 9792 6998 | I know better, still I run"
RE: $1,000 offer for a Myth front-end socket control [ In reply to ]
Michael,
did you get any takers for your $1000 offer?

Personally, I'd have just used some/all of the existing "jump points" that
are in myth (a keystroke that takes you to a specific/known location/view)
in conjunction with lircd as a socket listner daemon for stuffing
extra/following key-strokes. Stuffing key strokes works, so long as
you know with certainty what your starting point was (hence the jump
point/s).

Anyway, are you still looking for somone to do it? If so, let me know, and
let me know a timeframe. I'd expect I could do it within a month, probably
less. ( My C++ is a bit rusty). ... but my C is less rusty.... to be
honest, my perl is light-years ahead of them both. (yes, I've written
daemon/s reliably in perl before) ... if you are interested in some of my
prior work have a look at http://netreg.sf.net
<BLOCKED::http://netreg.sf.net> v2 was almost entirely my work - written
for, and implemented by Griffith University, Brisbane, Queensland,
Australia. (and still in use 2+ years later).

Buzz.



_____

From: mythtv-dev-bounces@mythtv.org [mailto:mythtv-dev-bounces@mythtv.org]
On Behalf Of Michael Anderson
Sent: Saturday, 10 December 2005 5:57 AM
To: mythtv-dev@mythtv.org
Subject: [mythtv] $1,000 offer for a Myth front-end socket control



I am supposed to present a client with PVR options for their set-top box,
both open source like Myth and VDR, and closed, proprietary ones we license.
We would like to present a Myth-solution, but cannot because we never found
a way to send the Myth front-end commands directly, such as over a socket.
It seems LIRC and other programs that want to control Myth just simulate
keystrokes (ie send an 'up' key when it's time to change the channel).
We've done this too, but the end-result is pretty unusable; we can't
definitely make the EPG appear when the user hits the 'EPG' button on his
remote, we can only send a keypress which, depending on what's onscreen, may
or may not have the desired effect.



I've done similar things with other open source projects, and it's usually a
trivial task, like a day or two. There's probably just 1 place where an
interceptor or hook needs to go that opens a socket and listens for
commands, and relays those commands back into the Myth frontend. And we
already have socket classes to encapsulate all that work. But I know
nothing about Myth front-end's architecture and have some other deadlines,
so I got approval to offer $1,000 to anybody who would do it. Hopefully
with Myth it's also just a day or two for someone who knows where to put
those hooks. Details are:



---------DELIVERABLE-----------

We would provide the 'client app': a C++ console app (ie no X), compilable
with gcc on Linux 2.6 kernel that contains a class with function stubs for
each of the commands to be implemented below. The developer can type the
commands in the console to make the app call the function stubs. We assume
responsibility for giving you this client app. The deliverable is: a)
adding the code to Myth front end so that it allows this external client app
to communicate commands and get status info directly, likely by listening on
a socket, and b) adding the code to the client app to connect to whatever
Myth front end is running on the current box and implementing the function
stubs. The end result is you can run Myth front end (it's sitting at the
menu), and you can run this new client app, which will say something like
'connected to Myth front end', and then you can type into the client app
'goto EPG' and the EPG appears, and 'goto normal tv' and 'tune to channel
50', 'set playback speed=pause', and Myth will be on channel 50 with paused
video. Again, we will give you the client app that accepts the commands
from the console, parses them, and calls the appropriate functions. We
already have a c++ class that handles socket communications if you wish to
use it.



---------PAYMENT TERMS-------------

Payment terms: $500 via your choice of paypal, IKobo, or U.S. check as soon
as you can show that you know how to do it, by providing a client app and
Myth front end where the client app can connect to Myth and do 1 thing, jump
directly to the EPG or live tv no matter what Myth's current state, without
using keyboard stuffing. There's no need to provide source code at this
point-just show that you know how to do it. The other $500 paid immediately
when it's done and we are able to send the commands listed below and have
Myth execute them regardless of the front end's current state. Any code for
Myth must be submitted back under the GPL license, of course, so this same
mechanism can be used for tighter integration with LIRC.



--------------Commands to be implemented----------------



Tune to Specific Channel

Channel Up/Down

Goto time code

Set Playback Speed (ie 4x, -1x rewind, 0x pause, 1/4x, etc.)

Goto Mode or Menu (parameter is the menu: ie goto EPG menu, goto 'normal
viewing tv', goto 'recorded tv options', goto 'setup screen')

Play a given file/recording

Get Current Timecode (including indicating if it's time lapse tv or live tv)

Get Current Status (ie live tv, time lapse tv, etc., and what mode is
active: epg, tv viewing, etc.

Move OSD (move highlight up/down/left/right, page u/d/l/r, hit enter - same
thing like simulating keypresses)

Goto input on TV Tuner card

Jump to beginning of ring buffer

Jump to live TV



Eventually the other Myth commands should be supported, and that can be
discussed later, but this is enough for me to make my demo.



You can email replies back to this list or directly to michael.anderson [at]
plutohome [dot] com
RE: $1,000 offer for a Myth front-end socket control [ In reply to ]
Yes, this task is completed. Chris finished the code, we sent him the
money, and his code works great. I think he's committing it to the main
Myth branch.


> Michael,
> did you get any takers for your $1000 offer?
>
> Personally, I'd have just used some/all of the existing "jump points" that
> are in myth (a keystroke that takes you to a specific/known location/view)
> in conjunction with lircd as a socket listner daemon for stuffing
> extra/following key-strokes. Stuffing key strokes works, so long as
> you know with certainty what your starting point was (hence the jump
> point/s).
>
> Anyway, are you still looking for somone to do it? If so, let me know,
> and
> let me know a timeframe. I'd expect I could do it within a month,
> probably
> less. ( My C++ is a bit rusty). ... but my C is less rusty.... to be
> honest, my perl is light-years ahead of them both. (yes, I've written
> daemon/s reliably in perl before) ... if you are interested in some of my
> prior work have a look at http://netreg.sf.net
> <BLOCKED::http://netreg.sf.net> v2 was almost entirely my work - written
> for, and implemented by Griffith University, Brisbane, Queensland,
> Australia. (and still in use 2+ years later).
>
> Buzz.
>
>
>
> _____
>
> From: mythtv-dev-bounces@mythtv.org [mailto:mythtv-dev-bounces@mythtv.org]
> On Behalf Of Michael Anderson
> Sent: Saturday, 10 December 2005 5:57 AM
> To: mythtv-dev@mythtv.org
> Subject: [mythtv] $1,000 offer for a Myth front-end socket control
>
>
>
> I am supposed to present a client with PVR options for their set-top box,
> both open source like Myth and VDR, and closed, proprietary ones we
> license.
> We would like to present a Myth-solution, but cannot because we never
> found
> a way to send the Myth front-end commands directly, such as over a socket.
> It seems LIRC and other programs that want to control Myth just simulate
> keystrokes (ie send an 'up' key when it's time to change the channel).
> We've done this too, but the end-result is pretty unusable; we can't
> definitely make the EPG appear when the user hits the 'EPG' button on his
> remote, we can only send a keypress which, depending on what's onscreen,
> may
> or may not have the desired effect.
>
>
>
> I've done similar things with other open source projects, and it's usually
> a
> trivial task, like a day or two. There's probably just 1 place where an
> interceptor or hook needs to go that opens a socket and listens for
> commands, and relays those commands back into the Myth frontend. And we
> already have socket classes to encapsulate all that work. But I know
> nothing about Myth front-end's architecture and have some other deadlines,
> so I got approval to offer $1,000 to anybody who would do it. Hopefully
> with Myth it's also just a day or two for someone who knows where to put
> those hooks. Details are:
>
>
>
> ---------DELIVERABLE-----------
>
> We would provide the 'client app': a C++ console app (ie no X), compilable
> with gcc on Linux 2.6 kernel that contains a class with function stubs for
> each of the commands to be implemented below. The developer can type the
> commands in the console to make the app call the function stubs. We
> assume
> responsibility for giving you this client app. The deliverable is: a)
> adding the code to Myth front end so that it allows this external client
> app
> to communicate commands and get status info directly, likely by listening
> on
> a socket, and b) adding the code to the client app to connect to whatever
> Myth front end is running on the current box and implementing the function
> stubs. The end result is you can run Myth front end (it's sitting at the
> menu), and you can run this new client app, which will say something like
> 'connected to Myth front end', and then you can type into the client app
> 'goto EPG' and the EPG appears, and 'goto normal tv' and 'tune to channel
> 50', 'set playback speed=pause', and Myth will be on channel 50 with
> paused
> video. Again, we will give you the client app that accepts the commands
> from the console, parses them, and calls the appropriate functions. We
> already have a c++ class that handles socket communications if you wish to
> use it.
>
>
>
> ---------PAYMENT TERMS-------------
>
> Payment terms: $500 via your choice of paypal, IKobo, or U.S. check as
> soon
> as you can show that you know how to do it, by providing a client app and
> Myth front end where the client app can connect to Myth and do 1 thing,
> jump
> directly to the EPG or live tv no matter what Myth's current state,
> without
> using keyboard stuffing. There's no need to provide source code at this
> point-just show that you know how to do it. The other $500 paid
> immediately
> when it's done and we are able to send the commands listed below and have
> Myth execute them regardless of the front end's current state. Any code
> for
> Myth must be submitted back under the GPL license, of course, so this same
> mechanism can be used for tighter integration with LIRC.
>
>
>
> --------------Commands to be implemented----------------
>
>
>
> Tune to Specific Channel
>
> Channel Up/Down
>
> Goto time code
>
> Set Playback Speed (ie 4x, -1x rewind, 0x pause, 1/4x, etc.)
>
> Goto Mode or Menu (parameter is the menu: ie goto EPG menu, goto 'normal
> viewing tv', goto 'recorded tv options', goto 'setup screen')
>
> Play a given file/recording
>
> Get Current Timecode (including indicating if it's time lapse tv or live
> tv)
>
> Get Current Status (ie live tv, time lapse tv, etc., and what mode is
> active: epg, tv viewing, etc.
>
> Move OSD (move highlight up/down/left/right, page u/d/l/r, hit enter -
> same
> thing like simulating keypresses)
>
> Goto input on TV Tuner card
>
> Jump to beginning of ring buffer
>
> Jump to live TV
>
>
>
> Eventually the other Myth commands should be supported, and that can be
> discussed later, but this is enough for me to make my demo.
>
>
>
> You can email replies back to this list or directly to michael.anderson
> [at]
> plutohome [dot] com
>
> _______________________________________________
> mythtv-dev mailing list
> mythtv-dev@mythtv.org
> http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
>


_______________________________________________
mythtv-dev mailing list
mythtv-dev@mythtv.org
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
RE: $1,000 offer for a Myth front-end socket control [ In reply to ]
On Sun, 25 Dec 2005, michael.anderson@plutohome.com wrote:
> Yes, this task is completed. Chris finished the code, we sent him the
> money, and his code works great. I think he's committing it to the main
> Myth branch.

Chris, is this commited yet? Sounds like cool functionality. :)

------------------------------------------------------------------------
| nate carlson | natecars@natecarlson.com | http://www.natecarlson.com |
| depriving some poor village of its idiot since 1981 |
------------------------------------------------------------------------
Re: $1,000 offer for a Myth front-end socket control [ In reply to ]
On 12/29/05, Nate Carlson <natecars@natecarlson.com> wrote:
> On Sun, 25 Dec 2005, michael.anderson@plutohome.com wrote:
> > Yes, this task is completed. Chris finished the code, we sent him the
> > money, and his code works great. I think he's committing it to the main
> > Myth branch.
>
> Chris, is this commited yet? Sounds like cool functionality. :)
>
> ------------------------------------------------------------------------
> | nate carlson | natecars@natecarlson.com | http://www.natecarlson.com |
> | depriving some poor village of its idiot since 1981 |
> ------------------------------------------------------------------------
>
>


Indeed. I'm a bit curious as to how it was done and such. I hacked
together a web-based remote using lirc/TCP for input, but there is no
way to guarantee that an event sent via lirc actually occurs, nor any
way to know where you are at in the program. I was planning on
eventually cleaning the code up more and integrate it to mythweb, but
if this code is actually going into SVN it'd save me some time.
_______________________________________________
mythtv-dev mailing list
mythtv-dev@mythtv.org
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
Re: $1,000 offer for a Myth front-end socket control [ In reply to ]
> On Sun, 25 Dec 2005, michael.anderson@plutohome.com wrote:
> > Yes, this task is completed. Chris finished the code, we sent him the
> > money, and his code works great. I think he's committing it to the main
> > Myth branch.
>
> Chris, is this commited yet? Sounds like cool functionality. :)

I'll probably wait until after 0.19 is released before I put this into SVN
unless Isaac gives the go-ahead. The patch I did for Pluto was based off
of the 0-18-fixes branch so I need to make a few changes to get it
merged into the HEAD.

Basically it provides a socket interface to control mythfrontend which
can be used with telnet or any other automated application that can open a
connection and send a command. The feature defaults to Off and must be
turned on via the setup page in mythfrontend. The port to listen on is
also configurable, but defaults to 6545 to keep it in line with the other
ports Myth uses.

Current functionality is general purpose, but was based on the needs of
the project Pluto needed accomplished.

Here's a description of what has been implemented.

If you telnet to the port, you are prompted with the following:

MythFrontend Network Control
Type 'help' for usage information
---------------------------------

There are 4 main commands implemented currently: jump, key, play, and query.
Typing 'help <COMMAND>' gives you help on that specific command.

The jump command supports jumping to the following supported jumppoints
within Myth:

Channel Recording Priorities
Live TV
Main Menu
Manage Recordings / Fix Conflicts
Manual Record Scheduling
MythGallery
MythMovieTime
MythVideo
MythWeather
Play DVD
Play music
Previously Recorded
Program Finder
Program Guide
Program Recording Priorities
Rip CD
Select music playlists
Status Screen
TV Recording Deletion
TV Recording Playback
Video Browser
Video Gallery
Video Listings
Video Manager

The key command allows simulating the following keystrokes:

up/down/left/right/pageup/pagedown/enter/escape

The play command supports the following subcommands, most of which
are valid only during playback except for the 'play program'
subcommand which is valid from the Watch Recordings and Delete
Recordings screens:

play channel up - Change channel Up
play channel down - Change channel Down
play channel NUMBER - Change to a specific channel number
play program CHANID yyyy-mm-ddThh:mm:ss
- Play program with chanid & starttime
play program CHANID yyyy-mm-ddThh:mm:ss resume
- Resume program with chanid & starttime
play seek beginning - Seek to the beginning of the recording
play seek forward - Skip forward in the video
play seek backward - Skip backwards in the video
play seek HH:MM:SS - Seek to a specific position
play speed pause - Pause playback
play speed normal - Playback at normal speed
play speed 1x - Playback at normal speed
play speed -1x - Playback at normal speed in reverse
play speed 1/16x - Playback at 1/16x speed
play speed 1/8x - Playback at 1/8x speed
play speed 1/4x - Playback at 1/4x speed
play speed 1/2x - Playback at 1/2x speed
play speed 2x - Playback at 2x speed
play speed 4x - Playback at 4x speed
play speed 8x - Playback at 8x speed
play speed 16x - Playback at 16x speed
play stop - Stop playback

The query command currently only supports one subcommand which
is used to query the current 'location' within Myth. The
'query location' command returns things like the following:

MainMenu
PlaybackBox
DeleteBox
ViewScheduled
ChannelRecPriority
etc. for screens

and things like this:

Playback LiveTV 35:03 of 35:21 1x 31
Playback Recorded 0:00:23 of 1:02:21 1x 1031 2005-10-17T22:00:00

when playing a recording or LiveTV.

So, with the current implemention, you can telnet to a port, instruct
mythfrontend to change to the Watch Recordings screen (jump playbackbox),
and start playing a recording (play program 1031 2005-10-17T22:00:00).
Then during playback, you can pause, change speeds, seek around, and
stop playback. You can query the current screen and jump to other
locations including the main menu.

I think it might be nice to extend this functionality in the future to
allow things like querying the list of recorded programs, deleting
recordings, and other commands that would make managing a myth system
remotely easier. It also might be possible to allow simple 'http'
commands to allow controlling this via a web browser. A
'query recordings html' version of a 'query recordings' command
could return html code to draw a page with links something like
'http://hostname:6545/play?program&1031&2005-10-17T22:00:00'.

/me makes a note to save this email for the eventual commit log. :)

--
Chris Pinkham
Re: $1,000 offer for a Myth front-end socket control [ In reply to ]
> > Chris, is this commited yet? Sounds like cool functionality. :)
>
> I'll probably wait until after 0.19 is released before I put this into SVN
> unless Isaac gives the go-ahead. The patch I did for Pluto was based off
> of the 0-18-fixes branch so I need to make a few changes to get it
> merged into the HEAD.

Replying to myself so I could give an update to anyone who's interested.

I just finished merging in the changes into my local copy of SVN HEAD and
am now waiting for a clean compile to finish. I'll test it in the morning
after I get some sleep. :) So, this might be in SVN in time for 0.19.

--
Chris
Re: $1,000 offer for a Myth front-end socket control [ In reply to ]
After successfully compiling the latest SVN, I noticed that there are not
jumppoints listed in the MythWeb - Configure Keybindings page. I assume
that these are from this...correct me if I'm wrong.

If they are, would it be possible to add a MainMenu jumppoint as well?

Thanks,
Justin

On 12/30/05, Chris Pinkham <cpinkham@bc2va.org> wrote:
>
> > > Chris, is this commited yet? Sounds like cool functionality. :)
> >
> > I'll probably wait until after 0.19 is released before I put this into
> SVN
> > unless Isaac gives the go-ahead. The patch I did for Pluto was based
> off
> > of the 0-18-fixes branch so I need to make a few changes to get it
> > merged into the HEAD.
>
> Replying to myself so I could give an update to anyone who's interested.
>
> I just finished merging in the changes into my local copy of SVN HEAD and
> am now waiting for a clean compile to finish. I'll test it in the morning
> after I get some sleep. :) So, this might be in SVN in time for 0.19.
>
> --
> Chris
>
>
>
> _______________________________________________
> mythtv-dev mailing list
> mythtv-dev@mythtv.org
> http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
>
>
>
Re: $1,000 offer for a Myth front-end socket control [ In reply to ]
> After successfully compiling the latest SVN, I noticed that there are not
> jumppoints listed in the MythWeb - Configure Keybindings page. I assume
> that these are from this...correct me if I'm wrong.
>
> If they are, would it be possible to add a MainMenu jumppoint as well?

The three jump points that will be added with the patch are:

Main Menu
Status Screen
Previously Recorded

The others already exist.

--
Chris
Re: $1,000 offer for a Myth front-end socket control [ In reply to ]
On 1/4/06, Chris Pinkham <cpinkham@bc2va.org> wrote:
> > After successfully compiling the latest SVN, I noticed that there are not
> > jumppoints listed in the MythWeb - Configure Keybindings page. I assume
> > that these are from this...correct me if I'm wrong.
> >
> > If they are, would it be possible to add a MainMenu jumppoint as well?
>
> The three jump points that will be added with the patch are:
>
> Main Menu
> Status Screen
> Previously Recorded
>
> The others already exist.
>
> --
> Chris
>
>
>


YAY!!! MAIN MENU!!!!! (what took so long?!?!)

;-)

Matt
_______________________________________________
mythtv-dev mailing list
mythtv-dev@mythtv.org
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
Re: $1,000 offer for a Myth front-end socket control [ In reply to ]
On Wednesday 04 Jan 2006 16:59, Matt wrote:
> > The three jump points that will be added with the patch are:
> >
> > Main Menu
>
> YAY!!! MAIN MENU!!!!! (what took so long?!?!)

I second that Yay!

A Main Menu jumppoint has been a long requested addition.
--
Stuart Morgan
_______________________________________________
mythtv-dev mailing list
mythtv-dev@mythtv.org
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
Re: $1,000 offer for a Myth front-end socket control [ In reply to ]
On Fri, 30 Dec 2005, Chris Pinkham wrote:
> Replying to myself so I could give an update to anyone who's interested.
>
> I just finished merging in the changes into my local copy of SVN HEAD
> and am now waiting for a clean compile to finish. I'll test it in the
> morning after I get some sleep. :) So, this might be in SVN in time for
> 0.19.

Sweet! Looking forward to it. :)

------------------------------------------------------------------------
| nate carlson | natecars@natecarlson.com | http://www.natecarlson.com |
| depriving some poor village of its idiot since 1981 |
------------------------------------------------------------------------