Author Topic: Nutcracker: LSP  (Read 2854 times)

Offline smeighan

  • Moderator
  • Sr. Member
  • *****
  • Posts: 2285
    • Nutcracker RGB Sequence Builder
Nutcracker: LSP
« on: March 13, 2012, »
Ok;

i feel like giving the LSP file a try.

I have tried using 7zip to unzip a msq file, i get an error saying invalid archive.

Can someone take a LSP sequence and get it unziped into its xml form and point me to that file.

I can then start seeing if i can write the xml.

I sure wish LSP and LOR would accept a matrix of rgb values like Vixen and HLS does. makes my life so much easier.

In vixen, people can just go to wher ethey want the 3000 channels of rgb and right click and load a profile file.

I wonder in LSP can you open a msq file and insert it some how into an existing sequence that you have open?

If Nutcracker makes a 10 second spiral tree animation, how do we get it inserted into an existing sequence?

thanks
Sean
Littleton, CO
Latest releases You are not allowed to view links. Register or Login
xLights/Nutcracker Forum You are not allowed to view links. Register or Login
Fbook You are not allowed to view links. Register or Login

Offline Mike Hill

  • Sr. Member
  • ****
  • Posts: 400
  • Here to learn
Nutcracker: LSP
« Reply #1 on: March 13, 2012, »
Pm sent....
Mike Hill
First display date 11-2011
"Never explain your actions, your enemies don't believe it and your friends don't need it."

Offline frankr

  • Sr. Member
  • ****
  • Posts: 347
    • Rocklin Lights
Re: Nutcracker: LSP
« Reply #2 on: March 14, 2012, »
What I have seen from LSP you would need to copy and paste.  3,000 channels for 10 seconds will probably paste ok. 

Offline smeighan

  • Moderator
  • Sr. Member
  • *****
  • Posts: 2285
    • Nutcracker RGB Sequence Builder
Re: Nutcracker: LSP
« Reply #3 on: March 14, 2012, »
You are not allowed to view links. Register or Login
What I have seen from LSP you would need to copy and paste.  3,000 channels for 10 seconds will probably paste ok.

My tree is going to be 16x100 pixels. I was going to do 50ms per frame and a 10 second animation
So
(16x100x3 channels = 4800 channels. x 200 frames of animation = 960,000 cells of info to paste.

One user of Nutcracker has 76 strings of 80 pixels. This would be 18,240 channels. This is for one frame. if they had a 25ms frame and 10 seconds then you would have
(76x80x3 =18240 channels) x (40fps x10secs =400  frames) = 7,296,000 individual cells to paste, would that work too?

Maybe we will need to just create different sizes until we find what is the biggest sequence that can be pasted.

BTW, i dont plan on ever trying to manually sequence my megatree. So for a 3 minute song, i need 180 seconds of animations.

Using the big tree listed above, i could create 18 10 second animations.
I would then need to import 7,296,000 individual cells (for a 10 second animation)  x 18 10 second slots in the show.
= 131,328,000 individual cells

or for my smaller tree
(960,000 cells over 10 seconds) x (18 10 second slots) = 17,280,000 cells of info

It probably would be a better architecture in the sequencers if they could call the rgb device on the timeline and let it manage its own chunk of data.

I have 64 channels of Lynx Express, if a future sequencer could have 64 channels laid out and then have channel 65 be RGB device. On that timeline you put the name of objects, SPIRAL1, TEXT1, PICTURE3 called at the appropriate time.

If you could click on an object, say a 10 second spiral and then opens the timeline for just that object. Maybe it shows 3-20K channels, you manipulate that object and close it.

Now when running a sequence i only see 65 channels. I really dont want to figure out what all those channels are doing. Let something like Nutcracker produce chunks of animation. Or maybe the sequencer software itself.

Probably , this is teh future of the sequencers, the question is what to do now?

Maybe we could load up a conductor from RJ with data from Nutcracker directly. Run all the other sequences and keep the RGB synched to the show.

Computer=>DMX=> Runs all channels except RGB
RJ Conductor=>DMX=>Pixelnet runs the RGB device

Both are kept in sync someway.

Now I could create 18 effects in Nutcracker, Lay them out on a timeline in Nutcracker (a future enhancement I already have planned) and then load the Conductor with everything and you never see the ugly stuff.

just a thought.

sean

Sean
Littleton, CO
Latest releases You are not allowed to view links. Register or Login
xLights/Nutcracker Forum You are not allowed to view links. Register or Login
Fbook You are not allowed to view links. Register or Login

Offline frankr

  • Sr. Member
  • ****
  • Posts: 347
    • Rocklin Lights
Re: Nutcracker: LSP
« Reply #4 on: March 16, 2012, »
You are incredible Sean very impressive.

From my experiments last season LSP often choked on moving chunks of my 1200 node tree around.  I think the way he is storing data is pretty memory intensive (with good reason).

I like your idea on loading the conductor up with sequences in a predefined format.  I believe some of the professional software (Madrix) can have sequences that get triggered when it gets a DMX signal.  IT would be interesting to have the conductor be able to get a signal via E131 that triggered stored sequences to be played back.

Then you could create a library of Nutcracker effects and load them onto the conductor.  In your sequences in LSP, VIXEN etc you would just have a normal DMX channel and you could send values to select which a saved sequence to start.  You would have to track the length and timing of the canned sequences and keeping track of the channel/intensity -> sequence mapping would take work but could be interesting.

This model would be especially cool for interactivity.  Imagine having a kinect watching the crowd and canned sequences getting triggered by what the crowd (or better an individual) does.  Interpret the motions fire a single DMX channel/intensity value and boom immediate feedback  :)


