<?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=Lillie+Yifu</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=Lillie+Yifu"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Lillie_Yifu"/>
	<updated>2026-07-26T14:51:48Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Protecting_content_in_an_open_grid&amp;diff=91528</id>
		<title>Talk:Protecting content in an open grid</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Protecting_content_in_an_open_grid&amp;diff=91528"/>
		<updated>2008-09-16T16:20:23Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Thought on DRM ==&lt;br /&gt;
&lt;br /&gt;
* Zha, I replaced your &amp;quot;&#039;&#039;legal remedies&#039;&#039;&amp;quot; by &amp;quot;&#039;&#039;other remedies&#039;&#039;&amp;quot;.  I would like to think that legal remedies are a last resort, when all other methods have been exhausted.  I know that that&#039;s not &amp;quot;the American way&amp;quot;, and that it&#039;s normal to sue people just because they frown at you the wrong way in the US, but that&#039;s not normal behaviour in the rest of the world.  &amp;quot;Other&amp;quot; probably implies or includes &amp;quot;legal&amp;quot; anyway.&lt;br /&gt;
&lt;br /&gt;
== thought on new page title ==&lt;br /&gt;
&lt;br /&gt;
all, how about moving this page to &amp;quot;Protecting content in an open grid&amp;quot;? i feel that that title would capture the topic of the discussion in a better way...&lt;br /&gt;
&lt;br /&gt;
[[User:Dr Scofield|Dr Scofield]] 04:42, 26 September 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;d vote for that new title, matches better what has been and will have to be discussed here.&lt;br /&gt;
:[[User:Boroondas Gupte|Boroondas Gupte]] 05:43, 26 September 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I support any suggestion that deletes references to &amp;quot;IP&amp;quot; where IP != Internet Protocol. ;-)&lt;br /&gt;
:And yes, that would be a good choice of title. --[[User:Morgaine Dinova|Morgaine Dinova]] 19:19, 26 September 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Some updates nearly a year later ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been thinking and talking to folks about how IP protection might work in VW interop, so I was happy to find this page.  I&#039;ve done some things to update it (fixing the tenses and all), and to spell out a few things more clearly for people who weren&#039;t present for the September 2007 discussion.  Hope this is not annoying to anyone, and of course feel free to edit my changes since it&#039;s a wiki an&#039; all.  :)&lt;br /&gt;
&lt;br /&gt;
Are there any pages yet talking about the requirements on OGP for enabling asset transfer, including license digests?  I&#039;d like to contribute to (or start, if there isn&#039;t one) a Wiki area for gathering those thoughts.  &lt;br /&gt;
&lt;br /&gt;
-- [[User:Dale Innis|Dale Innis]] 08:53, 18 July 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
What is really needed is a licensing url, which would control how the bits in the permissions field are implemented. This would include things such as the ability to make a set number of copies of a particular object, a control over what permissions an owner can grant. For example &amp;quot;You have full perms, but you can&#039;t give away full perms copies, but only no-transfer copies.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This licensing url would then be able to generate caps for specific requests. Each grid would have a default license URL, which would be the grid&#039;s own permissions systems. Trust would be determined by two things, one intrinsic trust based on agreements with the other grid, and the other grid being able to access the licensing URL. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Lillie Yifu|Lillie Yifu]] 09:20, 16 September 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Dale_Innis/Group_IM_in_OGP&amp;diff=91502</id>
		<title>User talk:Dale Innis/Group IM in OGP</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Dale_Innis/Group_IM_in_OGP&amp;diff=91502"/>
		<updated>2008-09-16T11:48:58Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: New page: Comments from Lillie:   * Strongly disagree about RD groups not existing. There are a number of use cases for IMs being RD, including scripts, since IM is an means of communication. * Ther...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Comments from Lillie:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Strongly disagree about RD groups not existing. There are a number of use cases for IMs being RD, including scripts, since IM is an means of communication.&lt;br /&gt;
* There&#039;s no reason to involve the AD in all Group IM.&lt;br /&gt;
* RDs may or may not want to expose land management to the AD, one current function of groups, and there fore possibly of group IMs.&lt;br /&gt;
* Use case, agent/object communication. Objects can currently IM agents. They should be able to IM groups that they are a member of, and should be able to receive IMs. A particular Grid may opt not to allow agent/object, object/object IMs, but it is something that many people want, and should be supportable by, the protocol and design.&lt;br /&gt;
&lt;br /&gt;
* Requirements should include that the solution corrects the current time delay problems, or at least dramatically improves time performance.&lt;br /&gt;
* Requirements should include that the solution dramatically improves the current failure rate of message sending, as well as the number of false positive error messages.&lt;br /&gt;
* Requirements should include encryption as a possibility.&lt;br /&gt;
* Requirements should include that the system be able to send arbitrary streams, including text, sound, video, or any other binary stream of data. (e.g. whiteboard e.g. midi e.g. cap)&lt;br /&gt;
* Requirements should include that group management be able to read group capabilities. (i.e. some group members can send IM, others cannot.)&lt;br /&gt;
* Requirements should include that messages be marked for delivery only to online agents, or will be delivered as soon as an agent logs in.&lt;br /&gt;
&lt;br /&gt;
[[User:Lillie Yifu|Lillie Yifu]] 04:48, 16 September 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=PyOGP_Client_Library_Development_Sandbox&amp;diff=90021</id>
		<title>PyOGP Client Library Development Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=PyOGP_Client_Library_Development_Sandbox&amp;diff=90021"/>
		<updated>2008-09-06T22:13:30Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We will first run down the general explanation and add platform specific notes later.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Agents used in testing need to be in the gridnauts group in sl.&lt;br /&gt;
&lt;br /&gt;
You need to have the following things installed:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note: subversion 1.5.x was tried, and it gave errors such as &amp;quot;unrecognized .svn/entries format&amp;quot; and &amp;quot;log not found&amp;quot;. We suggest using svn 1.4.x. Also, if you use TortoiseSVN, use the 1.4.x version as well. Finally, it seems that these steps need to be done in order, but that is not fully confirmed.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;Tr&amp;gt;&amp;lt;Td width=200&amp;gt;Component&amp;lt;td width=300&amp;gt;URL&amp;lt;td width=100&amp;gt;Linux&amp;lt;td width=100&amp;gt;Windows XP&amp;lt;td width=100&amp;gt;MacOS&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;Subversion 1.4.x&amp;lt;td&amp;gt;http://subversion.tigris.org/ &amp;lt;Td&amp;gt;Recommended&amp;lt;td&amp;gt;Recommended&amp;lt;td&amp;gt;Recommended&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;Subversion 1.5.x&amp;lt;td&amp;gt;http://subversion.tigris.org/ &amp;lt;Td&amp;gt;Failed&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;Python 2.3&amp;lt;td&amp;gt;http://python.org/download&amp;lt;td&amp;gt;Failed&amp;lt;td&amp;gt;Failed&amp;lt;td&amp;gt;Failed&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;Python 2.4&amp;lt;td&amp;gt;http://python.org/download&amp;lt;td&amp;gt;Untested&amp;lt;td&amp;gt;Untested&amp;lt;td&amp;gt;Failed&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;Python 2.5&amp;lt;td&amp;gt;http://python.org/download&amp;lt;td&amp;gt;Recommended&amp;lt;td&amp;gt;Recommended&amp;lt;td&amp;gt;Pre-installed&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;C/C++ Compiler&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;Required&amp;lt;td&amp;gt;Required&amp;lt;td&amp;gt;XCode&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Linden Stations:&lt;br /&gt;
By default have python 2.3.5 installed, which is incompatible with pyogp. Use /local/bin/python on station18 when running pyogp.&lt;br /&gt;
&lt;br /&gt;
=== Mac specific requirements ===&lt;br /&gt;
&lt;br /&gt;
* make sure you have X-Code installed.&lt;br /&gt;
* zc.Buildout on the mac requires python 2.5. This is the pre-installed version.&lt;br /&gt;
* Use the pre-installed version of python to use some of the GUI packages with the [[WingIDE]], such as wx. Do not run virtualenv if you want to use GUIs and WingIDE.&lt;br /&gt;
&lt;br /&gt;
=== Windows specific requirements ===&lt;br /&gt;
&lt;br /&gt;
=== Linux specific requirements ===&lt;br /&gt;
&lt;br /&gt;
== Installing easy_install and virtualenv ==&lt;br /&gt;
&lt;br /&gt;
In order to install Python Packages and creating a development sandbox you have to do the following:&lt;br /&gt;
&lt;br /&gt;
1. Download ez_setup.py and run it with your Python interpreter. You can find it here: http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;
&lt;br /&gt;
Eventually you have to be root to do this depending on your system (mostly non-windows). It should look like this on a unix based machine:&lt;br /&gt;
&lt;br /&gt;
 wget http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;
 sudo python ez_setup.py&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv like this:&lt;br /&gt;
&lt;br /&gt;
 easy_install virtualenv&lt;br /&gt;
&lt;br /&gt;
or if you need to be root something like this:&lt;br /&gt;
&lt;br /&gt;
 sudo easy_install virtualenv&lt;br /&gt;
&lt;br /&gt;
on windows, you may need a different path to easy_install&lt;br /&gt;
&lt;br /&gt;
 c:\Python25\Scripts\easy_install.exe virtualenv&lt;br /&gt;
&lt;br /&gt;
== Getting the buildout ==&lt;br /&gt;
&lt;br /&gt;
We use zc.buildout to automatically setup a development environment. buildout gives you the ability to install packages only locally instead of your global python installation. It&#039;s sort of a local python installation which helps you avoiding version conflicts of packages.&lt;br /&gt;
&lt;br /&gt;
1. First check out the buildout into a directory of your choice:&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.secondlife.com/svn/linden/projects/2008/pyogp/buildouts/libdev/trunk/ libdev&lt;br /&gt;
&lt;br /&gt;
If you are using svn1.5 or have otherwise problems on Mac OSX, try this buildout instead:&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.secondlife.com/svn/linden/projects/2008/pyogp/buildouts/libdev_svn15/trunk/ libdev&lt;br /&gt;
&lt;br /&gt;
It needs Python2.5 though (which is the standard Python version of Mac OSX though)&lt;br /&gt;
&lt;br /&gt;
2. Now turn this directory into a virtual python environment which is independant of your normal Python installation:&lt;br /&gt;
&lt;br /&gt;
 cd libdev&lt;br /&gt;
 virtualenv . --no-site-packages&lt;br /&gt;
&lt;br /&gt;
on windows, you may need to specify the path&lt;br /&gt;
&lt;br /&gt;
 c:\Python25\Scripts\virtualenv.exe . --no-site-packages&lt;br /&gt;
&lt;br /&gt;
3. Now run the bootstrap.py file with the newly created local Python interpreter:&lt;br /&gt;
&lt;br /&gt;
 bin/python bootstrap.py&lt;br /&gt;
&lt;br /&gt;
or on Windows:&lt;br /&gt;
&lt;br /&gt;
  Scripts\python bootstrap.py&lt;br /&gt;
&lt;br /&gt;
4. This creates a bunch of directories and the bin/buildout script (bin\buildout.exe on windows). We now run this:&lt;br /&gt;
&lt;br /&gt;
  bin/buildout -v&lt;br /&gt;
&lt;br /&gt;
or on Windows:&lt;br /&gt;
&lt;br /&gt;
  bin\buildout.exe -v&lt;br /&gt;
&lt;br /&gt;
5. The development sandbox is ready. There now is a bin/pyogp which is a python interpreter which contains all the installed packaged and the pyogp library and related projects.&lt;br /&gt;
&lt;br /&gt;
== Run the tests ==&lt;br /&gt;
&lt;br /&gt;
Run the tests by simply saying&lt;br /&gt;
&lt;br /&gt;
 bin/client_unittest&lt;br /&gt;
&lt;br /&gt;
Hopefully they all pass.&lt;br /&gt;
&lt;br /&gt;
== Using the login example ==&lt;br /&gt;
&lt;br /&gt;
To test this installation you can (at least at this stage of the project) try the following:&lt;br /&gt;
&lt;br /&gt;
  bin/login &amp;lt;firstname&amp;gt; &amp;lt;lastname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Give your Avatar name and it will ask for a password. Then it tries to login using the Linden Lab Agent Domain and placing the avatar on a different&#039;s grid region. You need to be in the gridnauts group though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The structure of the sandbox ==&lt;br /&gt;
