<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Virtouse+Lilienthal</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Virtouse+Lilienthal"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Virtouse_Lilienthal"/>
	<updated>2026-06-02T18:36:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=ListItemReplace&amp;diff=496723</id>
		<title>ListItemReplace</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=ListItemReplace&amp;diff=496723"/>
		<updated>2009-09-26T18:36:44Z</updated>

		<summary type="html">&lt;p&gt;Virtouse Lilienthal: Better use llOwnerSay maybe data is sensitive O.o&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}} __NOTOC__&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Function: [[list]] ListItemReplace([[list]] {{LSL Param|mylist}}, [[string]] {{LSL Param|element_old}},[[string]] {{LSL Param|element_new}} ); ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
Replaces a single occurrence of something in a list with something else that you specify. &lt;br /&gt;
&lt;br /&gt;
See also: [[List|Lists]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list ListItemReplace(list mylist,string element_old, string element_new) {&lt;br /&gt;
    integer placeinlist = llListFindList(mylist, [element_old]);&lt;br /&gt;
    if ( placeinlist != -1 ) {&lt;br /&gt;
        return llListReplaceList(mylist, [element_new], placeinlist, placeinlist);    &lt;br /&gt;
    }&lt;br /&gt;
    llOwnerSay(&amp;quot;ERROR: Element &#039;&amp;quot; + element_old + &amp;quot;&#039; not found in list [&amp;quot; + llList2CSV(mylist) + &amp;quot;]&amp;quot; );&lt;br /&gt;
    return mylist;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list myupdatedList = ListItemReplace(mylist,&amp;quot;Brown&amp;quot;,&amp;quot;Blue&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Examples|ListItemReplace}}&lt;/div&gt;</summary>
		<author><name>Virtouse Lilienthal</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=ListItemReplace&amp;diff=496713</id>
		<title>ListItemReplace</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=ListItemReplace&amp;diff=496713"/>
		<updated>2009-09-26T18:36:11Z</updated>

		<summary type="html">&lt;p&gt;Virtouse Lilienthal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}} __NOTOC__&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Function: [[list]] ListItemReplace([[list]] {{LSL Param|mylist}}, [[string]] {{LSL Param|element_old}},[[string]] {{LSL Param|element_new}} ); ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
Replaces a single occurrence of something in a list with something else that you specify. &lt;br /&gt;
&lt;br /&gt;
See also: [[List|Lists]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list ListItemReplace(list mylist,string element_old, string element_new) {&lt;br /&gt;
    integer placeinlist = llListFindList(mylist, [element_old]);&lt;br /&gt;
    if ( placeinlist != -1 ) {&lt;br /&gt;
        return llListReplaceList(mylist, [element_new], placeinlist, placeinlist);    &lt;br /&gt;
    }&lt;br /&gt;
    llSay(0, &amp;quot;ERROR: Element &#039;&amp;quot; + element_old + &amp;quot;&#039; not found in list [&amp;quot; + llList2CSV(mylist) + &amp;quot;]&amp;quot; );&lt;br /&gt;
    return mylist;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list myupdatedList = ListItemReplace(mylist,&amp;quot;Brown&amp;quot;,&amp;quot;Blue&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Examples|ListItemReplace}}&lt;/div&gt;</summary>
		<author><name>Virtouse Lilienthal</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=ListItemReplace&amp;diff=496703</id>
		<title>ListItemReplace</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=ListItemReplace&amp;diff=496703"/>
		<updated>2009-09-26T18:35:14Z</updated>

		<summary type="html">&lt;p&gt;Virtouse Lilienthal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}} __NOTOC__&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Function: [[list]] ListItemReplace([[list]] {{LSL Param|mylist}}, [[string]] {{LSL Param|element_old}},[[string]] {{LSL Param|element_new}} ); ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