Frank

Offline Steve Gase

  • Sr. Member
  • ****
  • Posts: 2915
    • WinterLightShow in Georgetown, TX
Re: Nutcracker: LSP
« Reply #5 on: March 16, 2012, »
You are not allowed to view links. Register or Login
What I have seen from LSP you would need to copy and paste.  3,000 channels for 10 seconds will probably paste ok.
This could be an interesting shortcut.
maybe a tool could load load nutcracker data and copy it to the clipboard in a format that LSP can accept... then bring LSP into context and paste that clipboard data into LSP.
You are not allowed to view links. Register or Login  |  110K channels, 50K lights  |  Nutcracker, Falcon, DLA, HolidayCoro

Offline smeighan

  • Moderator
  • Sr. Member
  • *****
  • Posts: 2285
    • Nutcracker RGB Sequence Builder
Re: Nutcracker: LSP
« Reply #6 on: March 16, 2012, »
You are not allowed to view links. Register or Login
You are incredible Sean very impressive.

From my experiments last season LSP often choked on moving chunks of my 1200 node tree around.  I think the way he is storing data is pretty memory intensive (with good reason).

I like your idea on loading the conductor up with sequences in a predefined format.  I believe some of the professional software (Madrix) can have sequences that get triggered when it gets a DMX signal.  IT would be interesting to have the conductor be able to get a signal via E131 that triggered stored sequences to be played back.

Then you could create a library of Nutcracker effects and load them onto the conductor.  In your sequences in LSP, VIXEN etc you would just have a normal DMX channel and you could send values to select which a saved sequence to start.  You would have to track the length and timing of the canned sequences and keeping track of the channel/intensity -> sequence mapping would take work but could be interesting.

This model would be especially cool for interactivity.  Imagine having a kinect watching the crowd and canned sequences getting triggered by what the crowd (or better an individual) does.  Interpret the motions fire a single DMX channel/intensity value and boom immediate feedback  :)


Frank

Yep, detect their hands above their heads and start adding white sparkles or fireworks or only turn on devices near them as they walk through your display. The more they wave, the feedback they get.


