Difference between revisions of "User talk:Strife Onizuka"

From Second Life Wiki
Jump to navigation Jump to search
Line 728: Line 728:


:::::That oddly had more to do with which template was being used. For whatever reason multilang wasn't working right and so you were getting the english version of the template (my new keyboard arrived, it's so nice to have a Z key again). -- '''[[User:Strife_Onizuka|Strife]]''' <sup><small>([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])</small></sup> 20:38, 19 October 2013 (PDT)
:::::That oddly had more to do with which template was being used. For whatever reason multilang wasn't working right and so you were getting the english version of the template (my new keyboard arrived, it's so nice to have a Z key again). -- '''[[User:Strife_Onizuka|Strife]]''' <sup><small>([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])</small></sup> 20:38, 19 October 2013 (PDT)
:::One more thing, can you please point me to the "specifiers does not support negative indexes." template - it's being used here: https://wiki.secondlife.com/wiki/LlJsonSetValue/de - Thanks! --[[User:MartinRJ Fayray|MartinRJ Fayray]] 14:36, 20 October 2013 (PDT)

Revision as of 13:36, 20 October 2013

Strife Onizuka
is hereby awarded with the
Geek Award.jpg
Geek Award
for
the most creative template name:
Template:Template

by Zai Lynch

You found my talk page... Find old discussions take a look at the archives: 1 2

JIRA issues on LSL function pages

Okay, as I've made no headway deciphering your templates (not that I'm familiar in the least with the more complex wiki functions in the first place...) I decided just to cut my losses and ask! Basically I was wondering if there's a reason why Template:LSL_Generic/Issues doesn't appear to list all issues, but instead seems to just list bugs only in the same way as Template:LSL_Generic/Caveats?

I just think it'd be nice if function pages would also summarise popular proposals relating to them in the deep notes section, which is what I believed was intended but it doesn't appear to do this right now.

For example, if you go to the LlStartAnimation page, in the deep notes you'll notice that there are zero issues listed, however, clicking the "Search JIRA for related Issues" link returns quite a few. It might be nice to see the deep notes tweaked to display these, but perhaps with a limit on how many are shown (though llStartAnimation is a fairly popular one to see JIRA issues for and only has 17 issues listed). Anyway, just though I'd ask/request, please poke my talk page if you respond to be sure I remember and look! --Haravikk Mistral 15:26, 12 September 2010 (UTC)

The template is not automatic. Take for example llBreakLink, it lists a single issue in the article, it does this by including the template Template:Issues/SVC-3510. There are many stub templates like Template:Issues/SVC-3510 that work this way, they contain the information about the issue and pass it along to a template that does the heavy lifting. The value of this method is that a single template exists for the Issue and if the issue is sited on multiple pages, they can all be quickly updated by modifying the template. From an organizational standpoint, it also makes it possible to see what all pertains to a particular issue.
The thing is, if you want all the issues on the wiki, they need to be imported to the wiki, and regularly updated as changes are made... but that could all be done with a bot. Wonder if Gigs could be enticed to incorporate it into SLJiraStats?
The goal of the Deep Notes: Issues section was to contain dead bugs and interesting feature suggestions. I never intended it to contain all issues pertaining to a feature. We don't add any value by duplicated the JIRA search engine results; the value we can add is by filtering them. Some of the bugs aren't bugs, and some of the feature suggestions are unworkable; I don't think these should be given screen space. Considering the resources required to manually include and update the issues, triage has to happen.
Unfortunately I do not have the free time to work on this, work and other responsibilities eat all my time. *wonders just how true that is* -- Strife (talk|contribs) 03:10, 16 September 2010 (UTC)
Ah yeah, seems I've completely misunderstood what it was doing! I wasn't thinking to list everything, just an automatic, and hopefully useful summary of say...the top ten bugs and issues? It sounds like way more work than it's likely to be worth though so probably better just to forget about it, unless there's some way to just embed an iframe with a portion of a JIRA search or something similar? But that would probably cause an unacceptable increase in JIRA page requests from people just popping over to look something up. But now I know how it does work I can at least pop useful relevant issues on manually, thanks! -- Haravikk Mistral 12:36, 18 September 2010 (UTC)
A related problem, I've tried to add a few top issues of interest to me onto my user page under Key Issues, however, I've tried to create two Template:IssueTable instances, but they both have the same content, despite the value of #issues being different for both. Is this some peculiarity in using this template more than once? If you could take a look at let me know it'd be handy, as IssueTable doesn't have any documentation =( -- Haravikk Mistral 11:36, 22 September 2010 (UTC)
You are hitting one of the caveats/bugs of the new parser engine. I forget how to get around it. I beleive the issue is intermediate caching, and the way around it is to make the template call dynamic or something like that. Without spending a bunch of time debugging the problem, I just don't remember how to work around it. -- Strife (talk|contribs) 14:37, 22 September 2010 (UTC)
It just struck me what the problem is, it's caching IssueTable. -- Strife (talk|contribs) 18:27, 22 September 2010 (UTC)
Aha! The "subst:" keyword seems to be for this (e.g - {{subst:User:Haravikk_Mistral/JIRA/Issues/SVC}}), as I believe it fetches the pre-processed contents of a page rather than the source. In any event, this works in my case as I created sub-pages for each category, I don't believe it would help for a page with multiple IssueTable instances though, as using subst: for any of them would just create a blank gap, but it solves my problem at least! -- Haravikk Mistral 11:29, 23 September 2010 (UTC)

Ghost Detector

Thanks. I discovered that property of llKey2Name by accident. It's odd because, for instance, llDetectedName gives a non-empty string for ghosted avatars. -- Something Something 05:21, 10 November 2010 (UTC)

Friendly greetings

You seem to have found a "fix" for my horrible script and....messed it up. Please compare my original to yours and do some testing. They are different in the result. I would appreciate you fixing your "fix". Best regards --Kireji Haiku 02:42, 14 December 2010 (UTC)

I'm sorry you took the edit personally it was not intended that way. The example you contributed is valuable and nontrivial, however examples are held to high standards and it didn't meet them. I was faced with two options: rewriting it or deleting it, I felt it had merit so I rewrote it. My goal as always is to provide the most useful content to our users, and in this case down compatibility needed to be sacrificed. The script as it was designed required every prim to have at least one face have full glow, that didn't sound entirely useful, so I changed it to accept some glow (I notice that I also changed it to require every face have glow... which doesn't sound useful, so I'm going to revert that).
Examples have one major goal: Be educational, teach good coding practices and problem solving. Here is where the script went awry:
  1. Names should be descriptive. The function names were a bit generic but single letter variables are definitely not descriptive, especially when they are globals, they really should describe the purpose they fulfill.
  2. Using globals instead of locals & parameters may be efficient, but it degrades readability and adds a new vector for script bugs. This sort of optimization has no place in examples (except in an article on optimization techniques). The situation is made even worse by using non-descriptive variable names.
  3. The script contained code that complicated it without aiding readability or improving functionality. Examples need to be streamline, having it meander requires the reader to needlessly keep track of more things.
  4. I felt that the functionality provided had too narrow an audience, that by changing how it functioned that it would be more useful to more people. Down compatibility is a secondary consideration for examples, not a primary consideration.
