Keep Informed

Entries in Reusable Components (1)

Tuesday
Aug162011

MUG Meeting August 22nd, 2011

[17:06]  Antonius: Hello Raven.
[17:06]  Raven: hey there :)
[17:06]  Antonius: Welcome to the HQ.
[17:06]  Raven: How have things been?
[17:07]  Antonius: Been busy & good. Working on the next version of MOAB.
[17:07]  Antonius: How have you been?
[17:07]  Antonius: A few more will join us shortly.
[17:08]  Antonius: Hello Sally!
[17:08]  Antonius: Hi Sally. Meet Raven.
[17:08]  Sally: Hi Ant , Hi Raven °?°
[17:09]  Raven: hey there
[17:09]  Antonius: Sally was here last week and really put me through my paces with great questions!
[17:09]  Raven: lol
[17:09]  Sally: haha .. sorry about that
[17:09]  Antonius: Not at all- it was great!
[17:09]  Raven: That's good to do tho
[17:09]  Antonius: How was your progress Sally this past week?
[17:10]  Sally: unfortunately I didnt get a lot of time to work on it, although our talk last week helped with a few things ;)
[17:11]  Antonius: That's good. I've also added your feature request to the todo list for v1.0.3.
[17:11]  Sally: cool °?°
[17:11]  Antonius: Raven, Sally wanted an icon to indicate when a state has any State Variables or Functions defined for it.
[17:12]  Antonius: I just need to figure out a good icon for it! That's really the hardest part of this feature.
[17:12]  Antonius: Being somewhat graphically challenged I struggle with things like that.
[17:13]  Antonius: Raven, how has your work with MOAB been going?
[17:15]  Raven: ah, pretty good so far. i still resort to vim a lot of the time lol but i've been working towards using moab more
[17:15]  Raven: I do have a question.
[17:15]  Antonius: Shoot.
[17:16]  Raven: How can you trigger a state exit without an event?
[17:17]  Antonius: Aha. Sally, do you want to answer that one???
[17:17]  Sally: yes
[17:17]  Sally: lol
[17:17]  Antonius: Sally asked the same question last week!
[17:17]  Raven: haha
[17:17]  Sally: you can create a final state inside the state
[17:17]  Antonius: Go ahead. I'll back you up.
[17:18]  Sally: transition to it and it will fire a completion event which you can use to transition out
[17:18]  Antonius: 10/10 Sally.
[17:18]  Sally: \o/
[17:18]  Sally:   || Yaaaaaaaay n Stuff!!!!!
[17:18]  Sally:  / \
[17:18]  Antonius: Do you follow Raven?
[17:19]  Antonius: Basically you can transition to a state, perform some work, and then automatically transition out of the state with a transition set to the Completion Event.
[17:19]  Raven: ok so you go into the state you want to exit
[17:19]  Raven: create a final state inside
[17:19]  Antonius: Yes and transition to it on the same event that brought you into that state.
[17:19]  Raven: Hmm
[17:20]  Raven: Well, let's say you have a state
[17:20]  Antonius: Go ahead.
[17:22]  Raven: I guess my question is how do you trigger the final state within the code?
[17:22]  Raven: If you have a state with a state inside and a final state, then how do you trigger the final state from the inner state?
[17:22]  Raven: Wow, that confused myself to read lol!
[17:23]  Antonius: It has to transition to the Final State on the same event that brought you into the containing state.
[17:23]  Raven: in normal LSL (moab aside), I can call 'state otherstate' to get there, which would trigger the state exit
[17:24]  Raven: Hmm, so you have a transition from one state to another
[17:24]  Antonius: Check out the screen. (http://screencast.com/t/MuWWTFgwR)
[17:25]  Raven: Okay now, assuming the same as there, but
[17:26]  Antonius: Re: LSL: Yes that's true. But in MOAB you cannot arbitrarily jump from state to state without an event and transition sequence.
[17:26]  Raven: You need the Init stage to also process other events.
[17:26]  Raven: Ah
[17:26]  Raven: That's the issue I believe, that I am having - eventless transitions
[17:27]  Raven: Within the state_entry event
[17:27]  Raven: Can you transition to a final state?
[17:27]  Antonius: Bascially in MOAB, you have an event, and then you use Choice Points to decide which other state to go to.
[17:27]  Antonius: It forces you to visually specify how you get to the next state.
[17:28]  Sally: ((sorry guys goign to be afk for a bit ))
[17:28]  Antonius: Ok Sally.
[17:28]  Antonius: Yes you can transition to a Final State as shown in the model on the screen.
[17:28]  Raven: So I need to use the state to generate a completion event, at which time i can use the choice to split to other states?
[17:28]  Antonius: Yes, you can do that Raven.
[17:28]  Raven: In the shown example there, the state_entry of Init is still processed?
[17:28]  Antonius: Yes.
[17:29]  Raven: It would immediately fire the completion event, wouldn't it?
[17:29]  Antonius: Yes, when you enter the Final State and if there is a transition leaving the enclosing state set to the Completion event.
[17:30]  Antonius: Of course you should examine whether this Final State trick is really necessary.
[17:30]  Raven: Yes, there are some concepts that take a fresh pair of eyes for me to realize other ways of doing it! :)
[17:31]  Antonius: For sure.
[17:31]  Antonius: On any event, you can still of course go directly to a Choice Point and then decide which state to forward to.
[17:33]  Antonius: Did you see the Sneak Peek of v1.0.3 features Raven?
[17:33]  Raven: Oh, I may have missed that - Heck, I'm still on v1.0.1 =x
[17:34]  Antonius: Oh! Please upgrade to v1.0.2 asap.
[17:36]  Antonius: Much better release.
[17:36]  Raven: hehe
[17:37]  Raven: I must have missed it somehow
[17:37]  Antonius: Here's the blog entry on v1.0.2: http://bit.ly/qdaCnI
[17:38]  Antonius: You got to use the LSL Action Wizard with MOAB. It's a great feature.
[17:39]  Antonius: Since then I've also put out a few videos which you should definately take a look at. Not that I'm a great video star LOL, but you'll find them useful.
[17:39]  Antonius: Intro Video: http://bit.ly/ihCqyf
[17:39]  Antonius: 3-Part MOAB Basics: http://bit.ly/mRRhq2
[17:40]  Raven: mk, upgraded lol
[17:41]  Raven: I'll definitely look at those videos as well.
[17:42]  Antonius: Here's the link on what's been developed so far for v1.0.3: http://bit.ly/pkEp7D
[17:42]  Antonius: Hey Pilot!
[17:43]  Pilot: G'day all... Bit late today :)
[17:43]  Pilot: How's it hangin' Ant?
[17:43]  Antonius: np. I don't know if you've met Raven before.
[17:43]  Raven: hello
[17:43]  Antonius: Sally's here too, but afk.
[17:43]  Raven: i wouldn't remember if so. i'm terrible with names haha
[17:43]  Pilot: G'day Raven :) good to meet ya mate.
[17:44]  Antonius: Raven, did you have any other questions?
[17:45]  Raven: I think that's it. I will definitely play with this Final state business lol
[17:46]  Antonius: That's great Raven. & please update to v1.0.2
[17:46]  Raven: ah yes, i have already lol
[17:46]  Raven: went and did that immediately
[17:47]  Antonius: Excellent. I think you'll like the new features there.
[17:47]  Antonius: How's it going Pilot?
[17:47]  Pilot: Not too bad thanks mate, been really busy over the last week, had grandkids etc, so been occupied outside SL.
[17:48]  Raven: When you have a state and you have things in the state entry but no outgoing events, it will never fire completion event unless you have the internal final state linked to the incoming event nodes, right?
[17:49]  Pilot: lol... Raven seems to have a handle on MOAB!
[17:49]  Antonius: That's right Raven.
[17:48]  Pilot: How's things in Canada?
[17:49]  Antonius: Ok. Economy is better than most others, but Europe & the U.S. may drag us down.
[17:49]  Raven: ah ha, got it now :)
[17:50]  Antonius: Raven asked the same question on Final States & Completion events that Sally asked last week.
[17:50]  Sally: back
[17:50]  Sally: Hi Pilot °?°
[17:50]  Pilot: wb Sally
[17:50]  Raven: I was thinking orignally that it would just 'end' since there was nothing else to do except the completion event.
[17:50]  Raven: That makes more sense now, to just add that final state.
[17:51]  Antonius: Yes, it can really help in some situations, but I wouldn't use it all the time.
[17:51]  Antonius: Normally an external event should be the trigger that moves you from state to state.
[17:52]  Raven: In the script I have been working on for ages it has nothing in the default state but an if statement lol
[17:52]  Sally: yes but sometimes its a second level dependency ... like sometimes I might want a state change after the date changes .... but I check for the date change using a timer
[17:53]  Antonius: Without a Completion Event on the outside, a transition to a Final State will indeed be final (& the script though running, will no longer respond to any events).
[17:53]  Raven: Mhm
[17:53]  Pilot McBride faints....
[17:54]  Antonius: Sally, wouldn't the trigger for the state change then be the timer event?
[17:54]  Sally: yes in a sense .. but the real trigger is the calendar flipping over a page
[17:54]  Sally: we are using the timer to check for that
[17:55]  Raven: My default state is just "if config_complete state running else state config" lol
[17:55]  Antonius: Raven: You mean in regular LSL.
[17:55]  Raven: i guess i can make running state the default state. hmm
[17:56]  Raven: yes, in plain lsl
[17:56]  Antonius: Sally: what causes the calendar to flip over?
[17:56]  Sally: the clock passing midnight in the current time zone
[17:57]  Sally: I mean I get it ... but the timer even is kind of secondary
[17:58]  Sally: so its a guard condition on a timer event
[17:59]  Raven: You could get the current timestamp, determine how long until midnight, set a timer. on timer fire, set timer to 24h at that point
[17:59]  Raven: Not sure if there is a better way, though?
[17:59]  Antonius: So you need to get out of the current state when that happens.
[18:00]  Sally: right like it could be .. "your lease has just run out" .. go to the "available for rent" state
[18:01]  Antonius: Do you go to the Final State (& exit via completion event) just to avoid extra transitions within the state (exiting via an Exit Point)?
[18:02]  Pilot: Ah... why would you include a final state? Wouldn't the calendar script need to loop?
[18:02]  Pilot: Or have I missed something?
[18:03]  Sally: I need to exit "Rented" state and go to "Available " state
[18:03]  Sally: I can do that with a timer though
[18:03]  Sally: and check the date to see if the time is up
[18:04]  Antonius: You can have a timer transition on the Rented state that goes to a Choice Point that has two transitions: one going to the Available state, and the other one returning to the Rented state.
[18:04]  Sally: yep got it thanks Ant °?°
[18:04]  Antonius: Also take a look at using a Group Transition for the timer, especially if there's other states other than Rented that need to go to Available.
[18:04]  Raven: oh!
[18:04]  Raven: I was working on a script
[18:04]  Raven: I have a pure LSL version in-world that works (one that I made), but when putting it in MOAB, it doesn't 'fit' lol. I literally cannot put it into one script - I'm not sure how long a script can be offhand 65k characters or something?
[18:04]  Raven: i tinkered with the optimized lsl in moab, made sure there were no debugging options turned on and even deleted all comments from the moab-generated code lol
[18:05]  Sally: thats a good point Raven about script size
[18:06]  Sally: but it raises the question of inter script communication and how you model that?
[18:06]  Raven: it's not about memory while it's running, i just mean that you can't paste it into the script window, as it is too long lol
[18:07]  Antonius: Raven: Try it again with v1.0.2. How many lines in the original LSL program?
[18:07]  Raven: hmm let me check
[18:08]  Pilot: I ran into that as well Raven. Currently getting rid of all excess characters from the script.
[18:09]  Sally: Ant, I know that we can have multiple script models open at the same time, but is there any way of "connecting" them so that they can communicate ?
[18:09]  Antonius: Sally: I have a longer term feature planned for that. Take a look at: http://www.miceonabeam.com/feature-requests/post/1233279
[18:09]  Sally: oh that would be awesome
[18:10]  Antonius: There's no automatic way yet... You have to manually use the link messages as you do now.
[18:10]  Sally: nods
[18:10]  Antonius: It will be quite exciting when I get to do that script communication feature.
[18:10]  Raven: 743 lines, 25,560 characters in the original lsl
[18:11]  Raven: I haven't compiled it in 1.0.2 though.
[18:11]  Antonius: Raven: How many states in the MOAB model?
[18:12]  Antonius: There were some code optimizations put into v1.0.2 depending on which features you used.
[18:13]  Raven: looks like 6 states, 6 choices. some hefty-sized functions though lol
[18:13]  Antonius: User comments are also automatically ignored when you use the optimized version of code gen.
[18:14]  Antonius: The v1.0.2 version will definately be smaller.
[18:14]  Sally: really? what happens to comments if you don't use optimised?
[18:14]  Antonius: They're copied to the generated code.
[18:15]  Raven: hmm, it does look like it is fitting with 1.0.2
[18:15]  Raven: lol
[18:15]  Raven: in 1.0.1... whew. it was chopping off a lot of it
[18:15]  Sally: oh ok .. but they're not turned into llSays or something
[18:15]  Antonius: No.
[18:15]  Raven: 255-lines 9018 characters in "the big function" in this one lol
[18:15]  Antonius: There you go.
[18:16]  Antonius: Raven: The function is then identical to the basic LSL version then.
[18:16]  Raven: Yes, 90% of it is, yeah.
[18:17]  Raven: I had to make changes with moab
[18:17]  Antonius: As time goes on I hope to add additional optimizations.
[18:17]  Raven: where i had state soandso in the middle of the function, i had to move to using flags in moab
[18:17]  Raven: after the function returns, i use a choice to check the flag, and go to each state depending on the value
[18:19]  Antonius: Raven: A direct translation of the logic might lead to a more complex MOAB than is necessary. After initially getting it to work, you might want to sit back and look at the overall functionality and see how you might structure it in MOAB if you were starting from scratch. You may get some insights from that.
[18:19]  Raven: mhm
[18:20]  Raven: Definitely am hoping to get that optimized for moab use. I don't want to end up with 100 states in moab, though :p
[18:20]  Raven: Keeping it as low as possible is the trick lol
[18:20]  Antonius: You shouldn't need to!
[18:20]  Raven: I tell ya, I'm so tempted to have states inside states inside states inside states :p
[18:21]  Raven: lol
[18:21]  Pilot: Been there, done that, works well Raven...
[18:21]  Raven: I don't, but
[18:21]  Antonius: Composite States when used judiciously, can reduce the overall number of states.
[18:21]  Raven: It's still a learning experience, but I'm getting there :)
[18:21]  Antonius: For sure!
[18:22]  Antonius: & Composite States facilitate the using of Group Transitions which can really simplify a design.
[18:23]  Antonius: In the future I'll have more videos with advice on these key features.
[18:24]  Sally: you know what I would find really useful ... is an example of how to use the component library components and incorporate those into my own script ...
[18:24]  Sally: ie .. a worked example
[18:25]  Pilot: That door project of mine makes use of states etc rather than typing code. Yeah, the component library, wow...
[18:25]  Sally: I think components are the secret sauce .. but knowing how to "wire them in" is the key
[18:25]  Antonius: Yes. There really needs to be more work on these components. They're mostly examples for now.
[18:25]  Pilot: I think the trick is to make your own components Sally.
[18:26]  Raven: Okay guys, I have an SL land issue I need to take care of real fast. Thank you for all the help and tips - I learned some new things :)
[18:26]  Raven: Y'all have fun!
[18:26]  Antonius: Yes Pilot. I was hoping that people might develop components for the community too!
[18:26]  Sally: cheers Raven
[18:26]  Pilot: See you again Raven :)
[18:26]  Antonius: np Raven. Great to see you again.
[18:26]  Pilot: You too mate.
[18:27]  Antonius: Anything else guys?
[18:28]  Pilot: We can't code like you Ant, that's the problem. I did the menu state in my door script as a component to move across the other operational scripts.
[18:28]  Sally: I have some ideas for some components ...
[18:28]  Sally: like a sub menu type one
[18:28]  Pilot: Yeah.
[18:28]  Antonius: There is a menu component that you can link together.
[18:30]  Pilot: Yeah, the menu component, lol... Couldn't make head nor tail of it Ant, sorry mate, so I built my own, lol.
[18:30]  Pilot: In simple but probably execssive code, lol.
[18:30]  Antonius: Oops. It does work Pilot. You have to use the Configuration Wizard to set it up.
[18:31]  Pilot: Oh.... lol.
[18:31]  Pilot: Wizards make spooky things happen, lol.
[18:32]  Antonius: Trust the Wizard!
[18:32]  Sally: if you had multiple showmenus linked to themselves ... would they create new listeners each time?
[18:33]  Pilot: They do... Each time a call for a menu is made a new random channel is defined. (I think.)
[18:33]  Antonius: They each would have their own listener that they disable when not used if I remember correctly.
[18:34]  Sally: so once they go back out .. they close down the listener i guess that's not so bad
[18:34]  Pilot McBride gets lost easy... lol
[18:35]  Sally: in LSL code .. I would have a single listener for the whole sub menu structure
[18:35]  Antonius: Really rough, but something like what's on the screen. (http://screencast.com/t/iT9zq8ESMSVS)
[18:36]  Pilot: lmao.. here we go again....
[18:36]  Antonius: Sally: Yes, there is always a tradeoff if you want something modular.
[18:37]  Antonius: It has to standalone on it's own.
[18:37]  Sally: yes I see that
[18:37]  Sally: now what you have on screen there ....
[18:37]  Sally: could you turn that whole thing into a component?
[18:37]  Sally: a Menu with 2 submenus component?
[18:38]  Pilot: Yep (imo)
[18:38]  Antonius: Yes. Aggregate it into a Composite State, and set the appropriate State Variables to be configurable.
[18:39]  Sally: can you do that at the script level?
[18:39]  Antonius: Not sure I understand what you mean?
[18:39]  Sally: well like on the screen .. there .. you are showing a script with 3 states
[18:40]  Sally: how do you envelope the 3 states inside another one from where you are there
[18:41]  Antonius: You use the Aggregate Component menu item.
[18:42]  Antonius: See screen. (http://screencast.com/t/PthS1nxO8)
[18:42]  Sally: oh crap on a craker !!! ... I missed that option .. brilliant !! °?°
[18:42]  Pilot: Holy smoke!
[18:42]  Antonius: You can also decompose a Composite State too.
[18:42]  Pilot: Stone the crows!! Didn't I miss the boat!
[18:43]  Antonius: But BE CAREFUL. It will discard any transitions connected to the states outside the selection.
[18:43]  Sally: right so you need to re-wire a few bits
[18:43]  Antonius: So in the example, the Initial Transition from the Initial Point will be discarded.
[18:44]  Antonius: Yes. So if you need to save a transition to the group, redirect it temporarily to a temporary state, and then reconnect it to the new Composite (aggregate) State.
[18:45]  Sally: this one tip was worth the price of admission today :0
[18:46]  Antonius: LOL! & considering it's free, the bar fortunately is not set too high for me! :-)
[18:46]  Pilot McBride steered clear of that aggregate business... lol. Will have to check it out!
[18:46]  Sally: awwww
[18:47]  Sally: really appreciate the level of support that your time here represents
[18:47]  Sally: MOAB will take off im sure ! °?°
[18:47]  Antonius: It's my pleasure. But RL awaits.
[18:47]  Pilot: Here's a simple one Ant: What is the difference between opening a state and going inside a state?
[18:47]  Sally: kk thanks again see you next time
[18:48]  Pilot: See on the dropdown menu on the board, you can open the state but not go inside it :)
[18:48]  Antonius: Pilot: "Open State" opens a separate State Editor while "Go Inside State" will replace the existing contents of the current State Editor with the state of interest.
[18:48]  Pilot: Oops, multiple states & transitions, selected....
[18:49]  Sally: so Go inside is like drilling down
[18:49]  Pilot: Silly me, lol.
[18:49]  Pilot: Steered clear of that too... lol.
[18:49]  Pilot: Yep. I've just been using "Go inside"....
[18:49]  Antonius: Except for the top level state, which must stay open if the model is to stay opened.
[18:49]  Antonius: Yes. & in v1.0.3. you can just double-click on the background to go up a state.
[18:49]  Antonius: So when you set your double-click option to Go Inside, you can just use double-clicking to go up and down the state hierarchy.
[18:49]  Antonius: Of course in v1.0,3 there's also the State Explorer which is really convenient too.
[18:49]  Sally: kk see you guys gotta fly °?°
[18:49]  Sally: have a good week
[18:49]  Pilot: See ya later Sally :) thanks mate :)
[18:50]  Antonius: Bye Pilot. See you next week.
[18:51]  Pilot: Righto mate. Stay good & healthy mate.
[18:51]  Pilot: :)
[18:51]  Antonius: You too friend.
[18:51]  Pilot: Thanks for all :)
[18:51]  Antonius: Bye.