Interactive Christmas sequences, the wave of the future....
Sean
Littleton, CO
Latest releases You are not allowed to view links. Register or Login
xLights/Nutcracker Forum You are not allowed to view links. Register or Login
Fbook You are not allowed to view links. Register or Login

Offline smeighan

  • Moderator
  • Sr. Member
  • *****
  • Posts: 2285
    • Nutcracker RGB Sequence Builder
Re: Nutcracker: LSP
« Reply #7 on: March 16, 2012, »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
What I have seen from LSP you would need to copy and paste.  3,000 channels for 10 seconds will probably paste ok.
This could be an interesting shortcut.
maybe a tool could load load nutcracker data and copy it to the clipboard in a format that LSP can accept... then bring LSP into context and paste that clipboard data into LSP.

Can you capture what is in your paste buffer Steve. Maybe , just past a few rows in LSP?
Sean
Littleton, CO
Latest releases You are not allowed to view links. Register or Login
xLights/Nutcracker Forum You are not allowed to view links. Register or Login
Fbook You are not allowed to view links. Register or Login

Offline egenoup

  • Sr. Member
  • ****
  • Posts: 359
Re: Nutcracker: LSP
« Reply #8 on: March 16, 2012, »
You have not been able to open the msq file?  If not, I will send you one privately... let me know.

Offline smeighan

  • Moderator
  • Sr. Member
  • *****
  • Posts: 2285
    • Nutcracker RGB Sequence Builder
Re: Nutcracker: LSP
« Reply #9 on: March 16, 2012, »
You are not allowed to view links. Register or Login
You have not been able to open the msq file?  If not, I will send you one privately... let me know.

I needed the msq unzipped using 7zip so you could see the ASCII xml file.

Someone has now sent me such a file. I am hoping I dont need to reverse engineer this xml. It is the most complex of the three sequencers.

I am looking for an alternative.

If there were a way to put data into the windows clipboard , for example, maybe you could then past Nutcracker sequencers.

Sean
Littleton, CO
Latest releases You are not allowed to view links. Register or Login
xLights/Nutcracker Forum You are not allowed to view links. Register or Login
Fbook You are not allowed to view links. Register or Login

Offline Mickpat

  • Beta Tester
  • Sr. Member
  • *****
  • Posts: 556
Re: Nutcracker: LSP
« Reply #10 on: March 17, 2012, »
You try and use an XML Editor.

You are not allowed to view links. Register or Login

Using C#, its not too difficult to parse through an XML file.  The following loads a LOR file and parses through the effects for each channel.


        XDocument custOrdDoc = XDocument.Load("sample.xml");
        XElement musicalSequence = custOrdDoc.Element("sequence");
           

           var channels =  custOrdDoc.Elements("sequence").Elements("channels").Elements("channel");   
           foreach (XElement channel in channels)
            {

                int chanNumber = (int)channel.Attribute("savedIndex");
                Debug.WriteLine("Channel Number: " + chanNumber.ToString());

                var effects = channel.Descendants("effect");
                Debug.WriteLine("Effect Count Number: " + effects.Count().ToString());

                    foreach (XElement effect in effects)
                    {
                        ChannelEvent cevent = new ChannelEvent();
                        cevent.channelNumber = chanNumber;
                        cevent.intensity = (int?)effect.Attribute("intensity");
                        cevent.endCentisecond = (int)effect.Attribute("endCentisecond");
                        cevent.startCentisecond = (int)effect.Attribute("startCentisecond");
                        cevent.type = (string)effect.Attribute("type");
                        cevent.startIntensity = (int?)effect.Attribute("startIntensity");
                        cevent.endIntensity = (int?)effect.Attribute("endIntensity");
                     }
             }     
       

Offline smeighan

  • Moderator
  • Sr. Member
  • *****
  • Posts: 2285
    • Nutcracker RGB Sequence Builder
Re: Nutcracker: LSP
« Reply #11 on: March 17, 2012, »
You are not allowed to view links. Register or Login
You try and use an XML Editor.