P.S. I take it you didn't noticed there is a bug in your script: A single prim object with at least one avatar sitting on it could return the wrong result. IMO examples should not be attributed in the script text, it's what the history page is for after all, but I know the community and I don't always agree so I don't fight it. Personally I don't want my name associated with buggy code, so if you really want the script to be 100% compatible I'll have to remove my name and give you all the credit.
P.S.S. I think we may have different notions of wiki content ownership. When I post content on the wiki, I do so with the full expectation that it will be edited, that it will mutate into something I did not envision, into something I may not entirely agree with. We do not control the content after we have posted it. It's why there is the text below the edit box: "If you don't want your writing to be edited mercilessly and redistributed at will, then don't submit it here." Wiki culture is different. I may own my contributions but I don't control their fate. They are my children, being changed and influenced by the people around them, being made stronger in the process. But I digress
P.S.S.S. In the future if you want to convince someone they should do something, don't insult them first, it's counter productive. A better way to approach this situation would have been to say: "I disagree with some of the changes you made, specifically blah blah blah, could you please look into it? I did not appreciate your tone and I am quite insulted." It's a mistake to mix the two messages, people are prone to take offense and not do what you want out of spite. In a situation like this being snarky just isn't productive (though it does blow off a bit of steam which can feel good in the moment). Just FYI, nothing more. -- Strife (talk|contribs) 07:43, 14 December 2010 (UTC)
I didn't take it personally and was just trying to make you aware of your rewrite not doing the same like my script. Maybe you don't read in-world messages, as I had sent you a message thanking you for your rewrite and trying to point out the differences between the two. The script I had provided would check a link-set on whether or not it has glow. And yes, that would return a false result if avatars sit on it, but I thought nobody would use the script to check if a link-set is glowing while sitting on it, but I might be wrong and should have pointed that out in the description. So I see your point there and support your critique on that. However my script would return "glowing" for a prim if ANY number of faces have SOME glow (not 1.0, as you said it would do). Maybe you now understand my view when I see your rewrite as being more streamlined and easier to read, however you limit the script down in its original ability of detecting glow by forcing it to return positive only with all faces of a prim glowing. Anyway, I'm not up for a fight and to be quite frank just too lazy for it, a builder inside of SL asked me if it's possible to detect whether or not there's a bit of glow on all prims inside a link-set of his build and I just felt like sharing my approach of writing a script for that. If that script doesn't meet wiki standards in terms of streamlining it towards being absolutely foolproof and readable for just about anybody, I'll have to refrain from doing so in future.--Kireji Haiku 18:13, 14 December 2010 (UTC)
First I need to apologize, when I wrote my last comment I hadn't carefully reread your script, if I had I would have noticed your use of llCeil, which does as you point out return true for some glow. So my argument on that point is baseless. Between work and other obligations, I had forgotten about that aspect of the script and just went on my memory of what I thought the script was doing. As to fighting, I agree it's a waste of time and effort. However I hope you do continue to contribute to the wiki, every contribution is valuable as they grow the understanding and knowledge base of the community. Standards evolve and the content does as well, content has to be nurtured, given room to grow. Immature content just needs to mature is all; the only time stuff gets deleted is if it's factually inaccurate or needlessly repetitive. If I thought the contribution was trivial and obvious I would have stripped your name from it (attribution on one liners is blatant self ego boosting and makes the wiki look unprofessional). The only reason I attached my name was so that you wouldn't be forced to shoulder the costs of supporting code that you did not write. Please don't take away from this that your contribution was without value, or that I had no respect for it or you.
I should mention the reason for my terse comment in the edit was for a simple reason: I couldn't be verbose with the text limits of the field.
As to messaging me, all my IMs get sent to an email account I rarely check, I only ever go inworld to keep my accounts active and go to meetings (pretty rare) because my internet connect is total suckage. I had no idea you IMed me; for all correspondence I use the wiki and email.
You would be quite ticked at me if I were to describe my scripting habits with regards to code I post. I know I was when I saw people do what I do, but I don't really have the option. It's an ROI equation, should I make possibly buggy contributions or make no contributions at all? I wish I weren't forced to make the choice. If I weren't here doing this who would take up the mantel? Who would look after the templates? It would avoid problems like this maybe but would the community be better off? I honestly don't know but I suspect not.
If you're still reading, what changes or improvements would you like to see made to the documentation? An upcoming project is to incorporate collapsible sections into the documentation, I'm just not sure yet how to do so, I could do with some input. I haven't called for input from the community yet because I haven't rolled out the new Constants template yet (which will revolutionize the PrimitiveParams documentation). Given the potential of collapsible sections we are at a point in time where we should consider redesigning the documentation from the ground up. Maybe a contest? -- Strife (talk|contribs) 22:33, 14 December 2010 (UTC)
P.S. Does it work as it did before now? -- Strife (talk|contribs) 23:48, 14 December 2010 (UTC)
Hi, no it doesn't. The first problem is your thing with the double exclamation mark, that always returns 1 for me. And the second being you're still stuck with [PRIM_GLOW,ALL_SIDES], you don't do a loop through the sides. I will post a re-do of mine again, if you find a way to do what you wanted to do with the double exclamation mark thing, let me know.Kireji Haiku 21:16, 17 December 2010 (UTC)
!!llGetLinkNumber() returns 1 for multiprim objects or 0 for single prim objects; It's logically equivalent to llGetLinkNumber() != 0 however it requires less bytecode to express (you would not be without base to berate me for perpetrating this optimization/shorthand in an example script). You shouldn't need to loop through the sides, by using ALL_SIDES it should return a list containing the glow values for every side of the prim (not a very useful feature, in most cases uses it's better to loop through the sides). We then feed that list to the list stat function to get the max. I'll see if I can log in later to test it but right now I really need to fix the LSL documentation templates (the wiki upgrade broke at least one template, which in turn broke a lot of the LSL documentation; I'm trying to both find and fix the broken templates; and I don't know the precise cause). -- Strife (talk|contribs) 21:37, 17 December 2010 (UTC)
Fixed it finally, thanks again for the ideas and the input. !!llGetLinkNumber() doesn't seem to work, I know exactly what you're trying to do by writing it that way, but that always returns 1. Have tested it. And your return was a bit too fast to return a result, wouldn't wait until the end. If you can simplify it even further, go ahead. That's as far as I could get.Kireji Haiku 21:12, 23 December 2010 (UTC)
Is !!llGetLinkNumber returning one for a single prim object with no avatars sitting on it? That is the only time it should return zero. A single prim object with a seated avatar should return one. As to the early exit, once we find a prim with no glow, we can exit without checking the other prims. Logically speaking, we do not need to know precisely what the minimum is, just if it is less than or equal to zero. So instead of calculating the minimum we can exit as soon as we know the minimum is going to be less than or equal to zero. We know it will be less than or equal to zero if we have a value that is zero or less. The code should exit as soon as it knows the answer so as to not waste simulator resources (after all we need to encourage responsible coding). -- Strife (talk|contribs) 05:08, 25 December 2010 (UTC)
Personally, I would prefer that examples intended to educate and demonstrate functionality NOT have obfuscating optimizations in them, unless the purpose of the example is to demonstrate such. It makes it harder for non-gurus to understand what is going on in the script, thus limiting the "educational value" of the example and obviating the purpose which it was intended. That said, I do believe it is important for people to know about them as well as how/when to use them, but I also believe teaching good programming habits is also valuable. (I don't know if the script in question qualifies as such; just wanted to point this out since it came up as an ancillary issue) Talarus Luan 07:35, 15 January 2011 (UTC)

Help with template issue

Hi Strife, I'm hoping you can help to shed some light on a problem we have just discovered that has started to occur since we redployed the wiki yesterday. The symptom is that SOME pages, e.g. LlKey2Name display differently when you are not logged in versus logged in. Compare

I think that this may be happening due to issues around templates, which is why I am contacting you. However, I don't really know the cause. The strange thing is that most other LSL function pages appear to display just fine when you are logged out; so there must be something in that page causing an issue. We would greatly appreciate any help! P.S. Here is the whole list of known issues: Second Life Wiki Known Issues.

Thanks --Rand Linden 17:15, 16 December 2010 (UTC)

I think it was generated before the extensions were installed. I purged the page (?action=purge) and it now renders properly for me (though I did see it the way you described but only when i was not logged in). It's weird. -- Strife (talk|contribs) 21:22, 16 December 2010 (UTC)
Maybe the cache just needs to be invalidated? -- Strife (talk|contribs) 21:24, 16 December 2010 (UTC)
Some triangulation: |constants={{LSL Constants/PrimitiveParams|get}} does not cause trouble on a test copy of llSetLinkPrimitiveParams, |constants={{LSL Constants/PrimitiveParams|set}} triggers the bug. Off to try on simpler stuff to see if there is a consistent pattern of some kind ... --Cerise Sorbet 21:47, 16 December 2010 (UTC)
The cache is not invalidating or refreshing. Check the mod date at the bottom of [[1]] and [[2]]. They are different. If you go into the history page and look at a previous version it will displays properly because it doesn't have a cached version but if you look at the current version (even with the version number, it does not display properly). Not even action=purge can budge it. A possible explanation is that the PrimitiveParams article is causing it to time out during rebuild. The new version of the template I'm hoping to get done by new year should be more sane and less time consuming (we hope). -- Strife (talk|contribs) 22:00, 16 December 2010 (UTC)
I thought it was only cache too but more appears to be going on. llKey2Name is displaying OK with a pair of Issue templates commented out. --Cerise Sorbet 22:22, 16 December 2010 (UTC)
The time issue I was seeing was caused by me having my account report the times in GMT+5 (which is weird seeing as i'm GMT-5) -- Strife (talk|contribs) 22:31, 16 December 2010 (UTC)
I've had a thought, I think it might have something to do with how bugs are duplicated (in both Issues and Important Issues). It looks to be the difference between the Get and Set primitive Params functions (Get are too new to have any flag bugs). -- Strife (talk|contribs) 22:42, 16 December 2010 (UTC)
It's not Template:Issues that is doing it, it's something about Template:Issue. I have this terrible feeling it's a problem with how #switch is parsed. When are we getting the new parser function extension? -- Strife (talk|contribs) 22:55, 16 December 2010 (UTC)
Oh it's definitely Template:Issue. I can't access it when logged out. -- Strife (talk|contribs) 22:55, 16 December 2010 (UTC)
I've disabled the code that detects if an issue is a bug, which appears to have fixed llKey2Name. -- Strife (talk|contribs) 23:14, 16 December 2010 (UTC)
#switch is not the cause, just the trigger. Maybe it's content duplication that is the problem? -- Strife (talk|contribs) 22:28, 17 December 2010 (UTC)
Mediawiki 1.14 added a |link= option for Image: tags. This would let you skip the imagemap for most uses that don't really need coordinates. --Cerise 03:38, 18 December 2010 (UTC)
There is a god ^_^ thanks for the tip. I'll deploy it post hast. -- Strife (talk|contribs) 03:40, 18 December 2010 (UTC)
Thanks so much for tracking this down, Strife and Cerise! This move/upgrade has certainly been more problematic than we expected.... :-(
--Rand Linden 19:05, 19 December 2010 (UTC)
They always are more problematic than anticipated. I'm sorry I didn't pay more attention to it earlier, I did notice the blanking on the test wiki briefly but not the common factor (since I spend all my time logged in, the first thing I always do when I connect is log in). I spent my time looking at differences between the highlighting. Never thought to look for differences between HTTP & HTTPS. -- Strife (talk|contribs) 19:30, 19 December 2010 (UTC)

Different versions of UTF-8 libraries

Hi Strife, it seems that there are two different versions of both UTF8ToUnicodeInteger() and UnicodeIntegerToUTF8() at Combined_Library#Unicode_functions and UTF-8. Maybe those could be moved to a template - or just manually synced as you feel appropriate. --oobscure 03:17, 2 May 2011 (PDT)

There is a good point. Will do. -- Strife (talk|contribs) 09:12, 12 May 2011 (PDT)

Issues/SCR-137

Sorry for Template:Issues/SCR-137, force of habit since most of the time I'm suggesting new functions that aren't on the wiki, rather than changes to existing ones ;) --
-- Haravikk (talk|contribs) 01:43, 9 July 2011 (PDT)

No need to apologize. In my diminished capacity these days (being cut off from SL due to network restrictions for such a long time) there is little I can do besides act as editor, and theoretical scripting. So you gave me something to do. -- Strife (talk|contribs) 09:10, 9 July 2011 (PDT)

llCastRay Docs

Thanks, Strife. Your improvement to the llCastRay docs look great.

Falcon Linden 11:57, 1 September 2011 (PDT)

User Functions

Heya Strife, Could you give me a headsup how the wiki format for Mode=User LSL Functions are meant to be used like?

https://wiki.secondlife.com/wiki/Interpolation/Linear/Float

I'm not sure why I can't get rid off the "Deep Notes" section, which seems sorta empty and useless?

Nexii Malthus 11:48, 17 September 2011 (PDT)

Sure -- Strife (talk|contribs) 13:36, 18 September 2011 (PDT)

Video Documentations / Tutorials

forgot who the king of confirming stuff on this wiki is, I haven't been an editor for like a year or two if you remember me or not, but I thought I might add video documentations and tutorials on functions that could be confusing on the wikis page, so I guess the question is how should I add the videos, should I add a new category or just put it in the examples category, and if video documentation is a good idea toward you, since you are the #1 editor on this wiki haha, and I know nothing about style D: ----Uglehsig.png(talk) 19:45, 11 October 2011 (PDT)

I'm tickled that you would consult me but I really have no idea on this one. I think it's a great idea and until we get more of them to get a feel as to how they can be best incorporated into the documentation, they can be included any way you see fit. I might suggested posting the question to the script forums and mailing list (if you do, maybe post a link so I can follow along?). I can imagine putting them in See Also, Examples, Deep Notes, Helpers, Specification (maybe?), Newbie Notes, Notes. I have trouble seeing them in the Summary/Description, Caveats or Constants. Maybe float them on the right (like in PRIM_MATERIAL)? Keep up the good work. ^_^ -- Strife (talk|contribs) 12:21, 12 October 2011 (PDT)

Hi

Just caught the comment over on the blog and wanted to say hi. I haven't left, just withdrawn from the official forums. Actually I hopped over to SLU, although their scripting forums are dead as doornails, so I've been amusing myself in their PRS section. Sent in an NDA for the latest inworld beta review project, no reply yet ::shrug:: hope all is good on your end, and was pleasantly surprised you stopped by. Cheers
-- Void (talk|contribs) 07:52, 22 December 2011 (PST)

Things are going well here. beta? do they have a page describing it anywhere? I always loved betas. I stay mostly here on the wiki, wish I could get in world more, I hate writing documentation without being able to test the functionality. -- Strife (talk|contribs) 23:22, 22 December 2011 (PST)
P.S. You are a braver soul than I to go into PRS.

No wiki page that I'm aware of, e-mail invitation letters (which seem to have been dispersed to many forumites, and turned down by a few) describe it as pre-release feedback review, of what specifically, I couldn't say (even if I knew yet). I'll ask if they'll bounce you a late entry since you seem interested. and yeah PRS is madness, but I'm largely word-proof so the invective is more like warm glow instead of singing flame for me, something to kill break time. happy new years and all that jazz
-- Void (talk|contribs) 10:00, 26 December 2011 (PST)

Thank you for offering but It's better if you don't. I wish I could thou I have no time (nor the internet connection) for it. If they sent me an invitation I'd feel obliged to accept and then not be able to do it justice. -- Strife (talk|contribs) 21:55, 26 December 2011 (PST)

Understood, I'll try to remember to ping ya when it goes live then, could be a bit, dunno quite how far they are out on it.
-- Void (talk|contribs) 16:22, 27 December 2011 (PST)

http_response event only be triggered for the originating script or triggered for all scripts

Hello Strife,

I just read the note you added concerning llHTTPRequest. Although this is of course a sane behavior, I was a bit surprised when I read it because I knew it wasn't the case before, I also have some script that depends on the old behavior and I didn't received any complaints concerning them. So, I've just checked and I can confirm that, at least on my home sim which use the main server version, the event is still triggered on all scripts of the object which made the request.

By pure curiosity, I wonder if you have any additional information about this change.

Many thanks, Elena 11:45, 11 February 2012 (PST)

I have no information on this unfortunately. My edit was a rewrite of the previous edit so that everything would read more clearly. Sounds like both edits should be reverted. -- Strife (talk|contribs) 10:45, 12 February 2012 (PST)

capturing caveats in constants pages?

I'm trying to figure out the proper way to include a caveat in the DEBUG_CHANNEL and PUBLIC_CHANNEL pages, so that it properly inserts into articles referencing those two pages. The caveat is as follows

  • Messages on channel_name are throttled to a rate of <200/2sec, per region, per owner/user.
    • Once the rate is exceeded, all messages on channel_name will be dropped until the send rate is again below 200/2sec for the previous 2 sec.

not quite sure how to go about it though?
-- Void (talk|contribs) 23:27, 21 August 2012 (PDT)

I'd be inclined to work it into Template:LSL_Function/chat as well. No time now (and likely won't be able to see later, going to the eye doctor). -- Strife (talk|contribs) 08:30, 22 August 2012 (PDT)
Arrg it's a rats nest. I'll work on it later. -- Strife (talk|contribs) 08:31, 22 August 2012 (PDT)
I've put it in the template so now it's now everywhere... but still needs some tweaking. back later -- Strife (talk|contribs)

Thanks, didn't mean to give you headaches over it =( I'll take a look at how you did it so maybe next time I can sort it myself
-- Void (talk|contribs) 21:47, 22 August 2012 (PDT)

It wasn't as bad as I thought it would be, no worries. -- Strife (talk|contribs) 08:48, 23 August 2012 (PDT)

llGetTime/llResetTime

I saw you made a distinction between Mono and LSO for whether or not it's affected by dilation. However, empirical evidence doesn't seem to support this. While this may have been true in the past, it doesn't seem to be anymore. Darien Caldwell 11:08, 13 September 2012 (PDT)

That is great. :) I'll revert it. -- Strife (talk|contribs) 21:20, 13 September 2012 (PDT)

Another world, another wiki

I don't suppose you have any tips for a budding documentor? I'm just learning mediawiki, and started function documentation over at Cloud Party (I didn't create the templates) http://wiki.cloudpartytime.com BTW, do you use avisynth, or work on wiki docs for it? Still enjoy tinkering with avisyth scripts! Phate Shepherd 16:43, 16 September 2012 (PDT)

I'm sorry it's been taking me so long to respond, I'm working on articulating the my thoughts. I haven't forgotten you. I want to do the questions justice. Watch this space for an update soon. -- Strife (talk|contribs) 20:29, 19 September 2012 (PDT)
No worries... So much to do and learn here! Thanks!Phate Shepherd 22:06, 21 September 2012 (PDT)
I had a partial response all ready written and then my computer crashed. Here is a reconstruction:
  1. Find some documentation you really like, and copy it's good features. Find some bad documentation and figure out what you don't like.
  2. Write a mission statement for you wiki based documentation project. It should be short and concise. Then write a longer description after it as to what it means. As a matter of course your project will attract people sooner or later who won't share your vision. Having something in writing you can beat them over the head with will help reduce the toll the drama will have upon you. I'd give you more advise along these lines but it might be too specific and never crop up (it's the subtle difference between keeping a loaded gun and keeping a loaded cross bow that shoots wooden stakes). Be sure to have a well spelled out contribution policy, specifically content must be licensed under a wiki specified license but that doesn't mean the author cannot dual license it under another license if they so choose (they just can't choose to not license it under the wiki license).
  3. Don't feel you need to do everything. You are a volunteer. You volunteer. You do it for free. You aren't obligated to do anything. It's not like they are paying you. So when you feel stressed, that it is going to hell, remember this, take a deep breath and relax, if they want to avert catastrophe they can spend money. If the catastrophe can't be averted with money then there is nothing you could do about it, so there is no reason for you to be stressed about it. It's not your problem.
    • I have many wiki projects, in various states of completion. Some have been in the works for years, that is to say, I haven't really done anything with them for a considerable amount of time.
  4. If you want something done, you will probably have to do it yourself. You won't be able to convince anyone else to do it. Needs_Example grows, it doesn't shrink.
  5. Engage your community. Ask them what they want out of the documentation. Ask them how to make it better. This will encourage them to help you. Be prepared to hold their hands and show them how to edit the documentation. This is how you cultivate contributors. This is how you cultivate a contributor community.
  6. The quality of documentation is determined by the audience. You should choose an audience to server and put that in your mission or goal statement. Serving a diverse audience is going to require negotiating some very complex tradeoffs.
    • The LSL documentation have mission and goal statements that are at odds with each other. The type of help a beginner needs is not the same as that of an expert. A beginner needs it simple, an expert needs it precise. The solution is a layout that tries to divide the problem into manageable chunks. However getting that solution realized has been difficult.
  7. If you have an issue tracker, add links in your documentation to pertinent issue in the tracker. Update them on a regular basis. If you can make it auto-update.
P.S. Those templates are cool. I've been trying to mimic some of those features for years (not impossible but I run the risk of killing the wiki).
-- Strife (talk|contribs) 21:10, 27 September 2012 (PDT)
Thanks for taking to the time to write that out... I'll try and take it to heart. As for the "Find a wiki you like...." Well, that's why I came to you ;-) Phate Shepherd 12:58, 28 September 2012 (PDT)

Hierarchics Reboot

Yeah, well, I had tested a modern slaveless version several times over. But each time I still hit significant performance issues. I had instead started using newer techniques for achieving realtime high performance animated skeletons, see: http://youtu.be/mZvV-1Ghxt0 http://youtu.be/KwFdahxZp7M Unfortunately it is hard to document the scripting process, as it means using global variables for each part in the skeleton and using batched input-process-render stages. --Nexii Malthus 08:05, 7 October 2012 (PDT)

LSL Tip

Hiya, so what about the Template:LSL Tip template? Are you gonna keep the warning text? We could use the Template:KBcaution or Template:KBtip templates instead. -- Kireji Haiku 03:27, 18 October 2012 (PDT)

I like both of those. Lets go with Template:KBcaution for now. -- Strife (talk|contribs) 22:14, 18 October 2012 (PDT)
P.S. Added bonus: those templates were internationalized already.

Any idea why embedded video (youtube or vimeo) is not showing?

Hiya Strife. Hope this finds you well :-)

On Fred_Gandt/Tuition and even Torley's pages, embedded videos are not showing up for me. Is it just me (using Chrome on Win7)?  fredgandt 00:54, 2 November 2012 (PDT)

Seems to be working for me. Even the one on my user page. It's probably something to do with chrome. -- Strife (talk|contribs) 01:58, 2 November 2012 (PDT)
Meh. I'll try clearing some cookies and stuff. Thanks for checking and confirming it's at my end.  fredgandt 02:31, 2 November 2012 (PDT)
Chrome is flagging all youtube vids embedded using <videoflash> tags as "insecure". Can someone get at the parser and set it to use https instead of http?  fredgandt
I was about to ask Torley to take a look at the issue, but found he is off doing something else. I'm assuming you can act as an admin around here. Shit! You pretty much run the place :-)
So when viewing the wiki under https, all videoflash is regarded as insecure. The issue is in the mediawiki extension. All the protocols are hard wired to http, so on a secure page, they are poop. I'd suggest (if possible) relative protocols or at least selective rewriting to allow https where available. YouTube is definitely available secure, and I think vimeo is too. Obviously hard wiring them (so to speak) as https would mean that https wiki pages would be happy and http wikipages wouldn't care one way or the other.
Why does it matter? Videos are missing if a viewer's browser blocks the content. I took the time to find it, whilst others might not. Also: insecure content on a secure site is just poor practice. fredgandt 10:32, 4 November 2012 (PST)

Request from inworld teacher

Would it be possible to encourage new users to append "better" versions at the bottom on users pages? Recently many of the pages I use for teaching classes have been "improved" which results in material which doesn't match our class notes, and in one case totally wiped out homework we give to see if students understand the concepts just taught! I am not talking about the LSL-101 pages which are in the shared userspace of the wiki. I am talking about my own user pages. I can see that we have a new enthusiast who wishes to fix everything all at once, but can I beg for discussion instead of reversions to user pages? Different people use their pages for different reasons. I am sure that many if not all of these script changes are excellent, but without an explanation to student users it's like changing a telegraph to a cellphone. It's "better," but incomprehensible.

In reviewing all my pages, I found a part where you changed things like for (i = 0; i < c; i = i + 1) to for (; i < c; ++i) which is fabulous, but without an explanation that the two are the same, most of the free scripts in SL just became incomprehensible to someone trying to teach themselves without a formal scripting background. My classes are aimed at the non-scriptor. Please when you make higher level changes on my user pages, please leave both versions and maybe explain why they are same/different? We have avid learners, but most of this wiki is like trying to read ancient Greek with a Russian translator.

I always thought in a wiki that "user" pages were allowed to the users to edit, with the "talk" or "discussion" pages being where to argue out the fine points. Maybe I'm wrong, but I would appreciate it if people would do what you do, make small changes at each edit, else append changes instead of wiping out whole scripts which match inworld classnotes, some of which date back to Eric Linden. Toady Nakamura 09:39, 4 November 2012 (PST)

I and Daemonika Nightfire had our user pages defiled too. I recommend reverting and asking Kireji to back the F**k off. But then I'm not very political.  fredgandt 09:51, 4 November 2012 (PST)
I'm thinking a conversation about the semi-sanctity of userpages is in order. It's gone further then I would have gone with it. -- Strife (talk|contribs) 10:10, 4 November 2012 (PST)
I try to not mess with code unless I'm fixing a (logical) bug in the code or a gross inefficiency. Programming style is something I view as a personal preference and I would only mess with if I were fixing something major. People are attached to their user pages and take particular interest in controlling them so I try to turn a blind eye to them.
As to the public tutorials, they are public and subject to change. Positive change is a good thing, negative change is not. The only thing I can offer is to use the permanent link button so you always get the same revision. As you say without an explanation somewhere that for (i = 0; i < c; i = i + 1) to for (; i < c; ++i) are often the same, how are people to know. This is precisely the sort of thing that needs to go in the tutorials. Or at least in the article on for.
I do recognize that most of the language of the wiki is technical. There are places (entire sections) for less technical language but they aren't documented and the project lacks a champion. History has demonstrated that while I am open to the concept of having it in the documentation, I cannot write that aspect of the documentation. Find me someone who is driven to write readable documentation and I'll bend over backwards to find space for it in the documentation (You might want to look at llSetColor) -- Strife (talk|contribs) 10:10, 4 November 2012 (PST).
P.S. Maybe we need a list of pages that are too opaque and in need of improvement.
P.S.S. Remember this is a wiki, if we agree, we can change everything. Nothing is sacred. The only limits are our imagination (and what the wiki can handle before it implodes). -- Strife (talk|contribs) 10:13, 4 November 2012 (PST)
I am inclined to defer to Wikipedia etiquette for no lesser reason than Wikipedia is the daddy of wiki's and gets it done (however anal it may be). See guidelines on ownership and (same page)common practices specific to editing userspace pages. Clearly if "the project" is the SL wiki, userspace pages would therefore feature in much the same way as they do on Wikipedia. Where tuition (especially) is concerned, scripts and examples are difficult to regard in the normal sense. Scripts written to show poor or extremely simplified methods may be valid. Large amounts of comments would also be perfectly acceptable.
More importantly; scripts on user pages here are copied and used by people inworld, and how well (or badly) they perform reflects on the writer. I (for example) state that I do my best to make sure the scripts function correctly (although I don't get inworld much anymore and there may have been significant changes that cause some of my scripts to go wronger than they used to). I can't claim to have made every effort to ensure the workingnessability of a script if someone has come along and changed it!!
Moreover; It's a matter of common courtesy. Sure we don't own the pages, but seriously?!?
If you visit a public building and another visitor comes along and pulls the rug out from under you, is that acceptable? It doesn't really matter who owns the pages. It's what they are that matters. They are predominantly used as a repository for user created content that is being given away or as examples. As Daemonika Nightfire said when discussing Kireji Haiku's edits, she doesn't want to have to learn how her scripts work if someone asks her about them.
I get emails now and then from people who want me to change features of some of my scripts for custom projects. If I came to grab a copy and found it wasn't what I wrote, but the other user though it was, I would have to either learn the new version or explain that someone else wrote it.
If someone else wrote it, why the f**k is it on my user page with a heading exclaiming that I did?!
If it's decided that user pages (other than talk pages) can be freely edited by all and sundry, then I will ask that all my pages be deleted. Sounds precious? Try again. fredgandt 10:58, 4 November 2012 (PST)

My two cents are on the topic are on my user page. -- Kireji Haiku 12:10, 5 November 2012 (PST)

Table within table?!

Hi, I wanted to put a side-by-side comparison table:

Method one: returns float within (5.0, 10.0] Method two: returns float within (5.0, 10.0]
<lsl>

default {

   state_entry()
   {
       float randomFloat = 10.0 + llFrand(-5.0);
       llSay(PUBLIC_CHANNEL, randomFloat);
   }

} </lsl>

<lsl> default {

   state_entry()
   {
       float randomFloat = 10.0 - llFrand(5.0);
       llSay(PUBLIC_CHANNEL, randomFloat);
   }

} </lsl>

into the example section on the llFrand page. As far as I understand, that would be a table within a table, yes? Is it possible, if so how? -- Kireji Haiku 10:19, 9 November 2012 (PST)

Ok, I can rip the html code off the template. Any other way with the wiki markup? -- Kireji Haiku 11:52, 9 November 2012 (PST)
To do tables within tables I think you need to escape the pipes. Or that is how we use to do it when it was called for (they may have fixed that bug in mediawiki ages ago). Use {{!}} it's a specalized template for this exact purpose. -- Strife (talk|contribs) 20:27, 19 November 2012 (PST)

Entry level information on LSL wiki pages

Hello again. I spent time over the last month looking at the "newbie Notes" as the example you provided on llSetColor. While I have the skill set to edit for this wiki at that level, I have found myself hesitating to start anymore "newbie Notes" because:

  • "Newbie" is not necessarily a nice word. I feel that people seeking entry level material should not be categorized with a pejorative.
  • The extra set of pages eg: llSetColor Main Page and llSetColor Basic Notes would create a parallel and confusing architecture.

I would like to suggest that instead of erecting a duplicate set of pages for all of the nearly 300 Linden Library functions and some dozens of events, that a section at the bottom of each function page be started for "entry level notes." After scrolling through the first page or two, any new user would rapidly find the "expert section" and the "entry level section" tucked at the bottom of the main page.

If that would be agreeable to you, I would be happy to undertake entry level editing of functions and events pages as time permits. Toady Nakamura 09:48, 7 December 2012 (PST)

I'm not exactly sure what notes are "newbie notes" (can't recall ever seeing any) but I partially agree with your apprehension about the pejorative.
I personally don't find the word anything but honest, although I can imagine some feeling it derogatory or exclusive.
Regarding "Entry level" notes: I feel that every page should start out (top to bottom) with entry level information, leading through examples to higher level notes.
I don't think a generic technical description should be then followed by notes for people who (by implication) didn't understand it, then notes for people who understood it but need more.
I'd be all in favour of pages being custom built to suit the subject, utilizing an info-box for the technical break-down, whilst the rest of the page is lane out in a less uniformed, and more uniquely useful style.
Consider the difference between e.g. llSay and llHTTPResponse. Anyone reading the wiki to learn about llSay, will almost certainly need the subject explained in simple non-technical terms, than someone reading the entry for llHTTPResponse. Both should contain all the same (relative) information, but the style and flow of how that information is presented should reflect the individual case at hand.
The difficulty in deciding to make special notes for special people is, who decides who is special?
An expert programmer in another language would need a completely different set of "newbie notes" to someone who knew jack shit about programming. The former would need the technical details about this weird language explained (such as arbitrary delays), whereas the later wouldn't know why that needs explaining (they'd more likely just accept it). They would however need to know what comma separating function arguments is all about.
What would probably work best, is something that is unlikely to be done. If every page was rewritten two more times, and supplied alongside the original, users could choose to read the "simple", "standard", or "advanced" page of each subject.
  • The "Simple" could be written as if talking to someone with little technical knowledge of programming. Lane out as a step by step tutorial.
  • The "Standard" would remain pretty much as they are now.
  • The "Advanced" could be written in a more terse tech heavy way, nailing the specifics and leaving out the fluff.
Anyway; I'm not really around so much these days, so my input isn't perhaps very suitable (but I was basically invited to comment). fredgandt 18:31, 7 December 2012 (PST)
As an aside: Newbie Notes was a compromises, we had an editor who wanted to write notes for new users, name the section after himself, and maintain strict editorial control over it. It didn't go anywhere after that.
My issue with customized layouts is that it makes finding information within the articles more difficult. Instead of jumping to the content your interested in, you have to read all of it and it's not in the same place between articles.
As you say, deciding which content goes where is difficult when you don't know where anything about your reader. A solution could be to query the user. You would go down a list of radioboxes self reporting your knowledge in a set of compatible disciplines and it would include the required prerequisites and choose the shortest route to understanding, if not attained you could tell the system to broaden it's scope and include more information from the parallel paths. It sounds like it would be really interesting to build. Not really doable with mediawiki :(
We are doomed to fail if we can't automate the problem, this solution just doesn't scale. We can't personalize the documentation enough. People are too unique. We risk bloating the documentation too much or making it too large to manage.
I don't consider it insulting but I'm not attached to the name. Can't please everyone. Maybe name it something like "The Basics"?
As to Toady Nakamura's suggestion I'm all for it. If you want dedicated sections, give me an idea as to where and I'll put them in and add the variables to the template.
The wiki creates an environment for breeding ideas. We need to foster that, it's why I'm in favor of giving Toady Nakamura the go ahead. Without new ideas coming in, all we have is stagnation. Our audience is ever changing, if we don't change we will become more and more irrelevant to our target audience. -- Strife (talk|contribs) 22:24, 7 December 2012 (PST)
I think it would be fine to put entry notes at the top, as that is the first place one would look - and newer users tend to only look at the top... on the other hand... telling new users to look at the bottom of each page for detailed information would have the additional benefit of not changing the top of page layout for users who are familiar with the pages as they are now. So I vote for bottom of page, "Expert notes" and "Basic notes" on each page. And it would be lovely to have it in the template, then I could just go around and fix each page as I get to it. And yes, Fred, great idea to start with llSay and the easy ones! I will have more time for this project starting after Christmas and would be delighted to get going on it then! Toady Nakamura 11:22, 19 December 2012 (PST)
With the expert/basic modifier, this sounds like a forking of the Notes Section, that the notes section should be retired and born anew as these two sections. I'll work on the templates tonight. -- Strife (talk|contribs) 13:00, 19 December 2012 (PST)

llHTTPResponse:

Hey Strife, your last edit on LlHTTPResponse didn't turn out as expected. The hover text doesn't show. I'd have changed it, but not sure how. -- Kireji 08:11, 9 December 2012 (PST)

It's working for me. What browser are you using? Are we talking about the hover in the description or for the wikipedia link? -- Strife (talk|contribs) 08:24, 14 December 2012 (PST)
I'm on Firefox 17.0.1 on Windows 7 x64 Ultimate. -- Kireji (talk|contribs) 08:20, 1 January 2013 (PST)
I'll take a look at it down stairs (I have the same setup down there) tomorrow if I have the time -- Strife (talk|contribs) 23:17, 1 January 2013 (PST)

IM via Wiki?

Hello Strife. Is there any private Instant Messaging facility in SL Wiki? Omei Qunhua 03:13, 27 December 2012 (PST)

Nope but you can always IM me on SL Universe or email my gmail address blindwander. -- Strife (talk|contribs) 20:42, 27 December 2012 (PST)

Caveats in page LlGetAlpha are wrong.

Hi, can you maybe correct the Caveats in https://wiki.secondlife.com/wiki/LlGetAlpha It says "If face indicates a face that does not exist the return is 0.0" which is incorrect, it always returns 1.0, see also https://jira.secondlife.com/browse/BUG-1256 I couldn't find out how to change it myself: )

I've fixed it. I'll add it to the work queue to write some documentation for the Template:LSL Function/face. -- Strife (talk|contribs) 22:39, 5 January 2013 (PST)

New version of file not showing for me...

Hiya, so I uploaded a new version of File:Lsl_syntax_for_notepad_plus_plus.png and it doesn't show on the page where I put it. What did I do wrong? -- Kireji Haiku 09:59, 6 March 2013 (PST)

Maybe it's your browser cache? The wiki likely isn't telling your browser that the image is stale. -- Strife (talk|contribs) 11:34, 11 March 2013 (PDT)
I moved the content to Github. To answer your question, the old version stayed even after clearing cache. Not sure why, though. Kireji Haiku 07:52, 2 May 2013 (PDT)

GeSHi for LSL on the wiki:

Ok, I'll try to keep the story short. I tried contacting Torley, but he is not on the wiki team anymore, then I tried contacting Jeremy who seems to have chosen to ignore the issue for more than half a year. I'm talking about the LSL syntax highlight on this wiki. I've found that this works over GeSHi and the mediawiki plugin. I contacted them there and provided a fix. Then was told I should provide the fix to GeSHi directly since it's third party software from their point of view. I provided the GeSHi team with a fix, too. Nobody really seems to be responsible for anything. So how do I get this up-to-date file wherever so that syntax highlight is up-to-date on this particular wiki rather tomorrow than next year. Kireji Haiku 07:53, 2 May 2013 (PDT)

Yeah I don't have a good answer for you, years ago I decided to just use a greasemonkey script to add the missing coloring. -- Strife (talk|contribs) 19:20, 7 May 2013 (PDT)
Ok, so...what do we do now? I've got a couple of highlighting files for LSL on this github project page, which should all be up-to-date AFAIK. Do you want to work on this, or should I? If you want me to do it, let me know what I need. Maybe a copy of that greasemonkey script? Kireji Haiku 02:32, 8 May 2013 (PDT)
It's a client side thing. http://userscripts.org/scripts/review/28162 -- Strife (talk|contribs) 21:54, 9 May 2013 (PDT)
I'll take a look and see what I can do, thanks. Kireji Haiku 00:13, 15 May 2013 (PDT)
This is what I got now. I removed the lslwiki parts, though. Could you test this?

<javascript>// ==UserScript== // @name LSL Highlighter // @namespace http://home.comcast.net/~mailerdaemon // @include http://wiki.secondlife.com/* // @include https://wiki.secondlife.com/* // @version 1 // ==/UserScript==

(function(){ var GM_addStyle = function(css){

   style = document.createElement("style");
   style.type = "text/css";
   style.innerHTML = css;
   document.getElementsByTagName('head')[0].appendChild(style);
   return style;//default GM_addStyle doesn't return the new style element

};

var search = ""; var prefixed = false;

if (($X("//meta[@name='generator' and starts-with(@content,'MediaWiki ')]"))) {

   GM_addStyle("table.diff td div {overflow:visible;} pre.code a{ text-decoration:none; }");
   GM_addStyle(".pBody { padding:0pt 0.8em 0.3em 0.5em; border:1px solid #AAAAAA; } .portlet h5 {background: transparent;}");
   prefixs = ["", "/wiki/Special:Search?search="];
   search = "//pre[@class='code' or @class='lsl']";
   if ((breadcrumbs = $X("//div[@id='contentSub']")))
   {
       if (!(title = unsafeWindow.realTitleText))
           if (title = $X("//div[@id='ReatTitleBanner']/span[@id='RealTitle']"))
               title = title.textContent;
       if (title && unsafeWindow.wgTitle)
           $Z(".//text()[contains(.,'"+unsafeWindow.wgTitle+"')]",function(r,i,p){
               r.data = r.data.replace(unsafeWindow.wgTitle, title);
           }, breadcrumbs);
   }
   GM_addStyle([
                   ".lsl a {font-weight: bold; text-decoration: none;}",
                   ".lsl .imp {font-weight: bold; color: red;}",
                   ".lsl .lsl_states {color: #801A4D;}",
                   ".lsl .lsl_events {color: #004D80;}",
                   ".lsl .lsl_builtin_functions {color: #820124;}",
                   ".lsl .lsl_builtin_constants_integer {color: #1A1A80;}",
                   ".lsl .lsl_builtin_constants_string {color: #1A4D80;}",
                   ".lsl .lsl_builtin_constants_float {color: #4D1A80;}",
                   ".lsl .lsl_builtin_constants_compound {color: #663366;}",
                   ".lsl .lsl_illegal_invalid {font-weight: bold; color: #FFFFFF; background-color: #FF0000; text-decoration: line-through;}",
                   ".lsl .lsl_illegal_deprecated {font-weight: bold; color: #FFFF00; background-color: #FF0000; text-decoration: line-through;}",
                   ".lsl .lsl_control {color: #0000CD;}",
                   ".lsl .lsl_types {color: #003300;}",
                   ".lsl .co1 {color: #CD4D26;}",
                   ".lsl .es0 {color: #CD4D26;}",
                   ".lsl .br0 {color: #66CC66;}",
                   ".lsl .st0 {color: #003300;}",
                   ".lsl .nu0 {color: #cc66cc;}",
                   ".lsl .me1 {color: #006600;}",
                   ".lsl .me2 {color: #006600;}",
                   ""].join("\n"));

} else

   return;

function Group(className, prefix, expression, captures, processor){ this.c = className; this.v = prefix; this.r = expression; this.captures = captures || 0; this.processor = processor;} Group.prototype = { toString: function(){ return "("+this.r+")"; }, };

var groups = [ //{

   new Group("nu0", -1, "0[xX][0-9a-fA-F]+|\\.[0-9]*[Ee][+-]?[0-9]*|[0-9]+[Ee][+-]?[0-9]*"),
   new Group("lsl_illegal_deprecated", 0, "ll(?:Cloud|CollisionSprite|GodLikeRezObject|Make(?:Explosion|Fountain|Smoke|Fire)|(?:Stop)?PointAt|(?:(?:Refresh|Set)Prim)URL|(?:Take|Release)Camera|RemoteDataSetRegion|RemoteLoadScript|SetInventoryPermMask|SetObjectPermMask|Sound(?:Preload)?|XorBase64Strings)|AGENT|ATTACH_[LR]PEC|CHARACTER_MAX_ANGULAR_(?:ACCEL|SPEED)|OBJECT_ATTACHMENT_(?:GEOMETRY_BYTES|SURFACE_AREA)|DATA_RATING|LAND_(?:LARGE|MEDIUM|SMALL)_BRUSH|PERMISSION_(?:CHANGE_(?:JOINTS|PERMISSIONS)|RELEASE_OWNERSHIP|REMAP_CONTROLS)|PRIM_(?:CAST_SHADOWS|MATERIAL_LIGHT|PHYSICS_MATERIAL|TYPE_LEGACY)|PSYS_SRC_(?:(?:INNER|OUTER)ANGLE|OBJ_REL_MASK)|VEHICLE_FLAG_NO_FLY_UP"),
   new Group("lsl_illegal_invalid", 0, "event|print"),
   new Group("lsl_states", 0, "(?:state)\\s+\\w+|default"),
   new Group("lsl_control", 0, "@|do|else(?: if)?|for|if|jump|return|while"),
   new Group("lsl_types", 0, "float|integer|key|list|quaternion|rotation|string|vector"),
   new Group("lsl_events", 0, "(?:state_(?:entry|exit)|touch(?:_(?:start|end))?|(?:land_)?collision(?:_(?:start|end))?|timer|listen|(?:no_)?sensor|control|(?:not_)?at_(?:rot_)?target|money|email|run_time_permissions|changed|attach|dataserver|moving_(?:start|end)|link_message|(?:on|object)_rez|remote_data|http_re(?:sponse|quest)|path_update|transaction_result)"),
   new Group("lsl_builtin_constants_integer", 1, "FALSE|TRUE|(?:JSON_APPEND|STATUS_(?:PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(?:_OBJECT)?|(?:DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(?:FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(?:_(?:BY_(?:LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(?:PARCEL(?:_OWNER)?|REGION)))?|CAMERA_(?:PITCH|DISTANCE|BEHINDNESS_(?:ANGLE|LAG)|(?:FOCUS|POSITION)(?:_(?:THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(?:ROOT|SET|ALL_(?:OTHERS|CHILDREN)|THIS)|ACTIVE|PASSIVE|SCRIPTED|CONTROL_(?:FWD|BACK|(?:ROT_)?(?:LEFT|RIGHT)|UP|DOWN|(?:ML_)?LBUTTON)|PERMISSION_(?:RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(?:CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(?:TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(?:INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(?:_START)?|TELEPORT|MEDIA)|OBJECT_(?:(?:PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_ON_REZ|NAME|DESC|POS|PRIM_EQUIVALENCE|RETURN_(?:PARCEL(?:_OWNER)?|REGION)|ROO?T|VELOCITY|OWNER|GROUP|CREATOR|ATTACHED_POINT|RENDER_WEIGHT|PATHFINDING_TYPE|(?:RUNNING|TOTAL)_SCRIPT_COUNT|SCRIPT_(?:MEMORY|TIME))|TYPE_(?:INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(?:DEBUG|PUBLIC)_CHANNEL|ATTACH_(?:AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](?:SHOULDER|HAND|FOOT|EAR|EYE|[UL](?:ARM|LEG)|HIP)|(?:LEFT|RIGHT)_PEC|HUD_(?:CENTER_[12]|TOP_(?:RIGHT|CENTER|LEFT)|BOTTOM(?:_(?:RIGHT|LEFT))?))|LAND_(?:LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(?:ONLINE|NAME|BORN|SIM_(?:POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(?:ON_FILE|USED)|REMOTE_DATA_(?:CHANNEL|REQUEST|REPLY)|PSYS_(?:PART_(?:BF_(?:ZERO|ONE(?:_MINUS_(?:DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(?:START|END)_(?:COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(?:RIBBON_|WIND|INTERP_(?:COLOR|SCALE)|BOUNCE|FOLLOW_(?:SRC|VELOCITY)|TARGET_(?:POS|LINEAR)|EMISSIVE)_MASK)|SRC_(?:MAX_AGE|PATTERN|ANGLE_(?:BEGIN|END)|BURST_(?:RATE|PART_COUNT|RADIUS|SPEED_(?:MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(?:DROP|EXPLODE|ANGLE(?:_CONE(?:_EMPTY)?)?)))|VEHICLE_(?:REFERENCE_FRAME|TYPE_(?:NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(?:LINEAR|ANGULAR)_(?:FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(?:HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(?:LINEAR|ANGULAR)_(?:DEFLECTION_(?:EFFICIENCY|TIMESCALE)|MOTOR_(?:DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(?:EFFICIENCY|TIMESCALE)|BANKING_(?:EFFICIENCY|MIX|TIMESCALE)|FLAG_(?:NO_DEFLECTION_UP|LIMIT_(?:ROLL_ONLY|MOTOR_UP)|HOVER_(?:(?:WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(?:STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(?:TYPE(?:_(?:BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(?:DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(?:_(?:STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(?:NONE|LOW|MEDIUM|HIGH)|BUMP_(?:NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(?:DEFAULT|PLANAR)|SCULPT_(?:TYPE_(?:SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(?:MIRROR|INVERT))|PHYSICS(?:_(?:SHAPE_(?:CONVEX|NONE|PRIM|TYPE)))?|(?:POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(?:ALT_IMAGE_ENABLE|CONTROLS|(?:CURRENT|HOME)_URL|AUTO_(?:LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(?:WIDTH|HEIGHT)_PIXELS|WHITELIST(?:_ENABLE)?|PERMS_(?:INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(?:STANDARD|MINI)|PERM_(?:NONE|OWNER|GROUP|ANYONE)|MAX_(?:URL_LENGTH|WHITELIST_(?:SIZE|COUNT)|(?:WIDTH|HEIGHT)_PIXELS)))|MASK_(?:BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(?:TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(?:MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(?:ALLOW_(?:FLY|(?:GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(?:GROUP_)?OBJECTS)|USE_(?:ACCESS_(?:GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(?:GROUP|ALL)_OBJECT_ENTRY)|COUNT_(?:TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(?:NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(?:MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(?:_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(?:HIDE|DEFAULT)|REGION_FLAG_(?:ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(?:COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|STRING_(?:TRIM(?:_(?:HEAD|TAIL))?)|CLICK_ACTION_(?:NONE|TOUCH|SIT|BUY|PAY|OPEN(?:_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(?:NONE|SCRIPT_MEMORY)|RC_(?:DATA_FLAGS|DETECT_PHANTOM|GET_(?:LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(?:TYPES|AGENTS|(?:NON)?PHYSICAL|LAND))|RCERR_(?:CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(?:ALLOWED_(?:AGENT|GROUP)_(?:ADD|REMOVE)|BANNED_AGENT_(?:ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(?:COMMAND|CMD_(?:PLAY|STOP|PAUSE|SET_MODE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(?:GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(?:CMD_(?:(?:SMOOTH_)?STOP|JUMP)|DESIRED_(?:TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(?:_(?:[ABCD]|NONE))?|MAX_(?:DECEL|TURN_RADIUS|(?:ACCEL|SPEED)))|PURSUIT_(?:OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(?:CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(?:EVADE_(?:HIDDEN|SPOTTED)|FAILURE_(?:DYNAMIC_PATHFINDING_DISABLED|INVALID_(?:GOAL|START)|NO_(?:NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(?:PARCEL_)?UNREACHABLE)|(?:GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(?:_(?:FAST|NONE|SLOW))?|CONTENT_TYPE_(?:ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(?:RADIUS|STATIC)|(?:PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(?:AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)"),
   new Group("lsl_builtin_constants_string", 1, "(?:EOF|JSON_(?:ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(?:BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(?:GRANTED|DENIED))"),
   new Group("lsl_builtin_constants_float", 1, "DEG_TO_RAD|PI(?:_BY_TWO)?|RAD_TO_DEG|SQRT2|TWO_PI"),
   new Group("lsl_builtin_constants_compound", 1, "ZERO_(?:ROTATION|VECTOR)|TOUCH_INVALID_(?:TEXCOORD|VECTOR)"),
   new Group("lsl_builtin_functions", 0, "(?:ll(?:ReturnObjectsBy(?:ID|Owner)|Json(?:2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(?:Mag|Norm|Dist)|Rot(?:Between|2(?:Euler|Fwd|Left|Up))|(?:Euler|Axes)2Rot|Whisper|(?:Region|Owner)?Say|Shout|Listen(?:Control|Remove)?|Sensor(?:Repeat|Remove)?|Detected(?:Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|(?:[GS]et)(?:AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(?:Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(?:Scale|Offset|Rotate)Texture|(?:Rot)?Target(?:Remove)?|(?:Stop)?MoveToTarget|Apply(?:Rotational)?Impulse|Set(?:KeyframedMotion|ContentType|RegionPos|(?:Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(?:Queueing|Radius)|Vehicle(?:Type|(?:Float|Vector|Rotation)Param)|(?:Touch|Sit)?Text|Camera(?:Eye|At)Offset|PrimitiveParams|ClickAction|Link(?:Alpha|Color|PrimitiveParams(?:Fast)?|Texture(?:Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|Get(?:ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(?:PrimitiveParams|Number(?:OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(?:Details|PermMask|PrimCount)|Parcel(?:MaxPrims|Details|Prim(?:Count|Owners))|Attached|(?:SPMax|Free|Used)Memory|Region(?:Name|TimeDilation|FPS|Corner|AgentCount)|Root(?:Position|Rotation)|UnixTime|(?:Parcel|Region)Flags|(?:Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(?:Prims|NotecardLines|Sides)|Animation(?:List)?|(?:Camera|Local)(?:Pos|Rot)|Vel|Accel|Omega|Time(?:stamp|OfDay)|(?:Object|CenterOf)?Mass|MassMKS|Energy|Owner|(?:Owner)?Key|SunDirection|Texture(?:Offset|Scale|Rot)|Inventory(?:Number|Name|Key|Type|Creator|PermMask)|Permissions(?:Key)?|StartParameter|List(?:Length|EntryType)|Date|Agent(?:Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(?:Name|State))|(?:Get|Reset|GetAndReset)Time|PlaySound(?:Slave)?|LoopSound(?:Master|Slave)?|(?:Trigger|Stop|Preload)Sound|(?:(?:Get|Delete)Sub|Insert)String|To(?:Upper|Lower)|Give(?:InventoryList|Money)|RezObject|(?:Stop)?LookAt|Sleep|CollisionFilter|(?:Take|Release)Controls|DetachFromAvatar|AttachToAvatar(?:Temp)?|InstantMessage|(?:GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(?:Length|Trim)|(?:Start|Stop)Animation|TargetOmega|RequestPermissions|(?:Create|Break)Link|BreakAllLinks|(?:Give|Remove)Inventory|Water|PassTouches|Request(?:Agent|Inventory)Data|TeleportAgent(?:Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(?:Axis|Angle)|A(?:cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(?:CSV|Integer|Json|Float|String|Key|Vector|Rot|List(?:Strided)?)|DeleteSubList|List(?:Statistics|Sort|Randomize|(?:Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(?:CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(?:Slope|Normal|Contour)|GroundRepel|(?:Set|Remove)VehicleFlags|(?:AvatarOn)?(?:Link)?SitTarget|Script(?:Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(?:Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(?:Integer|String)ToBase64|XorBase64|Log(?:10)?|Base64To(?:String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(?:Load|Release|(?:E|Une)scape)URL|ParcelMedia(?:CommandList|Query)|ModPow|MapDestination|(?:RemoveFrom|AddTo|Reset)Land(?:Pass|Ban)List|(?:Set|Clear)CameraParams|HTTP(?:Request|Response)|TextBox|DetectedTouch(?:UV|Face|Pos|(?:N|Bin)ormal|ST)|(?:MD5|SHA1|DumpList2)String|Request(?:Secure)?URL|Clear(?:Prim|Link)Media|(?:Link)?ParticleSystem|(?:Get|Request)(?:Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(?:Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))"),

]; //} const gl = groups.length; var missed = new RegExp("^(|[\\W\\w]*?\\W)("+groups.join("|")+")([\\W][\\W\\w]*|)$");

var lang = $X("//div[@id='PageLanguage']"); lang = (lang && lang.innerHTML) || "";

$Z(search, function(r,i){

   for (var a = 0; b = r.childNodes[a]; ++a)
       if (b.nodeName == "#text" && (c = missed.exec(b.nodeValue)))
       {
           var s, v, p, q;
           if ((v = c[c.length - 1]) && (v != ""))//whitespace after
               insertAfter(document.createTextNode(v), b);
           for (p=0, q = 3; p < gl; p++)
           {
               var n = groups[p];
               var y = 1 + n.captures;
               if ((v = c[q]) && (v != ""))
               {
                   if (n.v >= 0)
                   {
                       s = document.createElement("a");
                       s.href = prefixs[n.v] + v + lang;
                   }
                   else
                       s = document.createElement("span");
                   if (n.c && n.c != "")
                       s.className = n.c;
                   s.appendChild(document.createTextNode(v));
                   insertAfter(s, b);
                   if (!(v = c[1]) || (v == ""))//whitespace before
                       b.parentNode.removeChild(b);
                   else
                       b.nodeValue = c[1];
                   if (n.processor)
                       n.processor(s, c.slice(q, q + y), c[1], c[c.length - 1]);
                   break;
               }
               q += y;
           }
       }
   if ((b = r.childNodes[0]) && b.nodeName == "#text" && b.nodeValue.substring(0,7) == " \n")
       b.nodeValue = b.nodeValue.substring(7);
   if ((b = r.childNodes[r.childNodes.length - 1]) && b.nodeName == "#text" && b.nodeValue.substr(-2) == "\n ")
       b.nodeValue = b.nodeValue.substring(0, b.nodeValue.length - 2);
   if (lang)      $Z("./a[span[starts-with(@class,'kw')]]", function(ir,ii){ir.attributes.getNamedItem("href").value += lang;}, r);

});

$Z("//a[starts-with(@title, 'Ll') and starts-with(@title, text())]", function(r,i){

   var m = "l" + r.title.substring(1);
   if (r.title == r.innerHTML)
       r.innerHTML = m;
   r.title = m;

});

if (m = $X("//li[@id='n-editingdiscussion']")){

   n = document.createElement("li");
   n.id = "n-randompage";
   n.innerHTML = "<a accesskey='x' title='Load a random article [alt-shift-x]' href='/wiki/Special:Random'>Random Page</a>";
   insertAfter(n, m);

}

function $X(_xpath, node){

   var doc = (node)?(node.ownerDocument || node):(node = document);
   return doc.evaluate(_xpath, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);

} function $Z(_xpath, func, node){

   var doc = (node)?(node.ownerDocument || node):(node = document);
   var res = doc.evaluate(_xpath, node, null,  XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
   var args = Array.prototype.slice.call(arguments, 3);
   var i = 0;
   for (; i < res.snapshotLength; ++i)
       func.apply(func, [res.snapshotItem(i), i].concat(args));
   return i;

} function insertAfter(insert, after){return after.parentNode.insertBefore(insert, after.nextSibling);} function insertBefore(insert, before){return before.parentNode.insertBefore(insert, before);} function log(){

   var arg;
   switch (arguments.length) {
       case 1:
           arg = arguments[0];
           break;
       case 0:
           arg = null;
           break;
       default:
           arg = arguments;
           break;
   }
   if (typeof(unsafeWindow.console) != "undefined" && typeof(unsafeWindow.console.log) != "undefined")
       unsafeWindow.console.log(arg);
   else if (typeof(GM_log) != "undefined")
       GM_log(arg);
   return arg;

} })();</javascript>

Cheers! Kireji Haiku 11:49, 22 May 2013 (PDT)

I had to make all the sub-expressions use non-capture groups (which was how it was originally). I also made some minor tweaks that should do nothing but are for style correctness (I've learned better JS habits since I wrote that). -- Strife (talk|contribs) 14:44, 22 May 2013 (PDT)
I've added support for custom post-processing for groups and for them capture information from the expression. If we decide to merge bad numbers into a single node, that code would be a post-processor. -- Strife (talk|contribs) 00:18, 23 May 2013 (PDT)
Whatever works I'd say. Not sure why you chose purple for numbers, though. Did you test it? Where to put this now? Kireji Haiku 13:27, 23 May 2013 (PDT)
Purple because that's the color they are now and it makes highlighting look right on pages like float. I usually post these to [UserScripts.org] (which I have just done) and let people find them on their own. Sometime I'll post a forum thread about them, but I haven't done that in ages. I'm hoping that is what you meant. -- Strife (talk|contribs) 22:52, 23 May 2013 (PDT)
No, I meant are you going to upload it to the wiki here so the highlighting here is fixed. Or how does this work? Have a nice weekend Kireji Haiku 08:17, 24 May 2013 (PDT)
Oh dear, I was afraid of this at the last. It's a script for "Wikipedia logo"Greasemonkey, it's not a server script. It probably will work in Chrome as well (not tested). -- Strife (talk|contribs) 10:33, 24 May 2013 (PDT)
Ok, so this brings us back to GeSHi? How to update that? Kireji Haiku 12:19, 27 May 2013 (PDT)
The only way to do so is likely to be pestering LL. At this point I don't know who you would start with. Couldn't hurt to open a new bug on Jira, something along the lines of "LSL Syntax highlighting on the wiki needs updating" and see which linden is foolish enough to update the jira. -- Strife (talk|contribs) 19:22, 27 May 2013 (PDT)

kwdb

By the way, there's a LSL keywords database that generates output for various syntax highlighters including GeSHi here. -- Sei Lisa 09:12, 4 June 2013 (PDT)

Thanks for the info. It's not that I don't have a file, I don't know where to put it so the syntax highlighting works on this wiki. I've got a copy I'm working on myself on github.com/buildersbrewery/lsl-for-geshi. -- Kireji Haiku 09:40, 5 June 2013 (PDT)
LL has to install it in some directory on the server (they will know if they look for where the old one is), it's not something we can do. -- Strife (talk|contribs) 11:14, 5 June 2013 (PDT)
You may be interested in https://github.com/pclewis/lslint/commits/23c3fb11226249f633bed1f0b077435e58f80781/wiki_builtins.pl it's a script to walk the wiki to get functions, events and constants. -- Strife (talk|contribs) 11:14, 5 June 2013 (PDT)
Thank you. That script generates some "false positives" and lacks some constants. Currently the generator provides also lslint output, by the way. Most other collections of keywords I've evaluated are incomplete and sometimes incorrect, and I try to keep it up to date. For example, Kireji's list misses some OBJECT_* constants and has other problems. -- Sei Lisa 12:51, 7 June 2013 (PDT)
I know it lacks some constants, I don't always remember to add them to the signature section. False positives? That is surprising. Could you give me an example? -- Strife (talk|contribs) 21:23, 7 June 2013 (PDT)
I wouldn't be surprised if it comes up with a few functions that it shouldn't. -- Strife (talk|contribs) 21:48, 7 June 2013 (PDT)
Sorry, false positive, singular. CLICK_ACTION_ZOOM doesn't exist. Some constants come out duplicated, some list wrong values. Here's a diff if interested. http://pastebin.ca/2393166 -- Sei Lisa 05:23, 8 June 2013 (PDT)
That diff really helps. It suggests we have several wrong values here on the wiki and gives us a good place to start fixing things. However I don't think it's a good idea for the wiki to move away from hex notation just so that we match the source code, not all of the LSL Portal's readers know their powers of two. -- Strife (talk|contribs) 21:40, 8 June 2013 (PDT)
P.S. I consider the duplicates a bug in the script. Yes some constants appear in multiple articles signature section, it's a hack feature.
I'm not going to login to test this are you sure there is no CLICK_ACTION_ZOOM? https://bitbucket.org/lindenlab/viewer-release/src/41898042294e4c48d9fc8bbc327f0926ed6b6712/indra/lscript/lscript_compile/indra.l#cl-644 If it's not valid than you have found a bug. -- Strife (talk|contribs) 23:00, 8 June 2013 (PDT)
I'm completely sure. What do you mean about hex notation? In the database, my criterion is to write in hex the numbers that are supposed to be bitfields, as that's the closest to binary that LSL supports. Nothing to do with the source code. That generates some differences between wiki and kwdb that are not real differences, you can just ignore them. I processed the files in order to make them comparable, including removing the arg names and removing leading zeros from hex numbers, but not transforming them to a common base, thus differences in radix are expected. -- Sei Lisa 08:19, 9 June 2013 (PDT)
I just meant some integer constants had values like 0x80 or 128. I hadn't considered parameter name changes but we do use different names for the parameters (some of the original parameter names are confusing or poorly chosen). As you say not real differences. I'll file a bug about CLICK_ACTION_ZOOM, they must have forgotten to put it in the server side compiler. -- Strife (talk|contribs) 00:12, 10 June 2013 (PDT)
BUG-2827 -- Strife (talk|contribs) 01:15, 10 June 2013 (PDT)
Thanks for the link, but it's useless for mortals. -- Sei Lisa 07:49, 10 June 2013 (PDT)
Ah I forgot about that problem. It's basically a duplicate of SCR-236. -- Strife (talk|contribs) 11:25, 10 June 2013 (PDT)
I'll also start working on the real conflicts. Thanks for taking the time. -- Strife (talk|contribs) 01:21, 10 June 2013 (PDT)
I figured you meant 0xNNN but I don't understand why you said it's not a good idea to move away from hex notation, as I didn't remotely suggest that. Some constants that are in decimal in the wiki are in hex in kwdb, like some RC_* ones, and vice versa, like CONTENT_TYPE_*. There are a few where it can be debatable whether they are flags, like ESTATE_ACCESS_* (which is not specified to support multiple flags, though the header says "action flag") and PSYS_SRC_PATTERN_* of which you can't combine several, to my knowledge, so I considered they should not be regarded as flags. -- Sei Lisa 04:54, 10 June 2013 (PDT)
PSYS_SRC_PATTERN_* was probably built rather than designed (that is to say, they hadn't entirely decided what they were doing when they did it). It will require some testing but it makes sense to allow the combining of (ALLOWED_AGENT_ADD | BANNED_AGENT_REMOVE) or (ALLOWED_AGENT_REMOVE | BANNED_AGENT_ADD), LL may have laid out the constants with that in mind even if they never added support for it. Or the number correspond with internal constants the server uses, and the server combines them. -- Strife (talk|contribs) 11:25, 10 June 2013 (PDT)
What about the "other problems"? -- Kireji Haiku 10:35, 8 June 2013 (PDT)

I've updated the float constants to use the values from https://bitbucket.org/lindenlab/viewer-release/src/41898042294e4c48d9fc8bbc327f0926ed6b6712/indra/llmath/llmath.h?at=default#cl-56 -- Strife (talk|contribs) 12:09, 10 June 2013 (PDT)

KFM_CMD_SET_MODE what is it used for? PSYS_SRC_OBJ_REL_MASK is a dead constant. Used for nothing.
I can see why you would be confused, most of those where the radix differs is in the direction of more obscure.
-- Strife (talk|contribs) 13:52, 10 June 2013 (PDT)
I don't know what it's used for. I know it's defined, as it passed the constant values test. If it's unused, its status in the database should be marked as unimplemented. PSYS_SRC_OBJ_REL_MASK was already marked as such. Output modules for LSL2dfg/kwdb can choose to skip these or put them in a separate section of the generated output if they wish, based on the status field. I'm pondering whether it would make sense to define a new status, "unknown", for KFM_CMD_SET_MODE. -- Sei Lisa 15:57, 10 June 2013 (PDT)
I'll have to spend some time figuring out how I'm going to document these (and those PRIM_MEDIA_* flags I never documented because I thought LL would remove them VWR-24413). I think we need a category for useless and nearly useless constants constants. -- Strife (talk|contribs) 21:31, 10 June 2013 (PDT)
P.S. Release_Notes/Second_Life_RC_BlueSteel/13

[edit][edit][edit]

Hello strife, I recently made changes on the Lag-page, and today I noticed that the "Cache" section (which I've added) shows the [edit] link three times! Could you please help me fixing this, I have no clue what I did wrong (again) https://wiki.secondlife.com/wiki/Lag :D Thanks!

You didn't do anything wrong per se. It's a design defect of how CSS "float" works (more preciesly the defect is with the scope of "clear"). -- Strife (talk|contribs) 21:06, 14 June 2013 (PDT)
Just leaving a thank you! --MartinRJ Fayray 10:29, 15 June 2013 (PDT)

Pathfinding categories

I've found that the pathfinding categories are somewhat messed up. There's Category:Pathfinding and Category:LSL Pathfinding. llGetSimStats is only in the latter, as is the case for some CHARACTER_* constants. I think there should be a "single stop" page (category) for them. Do you agree? If so, which one do you think it should be? --Pedro Oval 12:47, 29 August 2013 (PDT)

I do in deed agree but I also don't like to break the naming tradition or trash a Linden category. But since you suggested it, we should probably do away with one of the categories. Any thoughts as to which one? -- Strife (talk|contribs) 14:37, 29 August 2013 (PDT)
The description in Category:Pathfinding reads: "Articles related to new pathfinding feature and related LSL API." Maybe the LSL API part should be moved to its own Category:LSL_Pathfinding and leave Pathfinding for articles only (and include LSL_Pathfinding as a subcategory of it). I think that makes the most sense. People who linked to Pathfinding will find the link to the LSL one. --Pedro Oval 17:03, 29 August 2013 (PDT)
Works for me. -- Strife (talk|contribs) 20:33, 29 August 2013 (PDT)
Done. Please review what I've done, I'm not too confident to have gotten it right. I used the template name {{Pathfinding LSL alpha}} to switch the template while respecting the original intention. The name has Pathfinding at the start (as opposed to LSL Pathfinding Alpha) for emphasis on Pathfinding. While on it, I also renamed Template:LSL_Constants/llWanderWIthin to the right case. --Pedro Oval 08:41, 30 August 2013 (PDT)
Good catch. -- Strife (talk|contribs) 09:50, 30 August 2013 (PDT)

Template:LSL_Header

I believe it could use a link to LSL_Alternate_Editors. Whatcha think? -- Kireji Haiku 10:16, 8 October 2013 (PDT)

See Template_talk:LSL_Header for my reply. -- Strife (talk|contribs) 14:37, 8 October 2013 (PDT)

Broken links:

On your user page in the Scite/ESL section all links to your comcast account are broken. Oh yeah and...it was C++. -- Kireji Haiku 07:43, 16 October 2013 (PDT)

yes they are. I'll look into finding a place to host them. I knew C had changed a lot since I learned it but I didn't think they added member functions. -- Strife (talk|contribs) 11:15, 16 October 2013 (PDT)
I've just updated my links and uploaded everything. I've even published the most up to date and complete lsl.api (it's an an export of kwdb). -- Strife (talk|contribs) 17:31, 16 October 2013 (PDT)

German translation of llList2Json

Hiya Strife, I just made an attempt to start translating the JSON functions to German, but this page shows me a weird error message, could you please tell me what I did wrong :P LlList2Json/de —The preceding unsigned comment was added by MartinRJ Fayray

'n Abend, ich denke ich hab den Fehler behoben, Du hattest wohl einen senkrechten Strich ganz am Anfang zu viel. And yeah, Strife... I think I fixed it, there was a pipe too many. Not sure about the fix though, so if the fix needs a fix, have a go at it, LOL. Anyhow, enjoy the weekend you two. -- Kireji Haiku 15:06, 18 October 2013 (PDT)
Oops, thanks Kireji : ) --MartinRJ Fayray 15:32, 18 October 2013 (PDT)
I'll work on updating the Template:LSL Function/de (I generally do not update the templates for other languages). My view on the entire thing has to do with knowing your audience, each language represents a group of distinct cultures, who each have different cultural norms rooted deep in history. I would not presume to force the same layout on everyone (only English speakers). Also some of the template features for example do not work for Japaense. But to get back on topic. I don't want people to feel that English is the only language. I really want the international community to come and own their part of the wiki, figure out what works and doesn't. My goal is only to provide a framework, give them something to start from. There is no reason the articles need to be literal translations, and we gain nothing by having them be so.
As to what is wrong with the template, it never got updated beyond the point where LL stopped adding functions to LSO. It assumes all functions have ids. -- Strife (talk|contribs) 20:53, 18 October 2013 (PDT)
I'm going to update the template but someone will need to go through and translate it. It hasn't been updated in 5 years so it's going to be a bumpy ride but hey you get 5 years worth of template insanity all at once instead of gradually. -- Strife (talk|contribs) 21:20, 18 October 2013 (PDT)
Thanks, that's great =) --MartinRJ Fayray 22:31, 18 October 2013 (PDT)
There are a few templates that need translating, here is what i've got so far (I'll add more as I find them): - Strife (talk|contribs) 22:46, 18 October 2013 (PDT)
Template:LSL_Bug_Icon/en -> Template:LSL_Bug_Icon/de
Template:LSL_Generic/Issues -> Template:LSL_Generic/Issues/de
Template:LSL_Generic/Caveats -> Template:LSL_Generic/Caveats/de
Discovered the header template was broken. Was just easier to port. -- Strife (talk|contribs) 23:21, 18 October 2013 (PDT)
There are likely other templates that need updating to work with the newer version of the template. Let me know if you encounter a broken template. -- Strife (talk|contribs) 23:24, 18 October 2013 (PDT)
I translated the 3 above templates, but on the article page LlList2Json/de the "Caveats" and "Jira Search" sections are still using the English template. Thanks so far, though : ) Also these headlines should also be translated: "Specification" = "Beschreibung", "Caveats" = "Anmerkungen", "Examples" = "Beispiele", "See Also" = "Siehe auch", "Deep Notes" = "Erweitert" --MartinRJ Fayray 14:48, 19 October 2013 (PDT)
That oddly had more to do with which template was being used. For whatever reason multilang wasn't working right and so you were getting the english version of the template (my new keyboard arrived, it's so nice to have a Z key again). -- Strife (talk|contribs) 20:38, 19 October 2013 (PDT)
One more thing, can you please point me to the "specifiers does not support negative indexes." template - it's being used here: https://wiki.secondlife.com/wiki/LlJsonSetValue/de - Thanks! --MartinRJ Fayray 14:36, 20 October 2013 (PDT)