Replaces a single occurrence of something in a list with something else that you specify. &lt;br /&gt;
&lt;br /&gt;
See also: [[List|Lists]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list ListItemReplace(list mylist,string element_old, string element_new) {&lt;br /&gt;
    integer placeinlist = llListFindList(mylist, [element_old]);&lt;br /&gt;
    if ( placeinlist != -1 ) {&lt;br /&gt;
        return llListReplaceList(mylist, [element_new], placeinlist, placeinlist);    &lt;br /&gt;
    }&lt;br /&gt;
    llSay(0, &amp;quot;ERROR: Element &#039;&amp;quot; + element_old + &amp;quot;&#039; not found in list&amp;quot;);&lt;br /&gt;
    return mylist;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list myupdatedList = ListItemReplace(mylist,&amp;quot;Brown&amp;quot;,&amp;quot;Blue&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Examples|ListItemReplace}}&lt;/div&gt;</summary>
		<author><name>Virtouse Lilienthal</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LLSD&amp;diff=75000</id>
		<title>Talk:LLSD</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LLSD&amp;diff=75000"/>
		<updated>2008-06-27T17:47:49Z</updated>

		<summary type="html">&lt;p&gt;Virtouse Lilienthal: lol I was blind yesterday :P&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Open Source Talk Page}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LLSD JSON-ish notation ==&lt;br /&gt;
&lt;br /&gt;
The login sequence appears to use &amp;quot;binary&amp;quot; LLSD for two of the variables, home and look_at. Unfortunately the format doesn&#039;t match up exactly with what is documented on this wiki. Sample values:&lt;br /&gt;
&lt;br /&gt;
{&#039;region_handle&#039;:[r255232, r256512], &#039;position&#039;:[r33.6, r33.71, r43.13], &#039;look_at&#039;:[r34.6, r33.71, r43.13]}&lt;br /&gt;
&lt;br /&gt;
[r0.99967899999999998428,r-0.025334599999999998787,r0]&lt;br /&gt;
&lt;br /&gt;
No size values, and the map keys are encased in single quotes. Is this normal? -- {{Unsigned|Eddy Stryker}}&lt;br /&gt;
&lt;br /&gt;
:Oh wow, notation format. Ummmmm, I never documented that, did I. LLSD started it&#039;s life as a json-like language, with a well defined serialization which is not actually documented. I&#039;ll get on that. [[User:Phoenix Linden|Phoenix Linden]] 16:10, 6 April 2007 (PDT)&lt;br /&gt;
:Documentation has been added. [[User:Phoenix Linden|Phoenix Linden]] 17:34, 12 April 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Versioning? ==&lt;br /&gt;
&lt;br /&gt;
Personally I miss a few things here, especially the versioning/compatibility. Sure you can asume that older request just have less keys in a map, and that might work well for things like statistics results. But as soon as you want to call a method, it is much better to make the version obvious. You can encode that in a key/value pair, but it is much better to have that in a fixed element for routing (you can route requests for inventories to different servers, depending on the interface version)&lt;br /&gt;
&lt;br /&gt;
I see a Version:i1 in the notation example for the teleport, which makes it clear, that this element is used already in LL. Maybe it is hard for you to make it to a llsd envelop, but I think you guys will have great use for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;llsd&amp;gt;&lt;br /&gt;
  &amp;lt;method version=&amp;quot;1&amp;quot; interface=&amp;quot;simstatistics&amp;quot; message=&amp;quot;result&amp;quot; /&amp;gt;&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or something like that.--[[User:Bernd Elswit|Bernd Elswit]] 10:27, 18 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Efficient binary support ==&lt;br /&gt;
&lt;br /&gt;
maybe a more efficient binary transport can be added, too? For example Adobe&#039;s ASCII85 allows better compression (however you need to escape less-than and ampersand and CDATA). Very efficient could be precalculated huffman tables for the most common file formats.&lt;br /&gt;
&lt;br /&gt;
Sample code at the end of the page: http://www.javaworld.com/javaworld/javatips/jw-javatip117.html&lt;br /&gt;
&lt;br /&gt;
--[[User:Bernd Elswit|Bernd Elswit]] 10:26, 18 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Any time that we need to conserve space or cpu resources, we will use zlib routines or [[LLSD#Binary_Serialization|binary serialization]]. [[User:Phoenix Linden|Phoenix Linden]] 12:41, 21 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== hexadecimal ? ==&lt;br /&gt;
&lt;br /&gt;
does the integer type allow hexadecimal values ? e.g. 0xffcc00 instead of entering 16763904 ?&lt;br /&gt;
&lt;br /&gt;
[[User:SignpostMarv Martin|SignpostMarv Martin]] 09:54, 31 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Binary map and array encoding ? ==&lt;br /&gt;
The description is not clear how the delimiters for map and array elements should be encoded.&lt;br /&gt;
See here:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
array      &#039;[&#039; + htonl(array.length()) + &#039;&#039;(&#039;&#039;child0&#039;&#039;,&#039;&#039; child1&#039;&#039;,&#039;&#039; ...&#039;&#039;)&#039;&#039; + &#039;]&#039;&lt;br /&gt;
&lt;br /&gt;
map        &#039;{&#039; + htonl(map.length()) + &#039;&#039;((&#039;&#039;key0&#039;&#039;,&#039;&#039;value0&#039;&#039;),(&#039;&#039;key1, value1&#039;&#039;),&#039;&#039; ...&#039;&#039;)&#039;&#039; + &#039;}&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
                             &lt;br /&gt;
Especially the binary encoding of the &amp;lt;pre&amp;gt;&#039;&#039;&amp;lt;/pre&amp;gt; marked values is not defined. As I am sitting at an implementation of this, I will try with the supposed reference implementation llsd.py and see what that actually does for this part.&lt;br /&gt;
--[[User:Leffard Lassard|Leffard Lassard]] 10:04, 27 March 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
From my own research it is more like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
array      &#039;[&#039; + htonl(array.length()) + child0 + child1 + &#039;]&#039;&lt;br /&gt;
&lt;br /&gt;
map        &#039;{&#039; + htonl(map.length()) + &#039;k&#039; + htonl(key0.length) + key0 + value0 + &#039;k&#039; + htonl(key1.length) + key1 + value 1 ... + &#039;}&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:Leffard Lassard|Leffard Lassard]] 11:26, 28 March 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
== XML &amp;lt;-&amp;gt; Notation? ==&lt;br /&gt;
&lt;br /&gt;
The XML format is, let&#039;s face it, not fun to read or write, for humans, in those weird cases where humans have to. Is there a serialization converter, somewhere, or should I just rig my own? --[[User:Ky Aska|Ky Aska]] 06:12, 3 June 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Virtouse Lilienthal</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LLSD&amp;diff=74885</id>
		<title>Talk:LLSD</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LLSD&amp;diff=74885"/>
		<updated>2008-06-26T22:03:51Z</updated>

		<summary type="html">&lt;p&gt;Virtouse Lilienthal: /* LLSD JSON-ish notation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Open Source Talk Page}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LLSD JSON-ish notation ==&lt;br /&gt;
&lt;br /&gt;
The login sequence appears to use &amp;quot;binary&amp;quot; LLSD for two of the variables, home and look_at. Unfortunately the format doesn&#039;t match up exactly with what is documented on this wiki. Sample values:&lt;br /&gt;
&lt;br /&gt;
{&#039;region_handle&#039;:[r255232, r256512], &#039;position&#039;:[r33.6, r33.71, r43.13], &#039;look_at&#039;:[r34.6, r33.71, r43.13]}&lt;br /&gt;
&lt;br /&gt;
[r0.99967899999999998428,r-0.025334599999999998787,r0]&lt;br /&gt;
&lt;br /&gt;
No size values, and the map keys are encased in single quotes. Is this normal? -- {{Unsigned|Eddy Stryker}}&lt;br /&gt;
&lt;br /&gt;
:Oh wow, notation format. Ummmmm, I never documented that, did I. LLSD started it&#039;s life as a json-like language, with a well defined serialization which is not actually documented. I&#039;ll get on that. [[User:Phoenix Linden|Phoenix Linden]] 16:10, 6 April 2007 (PDT)&lt;br /&gt;
:Documentation has been added. [[User:Phoenix Linden|Phoenix Linden]] 17:34, 12 April 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Something is weird. You&#039;re documenting that the LLSD/Notation format can have the following values for booleans:&lt;br /&gt;
true 	&#039;1&#039; | &#039;t&#039; | &#039;T&#039; | &#039;true&#039; | &#039;TRUE&#039; &lt;br /&gt;
false 	&#039;0&#039; | &#039;f&#039; | &#039;F&#039; | &#039;false&#039; | &#039;FALSE&#039;&lt;br /&gt;
&lt;br /&gt;
But actually you&#039;re not even handling anything but 1 and 0 yourself?&lt;br /&gt;
So, what is with the other values?&lt;br /&gt;
&lt;br /&gt;
--[[User:Virtouse Lilienthal|Virtouse Lilienthal]] 15:03, 26 June 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Versioning? ==&lt;br /&gt;
&lt;br /&gt;
Personally I miss a few things here, especially the versioning/compatibility. Sure you can asume that older request just have less keys in a map, and that might work well for things like statistics results. But as soon as you want to call a method, it is much better to make the version obvious. You can encode that in a key/value pair, but it is much better to have that in a fixed element for routing (you can route requests for inventories to different servers, depending on the interface version)&lt;br /&gt;
&lt;br /&gt;
I see a Version:i1 in the notation example for the teleport, which makes it clear, that this element is used already in LL. Maybe it is hard for you to make it to a llsd envelop, but I think you guys will have great use for it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;llsd&amp;gt;&lt;br /&gt;
  &amp;lt;method version=&amp;quot;1&amp;quot; interface=&amp;quot;simstatistics&amp;quot; message=&amp;quot;result&amp;quot; /&amp;gt;&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or something like that.--[[User:Bernd Elswit|Bernd Elswit]] 10:27, 18 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Efficient binary support ==&lt;br /&gt;
&lt;br /&gt;
maybe a more efficient binary transport can be added, too? For example Adobe&#039;s ASCII85 allows better compression (however you need to escape less-than and ampersand and CDATA). Very efficient could be precalculated huffman tables for the most common file formats.&lt;br /&gt;
&lt;br /&gt;
Sample code at the end of the page: http://www.javaworld.com/javaworld/javatips/jw-javatip117.html&lt;br /&gt;
&lt;br /&gt;
--[[User:Bernd Elswit|Bernd Elswit]] 10:26, 18 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Any time that we need to conserve space or cpu resources, we will use zlib routines or [[LLSD#Binary_Serialization|binary serialization]]. [[User:Phoenix Linden|Phoenix Linden]] 12:41, 21 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== hexadecimal ? ==&lt;br /&gt;
&lt;br /&gt;
does the integer type allow hexadecimal values ? e.g. 0xffcc00 instead of entering 16763904 ?&lt;br /&gt;
&lt;br /&gt;
[[User:SignpostMarv Martin|SignpostMarv Martin]] 09:54, 31 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Binary map and array encoding ? ==&lt;br /&gt;
The description is not clear how the delimiters for map and array elements should be encoded.&lt;br /&gt;
See here:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
array      &#039;[&#039; + htonl(array.length()) + &#039;&#039;(&#039;&#039;child0&#039;&#039;,&#039;&#039; child1&#039;&#039;,&#039;&#039; ...&#039;&#039;)&#039;&#039; + &#039;]&#039;&lt;br /&gt;
&lt;br /&gt;
map        &#039;{&#039; + htonl(map.length()) + &#039;&#039;((&#039;&#039;key0&#039;&#039;,&#039;&#039;value0&#039;&#039;),(&#039;&#039;key1, value1&#039;&#039;),&#039;&#039; ...&#039;&#039;)&#039;&#039; + &#039;}&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
                             &lt;br /&gt;
Especially the binary encoding of the &amp;lt;pre&amp;gt;&#039;&#039;&amp;lt;/pre&amp;gt; marked values is not defined. As I am sitting at an implementation of this, I will try with the supposed reference implementation llsd.py and see what that actually does for this part.&lt;br /&gt;
--[[User:Leffard Lassard|Leffard Lassard]] 10:04, 27 March 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
From my own research it is more like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
array      &#039;[&#039; + htonl(array.length()) + child0 + child1 + &#039;]&#039;&lt;br /&gt;
&lt;br /&gt;
map        &#039;{&#039; + htonl(map.length()) + &#039;k&#039; + htonl(key0.length) + key0 + value0 + &#039;k&#039; + htonl(key1.length) + key1 + value 1 ... + &#039;}&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:Leffard Lassard|Leffard Lassard]] 11:26, 28 March 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
== XML &amp;lt;-&amp;gt; Notation? ==&lt;br /&gt;
&lt;br /&gt;
The XML format is, let&#039;s face it, not fun to read or write, for humans, in those weird cases where humans have to. Is there a serialization converter, somewhere, or should I just rig my own? --[[User:Ky Aska|Ky Aska]] 06:12, 3 June 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Virtouse Lilienthal</name></author>
	</entry>
</feed>