You are not allowed to view links. Register or Login

Using C#, its not too difficult to parse through an XML file.  The following loads a LOR file and parses through the effects for each channel.


        XDocument custOrdDoc = XDocument.Load("sample.xml");
        XElement musicalSequence = custOrdDoc.Element("sequence");
           

           var channels =  custOrdDoc.Elements("sequence").Elements("channels").Elements("channel");   
           foreach (XElement channel in channels)
            {

                int chanNumber = (int)channel.Attribute("savedIndex");
                Debug.WriteLine("Channel Number: " + chanNumber.ToString());

                var effects = channel.Descendants("effect");
                Debug.WriteLine("Effect Count Number: " + effects.Count().ToString());

                    foreach (XElement effect in effects)
                    {
                        ChannelEvent cevent = new ChannelEvent();
                        cevent.channelNumber = chanNumber;
                        cevent.intensity = (int?)effect.Attribute("intensity");
                        cevent.endCentisecond = (int)effect.Attribute("endCentisecond");
                        cevent.startCentisecond = (int)effect.Attribute("startCentisecond");
                        cevent.type = (string)effect.Attribute("type");
                        cevent.startIntensity = (int?)effect.Attribute("startIntensity");
                        cevent.endIntensity = (int?)effect.Attribute("endIntensity");
                     }
             }     
       

I have the code written for LOR. LOR was the easiest of the three sequencers, as far as the xml goes. Since we are able to use vir files for Vixen, i dont have to write any xml for Vixen.


it is LSP we are talking about.

Is there any documentation about which of these xml elements for LSP i need to create?

This is from a small LSP xml file.



