Talk:Chatbot

From Second Life Wiki
Revision as of 22:47, 15 September 2007 by Huney Jewell (talk | contribs) (Answer: Free Memory 16172)
Jump to navigation Jump to search

Wishes

We could/ should soon add ...

  • llGetFreeMemory in the demo
  • discover the time of day -- say if World > Force Sun > Region Default would show sunrise, noon, sunset, midnight, or what
  • move to owner and stop moving
  • parsing of prefix monadic + - arithmetic operators, for scalar and vectors and rotations
  • parsing of infix dyadic + - * / % arithmetic operators with precedence, on pairs of values of the same type, on vector/ rotation pairs, on rotation/ vector pairs

Also the Chatbot and Hello Avatar examples should learn from each other, e.g.:

llSetStatus(STATUS_PHYSICS, FALSE); llSleep(0.1);
llSetLocalRot(llRotBetween(<1, 0, 0>, llGetSunDirection())); // turn the East face to the Sun

Bugs

This Chatbot script works reasonably well for some of us ... how about you? If not, why not?

Bug: Channel number omitted, comma included, in echo of list value

STEPS TO REPRODUCE:

/7 [a, b, c] // a list value

EXPECTED RESULTS:

/7 [a, b, c] // a list value
[a, b, c]

ACTUAL RESULTS:

// [a, b, c] // a list value
, [a, b, c]

See? The channel number 7 is missing from the echo, broken by design.

See? A spurious string ", " of comma and blank appears before the expected result, who knows why.

Another example that produces the spurious ", " is:

/7 [llGetFreeMemory(), llGetFreeMemory(), llGetFreeMemory()]

Thus likely this bug is with output of type list, not with input of type list.

-- Ppaatt Lynagh 07:42, 14 September 2007 (PDT)

Bug: (316, 48) : ERROR Syntax Error

(316, 48) : ERROR Syntax Error
Second Life 1.18.2 (0) Aug 10 2007 09:34:24 (Second Life Release)

-- kindly reported by e-mail

I suspect we're facing some difficulty in perfecting the accuracy of the copy/ paste of a thousand lines of script.

The Second Life client app that works for me says it was released to me just ~3 minutes later: Help > About Second Life is "Second Life 1.18.2 (0) Aug 10 2007 09:37:04 (Second Life Release)"

Here I see:

Compile successful, saving...
Save complete.

...

"Line 316, Column 0" in world is:

return [llRequestAgentData(llList2Key(ps, 0), llList2Integer(ps, 1))];

Hard to understand how that syntax can be wrong while the previous syntax is correct.

...

I've stored a copy of this script as Chatbot-lsl-20070913.txt at http://members.aol.com/ppaatt/indexed/secondlife/

My integrity checks on the script here are:

$ ls -l Chatbot-lsl.txt
-rw-r--r--@ 1 pat  staff  22876 13 Sep 20:02 Chatbot-lsl.txt
$ openssl md5 Chatbot-lsl.txt 
MD5(Chatbot-lsl.txt)= 9373258278a20329c7ba39353454059c
$ 

Does that copy work for you?

-- Ppaatt Lynagh 20:12, 13 September 2007 (PDT)

A: Sorry, Ppaatt, no. I get

(316, 48) : ERROR Syntax Error

even when using the source @ aol.com. But as I don't use Linux, I couldn't check integrety.

--Huney Jewell 21:32, 13 September 2007 (PDT)

_____________________________________________________________________________________

Ppaatt, thanks for the response

Your volunteer status is noted and appeciated.

I tried commenting out blocks of code before/after but still got the same error.

I then tried breaking that huge if..else..else into three if statements. That compiled, so the issue is the number of else's in an if statement.

Regards

TimZim Teatime

_____________________________________________________________________________________

Ah fun.

1.

Me, I'm using Mac OS X. Yes please let's chase this theory that the results vary by client platform: Apple Mac OS X, Linux, Windows, whatever.

I'll return here with a short example that contains nothing but the resultOf routine called by default.state_entry. Then someone for whom http://members.aol.com/ppaatt/indexed/secondlife/Chatbot-lsl-20070913.txt fails can try that example, and prove that such a short example still fails.

I'll also provide an almost identical short example that differs only by breaking the huge if..else..else into three if statements. Then someone can prove that some platforms fail the huge if..else..else and accept the broken if..else..else.

Once we have a simple good/bad test case, then we can run down what the limit is exactly, in terms of a count of else if branches allowed. Then we can write a wiki article here to announce to the world this limit that we must live by.

Or ... we can volunteer you to do that work of defining this experiment in detail for us, as well as the work of conducting the experiment. :-)

2.