&lt;br /&gt;
You now might wonder what all those directories are good for. To learn more about this check out the [[Pyogp/Filesystem_Structure|Filesystem Structure]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Pyogp_Client_Lib]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;br /&gt;
[[Category:Pyogp Draft]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=PyOGP_Client_Library_Development_Sandbox&amp;diff=90020</id>
		<title>PyOGP Client Library Development Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=PyOGP_Client_Library_Development_Sandbox&amp;diff=90020"/>
		<updated>2008-09-06T22:12:36Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We will first run down the general explanation and add platform specific notes later.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Agents used in testing need to be in the gridnauts group in sl.&lt;br /&gt;
&lt;br /&gt;
You need to have the following things installed:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note: subversion 1.5.x was tried, and it gave errors such as &amp;quot;unrecognized .svn/entries format&amp;quot; and &amp;quot;log not found&amp;quot;. We suggest using svn 1.4.x. Also, if you use TortoiseSVN, use the 1.4.x version as well. Finally, it seems that these steps need to be done in order, but that is not fully confirmed.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;Tr&amp;gt;&amp;lt;Td width=200&amp;gt;Component&amp;lt;td width=300&amp;gt;URL&amp;lt;td width=100&amp;gt;Linux&amp;lt;td width=100&amp;gt;Windows XP&amp;lt;td width=100&amp;gt;MacOS&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;Subversion 1.4.x&amp;lt;td&amp;gt;http://subversion.tigris.org/ &amp;lt;Td&amp;gt;Recommended&amp;lt;td&amp;gt;Recommended&amp;lt;td&amp;gt;Recommended&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;Subversion 1.5.x&amp;lt;td&amp;gt;http://subversion.tigris.org/ &amp;lt;Td&amp;gt;Failed&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;Python 2.3&amp;lt;td&amp;gt;http://python.org/download&amp;lt;td&amp;gt;Failed&amp;lt;td&amp;gt;Failed&amp;lt;td&amp;gt;Failed&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;Python 2.4&amp;lt;td&amp;gt;http://python.org/download&amp;lt;td&amp;gt;Untested&amp;lt;td&amp;gt;Untested&amp;lt;td&amp;gt;Failed&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;Python 2.5&amp;lt;td&amp;gt;http://python.org/download&amp;lt;td&amp;gt;Recommended&amp;lt;td&amp;gt;Recommended&amp;lt;td&amp;gt;Pre-installed&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;td&amp;gt;C/C++ Compiler&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;XCode&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Linden Stations:&lt;br /&gt;
By default have python 2.3.5 installed, which is incompatible with pyogp. Use /local/bin/python on station18 when running pyogp.&lt;br /&gt;
&lt;br /&gt;
=== Mac specific requirements ===&lt;br /&gt;
&lt;br /&gt;
* make sure you have X-Code installed.&lt;br /&gt;
* zc.Buildout on the mac requires python 2.5. This is the pre-installed version.&lt;br /&gt;
* Use the pre-installed version of python to use some of the GUI packages with the [[WingIDE]], such as wx. Do not run virtualenv if you want to use GUIs and WingIDE.&lt;br /&gt;
&lt;br /&gt;
=== Windows specific requirements ===&lt;br /&gt;
&lt;br /&gt;
=== Linux specific requirements ===&lt;br /&gt;
&lt;br /&gt;
== Installing easy_install and virtualenv ==&lt;br /&gt;
&lt;br /&gt;
In order to install Python Packages and creating a development sandbox you have to do the following:&lt;br /&gt;
&lt;br /&gt;
1. Download ez_setup.py and run it with your Python interpreter. You can find it here: http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;
&lt;br /&gt;
Eventually you have to be root to do this depending on your system (mostly non-windows). It should look like this on a unix based machine:&lt;br /&gt;
&lt;br /&gt;
 wget http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;
 sudo python ez_setup.py&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv like this:&lt;br /&gt;
&lt;br /&gt;
 easy_install virtualenv&lt;br /&gt;
&lt;br /&gt;
or if you need to be root something like this:&lt;br /&gt;
&lt;br /&gt;
 sudo easy_install virtualenv&lt;br /&gt;
&lt;br /&gt;
on windows, you may need a different path to easy_install&lt;br /&gt;
&lt;br /&gt;
 c:\Python25\Scripts\easy_install.exe virtualenv&lt;br /&gt;
&lt;br /&gt;
== Getting the buildout ==&lt;br /&gt;
&lt;br /&gt;
We use zc.buildout to automatically setup a development environment. buildout gives you the ability to install packages only locally instead of your global python installation. It&#039;s sort of a local python installation which helps you avoiding version conflicts of packages.&lt;br /&gt;
&lt;br /&gt;
1. First check out the buildout into a directory of your choice:&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.secondlife.com/svn/linden/projects/2008/pyogp/buildouts/libdev/trunk/ libdev&lt;br /&gt;
&lt;br /&gt;
If you are using svn1.5 or have otherwise problems on Mac OSX, try this buildout instead:&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.secondlife.com/svn/linden/projects/2008/pyogp/buildouts/libdev_svn15/trunk/ libdev&lt;br /&gt;
&lt;br /&gt;
It needs Python2.5 though (which is the standard Python version of Mac OSX though)&lt;br /&gt;
&lt;br /&gt;
2. Now turn this directory into a virtual python environment which is independant of your normal Python installation:&lt;br /&gt;
&lt;br /&gt;
 cd libdev&lt;br /&gt;
 virtualenv . --no-site-packages&lt;br /&gt;
&lt;br /&gt;
on windows, you may need to specify the path&lt;br /&gt;
&lt;br /&gt;
 c:\Python25\Scripts\virtualenv.exe . --no-site-packages&lt;br /&gt;
&lt;br /&gt;
3. Now run the bootstrap.py file with the newly created local Python interpreter:&lt;br /&gt;
&lt;br /&gt;
 bin/python bootstrap.py&lt;br /&gt;
&lt;br /&gt;
or on Windows:&lt;br /&gt;
&lt;br /&gt;
  Scripts\python bootstrap.py&lt;br /&gt;
&lt;br /&gt;
4. This creates a bunch of directories and the bin/buildout script (bin\buildout.exe on windows). We now run this:&lt;br /&gt;
&lt;br /&gt;
  bin/buildout -v&lt;br /&gt;
&lt;br /&gt;
or on Windows:&lt;br /&gt;
&lt;br /&gt;
  bin\buildout.exe -v&lt;br /&gt;
&lt;br /&gt;
5. The development sandbox is ready. There now is a bin/pyogp which is a python interpreter which contains all the installed packaged and the pyogp library and related projects.&lt;br /&gt;
&lt;br /&gt;
== Run the tests ==&lt;br /&gt;
&lt;br /&gt;
Run the tests by simply saying&lt;br /&gt;
&lt;br /&gt;
 bin/client_unittest&lt;br /&gt;
&lt;br /&gt;
Hopefully they all pass.&lt;br /&gt;
&lt;br /&gt;
== Using the login example ==&lt;br /&gt;
&lt;br /&gt;
To test this installation you can (at least at this stage of the project) try the following:&lt;br /&gt;
&lt;br /&gt;
  bin/login &amp;lt;firstname&amp;gt; &amp;lt;lastname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Give your Avatar name and it will ask for a password. Then it tries to login using the Linden Lab Agent Domain and placing the avatar on a different&#039;s grid region. You need to be in the gridnauts group though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The structure of the sandbox ==&lt;br /&gt;
&lt;br /&gt;
You now might wonder what all those directories are good for. To learn more about this check out the [[Pyogp/Filesystem_Structure|Filesystem Structure]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Pyogp_Client_Lib]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;br /&gt;
[[Category:Pyogp Draft]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=PyOGP_Client_Library_Development_Sandbox&amp;diff=90016</id>
		<title>PyOGP Client Library Development Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=PyOGP_Client_Library_Development_Sandbox&amp;diff=90016"/>
		<updated>2008-09-06T20:32:08Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Mac specific requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We will first run down the general explanation and add platform specific notes later.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Agents used in testing need to be in the gridnauts group in sl.&lt;br /&gt;
&lt;br /&gt;
You need to have the following things installed:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note: subversion 1.5.x was tried, and it gave errors such as &amp;quot;unrecognized .svn/entries format&amp;quot; and &amp;quot;log not found&amp;quot;. We suggest using svn 1.4.x. Also, if you use TortoiseSVN, use the 1.4.x version as well. Finally, it seems that these steps need to be done in order, but that is not fully confirmed.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://subversion.tigris.org/ subversion] (1.4.x is recommended right now)&lt;br /&gt;
* [http://python.org/download/ Python] (2.5 is what we use, might work with 2.4)&lt;br /&gt;
* a development environment with a C/C++ compiler&lt;br /&gt;
&lt;br /&gt;
Linden Stations:&lt;br /&gt;
By default have python 2.3.5 installed, which is incompatible with pyogp. Use /local/bin/python on station18 when running pyogp.&lt;br /&gt;
&lt;br /&gt;
=== Mac specific requirements ===&lt;br /&gt;
&lt;br /&gt;
* make sure you have X-Code installed.&lt;br /&gt;
* zc.Buildout on the mac requires python 2.5. This is the pre-installed version.&lt;br /&gt;
* Use the pre-installed version of python to use some of the GUI packages with the [[WingIDE]], such as wx. Do not run virtualenv if you want to use GUIs and WingIDE.&lt;br /&gt;
&lt;br /&gt;
=== Windows specific requirements ===&lt;br /&gt;
&lt;br /&gt;
=== Linux specific requirements ===&lt;br /&gt;
&lt;br /&gt;
== Installing easy_install and virtualenv ==&lt;br /&gt;
&lt;br /&gt;
In order to install Python Packages and creating a development sandbox you have to do the following:&lt;br /&gt;
&lt;br /&gt;
1. Download ez_setup.py and run it with your Python interpreter. You can find it here: http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;
&lt;br /&gt;
Eventually you have to be root to do this depending on your system (mostly non-windows). It should look like this on a unix based machine:&lt;br /&gt;
&lt;br /&gt;
 wget http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;
 sudo python ez_setup.py&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv like this:&lt;br /&gt;
&lt;br /&gt;
 easy_install virtualenv&lt;br /&gt;
&lt;br /&gt;
or if you need to be root something like this:&lt;br /&gt;
&lt;br /&gt;
 sudo easy_install virtualenv&lt;br /&gt;
&lt;br /&gt;
on windows, you may need a different path to easy_install&lt;br /&gt;
&lt;br /&gt;
 c:\Python25\Scripts\easy_install.exe virtualenv&lt;br /&gt;
&lt;br /&gt;
== Getting the buildout ==&lt;br /&gt;
&lt;br /&gt;
We use zc.buildout to automatically setup a development environment. buildout gives you the ability to install packages only locally instead of your global python installation. It&#039;s sort of a local python installation which helps you avoiding version conflicts of packages.&lt;br /&gt;
&lt;br /&gt;
1. First check out the buildout into a directory of your choice:&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.secondlife.com/svn/linden/projects/2008/pyogp/buildouts/libdev/trunk/ libdev&lt;br /&gt;
&lt;br /&gt;
If you are using svn1.5 or have otherwise problems on Mac OSX, try this buildout instead:&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.secondlife.com/svn/linden/projects/2008/pyogp/buildouts/libdev_svn15/trunk/ libdev&lt;br /&gt;
&lt;br /&gt;
It needs Python2.5 though (which is the standard Python version of Mac OSX though)&lt;br /&gt;
&lt;br /&gt;
2. Now turn this directory into a virtual python environment which is independant of your normal Python installation:&lt;br /&gt;
&lt;br /&gt;
 cd libdev&lt;br /&gt;
 virtualenv . --no-site-packages&lt;br /&gt;
&lt;br /&gt;
on windows, you may need to specify the path&lt;br /&gt;
&lt;br /&gt;
 c:\Python25\Scripts\virtualenv.exe . --no-site-packages&lt;br /&gt;
&lt;br /&gt;
3. Now run the bootstrap.py file with the newly created local Python interpreter:&lt;br /&gt;
&lt;br /&gt;
 bin/python bootstrap.py&lt;br /&gt;
&lt;br /&gt;
or on Windows:&lt;br /&gt;
&lt;br /&gt;
  Scripts\python bootstrap.py&lt;br /&gt;
&lt;br /&gt;
4. This creates a bunch of directories and the bin/buildout script (bin\buildout.exe on windows). We now run this:&lt;br /&gt;
&lt;br /&gt;
  bin/buildout -v&lt;br /&gt;
&lt;br /&gt;
or on Windows:&lt;br /&gt;
&lt;br /&gt;
  bin\buildout.exe -v&lt;br /&gt;
&lt;br /&gt;
5. The development sandbox is ready. There now is a bin/pyogp which is a python interpreter which contains all the installed packaged and the pyogp library and related projects.&lt;br /&gt;
&lt;br /&gt;
== Run the tests ==&lt;br /&gt;
&lt;br /&gt;
Run the tests by simply saying&lt;br /&gt;
&lt;br /&gt;
 bin/client_unittest&lt;br /&gt;
&lt;br /&gt;
Hopefully they all pass.&lt;br /&gt;
&lt;br /&gt;
== Using the login example ==&lt;br /&gt;
&lt;br /&gt;
To test this installation you can (at least at this stage of the project) try the following:&lt;br /&gt;
&lt;br /&gt;
  bin/login &amp;lt;firstname&amp;gt; &amp;lt;lastname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Give your Avatar name and it will ask for a password. Then it tries to login using the Linden Lab Agent Domain and placing the avatar on a different&#039;s grid region. You need to be in the gridnauts group though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The structure of the sandbox ==&lt;br /&gt;
&lt;br /&gt;
You now might wonder what all those directories are good for. To learn more about this check out the [[Pyogp/Filesystem_Structure|Filesystem Structure]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Pyogp_Client_Lib]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;br /&gt;
[[Category:Pyogp Draft]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=PyOGP_Client_Library_Development_Sandbox&amp;diff=90015</id>
		<title>PyOGP Client Library Development Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=PyOGP_Client_Library_Development_Sandbox&amp;diff=90015"/>
		<updated>2008-09-06T20:27:59Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Mac specific requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We will first run down the general explanation and add platform specific notes later.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Agents used in testing need to be in the gridnauts group in sl.&lt;br /&gt;
&lt;br /&gt;
You need to have the following things installed:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note: subversion 1.5.x was tried, and it gave errors such as &amp;quot;unrecognized .svn/entries format&amp;quot; and &amp;quot;log not found&amp;quot;. We suggest using svn 1.4.x. Also, if you use TortoiseSVN, use the 1.4.x version as well. Finally, it seems that these steps need to be done in order, but that is not fully confirmed.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://subversion.tigris.org/ subversion] (1.4.x is recommended right now)&lt;br /&gt;
* [http://python.org/download/ Python] (2.5 is what we use, might work with 2.4)&lt;br /&gt;
* a development environment with a C/C++ compiler&lt;br /&gt;
&lt;br /&gt;
Linden Stations:&lt;br /&gt;
By default have python 2.3.5 installed, which is incompatible with pyogp. Use /local/bin/python on station18 when running pyogp.&lt;br /&gt;
&lt;br /&gt;
=== Mac specific requirements ===&lt;br /&gt;
&lt;br /&gt;
* make sure you have X-Code installed&lt;br /&gt;
* Use the pre-installed version of python to use some of the GUI packages with the [[WingIDE]], such as wx. Do not run virtualenv if you want to use GUIs and WingIDE.&lt;br /&gt;
&lt;br /&gt;
=== Windows specific requirements ===&lt;br /&gt;
&lt;br /&gt;
=== Linux specific requirements ===&lt;br /&gt;
&lt;br /&gt;
== Installing easy_install and virtualenv ==&lt;br /&gt;
&lt;br /&gt;
In order to install Python Packages and creating a development sandbox you have to do the following:&lt;br /&gt;
&lt;br /&gt;
1. Download ez_setup.py and run it with your Python interpreter. You can find it here: http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;
&lt;br /&gt;
Eventually you have to be root to do this depending on your system (mostly non-windows). It should look like this on a unix based machine:&lt;br /&gt;
&lt;br /&gt;
 wget http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;
 sudo python ez_setup.py&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv like this:&lt;br /&gt;
&lt;br /&gt;
 easy_install virtualenv&lt;br /&gt;
&lt;br /&gt;
or if you need to be root something like this:&lt;br /&gt;
&lt;br /&gt;
 sudo easy_install virtualenv&lt;br /&gt;
&lt;br /&gt;
on windows, you may need a different path to easy_install&lt;br /&gt;
&lt;br /&gt;
 c:\Python25\Scripts\easy_install.exe virtualenv&lt;br /&gt;
&lt;br /&gt;
== Getting the buildout ==&lt;br /&gt;
&lt;br /&gt;
We use zc.buildout to automatically setup a development environment. buildout gives you the ability to install packages only locally instead of your global python installation. It&#039;s sort of a local python installation which helps you avoiding version conflicts of packages.&lt;br /&gt;
&lt;br /&gt;
1. First check out the buildout into a directory of your choice:&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.secondlife.com/svn/linden/projects/2008/pyogp/buildouts/libdev/trunk/ libdev&lt;br /&gt;
&lt;br /&gt;
If you are using svn1.5 or have otherwise problems on Mac OSX, try this buildout instead:&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.secondlife.com/svn/linden/projects/2008/pyogp/buildouts/libdev_svn15/trunk/ libdev&lt;br /&gt;
&lt;br /&gt;
It needs Python2.5 though (which is the standard Python version of Mac OSX though)&lt;br /&gt;
&lt;br /&gt;
2. Now turn this directory into a virtual python environment which is independant of your normal Python installation:&lt;br /&gt;
&lt;br /&gt;
 cd libdev&lt;br /&gt;
 virtualenv . --no-site-packages&lt;br /&gt;
&lt;br /&gt;
on windows, you may need to specify the path&lt;br /&gt;
&lt;br /&gt;
 c:\Python25\Scripts\virtualenv.exe . --no-site-packages&lt;br /&gt;
&lt;br /&gt;
3. Now run the bootstrap.py file with the newly created local Python interpreter:&lt;br /&gt;
&lt;br /&gt;
 bin/python bootstrap.py&lt;br /&gt;
&lt;br /&gt;
or on Windows:&lt;br /&gt;
&lt;br /&gt;
  Scripts\python bootstrap.py&lt;br /&gt;
&lt;br /&gt;
4. This creates a bunch of directories and the bin/buildout script (bin\buildout.exe on windows). We now run this:&lt;br /&gt;
&lt;br /&gt;
  bin/buildout -v&lt;br /&gt;
&lt;br /&gt;
or on Windows:&lt;br /&gt;
&lt;br /&gt;
  bin\buildout.exe -v&lt;br /&gt;
&lt;br /&gt;
5. The development sandbox is ready. There now is a bin/pyogp which is a python interpreter which contains all the installed packaged and the pyogp library and related projects.&lt;br /&gt;
&lt;br /&gt;
== Run the tests ==&lt;br /&gt;
&lt;br /&gt;
Run the tests by simply saying&lt;br /&gt;
&lt;br /&gt;
 bin/client_unittest&lt;br /&gt;
&lt;br /&gt;
Hopefully they all pass.&lt;br /&gt;
&lt;br /&gt;
== Using the login example ==&lt;br /&gt;
&lt;br /&gt;
To test this installation you can (at least at this stage of the project) try the following:&lt;br /&gt;
&lt;br /&gt;
  bin/login &amp;lt;firstname&amp;gt; &amp;lt;lastname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Give your Avatar name and it will ask for a password. Then it tries to login using the Linden Lab Agent Domain and placing the avatar on a different&#039;s grid region. You need to be in the gridnauts group though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The structure of the sandbox ==&lt;br /&gt;
&lt;br /&gt;
You now might wonder what all those directories are good for. To learn more about this check out the [[Pyogp/Filesystem_Structure|Filesystem Structure]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Pyogp_Client_Lib]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;br /&gt;
[[Category:Pyogp Draft]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90009</id>
		<title>Pyogp/Design Decisions</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90009"/>
		<updated>2008-09-06T20:05:49Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Which functions of ZCA are being used for pyogp? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==ZCA==&lt;br /&gt;
&lt;br /&gt;
=== What is ZCA? ===&lt;br /&gt;
&lt;br /&gt;
ZCA stands for &#039;&#039;Zope Component Architecture&#039;&#039;. It is a way of binding together the parts of a project. A link which advocates the benefits of ZCA [http://regebro.wordpress.com/2007/11/16/a-python-component-architecture can be found here]. &lt;br /&gt;
&lt;br /&gt;
=== Why A Component Architecture? ===&lt;br /&gt;
&lt;br /&gt;
Python allows for a component architecture, however, ZCA provides a means to verify that a particular component meets the interface requirments which were designed from the beginning. Crucial is that python is duck-typed, which is a way of saying that if a component meets the requirements to behave in a certain way, then it can substitute for a different class, even if it is not in the inheritence hierarchy of that different class. &amp;quot;If it walks like a duck, swims like a duck, and quacks like a duck, then it is a duck.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A component architecture is a way of describing what functions are needed to be &amp;quot;a duck&amp;quot; in a particular context, and to verify that a particular class meets them.&lt;br /&gt;
&lt;br /&gt;
One example of why this is needed is login, which already has several different cases, and will probably have more. ZCA allows each log in interface to be built without reference to the othhers, so long as it has the &amp;quot;duckness&amp;quot; of a login interface for the project generally.&lt;br /&gt;
&lt;br /&gt;
=== Is there a good explanation of the features of ZCA? ===&lt;br /&gt;
&lt;br /&gt;
While it describes more feature than are currently in use in pyogp, [http://www.muthukadan.net/docs/zca.html]&lt;br /&gt;
&lt;br /&gt;
=== Which functions of ZCA are being used for pyogp? ===&lt;br /&gt;
&lt;br /&gt;
Presently pyogp envisions using Implements and Adapts.&lt;br /&gt;
&lt;br /&gt;
Implements and Adapts are being used  because there are several places where there will be several ways of accomplishing the same goal. ZCA helps in these situations by providing a way for a program to query a database of classes, and find ones which conform to a specification.&lt;br /&gt;
&lt;br /&gt;
This is helpful because it means that regardless of what the classes are named, the top level program can find them. (See Decoupling).&lt;br /&gt;
&lt;br /&gt;
It hs helpful because it allows a developer to know what interface he must implement at least stubs for to be accepted and used.&lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
#ZCA allows decoupling. You can simply ask for any class that provides an interface, rather than directly calling that class (and therefore needing all the imports to do so). If you wanted to change, say, the class name, you would have to change all the imports and references to the name. Using ZCA, you can just change the name and keep the interface, it will do the same.&lt;br /&gt;
#No reinventing the wheel – global registry - zca allows global registration of things like utilities (singleton class that provide some functionality), event subscriber registration, etc. In order for this to happen, need to use ZCA interfaces, adapters, and utilities.&lt;br /&gt;
#Cleaner code – forces you to define interfaces, and the adapters that use those interfaces. However, this can be done outside of zca. Interfaces exist outside of zca. In fact, zca doesn’t enforce interfaces because Python is dynamically typed language. We can do this (enforce coding to interfaces and using documentation) without ZCA, but we then lose the ability to register with the global registry.&lt;br /&gt;
#ZCA needs Python 2.4 to run. This is not a problem unless older versions of Python are going to be used with Pyogp.&lt;br /&gt;
&lt;br /&gt;
===Examples:===&lt;br /&gt;
#Network layer – swapping the way the client connects to the servers&lt;br /&gt;
#*Urllib2, eventlet, mock objects&lt;br /&gt;
#Packet event handling – we can have packages of packet subscribers. When these packages are included, or used by ZCA, the packets will get handled. If we use a different package, the packets will get handled differently. Allows us to define multiple ways to handle packets. Also allows us to test packets by having the tests be a subscriber and in a package as well.&lt;br /&gt;
&lt;br /&gt;
==Buildout==&lt;br /&gt;
===Arguments===&lt;br /&gt;
#Setting up path – we can use buildout to setup our path automatically for development. Without buildout, we would have to set the path ourselves, which would be difficult because of the dependencies and the relation to the system we are on.&lt;br /&gt;
#Setting up the environment – can use buildout to automatically fetch the dependencies we rely upon (downloading eggs, getting svn projects, etc)&lt;br /&gt;
&lt;br /&gt;
[[Category:Pyogp]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90007</id>
		<title>Pyogp/Design Decisions</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90007"/>
		<updated>2008-09-06T19:55:45Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Is there a good explanation of the features of ZCA? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==ZCA==&lt;br /&gt;
&lt;br /&gt;
=== What is ZCA? ===&lt;br /&gt;
&lt;br /&gt;
ZCA stands for &#039;&#039;Zope Component Architecture&#039;&#039;. It is a way of binding together the parts of a project. A link which advocates the benefits of ZCA [http://regebro.wordpress.com/2007/11/16/a-python-component-architecture can be found here]. &lt;br /&gt;
&lt;br /&gt;
=== Why A Component Architecture? ===&lt;br /&gt;
&lt;br /&gt;
Python allows for a component architecture, however, ZCA provides a means to verify that a particular component meets the interface requirments which were designed from the beginning. Crucial is that python is duck-typed, which is a way of saying that if a component meets the requirements to behave in a certain way, then it can substitute for a different class, even if it is not in the inheritence hierarchy of that different class. &amp;quot;If it walks like a duck, swims like a duck, and quacks like a duck, then it is a duck.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A component architecture is a way of describing what functions are needed to be &amp;quot;a duck&amp;quot; in a particular context, and to verify that a particular class meets them.&lt;br /&gt;
&lt;br /&gt;
One example of why this is needed is login, which already has several different cases, and will probably have more. ZCA allows each log in interface to be built without reference to the othhers, so long as it has the &amp;quot;duckness&amp;quot; of a login interface for the project generally.&lt;br /&gt;
&lt;br /&gt;
=== Is there a good explanation of the features of ZCA? ===&lt;br /&gt;
&lt;br /&gt;
While it describes more feature than are currently in use in pyogp, [http://www.muthukadan.net/docs/zca.html]&lt;br /&gt;
&lt;br /&gt;
=== Which functions of ZCA are being used for pyogp? ===&lt;br /&gt;
&lt;br /&gt;
Presently pyogp envisions using Implements and Adapts.&lt;br /&gt;
&lt;br /&gt;
Implements and Adapts are being used  because there are several places where there will be several ways of accomplishing the same goal. ZCA helps in these situations by providing a way for a program to query a database of classes, and find ones which conform to a specification.&lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
#ZCA allows decoupling. You can simply ask for any class that provides an interface, rather than directly calling that class (and therefore needing all the imports to do so). If you wanted to change, say, the class name, you would have to change all the imports and references to the name. Using ZCA, you can just change the name and keep the interface, it will do the same.&lt;br /&gt;
#No reinventing the wheel – global registry - zca allows global registration of things like utilities (singleton class that provide some functionality), event subscriber registration, etc. In order for this to happen, need to use ZCA interfaces, adapters, and utilities.&lt;br /&gt;
#Cleaner code – forces you to define interfaces, and the adapters that use those interfaces. However, this can be done outside of zca. Interfaces exist outside of zca. In fact, zca doesn’t enforce interfaces because Python is dynamically typed language. We can do this (enforce coding to interfaces and using documentation) without ZCA, but we then lose the ability to register with the global registry.&lt;br /&gt;
#ZCA needs Python 2.4 to run. This is not a problem unless older versions of Python are going to be used with Pyogp.&lt;br /&gt;
&lt;br /&gt;
===Examples:===&lt;br /&gt;
#Network layer – swapping the way the client connects to the servers&lt;br /&gt;
#*Urllib2, eventlet, mock objects&lt;br /&gt;
#Packet event handling – we can have packages of packet subscribers. When these packages are included, or used by ZCA, the packets will get handled. If we use a different package, the packets will get handled differently. Allows us to define multiple ways to handle packets. Also allows us to test packets by having the tests be a subscriber and in a package as well.&lt;br /&gt;
&lt;br /&gt;
==Buildout==&lt;br /&gt;
===Arguments===&lt;br /&gt;
#Setting up path – we can use buildout to setup our path automatically for development. Without buildout, we would have to set the path ourselves, which would be difficult because of the dependencies and the relation to the system we are on.&lt;br /&gt;
#Setting up the environment – can use buildout to automatically fetch the dependencies we rely upon (downloading eggs, getting svn projects, etc)&lt;br /&gt;
&lt;br /&gt;
[[Category:Pyogp]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90005</id>
		<title>Pyogp/Design Decisions</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90005"/>
		<updated>2008-09-06T19:09:29Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Why A Component Architecture? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==ZCA==&lt;br /&gt;
&lt;br /&gt;
=== What is ZCA? ===&lt;br /&gt;
&lt;br /&gt;
ZCA stands for &#039;&#039;Zope Component Architecture&#039;&#039;. It is a way of binding together the parts of a project. A link which advocates the benefits of ZCA [http://regebro.wordpress.com/2007/11/16/a-python-component-architecture can be found here]. &lt;br /&gt;
&lt;br /&gt;
=== Why A Component Architecture? ===&lt;br /&gt;
&lt;br /&gt;
Python allows for a component architecture, however, ZCA provides a means to verify that a particular component meets the interface requirments which were designed from the beginning. Crucial is that python is duck-typed, which is a way of saying that if a component meets the requirements to behave in a certain way, then it can substitute for a different class, even if it is not in the inheritence hierarchy of that different class. &amp;quot;If it walks like a duck, swims like a duck, and quacks like a duck, then it is a duck.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A component architecture is a way of describing what functions are needed to be &amp;quot;a duck&amp;quot; in a particular context, and to verify that a particular class meets them.&lt;br /&gt;
&lt;br /&gt;
One example of why this is needed is login, which already has several different cases, and will probably have more. ZCA allows each log in interface to be built without reference to the othhers, so long as it has the &amp;quot;duckness&amp;quot; of a login interface for the project generally.&lt;br /&gt;
&lt;br /&gt;
=== Is there a good explanation of the features of ZCA? ===&lt;br /&gt;
&lt;br /&gt;
While it describes more feature than are currently in use in pyogp, [http://www.muthukadan.net/docs/zca.html]&lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
#ZCA allows decoupling. You can simply ask for any class that provides an interface, rather than directly calling that class (and therefore needing all the imports to do so). If you wanted to change, say, the class name, you would have to change all the imports and references to the name. Using ZCA, you can just change the name and keep the interface, it will do the same.&lt;br /&gt;
#No reinventing the wheel – global registry - zca allows global registration of things like utilities (singleton class that provide some functionality), event subscriber registration, etc. In order for this to happen, need to use ZCA interfaces, adapters, and utilities.&lt;br /&gt;
#Cleaner code – forces you to define interfaces, and the adapters that use those interfaces. However, this can be done outside of zca. Interfaces exist outside of zca. In fact, zca doesn’t enforce interfaces because Python is dynamically typed language. We can do this (enforce coding to interfaces and using documentation) without ZCA, but we then lose the ability to register with the global registry.&lt;br /&gt;
#ZCA needs Python 2.4 to run. This is not a problem unless older versions of Python are going to be used with Pyogp.&lt;br /&gt;
&lt;br /&gt;
===Examples:===&lt;br /&gt;
#Network layer – swapping the way the client connects to the servers&lt;br /&gt;
#*Urllib2, eventlet, mock objects&lt;br /&gt;
#Packet event handling – we can have packages of packet subscribers. When these packages are included, or used by ZCA, the packets will get handled. If we use a different package, the packets will get handled differently. Allows us to define multiple ways to handle packets. Also allows us to test packets by having the tests be a subscriber and in a package as well.&lt;br /&gt;
&lt;br /&gt;
==Buildout==&lt;br /&gt;
===Arguments===&lt;br /&gt;
#Setting up path – we can use buildout to setup our path automatically for development. Without buildout, we would have to set the path ourselves, which would be difficult because of the dependencies and the relation to the system we are on.&lt;br /&gt;
#Setting up the environment – can use buildout to automatically fetch the dependencies we rely upon (downloading eggs, getting svn projects, etc)&lt;br /&gt;
&lt;br /&gt;
[[Category:Pyogp]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90004</id>
		<title>Pyogp/Design Decisions</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90004"/>
		<updated>2008-09-06T19:02:04Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Why A Component Architecture? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==ZCA==&lt;br /&gt;
&lt;br /&gt;
=== What is ZCA? ===&lt;br /&gt;
&lt;br /&gt;
ZCA stands for &#039;&#039;Zope Component Architecture&#039;&#039;. It is a way of binding together the parts of a project. A link which advocates the benefits of ZCA [http://regebro.wordpress.com/2007/11/16/a-python-component-architecture can be found here]. &lt;br /&gt;
&lt;br /&gt;
=== Why A Component Architecture? ===&lt;br /&gt;
&lt;br /&gt;
Python allows for a component architecture, however, ZCA provides a means to verify that a particular component meets the interface requirments which were designed from th beginning. Crucial is that python is duck-typed, which is a way of saying that if a component meets the requirements to behave in a certain way, then it can substitute for a different class, even if it is not in the inheritence hierarchy of that different class. &amp;quot;If it walks like a duck, swims like a duck, and quacks like a duck, then it is a duck.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A component architecture is a way of describing what functions are needed to be &amp;quot;a duck&amp;quot; in a particular context, and to verify that a particular class meets them.&lt;br /&gt;
&lt;br /&gt;
One example of why this is needed is login, which already has several different cases, and will probably have more. ZCA allows each log in interface to be built without reference to the othhers, so long as it has the &amp;quot;duckness&amp;quot; of a login interface for the project generally.&lt;br /&gt;
&lt;br /&gt;
=== Is there a good explanation of the features of ZCA? ===&lt;br /&gt;
&lt;br /&gt;
While it describes more feature than are currently in use in pyogp, [http://www.muthukadan.net/docs/zca.html]&lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
#ZCA allows decoupling. You can simply ask for any class that provides an interface, rather than directly calling that class (and therefore needing all the imports to do so). If you wanted to change, say, the class name, you would have to change all the imports and references to the name. Using ZCA, you can just change the name and keep the interface, it will do the same.&lt;br /&gt;
#No reinventing the wheel – global registry - zca allows global registration of things like utilities (singleton class that provide some functionality), event subscriber registration, etc. In order for this to happen, need to use ZCA interfaces, adapters, and utilities.&lt;br /&gt;
#Cleaner code – forces you to define interfaces, and the adapters that use those interfaces. However, this can be done outside of zca. Interfaces exist outside of zca. In fact, zca doesn’t enforce interfaces because Python is dynamically typed language. We can do this (enforce coding to interfaces and using documentation) without ZCA, but we then lose the ability to register with the global registry.&lt;br /&gt;
#ZCA needs Python 2.4 to run. This is not a problem unless older versions of Python are going to be used with Pyogp.&lt;br /&gt;
&lt;br /&gt;
===Examples:===&lt;br /&gt;
#Network layer – swapping the way the client connects to the servers&lt;br /&gt;
#*Urllib2, eventlet, mock objects&lt;br /&gt;
#Packet event handling – we can have packages of packet subscribers. When these packages are included, or used by ZCA, the packets will get handled. If we use a different package, the packets will get handled differently. Allows us to define multiple ways to handle packets. Also allows us to test packets by having the tests be a subscriber and in a package as well.&lt;br /&gt;
&lt;br /&gt;
==Buildout==&lt;br /&gt;
===Arguments===&lt;br /&gt;
#Setting up path – we can use buildout to setup our path automatically for development. Without buildout, we would have to set the path ourselves, which would be difficult because of the dependencies and the relation to the system we are on.&lt;br /&gt;
#Setting up the environment – can use buildout to automatically fetch the dependencies we rely upon (downloading eggs, getting svn projects, etc)&lt;br /&gt;
&lt;br /&gt;
[[Category:Pyogp]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90003</id>
		<title>Pyogp/Design Decisions</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90003"/>
		<updated>2008-09-06T19:00:02Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Is there a good explanaiton of the features of ZCA? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==ZCA==&lt;br /&gt;
&lt;br /&gt;
=== What is ZCA? ===&lt;br /&gt;
&lt;br /&gt;
ZCA stands for &#039;&#039;Zope Component Architecture&#039;&#039;. It is a way of binding together the parts of a project. A link which advocates the benefits of ZCA [http://regebro.wordpress.com/2007/11/16/a-python-component-architecture can be found here]. &lt;br /&gt;
&lt;br /&gt;
=== Why A Component Architecture? ===&lt;br /&gt;
&lt;br /&gt;
Python allows for a component architecture, however, ZCA provides a means to verify that a particular component meets the interface requirments which were designed from th beginning. Crucial is that python is duck-typed, which is a way of saying that if a component meets the requirements to behave in a certain way, then it can substitute for a different class, even if it is not in the inheritence hierarchy of that different class. &amp;quot;If it walks like a duck, swims like a duck, and quacks like a duck, then it is a duck.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A component architecture is a way of describing what functions are needed to be &amp;quot;a duck&amp;quot; in a particular context, and to verify that a particular class meets them.&lt;br /&gt;
&lt;br /&gt;
=== Is there a good explanation of the features of ZCA? ===&lt;br /&gt;
&lt;br /&gt;
While it describes more feature than are currently in use in pyogp, [http://www.muthukadan.net/docs/zca.html]&lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
#ZCA allows decoupling. You can simply ask for any class that provides an interface, rather than directly calling that class (and therefore needing all the imports to do so). If you wanted to change, say, the class name, you would have to change all the imports and references to the name. Using ZCA, you can just change the name and keep the interface, it will do the same.&lt;br /&gt;
#No reinventing the wheel – global registry - zca allows global registration of things like utilities (singleton class that provide some functionality), event subscriber registration, etc. In order for this to happen, need to use ZCA interfaces, adapters, and utilities.&lt;br /&gt;
#Cleaner code – forces you to define interfaces, and the adapters that use those interfaces. However, this can be done outside of zca. Interfaces exist outside of zca. In fact, zca doesn’t enforce interfaces because Python is dynamically typed language. We can do this (enforce coding to interfaces and using documentation) without ZCA, but we then lose the ability to register with the global registry.&lt;br /&gt;
#ZCA needs Python 2.4 to run. This is not a problem unless older versions of Python are going to be used with Pyogp.&lt;br /&gt;
&lt;br /&gt;
===Examples:===&lt;br /&gt;
#Network layer – swapping the way the client connects to the servers&lt;br /&gt;
#*Urllib2, eventlet, mock objects&lt;br /&gt;
#Packet event handling – we can have packages of packet subscribers. When these packages are included, or used by ZCA, the packets will get handled. If we use a different package, the packets will get handled differently. Allows us to define multiple ways to handle packets. Also allows us to test packets by having the tests be a subscriber and in a package as well.&lt;br /&gt;
&lt;br /&gt;
==Buildout==&lt;br /&gt;
===Arguments===&lt;br /&gt;
#Setting up path – we can use buildout to setup our path automatically for development. Without buildout, we would have to set the path ourselves, which would be difficult because of the dependencies and the relation to the system we are on.&lt;br /&gt;
#Setting up the environment – can use buildout to automatically fetch the dependencies we rely upon (downloading eggs, getting svn projects, etc)&lt;br /&gt;
&lt;br /&gt;
[[Category:Pyogp]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90002</id>
		<title>Pyogp/Design Decisions</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Pyogp/Design_Decisions&amp;diff=90002"/>
		<updated>2008-09-06T18:59:03Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* ZCA */ addign some explanation according to AWGroupies discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==ZCA==&lt;br /&gt;
&lt;br /&gt;
=== What is ZCA? ===&lt;br /&gt;
&lt;br /&gt;
ZCA stands for &#039;&#039;Zope Component Architecture&#039;&#039;. It is a way of binding together the parts of a project. A link which advocates the benefits of ZCA [http://regebro.wordpress.com/2007/11/16/a-python-component-architecture can be found here]. &lt;br /&gt;
&lt;br /&gt;
=== Why A Component Architecture? ===&lt;br /&gt;
&lt;br /&gt;
Python allows for a component architecture, however, ZCA provides a means to verify that a particular component meets the interface requirments which were designed from th beginning. Crucial is that python is duck-typed, which is a way of saying that if a component meets the requirements to behave in a certain way, then it can substitute for a different class, even if it is not in the inheritence hierarchy of that different class. &amp;quot;If it walks like a duck, swims like a duck, and quacks like a duck, then it is a duck.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A component architecture is a way of describing what functions are needed to be &amp;quot;a duck&amp;quot; in a particular context, and to verify that a particular class meets them.&lt;br /&gt;
&lt;br /&gt;
=== Is there a good explanaiton of the features of ZCA? ===&lt;br /&gt;
&lt;br /&gt;
While it describes more feature than are currently in use in pyogp, [http://www.muthukadan.net/docs/zca.html]&lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
#ZCA allows decoupling. You can simply ask for any class that provides an interface, rather than directly calling that class (and therefore needing all the imports to do so). If you wanted to change, say, the class name, you would have to change all the imports and references to the name. Using ZCA, you can just change the name and keep the interface, it will do the same.&lt;br /&gt;
#No reinventing the wheel – global registry - zca allows global registration of things like utilities (singleton class that provide some functionality), event subscriber registration, etc. In order for this to happen, need to use ZCA interfaces, adapters, and utilities.&lt;br /&gt;
#Cleaner code – forces you to define interfaces, and the adapters that use those interfaces. However, this can be done outside of zca. Interfaces exist outside of zca. In fact, zca doesn’t enforce interfaces because Python is dynamically typed language. We can do this (enforce coding to interfaces and using documentation) without ZCA, but we then lose the ability to register with the global registry.&lt;br /&gt;
#ZCA needs Python 2.4 to run. This is not a problem unless older versions of Python are going to be used with Pyogp.&lt;br /&gt;
&lt;br /&gt;
===Examples:===&lt;br /&gt;
#Network layer – swapping the way the client connects to the servers&lt;br /&gt;
#*Urllib2, eventlet, mock objects&lt;br /&gt;
#Packet event handling – we can have packages of packet subscribers. When these packages are included, or used by ZCA, the packets will get handled. If we use a different package, the packets will get handled differently. Allows us to define multiple ways to handle packets. Also allows us to test packets by having the tests be a subscriber and in a package as well.&lt;br /&gt;
&lt;br /&gt;
==Buildout==&lt;br /&gt;
===Arguments===&lt;br /&gt;
#Setting up path – we can use buildout to setup our path automatically for development. Without buildout, we would have to set the path ourselves, which would be difficult because of the dependencies and the relation to the system we are on.&lt;br /&gt;
#Setting up the environment – can use buildout to automatically fetch the dependencies we rely upon (downloading eggs, getting svn projects, etc)&lt;br /&gt;
&lt;br /&gt;
[[Category:Pyogp]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Open_Grid_Protocol&amp;diff=87707</id>
		<title>Talk:Open Grid Protocol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Open_Grid_Protocol&amp;diff=87707"/>
		<updated>2008-08-22T16:43:11Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: Capability lifetime&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Choosing an Agent ==&lt;br /&gt;
&lt;br /&gt;
 Choosing an Agent&lt;br /&gt;
&lt;br /&gt;
 The credential presented by the viewer may be valid for more than one agent. If so, then the viewer must specify the agent it  wishes to control. If none is specified, and there are multiple possible agents, then log in will fail, and contain a list of possible agents. The viewer can then choose and reattempt login. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That looks like a security hole, because it means that a person who gets login credentials now knows something they did not prove they knew before, namely the agent list. It should not include a list of agents, instead, an identifiable agent should be considered part of the credentials necessary for login.&lt;br /&gt;
&lt;br /&gt;
[[User:Lillie Yifu|Lillie Yifu]] 09:36, 22 August 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Capability Lifetime ==&lt;br /&gt;
&lt;br /&gt;
Since cryptologically secure means the amount of time since creation to forge, break, or steal. Shouldn&#039;t all capabilities expire? Shouldn&#039;t there be a way of indicating when a capability is set to expire, so that clients of that capability can renew the lease on it? Also having capabilities with known numbers of uses is very valuable, so that clients could hand them out, confident that if they were overly broadly disseminated, the risk is limited to so many invocations, even if that number is a larger number.&lt;br /&gt;
&lt;br /&gt;
[[User:Lillie Yifu|Lillie Yifu]] 09:43, 22 August 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Open_Grid_Protocol&amp;diff=87706</id>
		<title>Talk:Open Grid Protocol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Open_Grid_Protocol&amp;diff=87706"/>
		<updated>2008-08-22T16:36:51Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: Comment on potential security problem&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Choosing an Agent ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot; Choosing an Agent&lt;br /&gt;
&lt;br /&gt;
The credential presented by the viewer may be valid for more than one agent. If so, then the viewer must specify the agent it wishes to control. If none is specified, and there are multiple possible agents, then log in will fail, and contain a list of possible agents. The viewer can then choose and reattempt login. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That looks like a security hole, because it means that a person who gets login credentials now knows something they did not prove they knew before, namely the agent list. It should not include a list of agents, instead, an identifiable agent should be considered part of the credentials necessary for login.&lt;br /&gt;
&lt;br /&gt;
[[User:Lillie Yifu|Lillie Yifu]] 09:36, 22 August 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=PyOGP_Client_Library_Development_Sandbox&amp;diff=83919</id>
		<title>PyOGP Client Library Development Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=PyOGP_Client_Library_Development_Sandbox&amp;diff=83919"/>
		<updated>2008-08-08T17:02:06Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: adding to pyogp draft category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We will first run down the general explanation and add platform specific notes later.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Agents used in testing need to be in the gridnauts group in sl.&lt;br /&gt;
&lt;br /&gt;
You need to have the following things installed:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note: subversion 1.5.x was tried, and it gave errors such as &amp;quot;unrecognized .svn/entries format&amp;quot; and &amp;quot;log not found&amp;quot;. We suggest using svn 1.4.x. Also, if you use TortoiseSVN, use the 1.4.x version as well. Finally, it seems that these steps need to be done in order, but that is not fully confirmed.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://subversion.tigris.org/ subversion] (1.4.x is recommended right now)&lt;br /&gt;
* [http://python.org/download/ Python] (2.5 is what we use, might work with 2.4)&lt;br /&gt;
* a development environment with a C/C++ compiler&lt;br /&gt;
&lt;br /&gt;
Linden Stations:&lt;br /&gt;
By default have python 2.3.5 installed, which is incompatible with pyogp. Use /local/bin/python on station18 when running pyogp.&lt;br /&gt;
&lt;br /&gt;
=== Mac specific requirements ===&lt;br /&gt;
&lt;br /&gt;
* make sure you have X-Code installed&lt;br /&gt;
&lt;br /&gt;
=== Windows specific requirements ===&lt;br /&gt;
&lt;br /&gt;
=== Linux specific requirements ===&lt;br /&gt;
&lt;br /&gt;
== Installing easy_install and virtualenv ==&lt;br /&gt;
&lt;br /&gt;
In order to install Python Packages and creating a development sandbox you have to do the following:&lt;br /&gt;
&lt;br /&gt;
1. Download ez_setup.py and run it with your Python interpreter. You can find it here: http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;
&lt;br /&gt;
Eventually you have to be root to do this depending on your system (mostly non-windows). It should look like this on a unix based machine:&lt;br /&gt;
&lt;br /&gt;
 wget http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;
 sudo python ez_setup.py&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv like this:&lt;br /&gt;
&lt;br /&gt;
 easy_install virtualenv&lt;br /&gt;
&lt;br /&gt;
or if you need to be root something like this:&lt;br /&gt;
&lt;br /&gt;
 sudo easy_install virtualenv&lt;br /&gt;
&lt;br /&gt;
on windows, you may need a different path to easy_install&lt;br /&gt;
&lt;br /&gt;
 c:\Python25\Scripts\easy_install.exe virtualenv&lt;br /&gt;
&lt;br /&gt;
== Getting the buildout ==&lt;br /&gt;
&lt;br /&gt;
We use zc.buildout to automatically setup a development environment. buildout gives you the ability to install packages only locally instead of your global python installation. It&#039;s sort of a local python installation which helps you avoiding version conflicts of packages.&lt;br /&gt;
&lt;br /&gt;
1. First check out the buildout into a directory of your choice:&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.secondlife.com/svn/linden/projects/2008/pyogp/buildouts/libdev/trunk/ libdev&lt;br /&gt;
&lt;br /&gt;
If you are using svn1.5 or have otherwise problems on Mac OSX, try this buildout instead:&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.secondlife.com/svn/linden/projects/2008/pyogp/buildouts/libdev_mac/trunk/ libdev&lt;br /&gt;
&lt;br /&gt;
It needs Python2.5 though (which is the standard Python version of Mac OSX though)&lt;br /&gt;
&lt;br /&gt;
2. Now turn this directory into a virtual python environment which is independant of your normal Python installation:&lt;br /&gt;
&lt;br /&gt;
 cd libdev&lt;br /&gt;
 virtualenv . --no-site-packages&lt;br /&gt;
&lt;br /&gt;
on windows, you may need to specify the path&lt;br /&gt;
&lt;br /&gt;
 c:\Python25\Scripts\virtualenv.exe . --no-site-packages&lt;br /&gt;
&lt;br /&gt;
3. Now run the bootstrap.py file with the newly created local Python interpreter:&lt;br /&gt;
&lt;br /&gt;
 bin/python bootstrap.py&lt;br /&gt;
&lt;br /&gt;
or on Windows:&lt;br /&gt;
&lt;br /&gt;
  Scripts\python bootstrap.py&lt;br /&gt;
&lt;br /&gt;
4. This creates a bunch of directories and the bin/buildout script (bin\buildout.exe on windows). We now run this:&lt;br /&gt;
&lt;br /&gt;
  bin/buildout -v&lt;br /&gt;
&lt;br /&gt;
or on Windows:&lt;br /&gt;
&lt;br /&gt;
  bin\buildout.exe -v&lt;br /&gt;
&lt;br /&gt;
5. The development sandbox is ready. There now is a bin/pyogp which is a python interpreter which contains all the installed packaged and the pyogp library and related projects.&lt;br /&gt;
&lt;br /&gt;
== Run the tests ==&lt;br /&gt;
&lt;br /&gt;
Run the tests by simply saying&lt;br /&gt;
&lt;br /&gt;
 bin/client_unittest&lt;br /&gt;
&lt;br /&gt;
Hopefully they all pass.&lt;br /&gt;
&lt;br /&gt;
== Using the login example ==&lt;br /&gt;
&lt;br /&gt;
To test this installation you can (at least at this stage of the project) try the following:&lt;br /&gt;
&lt;br /&gt;
  bin/login &amp;lt;firstname&amp;gt; &amp;lt;lastname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Give your Avatar name and it will ask for a password. Then it tries to login using the Linden Lab Agent Domain and placing the avatar on a different&#039;s grid region. You need to be in the gridnauts group though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The structure of the sandbox ==&lt;br /&gt;
&lt;br /&gt;
You now might wonder what all those directories are good for. To learn more about this check out the [[Pyogp/Filesystem_Structure|Filesystem Structure]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Pyogp_Client_Lib]]&lt;br /&gt;
[[Category:Pyogp_Kitchen_Sink]]&lt;br /&gt;
[[Category:Pyogp Draft]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:Pyogp_Draft&amp;diff=83904</id>
		<title>Category:Pyogp Draft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Category:Pyogp_Draft&amp;diff=83904"/>
		<updated>2008-08-08T16:49:05Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: Create category proposal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a category for [[Pyogp]] pages which are still in the process of being drafted for content. Information on these pages can change quickly, and may not reflect the current state of the code, final state of the product, or consensus of the users working on it.&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54431</id>
		<title>User:Lillie Yifu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54431"/>
		<updated>2008-02-17T09:18:53Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[http://www.google.com google],[http://mail.yahoo.com mail],[http://www.blogger.com blogger],[http://jira.secondlife.com/browse/VWR-5004 browse in sl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hello, this is me. Lillie.[[Image:LillieYifu.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
I am starting this user page because of the [[WikiHUD]] project, an inworld utility that lets users read complete wikipages. The current source code is [[wikiHUD (Source)]] is here. &lt;br /&gt;
&lt;br /&gt;
Presently, since I don&#039;t know where the api.php file is, search features do not work with this wiki, but it should be something that can be fixed relatively easily. Full and Summary mode viewing, however, work correctly.&lt;br /&gt;
--[[User:Lillie Yifu|Lillie Yifu]] 18:38, 15 February 2008 (PST)&lt;br /&gt;
&lt;br /&gt;
[http://sexsecond.blogspot.com My Blog] -- you can read me in world...&lt;br /&gt;
[http://www.gmail.com gmail]&lt;br /&gt;
[http://mail.yahoo.com]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54430</id>
		<title>User:Lillie Yifu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54430"/>
		<updated>2008-02-17T09:18:13Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[http://www.google.com google],[http://mail.yahoo.com mail],[http://www.blogger.com blogger],&lt;br /&gt;
[http://jira.secondlife.com/browse/VWR-5004 browse in sl]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hello, this is me. Lillie.[[Image:LillieYifu.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
I am starting this user page because of the [[WikiHUD]] project, an inworld utility that lets users read complete wikipages. The current source code is [[wikiHUD (Source)]] is here. &lt;br /&gt;
&lt;br /&gt;
Presently, since I don&#039;t know where the api.php file is, search features do not work with this wiki, but it should be something that can be fixed relatively easily. Full and Summary mode viewing, however, work correctly.&lt;br /&gt;
--[[User:Lillie Yifu|Lillie Yifu]] 18:38, 15 February 2008 (PST)&lt;br /&gt;
&lt;br /&gt;
[http://sexsecond.blogspot.com My Blog] -- you can read me in world...&lt;br /&gt;
[http://www.gmail.com gmail]&lt;br /&gt;
[http://mail.yahoo.com]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54429</id>
		<title>User:Lillie Yifu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54429"/>
		<updated>2008-02-17T09:07:39Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[http://www.google.com google],[http://mail.yahoo.com mail]&lt;br /&gt;
*[http://www.blogger.com blogger]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hello, this is me. Lillie.[[Image:LillieYifu.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
I am starting this user page because of the [[WikiHUD]] project, an inworld utility that lets users read complete wikipages. The current source code is [[wikiHUD (Source)]] is here. &lt;br /&gt;
&lt;br /&gt;
Presently, since I don&#039;t know where the api.php file is, search features do not work with this wiki, but it should be something that can be fixed relatively easily. Full and Summary mode viewing, however, work correctly.&lt;br /&gt;
--[[User:Lillie Yifu|Lillie Yifu]] 18:38, 15 February 2008 (PST)&lt;br /&gt;
&lt;br /&gt;
[http://sexsecond.blogspot.com My Blog] -- you can read me in world...&lt;br /&gt;
[http://www.gmail.com gmail]&lt;br /&gt;
[http://mail.yahoo.com]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54336</id>
		<title>User:Lillie Yifu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54336"/>
		<updated>2008-02-16T13:52:02Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello, this is me. Lillie.[[Image:LillieYifu.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
I am starting this user page because of the [[WikiHUD]] project, an inworld utility that lets users read complete wikipages. The current source code is [[wikiHUD (Source)]] is here. &lt;br /&gt;
&lt;br /&gt;
Presently, since I don&#039;t know where the api.php file is, search features do not work with this wiki, but it should be something that can be fixed relatively easily. Full and Summary mode viewing, however, work correctly.&lt;br /&gt;
--[[User:Lillie Yifu|Lillie Yifu]] 18:38, 15 February 2008 (PST)&lt;br /&gt;
&lt;br /&gt;
[http://sexsecond.blogspot.com My Blog] -- you can read me in world...&lt;br /&gt;
[http://www.gmail.com gmail]&lt;br /&gt;
[http://mail.yahoo.com]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54332</id>
		<title>User:Lillie Yifu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54332"/>
		<updated>2008-02-16T13:29:32Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello, this is me. Lillie.[[Image:LillieYifu.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
I am starting this user page because of the [[WikiHUD]] project, an inworld utility that lets users read complete wikipages. The current source code is [[wikiHUD (Source)]] is here. &lt;br /&gt;
&lt;br /&gt;
Presently, since I don&#039;t know where the api.php file is, search features do not work with this wiki, but it should be something that can be fixed relatively easily. Full and Summary mode viewing, however, work correctly.&lt;br /&gt;
--[[User:Lillie Yifu|Lillie Yifu]] 18:38, 15 February 2008 (PST)&lt;br /&gt;
&lt;br /&gt;
[http://sexsecond.blogspot.com My Blog] -- you can read me in world...&lt;br /&gt;
[http://www.gmail.com gmail]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=WikiHUD&amp;diff=54330</id>
		<title>WikiHUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=WikiHUD&amp;diff=54330"/>
		<updated>2008-02-16T13:12:27Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WikiHUD is a simple utility that reads pages from a wiki into Second Life. One WikiHUD reads pages from this Wiki. The code reads the raw contents of an article from this wiki. Originally written by [[Lillie Yifu]]. The code is [[open source]] and the freebie wikiHUD is [[full permissions]].&lt;br /&gt;
&lt;br /&gt;
The secondlife wikiHUD works by listening on channel 4 for the name of an article, and then returning the search. The simple version only returns a summary.&lt;br /&gt;
&lt;br /&gt;
Version 1.02 of the wikiHUD has several command modes.&lt;br /&gt;
&lt;br /&gt;
Because wikiMedia is case sensitive in article names, so are the requests.&lt;br /&gt;
&lt;br /&gt;
== Command Modes ==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;summary&#039;&#039; mode it returns the first 2048 characters of the article.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;full&#039;&#039; mode it returns the first 2048 characters of each section of the article, which means that if each section is less than 2048, it returns the whole article.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;category&#039;&#039; mode it returns the categories an article belongs to.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;word&#039;&#039; mode it returns the list of articles with the word in the title of the article.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== In World Texture Display ==&lt;br /&gt;
&lt;br /&gt;
The wikiHUD will display a full permissions texture if it is placed in the first line of an article entry in the &amp;lt;nowiki&amp;gt;{{ik|}}&amp;lt;/nowiki&amp;gt; template, with the UUID or key of a full permissions texture after the | character.&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
[[WikiHUD (Source)]] contains the most recent source code for wikiHUD.&lt;br /&gt;
&lt;br /&gt;
The basic version points to [http://secondlife.wikia.com] but workls with any latest releast of [http://www.mediawiki.com&amp;quot; Mediawiki] that has index.php and api.ph[ in the standard locations, and allows action=raw&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SURL ==&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/Yedo%20Basilica/148/72/190 Freebie WikiHUD here.]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
[[Category:HUDs]]&lt;br /&gt;
[[Category:Utilities]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=WikiHUD_(Source)&amp;diff=54302</id>
		<title>WikiHUD (Source)</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=WikiHUD_(Source)&amp;diff=54302"/>
		<updated>2008-02-16T02:39:13Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: New page: For WikiHUD by User:Lillie Yifu  &amp;lt;code&amp;gt;   // wiki reader 1.03 Lillie Yifu  // http://sexsecond.blogspot.com  // chat on channel 4 the name of an article to get the top of the entry...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For [[WikiHUD]] by [[User:Lillie Yifu]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 // wiki reader 1.03 Lillie Yifu&lt;br /&gt;
 // http://sexsecond.blogspot.com&lt;br /&gt;
 // chat on channel 4 the name of an article to get the top of the entry text&lt;br /&gt;
 // permission is granted to distribute this script free and open source with the header attached&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // adding second channel to listen for mode changes&lt;br /&gt;
 // adding category mode&lt;br /&gt;
 &lt;br /&gt;
 list wikis = [&amp;quot;wikia&amp;quot;,&amp;quot;lindenlabs&amp;quot;];&lt;br /&gt;
 list urls =  [&amp;quot;http://secondlife.wikia.com&amp;quot;,&amp;quot;http://wiki.secondlife.com&amp;quot;];&lt;br /&gt;
 // need to find the api.php for wiki.secondlife, seems like we will need some kind of list for languages, and for where various installations put files&lt;br /&gt;
&lt;br /&gt;
 integer sources;&lt;br /&gt;
 integer oldmode;&lt;br /&gt;
 integer wiki = 0;&lt;br /&gt;
 &lt;br /&gt;
 string redirect = &amp;quot;#REDIRECT&amp;quot;;&lt;br /&gt;
 integer section ;&lt;br /&gt;
 integer follow= 0;&lt;br /&gt;
 integer redirlen;&lt;br /&gt;
 string qname;&lt;br /&gt;
 list meta = [HTTP_MIMETYPE,&amp;quot;text/plain;charset=utf-8&amp;quot;];&lt;br /&gt;
 key hid;&lt;br /&gt;
 string name;&lt;br /&gt;
 string str_replace(string src, string from, string to)&lt;br /&gt;
 {//replaces all occurrences of &#039;from&#039; with &#039;to&#039; in &#039;src&#039;.&lt;br /&gt;
     integer len = (~-(llStringLength(from)));&lt;br /&gt;
     if(~len)&lt;br /&gt;
     {&lt;br /&gt;
         string  buffer = src;&lt;br /&gt;
         integer b_pos = -1;&lt;br /&gt;
         integer to_len = (~-(llStringLength(to)));&lt;br /&gt;
         @loop; //instead of a while loop, saves 5 bytes (and run faster).&lt;br /&gt;
         integer to_pos = ~llSubStringIndex(buffer, from);&lt;br /&gt;
         if(to_pos)&lt;br /&gt;
         {&lt;br /&gt;
             buffer = llGetSubString(src = llInsertString(llDeleteSubString(src, b_pos -= to_pos, b_pos + len), b_pos, to), (-~(b_pos += to_len)), 0x8000);&lt;br /&gt;
             jump loop;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return src;&lt;br /&gt;
 }&lt;br /&gt;
 key image = &amp;quot;f07b2853-6aa2-7819-cbde-a1bf4187091d&amp;quot;;&lt;br /&gt;
 vector large = &amp;lt;0.01,0.3,.3&amp;gt;;&lt;br /&gt;
 vector small = &amp;lt;0.01,0.1,0.1&amp;gt;;&lt;br /&gt;
 integer islarge =TRUE;&lt;br /&gt;
 integer qmode = 0;//mode of query&lt;br /&gt;
 integer mode = 0;//mode of command&lt;br /&gt;
 &lt;br /&gt;
 string url;&lt;br /&gt;
 integer modes;&lt;br /&gt;
 //action=query &amp;amp; list=search &amp;amp; srsearch=wikipedia &amp;amp; srlimit=10&lt;br /&gt;
 list modenames = [&amp;quot;summary&amp;quot;,&amp;quot;categories&amp;quot;,&amp;quot;word&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;source&amp;quot;,&amp;quot;wikis&amp;quot;];&lt;br /&gt;
 list phps = [ &lt;br /&gt;
 &amp;quot;/index.php?action=raw&amp;amp;title=&amp;quot;,&lt;br /&gt;
 &amp;quot;/api.php?format=xml&amp;amp;prop=categories&amp;amp;action=query&amp;amp;titles=&amp;quot;,&lt;br /&gt;
 &amp;quot;/api.php?format=xml&amp;amp;action=query&amp;amp;list=search&amp;amp;srlimit=20&amp;amp;srsearch=&amp;quot;,&lt;br /&gt;
 &amp;quot;/index.php?action=raw&amp;amp;title=&amp;quot;&lt;br /&gt;
 ];&lt;br /&gt;
 //string url = &amp;quot;http://en.wikipedia.org/index.php?action=raw&amp;amp;title=&amp;quot;;&lt;br /&gt;
 integer achan = 4;&lt;br /&gt;
 integer mchan = 5;&lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
     state_entry()&lt;br /&gt;
     {&lt;br /&gt;
         integer i = 0;&lt;br /&gt;
         url = llList2String(wikis,wiki);&lt;br /&gt;
         sources = llGetListLength(wikis);&lt;br /&gt;
         modes = llGetListLength(modenames);&lt;br /&gt;
         llSetTexture(image,ALL_SIDES);&lt;br /&gt;
         llOwnerSay(&amp;quot;Chat on channel &amp;quot;+(string) achan+&amp;quot; the name of an article to reference the Second Life Wiki.&amp;quot;);&lt;br /&gt;
         llOwnerSay(&amp;quot;Chat on channel &amp;quot;+(string) mchan+&amp;quot; to change query mode.&amp;quot;);&lt;br /&gt;
         for(;i&amp;lt;modes;++i) {&lt;br /&gt;
             llOwnerSay(llList2String(modenames, i));&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         llListen(achan,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);&lt;br /&gt;
         llListen(mchan,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     listen(integer c,string n,key id,string m)&lt;br /&gt;
     {&lt;br /&gt;
         string article = str_replace(m,&amp;quot; &amp;quot;,&amp;quot;_&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
         if(achan==c) {&lt;br /&gt;
             if(0==mode|| 3==mode) {&lt;br /&gt;
                 qname=url+llList2String(phps,mode)+article;&lt;br /&gt;
                 name = qname +&amp;quot;&amp;amp;section=0&amp;quot;; // section postpend&lt;br /&gt;
                 llOwnerSay(name+&amp;quot; &amp;quot;+ llList2String(modenames,mode));&lt;br /&gt;
                 hid = llHTTPRequest(name, meta, &amp;quot;&amp;quot;);&lt;br /&gt;
                 qmode = mode;&lt;br /&gt;
                 section =-1;&lt;br /&gt;
                 &lt;br /&gt;
             } else if(1==mode) {&lt;br /&gt;
                 name = url+llList2String(phps,mode)+article;&lt;br /&gt;
                 llOwnerSay(name+&amp;quot; &amp;quot;+ llList2String(modenames,mode));&lt;br /&gt;
                 hid = llHTTPRequest(name, meta, &amp;quot;&amp;quot;);&lt;br /&gt;
                 qmode = mode;&lt;br /&gt;
             } else if(2==mode) {// will need a loop here&lt;br /&gt;
                 name = url+llList2String(phps,mode)+article;&lt;br /&gt;
                 llOwnerSay(name+&amp;quot; &amp;quot;+ llList2String(modenames,mode));&lt;br /&gt;
                 hid = llHTTPRequest(name, meta, &amp;quot;&amp;quot;);&lt;br /&gt;
                 qmode = mode;&lt;br /&gt;
             }&lt;br /&gt;
                 &lt;br /&gt;
         } else if (mchan ==c) { &lt;br /&gt;
         &lt;br /&gt;
             integer i =0;&lt;br /&gt;
              oldmode = mode;&lt;br /&gt;
             for(;i&amp;lt;modes;++i) {&lt;br /&gt;
                 if(llGetSubString(m,0,2) == llGetSubString(llList2String(modenames,i),0,2) ){&lt;br /&gt;
                     mode = i;&lt;br /&gt;
                     i=modes;&lt;br /&gt;
                     }&lt;br /&gt;
                 }// end look for mode&lt;br /&gt;
                 if(4 == mode) { // set source&lt;br /&gt;
                     list parse = llParseString2List(m,[&amp;quot; &amp;quot;],[]);&lt;br /&gt;
                     string newsource = llGetSubString(llList2String(parse,1),0,3);&lt;br /&gt;
                     for(i=0;i&amp;lt;sources;++i) { // I should sort and search... &lt;br /&gt;
                         if(llGetSubString(llList2String(wikis,i),0,3)==newsource) {&lt;br /&gt;
                             wiki = i;&lt;br /&gt;
                             url = llList2String(urls,wiki);&lt;br /&gt;
                             llOwnerSay(&amp;quot;Setting source to &amp;quot; + url);&lt;br /&gt;
                             i=sources;&lt;br /&gt;
                             }&lt;br /&gt;
                         }&lt;br /&gt;
                     mode = oldmode; // set mode to default, we should never stay here.&lt;br /&gt;
                 } else if(5 ==mode) {&lt;br /&gt;
                         llOwnerSay(&amp;quot;To change source chat  /&amp;quot; + (string)mchan + &amp;quot; source &amp;lt;wiki name&amp;gt;&amp;quot;);&lt;br /&gt;
                         for(i=0;i&amp;lt;sources;++i) {&lt;br /&gt;
                             llOwnerSay(llList2String(wikis,i) + &amp;quot;\t\t @ &amp;quot; + llList2String(urls,i));&lt;br /&gt;
                         }&lt;br /&gt;
                         mode = oldmode; // set mode  back, we should never stay here&lt;br /&gt;
                     } // end of mode processing&lt;br /&gt;
                 if(mode!= oldmode) {&lt;br /&gt;
                     llOwnerSay(&amp;quot;Setting mode to &amp;quot;+llList2String(modenames,mode));&lt;br /&gt;
                 }&lt;br /&gt;
             }// end channel 5&lt;br /&gt;
         }&lt;br /&gt;
             &lt;br /&gt;
             &lt;br /&gt;
             &lt;br /&gt;
     &lt;br /&gt;
     on_rez(integer p)&lt;br /&gt;
     {&lt;br /&gt;
         llResetScript();&lt;br /&gt;
     }&lt;br /&gt;
     touch_start(integer p)&lt;br /&gt;
     {&lt;br /&gt;
         if(1==p) {&lt;br /&gt;
         if(islarge) {&lt;br /&gt;
                 llSetScale(small);&lt;br /&gt;
                 islarge = FALSE;&lt;br /&gt;
                 llSetAlpha(.3,ALL_SIDES);&lt;br /&gt;
             } else {&lt;br /&gt;
                 llSetScale(large);&lt;br /&gt;
                 islarge = TRUE;&lt;br /&gt;
                 llSetAlpha(1.,ALL_SIDES);&lt;br /&gt;
             }&lt;br /&gt;
         } &lt;br /&gt;
     }&lt;br /&gt;
         &lt;br /&gt;
         timer()&lt;br /&gt;
         {&lt;br /&gt;
             if(hid){&lt;br /&gt;
                 hid = NULL_KEY;&lt;br /&gt;
                 follow = 0;&lt;br /&gt;
                 llOwnerSay(&amp;quot;Query timed out.&amp;quot;);&lt;br /&gt;
             }&lt;br /&gt;
             llSetTimerEvent(0.);&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
     http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
     {&lt;br /&gt;
         if(0==qmode || 3==qmode) { // article or full&lt;br /&gt;
             key image;&lt;br /&gt;
             if (request_id == hid) {&lt;br /&gt;
                     image = (key)llGetSubString(body,5,40); // image key if available&lt;br /&gt;
                     llSetTexture(image,ALL_SIDES);&lt;br /&gt;
                     follow = TRUE;&lt;br /&gt;
                 if(llSubStringIndex(body,redirect)!=0) { // no redirect&lt;br /&gt;
                     if( qmode == 0) { // if summary mode, or multipart query after first &lt;br /&gt;
                         llOwnerSay(body); &lt;br /&gt;
                         return;&lt;br /&gt;
                     } else {&lt;br /&gt;
                         if(0 == section &amp;amp;&amp;amp; llSubStringIndex(body,&amp;quot;=&amp;quot;)!=0) {&lt;br /&gt;
                             llOwnerSay(llGetSubString(body,0,llSubStringIndex(body,&amp;quot;\n=&amp;quot;))); //truncate at first line that starts with = &lt;br /&gt;
                         } else if(section &amp;gt;0)&lt;br /&gt;
                             llOwnerSay(body);&lt;br /&gt;
                         }&lt;br /&gt;
                         if(body !=&amp;quot;&amp;quot;) {    &lt;br /&gt;
                             ++section ; // increment section, will now be 0&lt;br /&gt;
                             name = qname + &amp;quot;&amp;amp;templates=expand&amp;amp;section=&amp;quot; + (string) section; // query name&lt;br /&gt;
                             hid = llHTTPRequest(name, meta, &amp;quot;&amp;quot;);&lt;br /&gt;
                         }&lt;br /&gt;
                     }&lt;br /&gt;
                         &lt;br /&gt;
                         &lt;br /&gt;
 &lt;br /&gt;
                 } else if(follow&amp;lt; 3) {// if redirect and less than 3 jumps&lt;br /&gt;
                     &lt;br /&gt;
                     integer start = llSubStringIndex(body,&amp;quot;[[&amp;quot;) + 2;&lt;br /&gt;
                     integer end = llSubStringIndex(body,&amp;quot;]]&amp;quot;) -1;&lt;br /&gt;
                     string m = llGetSubString(body,start, end);&lt;br /&gt;
                     ++follow ;&lt;br /&gt;
                     llSetTimerEvent(180.);&lt;br /&gt;
                     name=url+str_replace(m,&amp;quot; &amp;quot;,&amp;quot;_&amp;quot;);&lt;br /&gt;
                     llOwnerSay(&amp;quot;Following Redirect to \n&amp;quot;+name);&lt;br /&gt;
                     list meta = [HTTP_MIMETYPE,&amp;quot;text/plain;charset=utf-8&amp;quot;];&lt;br /&gt;
                     hid = llHTTPRequest(name, meta, &amp;quot;&amp;quot;);&lt;br /&gt;
                 } else {&lt;br /&gt;
                     hid = NULL_KEY;&lt;br /&gt;
                     follow=0;&lt;br /&gt;
                     llOwnerSay(&amp;quot;Too many redirects&amp;quot;);&lt;br /&gt;
                 }&lt;br /&gt;
             } else if(1 == qmode) {// xml categories&lt;br /&gt;
                 list catraw = llParseString2List(body,[&amp;quot;Category:&amp;quot;],[]);&lt;br /&gt;
                 integer i = 1;&lt;br /&gt;
                 string temp;&lt;br /&gt;
                 for(;i&amp;lt;llGetListLength(catraw);++i){&lt;br /&gt;
                     temp = llList2String(catraw,i);&lt;br /&gt;
                     llOwnerSay(llGetSubString(temp,0,llSubStringIndex(temp,&amp;quot;\&amp;quot;&amp;quot;)-1));&lt;br /&gt;
                 }&lt;br /&gt;
             } else if(2 == qmode) {&lt;br /&gt;
                  list catraw = llParseString2List(body,[&amp;quot;title=\&amp;quot;&amp;quot;],[]);&lt;br /&gt;
                 integer i = 1;&lt;br /&gt;
                 string temp;&lt;br /&gt;
                 for(;i&amp;lt;llGetListLength(catraw);++i){&lt;br /&gt;
                     temp = llList2String(catraw,i);&lt;br /&gt;
                     llOwnerSay(llGetSubString(temp,0,llSubStringIndex(temp,&amp;quot;\&amp;quot;&amp;quot;)-1));&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
     }&lt;br /&gt;
         &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54301</id>
		<title>User:Lillie Yifu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54301"/>
		<updated>2008-02-16T02:38:16Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello, this is me. Lillie.[[Image:LillieYifu.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
I am starting this user page because of the [[WikiHUD]] project, an inworld utility that lets users read complete wikipages. The current source code is [[wikiHUD (Source)]] is here. &lt;br /&gt;
&lt;br /&gt;
Presently, since I don&#039;t know where the api.php file is, search features do not work with this wiki, but it should be something that can be fixed relatively easily. Full and Summary mode viewing, however, work correctly.&lt;br /&gt;
--[[User:Lillie Yifu|Lillie Yifu]] 18:38, 15 February 2008 (PST)&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54300</id>
		<title>User:Lillie Yifu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Lillie_Yifu&amp;diff=54300"/>
		<updated>2008-02-16T02:37:50Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: New page: Hello, this is me. Lillie.[Image:LillieYifu.jpg|right|400px]  I am starting this user page because of the WikiHUD project, an inworld utility that lets users read complete wikipages. T...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello, this is me. Lillie.[Image:LillieYifu.jpg|right|400px]&lt;br /&gt;
&lt;br /&gt;
I am starting this user page because of the [[WikiHUD]] project, an inworld utility that lets users read complete wikipages. The current source code is [[wikiHUD (Source)]] is here. &lt;br /&gt;
&lt;br /&gt;
Presently, since I don&#039;t know where the api.php file is, search features do not work with this wiki, but it should be something that can be fixed relatively easily. Full and Summary mode viewing, however, work correctly.&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=File:LillieYifu.jpg&amp;diff=54299</id>
		<title>File:LillieYifu.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=File:LillieYifu.jpg&amp;diff=54299"/>
		<updated>2008-02-16T02:36:34Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: Lillie Yifu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lillie Yifu&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=WikiHUD&amp;diff=54298</id>
		<title>WikiHUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=WikiHUD&amp;diff=54298"/>
		<updated>2008-02-16T02:27:05Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: New page: WikiHUD is a simple utility that reads pages from a wiki into Second Life. One WikiHUD reads pages from this Wiki. The code reads the raw contents of an article from this wiki. Originally ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WikiHUD is a simple utility that reads pages from a wiki into Second Life. One WikiHUD reads pages from this Wiki. The code reads the raw contents of an article from this wiki. Originally written by [[Lillie Yifu]]. The code is [[open source]] and the freebie wikiHUD is [[full permissions]].&lt;br /&gt;
&lt;br /&gt;
The secondlife wikiHUD works by listening on channel 4 for the name of an article, and then returning the search. The simple version only returns a summary. &lt;br /&gt;
&lt;br /&gt;
Version 1.02 of the wikiHUD has several command modes.&lt;br /&gt;
&lt;br /&gt;
Because wikiMedia is case sensitive in article names, so are the requests.&lt;br /&gt;
&lt;br /&gt;
== Command Modes ==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;summary&#039;&#039; mode it returns the first 2048 characters of the article.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;full&#039;&#039; mode it returns the first 2048 characters of each section of the article, which means that if each section is less than 2048, it returns the whole article.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;category&#039;&#039; mode it returns the categories an article belongs to.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;word&#039;&#039; mode it returns the list of articles with the word in the title of the article.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== In World Texture Display ==&lt;br /&gt;
&lt;br /&gt;
The wikiHUD will display a full permissions texture if it is placed in the first line of an article entry in the &amp;lt;nowiki&amp;gt;{{ik|}}&amp;lt;/nowiki&amp;gt; template, with the UUID or key of a full permissions texture after the | character.&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
[[WikiHUD (Source)]] contains the most recent source code for wikiHUD.&lt;br /&gt;
&lt;br /&gt;
== SURL ==&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/Yedo%20Basilica/148/72/190 Freebie WikiHUD here.]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
[[Category:HUDs]]&lt;br /&gt;
[[Category:Utilities]]&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Project:Editing_Discussion/Archive_02&amp;diff=54297</id>
		<title>Project:Editing Discussion/Archive 02</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Project:Editing_Discussion/Archive_02&amp;diff=54297"/>
		<updated>2008-02-16T02:15:24Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: wikiHUD questions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an open forum for people to discuss this wiki, ala the [http://en.wikipedia.org/wiki/Wikipedia:Village_pump Wikipedia &amp;quot;Village pump&amp;quot;].  This is &#039;&#039;not&#039;&#039; for general discussion of Second Life.  For that, please refer to [http://forums.secondlife.com/ the forums]&lt;br /&gt;
&lt;br /&gt;
Feel free to add your comments below.&lt;br /&gt;
&lt;br /&gt;
== What should this be called? ==&lt;br /&gt;
&lt;br /&gt;
I used &amp;quot;Village pump&amp;quot; as a working name.  If it sticks, that&#039;s fine.  I thought about using a Second Life themed name (e.g. The Telehub), but then realized that there could be confusion between that page and a future [[Telehub]] page which actually describes what Telehubs are.  Maybe the &amp;quot;Hippo Pond&amp;quot;? -- [[User:Rob Linden|Rob Linden]] 18:29, 13 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:That names sounds ok, but what should the namespace be? -- [[User:Strife Onizuka|Strife Onizuka]] 18:44, 13 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
::I&#039;m using the same guidelines as other wikis (like Wikipedia&#039;s village pump, at http://en.wikipedia.org/wiki/Project:Village_pump ), though I&#039;ll admit it&#039;s a little confusing in this case.  One really irritating thing about MediaWiki is that it assumes that the name of the wiki (&amp;quot;Second Life Wiki&amp;quot;) is a term that is appropriate to use as a namespace identifier, because it works for Wikipedia.  So, we either have to shorten the name of the wiki (&amp;quot;SLWiki&amp;quot;, which I think was already being used by someone else), or use &amp;quot;Project&amp;quot;.  I opted for the latter in configuring this wiki. -- [[User:Rob Linden|Rob Linden]] 10:55, 14 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
Given past experiences with the forums, some moderation will need to be done. -- [[User:Strife Onizuka|Strife Onizuka]] 18:44, 13 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
I suggest keeping it simple. If it is the only SL Forum call it &#039;SL Forum&#039;. If it is the SL People&#039;s Forum then call it that.Errol Carter&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
&lt;br /&gt;
How does this &#039;forum&#039; differ from the Second Life Forum? (except that this one is accessable by free-accounts)--[[User:Vernes Veranes|Vernes Veranes]] 18:14, 1 June 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:This is specifically a place to discuss the wiki itself, not Second Life generally. -- [[User:Rob Linden|Rob Linden]] 18:19, 1 June 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Policy Section ==&lt;br /&gt;
&lt;br /&gt;
* To discuss existing and proposed policies&lt;br /&gt;
&lt;br /&gt;
===Licensing===&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Q.&#039;&#039;&#039; Residents have begun to [[Sculpted_Prims:_Sculpt_Maps_and_Textures|share sculpt maps, textures, and sculpted prims]] on the wiki. According to the [[Project:General_disclaimer|General Disclaimer]], &amp;quot;Linden Lab will make your contribution available under the [http://creativecommons.org/licenses/by-sa/2.5/ Creative Comments (sic) Attribution-ShareAlike 2.5 license]&amp;quot;. (cf. [[Project:Contribution_Agreement|Contribution Agreement]] and the [[Project:Copyrights|Copyrights Project]]). Will residents be able to choose other licenses (a different &#039;&#039;Creative Commons&#039;&#039; license, GPL, or the [http://artlibre.org/licence/lal/en/ Free Art License] for example) if they wish to do so?  &amp;amp;mdash; [[User:Yuu Nakamichi|Yuu Nakamichi]] 01:08, 4 June 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;A.&#039;&#039;&#039;:  No, not if you host it here.  It&#039;s just too complicated.  You may link to differently licensed material, but please don&#039;t expect to choose your own license for information you upload here. -- [[User:Rob Linden|Rob Linden]] 11:35, 18 July 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
===Project page vs. Project discussion page===&lt;br /&gt;
&lt;br /&gt;
:Discussion should occur on the discussion page; with this &#039;&#039;&#039;project&#039;&#039;&#039; page itself being an overview rather than the actual discussion.&lt;br /&gt;
:&lt;br /&gt;
:Is this correct? --[[User:JetZep Zabelin|JetZep Zabelin]] 20:01, 27 September 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
::Well, this page is kind of the exception to the rule, since it&#039;s specifically identified as a discussion page.  But yes, in general, discussion should go on the discussion page.  I thought about putting a redirect from here straight to [[Project talk:Editing Discussion]], but thought better of it. -- [[User:Rob Linden|Rob Linden]] 20:59, 27 September 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
===Persistent Logins===&lt;br /&gt;
:&#039;&#039;&#039;Q.&#039;&#039;&#039; Can we please have persistent logins here? I really don&#039;t see the need for having to log in each time, it&#039;s annoying; but even more annoying is being in the middle of an edit, getting called away, coming back, finishing the edit, clicking the Preview button...only to be told you need to log in to edit, and all the work you&#039;ve done is gone. [[User:Siann Beck|Siann Beck]] 16:57, 9 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;&#039;A.&#039;&#039;&#039;: Logins should be persistent for 24 hrs.  It could be that our sysadmins needed to reset the sessions, which could lead to the probelm you describe.  A workaround for the problem (in Firefox, at least) if it happens again is this:&lt;br /&gt;
::*  Leave the &amp;quot;you need to log in to edit&amp;quot; screen up&lt;br /&gt;
::*  Open the login link &#039;&#039;in a new window&#039;&#039;&lt;br /&gt;
::*  Hit reload in the first window.  In Firefox, this causes you to get prompted to repost form data.  Click &amp;quot;ok&amp;quot;.&lt;br /&gt;
::Sorry that you lost your edits.  I know that&#039;s frustrating.  There are also form saving plugins for various browsers, as well ([http://www.ilovejackdaniels.com/user-scripts/auto-save-forms-user-script/ Firefox Auto Save], for example) -- [[User:Rob Linden|Rob Linden]] 17:18, 9 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:::Why expire them at all? Can&#039;t we have a &amp;quot;Keep me signed in&amp;quot; checkbox on the login page? I&#039;m the only person who uses my computer; I see no need for me to have to log in every day. [[User:Siann Beck|Siann Beck]] 04:54, 11 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Sandbox namespace? ==&lt;br /&gt;
At the [[Open_Source_Meeting/2007-11-08|open source meeting on 2007-11-08]], we spent a fair amount of time talking about how wiki.secondlife.com would be used for [[Architecture Working Group]] proposals.&lt;br /&gt;
&lt;br /&gt;
A problem that we have right now (and one that existed before AWG, but became more acute now) is that we at Linden Lab host the wiki primarily as a resource to collaborate with the community on documentation and code designs.  As a result, we think that people are coming to the wiki with the hope that they&#039;re going to find either material that documents Second Life as it is or soon will be, or with roadmap material that Linden Lab had some hand in creating.  While a wiki is always more of a &amp;quot;reader beware&amp;quot; zone than many places on the Internet, we&#039;d like to aspire to keeping the main namespace as an area tailored to our intended audience.&lt;br /&gt;
&lt;br /&gt;
That said, we don&#039;t mind providing an area for people not affiliated with Linden Lab to collaborate on material that they hope to get Linden Lab&#039;s buy-in of, but haven&#039;t gotten it yet (within reason).  We just want to make sure that material is in a different spot, and is clearly marked as such.  Our current solution is to move that type of material into the User: namespace for the person who started the document.  However, there are a number of shared documents that don&#039;t have an obvious home.&lt;br /&gt;
&lt;br /&gt;
So, I&#039;m dabbling with the idea of creating a new &amp;quot;Sandbox&amp;quot; namespace, where this material would be, and where Lindens can move things rather than delete them.  This wouldn&#039;t be an unbounded area; we&#039;d still expect people to follow the [[Project:Editing Guidelines]], but would be a little more open to technical proposals that we don&#039;t agree with but were made in good faith.  &lt;br /&gt;
&lt;br /&gt;
Thoughts? -- [[User:Rob Linden|Rob Linden]] 18:28, 8 November 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
: How about a &amp;quot;kitty litter&amp;quot; namespace? :)&lt;br /&gt;
&lt;br /&gt;
: Are things in Category:Design Discussions problematic as well?  If I look at [[LSL To Client Communication]] it&#039;s pretty clear to me that this is a proposal.  With AWG, everything is a proposal, so maybe it&#039;s not clear on every page.&lt;br /&gt;
&lt;br /&gt;
: I don&#039;t think adding a &amp;quot;Sandbox:&amp;quot; to the page title would really make a difference to someone unfamiliar with the Wiki.  Unless it says &amp;quot;User:&amp;quot; it&#039;s not clear that this is one individual&#039;s unsupported vision. Wouldn&#039;t it make sense to move the stuff to the &amp;quot;Discussion:&amp;quot; page though?  [[User:Mm Alder|Mm Alder]] 16:01, 12 November 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
:: I may revert back to my original proposal, which is to start tagging things with a &amp;lt;nowiki&amp;gt;{{unofficial}}&amp;lt;/nowiki&amp;gt; template, and ask people to do this (and to chip in on the tagging effort).  The template could be something along the lines of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;padding: 5px; margin-top: 0; margin-bottom: 0; border: solid 1px #3c78b5; background-color: #D8E4F1;&#039;&amp;gt;This is a Resident-authored proposal, and does not necessarily represent the current state of Second Life or Linden Lab&#039;s immediate plans for Second Life.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: It seems like we should try to provide some clue to help distinguish the two types of content.  &amp;quot;Sandbox:&amp;quot; might still be handy.  To a newcomer, it would likely connote that &#039;&#039;something&#039;&#039; is a little different about this page.  They may not know exactly what, but they&#039;d hopefully be a little more inclined to investigating further before internalizing the information as factual information about Second Life.  Would &amp;quot;Proposal:&amp;quot; be a better name?  I think in either case (Sandbox: or Proposal:), there would be cases where Linden Lab would use this namespace, too, but would move the document out of &amp;quot;Proposal:&amp;quot; when the document represents the plan of record. -- [[User:Rob Linden|Rob Linden]] 17:01, 12 November 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== WikiHUD ==&lt;br /&gt;
&lt;br /&gt;
Hello, I&#039;ve begun creating a utility for [http://secondlife.wikia.com/wiki/WikiHUD reading wiki pages in world] to fully support this wiki I need to know where the api.php is, so that search and other functions against api.php work. Presently only reading articles works (summary and full modes) because these are against index.php. The code is open source and the object in world is full permissions. &lt;br /&gt;
&lt;br /&gt;
[[User:Lillie Yifu|Lillie Yifu]] 18:15, 15 February 2008 (PST)&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41159</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41159"/>
		<updated>2007-11-21T05:57:43Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Required parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
On this page the following conventions are used:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;in quotes is a literal string&amp;quot;&lt;br /&gt;
:[ represents a list of choices | separated by a vertical bar ]&lt;br /&gt;
:&amp;lt; represents a value which can be substituted by an appropriate string described inside &amp;gt; &lt;br /&gt;
:&#039;represents a string that must be quoted, but how will be implementation specific&#039; for example in LSL &amp;quot;&amp;quot; denotes a string and &amp;quot; will be used in place of the single quote (&#039;).&lt;br /&gt;
:+ means to concatenate the two parts, though how will be implementation specific, for example + can be used to concatenate strings.&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;first&amp;quot;: &amp;lt;first&amp;gt; -- first name of the avatar.&lt;br /&gt;
:&amp;quot;last&amp;quot;: &amp;lt;last&amp;gt; -- last name of the avatar.&lt;br /&gt;
:&amp;quot;passwd&amp;quot;: &#039;$1$&#039; + &amp;lt;passwd_md5&amp;gt; -- the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&amp;quot;start&amp;quot;: [&amp;quot;first&amp;quot; | &amp;quot;last&amp;quot; | &amp;lt;specific location&amp;gt; ] -- attempt to log in to this sim, though if it is full or not available, or the agent is not allowed, another sim will be selected by the grid from its list of choices. &amp;quot;First&amp;quot; means home location. If home is filled then the grid will try last. If last is filled and home is set, the grid will try home. In either case the last choice will be from a list of [[telehubs]]. For a log in to a specific location the format is &amp;lt;existing simulator&amp;gt;/&amp;lt;x&amp;gt;/&amp;lt;y&amp;gt;/&amp;lt;z&amp;gt; as in an [[SURL]].&lt;br /&gt;
:&amp;quot;major&amp;quot;: &amp;lt;major revision&amp;gt; -- the major revision number of the client as a string. Currently always 1.&lt;br /&gt;
:&amp;quot;minor&amp;quot;: &amp;lt;minor revision&amp;gt; -- the minor revision number of the client as a string.&lt;br /&gt;
:&amp;quot;patch&amp;quot;: &amp;lt;patch number&amp;gt; -- patch number of the client as a string.&lt;br /&gt;
:&amp;quot;build&amp;quot;: &amp;lt;build&amp;gt; -- build number of the client as a string.&lt;br /&gt;
:&amp;quot;platform&amp;quot;: [&amp;quot;Lin&amp;quot; | &amp;quot;Mac&amp;quot; | &amp;quot;Win&amp;quot;] -- the platform of the client. &lt;br /&gt;
:&amp;quot;mac&amp;quot;: &amp;lt;MAC Address&amp;gt; -- the MAC address associated with the client&#039;s computer.&lt;br /&gt;
:&amp;quot;options&amp;quot;: &amp;lt;optional_login&amp;gt; -- optional array of character strings. (See below)&lt;br /&gt;
:&amp;quot;user-agent&amp;quot;: &amp;quot;sl.py 0.1&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;id0&amp;quot;: &amp;quot;&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;agree_to_tos&amp;quot;: [&amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | &amp;quot;&amp;quot;] -- whether or not the user has agreed to the Terms of Service. &lt;br /&gt;
:&amp;quot;viewer_digest&amp;quot;: &amp;quot;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&amp;quot; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
[http://www.libsecondlife.org/wiki/Login] -- libsl login page, includes sample code.&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41158</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41158"/>
		<updated>2007-11-21T05:56:30Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Required parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
On this page the following conventions are used:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;in quotes is a literal string&amp;quot;&lt;br /&gt;
:[ represents a list of choices | separated by a vertical bar ]&lt;br /&gt;
:&amp;lt; represents a value which can be substituted by an appropriate string described inside &amp;gt; &lt;br /&gt;
:&#039;represents a string that must be quoted, but how will be implementation specific&#039; for example in LSL &amp;quot;&amp;quot; denotes a string and &amp;quot; will be used in place of the single quote (&#039;).&lt;br /&gt;
:+ means to concatenate the two parts, though how will be implementation specific, for example + can be used to concatenate strings.&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;first&amp;quot;: &amp;lt;first&amp;gt; -- first name of the avatar.&lt;br /&gt;
:&amp;quot;last&amp;quot;: &amp;lt;last&amp;gt; -- last name of the avatar.&lt;br /&gt;
:&amp;quot;passwd&amp;quot;: &#039;$1$&#039; + &amp;lt;passwd_md5&amp;gt; -- the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&amp;quot;start&amp;quot;: [&amp;quot;first&amp;quot; | &amp;quot;last&amp;quot; | &amp;lt;specific location&amp;gt; ] -- attempt to log in to this sim, though if it is full or not available, or the agent is not allowed, another sim will be selected by the grid from its list of choices. &amp;quot;First&amp;quot; means home location. If home is filled then the grid will try last. If last is filled and home is set, the grid will try home. In either case the last choice will be from a list of [[telehubs]]. For a log in to a specific location the format is &amp;lt;existing simulator&amp;gt;/&amp;lt;x&amp;gt;/&amp;lt;y&amp;gt;/&amp;lt;z&amp;gt; as in an [[SURL]] &lt;br /&gt;
:&amp;quot;major&amp;quot;: &amp;lt;major revision&amp;gt; -- the major revision number of the client as a string. Currently always 1.&lt;br /&gt;
:&amp;quot;minor&amp;quot;: &amp;lt;minor revision&amp;gt; -- the minor revision number of the client as a string.&lt;br /&gt;
:&amp;quot;patch&amp;quot;: &amp;lt;patch number&amp;gt; -- patch number of the client as a string.&lt;br /&gt;
:&amp;quot;build&amp;quot;: &amp;lt;build&amp;gt; -- build number of the client as a string.&lt;br /&gt;
:&amp;quot;platform&amp;quot;: [&amp;quot;Lin&amp;quot; | &amp;quot;Mac&amp;quot; | &amp;quot;Win&amp;quot;] -- the platform of the client. &lt;br /&gt;
:&amp;quot;mac&amp;quot;: &amp;lt;MAC Address&amp;gt; -- the MAC address associated with the client&#039;s computer.&lt;br /&gt;
:&amp;quot;options&amp;quot;: &amp;lt;optional_login&amp;gt; -- optional array of character strings. (See below)&lt;br /&gt;
:&amp;quot;user-agent&amp;quot;: &amp;quot;sl.py 0.1&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;id0&amp;quot;: &amp;quot;&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;agree_to_tos&amp;quot;: [&amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | &amp;quot;&amp;quot;] -- whether or not the user has agreed to the Terms of Service. &lt;br /&gt;
:&amp;quot;viewer_digest&amp;quot;: &amp;quot;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&amp;quot; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
[http://www.libsecondlife.org/wiki/Login] -- libsl login page, includes sample code.&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41157</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41157"/>
		<updated>2007-11-21T05:53:28Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Required parameters */ existing simulator&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
On this page the following conventions are used:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;in quotes is a literal string&amp;quot;&lt;br /&gt;
:[ represents a list of choices | separated by a vertical bar ]&lt;br /&gt;
:&amp;lt; represents a value which can be substituted by an appropriate string described inside &amp;gt; &lt;br /&gt;
:&#039;represents a string that must be quoted, but how will be implementation specific&#039; for example in LSL &amp;quot;&amp;quot; denotes a string and &amp;quot; will be used in place of the single quote (&#039;).&lt;br /&gt;
:+ means to concatenate the two parts, though how will be implementation specific, for example + can be used to concatenate strings.&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;first&amp;quot;: &amp;lt;first&amp;gt; -- first name of the avatar.&lt;br /&gt;
:&amp;quot;last&amp;quot;: &amp;lt;last&amp;gt; -- last name of the avatar.&lt;br /&gt;
:&amp;quot;passwd&amp;quot;: &#039;$1$&#039; + &amp;lt;passwd_md5&amp;gt; -- the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&amp;quot;start&amp;quot;: [&amp;quot;first&amp;quot; | &amp;quot;last&amp;quot; | &amp;lt;existing simulator&amp;gt; ] -- attempt to log in to this sim, though if it is full or not available, or the agent is not allowed, another sim will be selected by the grid from its list of choices. &amp;quot;First&amp;quot; means home location. If home is filled then the grid will try last. If last is filled and home is set, the grid will try home. In either case the last choice will be from a list of [[telehubs]].&lt;br /&gt;
:&amp;quot;major&amp;quot;: &amp;lt;major revision&amp;gt; -- the major revision number of the client as a string. Currently always 1.&lt;br /&gt;
:&amp;quot;minor&amp;quot;: &amp;lt;minor revision&amp;gt; -- the minor revision number of the client as a string.&lt;br /&gt;
:&amp;quot;patch&amp;quot;: &amp;lt;patch number&amp;gt; -- patch number of the client as a string.&lt;br /&gt;
:&amp;quot;build&amp;quot;: &amp;lt;build&amp;gt; -- build number of the client as a string.&lt;br /&gt;
:&amp;quot;platform&amp;quot;: [&amp;quot;Lin&amp;quot; | &amp;quot;Mac&amp;quot; | &amp;quot;Win&amp;quot;] -- the platform of the client. &lt;br /&gt;
:&amp;quot;mac&amp;quot;: &amp;lt;MAC Address&amp;gt; -- the MAC address associated with the client&#039;s computer.&lt;br /&gt;
:&amp;quot;options&amp;quot;: &amp;lt;optional_login&amp;gt; -- optional array of character strings. (See below)&lt;br /&gt;
:&amp;quot;user-agent&amp;quot;: &amp;quot;sl.py 0.1&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;id0&amp;quot;: &amp;quot;&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;agree_to_tos&amp;quot;: [&amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | &amp;quot;&amp;quot;] -- whether or not the user has agreed to the Terms of Service. &lt;br /&gt;
:&amp;quot;viewer_digest&amp;quot;: &amp;quot;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&amp;quot; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
[http://www.libsecondlife.org/wiki/Login] -- libsl login page, includes sample code.&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41156</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41156"/>
		<updated>2007-11-21T05:47:08Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Required parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
On this page the following conventions are used:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;in quotes is a literal string&amp;quot;&lt;br /&gt;
:[ represents a list of choices | separated by a vertical bar ]&lt;br /&gt;
:&amp;lt; represents a value which can be substituted by an appropriate string described inside &amp;gt; &lt;br /&gt;
:&#039;represents a string that must be quoted, but how will be implementation specific&#039; for example in LSL &amp;quot;&amp;quot; denotes a string and &amp;quot; will be used in place of the single quote (&#039;).&lt;br /&gt;
:+ means to concatenate the two parts, though how will be implementation specific, for example + can be used to concatenate strings.&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;first&amp;quot;: &amp;lt;first&amp;gt; -- first name of the avatar.&lt;br /&gt;
:&amp;quot;last&amp;quot;: &amp;lt;last&amp;gt; -- last name of the avatar.&lt;br /&gt;
:&amp;quot;passwd&amp;quot;: &#039;$1$&#039; + &amp;lt;passwd_md5&amp;gt; -- the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&amp;quot;start&amp;quot;: [&amp;quot;first&amp;quot; | &amp;quot;last&amp;quot; | &amp;lt;existing simulator&amp;gt; ] -- attempt to log in to this sim, though if it is full or not available, or the agent is not allowed, another sim could be used.&lt;br /&gt;
:&amp;quot;major&amp;quot;: &amp;lt;major revision&amp;gt; -- the major revision number of the client as a string. Currently always 1.&lt;br /&gt;
:&amp;quot;minor&amp;quot;: &amp;lt;minor revision&amp;gt; -- the minor revision number of the client as a string.&lt;br /&gt;
:&amp;quot;patch&amp;quot;: &amp;lt;patch number&amp;gt; -- patch number of the client as a string.&lt;br /&gt;
:&amp;quot;build&amp;quot;: &amp;lt;build&amp;gt; -- build number of the client as a string.&lt;br /&gt;
:&amp;quot;platform&amp;quot;: [&amp;quot;Lin&amp;quot; | &amp;quot;Mac&amp;quot; | &amp;quot;Win&amp;quot;] -- the platform of the client. &lt;br /&gt;
:&amp;quot;mac&amp;quot;: &amp;lt;MAC Address&amp;gt; -- the MAC address associated with the client&#039;s computer.&lt;br /&gt;
:&amp;quot;options&amp;quot;: &amp;lt;optional_login&amp;gt; -- optional array of character strings. (See below)&lt;br /&gt;
:&amp;quot;user-agent&amp;quot;: &amp;quot;sl.py 0.1&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;id0&amp;quot;: &amp;quot;&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;agree_to_tos&amp;quot;: [&amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | &amp;quot;&amp;quot;] -- whether or not the user has agreed to the Terms of Service. &lt;br /&gt;
:&amp;quot;viewer_digest&amp;quot;: &amp;quot;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&amp;quot; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
[http://www.libsecondlife.org/wiki/Login] -- libsl login page, includes sample code.&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41155</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41155"/>
		<updated>2007-11-21T05:46:29Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: external links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
On this page the following conventions are used:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;in quotes is a literal string&amp;quot;&lt;br /&gt;
:[ represents a list of choices | separated by a vertical bar ]&lt;br /&gt;
:&amp;lt; represents a value which can be substituted by an appropriate string described inside &amp;gt; &lt;br /&gt;
:&#039;represents a string that must be quoted, but how will be implementation specific&#039; for example in LSL &amp;quot;&amp;quot; denotes a string and &amp;quot; will be used in place of the single quote (&#039;).&lt;br /&gt;
:+ means to concatenate the two parts, though how will be implementation specific, for example + can be used to concatenate strings.&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;first&amp;quot;: &amp;lt;first&amp;gt; -- first name of the avatar.&lt;br /&gt;
:&amp;quot;last&amp;quot;: &amp;lt;last&amp;gt; -- last name of the avatar.&lt;br /&gt;
:&amp;quot;passwd&amp;quot;: &#039;$1$&#039; + &amp;lt;passwd_md5&amp;gt; -- the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&amp;quot;start&amp;quot;: [&amp;quot;first&amp;quot; | &amp;quot;last&amp;quot; | &amp;lt;existing simulator&amp;gt; ] -- attempt to log in to this sim, though if it is full or not available, or the agent is not allowed, another sim could be used.&lt;br /&gt;
:&amp;quot;major&amp;quot;: &amp;lt;major revision&amp;gt; -- the major revision number of the client as a string. Currently always 1.&lt;br /&gt;
:&amp;quot;minor&amp;quot;: &amp;lt;minor revision&amp;gt; -- the minor revision number of the client as a string.&lt;br /&gt;
:&amp;quot;patch&amp;quot;: &amp;lt;patch number&amp;gt; -- patch number of the client as a string.&lt;br /&gt;
:&amp;quot;build&amp;quot;: &amp;lt;build&amp;gt; -- build number of the client as a string.&lt;br /&gt;
:&amp;quot;platform&amp;quot;: [&amp;quot;Lin&amp;quot; | &amp;quot;Mac&amp;quot; | &amp;quot;Win&amp;quot;] -- the platform of the client. &lt;br /&gt;
:&amp;quot;mac&amp;quot;: &amp;lt;MAC Address&amp;gt; -- the MAC address associated with the client&#039;s computer.&lt;br /&gt;
:&amp;quot;options&amp;quot;: &amp;lt;optional_login&amp;gt; -- optional array of character strings. (See below)&lt;br /&gt;
:&amp;quot;user-agent&amp;quot;: &amp;quot;sl.py 0.1&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;id0&amp;quot;: &amp;quot;&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;agree_to_tos&amp;quot;: [&amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | &amp;quot;&amp;quot;] -- whether or not the user has agreed to the Terms of Service. Possible values may be: &amp;quot;&amp;quot;, &amp;quot;true&amp;quot;, &amp;quot;false&amp;quot;.&lt;br /&gt;
:&amp;quot;viewer_digest&amp;quot;: &amp;quot;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&amp;quot; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
[http://www.libsecondlife.org/wiki/Login] -- libsl login page, includes sample code.&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41154</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41154"/>
		<updated>2007-11-21T05:45:09Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Optional Parameters */ remove carriage return&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
On this page the following conventions are used:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;in quotes is a literal string&amp;quot;&lt;br /&gt;
:[ represents a list of choices | separated by a vertical bar ]&lt;br /&gt;
:&amp;lt; represents a value which can be substituted by an appropriate string described inside &amp;gt; &lt;br /&gt;
:&#039;represents a string that must be quoted, but how will be implementation specific&#039; for example in LSL &amp;quot;&amp;quot; denotes a string and &amp;quot; will be used in place of the single quote (&#039;).&lt;br /&gt;
:+ means to concatenate the two parts, though how will be implementation specific, for example + can be used to concatenate strings.&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;first&amp;quot;: &amp;lt;first&amp;gt; -- first name of the avatar.&lt;br /&gt;
:&amp;quot;last&amp;quot;: &amp;lt;last&amp;gt; -- last name of the avatar.&lt;br /&gt;
:&amp;quot;passwd&amp;quot;: &#039;$1$&#039; + &amp;lt;passwd_md5&amp;gt; -- the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&amp;quot;start&amp;quot;: [&amp;quot;first&amp;quot; | &amp;quot;last&amp;quot; | &amp;lt;existing simulator&amp;gt; ] -- attempt to log in to this sim, though if it is full or not available, or the agent is not allowed, another sim could be used.&lt;br /&gt;
:&amp;quot;major&amp;quot;: &amp;lt;major revision&amp;gt; -- the major revision number of the client as a string. Currently always 1.&lt;br /&gt;
:&amp;quot;minor&amp;quot;: &amp;lt;minor revision&amp;gt; -- the minor revision number of the client as a string.&lt;br /&gt;
:&amp;quot;patch&amp;quot;: &amp;lt;patch number&amp;gt; -- patch number of the client as a string.&lt;br /&gt;
:&amp;quot;build&amp;quot;: &amp;lt;build&amp;gt; -- build number of the client as a string.&lt;br /&gt;
:&amp;quot;platform&amp;quot;: [&amp;quot;Lin&amp;quot; | &amp;quot;Mac&amp;quot; | &amp;quot;Win&amp;quot;] -- the platform of the client. &lt;br /&gt;
:&amp;quot;mac&amp;quot;: &amp;lt;MAC Address&amp;gt; -- the MAC address associated with the client&#039;s computer.&lt;br /&gt;
:&amp;quot;options&amp;quot;: &amp;lt;optional_login&amp;gt; -- optional array of character strings. (See below)&lt;br /&gt;
:&amp;quot;user-agent&amp;quot;: &amp;quot;sl.py 0.1&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;id0&amp;quot;: &amp;quot;&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;agree_to_tos&amp;quot;: [&amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | &amp;quot;&amp;quot;] -- whether or not the user has agreed to the Terms of Service. Possible values may be: &amp;quot;&amp;quot;, &amp;quot;true&amp;quot;, &amp;quot;false&amp;quot;.&lt;br /&gt;
:&amp;quot;viewer_digest&amp;quot;: &amp;quot;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&amp;quot; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41153</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41153"/>
		<updated>2007-11-21T05:43:58Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Conventions */ format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
On this page the following conventions are used:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;in quotes is a literal string&amp;quot;&lt;br /&gt;
:[ represents a list of choices | separated by a vertical bar ]&lt;br /&gt;
:&amp;lt; represents a value which can be substituted by an appropriate string described inside &amp;gt; &lt;br /&gt;
:&#039;represents a string that must be quoted, but how will be implementation specific&#039; for example in LSL &amp;quot;&amp;quot; denotes a string and &amp;quot; will be used in place of the single quote (&#039;).&lt;br /&gt;
:+ means to concatenate the two parts, though how will be implementation specific, for example + can be used to concatenate strings.&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;first&amp;quot;: &amp;lt;first&amp;gt; -- first name of the avatar.&lt;br /&gt;
:&amp;quot;last&amp;quot;: &amp;lt;last&amp;gt; -- last name of the avatar.&lt;br /&gt;
:&amp;quot;passwd&amp;quot;: &#039;$1$&#039; + &amp;lt;passwd_md5&amp;gt; -- the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&amp;quot;start&amp;quot;: [&amp;quot;first&amp;quot; | &amp;quot;last&amp;quot; | &amp;lt;existing simulator&amp;gt; ] -- attempt to log in to this sim, though if it is full or not available, or the agent is not allowed, another sim could be used.&lt;br /&gt;
:&amp;quot;major&amp;quot;: &amp;lt;major revision&amp;gt; -- the major revision number of the client as a string. Currently always 1.&lt;br /&gt;
:&amp;quot;minor&amp;quot;: &amp;lt;minor revision&amp;gt; -- the minor revision number of the client as a string.&lt;br /&gt;
:&amp;quot;patch&amp;quot;: &amp;lt;patch number&amp;gt; -- patch number of the client as a string.&lt;br /&gt;
:&amp;quot;build&amp;quot;: &amp;lt;build&amp;gt; -- build number of the client as a string.&lt;br /&gt;
:&amp;quot;platform&amp;quot;: [&amp;quot;Lin&amp;quot; | &amp;quot;Mac&amp;quot; | &amp;quot;Win&amp;quot;] -- the platform of the client. &lt;br /&gt;
:&amp;quot;mac&amp;quot;: &amp;lt;MAC Address&amp;gt; -- the MAC address associated with the client&#039;s computer.&lt;br /&gt;
:&amp;quot;options&amp;quot;: &amp;lt;optional_login&amp;gt; -- optional array of character strings. (See below)&lt;br /&gt;
:&amp;quot;user-agent&amp;quot;: &amp;quot;sl.py 0.1&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;id0&amp;quot;: &amp;quot;&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;agree_to_tos&amp;quot;: [&amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | &amp;quot;&amp;quot;] -- whether or not the user has agreed to the Terms of Service. Possible values may be: &amp;quot;&amp;quot;, &amp;quot;true&amp;quot;, &amp;quot;false&amp;quot;.&lt;br /&gt;
:&amp;quot;viewer_digest&amp;quot;: &amp;quot;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&amp;quot; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41152</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41152"/>
		<updated>2007-11-21T05:42:25Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Required parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
On this page the following conventions are used:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;in quotes is a literal string&amp;quot;&lt;br /&gt;
[ represents a list of choices | separated by a vertical bar ]&lt;br /&gt;
&amp;lt; represents a value which can be substituted by an appropriate string described inside &amp;gt; &lt;br /&gt;
&#039;represents a string that must be quoted, but how will be implementation specific&#039; for example in LSL &amp;quot;&amp;quot; denotes a string and &amp;quot; will be used in place of the single quote (&#039;).&lt;br /&gt;
+ means to concatenate the two parts, though how will be implementation specific, for example + can be used to concatenate strings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;first&amp;quot;: &amp;lt;first&amp;gt; -- first name of the avatar.&lt;br /&gt;
:&amp;quot;last&amp;quot;: &amp;lt;last&amp;gt; -- last name of the avatar.&lt;br /&gt;
:&amp;quot;passwd&amp;quot;: &#039;$1$&#039; + &amp;lt;passwd_md5&amp;gt; -- the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&amp;quot;start&amp;quot;: [&amp;quot;first&amp;quot; | &amp;quot;last&amp;quot; | &amp;lt;existing simulator&amp;gt; ] -- attempt to log in to this sim, though if it is full or not available, or the agent is not allowed, another sim could be used.&lt;br /&gt;
:&amp;quot;major&amp;quot;: &amp;lt;major revision&amp;gt; -- the major revision number of the client as a string. Currently always 1.&lt;br /&gt;
:&amp;quot;minor&amp;quot;: &amp;lt;minor revision&amp;gt; -- the minor revision number of the client as a string.&lt;br /&gt;
:&amp;quot;patch&amp;quot;: &amp;lt;patch number&amp;gt; -- patch number of the client as a string.&lt;br /&gt;
:&amp;quot;build&amp;quot;: &amp;lt;build&amp;gt; -- build number of the client as a string.&lt;br /&gt;
:&amp;quot;platform&amp;quot;: [&amp;quot;Lin&amp;quot; | &amp;quot;Mac&amp;quot; | &amp;quot;Win&amp;quot;] -- the platform of the client. &lt;br /&gt;
:&amp;quot;mac&amp;quot;: &amp;lt;MAC Address&amp;gt; -- the MAC address associated with the client&#039;s computer.&lt;br /&gt;
:&amp;quot;options&amp;quot;: &amp;lt;optional_login&amp;gt; -- optional array of character strings. (See below)&lt;br /&gt;
:&amp;quot;user-agent&amp;quot;: &amp;quot;sl.py 0.1&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;id0&amp;quot;: &amp;quot;&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;agree_to_tos&amp;quot;: [&amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | &amp;quot;&amp;quot;] -- whether or not the user has agreed to the Terms of Service. Possible values may be: &amp;quot;&amp;quot;, &amp;quot;true&amp;quot;, &amp;quot;false&amp;quot;.&lt;br /&gt;
:&amp;quot;viewer_digest&amp;quot;: &amp;quot;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&amp;quot; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41151</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41151"/>
		<updated>2007-11-21T05:41:25Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: conventions and first attempt to regularize&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
On this page the following conventions are used:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;in quotes is a literal string&amp;quot;&lt;br /&gt;
[ represents a list of choices | separated by a vertical bar ]&lt;br /&gt;
&amp;lt; represents a value which can be substituted by an appropriate string described inside &amp;gt; &lt;br /&gt;
&#039;represents a string that must be quoted, but how will be implementation specific&#039; for example in LSL &amp;quot;&amp;quot; denotes a string and &amp;quot; will be used in place of the single quote (&#039;).&lt;br /&gt;
+ means to concatenate the two parts, though how will be implementation specific, for example + can be used to concatenate strings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;first&amp;quot;: &amp;lt;first&amp;gt; -- first name of the avatar.&lt;br /&gt;
:&amp;quot;last&amp;quot;: &amp;lt;last&amp;gt; -- last name of the avatar.&lt;br /&gt;
:&amp;quot;passwd&amp;quot;: &#039;$1$&#039; + &amp;lt;passwd_md5&amp;gt; -- the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&amp;quot;start&amp;quot;: [&amp;quot;first&amp;quot; | &amp;quot;last&amp;quot; | &amp;lt;existing simulator&amp;gt; ] -- attempt to log in to this sim, though if it is full or not available, or the agent is not allowed, another sim could be used.&lt;br /&gt;
:&amp;quot;major&amp;quot;: &amp;lt;major revision&amp;gt; -- the major revision number of the client as a string. Currently always 1.&lt;br /&gt;
:&amp;quot;minor&amp;quot;: &amp;lt;minor revision&amp;gt; -- the minor revision number of the client as a string.&lt;br /&gt;
:&amp;quot;patch&amp;quot;: &amp;lt;patch number&amp;gt; -- patch number of the client as a string.&lt;br /&gt;
:&amp;quot;build&amp;quot;: &amp;lt;3&amp;gt; -- build number of the client as a string.&lt;br /&gt;
:&amp;quot;platform&amp;quot;: [&amp;quot;Lin&amp;quot; | &amp;quot;Mac&amp;quot; | &amp;quot;Win&amp;quot;] -- the platform of the client. &lt;br /&gt;
:&amp;quot;mac&amp;quot;: &amp;lt;MAC Address&amp;gt; -- the MAC address associated with the client&#039;s computer.&lt;br /&gt;
:&amp;quot;options&amp;quot;: &amp;lt;optional_login&amp;gt; -- optional array of character strings. (See below)&lt;br /&gt;
:&amp;quot;user-agent&amp;quot;: &amp;quot;sl.py 0.1&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;id0&amp;quot;: &amp;quot;&amp;quot; -- unknown.&lt;br /&gt;
:&amp;quot;agree_to_tos&amp;quot;: [&amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | &amp;quot;&amp;quot;] -- whether or not the user has agreed to the Terms of Service. Possible values may be: &amp;quot;&amp;quot;, &amp;quot;true&amp;quot;, &amp;quot;false&amp;quot;.&lt;br /&gt;
:&amp;quot;viewer_digest&amp;quot;: &amp;quot;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&amp;quot; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41150</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41150"/>
		<updated>2007-11-21T05:18:39Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Required parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&#039;first&#039;: first -- first name of the avatar.&lt;br /&gt;
:&#039;last&#039;: last -- last name of the avatar.&lt;br /&gt;
:&#039;passwd&#039;: passwd_md5 --the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&#039;start&#039;: &#039;last&#039; -- the login sim. Possible values are &amp;quot;home&amp;quot;, last&amp;quot;, and an existing simulator name.&lt;br /&gt;
:&#039;major&#039;: &#039;1&#039; -- the major revision number of the client.&lt;br /&gt;
:&#039;minor&#039;: &#039;18&#039; -- the minor revision number of the client.&lt;br /&gt;
:&#039;patch&#039;: &#039;4&#039; -- patch number of the client.&lt;br /&gt;
:&#039;build&#039;: &#039;3&#039; -- build number of the client.&lt;br /&gt;
:&#039;platform&#039;: platform  -- the platform of the client. Possible values may include: &amp;quot;Lin&amp;quot;, &amp;quot;Mac&amp;quot;, and &amp;quot;Win&amp;quot;.&lt;br /&gt;
:&#039;mac&#039;: mac -- the MAC number associated with  the client&#039;s computer&lt;br /&gt;
:&#039;options&#039;: optional_login --optional array of character strings. (See below)&lt;br /&gt;
:&#039;user-agent&#039;: &#039;sl.py 0.1&#039; -- unknown.&lt;br /&gt;
:&#039;id0&#039;: &#039;&#039; -- unknown.&lt;br /&gt;
:&#039;agree_to_tos&#039;: &#039;&#039; -- whether or not the user has agreed to the Terms of Service. Possible values may be: &amp;quot;&amp;quot;, &amp;quot;true&amp;quot;, &amp;quot;false&amp;quot;.&lt;br /&gt;
:&#039;viewer_digest&#039;: &#039;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&#039; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41149</id>
		<title>Current login protocols</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Current_login_protocols&amp;diff=41149"/>
		<updated>2007-11-21T05:17:54Z</updated>

		<summary type="html">&lt;p&gt;Lillie Yifu: /* Required parameters */ miorn regularized punctuation and spacing, one typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current login involves sending an xmlrpc message to a Second Life login server and parsing the returned value.&lt;br /&gt;
&lt;br /&gt;
The login parameters are all &amp;quot;structs&amp;quot;: key, value pairs. All keys and values are simple key, value pairs, except the value associated with &amp;quot;options&amp;quot; which is an array of zero or more character strings. The order of the required structs doesn&#039;t seem to matter. Likewise, the character strings in the options array may appear in any order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Required parameters==&lt;br /&gt;
The following explains the standard key value pairs, with an explanation of &amp;quot;options&amp;quot; at the end:&lt;br /&gt;
&lt;br /&gt;
:&#039;first&#039;: first --first name of the avatar.&lt;br /&gt;
:&#039;last&#039;: last -- last name of the avatar.&lt;br /&gt;
:&#039;passwd&#039;: passwd_md5 --the avatar password encrypted using MD5 encryption.&lt;br /&gt;
:&#039;start&#039;: &#039;last&#039; -- the login sim. Possible values are &amp;quot;home&amp;quot;, last&amp;quot;, and an existing simulator name.&lt;br /&gt;
:&#039;major&#039;: &#039;1&#039; -- the major revision number of the client.&lt;br /&gt;
:&#039;minor&#039;: &#039;18&#039; -- the minor revision number of the client.&lt;br /&gt;
:&#039;patch&#039;: &#039;4&#039; -- patch number of the client.&lt;br /&gt;
:&#039;build&#039;: &#039;3&#039; -- build number of the client.&lt;br /&gt;
:&#039;platform&#039;: platform  -- the platform of the client. Possible values may include: &amp;quot;Lin&amp;quot;, &amp;quot;Mac&amp;quot;, and &amp;quot;Win&amp;quot;.&lt;br /&gt;
:&#039;mac&#039;: mac -- the MAC number associated with  the client&#039;s computer&lt;br /&gt;
:&#039;options&#039;: optional_login --optional array of character strings. (See below)&lt;br /&gt;
:&#039;user-agent&#039;: &#039;sl.py 0.1&#039; -- unknown.&lt;br /&gt;
:&#039;id0&#039;: &#039;&#039; -- unknown.&lt;br /&gt;
:&#039;agree_to_tos&#039;: &#039;&#039; -- whether or not the user has agreed to the Terms of Service. Possible values may be: &amp;quot;&amp;quot;, &amp;quot;true&amp;quot;, &amp;quot;false&amp;quot;.&lt;br /&gt;
:&#039;viewer_digest&#039;: &#039;09d93740-8f37-c418-fbf2-2a78c7b0d1ea&#039; -- unknown.&lt;br /&gt;
&lt;br /&gt;
==Optional Parameters==&lt;br /&gt;
Zero or more of the  following character strings may appear in any order in the array following the &amp;quot;options&amp;quot; keyword: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;inventory-root&amp;quot; -- refers to the UUID of the root inventory folder in the client&#039;s inventory window&lt;br /&gt;
:&amp;quot;inventory-skeleton&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-root&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-lib-owner&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;inventory-skel-lib&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;gestures&amp;quot; -- refers to the list of UUIDs that an avatar will perform&lt;br /&gt;
:&amp;quot;event_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;event_notifications&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;classified_categories&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;buddy-list&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;ui-config&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;login-flags&amp;quot; -- unknown&lt;br /&gt;
:&amp;quot;global-textures&amp;quot; unknown&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
</feed>