<?xml version="1.0"?>
<ArrayOfPattern xmlns:xsi="You are not allowed to view links. Register or Login" xmlns:xsd="You are not allowed to view links. Register or Login">
  <Pattern>
    <GroupName>My Patterns</GroupName>
    <Name>New Pattern</Name>
    <Image>
      <Width>408</Width>
      <Height>80</Height>
    </Image>
    <Tracks>
      <Track>
        <TrackGuid>ad60ed46-184a-454c-ba3e-cde0bc26e691</TrackGuid>
        <IsHidden>false</IsHidden>
        <IsPrimaryTrack>false</IsPrimaryTrack>
        <TrackColorName>Gainsboro</TrackColorName>
        <TrackColorARGB>-2302756</TrackColorARGB>
        <TrackID>0</TrackID>
        <TrackType>0</TrackType>
        <WiiMapping inv="0" ibn="" inbn="" ani="0" ain="" hty="-1" fed="0" wind="-1" wibt="0" cint="False" ceff="False" hefsd="True" lef="3" lefl="1" intb="0" efd="0" />
        <Name />
        <Intervals>
          <TimeInterval eff="1" dat="" gui="{1B0F1B59-7161-4782-B068-98E021A6E048}" a="128" b="128" in="1" out="100" pos="88200" sin="-1" att="0" />
          <TimeInterval eff="2" dat="" gui="{49E1F143-321A-4f5b-9F39-32984FF12410}" a="128" b="128" in="100" out="1" pos="176400" sin="-1" att="0" />
          <TimeInterval eff="7" dat="" gui="{49E1F143-321A-4f5b-9F39-32984FF12410}" a="128" b="128" pos="264600" sin="-1" att="0" />
          <TimeInterval eff="4" dat="" gui="" a="128" b="128" in="1" out="1" pos="352800" sin="-1" att="0" />
          <TimeInterval eff="4" dat="" gui="" a="128" b="128" in="1" out="1" pos="441000" sin="-1" att="0" />
        </Intervals>
      </Track>
      <Track>
        <TrackGuid>91f0855f-6f5f-49de-b757-5c8bea946077</TrackGuid>
        <IsHidden>false</IsHidden>
        <IsPrimaryTrack>false</IsPrimaryTrack>
        <TrackColorName>Gainsboro</TrackColorName>
        <TrackColorARGB>-2302756</TrackColorARGB>
        <TrackID>0</TrackID>
        <TrackType>0</TrackType>
        <WiiMapping inv="0" ibn="" inbn="" ani="0" ain="" hty="-1" fed="0" wind="-1" wibt="0" cint="False" ceff="False" hefsd="True" lef="3" lefl="1" intb="0" efd="0" />
        <Name />
        <Intervals>
          <TimeInterval eff="1" dat="" gui="{1B0F1B59-7161-4782-B068-98E021A6E048}" a="128" b="128" in="1" out="100" pos="88200" sin="-1" att="0" />
          <TimeInterval eff="7" dat="" gui="{1B0F1B59-7161-4782-B068-98E021A6E048}" a="128" b="128" pos="176400" sin="-1" att="0" />
          <TimeInterval eff="7" dat="" gui="{1B0F1B59-7161-4782-B068-98E021A6E048}" a="128" b="128" pos="264600" sin="-1" att="0" />
          <TimeInterval eff="2" dat="" gui="{49E1F143-321A-4f5b-9F39-32984FF12410}" a="128" b="128" in="100" out="1" pos="352800" sin="-1" att="0" />
          <TimeInterval eff="4" dat="" gui="" a="128" b="128" in="1" out="1" pos="441000" sin="-1" att="0" />
        </Intervals>
      </Track>
      <Track>
        <TrackGuid>15ea753f-306e-4a0c-bbef-cbeb5fb330e3</TrackGuid>
        <IsHidden>false</IsHidden>
        <IsPrimaryTrack>false</IsPrimaryTrack>
        <TrackColorName>Gainsboro</TrackColorName>
        <TrackColorARGB>-2302756</TrackColorARGB>
        <TrackID>0</TrackID>
        <TrackType>0</TrackType>
        <WiiMapping inv="0" ibn="" inbn="" ani="0" ain="" hty="-1" fed="0" wind="-1" wibt="0" cint="False" ceff="False" hefsd="True" lef="3" lefl="1" intb="0" efd="0" />
        <Name />
        <Intervals>
          <TimeInterval eff="1" dat="" gui="{1B0F1B59-7161-4782-B068-98E021A6E048}" a="128" b="128" in="1" out="100" pos="88200" sin="-1" att="0" />
          <TimeInterval eff="7" dat="" gui="{1B0F1B59-7161-4782-B068-98E021A6E048}" a="128" b="128" pos="176400" sin="-1" att="0" />
          <TimeInterval eff="2" dat="" gui="{49E1F143-321A-4f5b-9F39-32984FF12410}" a="128" b="128" in="100" out="1" pos="264600" sin="-1" att="0" />
          <TimeInterval eff="4" dat="" gui="" a="128" b="128" in="1" out="1" pos="352800" sin="-1" att="0" />
          <TimeInterval eff="4" dat="" gui="" a="128" b="128" in="1" out="1" pos="441000" sin="-1" att="0" />
        </Intervals>
      </Track>
      <Track>
        <TrackGuid>ba388fe6-603f-4d29-9027-b2df10706eb9</TrackGuid>
        <IsHidden>false</IsHidden>
        <IsPrimaryTrack>false</IsPrimaryTrack>
        <TrackColorName>Gainsboro</TrackColorName>
        <TrackColorARGB>-2302756</TrackColorARGB>
        <TrackID>0</TrackID>
        <TrackType>0</TrackType>
        <WiiMapping inv="0" ibn="" inbn="" ani="0" ain="" hty="-1" fed="0" wind="-1" wibt="0" cint="False" ceff="False" hefsd="True" lef="3" lefl="1" intb="0" efd="0" />
        <Name />
        <Intervals>
          <TimeInterval eff="1" dat="" gui="{1B0F1B59-7161-4782-B068-98E021A6E048}" a="128" b="128" in="1" out="100" pos="88200" sin="-1" att="0" />
          <TimeInterval eff="7" dat="" gui="{1B0F1B59-7161-4782-B068-98E021A6E048}" a="128" b="128" pos="176400" sin="-1" att="0" />
          <TimeInterval eff="7" dat="" gui="{1B0F1B59-7161-4782-B068-98E021A6E048}" a="128" b="128" pos="264600" sin="-1" att="0" />
          <TimeInterval eff="2" dat="" gui="{49E1F143-321A-4f5b-9F39-32984FF12410}" a="128" b="128" in="100" out="1" pos="352800" sin="-1" att="0" />
          <TimeInterval eff="4" dat="" gui="" a="128" b="128" in="1" out="1" pos="441000" sin="-1" att="0" />
        </Intervals>
      </Track>
    </Tracks>
  </Pattern>
  <Pattern>
    <GroupName>My Patterns</GroupName>
    <Name>Nutcracker LSP Pattern</Name>
    <Image>
      <Width>99999</Width>
      <Height>112</Height>
    </Image>
    <Tracks>
      <Track>
        <TrackGuid>e36f35cc-1506-4652-ac16-6d0ab172c267</TrackGuid>
        <IsHidden>false</IsHidden>
        <IsPrimaryTrack>false</IsPrimaryTrack>
        <TrackColorName>Gainsboro</TrackColorName>
        <TrackColorARGB>-2302756</TrackColorARGB>
        <TrackID>0</TrackID>
        <TrackType>0</TrackType>
        <WiiMapping inv="0" ibn="" inbn="" ani="0" ain="" hty="-1" fed="0" wind="-1" wibt="0" cint="False" ceff="False" hefsd="True" lef="3" lefl="1" intb="0" efd="0" />
        <Name />
        <Intervals>
          <TimeInterval eff="3" dat="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&#xD;&#xA;&lt;ec&gt;&#xD;&#xA;  &lt;in&gt;100&lt;/in&gt;&#xD;&#xA;  &lt;out&gt;100&lt;/out&gt;&#xD;&#xA;&lt;/ec&gt;" gui="{DA98BD5D-9C00-40fe-A11C-AD3242573443}" in="100" out="100" pos="0" sin="-1" att="0" bst="-65536" ben="-65536" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="2000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="4000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="5000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="7000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="9000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="11000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="12000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="14000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="16000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="18000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="19000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="21000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="23000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="25000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="26000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="28000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="30000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="32000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="33000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="35000" sin="-1" att="1" />
          <TimeInterval eff="7" dat="" gui="" in="1" out="1" pos="37000" sin="-1" att="1" />
