User talk:Strife Onizuka

From Second Life Wiki
Jump to navigation Jump to search
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;

};

const lsl_illegal_deprecated = "ll(?:Cloud|CollisionSprite|GodLikeRezObject|Make(?:Explosion|Fountain|Smoke|Fire)|(?:Stop)?PointAt|(?:(?:Refresh|Set)Prim)URL|(?:Take|Release)Camera|RemoteDataSetRegion|RemoteLoadScript|SetInventoryPermMask|Sound(?:Preload)?|XorBase64Strings)|AGENT|DATA_RATING|LAND_(?:LARGE|MEDIUM|SMALL)_BRUSH|PERMISSION_(?:CHANGE_(?:JOINTS|PERMISSIONS)|RELEASE_OWNERSHIP|REMAP_CONTROLS)|PRIM_(?:CAST_SHADOWS|TYPE_LEGACY)|PSYS_SRC_(?:INNER|OUTER)ANGLE|VEHICLE_FLAG_NO_FLY_UP"; const lsl_illegal_invalid = "event|print"; const lsl_builtin_functions = "ll(?: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|(?:Set|Get)(?:AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(?:Desc|PermMask|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|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)|ParticleSystem|GroundRepel|(?:Set|Remove)VehicleFlags|(?:AvatarOn)?(?:Link)?SitTarget|Script(?:Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(?:Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(?:Integer|String)ToBase64|XorBase64StringsCorrect|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|LinkParticleSystem|(?:Get|Request)(?:Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(?:Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin)"; const lsl_builtin_constants_integer = "FALSE|TRUE|EOF|NULL_KEY|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_(?: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|NAME|DESC|POS|PRIM_EQUIVALENCE|ROO?T|VELOCITY|OWNER|GROUP|CREATOR|ATTACHED_POINT|PATHFINDING_TYPE|(?:RUNNING|TOTAL)_SCRIPT_COUNT|SCRIPT_(?:MEMORY|TIME))|TYPE_(?:INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|URL_REQUEST_(?:GRANTED|DENIED)|(?: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_(?:FLAGS|(?:START|END)_(?:COLOR|ALPHA|SCALE)|MAX_AGE|(?: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|OBJ_REL_MASK|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|LIGHT))?|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)|MATERIAL))?|(?: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)|CHARACTER_(?:CMD_(?:(?:SMOOTH_)?STOP|JUMP)|DESIRED_(?:TURN_)?SPEED|RADIUS|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(?:_(?:[ABCD]|NONE))?|MAX_(?:DECEL|TURN_RADIUS|(?:ANGULAR_)?(?:ACCEL|SPEED))|TURN_SPEED_MULTIPLIER)|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"; const lsl_builtin_constants_string = "TEXTURE_(?:BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|JSON_(?:APPEND|ARRAY|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)"; const lsl_builtin_constants_float = "DEG_TO_RAD|PI(?:_BY_TWO)?|RAD_TO_DEG|SQRT2|TWO_PI"; const lsl_builtin_constants_compound = "ZERO_(?:ROTATION|VECTOR)|TOUCH_INVALID_(?:TEXCOORD|VECTOR)"; const lsl_states = "(?:state)\\s+\\w+|default"; const lsl_events = "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"; const lsl_control = "@|do|else(?: if)?|for|if|jump|return|while"; const lsl_types = "float|integer|key|list|quaternion|rotation|string|vector"; var search = ""; var constfind, constreplace; 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: #000000;}",
                   ".lsl .me1 {color: #006600;}",
                   ".lsl .me2 {color: #006600;}",
                   ""].join("\n"));

} else

   return;

function Group(c,v,r){ this.c = c; this.v = v; this.r = r; } 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]*"),//last I checked this was imperfect
   new Group("lsl_illegal_deprecated", 0, lsl_illegal_deprecated),
   new Group("lsl_illegal_invalid", 0, lsl_illegal_invalid),
   new Group("lsl_states", 0, lsl_states),
   new Group("lsl_control", 0, lsl_control),
   new Group("lsl_types", 0, lsl_types),
   new Group("lsl_events", 0, lsl_events),
   new Group("lsl_builtin_constants_integer", 1, lsl_builtin_constants_integer),
   new Group("lsl_builtin_constants_string", 1, lsl_builtin_constants_string),
   new Group("lsl_builtin_constants_float", 1, lsl_builtin_constants_float),
   new Group("lsl_builtin_constants_compound", 1, lsl_builtin_constants_compound),
   new Group("lsl_builtin_functions", 0, lsl_builtin_functions),

]; 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;
               if ((v = c[gl+2]) && (v != ""))//whitespace after
                   insertAfter(document.createTextNode(v), b);
               for (p=0; p < gl; p++)
               {
                   if ((v = c[p+2]) && (v != ""))//one of the groups
                   {
                       var n = groups[p];
                       if (n.v >= 0)
                       {
                           s = document.createElement("a");
                           s.href = prefixs[n.v] + v + lang;
                       }
                       else
                           s = document.createElement("span");
                       s.className=n.c;
                       s.appendChild(document.createTextNode(v));
                       insertAfter(s, b);
                       break;
                   }
               }
               if (!(v = c[1]) || (v == ""))//whitespace before
                   b.parentNode.removeChild(b);
               else
                   b.nodeValue = c[1];
           }
       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 (constfind) $Z("./a[contains(@href, '"+constfind+"')]", function(ir,ii,ip){var t = ir.attributes.getNamedItem("href"); t.value = t.value.replace(constfind, constreplace)+lang;}, r);
       if (lang)      $Z("./a[span[starts-with(@class,'kw')]]", function(ir,ii,ip){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)