I'll work on getting Linux or Windows to boot here. Are any of you who see failure already using Linux by chance? That would be easiest, e.g., kernel.org Knoppix Linux I can boot from DVD-R or CD-R.

Getting Windows going will be harder, but eventually possible, I think. I can borrow a license from work and deploy Windows somewhere.

3.

llGetFreeMemory might be relevant in world.

I'll return here with a quote of what my llGetFreeMemory is.

4.

Thanks again and again in advance,

-- Ppaatt Lynagh 03:49, 14 September 2007 (PDT)

Ok. First next step:

http://members.aol.com/ppaatt/indexed/secondlife/if-else-if-lsl-20070914a.txt has just 226 source lines in it, rather than 907 of the 13 Sep Chatbot.

Those 226 source lines contain exactly the same 40 "else if" source lines as the 9/13 Chatbot.

By the TimZim theory of an if-else-if depth limit in Second Life for Windows ... that script should fail to compile, with a syntax error.

Does that compile fail? Here in Mac OS X, that compile succeeds, no worries.

P.S. 11993 bytes is my llGetFreeMemory result, as printed in Mac OS X by that if-else-if-lsl-20070914a.txt script.

-- Ppaatt Lynagh 08:34, 14 September 2007 (PDT)


A: Ppaatt, I get:

(149, 39) : ERROR Syntax Error
Greetz --Huney Jewell 21:43, 14 September 2007 (PDT)


Huney,

Thank you!

The TimZim theory lives: we still now can believe that 40 else-if's are too many for the Windows SecondLife client.

Next I will look to see if it is the same sourceline involved in both failures so far.

If yes, then I will delete just the else there, and ask you Windows folk to report if that minimal change defeats the error.

-- Ppaatt Lynagh 10:39, 15 September 2007 (PDT)

Ouch our theory of count the else-if's dies!

Among the 907 lines we saw Windows claim Syntax Error near "Line 316, Column 48" in world:

        return [llRequestAgentData(llList2Key(ps, 0), llList2Integer(ps, 1))];
123456789 123456789 123456789 123456789 12345678

Among the 226 lines we saw Windows claim Syntax Error near "Line 149, Column 39":

        return [llRot2Euler(llList2Rot(ps, 0))];
123456789 123456789 123456789 123456789

I wish we had seen the same source line involved in both failures, rather than two different source lines. If we had seen the same source line twice, then I could believe the persuasive TimZim theory that we're reverse-engineering a limit on if-else-if branches.

As is, we have to abandon that first theory, and guess again.

-- Ppaatt Lynagh

Huney, TimZim, ...

Feeling compulsive?

Anyone with a Windows client could reconfirm/ revise/ deny the key data that drives our conclusions here ...

We're claiming a difference exists between:

http://members.aol.com/ppaatt/indexed/secondlife/Chatbot-lsl-20070913.txt http://members.aol.com/ppaatt/indexed/secondlife/if-else-if-lsl-20070914a.txt

We claim those two scripts share the same line count and syntaxed of if-else-if, yet somehow the Windows client rejects one sourceline in the one script and another sourceline, several lines away, in the other script.

That's exactly right now?

-- Ppaatt Lynagh 15:12, 15 September 2007 (PDT)

I guess we should next substantially rework the example code.

/7 llGetFreeMemory()

reports a small number like 3566 here, even on the Mac client.

We should find we can add enough more code to blow out the Mac client, similarly to the Windows client.

We should find we can teach the example to chat to itself, so that people can compile the example as one script, or follow simple instructions for dividing the example into more than one script, to duck limits on how much we say in the one script by dividing out the work of which script interprets what.

For example, we could work to move the valueOf and resultOf routines into another script.

I'm ok on the concept here, but weak on the LSL as yet. I've seen references to LSL being used to let one script talk to another. I'll have to go chase those before I can contribute such a restructuring here myself.

-- Ppaatt Lynagh 15:22, 15 September 2007 (PDT)

The llMessageLinked article is a place where I saw talk of one script calling another.

-- Ppaatt Lynagh

Me, for one, I remain interested in discovering exactly what the Windows resource limit here that is so much tighter than the Mac limit.

16172 is the report I see in Mac every time I drag another copy of the following script into an object:

default
{
    state_entry()
    {
        llOwnerSay((string) llGetFreeMemory());
    }
}

-- Ppaatt Lynagh 15:22, 15 September 2007 (PDT)


A: Ppaatt, same result with Windows client: 16172. As far as I know, script memory is limited to 16384 bytes. This is a limit per script, not per object. Thus you can overcome the limit by splitting up a script and simulate subroutine calls by use of link messages.


Greetz --Huney Jewell 23:47, 15 September 2007 (PDT)