Sean
Littleton, CO
Latest releases You are not allowed to view links. Register or Login
xLights/Nutcracker Forum You are not allowed to view links. Register or Login
Fbook You are not allowed to view links. Register or Login

Offline dpitts

  • Restrictive
  • Sr. Member
  • *
  • Posts: 466
Re: Nutcracker: LSP
« Reply #12 on: July 06, 2012, »
Sean,

Do you have an idea if and when LSP would be supported this year. I know you have stated that LSP output is many times more difficult than the others and would take possibly weeks to implement (weeks you might not have). Plus it is the time of year when we should all be focusing on our own shows. So I understand if it is not implemented. I am just trying to figure out what tools I have available as I start sequencing this week. Thanks for all the work you have done so far.

Offline keitha43

  • Sr. Member
  • ****
  • Posts: 1182
Re: Nutcracker: LSP
« Reply #13 on: July 06, 2012, »
If he doesn't have time there was a possible workaround that an Australian forum member used. It is discussed in the first presentation Sean gave during the Academy. On Sean's Nutcracker site he has a link to the slides from his presentation and the workaround is in there. I haven't tried it yet myself.

Offline dpitts

  • Restrictive
  • Sr. Member
  • *
  • Posts: 466
Re: Nutcracker: LSP
« Reply #14 on: July 06, 2012, »
Thanks Keith. Did not go to academy. I wanted to go though.