Page 1 of 5 123 ... LastLast
Results 1 to 10 of 42

Thread: Vixen 3.0 Introduction Series - Part 4

  1. #1
    Join Date
    May 2007
    Location
    Spokane, WA, USA
    Posts
    684

    Default Vixen 3.0 Introduction Series - Part 4

    Modules

    First thing's first. We've moved over to the 4.0 version of the .NET framework. That is all.


    "Modules?"

    "Modules" = Plugins + add-ins. Those two terms have been brought together under the more generic term "module" to avoid continuing to throw around two terms where one is sufficient. And, to remove any ambiguity between 2.x and 3.0, "plugins" was abandoned.


    Second thing's second. We'll start out with a short explanation of the different module types that can be implemented before getting into how they're implemented.

    Output

    Output modules = output plugins. A controller uses one output module to interact with the controller it represents. Controllers are updated at a regular frequency and with an update, each output module receives a state as a collection of data. Data is slightly more elaborate than byte values this time around, so the controller can choose to ignore data based on its properties.

    Sequence

    There are two basic types of sequences -- your standard container for channel data and script sequences. A sequence module is an implementation of one of these two types. It gives identity to a specific implementation for editors to use. While one of the two types of sequences gives basic functionality to store data for execution, a sequence module implementation can extend them to add additional functionality or data (surfaced through an editor).

    Editor

    An editor module is a UI implementation to edit a type of sequence. The file type identity provided by a sequence module is what an editor module keys off of. A single editor can state multiple types of sequences it will edit.

    Effect

    An effect is the high-level data that the user interacts with. Effects generate lower-level data that is then executed. Effects can make use of properties (property modules) to help define their runtime behavior and define parameters that the user configures at design time.

    Effect Editor

    Since an effect can do pretty much anything, there's no way to anticipate what kind of editing needs every effect will have. An effect editor can specify effects it can edit (can be multiple) and/or it can specify parameter signatures. This allows, for example, a single effect editor that edits a floating-point value to service any effect with a single floating-point parameter.

    Media

    A sequence no longer specifies a single audio file to play during its execution. Instead, it is allowed to specify a list of media files to play. A media module handles the playing of the different media types (by file type). A single module can specify multiple file types. One or none of a sequence's media modules can also serve as the timing source for the sequence.

    Property

    Users can apply properties to groups and channels to help define and model their display. Effects can make use of these properties to direct their behavior. A property module defines the property, a self-contained attribute, along with the UI to configure it. An example is an RGB property that, when applied to a three-channel group, allows the user to assign a color to each channel. Then an effect can intelligently handle channels by their color to, for another example, transition down a color path over time.

    For effects to make use of properties, they must reference the assembly that implements property types. One motivation for doing this is to allow properties to define helper methods for effects to use.

    Input

    Not terribly unlike 2.x input plugins. The module defines a collection of inputs that are polled. An input raises an event when its value changes and has a parameterized effect associated with it (to be written to a channel, if the consumer so chooses). This module type has been a low priority, but will be further defined and refined with community use.

    Script

    Script modules implement scripting languages, as was covered in a previous post. A script module provides three things:

    1. Code provider - To compile the source code.

    2. Skeleton file generator - Generates the partial class that the user starts writing their script within.

    3. Framework file generator - Generates the partial class that implements the properties and methods available to the user's script.

    Timing

    I think you can figure this one out. It provides timing for a sequence (assuming the sequence is not using a media source as its timing). With timing being implemented as a module, anything can be a timing source. Time doesn't even have to be the basis of the timing. You could have a timing module that steps through execution in response to external events (such as a user clicking a button).

    If a sequence does not specify a timing or media module as its timing source, a default one will be used. The default timing source is the timing module with a specific id, so that, too, is replaceable.

    Trigger

    Trigger plugins are back! But, they've been a bit more defined, and a bit less supported. Let me explain.

    First, the "less supported" bit. Instead of imposing a scheme of how to handle triggers, that has been left completely to the utilizers of the triggers. The trigger module itself may write data to the system for execution, or maybe an application module responds to trigger events. It doesn't have to result in a sequence being executed. This also means a sequence is not necessary to have a response to a trigger.

    Second, the "more defined" bit. We've tried to define a set of trigger conditions to cover most expected use cases. A trigger can be digital, specifying a set-to-reset or reset-to-set trigger condition, or analog, using thresholds and ranges as the trigger condition.

    Like input modules, a trigger module defines a collection of triggers that are polled. A trigger raises an event when it goes into the set condition. There is some gray area between inputs and triggers as we try to define them, so their very definition may change over time with community input. Unlike inputs, a trigger doesn't have data associated with it. This has been another low-priority module type, so it may be underdeveloped.

    App

    Application modules are what used to be "add-ins". They are modules that get access to the client application, as well as the system's entry points (which any module does). A scheduler is an excellent example of an application module -- it needs to add menu items to provide users a way to interact with it (app modules are like services in that they don't have a defined user interface) and it needs to initiate execution. Any module can initiate execution, but only app modules get access to the client application's visual environment.

    That covers most of the module types in brief. There are a few more, but their fate and/or definition is in jeopardy.


    Basic Anatomy of a Module

    A module is made up of two or three parts -- a descriptor, a module instance, and a data object. The first two are required, the third is optional. A specific module type will contain the following at a minimum and may contain more that pertains to modules of that type.

    Descriptor

    A descriptor is just that. It provides information such as the module's id, author, version, text description, and types of the module instance and data model.

    "Abandon hope, all ye who enter without a unique ID."

    Every module has a GUID id. This is its unique identifier. If you've copied someone else's module code and haven't changed the id, neither module will be loaded. You've been warned.

    Data

    Module data is serialized and deserialized for the module through this data object. The module defines a class as its data object and gets/sets its data through an instance of this class (which is provided for the module upon instantiation). A module is not required to have a data object.

    Module Instance

    An instance of the module. In most cases. Additionally, some module types will be managed as singletons, so the instance you receive may not be just your own.

    Base Classes

    Every module type has its own interfaces for the module descriptor and instance and every module type has a base class. This is so that you don't have to implement the same mundane members in every module you write and it allows us to provide some niceties for your use on occasion.

    Dependencies

    Modules can specify dependencies. This becomes helpful when your effect absolutely requires a property and won't work without it. If the property is not installed, your effect will not be loaded and you won't have to field a bunch of questions asking why your effect is so broken. But if that effect can work with and without said properties, then don't list them as dependencies.


    I realize that this was a quick run-through, but I'm already a day behind on this post (and, thanks to work, a bit more behind in coding), so I gotta get this thing posted! Our hope is to follow this up with some specific examples; each week focusing on a specific type of module (starting with output modules).

    I want to thank folks for following along and the continuing encouragement. If we miss our goal, it's not going to be for a lack of trying or due to lack of community response. You guys have been great and we really appreciate you all.

  2. #2
    Join Date
    Dec 2009
    Location
    Gresham, OR (45.483992, -122.453879)
    Posts
    1,591

    Default Re: Vixen 3.0 Introduction Series - Part 4

    OOOO, coder stuff. Very cool KC, et. al. I can't wait to write my first module. Again, sounds like the architecture is matching the domain which will make it easy for people to take Vixen to the next step. And, I think I can speak for many in this community, WE WANT TO THANK YOU! Without software such as this, we would either A) Be nowhere or B) Out $100 or more for commercial software.

    Keep On Coding! -- John

  3. #3
    Join Date
    Dec 2010
    Location
    Cape Coral, FL
    Posts
    1,041

    Default Re: Vixen 3.0 Introduction Series - Part 4

    Getting more excited each week. I need something to solder to calm me down.. thankfully dlovely is helping me out with that.. Have a great night KC Thanks for all the amazing work you and the team are doing.

  4. #4
    Join Date
    Feb 2009
    Location
    Plymouth, MN
    Posts
    8,022

    Default Re: Vixen 3.0 Introduction Series - Part 4

    As always, a clean and clear explanation. However, the continued drool on my keyboard is starting to short out some keys...
    dirknerkle

    The DIGWDF Store is the place to go for wireless stuff for Renard... controllers, adapters... or other junk that
    nobody else would probably ever make. It's all in stock right now at http://diychristmas.org/store

  5. #5

    Default Re: Vixen 3.0 Introduction Series - Part 4

    Quote Originally Posted by macebobo View Post
    Without software such as this, we would either A) Be nowhere or B) Out $100 or more for commercial software.
    No So LSP is Milking money from us now http://www.lightshowpro.com/content.php?120

    KC i keep on letting everyone know about the Latest info over at ACL, Keep up the Great work.
    If it was'nt for your work with Vixen, us Aussie's wouldnt be able to go crazy with mega channels
    You let our dreams come true.
    A Big Thankyou.

    PS i keep waiting every month for the next update from you, like a little kid waiting for christmas
    2012 Checklist:

    7x mini floods
    2 RGB 9Ch Led Leaping Arch - 630Leds, 9 channels per colour - 27ch's each
    Mega Tree 5m - 14x r g b w leds - 54ch's
    10x RGB CoroStars - 6 RGB 5050 Leds in each - 3ch
    1x RGB Merry Christmas Sign
    - 42ch's
    2x 3section RGB Coro VU Meters - 27ch's each
    RGB Led Mega Star - 24ch's, 3ch each point of star
    10x Ledancer tubes
    150x ACL Led Strobes
    1x RGB Coroflake

    http://www.youtube.com/watch?v=bH7gDBDrFok


  6. #6
    Join Date
    Jun 2007
    Location
    Nova Scotia, Canada
    Posts
    1,533

    Default Re: Vixen 3.0 Introduction Series - Part 4

    KC,

    So my plugin can take advantage of standard .Net 4.0 routines? (linq etc?)
    Cheers!
    Steve

    Learn 1 new thing everyday.

    "AURBO" -- Aurora Borealis

    My weather today



    Chat link
    Christmas Wiki link

  7. #7
    Join Date
    Jul 2008
    Location
    Brisbane, Australia
    Posts
    632

    Default Re: Vixen 3.0 Introduction Series - Part 4

    Quote Originally Posted by Aurbo99 View Post
    So my plugin can take advantage of standard .Net 4.0 routines? (linq etc?)
    Yes, that's correct.

  8. #8
    Join Date
    Dec 2010
    Location
    Avon Lake, OH
    Posts
    479

    Default Re: Vixen 3.0 Introduction Series - Part 4

    Quote Originally Posted by Aurbo99 View Post
    KC,

    So my plugin can take advantage of standard .Net 4.0 routines? (linq etc?)
    I'm not KC, but the answer is yes.

    Erik
    Give back to the site that has given so much, become a supporting member.

  9. #9
    Join Date
    Nov 2010
    Location
    Melbourne, Australia
    Posts
    46

    Default Re: Vixen 3.0 Introduction Series - Part 4

    I know Vixen 3 has had it's feature set locked, so it would be nice to get a quick rundown of what output modules are going to be available at release from the Vixen team so that those of us planning displays can make sure it'll support everything we have

  10. #10
    Join Date
    Jul 2008
    Location
    Brisbane, Australia
    Posts
    632

    Default Re: Vixen 3.0 Introduction Series - Part 4

    Quote Originally Posted by justinj View Post
    I know Vixen 3 has had it's feature set locked, so it would be nice to get a quick rundown of what output modules are going to be available at release from the Vixen team so that those of us planning displays can make sure it'll support everything we have
    AT the moment, there's not a definitive set; development of the basic bits and pieces is still underway.

    I can't speak officially (on behalf of KC), but I might be able to provide a bit more of an idea -- we hope to get something preliminary to the community (an alpha version, if you will) soonish -- hopefully September, I think. This will have a very bare-bones feature set; a sequence editor, basic effects and properties, a display preview, and possibly some of the simple output modules (maybe a Renard, not sure what else). We don't expect this to be stable, or production-ready usable: it's an early release, purely to get feedback from the community on the style, interface, and also any bugs that are there.

    Hopefully from there we can get into a pretty quick feedback/develop/release cycle, to improve it and add new modules as they're needed, and also to get the community developers involved in new output modules and other things that are needed (that we couldn't ever dream of!). Maybe -- hopefully! -- it will be in a fairly usable state for the coming season, but we know it's going to be a very close call, and everyone will be pushed for time. But as KC said in a post a month or two ago: this is only our goal, and we can't make any guarantees. We will try the hardest we can, but you have to take care of yourself first: if that means sticking with 2.x for this season, or making other contingency plans, so be it.

    So, I know that's nothing definitive, and I apologize: but it's the best we have at the moment. If only we could move Christmas.... does everyone agree to just push it back a few months this year, and we'll all make it March instead? Then we can have Vixen ready for you all. ;-)

    (disclaimer: I'm not KC. I can't profess to know what his thoughts are, so take this all with a grain of salt. :-) )

Page 1 of 5 123 ... LastLast

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •