<?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=Grandma+Bates</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=Grandma+Bates"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Grandma_Bates"/>
	<updated>2026-05-26T00:37:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Direct_Delivery_and_Automatic_Notification_System&amp;diff=1185463</id>
		<title>Direct Delivery and Automatic Notification System</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Direct_Delivery_and_Automatic_Notification_System&amp;diff=1185463"/>
		<updated>2013-12-22T15:03:37Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Validating an ANS/SLM Transaction Record */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the early days of the SL Exchange virtual goods sales website, the authors of the site implemented a feature that came to be known as “Automatic Notification System” or ANS for short. Details about every sale made through the website were bundled into a single transaction and forwarded to either an outside website or an In-World object.&lt;br /&gt;
&lt;br /&gt;
SL Exchange then changed their name to XStreet SL, at which point Linden Lab purchased it and then retired it in favor of their new SL Marketplace. After the release of the SL Marketplace, they continued to support the ANS feature and even enhanced it some by redefining some of the values provided and reusing some that had fallen into disuse.&lt;br /&gt;
&lt;br /&gt;
Now that Linden Lab has released their Direct Delivery service, the ANS feature has again been modified to support the same functionality and to ensure its viability into the future.&lt;br /&gt;
&lt;br /&gt;
== Who Should Read This Document ==&lt;br /&gt;
If you are a Merchant already using ANS as it exists for support of sales made through the Magic Box then you will want to read this document to learn how it has been changed and what you will need to do in order to support the new format and features of ANS.&lt;br /&gt;
&lt;br /&gt;
If you are a Merchant that is either not familiar with ANS or is not currently using it but you would like more control over your sales and customer data, you should read this document to learn how it might help you track sales, support your customers, compile marketing and advertising data and give you better information about your business.&lt;br /&gt;
&lt;br /&gt;
== ANS Overview ==&lt;br /&gt;
The ANS feature of the SL Marketplace forwards information about every sale made on the SL Marketplace to an outside website. A program or web page on the receiving site is responsible for accepting the information, called an ANS Transaction Record, and processing it in whatever fashion is desired. That program or web page is called the “ANS Processor”.&lt;br /&gt;
&lt;br /&gt;
In order to make use of the ANS Transaction Record, you must be capable of writing and hosting the ANS Processor yourself; Linden Lab does not provide this service. If you are not able to do the programming yourself but you wish to utilize the information provided by ANS, you may wish to contact one of the third-parties that offers ANS Processing Services.&lt;br /&gt;
&lt;br /&gt;
== Versions of ANS ==&lt;br /&gt;
There are two different versions of ANS presently supported by the SL Marketplace. One version called “ANS/XS” supports sales delivered only from a Magic Box. It is sent by the old XStreet SL website and has been in use by the SL Marketplace. The other version called “ANS/SLM” supports sales delivered via Magic Boxes or Direct Delivery and is sent by the SL Marketplace. Most of the information provided by the two versions is identical; however there are key differences that are important to understand.&lt;br /&gt;
&lt;br /&gt;
{{NormalNote|It is possible to have both versions of ANS active at the same time. If you are already using ANS/XS and begin using ANS/SLM then you will receive two transactions for products delivered by a Magic Box, one from each source. Your ANS Processor should be capable of accepting duplicated transactions.}}&lt;br /&gt;
=== ANS/XS – ANS for XStreet SL ===&lt;br /&gt;
The ANS Transaction Record sent by the XStreet SL website defines the item delivered and specific details about the product on the SL Marketplace. The transaction record also includes information needed to verify that the record is correct and represents a valid sale. ANS/XS is capable of sending the ANS Transaction Record to either an external website or to an In-World Object. Note that the ANS Transaction Record is sent only for sales delivered by a Magic Box.&lt;br /&gt;
&lt;br /&gt;
=== ANS/SLM – ANS for the SL Marketplace ===&lt;br /&gt;
The ANS Transaction Record sent from the SL Marketplace website contains the same basic information. However the method of validating an ANS/SLM transaction varies significantly from that used for ANS/XS. Furthermore the ANS/SLM version will only send an ANS Transaction Record to an external website; it does not support sending the record to an In-World Object. &#039;&#039;The ANS/SLM Transaction Record is sent for every sale regardless of the delivery method, Magic Box or Direct Delivery.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Basic ANS Transaction Record ==&lt;br /&gt;
The basic ANS Transaction Record contains the following information. Note that the order of the fields is not important; your ANS Processor should be capable of accepting the fields in any order provided.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | style=&amp;quot;border-collapse:collapse; padding:4px; border:1px solid black; background-color:#eee&amp;quot;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Field Name&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Type&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Size&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Comments&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Currency&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | The type of currency used for the purchase.&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 10&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Always &amp;quot;SLL&amp;quot;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Type&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | The type of transaction&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 50&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Always &amp;quot;Purchase&amp;quot;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | PaymentGross&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | The total amount of the purchase price paid&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 12&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | PaymentFee&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | The commission fee charged by the SL Marketplace&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 12&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | PayerName&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | The Purchaser’s Account Name&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 100&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Note 5&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | PayerKey&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | The Purchaser’s Avatar UUID&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 36&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | ReceiverName&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | The Receiver’s Account Name&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 100&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Note 5&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | ReceiverKey&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | The Receiver’s Avatar UUID&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 36&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | MerchantName&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | The Merchant’s Account Name&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 100&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Note 5&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | MerchantKey&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | The Merchant’s Avatar UUID&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 36&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | TransactionID&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | SL Marketplace Order Number&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | bigint&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 20&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | ItemID&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | SL Marketplace Product ID Number&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | int&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 10&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Note 1&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | ItemName&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | SL Marketplace Product Name&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 100&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Note 2&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | InventoryName&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Magic Box Contents Object Name&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 100&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Note 3&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Location&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | SL Marketplace Order Line Item ID Number&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 40&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Note 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note 1: Every product listed on the SL Marketplace is assigned a unique Product ID Number. You can determine a product’s ID Number by examining the URL of the Product’s Listing page. The Product ID Number is the last part of the URL.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note 2: This is the Item Name as shown on the Product’s Listing Page on the SL Marketplace.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note 3: This is the name of the Inventory Object or the Top-Level Folder delivered when the Product is purchased. In the case of ANS/XS it will always be the name of the Object contained within the Contents of the Magic Box. For ANS/SLM it is the name of the Object (if delivered from a Magic Box) or the  Top-Level Folder (if delivered via Direct Delivery).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note 4: Orders on the SL Marketplace may contain up to 10 separate items, each detailed on a separate line. The Line Item ID Number uniquely identifies the specific line item within the Order.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note 5: The Account Name is either two words for older &amp;quot;Legacy&amp;quot; names or one word for newer single-word accounts; the last name &amp;quot;Resident&amp;quot; is not included for single-word account names.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ANS/XS Specific Fields ===&lt;br /&gt;
When a product is delivered from a Magic Box, there is one additional field included that will contain important data as follows:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | style=&amp;quot;border-collapse:collapse; padding:4px; border:1px solid black; background-color:#eee&amp;quot;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Field Name&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Type&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Size&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Comments&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | VerifyKey&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Transaction Specific Verification Key&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 100&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The VerifyKey field will contain a 32-character string that is supplied to the XStreetSL.com website for verification. If the ANS Transaction is valid, the XStreetSL.com website will return “SUCCESS”; otherwise it will return “FAILURE”.&lt;br /&gt;
&lt;br /&gt;
In order to verify each transaction, your ANS/XS Processor must perform an HTTP GET to the following URL:&lt;br /&gt;
&lt;br /&gt;
{{Indent60px|&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;https://www.xstreetsl.com/ans.php?VerifyKey=&amp;amp;lt;VerifyKey&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
You must include the 32-character string supplied in the VerifyKey field as part of the URL as shown above.&lt;br /&gt;
&lt;br /&gt;
=== ANS/SLM Specific Fields ===&lt;br /&gt;
When a product is delivered from the SL Marketplace, the VerifyKey field is included but it will always be empty and thus can be disregarded. Additionally the Region field contains the hard-coded text “SLM”. This field can be used to verify that the source of the ANS Transaction is the SL Marketplace.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | style=&amp;quot;border-collapse:collapse; padding:4px; border:1px solid black; background-color:#eee&amp;quot;&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Field Name&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Type&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Size&lt;br /&gt;
! style=&amp;quot;padding:4px; border:1px solid gray; background-color:black; color:white&amp;quot; | Comments&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | VerifyKey&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Transaction Specific Verification Key&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 100&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Always empty&lt;br /&gt;
|- style=&amp;quot;padding:4px; border:1px solid gray&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Region&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Website Identifier&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | varchar&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | 100&lt;br /&gt;
| style=&amp;quot;padding:4px; border:1px solid gray&amp;quot; | Always &amp;quot;SLM&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Validating an ANS/SLM Transaction Record ===&lt;br /&gt;
Included in the HTTP Headers sent to your ANS/SLM Processor is a 40-character Verification Hash that can be used to compare against the 40-character SHA1 Hash calculated by your ANS/SLM Processor. The Verification Hash calculated by the SL Marketplace is provided in the X-ANS-Verify-Hash header field and can be read by accessing the “HTTP_X_ANS_VERIFY_HASH” header. In addition to the Verification Hash, your processor must also know your Merchant-specific Salt Code.&lt;br /&gt;
&lt;br /&gt;
When you set the URL of your ANS/SLM Processor in the Merchant ANS Configuration, a Salt Code will be generated and displayed. You must note the Salt Code and program it into your ANS/SLM Processor (or add it to your Third-Party Merchant Configuration). Once the Salt Code is known, you can calculate the Verification Hash and compare it against the Verification Hash provided in the X-ANS-Verify-Hash header.&lt;br /&gt;
&lt;br /&gt;
=PHP Example=&lt;br /&gt;
&lt;br /&gt;
Here is an example PHP snippet that retrieves the proper HTTP Header containing the Verification Hash provided by the SL Marketplace then uses the ANS Transaction Record and the Salt Code to calculate and compare to the Verification Hash.&lt;br /&gt;
&lt;br /&gt;
{{Indent60px|&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$myDDHash = $_SERVER[&#039;HTTP_X_ANS_VERIFY_HASH&#039;];&lt;br /&gt;
$myDDSalt = &amp;lt;Your Salt Code Here&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
$myCalcHash = sha1($_SERVER[&#039;QUERY_STRING&#039;] . $myDDSalt);&lt;br /&gt;
&lt;br /&gt;
if ($myDDHash == $myCalcHash) {&lt;br /&gt;
	echo &amp;quot;Valid ANS Transaction&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
	echo &amp;quot;Invalid ANS Transaction&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=C# Example=&lt;br /&gt;
Here&#039;s a corresponding .NET Framework 3.5/C# example:&lt;br /&gt;
&lt;br /&gt;
{{Indent60px|&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
// ANS Validation - Antonius Frentis&lt;br /&gt;
string calcHash;&lt;br /&gt;
string saltCode = &amp;quot;Your Salt Code Here&amp;quot;;&lt;br /&gt;
string serverHash = Request.Headers[&amp;quot;X-ANS-Verify-Hash&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
calcHash = FormsAuthentication.HashPasswordForStoringInConfigFile(Request.Url.Query.Remove(0,1) + saltCode, &amp;quot;SHA1&amp;quot;).ToLowerInvariant();&lt;br /&gt;
if (calcHash == serverHash)&lt;br /&gt;
{&lt;br /&gt;
	// Valid ANS Transaction&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	// Invalid ANS Transaction&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=Python Example=&lt;br /&gt;
&lt;br /&gt;
Here is an example in python to process the information sent and to check the verification hash. Note that the salt is hardcoded in the code, and it is provided simply as an example of how to process the fields and verify the message using python. &lt;br /&gt;
&lt;br /&gt;
Note that the code is assuming a UNIX environment. If you are in a linux environment the location of the python shell will likely have to be changed to be consistent with your system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;python&amp;gt;&lt;br /&gt;
#!/usr/local/bin/python&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import cgi&lt;br /&gt;
import hashlib&lt;br /&gt;
&lt;br /&gt;
# Open the file to write the information to and post the http header&lt;br /&gt;
fp = open(&amp;quot;/tmp/ans.txt&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
print(&amp;quot;Content-Type: text/html\n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
# Print out the verification hash&lt;br /&gt;
try:&lt;br /&gt;
      fp.write(&amp;quot;Verify: {0}\n&amp;quot;.format(os.environ[&#039;HTTP_X_ANS_VERIFY_HASH&#039;]))&lt;br /&gt;
except KeyError:&lt;br /&gt;
      print(&amp;quot;Error - no verification string sent&amp;quot;)&lt;br /&gt;
      fp.close()&lt;br /&gt;
      sys.exit()&lt;br /&gt;
&lt;br /&gt;
# Check to see if the query string is consistent with the verification&lt;br /&gt;
# hash&lt;br /&gt;
mySalt = &amp;quot;1234567890abcdef&amp;quot;   # This is the salt given to us in the market place&lt;br /&gt;
checkHash = hashlib.sha1()&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
      checkHash.update(os.environ[&#039;QUERY_STRING&#039;])&lt;br /&gt;
except KeyError:&lt;br /&gt;
      print(&amp;quot;Error - no query string sent&amp;quot;)&lt;br /&gt;
      fp.close()&lt;br /&gt;
      sys.exit()&lt;br /&gt;
&lt;br /&gt;
checkHash.update(mySalt)&lt;br /&gt;
fp.write(&amp;quot;Query string hash: {0}\n&amp;quot;.format(checkHash.hexdigest()))&lt;br /&gt;
&lt;br /&gt;
# Now print out all of the form fields &lt;br /&gt;
formValues = cgi.FieldStorage()&lt;br /&gt;
fp.write(&amp;quot;\n\nForm fields:\n&amp;quot;)&lt;br /&gt;
for a in formValues:&lt;br /&gt;
   fp.write(&amp;quot;{0}: {1}\n&amp;quot;.format(a,formValues.getfirst(a)))&lt;br /&gt;
&lt;br /&gt;
# Finally print out the uuid of the account that the item was sent to.&lt;br /&gt;
try:&lt;br /&gt;
  fp.write(&amp;quot;The uuid of the person who received this item is {0}\n&amp;quot;.format(\&lt;br /&gt;
      formValues.getfirst(&#039;ReceiverKey&#039;)))&lt;br /&gt;
except KeyError:&lt;br /&gt;
  fp.write(&amp;quot;There was no receiver listed.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
fp.flush()&lt;br /&gt;
fp.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The python code above will create a file /tmp/ans.txt which will resemble the following text:&lt;br /&gt;
&lt;br /&gt;
{{Indent60px|&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Verify: db10b66eafefe87e8484b0e9547ae28ce3763e86&lt;br /&gt;
Query string hash: db10b66eafefe87e8484b0e9547ae28ce3763e86&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Form fields:&lt;br /&gt;
ItemID: 5555555&lt;br /&gt;
ReceiverName: buyer resident&lt;br /&gt;
MerchantName: seller resident&lt;br /&gt;
MerchantKey: 111222333444555666&lt;br /&gt;
ReceiverKey: 777888999000aaabbb&lt;br /&gt;
InventoryName: Gift Card For You&lt;br /&gt;
Type: Purchase&lt;br /&gt;
Region: SLM&lt;br /&gt;
PaymentFee: 6&lt;br /&gt;
Currency: SLL&lt;br /&gt;
PaymentGross: 125&lt;br /&gt;
Location: 1234567890&lt;br /&gt;
PayerKey: 777888999000aaabbb&lt;br /&gt;
TransactionID: 998877665544&lt;br /&gt;
ItemName: Gift Card For You&lt;br /&gt;
PayerName: buyer resident&lt;br /&gt;
The uuid of the person who received this item is 777888999000aaabbb&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;}}&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Pathfinding_in_Second_Life&amp;diff=1172945</id>
		<title>Pathfinding in Second Life</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Pathfinding_in_Second_Life&amp;diff=1172945"/>
		<updated>2012-09-29T10:38:48Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: Added links to the create and delete character functions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Pathfinding Nav}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Multi-lang}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
At a high level, pathfinding provides tools and functions to enable smoother and smarter movement behavior for non-avatar entities in Second Life (for example, monsters in a game, rats in a haunted house, wisps in a fantasy forest).  We refer to these entities as &#039;&#039;characters&#039;&#039;; in gaming terminology, they are sometimes called &#039;&#039;NPCs&#039;&#039; (non-player characters) or &#039;&#039;mobs&#039;&#039; (mobile objects).&lt;br /&gt;
&lt;br /&gt;
Up till now, content creators had to use resource-intensive scripting workarounds to emulate intelligent character movement.  With the addition of pathfinding, content creators will have a much easier and better performing way of creating characters that can move around in the world. Characters can use LSL functions to avoid obstacles, move around corners, climb inclines, and move across region boundaries: things that were very difficult or even impossible before. Pathfinding will also enable new gameplay mechanics, such as creating food that attracts monsters.&lt;br /&gt;
&lt;br /&gt;
{{KBnote|Pathfinding is not an animation system.  It does not provide a way to animate a biped or quadruped in conjunction with the new movement functionality.  You must use existing methods to animate characters. Nevertheless, pathfinding enables more dynamic movement and provides a better system for controlling character movement than was previously possible.  For more information on creating animations, see [[Animation]].}}&lt;br /&gt;
&lt;br /&gt;
=== User group ===&lt;br /&gt;
The Pathfinding user group meets Thursdays at 4pm in the center of [http://slurl.com/secondlife/PathTest1/128/128/23/?&amp;amp;title=PathTest1 Pathtest1] on the Aditi test grid.&lt;br /&gt;
&lt;br /&gt;
Transcripts:&lt;br /&gt;
* [[Pathfinding_in_Second_Life/2012-06-07|2012-06-07]]&lt;br /&gt;
* [[Pathfinding_in_Second_Life/2012-05-31|2012-05-31]]&lt;br /&gt;
* [[Pathfinding_in_Second_Life/2012-05-17|2012-05-17]]&lt;br /&gt;
* [[Pathfinding_in_Second_Life/2012-05-10|2012-05-10]]&lt;br /&gt;
* [[Pathfinding_in_Second_Life/2012-05-03|2012-05-03]]&lt;br /&gt;
* [[Pathfinding_in_Second_Life/2012-04-19|2012-04-19]]&lt;br /&gt;
&lt;br /&gt;
=== LSL functions ===&lt;br /&gt;
The pathfinding LSL functions enable you to create characters that dynamically avoid obstacles while performing typical behaviors you might want in a game or other virtual experience, including: &lt;br /&gt;
* &#039;&#039;&#039;Create&#039;&#039;&#039; - Initialize an object to prepare it for using pathfinding functions. [[LlCreateCharacter]]&lt;br /&gt;
* &#039;&#039;&#039;Delete&#039;&#039;&#039; - Stop the object fro mresponding to pathfinding functions. [[LlDeleteCharacter]]&lt;br /&gt;
* &#039;&#039;&#039;Evade&#039;&#039;&#039; - Run away from a specified object or avatar.  See [[llEvade]].&lt;br /&gt;
* &#039;&#039;&#039;Flee&#039;&#039;&#039; - Attempt to get a specified distance from a specified location.  See [[llFleeFrom]].&lt;br /&gt;
* &#039;&#039;&#039;Navigate&#039;&#039;&#039; - Move to a specific location. See [[llNavigateTo]].&lt;br /&gt;
* &#039;&#039;&#039;Patrol&#039;&#039;&#039; - Move through a path defined by a set of &amp;quot;patrol points.&amp;quot; See [[llPatrolPoints]].&lt;br /&gt;
* &#039;&#039;&#039;Pursue&#039;&#039;&#039; - Chase a specified object or avatar. See [[llPursue]].&lt;br /&gt;
* &#039;&#039;&#039;Wander&#039;&#039;&#039; - Randomly move around a specified distance from a specified central point.  See [[llWanderWithin]].&lt;br /&gt;
* &#039;&#039;&#039;ExecCharacterCmd&#039;&#039;&#039; - Miscellaneous character-related functions such as stopping and jumping. See [[llExecCharacterCmd]].&lt;br /&gt;
* &#039;&#039;&#039;GetStaticPath&#039;&#039;&#039; - The only function which can be used on &#039;&#039;&#039;non&#039;&#039;&#039;-characters and on regions with dynamic pathfinding disabled. Returns a path to the goal. See [[llGetStaticPath]]&lt;br /&gt;
&lt;br /&gt;
For more details, see [[Pathfinding LSL Functions]].&lt;br /&gt;
&lt;br /&gt;
== Alpha release information ==&lt;br /&gt;
* [[Pathfinding/Alpha release notes]] - Restrictions, known issues, and tips on how to test the alpha version of Pathfinding on the Aditi test grid.&lt;br /&gt;
* [[Preview_Grid#How_do_I_log_in_to_Aditi.3F|How do I log into the Aditi test grid?]] - This test is being run on the Aditi test grid; for more information, read this article about Aditi and how you can log in.&lt;br /&gt;
* [[Pathfinding_Tools_in_the_Second_Life_Viewer]] - New tools in the Second Life Viewer to help you manage your Pathfinding characters and their environment.  Not yet publicly available.&lt;br /&gt;
* [[Pathfinding_Quick_Start_Guide]] - How to get your region up and running smoothly with Pathfinding.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Path_update&amp;diff=1172944</id>
		<title>Path update</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Path_update&amp;diff=1172944"/>
		<updated>2012-09-29T10:22:57Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: Replaced the fixed numbers with the pre-defined constants associated with pathfinding events.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Pathfinding]]{{LSL_Event&lt;br /&gt;
|event=path_update&lt;br /&gt;
|event_desc=Event description goes here.&lt;br /&gt;
|p1_type=integer|p1_name=type&lt;br /&gt;
|p1_desc=A &amp;lt;code&amp;gt;PU_*&amp;lt;/code&amp;gt;, it&#039;s the path event type&lt;br /&gt;
|p1_hover=A PU_* flag, it&#039;s the path event type&lt;br /&gt;
|p2_type=list|p2_name=reserved&lt;br /&gt;
|p2_desc=Reserved; not currently used.&lt;br /&gt;
|constants={{LSL_Constants/path_update}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* Note that if wandering, the &amp;quot;stop&amp;quot; (&amp;lt;code&amp;gt;{{LSL Const|PU_GOAL_REACHED|hex=0x01|ihex=1}}&amp;lt;/code&amp;gt;) type may never occur as a new goal may be chosen when near (&amp;lt;code&amp;gt;{{LSL Const|PU_SLOWDOWN_DISTANCE_REACHED|hex=0x00|ihex=0}}&amp;lt;/code&amp;gt;) the previous goal.&lt;br /&gt;
* When the character cannot navigate from the current position (&amp;lt;code&amp;gt;{{LSL Const|PU_FAILURE_INVALID_START|hex=0x02|ihex=2}}&amp;lt;/code&amp;gt;) [[llNavigateTo]] with the &amp;lt;code&amp;gt;{{LSL Const|FORCE_DIRECT_PATH|value=1}}&amp;lt;/code&amp;gt; option may be helpful.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llDeleteCharacter(); // Clear any previous character behaviors&lt;br /&gt;
        llCreateCharacter([CHARACTER_MAX_SPEED, 25, CHARACTER_DESIRED_SPEED, 15.0]);&lt;br /&gt;
        //MAX_SPEED is @ 20 by default&lt;br /&gt;
        &lt;br /&gt;
        llWanderWithin(llGetPos(), &amp;lt;10.0, 10.0,  10.0&amp;gt;, []);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    path_update(integer type, list reserved)&lt;br /&gt;
    {&lt;br /&gt;
        if (type == PU_SLOWDOWN_DISTANCE_REACHED)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Near&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PU_GOAL_REACHED)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Stopping&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PU_FAILURE_INVALID_START)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Cannot path find from current location! Attempting to go to the center of the region.&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            llNavigateTo(&amp;lt;128.0, 128.0, llGround(&amp;lt;128.0, 128.0, 0.0&amp;gt; - llGetPos())&amp;gt;, [FORCE_DIRECT_PATH, TRUE]);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PU_FAILURE_INVALID_GOAL)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Goal not on navmesh!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PU_FAILURE_UNREACHABLE)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Goal unreachable!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PU_FAILURE_TARGET_GONE)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Target gone!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PU_FAILURE_NO_VALID_DESTINATION)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;No place to go!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type ==  PU_EVADE_HIDDEN)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Hiding from pursuer...&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PU_EVADE_SPOTTED)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Switched from hiding to running...&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type ==  PU_FAILURE_NO_NAVMESH)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Region has no nav mesh..&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Dynamic pathfinding is disabled in this region.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PU_FAILURE_PARCEL_UNREACHABLE)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Parcel entry problem (is the parcel full?).&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PU_FAILURE_OTHER)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Hit an unspecified failure&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Unknown failure&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}		&lt;br /&gt;
&amp;lt;/lsl&amp;gt; &lt;br /&gt;
|also_functions=&lt;br /&gt;
* [[llCreateCharacter]]&lt;br /&gt;
* [[llDeleteCharacter]]&lt;br /&gt;
* [[llEvade]]&lt;br /&gt;
* [[llExecCharacterCmd]]&lt;br /&gt;
* [[llGetClosestNavPoint]]&lt;br /&gt;
* [[llFleeFrom]]&lt;br /&gt;
* [[llNavigateTo]]&lt;br /&gt;
* [[llPatrolPoints]]&lt;br /&gt;
* [[llPursue]]&lt;br /&gt;
* [[llUpdateCharacter]]&lt;br /&gt;
* [[llWanderWithin]]&lt;br /&gt;
|also_events&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LlList2ListStrided&amp;diff=1162757</id>
		<title>Talk:LlList2ListStrided</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LlList2ListStrided&amp;diff=1162757"/>
		<updated>2012-02-12T14:34:07Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Having some problems with this one, the page says:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;To get every second element in a &amp;quot;collection of data&amp;quot; in a strided list:&amp;quot;&lt;br /&gt;
&amp;lt;lsl&amp;gt;llList2ListStrided(llDeleteSubList(src, 0, 0), 0, -1, 3);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However that does not seem right, the last stride &#039;&#039;&#039;3&#039;&#039;&#039; should be a stride &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
With an input list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.250000,a,0.250000,b,0.250000,c,0.250000,d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and using stride &#039;&#039;&#039;3&#039;&#039;&#039; instead of stride &#039;&#039;&#039;2&#039;&#039;&#039;, I get:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a,0.250000,d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llList2ListStrided(llDeleteSubList(src, 0, 0), 0, -1, 2);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
with a stride of &#039;&#039;&#039;2&#039;&#039;&#039; at the end instead, I get the expected result:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
abcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It makes sense to me: we are returning just the &#039;&#039;&#039;second&#039;&#039;&#039; element, so there is no need for  a stride of &#039;&#039;&#039;3&#039;&#039;&#039;, but rather a stride of &#039;&#039;&#039;2&#039;&#039;&#039; and the first element deleted.&lt;br /&gt;
&lt;br /&gt;
I have changed it on the page, if I am wrong, please change it back.&lt;br /&gt;
&lt;br /&gt;
Kira Komarov 07:11, 8 January 2012 (PST)&lt;br /&gt;
&lt;br /&gt;
:There are a few problems with the article:&lt;br /&gt;
:*A sample value of &#039;&#039;&#039;src&#039;&#039;&#039; was not provided.&lt;br /&gt;
:*A description of &#039;&#039;&#039;src&#039;&#039;&#039; was not provided.&lt;br /&gt;
:*The example fails to correlate the value &#039;&#039;&#039;3&#039;&#039;&#039; with any requirement for the structure of &#039;&#039;&#039;src&#039;&#039;&#039; or that it is important.&lt;br /&gt;
:For your example, using a strided list where the stride is 2 (and not 3) you need to set the llList2ListStride stride parameter as 2 (and not 3).&lt;br /&gt;
:Since fixing the example to match your usecase isn&#039;t going to help anyone with a say a stride of 4 we need to fix the example as to remove all underlying confusion. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 11:30, 8 January 2012 (PST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Uhm, no...=&lt;br /&gt;
&lt;br /&gt;
Why do I even bother... Perhaps Linden should just put my account on hold again and put me out of my misery... Too many mobsters, I tell ya...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;There are a few problems with the article&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
First, I have no clue what you are talking about Strife, you mean the &#039;&#039;&#039;src&#039;&#039;&#039; in my example? Or the src on the page? Since you want a &amp;quot;sample&amp;quot;, I assume you are talking about the &#039;&#039;&#039;src&#039;&#039;&#039; in my example. Although I do say &amp;quot;with an input list&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.250000,a,0.250000,b,0.250000,c,0.250000,d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, I am not sure what you are talking about. What example? The example on the article page was broken (by [[User:Chaz Longstaff|Chaz Longstaff]] apparently at 11:06, 13 July 2008). That one?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For your example, using a strided list where the stride is 2 (and not 3) you need to set the llList2ListStride stride parameter as 2 (and not 3).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Thank you! Wait… Didn&#039;t I just say that in my first question? o.O&lt;br /&gt;
&lt;br /&gt;
No, you need to use &#039;&#039;&#039;2&#039;&#039;&#039; instead of &#039;&#039;&#039;3&#039;&#039;&#039; for &#039;&#039;every example&#039;&#039; where you want to get &#039;&#039;every second element in a strided list&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here is why:&lt;br /&gt;
&lt;br /&gt;
*takes a paper out, puts a fist in her cheek and sighs deeply...*&lt;br /&gt;
&lt;br /&gt;
Let S be an infinite abstract set of elements, such that:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S = ( s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13 ... )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where s0, s1, s2, … are elements of the set S.&lt;br /&gt;
&lt;br /&gt;
Let us assume that the set S is given by:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S = { i | i=[0, inf) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &#039;&#039;&#039;i&#039;&#039;&#039; is a number in the interval [0, inf).&lt;br /&gt;
&lt;br /&gt;
We proceed to prove by induction that S gives us that set:&lt;br /&gt;
&lt;br /&gt;
The base-case, for i=0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S_{0} = ( s0 ) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For i=1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S_{1} = ( s1 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For i=2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S_{2} = ( s2 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which seems correct, thus let i-&amp;gt;i+1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S_{i+1} = { i+1 | i=[1, inf) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
However, since lists in computer science are indexed starting from zero, we subtract one from the indexer i, thus obtaining:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S_{i} = { i | i=[0, inf) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
which is exactly what we had to prove. &lt;br /&gt;
&lt;br /&gt;
For kicks, let&#039;s run a few consistency checks:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S = ( s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13 ... )&lt;br /&gt;
S_{0} = ( s0 )&lt;br /&gt;
S_{1} = ( s1 )&lt;br /&gt;
S_{2} = ( s2 )&lt;br /&gt;
S_{3} = ( s3 )&lt;br /&gt;
S_{4} = { s4 )&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, let S&#039; be a new infinite abstract set, which will consist of every second (&#039;&#039;&#039;2&#039;&#039;&#039;-nd) element of the original set S:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S&#039;= { 2i-1 | i=[0, inf) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We proceed to prove by induction that S&#039; gives us that set:&lt;br /&gt;
&lt;br /&gt;
The base-case, for i=0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S&#039; = ( φ ) or, the element at index inf-1, in case of LSL wrap-around lists. This is why the code uses llDeleteList() to delete the first element.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For i=1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S&#039; = ( s1 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For i=2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S&#039; = ( s3 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which seems correct, thus let i-&amp;gt;i+1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S&#039;_{i+1} = { 2(i+1)-1 | i=[1, inf) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
However, since lists in computer science are indexed starting from zero, we subtract one from the indexer i, thus obtaining:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S&#039;_{i} = { 2i-1 | i=[0, inf) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
which is exactly what we had to prove.&lt;br /&gt;
&lt;br /&gt;
For kicks, let&#039;s run a few consistency checks:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
           S_{1}   S_{2}   S_{3}   S_{4}&lt;br /&gt;
            |       |       |       |&lt;br /&gt;
            |       |       |       |&lt;br /&gt;
            .       .       .       .&lt;br /&gt;
 S = ( s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13 ... )&lt;br /&gt;
&lt;br /&gt;
 S_{0} = ( φ )&lt;br /&gt;
 S_{1} = ( s1 )&lt;br /&gt;
 S_{2} = ( s3 )&lt;br /&gt;
 S_{3} = ( s5 )&lt;br /&gt;
 S_{4} = { s7 )&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One thing to note is that 2k+1 gives us odd numbers (2i+1 is what we would have gotten if we would not had subtracted one from the indexer):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
k = 0 =&amp;gt; i = 1&lt;br /&gt;
k = 1 =&amp;gt; i = 3&lt;br /&gt;
k = 2 =&amp;gt; i = 5&lt;br /&gt;
k = 3 =&amp;gt; i = 7&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and 2k gives us even numbers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
k = 0 =&amp;gt; i = 0&lt;br /&gt;
k = 1 =&amp;gt; i = 2&lt;br /&gt;
k = 2 =&amp;gt; i = 4&lt;br /&gt;
k = 3 =&amp;gt; i = 6&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The set of (positive) integers N is defined by an union between the set of odd and even numbers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
E = { 2k | k = [0, inf) }  set of even numbers&lt;br /&gt;
O = { 2k+1 | k = [0, inf) ] set of odd numbers&lt;br /&gt;
N = E U O&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
which gives us a set N (the natural number set) with every positive number without repetitions up to infinity. The same can be applied to the whole integer set Z, for negative numbers as well.&lt;br /&gt;
&lt;br /&gt;
That is, by combining the few examples we have above, we get:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0, 1, 2, 3, 4, 5, 6, 7...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, another thing to note, is that the base-case k=0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
S&#039;_{2 * 0 - 1} = S_{-1} = ( Φ )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gives us the empty set, or infinity-1 in LSL terms and that is why we delete the first element:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
llList2ListStrided(        llDeleteSubList(l, 0, 0)       , 0, -1, 2);&lt;br /&gt;
                                   ^&lt;br /&gt;
                                   |&lt;br /&gt;
                               right here&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hence:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list S&#039; = llList2ListStrided(llDeleteSubList(l, 0, 0), 0, -1, 2);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
is correct, instead of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list S&#039; = llList2ListStrided(llDeleteSubList(l, 0, 0), 0, -1, 3);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
with &#039;&#039;&#039;3&#039;&#039;, as it was written before on the wiki.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        list l = [0,1,2,3,4,5,6,7,8,9,10,11,12];&lt;br /&gt;
        list s = llList2ListStrided(llDeleteSubList(l, 0, 0), 0, -1, 2);&lt;br /&gt;
        llOwnerSay(llDumpList2String(s, &amp;quot; &amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Object: 1 3 5 7 9 11&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Counter-example, as the page was written before:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        list l = [0,1,2,3,4,5,6,7,8,9,10,11,12];&lt;br /&gt;
        list s = llList2ListStrided(llDeleteSubList(l, 0, 0), 0, -1, 3);&lt;br /&gt;
        llOwnerSay(llDumpList2String(s, &amp;quot; &amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Object: 1 4 7 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kira Komarov 13:11, 22 January 2012 (PST)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m not seeing the disagreement here. If we have a list containing 3 strides with a width of 3 that are all [1,2,3] so the list is [1,2,3,1,2,3,1,2,3], llList2ListStrided(llDeleteSubList([1,2,3,1,2,3,1,2,3], 0, 0), 0, -1, 3) == [2,2,2]. Second element of each stride. If [2,2,2] isn&#039;t a list of the second elements of each stride (of 3) of [1,2,3,1,2,3,1,2,3], what is it? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 18:09, 22 January 2012 (PST)&lt;br /&gt;
&lt;br /&gt;
=== Confusion in Notes Section ===&lt;br /&gt;
&lt;br /&gt;
I find the wording in the notes section (under Ranges &amp;amp; Indexes ) to be a bit confusing. The reference to the &amp;quot;range operated on&amp;quot; is not clear. I am not sure what would be better but it should be made clear that they are referring to the collection of entries in a single stride. For example, the reference to the variable start as indicating the range to start on should say that it indicates which set of strides the operation begins.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=1016873</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=1016873"/>
		<updated>2010-08-25T10:14:51Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;SLCertification is a community project guided by Linden Lab (see [[SL_Certification#Frequently_Asked_Questions|FAQ]]). This project page and its contents are not endorsed, managed or supervised by Linden Lab.  Linden Lab may link to this resource in the future solely as an informational service to the Second Life community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
The person should be able to go beyond an understanding of the commands and know how to achieve specific objectives. For example, the person should know how to use the llSitTarget command to have an avatar moved and rotated so that they will be looking at a specific location from a predefined distance. This requires that the person not only know how to use the llSitTarget command but also have a basic understanding of calculations of relative positions and rotations.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should also have a detailed understanding of what aspects of a prim are persistent properties and how to clear properties. For example, a person should know that text over an object is a property of the prim and know how to clear the text.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. (Note that this implies that an understanding of how rotations and offsets are changed in the context of attachments and can adjust scripts accordingly.) Scripts should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
The person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
A person seeking certification at the advanced level in this category must have a detailed understanding of permissions and controls and know how to use them in context. The person should be able to assemble scripts that can use the control system to get input from a person through their viewer and then relinquish the control in an appropriate way. The person should be able to do this in conjunction with the permissions system to animate or move an avatar and attachments on an avatar.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to obtain information about the ownership and settings for a given parcel. The person should be able to have the script react in appropriate ways with respect to the parcel settings. The person should be able to obtain the information for different parcels in any given relative position from the object containing the script. For example, at the advanced level the person should be able to construct a script that can map out all of the parcels and their respective properties in predetermined arc away from the object containing the script without moving the object.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Shared Media&lt;br /&gt;
# Interacting with forms and outside servers.&lt;br /&gt;
# Interacting with forms specified data:urls and sending information back to the same script via HTTP-in. &lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
# Difference between POST and Get for HTTP forms.&lt;br /&gt;
# At least one scripting language for obtaining information from an in-world script.&lt;br /&gt;
# Demonstrate at least one way to reliably retain information from an in-world script and relay it back to another in-world script.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate that they can establish secure and trusted relationships between separate objects that communicate in world. For example, the person should be able to demonstrate efficient techniques for a child object to establish a trusted connection with the object that rezzed it. The person should also demonstrate that they can establish secure and trusted connections between different objects that are not owned by the same person. For example, they should be able to demonstrate that they can verify that an object owned by another person and in a different group is a trusted object and share information with that object in a secure manner.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
A set of sample scripts for the advanced level rotations and vectors category can be found at http://slurl.com/secondlife/Hotspur/45/59/30 .&lt;br /&gt;
&lt;br /&gt;
==== Rotations and position ====&lt;br /&gt;
* using llSetPrimitiveParams to move and rotate at the same time&lt;br /&gt;
* Rotating and moving a prim to a specified orientation&lt;br /&gt;
** Absolute coordinates&lt;br /&gt;
** Relative coordinates (in a link set)&lt;br /&gt;
&lt;br /&gt;
The person should be able to move and rotate an object with a single command, llSetPrimitiveParams. The person should be able to move an object to a specified rotation and position. Moreover, the person should be able to combine multiple tasks from the intermediate section to move an object to a variety of orientations. For example, given a sequence of points in either local or absolute coordinates the person should be able to move and rotate an object to move along the points so that the objects orientation is consistent with the movement (i.e. it points along the path).&lt;br /&gt;
&lt;br /&gt;
==== Smooth movements ====&lt;br /&gt;
&lt;br /&gt;
===== Absolute coordinates =====&lt;br /&gt;
* Rotate and movement around the edge of a prim&lt;br /&gt;
* Rotate and move around a fixed point using a predefined axis&lt;br /&gt;
&lt;br /&gt;
The person should be able to calculate and move  an object so that it appears to rotate in a uniform way. The person should be able to do this around one edge of the object to make it appear to move in a uniform circular motion. For example, the person should be able to move an uncut prim like a door around an edge. The person should be able to do this around any arbitrary point. The person should also be able to rotate and move and object around any arbitrary axis as well.&lt;br /&gt;
&lt;br /&gt;
===== Local coordinates (within a linkset) =====&lt;br /&gt;
* Rotate and movement around the edge of a prim&lt;br /&gt;
* Rotate and move around a fixed point using a predefined axis&lt;br /&gt;
&lt;br /&gt;
This is the same as the previous tasks only in a relative coordinate system.&lt;br /&gt;
&lt;br /&gt;
==== Transitions ====&lt;br /&gt;
* Smooth movements from one orientation (position and rotation) to another.&lt;br /&gt;
&lt;br /&gt;
Given an initial and final orientation (position and rotation) the person should be able to move the object in a sequence of discrete points so that it appears to move smoothly from the initial to the final orientation.&lt;br /&gt;
&lt;br /&gt;
==== Determining specific orientations ====&lt;br /&gt;
&lt;br /&gt;
===== Absolute/Sim coordinates =====&lt;br /&gt;
* Given a point rotate an object to face the point.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points.&lt;br /&gt;
&lt;br /&gt;
This is similar to the Intermediate requirements. The difference here is that the movement from one orientation to another should be done in a number of steps to appear like a smoother movement. Also, the object should point in the specified direction but should maintain some sort of orientation. For example, the person should have one face of a box point toward a given location, but an arbitrary face should be pointing in an &amp;quot;upward&amp;quot; direction.&lt;br /&gt;
&lt;br /&gt;
===== Local  coordinates to local =====&lt;br /&gt;
* Given a point rotate an object to face a local point.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points. &lt;br /&gt;
&lt;br /&gt;
Similar to the previous task, but the objects should both be in the same local context.&lt;br /&gt;
&lt;br /&gt;
===== Local  coordinates to absolute =====&lt;br /&gt;
* Given a point rotate an object to face a point in absolute/sim coordinates.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points. &lt;br /&gt;
&lt;br /&gt;
Same as the previous task, but in this case one object should be in a local context and the other in a global context. For example, one prim in a linkset should be moved to face an object moving in a sim&#039;s global coordinate system.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
With respect to project management and the practice of writing programs, the same practices for comments discussed at the basic level must be maintained at the intermediate level. Programs submitted for evaluation are expected to include clear, consise, and consistent commenting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=1016863</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=1016863"/>
		<updated>2010-08-25T10:12:35Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Programming and Software Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;SLCertification is a community project guided by Linden Lab (see [[SL_Certification#Frequently_Asked_Questions|FAQ]]). This project page and its contents are not endorsed, managed or supervised by Linden Lab.  Linden Lab may link to this resource in the future solely as an informational service to the Second Life community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification, basic texture certification, and basic building certification.&lt;br /&gt;
&lt;br /&gt;
(Recommended) An application should have a basic understanding of algebraic functions.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object are included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color.&lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha(transparency)&lt;br /&gt;
# Commands for changing the alpha level.&lt;br /&gt;
# Difference between changing alpha level and the two different transparent textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures.&lt;br /&gt;
# Predefined constants for UUIDs of textures.&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles.&lt;br /&gt;
# Basic limitations of particles.&lt;br /&gt;
# Basic understanding on how to turn particles on and off.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the dataserver event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands associated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Basic understanding of the different types of permissions that may be obtained.&lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the dataserver event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the dataserver event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory, Land and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Note cards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory permissions.&lt;br /&gt;
&lt;br /&gt;
* Land&lt;br /&gt;
# Find the water level at a given position&lt;br /&gt;
# Find the normal to the terrain at a given position&lt;br /&gt;
# Find the slope to the terrain at a given position&lt;br /&gt;
# Find the owner of the parcel at a given position&lt;br /&gt;
# Use of the llGetParcelDetails command to get parcel information at a certain position. &lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types.&lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Chat commands&lt;br /&gt;
# Dialogs.&lt;br /&gt;
# Limitations of chat commands.&lt;br /&gt;
# Email.&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object.&lt;br /&gt;
# Commands to manipulate the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Shared Media&lt;br /&gt;
# Basic use of the llSetPrimMediaParams command to display web pages on a prim.&lt;br /&gt;
# Use of data:text/html format to specify web pages.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Commands for Force.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Impulse&lt;br /&gt;
# Commands for Impulse.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular impulse.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
The person who wants to achieve an intermediate rating for physics should know all of the basic commands for both linear and angular force as well as momentum. The person should know the difference between the local and global settings. The person should know the difference between the force/torque commands and the impulse commands.&lt;br /&gt;
&lt;br /&gt;
The person should know the relationship between force and impulse. Both are representations of Newton&#039;s Second Law where force is the differential form and impulse is the integral form. The person should understand the relationship between force, mass, and acceleration as well as the relationship between impulse and momentum.&lt;br /&gt;
&lt;br /&gt;
The very basic commands of scripting a vehicle should be known. At the intermediate level a person is not expected to be able to create a script for a vehicle but should understand the basic commands necessary for its functionality and alter an existing vehicle script.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events.&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
A person who wishes to achieve an intermediate certification in detection should know the different events in which detection is relevant. The person should know how the different detection commands are used within the different events. The person should know be able to construct scripts that make use of the events and detection routines and combine them. &lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to use sensors to detect a person. The person should know the difference between a repeating and one time sensor. The person should know how to construct scripts that make use of the sensor and no_sensor events. The person should know the limitations of the commands and understand the importance and how to narrowly define a sensor.&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
For the intermediate requirements a person should be able to take the ideas required for the basic requirements and implement them in LSL. More importantly the person should begin to demonstrate an ability to work with the definitions in specific contexts and solve basic problems using a script.&lt;br /&gt;
&lt;br /&gt;
==== Reference Frames ====&lt;br /&gt;
* Global&lt;br /&gt;
* Sim&lt;br /&gt;
* Local&lt;br /&gt;
&lt;br /&gt;
Similar to the basic requirements, but the person must be able to demonstrate an ability to move back and forth between global, sim, and local coordinates. For example, a script that is in a link set should be able to work with a coordinate passed to it from an object in the sim&#039;s reference frame and react accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands to get position information  ====&lt;br /&gt;
* llGetPos&lt;br /&gt;
* llGetLocalPos&lt;br /&gt;
* llGetRootPosition&lt;br /&gt;
* llGetRegionCorner&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate an understanding of the basic position commands for getting information about an object&#039;s position. The person must demonstrate an understanding how the command works in different global and local contexts.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands to get rotation information ====&lt;br /&gt;
* llGetRot&lt;br /&gt;
* llGetLocalRot&lt;br /&gt;
* llGetRootRotation&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate an understanding of the basic rotation commands for getting information about an object&#039;s rotation. The person must demonstrate an understanding how the command works in different global and local contexts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Basic commands for changing position ====&lt;br /&gt;
* llSetPos&lt;br /&gt;
* llSetPrimitiveParams&lt;br /&gt;
* llSetPos within different reference frames.&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate a basic understanding of how to move an object. The person should be able to move an object to specific points. This should be done in both local, sim, and global coordinate systems. For example, a person should be able to move a prim within a link set to a specific point in the sim&#039;s coordinate system. More importantly given two separate objects the person must be able to move a prim to points in a local context defined by the two objects.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands for changing and working with rotations ====&lt;br /&gt;
* llSetRot&lt;br /&gt;
* llSetLocalRot&lt;br /&gt;
* llSetPrimitiveParams&lt;br /&gt;
* llAxes2Rot&lt;br /&gt;
* llAxisAngle2Rot&lt;br /&gt;
* llRotBetween&lt;br /&gt;
* llRot2Axis&lt;br /&gt;
* llRot2Angle&lt;br /&gt;
* How the commands work in different reference frames.&lt;br /&gt;
* Rotations&lt;br /&gt;
** Multiplication and division of rotations&lt;br /&gt;
** Difference between left and right multiplication&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate a basic understanding of how to rotate an object. The person must be able to rotate an object to specific orientations. This should be done with a variety of different commands. The person should demonstrate an ability to calculate appropriate rotations given a variety of information. For example, the person should be able to calculate the rotation necessary to achieve a given orientation using an Euler rotation as well as making use of an axis of rotation and an angle.&lt;br /&gt;
&lt;br /&gt;
==== Working with vectors ====&lt;br /&gt;
* Finding a vector component in a given direction.&lt;br /&gt;
* Finding a vector perpendicular to two vectors.&lt;br /&gt;
* Finding a vector perpendicular to a plane.&lt;br /&gt;
&lt;br /&gt;
The person should be able to perform basic vector operations in LSL. The person should be able to calculate the components of a vector in arbitrary directions. The person should be able to do this in a variety of contexts such as using a plane or multiple vectors.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Work flow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;br /&gt;
&lt;br /&gt;
At the intermediate level the Programming and Software Development category includes greater in depth knowledge of the basic LSL commands. At this level the person should know how to use all of the flow commands and construct a wide variety of scripts that require all of the flow commands.&lt;br /&gt;
&lt;br /&gt;
In addition, the person should know and understand how to use all of the list commands. A person should be able to manipulate lists. For example, a person should be able to delete and insert sublists into an existing list. The person should be able to use strided list and know how to sort and randomize a list.  The person should also have a basic understanding of the memory overhead associated with a list.&lt;br /&gt;
&lt;br /&gt;
The person should also know and understand all of the string manipulation routines. The person should be able to manipulate strings. For example, a person should be able to delete and insert substrings into an existing string. The person should have a basic understanding of the memory overhead associated with strings.&lt;br /&gt;
&lt;br /&gt;
With respect to project management and the practice of writing programs, the same practices for comments discussed at the basic level must be maintained at the intermediate level. Programs submitted for evaluation are expected to include clear, consise, and consistent commenting.&lt;br /&gt;
&lt;br /&gt;
The person should be able to make use of at least one revision control system. The person should be able to maintain revisions and recall specific revisions. At this level a person does not need to know know how to find differences in revisions or be able to create and maintain a branch and merge the branch into an existing code base.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should understand how to create a broad, flexible plan to create and maintain a software project. The person should understand how the importance of creating a plan and developing an approach to a project before any coding is to begin. The person should understand the importance of flexibility and the importance of long term planning and how it relates to the code base.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=1016853</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=1016853"/>
		<updated>2010-08-25T10:10:52Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;SLCertification is a community project guided by Linden Lab (see [[SL_Certification#Frequently_Asked_Questions|FAQ]]). This project page and its contents are not endorsed, managed or supervised by Linden Lab.  Linden Lab may link to this resource in the future solely as an informational service to the Second Life community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification, basic texture certification, and basic building certification.&lt;br /&gt;
&lt;br /&gt;
(Recommended) An application should have a basic understanding of algebraic functions.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object are included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color.&lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha(transparency)&lt;br /&gt;
# Commands for changing the alpha level.&lt;br /&gt;
# Difference between changing alpha level and the two different transparent textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures.&lt;br /&gt;
# Predefined constants for UUIDs of textures.&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles.&lt;br /&gt;
# Basic limitations of particles.&lt;br /&gt;
# Basic understanding on how to turn particles on and off.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the dataserver event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands associated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Basic understanding of the different types of permissions that may be obtained.&lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the dataserver event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the dataserver event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory, Land and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Note cards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory permissions.&lt;br /&gt;
&lt;br /&gt;
* Land&lt;br /&gt;
# Find the water level at a given position&lt;br /&gt;
# Find the normal to the terrain at a given position&lt;br /&gt;
# Find the slope to the terrain at a given position&lt;br /&gt;
# Find the owner of the parcel at a given position&lt;br /&gt;
# Use of the llGetParcelDetails command to get parcel information at a certain position. &lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types.&lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Chat commands&lt;br /&gt;
# Dialogs.&lt;br /&gt;
# Limitations of chat commands.&lt;br /&gt;
# Email.&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object.&lt;br /&gt;
# Commands to manipulate the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Shared Media&lt;br /&gt;
# Basic use of the llSetPrimMediaParams command to display web pages on a prim.&lt;br /&gt;
# Use of data:text/html format to specify web pages.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Commands for Force.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Impulse&lt;br /&gt;
# Commands for Impulse.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular impulse.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
The person who wants to achieve an intermediate rating for physics should know all of the basic commands for both linear and angular force as well as momentum. The person should know the difference between the local and global settings. The person should know the difference between the force/torque commands and the impulse commands.&lt;br /&gt;
&lt;br /&gt;
The person should know the relationship between force and impulse. Both are representations of Newton&#039;s Second Law where force is the differential form and impulse is the integral form. The person should understand the relationship between force, mass, and acceleration as well as the relationship between impulse and momentum.&lt;br /&gt;
&lt;br /&gt;
The very basic commands of scripting a vehicle should be known. At the intermediate level a person is not expected to be able to create a script for a vehicle but should understand the basic commands necessary for its functionality and alter an existing vehicle script.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events.&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
A person who wishes to achieve an intermediate certification in detection should know the different events in which detection is relevant. The person should know how the different detection commands are used within the different events. The person should know be able to construct scripts that make use of the events and detection routines and combine them. &lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to use sensors to detect a person. The person should know the difference between a repeating and one time sensor. The person should know how to construct scripts that make use of the sensor and no_sensor events. The person should know the limitations of the commands and understand the importance and how to narrowly define a sensor.&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
For the intermediate requirements a person should be able to take the ideas required for the basic requirements and implement them in LSL. More importantly the person should begin to demonstrate an ability to work with the definitions in specific contexts and solve basic problems using a script.&lt;br /&gt;
&lt;br /&gt;
==== Reference Frames ====&lt;br /&gt;
* Global&lt;br /&gt;
* Sim&lt;br /&gt;
* Local&lt;br /&gt;
&lt;br /&gt;
Similar to the basic requirements, but the person must be able to demonstrate an ability to move back and forth between global, sim, and local coordinates. For example, a script that is in a link set should be able to work with a coordinate passed to it from an object in the sim&#039;s reference frame and react accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands to get position information  ====&lt;br /&gt;
* llGetPos&lt;br /&gt;
* llGetLocalPos&lt;br /&gt;
* llGetRootPosition&lt;br /&gt;
* llGetRegionCorner&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate an understanding of the basic position commands for getting information about an object&#039;s position. The person must demonstrate an understanding how the command works in different global and local contexts.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands to get rotation information ====&lt;br /&gt;
* llGetRot&lt;br /&gt;
* llGetLocalRot&lt;br /&gt;
* llGetRootRotation&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate an understanding of the basic rotation commands for getting information about an object&#039;s rotation. The person must demonstrate an understanding how the command works in different global and local contexts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Basic commands for changing position ====&lt;br /&gt;
* llSetPos&lt;br /&gt;
* llSetPrimitiveParams&lt;br /&gt;
* llSetPos within different reference frames.&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate a basic understanding of how to move an object. The person should be able to move an object to specific points. This should be done in both local, sim, and global coordinate systems. For example, a person should be able to move a prim within a link set to a specific point in the sim&#039;s coordinate system. More importantly given two separate objects the person must be able to move a prim to points in a local context defined by the two objects.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands for changing and working with rotations ====&lt;br /&gt;
* llSetRot&lt;br /&gt;
* llSetLocalRot&lt;br /&gt;
* llSetPrimitiveParams&lt;br /&gt;
* llAxes2Rot&lt;br /&gt;
* llAxisAngle2Rot&lt;br /&gt;
* llRotBetween&lt;br /&gt;
* llRot2Axis&lt;br /&gt;
* llRot2Angle&lt;br /&gt;
* How the commands work in different reference frames.&lt;br /&gt;
* Rotations&lt;br /&gt;
** Multiplication and division of rotations&lt;br /&gt;
** Difference between left and right multiplication&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate a basic understanding of how to rotate an object. The person must be able to rotate an object to specific orientations. This should be done with a variety of different commands. The person should demonstrate an ability to calculate appropriate rotations given a variety of information. For example, the person should be able to calculate the rotation necessary to achieve a given orientation using an Euler rotation as well as making use of an axis of rotation and an angle.&lt;br /&gt;
&lt;br /&gt;
==== Working with vectors ====&lt;br /&gt;
* Finding a vector component in a given direction.&lt;br /&gt;
* Finding a vector perpendicular to two vectors.&lt;br /&gt;
* Finding a vector perpendicular to a plane.&lt;br /&gt;
&lt;br /&gt;
The person should be able to perform basic vector operations in LSL. The person should be able to calculate the components of a vector in arbitrary directions. The person should be able to do this in a variety of contexts such as using a plane or multiple vectors.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Work flow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;br /&gt;
&lt;br /&gt;
At the intermediate level the Programming and Software Development category includes greater in depth knowledge of the basic LSL commands. At this level the person should know how to use all of the flow commands and construct a wide variety of scripts that require all of the flow commands.&lt;br /&gt;
&lt;br /&gt;
In addition, the person should know and understand how to use all of the list commands. A person should be able to manipulate lists. For example, a person should be able to delete and insert sublists into an existing list. The person should be able to use strided list and know how to sort and randomize a list.  The person should also have a basic understanding of the memory overhead associated with a list.&lt;br /&gt;
&lt;br /&gt;
The person should also know and understand all of the string manipulation routines. The person should be able to manipulate strings. For example, a person should be able to delete and insert substrings into an existing string. The person should have a basic understanding of the memory overhead associated with strings.&lt;br /&gt;
&lt;br /&gt;
With respect to project managing and the practice of writing programs, the same practices for comments discussed at the basic level must be maintained at the intermediate level. Programs submitted for evaluation are expected to include clear, consise, and consistent commenting.&lt;br /&gt;
&lt;br /&gt;
The person should be able to make use of at least one revision control system. The person should be able to maintain revisions and recall specific revisions. At this level a person does not need to know know how to find differences in revisions or be able to create and maintain a branch and merge the branch into an existing code base.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should understand how to create a broad, flexible plan to create and maintain a software project. The person should understand how the importance of creating a plan and developing an approach to a project before any coding is to begin. The person should understand the importance of flexibility and the importance of long term planning and how it relates to the code base.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=1016843</id>
		<title>SL Cert - Basic Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=1016843"/>
		<updated>2010-08-25T10:06:42Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;SLCertification is a community project guided by Linden Lab (see [[SL_Certification#Frequently_Asked_Questions|FAQ]]). This project page and its contents are not endorsed, managed or supervised by Linden Lab.  Linden Lab may link to this resource in the future solely as an informational service to the Second Life community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This list of requirements is part of the [[SL Certification | Second Life Certification]] project. It is an effort to create a list of specific skills  required for persons to become certified in basic scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in basic LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Some experience and familiarity of the second life graphical user interface and controls is necessary. Also some experience of building within second life would be an advantage. Six months secondlife experience recommended.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to basic level==&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should demonstrate a mastery of common programming tasks. The focus here is not on the use of the Linden Labs library but on basic programming and the fundamental LSL commands for the control and flow of a program.  The following categories provide the basic categories.&lt;br /&gt;
&lt;br /&gt;
=== Broad Overview and Most Basic Skills  === &lt;br /&gt;
&lt;br /&gt;
* Rationale for scripting &lt;br /&gt;
* Script creation &lt;br /&gt;
* Commenting and Clarity &lt;br /&gt;
* Mono vs. LSL2&lt;br /&gt;
* Software Development&lt;br /&gt;
* Using Resources &lt;br /&gt;
&lt;br /&gt;
A person should provide a basic understanding of the potential and the limitations of scripts. The person should be able to demonstrate how to create a script both within an object rezzed in world or in their inventory. The person should  know the difference between mono and LSL2 and the implications when a script is created within inventory as opposed to an object&#039;s inventory.  A person should demonstrate a basic understanding of the construction of consistent, structured code and consistent commenting style. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the difference between server side lag, client side lag, and the script delays associated with different LSL library calls. The person does not need to memorize which function calls have a delay and how much the delay is, but they need to understand what a delay is and how to determine if a given function has a delay and how long the delay is.&lt;br /&gt;
&lt;br /&gt;
The person should also provide a very basic understanding of practices for good software development. This includes the use and maintenance of comments and the rationale for the use of functions and subroutines. Additionally, the person should provide a rudimentary understanding of code revisioning and practices to keep and maintain local back up files.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an awareness of the various resources available to help with programming in LSL. The person should demonstrate that they know how to use the LSL Portal ([http://wiki.secondlife.com/wiki/LSL_Portal]). The person should demonstrate how to use a search engine to obtain help and information about LSL.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
* Types &lt;br /&gt;
* Operators &lt;br /&gt;
* Global vs. Local Variables &lt;br /&gt;
* Typecasting &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to identify the basic data types, integer, float, string, key, list, vector and rotation. The person should know the basic operations and what they mean in context. For example, division with integers is different compared to division with floats. The person should understand that some operations are overloaded and have different meanings when combined with different types. For example, if v1 and v2 are vectors then v1*v2 is the dot product, but if v1 is a vector and r is a rotation then v1*r will rotate the vector. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate the concept of the &amp;quot;scope&amp;quot; of a variable. There is a difference if it is defined outside of an event or function. Also, the person should demonstrate an understanding that a global variable can be ignored if it is also defined locally.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate how to &amp;quot;convert&amp;quot; one variable into another and what happens. For example, a float is truncated when cast as an integer.&lt;br /&gt;
&lt;br /&gt;
==== String ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person should demonstrate an understanding of the string data type. The person should know the memory costs and how it differs from LSL1 and mono. The person should know the difference between UTF-8 and UTF-16. The person should know how to define strings and use escape codes to construct non-trivial strings.&lt;br /&gt;
&lt;br /&gt;
The person should know the basic operations defined for strings. This does not include the LSL library functions for the basic level, but the person should demonstrate an understanding of the assignment and comparison of strings. &lt;br /&gt;
&lt;br /&gt;
==== List ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person only requires minimal understanding. The person is required to know and be able to use the various library functions at the intermediate level, but at the basic level the person need only know the more basic aspects of lists.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of how to assign lists. The person should know the basic memory costs for using a list and know the basic restrictions, such as a list element cannot be a list. &lt;br /&gt;
&lt;br /&gt;
The person should know how to concatenate two lists. The person should know how to clear a list. The person should be able to demonstrate a basic understanding of the idea behind a &amp;quot;strided&amp;quot; list and the importance of being able to group certain elements of a list and maintain their relative positioning within a list.&lt;br /&gt;
&lt;br /&gt;
==== key ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person should be able to assign a key, know the memory costs, and have a basic idea of what a key is. The person should be able to demonstrate how to assign a key and how to compare keys. &lt;br /&gt;
&lt;br /&gt;
Additionally, the person should know about the predefined variables such as NULL_KEY, TEXTURE_BLANK, TEXTURE_MEDIA, TEXTURE_DEFAULT, TEXTURE_PLYWOOD, and TEXTURE_TRANSPARANT. &lt;br /&gt;
&lt;br /&gt;
==== Math Functions ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person should demonstrate an understanding of the difference between variables of type integer and float and the operators for each type. The person should also be able to demonstrate an understanding of the various boolean operations and how they differ from the integer operations.&lt;br /&gt;
&lt;br /&gt;
===== Integer Functions =====&lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate a knowledge and an understanding of the basic operations. This includes the operations given at [http://wiki.secondlife.com/wiki/LSL_Operators]. This includes the basic operations, modulus operation, and various assignment operators.&lt;br /&gt;
&lt;br /&gt;
This also includes the bit-wise operations. The person should be able to represent an integer in decimal, binary, and hexadecimal forms. Given a number in any of the forms the person should be able to demonstrate an understanding of each of the bit-wise operations and combinations of the bit-wise operations.&lt;br /&gt;
&lt;br /&gt;
The person should also demonstrate an understanding of how to cast a variable from integer to other types and vice-versa. The person should know the difference between truncation and rounding (including rounding up and rounding down in consistent ways with both positive and negative floating point numbers). The person should demonstrate how to round and how to truncate using only the basic operations and casting numbers.&lt;br /&gt;
&lt;br /&gt;
===== Floating Point Operations =====&lt;br /&gt;
&lt;br /&gt;
In addition to the operations in the context of integers the person should also demonstrate an understanding of floating point numbers. This includes an understanding of the basic operations, but also includes the issues of rounding errors versus truncation errors in the context of floating point numbers. This also includes issues of the accumulation of errors which can lead to phenomena such as &amp;quot;prim drift.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
* Loop Constructs&lt;br /&gt;
* Conditionals &lt;br /&gt;
&lt;br /&gt;
A person should demonstrate an understanding of the different looping constructs using for, while, and do-while loops and understand when one loop construct might be favored over another in a given context. The person should also demonstrate an understanding of the &amp;quot;if&amp;quot; statement and be able to use compound and nested if statements. &lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate the ability to construct complex boolean expressions. For example, they should be able to make use of multiple boolean statements using the boolean &amp;quot;or,&amp;quot; boolean &amp;quot;not,&amp;quot; and boolean &amp;quot;and&amp;quot; to filter nontrivial conditions in a control structure or conditional. The person should demonstrate an understanding of the difference between integer operations such as &amp;quot;xor,&amp;quot; &amp;quot;and,&amp;quot; &amp;quot;or,&amp;quot; and the shift operations as opposed to the similar boolean operations.&lt;br /&gt;
&lt;br /&gt;
=== Events and Functions ===&lt;br /&gt;
&lt;br /&gt;
* Events &lt;br /&gt;
* Functions &lt;br /&gt;
* States &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic idea of an event and how a script might react in various circumstances. For example, the person should have a basic understanding of the three touch events and how they differ. At the basic level the broad categories of events that should be mastered include collision, touch, land collision, state entry/exit, timer, and attach events. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the use and creation of their own functions. This includes understanding the difference between null functions and functions that return a specific data type. The person should know the difference between a user defined function and the set of functions available within the build in library.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an understanding of the use of states. They should understand the default state, how to define new states, and move between different states. The person should have a firm understanding of the control flow as a script moves between different states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should be able to demonstrate that they understand the basic definitions. The person should also be able to demonstrate that they understand the basic idea. For example, a person should know how to calculate a dot product but also understand its relationship to the idea of a projection of one vector on to another.&lt;br /&gt;
&lt;br /&gt;
==== Basic definition of position ====&lt;br /&gt;
&lt;br /&gt;
* Global position&lt;br /&gt;
* Absolute position (within a sim)&lt;br /&gt;
* Local position &lt;br /&gt;
&lt;br /&gt;
A person should know what position is in the context of SL. This means the person should know the difference between a global coordinate, an absolute position within a sim, and the local position within a link set. An understanding of the different contexts when you might use local versus absolute is vital to working with rotations and vectors. For example, when working within a link set a local coordinate system is used. At the same time it is not uncommon to make use of local offsets when dealing with two separate objects.&lt;br /&gt;
&lt;br /&gt;
==== Basic definition of a rotation ====&lt;br /&gt;
* Euler&lt;br /&gt;
* Axis and angle&lt;br /&gt;
* Quaternions&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate that they know the definitions of a rotation. The person should know the difference between an Euler rotation and a quaternion. A person need not know the specific implementation of a quaternion but should understand a rotation in terms of an axis of rotation and an angle around that axis.&lt;br /&gt;
&lt;br /&gt;
==== Changing position and rotation via the edit window ====&lt;br /&gt;
&lt;br /&gt;
A person should be proficient using the edit window to manually move and rotate an object. The person should be able to move and rotate an object to a specific orientation (position and rotation). Also, the person should be able to read the position and rotation for a given object using the edit window.&lt;br /&gt;
&lt;br /&gt;
==== Vectors and Operations ====&lt;br /&gt;
&lt;br /&gt;
* Definition of vector in LSL&lt;br /&gt;
* Working with vector components (x, y, and z)&lt;br /&gt;
* Linear combinations of vectors&lt;br /&gt;
* Dot product&lt;br /&gt;
* Cross product&lt;br /&gt;
* Unit vectors&lt;br /&gt;
&lt;br /&gt;
A person should know the basic mathematical vector operations. The person should know how the calculations are performed and the LSL overloaded operators. For example, given two vectors u and v, the person should know how to calculate the dot product and also know that in LSL u*v will give you the dot product. The person should know how to multiply a scalar and a vector in LSL as well as find linear combinations of vectors in LSL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Basic I/0 ===&lt;br /&gt;
&lt;br /&gt;
* llWhisper&lt;br /&gt;
* llSay&lt;br /&gt;
* llShout&lt;br /&gt;
* llRegionSay&lt;br /&gt;
* llOwnerSay&lt;br /&gt;
* llInstantMessage&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to communicate information in LSL. The person should know the limitations and advantages of each command. The person should know the predefined channels for open chat and debug messages and also know the range of possible channels. The person should know the differences between using a positive number and negative number for the channel number and the relative advantages.&lt;br /&gt;
&lt;br /&gt;
At the basic level a person should know how to open a channel for listening and construct a listening event. The person should understand the importance of being able to close a listening event. For example, the person should know how to use a timer to insure that an open listener will be closed within a given time frame. &lt;br /&gt;
&lt;br /&gt;
At the basic level a person should also have a rudimentary understanding of the string functions. The person should be able to make direct comparisons and also be able to manipulate substrings. Additionally a person should be able to trim spaces off of the beginning and end of a string as well as convert the case to all upper or all lower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate basic skills in maintaining and updating a code base. The names of the scripts should indicate what they do and be consistent for a project. Backups of the codes should be maintained, and the person should be able to demonstrate that they can compare and find the difference between files.&lt;br /&gt;
&lt;br /&gt;
Most importantly the person should demonstrate consistent habits in commenting a script. Scripts should include comments that indicate what they do and how the programmer accomplishes each task within a script. Every event and subroutine also includes a block of comments to indicate which tasks it is used to complete. &lt;br /&gt;
&lt;br /&gt;
We do not specify which commenting style should be used, but the style should be consistent. The person should be familiar with using both the &amp;quot;//&amp;quot; and &amp;quot;/* ---- */&amp;quot; notations for creating comments. Codes that are submitted for the practicum will be evaluated for commenting as well as for function.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=1016833</id>
		<title>SL Cert - Basic Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=1016833"/>
		<updated>2010-08-25T10:05:29Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* List = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;SLCertification is a community project guided by Linden Lab (see [[SL_Certification#Frequently_Asked_Questions|FAQ]]). This project page and its contents are not endorsed, managed or supervised by Linden Lab.  Linden Lab may link to this resource in the future solely as an informational service to the Second Life community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This list of requirements is part of the [[SL Certification | Second Life Certification]] project. It is an effort to create a list of specific skills  required for persons to become certified in basic scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in basic LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Some experience and familiarity of the second life graphical user interface and controls is necessary. Also some experience of building within second life would be an advantage. Six months secondlife experience recommended.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to basic level==&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should demonstrate a mastery of common programming tasks. The focus here is not on the use of the Linden Labs library but on basic programming and the fundamental LSL commands for the control and flow of a program.  The following categories provide the basic categories.&lt;br /&gt;
&lt;br /&gt;
=== Broad Overview and Most Basic Skills  === &lt;br /&gt;
&lt;br /&gt;
* Rationale for scripting &lt;br /&gt;
* Script creation &lt;br /&gt;
* Commenting and Clarity &lt;br /&gt;
* Mono vs. LSL2&lt;br /&gt;
* Software Development&lt;br /&gt;
* Using Resources &lt;br /&gt;
&lt;br /&gt;
A person should provide a basic understanding of the potential and the limitations of scripts. The person should be able to demonstrate how to create a script both within an object rezzed in world or in their inventory. The person should  know the difference between mono and LSL2 and the implications when a script is created within inventory as opposed to an object&#039;s inventory.  A person should demonstrate a basic understanding of the construction of consistent, structured code and consistent commenting style. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the difference between server side lag, client side lag, and the script delays associated with different LSL library calls. The person does not need to memorize which function calls have a delay and how much the delay is, but they need to understand what a delay is and how to determine if a given function has a delay and how long the delay is.&lt;br /&gt;
&lt;br /&gt;
The person should also provide a very basic understanding of practices for good software development. This includes the use and maintenance of comments and the rationale for the use of functions and subroutines. Additionally, the person should provide a rudimentary understanding of code revisioning and practices to keep and maintain local back up files.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an awareness of the various resources available to help with programming in LSL. The person should demonstrate that they know how to use the LSL Portal ([http://wiki.secondlife.com/wiki/LSL_Portal]). The person should demonstrate how to use a search engine to obtain help and information about LSL.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
* Types &lt;br /&gt;
* Operators &lt;br /&gt;
* Global vs. Local Variables &lt;br /&gt;
* Typecasting &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to identify the basic data types, integer, float, string, key, list, vector and rotation. The person should know the basic operations and what they mean in context. For example, division with integers is different compared to division with floats. The person should understand that some operations are overloaded and have different meanings when combined with different types. For example, if v1 and v2 are vectors then v1*v2 is the dot product, but if v1 is a vector and r is a rotation then v1*r will rotate the vector. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate the concept of the &amp;quot;scope&amp;quot; of a variable. There is a difference if it is defined outside of an event or function. Also, the person should demonstrate an understanding that a global variable can be ignored if it is also defined locally.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate how to &amp;quot;convert&amp;quot; one variable into another and what happens. For example, a float is truncated when cast as an integer.&lt;br /&gt;
&lt;br /&gt;
==== String ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person should demonstrate an understanding of the string data type. The person should know the memory costs and how it differs from LSL1 and mono. The person should know the difference between UTF-8 and UTF-16. The person should know how to define strings and use escape codes to construct non-trivial strings.&lt;br /&gt;
&lt;br /&gt;
The person should know the basic operations defined for strings. This does not include the LSL library functions for the basic level, but the person should demonstrate an understanding of the assignment and comparison of strings. &lt;br /&gt;
&lt;br /&gt;
==== List ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person only requires minimal understanding. The person is required to know and be able to use the various library functions at the intermediate level, but at the basic level the person need only know the more basic aspects of lists.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of how to assign lists. The person should know the basic memory costs for using a list and know the basic restrictions, such as a list element cannot be a list. &lt;br /&gt;
&lt;br /&gt;
The person should know how to concatenate two lists. The person should know how to clear a list. The person should be able to demonstrate a basic understanding of the idea behind a &amp;quot;strided&amp;quot; list and the importance of being able to group certain elements of a list and maintain their relative positioning within a list.&lt;br /&gt;
&lt;br /&gt;
==== key ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person should be able to assign a key, know the memory costs, and have a basic idea of what a key is. The person should be able to demonstrate how to assign a key and how to compare keys. &lt;br /&gt;
&lt;br /&gt;
Additionally, the person should know about the predefined variables such as NULL_KEY, TEXTURE_BLANK, TEXTURE_MEDIA, TEXTURE_DEFAULT, TEXTURE_PLYWOOD, and TEXTURE_TRANSPARANT. &lt;br /&gt;
&lt;br /&gt;
==== Math Functions ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person should demonstrate an understanding of the difference between variables of type integer and float and the operators for each type. The person should also be able to demonstrate an understanding of the various boolean operations and how they differ from the integer operations.&lt;br /&gt;
&lt;br /&gt;
===== Integer Functions =====&lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate a knowledge and an understanding of the basic operations. This includes the operations given at [http://wiki.secondlife.com/wiki/LSL_Operators]. This includes the basic operations, modulus operation, and various assignment operators.&lt;br /&gt;
&lt;br /&gt;
This also includes the bit-wise operations. The person should be able to represent an integer in decimal, binary, and hexadecimal forms. Given a number in any of the forms the person should be able to demonstrate an understanding of each of the bit-wise operations and combinations of the bit-wise operations.&lt;br /&gt;
&lt;br /&gt;
The person should also demonstrate an understanding of how to cast a variable from integer to other types and vice-versa. The person should know the difference between truncation and rounding (including rounding up and rounding down in consistent ways with both positive and negative floating point numbers). The person should demonstrate how to round and how to truncate using only the basic operations and casting numbers.&lt;br /&gt;
&lt;br /&gt;
===== Floating Point Operations =====&lt;br /&gt;
&lt;br /&gt;
In addition to the operations in the context of integers the person should also demonstrate an understanding of floating point numbers. This includes an understanding of the basic operations, but also includes the issues of rounding errors versus truncation errors in the context of floating point numbers. This also includes issues of the accumulation of errors which can lead to phenomena such as &amp;quot;prim drift.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
* Loop Constructs&lt;br /&gt;
* Conditionals &lt;br /&gt;
&lt;br /&gt;
A person should demonstrate an understanding of the different looping constructs using for, while, and do-while loops and understand when one loop construct might be favored over another in a given context. The person should also demonstrate an understanding of the &amp;quot;if&amp;quot; statement and be able to use compound and nested if statements. &lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate the ability to construct complex boolean expressions. For example, they should be able to make use of multiple boolean statements using the boolean &amp;quot;or,&amp;quot; boolean &amp;quot;not,&amp;quot; and boolean &amp;quot;and&amp;quot; to filter nontrivial conditions in a control structure or conditional. The person should demonstrate an understanding of the difference between integer operations such as &amp;quot;xor,&amp;quot; &amp;quot;and,&amp;quot; &amp;quot;or,&amp;quot; and the shift operations as opposed to the similar boolean operations.&lt;br /&gt;
&lt;br /&gt;
=== Events and Functions ===&lt;br /&gt;
&lt;br /&gt;
* Events &lt;br /&gt;
* Functions &lt;br /&gt;
* States &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic idea of an event and how a script might react in various circumstances. For example, the person should have a basic understanding of the three touch events and how they differ. At the basic level the broad categories of events that should be mastered include collision, touch, land collision, state entry/exit, timer, and attach events. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the use and creation of their own functions. This includes understanding the difference between null functions and functions that return a specific data type. The person should know the difference between a user defined function and the set of functions available within the build in library.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an understanding of the use of states. They should understand the default state, how to define new states, and move between different states. The person should have a firm understanding of the control flow as a script moves between different states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should be able to demonstrate that they understand the basic definitions. The person should also be able to demonstrate that they understand the basic idea. For example, a person should know how to calculate a dot product but also understand its relationship to the idea of a projection of one vector on to another.&lt;br /&gt;
&lt;br /&gt;
==== Basic definition of position ====&lt;br /&gt;
&lt;br /&gt;
* Global position&lt;br /&gt;
* Absolute position (within a sim)&lt;br /&gt;
* Local position &lt;br /&gt;
&lt;br /&gt;
A person should know what position is in the context of SL. This means the person should know the difference between a global coordinate, an absolute position within a sim, and the local position within a link set. An understanding of the different contexts when you might use local versus absolute is vital to working with rotations and vectors. For example, when working within a link set a local coordinate system is used. At the same time it is not uncommon to make use of local offsets when dealing with two separate objects.&lt;br /&gt;
&lt;br /&gt;
==== Basic definition of a rotation ====&lt;br /&gt;
* Euler&lt;br /&gt;
* Axis and angle&lt;br /&gt;
* Quaternions&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate that they know the definitions of a rotation. The person should know the difference between an Euler rotation and a quaternion. A person need not know the specific implementation of a quaternion but should understand a rotation in terms of an axis of rotation and an angle around that axis.&lt;br /&gt;
&lt;br /&gt;
==== Changing position and rotation via the edit window ====&lt;br /&gt;
&lt;br /&gt;
A person should be proficient using the edit window to manually move and rotate an object. The person should be able to move and rotate an object to a specific orientation (position and rotation). Also, the person should be able to read the position and rotation for a given object using the edit window.&lt;br /&gt;
&lt;br /&gt;
==== Vectors and Operations ====&lt;br /&gt;
&lt;br /&gt;
* Definition of vector in LSL&lt;br /&gt;
* Working with vector components (x, y, and z)&lt;br /&gt;
* Linear combinations of vectors&lt;br /&gt;
* Dot product&lt;br /&gt;
* Cross product&lt;br /&gt;
* Unit vectors&lt;br /&gt;
&lt;br /&gt;
A person should know the basic mathematical vector operations. The person should know how the calculations are performed and the LSL overloaded operators. For example, given two vectors u and v, the person should know how to calculate the dot product and also know that in LSL u*v will give you the dot product. The person should know how to multiply a scalar and a vector in LSL as well as find linear combinations of vectors in LSL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Basic I/0 ===&lt;br /&gt;
&lt;br /&gt;
* llWhisper&lt;br /&gt;
* llSay&lt;br /&gt;
* llShout&lt;br /&gt;
* llRegionSay&lt;br /&gt;
* llOwnerSay&lt;br /&gt;
* llInstantMessage&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to communicate information in LSL. The person should know the limitations and advantages of each command. The person should know the predefined channels for open chat and debug messages and also know the range of possible channels. The person should know the differences between using a positive number and negative number for the channel number and the relative advantages.&lt;br /&gt;
&lt;br /&gt;
At the basic level a person should know how to open a channel for listening and construct a listening event. The person should understand the importance of being able to close a listening event. For example, the person should know how to use a timer to insure that an open listener will be closed within a given time frame. &lt;br /&gt;
&lt;br /&gt;
At the basic level a person should also have a rudimentary understanding of the string functions. The person should be able to make direct comparisons and also be able to manipulate substrings. Additionally a person should be able to trim spaces off of the beginning and end of a string as well as convert the case to all upper or all lower.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=1014443</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=1014443"/>
		<updated>2010-08-21T21:50:52Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;SLCertification is a community project guided by Linden Lab (see [[SL_Certification#Frequently_Asked_Questions|FAQ]]). This project page and its contents are not endorsed, managed or supervised by Linden Lab.  Linden Lab may link to this resource in the future solely as an informational service to the Second Life community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
The person should be able to go beyond an understanding of the commands and know how to achieve specific objectives. For example, the person should know how to use the llSitTarget command to have an avatar moved and rotated so that they will be looking at a specific location from a predefined distance. This requires that the person not only know how to use the llSitTarget command but also have a basic understanding of calculations of relative positions and rotations.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should also have a detailed understanding of what aspects of a prim are persistent properties and how to clear properties. For example, a person should know that text over an object is a property of the prim and know how to clear the text.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. (Note that this implies that an understanding of how rotations and offsets are changed in the context of attachments and can adjust scripts accordingly.) Scripts should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
The person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
A person seeking certification at the advanced level in this category must have a detailed understanding of permissions and controls and know how to use them in context. The person should be able to assemble scripts that can use the control system to get input from a person through their viewer and then relinquish the control in an appropriate way. The person should be able to do this in conjunction with the permissions system to animate or move an avatar and attachments on an avatar.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to obtain information about the ownership and settings for a given parcel. The person should be able to have the script react in appropriate ways with respect to the parcel settings. The person should be able to obtain the information for different parcels in any given relative position from the object containing the script. For example, at the advanced level the person should be able to construct a script that can map out all of the parcels and their respective properties in predetermined arc away from the object containing the script without moving the object.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Shared Media&lt;br /&gt;
# Interacting with forms and outside servers.&lt;br /&gt;
# Interacting with forms specified data:urls and sending information back to the same script via HTTP-in. &lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
# Difference between POST and Get for HTTP forms.&lt;br /&gt;
# At least one scripting language for obtaining information from an in-world script.&lt;br /&gt;
# Demonstrate at least one way to reliably retain information from an in-world script and relay it back to another in-world script.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate that they can establish secure and trusted relationships between separate objects that communicate in world. For example, the person should be able to demonstrate efficient techniques for a child object to establish a trusted connection with the object that rezzed it. The person should also demonstrate that they can establish secure and trusted connections between different objects that are not owned by the same person. For example, they should be able to demonstrate that they can verify that an object owned by another person and in a different group is a trusted object and share information with that object in a secure manner.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
A set of sample scripts for the advanced level rotations and vectors category can be found at http://slurl.com/secondlife/Hotspur/45/59/30 .&lt;br /&gt;
&lt;br /&gt;
==== Rotations and position ====&lt;br /&gt;
* using llSetPrimitiveParams to move and rotate at the same time&lt;br /&gt;
* Rotating and moving a prim to a specified orientation&lt;br /&gt;
** Absolute coordinates&lt;br /&gt;
** Relative coordinates (in a link set)&lt;br /&gt;
&lt;br /&gt;
The person should be able to move and rotate an object with a single command, llSetPrimitiveParams. The person should be able to move an object to a specified rotation and position. Moreover, the person should be able to combine multiple tasks from the intermediate section to move an object to a variety of orientations. For example, given a sequence of points in either local or absolute coordinates the person should be able to move and rotate an object to move along the points so that the objects orientation is consistent with the movement (i.e. it points along the path).&lt;br /&gt;
&lt;br /&gt;
==== Smooth movements ====&lt;br /&gt;
&lt;br /&gt;
===== Absolute coordinates =====&lt;br /&gt;
* Rotate and movement around the edge of a prim&lt;br /&gt;
* Rotate and move around a fixed point using a predefined axis&lt;br /&gt;
&lt;br /&gt;
The person should be able to calculate and move  an object so that it appears to rotate in a uniform way. The person should be able to do this around one edge of the object to make it appear to move in a uniform circular motion. For example, the person should be able to move an uncut prim like a door around an edge. The person should be able to do this around any arbitrary point. The person should also be able to rotate and move and object around any arbitrary axis as well.&lt;br /&gt;
&lt;br /&gt;
===== Local coordinates (within a linkset) =====&lt;br /&gt;
* Rotate and movement around the edge of a prim&lt;br /&gt;
* Rotate and move around a fixed point using a predefined axis&lt;br /&gt;
&lt;br /&gt;
This is the same as the previous tasks only in a relative coordinate system.&lt;br /&gt;
&lt;br /&gt;
==== Transitions ====&lt;br /&gt;
* Smooth movements from one orientation (position and rotation) to another.&lt;br /&gt;
&lt;br /&gt;
Given an initial and final orientation (position and rotation) the person should be able to move the object in a sequence of discrete points so that it appears to move smoothly from the initial to the final orientation.&lt;br /&gt;
&lt;br /&gt;
==== Determining specific orientations ====&lt;br /&gt;
&lt;br /&gt;
===== Absolute/Sim coordinates =====&lt;br /&gt;
* Given a point rotate an object to face the point.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points.&lt;br /&gt;
&lt;br /&gt;
This is similar to the Intermediate requirements. The difference here is that the movement from one orientation to another should be done in a number of steps to appear like a smoother movement. Also, the object should point in the specified direction but should maintain some sort of orientation. For example, the person should have one face of a box point toward a given location, but an arbitrary face should be pointing in an &amp;quot;upward&amp;quot; direction.&lt;br /&gt;
&lt;br /&gt;
===== Local  coordinates to local =====&lt;br /&gt;
* Given a point rotate an object to face a local point.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points. &lt;br /&gt;
&lt;br /&gt;
Similar to the previous task, but the objects should both be in the same local context.&lt;br /&gt;
&lt;br /&gt;
===== Local  coordinates to absolute =====&lt;br /&gt;
* Given a point rotate an object to face a point in absolute/sim coordinates.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points. &lt;br /&gt;
&lt;br /&gt;
Same as the previous task, but in this case one object should be in a local context and the other in a global context. For example, one prim in a linkset should be moved to face an object moving in a sim&#039;s global coordinate system.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=1014433</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=1014433"/>
		<updated>2010-08-21T21:47:33Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;SLCertification is a community project guided by Linden Lab (see [[SL_Certification#Frequently_Asked_Questions|FAQ]]). This project page and its contents are not endorsed, managed or supervised by Linden Lab.  Linden Lab may link to this resource in the future solely as an informational service to the Second Life community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
The person should be able to go beyond an understanding of the commands and know how to achieve specific objectives. For example, the person should know how to use the llSitTarget command to have an avatar moved and rotated so that they will be looking at a specific location from a predefined distance. This requires that the person not only know how to use the llSitTarget command but also have a basic understanding of calculations of relative positions and rotations.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should also have a detailed understanding of what aspects of a prim are persistent properties and how to clear properties. For example, a person should know that text over an object is a property of the prim and know how to clear the text.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. (Note that this implies that an understanding of how rotations and offsets are changed in the context of attachments and can adjust scripts accordingly.) Scripts should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
The person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
A person seeking certification at the advanced level in this category must have a detailed understanding of permissions and controls and know how to use them in context. The person should be able to assemble scripts that can use the control system to get input from a person through their viewer and then relinquish the control in an appropriate way. The person should be able to do this in conjunction with the permissions system to animate or move an avatar and attachments on an avatar.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to obtain information about the ownership and settings for a given parcel. The person should be able to have the script react in appropriate ways with respect to the parcel settings. The person should be able to obtain the information for different parcels in any given relative position from the object containing the script. For example, at the advanced level the person should be able to construct a script that can map out all of the parcels and their respective properties in predetermined arc away from the object containing the script without moving the object.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Shared Media&lt;br /&gt;
# Interacting with forms and outside servers.&lt;br /&gt;
# Interacting with forms specified data:urls and sending information back to the same script via HTTP-in. &lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate that they can establish secure and trusted relationships between separate objects that communicate in world. For example, the person should be able to demonstrate efficient techniques for a child object to establish a trusted connection with the object that rezzed it. The person should also demonstrate that they can establish secure and trusted connections between different objects that are not owned by the same person. For example, they should be able to demonstrate that they can verify that an object owned by another person and in a different group is a trusted object and share information with that object in a secure manner.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
A set of sample scripts for the advanced level rotations and vectors category can be found at http://slurl.com/secondlife/Hotspur/45/59/30 .&lt;br /&gt;
&lt;br /&gt;
==== Rotations and position ====&lt;br /&gt;
* using llSetPrimitiveParams to move and rotate at the same time&lt;br /&gt;
* Rotating and moving a prim to a specified orientation&lt;br /&gt;
** Absolute coordinates&lt;br /&gt;
** Relative coordinates (in a link set)&lt;br /&gt;
&lt;br /&gt;
The person should be able to move and rotate an object with a single command, llSetPrimitiveParams. The person should be able to move an object to a specified rotation and position. Moreover, the person should be able to combine multiple tasks from the intermediate section to move an object to a variety of orientations. For example, given a sequence of points in either local or absolute coordinates the person should be able to move and rotate an object to move along the points so that the objects orientation is consistent with the movement (i.e. it points along the path).&lt;br /&gt;
&lt;br /&gt;
==== Smooth movements ====&lt;br /&gt;
&lt;br /&gt;
===== Absolute coordinates =====&lt;br /&gt;
* Rotate and movement around the edge of a prim&lt;br /&gt;
* Rotate and move around a fixed point using a predefined axis&lt;br /&gt;
&lt;br /&gt;
The person should be able to calculate and move  an object so that it appears to rotate in a uniform way. The person should be able to do this around one edge of the object to make it appear to move in a uniform circular motion. For example, the person should be able to move an uncut prim like a door around an edge. The person should be able to do this around any arbitrary point. The person should also be able to rotate and move and object around any arbitrary axis as well.&lt;br /&gt;
&lt;br /&gt;
===== Local coordinates (within a linkset) =====&lt;br /&gt;
* Rotate and movement around the edge of a prim&lt;br /&gt;
* Rotate and move around a fixed point using a predefined axis&lt;br /&gt;
&lt;br /&gt;
This is the same as the previous tasks only in a relative coordinate system.&lt;br /&gt;
&lt;br /&gt;
==== Transitions ====&lt;br /&gt;
* Smooth movements from one orientation (position and rotation) to another.&lt;br /&gt;
&lt;br /&gt;
Given an initial and final orientation (position and rotation) the person should be able to move the object in a sequence of discrete points so that it appears to move smoothly from the initial to the final orientation.&lt;br /&gt;
&lt;br /&gt;
==== Determining specific orientations ====&lt;br /&gt;
&lt;br /&gt;
===== Absolute/Sim coordinates =====&lt;br /&gt;
* Given a point rotate an object to face the point.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points.&lt;br /&gt;
&lt;br /&gt;
This is similar to the Intermediate requirements. The difference here is that the movement from one orientation to another should be done in a number of steps to appear like a smoother movement. Also, the object should point in the specified direction but should maintain some sort of orientation. For example, the person should have one face of a box point toward a given location, but an arbitrary face should be pointing in an &amp;quot;upward&amp;quot; direction.&lt;br /&gt;
&lt;br /&gt;
===== Local  coordinates to local =====&lt;br /&gt;
* Given a point rotate an object to face a local point.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points. &lt;br /&gt;
&lt;br /&gt;
Similar to the previous task, but the objects should both be in the same local context.&lt;br /&gt;
&lt;br /&gt;
===== Local  coordinates to absolute =====&lt;br /&gt;
* Given a point rotate an object to face a point in absolute/sim coordinates.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points. &lt;br /&gt;
&lt;br /&gt;
Same as the previous task, but in this case one object should be in a local context and the other in a global context. For example, one prim in a linkset should be moved to face an object moving in a sim&#039;s global coordinate system.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=1014423</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=1014423"/>
		<updated>2010-08-21T21:43:34Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;SLCertification is a community project guided by Linden Lab (see [[SL_Certification#Frequently_Asked_Questions|FAQ]]). This project page and its contents are not endorsed, managed or supervised by Linden Lab.  Linden Lab may link to this resource in the future solely as an informational service to the Second Life community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification, basic texture certification, and basic building certification.&lt;br /&gt;
&lt;br /&gt;
(Recommended) An application should have a basic understanding of algebraic functions.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object are included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color.&lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha(transparency)&lt;br /&gt;
# Commands for changing the alpha level.&lt;br /&gt;
# Difference between changing alpha level and the two different transparent textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures.&lt;br /&gt;
# Predefined constants for UUIDs of textures.&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles.&lt;br /&gt;
# Basic limitations of particles.&lt;br /&gt;
# Basic understanding on how to turn particles on and off.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the dataserver event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands associated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Basic understanding of the different types of permissions that may be obtained.&lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the dataserver event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the dataserver event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory, Land and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Note cards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory permissions.&lt;br /&gt;
&lt;br /&gt;
* Land&lt;br /&gt;
# Find the water level at a given position&lt;br /&gt;
# Find the normal to the terrain at a given position&lt;br /&gt;
# Find the slope to the terrain at a given position&lt;br /&gt;
# Find the owner of the parcel at a given position&lt;br /&gt;
# Use of the llGetParcelDetails command to get parcel information at a certain position. &lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types.&lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Chat commands&lt;br /&gt;
# Dialogs.&lt;br /&gt;
# Limitations of chat commands.&lt;br /&gt;
# Email.&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object.&lt;br /&gt;
# Commands to manipulate the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Shared Media&lt;br /&gt;
# Basic use of the llSetPrimMediaParams command to display web pages on a prim.&lt;br /&gt;
# Use of data:text/html format to specify web pages.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Commands for Force.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Impulse&lt;br /&gt;
# Commands for Impulse.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular impulse.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
The person who wants to achieve an intermediate rating for physics should know all of the basic commands for both linear and angular force as well as momentum. The person should know the difference between the local and global settings. The person should know the difference between the force/torque commands and the impulse commands.&lt;br /&gt;
&lt;br /&gt;
The person should know the relationship between force and impulse. Both are representations of Newton&#039;s Second Law where force is the differential form and impulse is the integral form. The person should understand the relationship between force, mass, and acceleration as well as the relationship between impulse and momentum.&lt;br /&gt;
&lt;br /&gt;
The very basic commands of scripting a vehicle should be known. At the intermediate level a person is not expected to be able to create a script for a vehicle but should understand the basic commands necessary for its functionality and alter an existing vehicle script.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events.&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
A person who wishes to achieve an intermediate certification in detection should know the different events in which detection is relevant. The person should know how the different detection commands are used within the different events. The person should know be able to construct scripts that make use of the events and detection routines and combine them. &lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to use sensors to detect a person. The person should know the difference between a repeating and one time sensor. The person should know how to construct scripts that make use of the sensor and no_sensor events. The person should know the limitations of the commands and understand the importance and how to narrowly define a sensor.&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
For the intermediate requirements a person should be able to take the ideas required for the basic requirements and implement them in LSL. More importantly the person should begin to demonstrate an ability to work with the definitions in specific contexts and solve basic problems using a script.&lt;br /&gt;
&lt;br /&gt;
==== Reference Frames ====&lt;br /&gt;
* Global&lt;br /&gt;
* Sim&lt;br /&gt;
* Local&lt;br /&gt;
&lt;br /&gt;
Similar to the basic requirements, but the person must be able to demonstrate an ability to move back and forth between global, sim, and local coordinates. For example, a script that is in a link set should be able to work with a coordinate passed to it from an object in the sim&#039;s reference frame and react accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands to get position information  ====&lt;br /&gt;
* llGetPos&lt;br /&gt;
* llGetLocalPos&lt;br /&gt;
* llGetRootPosition&lt;br /&gt;
* llGetRegionCorner&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate an understanding of the basic position commands for getting information about an object&#039;s position. The person must demonstrate an understanding how the command works in different global and local contexts.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands to get rotation information ====&lt;br /&gt;
* llGetRot&lt;br /&gt;
* llGetLocalRot&lt;br /&gt;
* llGetRootRotation&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate an understanding of the basic rotation commands for getting information about an object&#039;s rotation. The person must demonstrate an understanding how the command works in different global and local contexts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Basic commands for changing position ====&lt;br /&gt;
* llSetPos&lt;br /&gt;
* llSetPrimitiveParams&lt;br /&gt;
* llSetPos within different reference frames.&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate a basic understanding of how to move an object. The person should be able to move an object to specific points. This should be done in both local, sim, and global coordinate systems. For example, a person should be able to move a prim within a link set to a specific point in the sim&#039;s coordinate system. More importantly given two separate objects the person must be able to move a prim to points in a local context defined by the two objects.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands for changing and working with rotations ====&lt;br /&gt;
* llSetRot&lt;br /&gt;
* llSetLocalRot&lt;br /&gt;
* llSetPrimitiveParams&lt;br /&gt;
* llAxes2Rot&lt;br /&gt;
* llAxisAngle2Rot&lt;br /&gt;
* llRotBetween&lt;br /&gt;
* llRot2Axis&lt;br /&gt;
* llRot2Angle&lt;br /&gt;
* How the commands work in different reference frames.&lt;br /&gt;
* Rotations&lt;br /&gt;
** Multiplication and division of rotations&lt;br /&gt;
** Difference between left and right multiplication&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate a basic understanding of how to rotate an object. The person must be able to rotate an object to specific orientations. This should be done with a variety of different commands. The person should demonstrate an ability to calculate appropriate rotations given a variety of information. For example, the person should be able to calculate the rotation necessary to achieve a given orientation using an Euler rotation as well as making use of an axis of rotation and an angle.&lt;br /&gt;
&lt;br /&gt;
==== Working with vectors ====&lt;br /&gt;
* Finding a vector component in a given direction.&lt;br /&gt;
* Finding a vector perpendicular to two vectors.&lt;br /&gt;
* Finding a vector perpendicular to a plane.&lt;br /&gt;
&lt;br /&gt;
The person should be able to perform basic vector operations in LSL. The person should be able to calculate the components of a vector in arbitrary directions. The person should be able to do this in a variety of contexts such as using a plane or multiple vectors.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Work flow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;br /&gt;
&lt;br /&gt;
At the intermediate level the Programming and Software Development category includes greater in depth knowledge of the basic LSL commands. At this level the person should know how to use all of the flow commands and construct a wide variety of scripts that require all of the flow commands.&lt;br /&gt;
&lt;br /&gt;
In addition, the person should know and understand how to use all of the list commands. A person should be able to manipulate lists. For example, a person should be able to delete and insert sublists into an existing list. The person should be able to use strided list and know how to sort and randomize a list.  The person should also have a basic understanding of the memory overhead associated with a list.&lt;br /&gt;
&lt;br /&gt;
The person should also know and understand all of the string manipulation routines. The person should be able to manipulate strings. For example, a person should be able to delete and insert substrings into an existing string. The person should have a basic understanding of the memory overhead associated with strings.&lt;br /&gt;
&lt;br /&gt;
The person should be able to make use of at least one revision control system. The person should be able to maintain revisions and recall specific revisions. At this level a person does not need to know know how to find differences in revisions or be able to create and maintain a branch and merge the branch into an existing code base.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should understand how to create a broad, flexible plan to create and maintain a software project. The person should understand how the importance of creating a plan and developing an approach to a project before any coding is to begin. The person should understand the importance of flexibility and the importance of long term planning and how it relates to the code base.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=1014413</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=1014413"/>
		<updated>2010-08-21T21:35:50Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;SLCertification is a community project guided by Linden Lab (see [[SL_Certification#Frequently_Asked_Questions|FAQ]]). This project page and its contents are not endorsed, managed or supervised by Linden Lab.  Linden Lab may link to this resource in the future solely as an informational service to the Second Life community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification, basic texture certification, and basic building certification.&lt;br /&gt;
&lt;br /&gt;
(Recommended) An application should have a basic understanding of algebraic functions.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object are included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color.&lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha(transparency)&lt;br /&gt;
# Commands for changing the alpha level.&lt;br /&gt;
# Difference between changing alpha level and the two different transparent textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures.&lt;br /&gt;
# Predefined constants for UUIDs of textures.&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles.&lt;br /&gt;
# Basic limitations of particles.&lt;br /&gt;
# Basic understanding on how to turn particles on and off.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the dataserver event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands associated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Basic understanding of the different types of permissions that may be obtained.&lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the dataserver event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the dataserver event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory, Land and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Note cards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory permissions.&lt;br /&gt;
&lt;br /&gt;
* Land&lt;br /&gt;
# Find the water level at a given position&lt;br /&gt;
# Find the normal to the terrain at a given position&lt;br /&gt;
# Find the slope to the terrain at a given position&lt;br /&gt;
# Find the owner of the parcel at a given position&lt;br /&gt;
# Use of the llGetParcelDetails command to get parcel information at a certain position. &lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types.&lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Chat commands&lt;br /&gt;
# Dialogs.&lt;br /&gt;
# Limitations of chat commands.&lt;br /&gt;
# Email.&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object.&lt;br /&gt;
# Commands to manipulate the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Commands for Force.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Impulse&lt;br /&gt;
# Commands for Impulse.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular impulse.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
The person who wants to achieve an intermediate rating for physics should know all of the basic commands for both linear and angular force as well as momentum. The person should know the difference between the local and global settings. The person should know the difference between the force/torque commands and the impulse commands.&lt;br /&gt;
&lt;br /&gt;
The person should know the relationship between force and impulse. Both are representations of Newton&#039;s Second Law where force is the differential form and impulse is the integral form. The person should understand the relationship between force, mass, and acceleration as well as the relationship between impulse and momentum.&lt;br /&gt;
&lt;br /&gt;
The very basic commands of scripting a vehicle should be known. At the intermediate level a person is not expected to be able to create a script for a vehicle but should understand the basic commands necessary for its functionality and alter an existing vehicle script.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events.&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
A person who wishes to achieve an intermediate certification in detection should know the different events in which detection is relevant. The person should know how the different detection commands are used within the different events. The person should know be able to construct scripts that make use of the events and detection routines and combine them. &lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to use sensors to detect a person. The person should know the difference between a repeating and one time sensor. The person should know how to construct scripts that make use of the sensor and no_sensor events. The person should know the limitations of the commands and understand the importance and how to narrowly define a sensor.&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
For the intermediate requirements a person should be able to take the ideas required for the basic requirements and implement them in LSL. More importantly the person should begin to demonstrate an ability to work with the definitions in specific contexts and solve basic problems using a script.&lt;br /&gt;
&lt;br /&gt;
==== Reference Frames ====&lt;br /&gt;
* Global&lt;br /&gt;
* Sim&lt;br /&gt;
* Local&lt;br /&gt;
&lt;br /&gt;
Similar to the basic requirements, but the person must be able to demonstrate an ability to move back and forth between global, sim, and local coordinates. For example, a script that is in a link set should be able to work with a coordinate passed to it from an object in the sim&#039;s reference frame and react accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands to get position information  ====&lt;br /&gt;
* llGetPos&lt;br /&gt;
* llGetLocalPos&lt;br /&gt;
* llGetRootPosition&lt;br /&gt;
* llGetRegionCorner&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate an understanding of the basic position commands for getting information about an object&#039;s position. The person must demonstrate an understanding how the command works in different global and local contexts.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands to get rotation information ====&lt;br /&gt;
* llGetRot&lt;br /&gt;
* llGetLocalRot&lt;br /&gt;
* llGetRootRotation&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate an understanding of the basic rotation commands for getting information about an object&#039;s rotation. The person must demonstrate an understanding how the command works in different global and local contexts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Basic commands for changing position ====&lt;br /&gt;
* llSetPos&lt;br /&gt;
* llSetPrimitiveParams&lt;br /&gt;
* llSetPos within different reference frames.&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate a basic understanding of how to move an object. The person should be able to move an object to specific points. This should be done in both local, sim, and global coordinate systems. For example, a person should be able to move a prim within a link set to a specific point in the sim&#039;s coordinate system. More importantly given two separate objects the person must be able to move a prim to points in a local context defined by the two objects.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands for changing and working with rotations ====&lt;br /&gt;
* llSetRot&lt;br /&gt;
* llSetLocalRot&lt;br /&gt;
* llSetPrimitiveParams&lt;br /&gt;
* llAxes2Rot&lt;br /&gt;
* llAxisAngle2Rot&lt;br /&gt;
* llRotBetween&lt;br /&gt;
* llRot2Axis&lt;br /&gt;
* llRot2Angle&lt;br /&gt;
* How the commands work in different reference frames.&lt;br /&gt;
* Rotations&lt;br /&gt;
** Multiplication and division of rotations&lt;br /&gt;
** Difference between left and right multiplication&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate a basic understanding of how to rotate an object. The person must be able to rotate an object to specific orientations. This should be done with a variety of different commands. The person should demonstrate an ability to calculate appropriate rotations given a variety of information. For example, the person should be able to calculate the rotation necessary to achieve a given orientation using an Euler rotation as well as making use of an axis of rotation and an angle.&lt;br /&gt;
&lt;br /&gt;
==== Working with vectors ====&lt;br /&gt;
* Finding a vector component in a given direction.&lt;br /&gt;
* Finding a vector perpendicular to two vectors.&lt;br /&gt;
* Finding a vector perpendicular to a plane.&lt;br /&gt;
&lt;br /&gt;
The person should be able to perform basic vector operations in LSL. The person should be able to calculate the components of a vector in arbitrary directions. The person should be able to do this in a variety of contexts such as using a plane or multiple vectors.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Work flow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;br /&gt;
&lt;br /&gt;
At the intermediate level the Programming and Software Development category includes greater in depth knowledge of the basic LSL commands. At this level the person should know how to use all of the flow commands and construct a wide variety of scripts that require all of the flow commands.&lt;br /&gt;
&lt;br /&gt;
In addition, the person should know and understand how to use all of the list commands. A person should be able to manipulate lists. For example, a person should be able to delete and insert sublists into an existing list. The person should be able to use strided list and know how to sort and randomize a list.  The person should also have a basic understanding of the memory overhead associated with a list.&lt;br /&gt;
&lt;br /&gt;
The person should also know and understand all of the string manipulation routines. The person should be able to manipulate strings. For example, a person should be able to delete and insert substrings into an existing string. The person should have a basic understanding of the memory overhead associated with strings.&lt;br /&gt;
&lt;br /&gt;
The person should be able to make use of at least one revision control system. The person should be able to maintain revisions and recall specific revisions. At this level a person does not need to know know how to find differences in revisions or be able to create and maintain a branch and merge the branch into an existing code base.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should understand how to create a broad, flexible plan to create and maintain a software project. The person should understand how the importance of creating a plan and developing an approach to a project before any coding is to begin. The person should understand the importance of flexibility and the importance of long term planning and how it relates to the code base.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=1014403</id>
		<title>SL Cert - Basic Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=1014403"/>
		<updated>2010-08-21T21:22:59Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;SLCertification is a community project guided by Linden Lab (see [[SL_Certification#Frequently_Asked_Questions|FAQ]]). This project page and its contents are not endorsed, managed or supervised by Linden Lab.  Linden Lab may link to this resource in the future solely as an informational service to the Second Life community.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This list of requirements is part of the [[SL Certification | Second Life Certification]] project. It is an effort to create a list of specific skills  required for persons to become certified in basic scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in basic LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Some experience and familiarity of the second life graphical user interface and controls is necessary. Also some experience of building within second life would be an advantage. Six months secondlife experience recommended.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to basic level==&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should demonstrate a mastery of common programming tasks. The focus here is not on the use of the Linden Labs library but on basic programming and the fundamental LSL commands for the control and flow of a program.  The following categories provide the basic categories.&lt;br /&gt;
&lt;br /&gt;
=== Broad Overview and Most Basic Skills  === &lt;br /&gt;
&lt;br /&gt;
* Rationale for scripting &lt;br /&gt;
* Script creation &lt;br /&gt;
* Commenting and Clarity &lt;br /&gt;
* Mono vs. LSL2&lt;br /&gt;
* Software Development&lt;br /&gt;
* Using Resources &lt;br /&gt;
&lt;br /&gt;
A person should provide a basic understanding of the potential and the limitations of scripts. The person should be able to demonstrate how to create a script both within an object rezzed in world or in their inventory. The person should  know the difference between mono and LSL2 and the implications when a script is created within inventory as opposed to an object&#039;s inventory.  A person should demonstrate a basic understanding of the construction of consistent, structured code and consistent commenting style. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the difference between server side lag, client side lag, and the script delays associated with different LSL library calls. The person does not need to memorize which function calls have a delay and how much the delay is, but they need to understand what a delay is and how to determine if a given function has a delay and how long the delay is.&lt;br /&gt;
&lt;br /&gt;
The person should also provide a very basic understanding of practices for good software development. This includes the use and maintenance of comments and the rationale for the use of functions and subroutines. Additionally, the person should provide a rudimentary understanding of code revisioning and practices to keep and maintain local back up files.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an awareness of the various resources available to help with programming in LSL. The person should demonstrate that they know how to use the LSL Portal ([http://wiki.secondlife.com/wiki/LSL_Portal]). The person should demonstrate how to use a search engine to obtain help and information about LSL.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
* Types &lt;br /&gt;
* Operators &lt;br /&gt;
* Global vs. Local Variables &lt;br /&gt;
* Typecasting &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to identify the basic data types, integer, float, string, key, list, vector and rotation. The person should know the basic operations and what they mean in context. For example, division with integers is different compared to division with floats. The person should understand that some operations are overloaded and have different meanings when combined with different types. For example, if v1 and v2 are vectors then v1*v2 is the dot product, but if v1 is a vector and r is a rotation then v1*r will rotate the vector. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate the concept of the &amp;quot;scope&amp;quot; of a variable. There is a difference if it is defined outside of an event or function. Also, the person should demonstrate an understanding that a global variable can be ignored if it is also defined locally.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate how to &amp;quot;convert&amp;quot; one variable into another and what happens. For example, a float is truncated when cast as an integer.&lt;br /&gt;
&lt;br /&gt;
==== String ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person should demonstrate an understanding of the string data type. The person should know the memory costs and how it differs from LSL1 and mono. The person should know the difference between UTF-8 and UTF-16. The person should know how to define strings and use escape codes to construct non-trivial strings.&lt;br /&gt;
&lt;br /&gt;
The person should know the basic operations defined for strings. This does not include the LSL library functions for the basic level, but the person should demonstrate an understanding of the assignment and comparison of strings. &lt;br /&gt;
&lt;br /&gt;
==== List =====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person only requires minimal understanding. The person is required to know and be able to use the various library functions at the intermediate level, but at the basic level the person need only know the more basic aspects of lists.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of how to assign lists. The person should know the basic memory costs for using a list and know the basic restrictions, such as a list element cannot be a list. &lt;br /&gt;
&lt;br /&gt;
The person should know how to concatenate two lists. The person should know how to clear a list. The person should be able to demonstrate a basic understanding of the idea behind a &amp;quot;strided&amp;quot; list and the importance of being able to group certain elements of a list and maintain their relative positioning within a list. &lt;br /&gt;
&lt;br /&gt;
==== key ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person should be able to assign a key, know the memory costs, and have a basic idea of what a key is. The person should be able to demonstrate how to assign a key and how to compare keys. &lt;br /&gt;
&lt;br /&gt;
Additionally, the person should know about the predefined variables such as NULL_KEY, TEXTURE_BLANK, TEXTURE_MEDIA, TEXTURE_DEFAULT, TEXTURE_PLYWOOD, and TEXTURE_TRANSPARANT. &lt;br /&gt;
&lt;br /&gt;
==== Math Functions ====&lt;br /&gt;
&lt;br /&gt;
At the basic level the person should demonstrate an understanding of the difference between variables of type integer and float and the operators for each type. The person should also be able to demonstrate an understanding of the various boolean operations and how they differ from the integer operations.&lt;br /&gt;
&lt;br /&gt;
===== Integer Functions =====&lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate a knowledge and an understanding of the basic operations. This includes the operations given at [http://wiki.secondlife.com/wiki/LSL_Operators]. This includes the basic operations, modulus operation, and various assignment operators.&lt;br /&gt;
&lt;br /&gt;
This also includes the bit-wise operations. The person should be able to represent an integer in decimal, binary, and hexadecimal forms. Given a number in any of the forms the person should be able to demonstrate an understanding of each of the bit-wise operations and combinations of the bit-wise operations.&lt;br /&gt;
&lt;br /&gt;
The person should also demonstrate an understanding of how to cast a variable from integer to other types and vice-versa. The person should know the difference between truncation and rounding (including rounding up and rounding down in consistent ways with both positive and negative floating point numbers). The person should demonstrate how to round and how to truncate using only the basic operations and casting numbers.&lt;br /&gt;
&lt;br /&gt;
===== Floating Point Operations =====&lt;br /&gt;
&lt;br /&gt;
In addition to the operations in the context of integers the person should also demonstrate an understanding of floating point numbers. This includes an understanding of the basic operations, but also includes the issues of rounding errors versus truncation errors in the context of floating point numbers. This also includes issues of the accumulation of errors which can lead to phenomena such as &amp;quot;prim drift.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
* Loop Constructs&lt;br /&gt;
* Conditionals &lt;br /&gt;
&lt;br /&gt;
A person should demonstrate an understanding of the different looping constructs using for, while, and do-while loops and understand when one loop construct might be favored over another in a given context. The person should also demonstrate an understanding of the &amp;quot;if&amp;quot; statement and be able to use compound and nested if statements. &lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate the ability to construct complex boolean expressions. For example, they should be able to make use of multiple boolean statements using the boolean &amp;quot;or,&amp;quot; boolean &amp;quot;not,&amp;quot; and boolean &amp;quot;and&amp;quot; to filter nontrivial conditions in a control structure or conditional. The person should demonstrate an understanding of the difference between integer operations such as &amp;quot;xor,&amp;quot; &amp;quot;and,&amp;quot; &amp;quot;or,&amp;quot; and the shift operations as opposed to the similar boolean operations.&lt;br /&gt;
&lt;br /&gt;
=== Events and Functions ===&lt;br /&gt;
&lt;br /&gt;
* Events &lt;br /&gt;
* Functions &lt;br /&gt;
* States &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic idea of an event and how a script might react in various circumstances. For example, the person should have a basic understanding of the three touch events and how they differ. At the basic level the broad categories of events that should be mastered include collision, touch, land collision, state entry/exit, timer, and attach events. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the use and creation of their own functions. This includes understanding the difference between null functions and functions that return a specific data type. The person should know the difference between a user defined function and the set of functions available within the build in library.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an understanding of the use of states. They should understand the default state, how to define new states, and move between different states. The person should have a firm understanding of the control flow as a script moves between different states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should be able to demonstrate that they understand the basic definitions. The person should also be able to demonstrate that they understand the basic idea. For example, a person should know how to calculate a dot product but also understand its relationship to the idea of a projection of one vector on to another.&lt;br /&gt;
&lt;br /&gt;
==== Basic definition of position ====&lt;br /&gt;
&lt;br /&gt;
* Global position&lt;br /&gt;
* Absolute position (within a sim)&lt;br /&gt;
* Local position &lt;br /&gt;
&lt;br /&gt;
A person should know what position is in the context of SL. This means the person should know the difference between a global coordinate, an absolute position within a sim, and the local position within a link set. An understanding of the different contexts when you might use local versus absolute is vital to working with rotations and vectors. For example, when working within a link set a local coordinate system is used. At the same time it is not uncommon to make use of local offsets when dealing with two separate objects.&lt;br /&gt;
&lt;br /&gt;
==== Basic definition of a rotation ====&lt;br /&gt;
* Euler&lt;br /&gt;
* Axis and angle&lt;br /&gt;
* Quaternions&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate that they know the definitions of a rotation. The person should know the difference between an Euler rotation and a quaternion. A person need not know the specific implementation of a quaternion but should understand a rotation in terms of an axis of rotation and an angle around that axis.&lt;br /&gt;
&lt;br /&gt;
==== Changing position and rotation via the edit window ====&lt;br /&gt;
&lt;br /&gt;
A person should be proficient using the edit window to manually move and rotate an object. The person should be able to move and rotate an object to a specific orientation (position and rotation). Also, the person should be able to read the position and rotation for a given object using the edit window.&lt;br /&gt;
&lt;br /&gt;
==== Vectors and Operations ====&lt;br /&gt;
&lt;br /&gt;
* Definition of vector in LSL&lt;br /&gt;
* Working with vector components (x, y, and z)&lt;br /&gt;
* Linear combinations of vectors&lt;br /&gt;
* Dot product&lt;br /&gt;
* Cross product&lt;br /&gt;
* Unit vectors&lt;br /&gt;
&lt;br /&gt;
A person should know the basic mathematical vector operations. The person should know how the calculations are performed and the LSL overloaded operators. For example, given two vectors u and v, the person should know how to calculate the dot product and also know that in LSL u*v will give you the dot product. The person should know how to multiply a scalar and a vector in LSL as well as find linear combinations of vectors in LSL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Basic I/0 ===&lt;br /&gt;
&lt;br /&gt;
* llWhisper&lt;br /&gt;
* llSay&lt;br /&gt;
* llShout&lt;br /&gt;
* llRegionSay&lt;br /&gt;
* llOwnerSay&lt;br /&gt;
* llInstantMessage&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to communicate information in LSL. The person should know the limitations and advantages of each command. The person should know the predefined channels for open chat and debug messages and also know the range of possible channels. The person should know the differences between using a positive number and negative number for the channel number and the relative advantages.&lt;br /&gt;
&lt;br /&gt;
At the basic level a person should know how to open a channel for listening and construct a listening event. The person should understand the importance of being able to close a listening event. For example, the person should know how to use a timer to insure that an open listener will be closed within a given time frame. &lt;br /&gt;
&lt;br /&gt;
At the basic level a person should also have a rudimentary understanding of the string functions. The person should be able to make direct comparisons and also be able to manipulate substrings. Additionally a person should be able to trim spaces off of the beginning and end of a string as well as convert the case to all upper or all lower.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=678073</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=678073"/>
		<updated>2009-12-03T02:42:14Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Rotations and Vectors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
The person should be able to go beyond an understanding of the commands and know how to achieve specific objectives. For example, the person should know how to use the llSitTarget command to have an avatar moved and rotated so that they will be looking at a specific location from a predefined distance. This requires that the person not only know how to use the llSitTarget command but also have a basic understanding of calculations of relative positions and rotations.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should also have a detailed understanding of what aspects of a prim are persistent properties and how to clear properties. For example, a person should know that text over an object is a property of the prim and know how to clear the text.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. (Note that this implies that an understanding of how rotations and offsets are changed in the context of attachments and can adjust scripts accordingly.) Scripts should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
The person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
A person seeking certification at the advanced level in this category must have a detailed understanding of permissions and controls and know how to use them in context. The person should be able to assemble scripts that can use the control system to get input from a person through their viewer and then relinquish the control in an appropriate way. The person should be able to do this in conjunction with the permissions system to animate or move an avatar and attachments on an avatar.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to obtain information about the ownership and settings for a given parcel. The person should be able to have the script react in appropriate ways with respect to the parcel settings. The person should be able to obtain the information for different parcels in any given relative position from the object containing the script. For example, at the advanced level the person should be able to construct a script that can map out all of the parcels and their respective properties in predetermined arc away from the object containing the script without moving the object.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate that they can establish secure and trusted relationships between separate objects that communicate in world. For example, the person should be able to demonstrate efficient techniques for a child object to establish a trusted connection with the object that rezzed it. The person should also demonstrate that they can establish secure and trusted connections between different objects that are not owned by the same person. For example, they should be able to demonstrate that they can verify that an object owned by another person and in a different group is a trusted object and share information with that object in a secure manner.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
A set of sample scripts for the advanced level rotations and vectors category can be found at http://slurl.com/secondlife/Hotspur/45/59/30 .&lt;br /&gt;
&lt;br /&gt;
==== Rotations and position ====&lt;br /&gt;
* using llSetPrimitiveParams to move and rotate at the same time&lt;br /&gt;
* Rotating and moving a prim to a specified orientation&lt;br /&gt;
** Absolute coordinates&lt;br /&gt;
** Relative coordinates (in a link set)&lt;br /&gt;
&lt;br /&gt;
The person should be able to move and rotate an object with a single command, llSetPrimitiveParams. The person should be able to move an object to a specified rotation and position. Moreover, the person should be able to combine multiple tasks from the intermediate section to move an object to a variety of orientations. For example, given a sequence of points in either local or absolute coordinates the person should be able to move and rotate an object to move along the points so that the objects orientation is consistent with the movement (i.e. it points along the path).&lt;br /&gt;
&lt;br /&gt;
==== Smooth movements ====&lt;br /&gt;
&lt;br /&gt;
===== Absolute coordinates =====&lt;br /&gt;
* Rotate and movement around the edge of a prim&lt;br /&gt;
* Rotate and move around a fixed point using a predefined axis&lt;br /&gt;
&lt;br /&gt;
The person should be able to calculate and move  an object so that it appears to rotate in a uniform way. The person should be able to do this around one edge of the object to make it appear to move in a uniform circular motion. For example, the person should be able to move an uncut prim like a door around an edge. The person should be able to do this around any arbitrary point. The person should also be able to rotate and move and object around any arbitrary axis as well.&lt;br /&gt;
&lt;br /&gt;
===== Local coordinates (within a linkset) =====&lt;br /&gt;
* Rotate and movement around the edge of a prim&lt;br /&gt;
* Rotate and move around a fixed point using a predefined axis&lt;br /&gt;
&lt;br /&gt;
This is the same as the previous tasks only in a relative coordinate system.&lt;br /&gt;
&lt;br /&gt;
==== Transitions ====&lt;br /&gt;
* Smooth movements from one orientation (position and rotation) to another.&lt;br /&gt;
&lt;br /&gt;
Given an initial and final orientation (position and rotation) the person should be able to move the object in a sequence of discrete points so that it appears to move smoothly from the initial to the final orientation.&lt;br /&gt;
&lt;br /&gt;
==== Determining specific orientations ====&lt;br /&gt;
&lt;br /&gt;
===== Absolute/Sim coordinates =====&lt;br /&gt;
* Given a point rotate an object to face the point.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points.&lt;br /&gt;
&lt;br /&gt;
This is similar to the Intermediate requirements. The difference here is that the movement from one orientation to another should be done in a number of steps to appear like a smoother movement. Also, the object should point in the specified direction but should maintain some sort of orientation. For example, the person should have one face of a box point toward a given location, but an arbitrary face should be pointing in an &amp;quot;upward&amp;quot; direction.&lt;br /&gt;
&lt;br /&gt;
===== Local  coordinates to local =====&lt;br /&gt;
* Given a point rotate an object to face a local point.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points. &lt;br /&gt;
&lt;br /&gt;
Similar to the previous task, but the objects should both be in the same local context.&lt;br /&gt;
&lt;br /&gt;
===== Local  coordinates to absolute =====&lt;br /&gt;
* Given a point rotate an object to face a point in absolute/sim coordinates.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points. &lt;br /&gt;
&lt;br /&gt;
Same as the previous task, but in this case one object should be in a local context and the other in a global context. For example, one prim in a linkset should be moved to face an object moving in a sim&#039;s global coordinate system.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=676312</id>
		<title>SL Cert - Basic Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=676312"/>
		<updated>2009-12-01T15:44:44Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Criteria for testing to basic level */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This list of requirements is part of the [[SL Certification | Second Life Certification]] project. It is an effort to create a list of specific skills  required for persons to become certified in basic scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in basic LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Some experience and familiarity of the second life graphical user interface and controls is necessary. Also some experience of building within second life would be an advantage. Six months secondlife experience recommended.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to basic level==&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should demonstrate a mastery of common programming tasks. The focus here is not on the use of the Linden Labs library but on basic programming and the fundamental LSL commands for the control and flow of a program.  The following categories provide the basic categories.&lt;br /&gt;
&lt;br /&gt;
=== Broad Overview and Most Basic Skills  === &lt;br /&gt;
&lt;br /&gt;
* Rationale for scripting &lt;br /&gt;
* Script creation &lt;br /&gt;
* Commenting and Clarity &lt;br /&gt;
* Mono vs. LSL2&lt;br /&gt;
* Software Development&lt;br /&gt;
&lt;br /&gt;
A person should provide a basic understanding of the potential and the limitations of scripts. The person should be able to demonstrate how to create a script both within an object rezzed in world or in their inventory. The person should  know the difference between mono and LSL2 and the implications when a script is created within inventory as opposed to an object&#039;s inventory.  A person should demonstrate a basic understanding of the construction of consistent, structured code and consistent commenting style. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the difference between server side lag, client side lag, and the script delays associated with different LSL library calls. The person does not need to memorize which function calls have a delay and how much the delay is, but they need to understand what a delay is and how to determine if a given function has a delay and how long the delay is.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should provide a very basic understanding of practices for good software development. This includes the use and maintenance of comments and the rationale for the use of functions and subroutines. Additionally, the person should provide a rudimentary understanding of code revisioning and practices to keep and maintain local back up files.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
* Types &lt;br /&gt;
* Operators &lt;br /&gt;
* Global vs. Local Variables &lt;br /&gt;
* Typecasting &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to identify the basic data types, integer, float, string, key, list, vector and rotation. The person should know the basic operations and what they mean in context. For example, division with integers is different compared to division with floats. The person should understand that some operations are overloaded and have different meanings when combined with different types. For example, if v1 and v2 are vectors then v1*v2 is the dot product, but if v1 is a vector and r is a rotation then v1*r will rotate the vector. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate the concept of the &amp;quot;scope&amp;quot; of a variable. There is a difference if it is defined outside of an event or function. Also, the person should demonstrate an understanding that a global variable can be ignored if it is also defined locally.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate how to &amp;quot;convert&amp;quot; one variable into another and what happens. For example, a float is trunctated when cast as an integer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
* Loop Constructs&lt;br /&gt;
* Conditionals &lt;br /&gt;
&lt;br /&gt;
A person should demonstrate an understanding of the different looping constructs using for, while, and do-whole loops and understand when one loop construct might be favored over another in a given context. The person should also demonstrate an understanding of the &amp;quot;if&amp;quot; statement and be able to use compound and nested if statements. &lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate the ability to construct complex boolean expressions. For example, they should be able to make use of multiple boolean statements using the boolean &amp;quot;or,&amp;quot; boolean &amp;quot;not,&amp;quot; and boolean &amp;quot;and&amp;quot; to filter nontrivial conditions in a control structure or conditional. The person should demonstrate an understanding of the difference between integer operations such as &amp;quot;xor,&amp;quot; &amp;quot;and,&amp;quot; &amp;quot;or,&amp;quot; and the shift operations as opposed to the similar boolean operations.&lt;br /&gt;
&lt;br /&gt;
=== Events and Functions ===&lt;br /&gt;
&lt;br /&gt;
* Events &lt;br /&gt;
* Functions &lt;br /&gt;
* States &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic idea of an event and how a script might react in various circumstances. For example, the person should have a basic understanding of the three touch events and how they differ. At the basic level the broad categories of events that should be mastered include collision, touch, land collision, state entry/exit, timer, and attach events. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the use and creation of their own functions. This includes understanding the difference between null functions and functions that return a specific data type. The person should know the difference between a user defined function and the set of functions available within the build in library.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an understanding of the use of states. They should understand the default state, how to define new states, and move between different states. The person should have a firm understanding of the control flow as a script moves between different states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should be able to demonstrate that they understand the basic definitions. The person should also be able to demonstrate that they understand the basic idea. For example, a person should know how to calculate a dot product but also understand its relationship to the idea of a projection of one vector on to another.&lt;br /&gt;
&lt;br /&gt;
==== Basic definition of position ====&lt;br /&gt;
&lt;br /&gt;
* Globale position&lt;br /&gt;
* Absolute position (within a sim)&lt;br /&gt;
* Local position &lt;br /&gt;
&lt;br /&gt;
A person should know what position is in the context of SL. This means the person should know the difference between a global coordinate, an absolute position within a sim, and the local position within a linkset. An understanding of the different contexts when you might use local versus absolute is vital to working with rotations and vectors. For example, when working within a linkset a local coordinate system is used. At the same time it is not uncommon to make use of local offsets when dealing with two separate objects.&lt;br /&gt;
&lt;br /&gt;
==== Basic definition of a rotation ====&lt;br /&gt;
* Euler&lt;br /&gt;
* Axis and angle&lt;br /&gt;
* Quarternions&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate that they know the definitions of a rotation. The person should know the difference between an Euler rotation and a quarternion. A person need not know the specific implementation of a quarternion but should understand a roation in terms of an axis of rotation and an angle around that axis.&lt;br /&gt;
&lt;br /&gt;
==== Changing position and rotation via the edit window ====&lt;br /&gt;
&lt;br /&gt;
A person should be proficient using the edit window to manually move and rotate an object. The person should be able to move and rotate an object to a specific orientation (position and rotation). Also, the person should be able to read the position and rotation for a given object using the edit window.&lt;br /&gt;
&lt;br /&gt;
==== Vectors and Operations ====&lt;br /&gt;
&lt;br /&gt;
* Definition of vector in LSL&lt;br /&gt;
* Working with vector components (x, y, and z)&lt;br /&gt;
* Linear combinations of vectors&lt;br /&gt;
* Dot product&lt;br /&gt;
* Cross product&lt;br /&gt;
* Unit vectors&lt;br /&gt;
&lt;br /&gt;
A person should know the basic mathematical vector operations. The person should know how the calculations are performed and the LSL overloaded operators. For example, given two vectors u and v, the person should know how to calculate the dot product and also know that in LSL u*v will give you the dot product. The person should know how to multiply a scalar and a vector in LSL as well as find linear combinations of vectors in LSL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Basic I/0 ===&lt;br /&gt;
&lt;br /&gt;
* llWhisper&lt;br /&gt;
* llSay&lt;br /&gt;
* llShout&lt;br /&gt;
* llRegionSay&lt;br /&gt;
* llOwnerSay&lt;br /&gt;
* llInstantMessage&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to communicate information in LSL. The person should know the limitations and advantages of each command. The person should now the predefined channels for open chat and debug messages and also know the range of possible channels. The person should know the differences between using a positive number and negative number for the channel number and the relative advantages.&lt;br /&gt;
&lt;br /&gt;
At the basic level a person should know how to open a channel for listening and construct a listening event. The person should understand the importance of being able to close a listening event. For example, the person should know how to use a timer to insure that an open listener will be closed within a given time frame. &lt;br /&gt;
&lt;br /&gt;
At the basic level a person should also have a rudimentary understanding of the string functions. The person should be able to make direct comparisons and also be able to manipulate substrings. Additionally a person should be able to trim spaces off of the beginning and end of a string as well as convert the case to all upper or all lower.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=676302</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=676302"/>
		<updated>2009-12-01T15:41:01Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
The person should be able to go beyond an understanding of the commands and know how to achieve specific objectives. For example, the person should know how to use the llSitTarget command to have an avatar moved and rotated so that they will be looking at a specific location from a predefined distance. This requires that the person not only know how to use the llSitTarget command but also have a basic understanding of calculations of relative positions and rotations.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should also have a detailed understanding of what aspects of a prim are persistent properties and how to clear properties. For example, a person should know that text over an object is a property of the prim and know how to clear the text.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. (Note that this implies that an understanding of how rotations and offsets are changed in the context of attachments and can adjust scripts accordingly.) Scripts should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
The person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
A person seeking certification at the advanced level in this category must have a detailed understanding of permissions and controls and know how to use them in context. The person should be able to assemble scripts that can use the control system to get input from a person through their viewer and then relinquish the control in an appropriate way. The person should be able to do this in conjunction with the permissions system to animate or move an avatar and attachments on an avatar.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to obtain information about the ownership and settings for a given parcel. The person should be able to have the script react in appropriate ways with respect to the parcel settings. The person should be able to obtain the information for different parcels in any given relative position from the object containing the script. For example, at the advanced level the person should be able to construct a script that can map out all of the parcels and their respective properties in predetermined arc away from the object containing the script without moving the object.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate that they can establish secure and trusted relationships between separate objects that communicate in world. For example, the person should be able to demonstrate efficient techniques for a child object to establish a trusted connection with the object that rezzed it. The person should also demonstrate that they can establish secure and trusted connections between different objects that are not owned by the same person. For example, they should be able to demonstrate that they can verify that an object owned by another person and in a different group is a trusted object and share information with that object in a secure manner.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
==== Rotations and position ====&lt;br /&gt;
* using llSetPrimitiveParams to move and rotate at the same time&lt;br /&gt;
* Rotating and moving a prim to a specified orientation&lt;br /&gt;
** Absolute coordinates&lt;br /&gt;
** Relative coordinates (in a link set)&lt;br /&gt;
&lt;br /&gt;
The person should be able to move and rotate an object with a single command, llSetPrimitiveParams. The person should be able to move an object to a specified rotation and position. Moreover, the person should be able to combine multiple tasks from the intermediate section to move an object to a variety of orientations. For example, given a sequence of points in either local or absolute coordinates the person should be able to move and rotate an object to move along the points so that the objects orientation is consistent with the movement (i.e. it points along the path).&lt;br /&gt;
&lt;br /&gt;
==== Smooth movements ====&lt;br /&gt;
&lt;br /&gt;
===== Absolute coordinates =====&lt;br /&gt;
* Rotate and movement around the edge of a prim&lt;br /&gt;
* Rotate and move around a fixed point using a predefined axis&lt;br /&gt;
&lt;br /&gt;
The person should be able to calculate and move  an object so that it appears to rotate in a uniform way. The person should be able to do this around one edge of the object to make it appear to move in a uniform circular motion. For example, the person should be able to move an uncut prim like a door around an edge. The person should be able to do this around any arbitrary point. The person should also be able to rotate and move and object around any arbitrary axis as well.&lt;br /&gt;
&lt;br /&gt;
===== Local coordinates (within a linkset) =====&lt;br /&gt;
* Rotate and movement around the edge of a prim&lt;br /&gt;
* Rotate and move around a fixed point using a predefined axis&lt;br /&gt;
&lt;br /&gt;
This is the same as the previous tasks only in a relative coordinate system.&lt;br /&gt;
&lt;br /&gt;
==== Transitions ====&lt;br /&gt;
* Smooth movements from one orientation (position and rotation) to another.&lt;br /&gt;
&lt;br /&gt;
Given an initial and final orientation (position and rotation) the person should be able to move the object in a sequence of discrete points so that it appears to move smoothly from the initial to the final orientation.&lt;br /&gt;
&lt;br /&gt;
==== Determining specific orientations ====&lt;br /&gt;
&lt;br /&gt;
===== Absolute/Sim coordinates =====&lt;br /&gt;
* Given a point rotate an object to face the point.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points.&lt;br /&gt;
&lt;br /&gt;
This is similar to the Intermediate requirements. The difference here is that the movement from one orientation to another should be done in a number of steps to appear like a smoother movement. Also, the object should point in the specified direction but should maintain some sort of orientation. For example, the person should have one face of a box point toward a given location, but an arbitrary face should be pointing in an &amp;quot;upward&amp;quot; direction.&lt;br /&gt;
&lt;br /&gt;
===== Local  coordinates to local =====&lt;br /&gt;
* Given a point rotate an object to face a local point.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points. &lt;br /&gt;
&lt;br /&gt;
Similar to the previous task, but the objects should both be in the same local context.&lt;br /&gt;
&lt;br /&gt;
===== Local  coordinates to absolute =====&lt;br /&gt;
* Given a point rotate an object to face a point in absolute/sim coordinates.&lt;br /&gt;
* Given two points and the current position rotate an object to face perpindicular to the two points. &lt;br /&gt;
&lt;br /&gt;
Same as the previous task, but in this case one object should be in a local context and the other in a global context. For example, one prim in a linkset should be moved to face an object moving in a sim&#039;s global coordinate system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=676292</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=676292"/>
		<updated>2009-12-01T15:38:58Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification.&lt;br /&gt;
&lt;br /&gt;
(Recommended) An application should have a basic understanding of algebraic functions.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha(transparency)&lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Basic understanding of the different types of permissions that may be obtained.&lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person  should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the data server event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types. &lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Chat commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Commands for Force&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Impulse&lt;br /&gt;
# Commands for Impulse&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular impulse.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
The person who wants to achieve an intermediate rating for physics should know all of the basic commands for both linear and angular force as well as momentum. The person should know the difference between the local and global settings. The person should know the difference between the the force/torque commands and the impulse commands.&lt;br /&gt;
&lt;br /&gt;
The person should know the relationship between force and impulse. Both are representations of Newton&#039;s Second Law where force is the differential form and impulse is the integral form. The person should understand the relationship between force, mass, and acceleration as well as the relationship between impulse and momentum.&lt;br /&gt;
&lt;br /&gt;
The very basic commands of scripting a vehicle should be known. At the intermediate level a person is not expected to be able to create a script for a vehicle but should understand the basic commands necessary for it&#039;s functionality and alter an existing vehicle script.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events.&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
A person who wishes to achieve an intermediate certification in detection should know the different events in which detection is relevant. The person should know how the different detection commands are used within the different events. The person should know be able to construct scripts that make use of the events and detection routines and combine them. &lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to use sensors to detect a person. The person should know the difference between a repeating and one time sensor. The person should know how to construct scripts that make use of the sensor and no_sensor events. The person should know the limitations of the commands and understand the importance and how to narrowly define a sensor.&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
For the intermediate requirements a person should be able to take the ideas required for the basic requirements and implement them in LSL. More importantly the person should begin to demonstrate an ability to work with the definitions in specific contexts and solve basic problems using a script.&lt;br /&gt;
&lt;br /&gt;
==== Reference Frames ====&lt;br /&gt;
* Global&lt;br /&gt;
* Sim&lt;br /&gt;
* Local&lt;br /&gt;
&lt;br /&gt;
Similar to the basic requirements, but the person must be able to demonstrate an ability to move back and forth between global, sim, and local coordinates. For example, a script that is in a linkset should be able to work with a coordinate passed to it from an object in the sim&#039;s reference frame and react accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands to get position information  ====&lt;br /&gt;
* llGetPos&lt;br /&gt;
* llGetLocalPos&lt;br /&gt;
* llGetRootPosition&lt;br /&gt;
* llGetRegionCorner&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate an understanding of the basic position commands for getting information about an object&#039;s position. The person must demonstrate an understanding how the command works in different global and local contexts.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands to get rotation information ====&lt;br /&gt;
* llGetRot&lt;br /&gt;
* llGetLocalRot&lt;br /&gt;
* llGetRootRotation&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate an understanding of the basic rotation commands for getting information about an object&#039;s rotation. The person must demonstrate an understanding how the command works in different global and local contexts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Basic commands for changing position ====&lt;br /&gt;
* llSetPos&lt;br /&gt;
* llSetPrimitiveParams&lt;br /&gt;
* llSetPos within different reference frames.&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate a basic understanding of how to move an object. The person should be able to move an object to specific points. This should be done in both local, sim, and global coordinate systems. For example, a person should be able to move a prim within a linkset to a specific point in the sim&#039;s coordinate system. More importantly given two separate objects the person must be able to move a prim to points in a local context defined by the two objects.&lt;br /&gt;
&lt;br /&gt;
==== Basic commands for changing and working with rotations ====&lt;br /&gt;
* llSetRot&lt;br /&gt;
* llSetLocalRot&lt;br /&gt;
* llSetPrimitiveParams&lt;br /&gt;
* llAxes2Rot&lt;br /&gt;
* llAxisAngle2Rot&lt;br /&gt;
* llRotBetween&lt;br /&gt;
* llRot2Axis&lt;br /&gt;
* llRot2Angle&lt;br /&gt;
* How the commands work in different reference frames.&lt;br /&gt;
* Rotations&lt;br /&gt;
** Multiplication and division of rotations&lt;br /&gt;
** Difference between left and right multiplication&lt;br /&gt;
&lt;br /&gt;
A person must demonstrate a basic understanding of how to rotate an object. The person must be able to rotate an object to specific orientations. This should be done with a variety of different commands. The person should demonstrate an ability to calculate appropriate rotations given a variety of information. For example, the person should be able to calculate the rotation necessary to achive a given orientation using an Euler rotation as well as making use of an axis of rotation and an angle.&lt;br /&gt;
&lt;br /&gt;
==== Working with vectors ====&lt;br /&gt;
* Finding a vector component in a given direction&lt;br /&gt;
* Finding a vector perpendicular to two vectors.&lt;br /&gt;
* Finding a vector perpindicular to a plane.&lt;br /&gt;
&lt;br /&gt;
The person should be able to perform basic vector operations in LSL. The person should be able to calculate the components of a vector in arbitrary directions. The person should be able to do this in a variety of contexts such as using a plane or multiple vectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Workflow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;br /&gt;
&lt;br /&gt;
At the intermediate level the Programming and Software Development category includes greater in depth knowledge of the basic LSL commands. At this level the person should know how to use all of the flow commands and construct a wide variety of scripts that require all of the flow commands.&lt;br /&gt;
&lt;br /&gt;
In addition, the person should know and understand how to use all of the list commands. A person should be able to manipulate lists. For example, a person should be able to delete and insert sublists into an existing list. The person should be able to use strided list and know how to sort and randomize a list.  The person should also have a basic understanding of the memory overhead associated with a list.&lt;br /&gt;
&lt;br /&gt;
The person should also know and understand all of the string manipulation routines. The person should be able to manipulate strings. For example, a person should be able to delete and insert substrings into an existing string. The person should have a basic understanding of the memory overhead associated with strings.&lt;br /&gt;
&lt;br /&gt;
The person should be able to make use of at least one revision control system. The person should be able to maintain revisions and recall specific revisions. At this level a person does not need to know know how to find differences in revisions or be able to create and maintain a branch and merge the branch into an existing code base.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should understand how to create a broad, flexible plan to create and maintain a software project. The person should understand how the importance of creating a plan and developing an approach to a project before any coding is to begin. The person should understand the importance of flexibility and the importance of long term planning and how it relates to the code base.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=676282</id>
		<title>SL Cert - Basic Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=676282"/>
		<updated>2009-12-01T15:37:01Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This list of requirements is part of the [[SL Certification | Second Life Certification]] project. It is an effort to create a list of specific skills  required for persons to become certified in basic scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in basic LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Some experience and familiarity of the second life graphical user interface and controls is necessary. Also some experience of building within second life would be an advantage. Six months secondlife experience recommended.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to basic level==&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should demonstrate a mastery of common programming tasks. The following categories provide the basic categories.&lt;br /&gt;
&lt;br /&gt;
=== Broad Overview and Most Basic Skills  === &lt;br /&gt;
&lt;br /&gt;
* Rationale for scripting &lt;br /&gt;
* Script creation &lt;br /&gt;
* Commenting and Clarity &lt;br /&gt;
* Mono vs. LSL2&lt;br /&gt;
* Software Development&lt;br /&gt;
&lt;br /&gt;
A person should provide a basic understanding of the potential and the limitations of scripts. The person should be able to demonstrate how to create a script both within an object rezzed in world or in their inventory. The person should  know the difference between mono and LSL2 and the implications when a script is created within inventory as opposed to an object&#039;s inventory.  A person should demonstrate a basic understanding of the construction of consistent, structured code and consistent commenting style. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the difference between server side lag, client side lag, and the script delays associated with different LSL library calls. The person does not need to memorize which function calls have a delay and how much the delay is, but they need to understand what a delay is and how to determine if a given function has a delay and how long the delay is.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should provide a very basic understanding of practices for good software development. This includes the use and maintenance of comments and the rationale for the use of functions and subroutines. Additionally, the person should provide a rudimentary understanding of code revisioning and practices to keep and maintain local back up files.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
* Types &lt;br /&gt;
* Operators &lt;br /&gt;
* Global vs. Local Variables &lt;br /&gt;
* Typecasting &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to identify the basic data types, integer, float, string, key, list, vector and rotation. The person should know the basic operations and what they mean in context. For example, division with integers is different compared to division with floats. The person should understand that some operations are overloaded and have different meanings when combined with different types. For example, if v1 and v2 are vectors then v1*v2 is the dot product, but if v1 is a vector and r is a rotation then v1*r will rotate the vector. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate the concept of the &amp;quot;scope&amp;quot; of a variable. There is a difference if it is defined outside of an event or function. Also, the person should demonstrate an understanding that a global variable can be ignored if it is also defined locally.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate how to &amp;quot;convert&amp;quot; one variable into another and what happens. For example, a float is trunctated when cast as an integer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
* Loop Constructs&lt;br /&gt;
* Conditionals &lt;br /&gt;
&lt;br /&gt;
A person should demonstrate an understanding of the different looping constructs using for, while, and do-whole loops and understand when one loop construct might be favored over another in a given context. The person should also demonstrate an understanding of the &amp;quot;if&amp;quot; statement and be able to use compound and nested if statements. &lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate the ability to construct complex boolean expressions. For example, they should be able to make use of multiple boolean statements using the boolean &amp;quot;or,&amp;quot; boolean &amp;quot;not,&amp;quot; and boolean &amp;quot;and&amp;quot; to filter nontrivial conditions in a control structure or conditional. The person should demonstrate an understanding of the difference between integer operations such as &amp;quot;xor,&amp;quot; &amp;quot;and,&amp;quot; &amp;quot;or,&amp;quot; and the shift operations as opposed to the similar boolean operations.&lt;br /&gt;
&lt;br /&gt;
=== Events and Functions ===&lt;br /&gt;
&lt;br /&gt;
* Events &lt;br /&gt;
* Functions &lt;br /&gt;
* States &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic idea of an event and how a script might react in various circumstances. For example, the person should have a basic understanding of the three touch events and how they differ. At the basic level the broad categories of events that should be mastered include collision, touch, land collision, state entry/exit, timer, and attach events. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the use and creation of their own functions. This includes understanding the difference between null functions and functions that return a specific data type. The person should know the difference between a user defined function and the set of functions available within the build in library.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an understanding of the use of states. They should understand the default state, how to define new states, and move between different states. The person should have a firm understanding of the control flow as a script moves between different states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rotations and Vectors ===&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should be able to demonstrate that they understand the basic definitions. The person should also be able to demonstrate that they understand the basic idea. For example, a person should know how to calculate a dot product but also understand its relationship to the idea of a projection of one vector on to another.&lt;br /&gt;
&lt;br /&gt;
==== Basic definition of position ====&lt;br /&gt;
&lt;br /&gt;
* Globale position&lt;br /&gt;
* Absolute position (within a sim)&lt;br /&gt;
* Local position &lt;br /&gt;
&lt;br /&gt;
A person should know what position is in the context of SL. This means the person should know the difference between a global coordinate, an absolute position within a sim, and the local position within a linkset. An understanding of the different contexts when you might use local versus absolute is vital to working with rotations and vectors. For example, when working within a linkset a local coordinate system is used. At the same time it is not uncommon to make use of local offsets when dealing with two separate objects.&lt;br /&gt;
&lt;br /&gt;
==== Basic definition of a rotation ====&lt;br /&gt;
* Euler&lt;br /&gt;
* Axis and angle&lt;br /&gt;
* Quarternions&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate that they know the definitions of a rotation. The person should know the difference between an Euler rotation and a quarternion. A person need not know the specific implementation of a quarternion but should understand a roation in terms of an axis of rotation and an angle around that axis.&lt;br /&gt;
&lt;br /&gt;
==== Changing position and rotation via the edit window ====&lt;br /&gt;
&lt;br /&gt;
A person should be proficient using the edit window to manually move and rotate an object. The person should be able to move and rotate an object to a specific orientation (position and rotation). Also, the person should be able to read the position and rotation for a given object using the edit window.&lt;br /&gt;
&lt;br /&gt;
==== Vectors and Operations ====&lt;br /&gt;
&lt;br /&gt;
* Definition of vector in LSL&lt;br /&gt;
* Working with vector components (x, y, and z)&lt;br /&gt;
* Linear combinations of vectors&lt;br /&gt;
* Dot product&lt;br /&gt;
* Cross product&lt;br /&gt;
* Unit vectors&lt;br /&gt;
&lt;br /&gt;
A person should know the basic mathematical vector operations. The person should know how the calculations are performed and the LSL overloaded operators. For example, given two vectors u and v, the person should know how to calculate the dot product and also know that in LSL u*v will give you the dot product. The person should know how to multiply a scalar and a vector in LSL as well as find linear combinations of vectors in LSL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Basic I/0 ===&lt;br /&gt;
&lt;br /&gt;
* llWhisper&lt;br /&gt;
* llSay&lt;br /&gt;
* llShout&lt;br /&gt;
* llRegionSay&lt;br /&gt;
* llOwnerSay&lt;br /&gt;
* llInstantMessage&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to communicate information in LSL. The person should know the limitations and advantages of each command. The person should now the predefined channels for open chat and debug messages and also know the range of possible channels. The person should know the differences between using a positive number and negative number for the channel number and the relative advantages.&lt;br /&gt;
&lt;br /&gt;
At the basic level a person should know how to open a channel for listening and construct a listening event. The person should understand the importance of being able to close a listening event. For example, the person should know how to use a timer to insure that an open listener will be closed within a given time frame. &lt;br /&gt;
&lt;br /&gt;
At the basic level a person should also have a rudimentary understanding of the string functions. The person should be able to make direct comparisons and also be able to manipulate substrings. Additionally a person should be able to trim spaces off of the beginning and end of a string as well as convert the case to all upper or all lower.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=676272</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=676272"/>
		<updated>2009-12-01T15:29:57Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Advanced I/0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
The person should be able to go beyond an understanding of the commands and know how to achieve specific objectives. For example, the person should know how to use the llSitTarget command to have an avatar moved and rotated so that they will be looking at a specific location from a predefined distance. This requires that the person not only know how to use the llSitTarget command but also have a basic understanding of calculations of relative positions and rotations.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should also have a detailed understanding of what aspects of a prim are persistent properties and how to clear properties. For example, a person should know that text over an object is a property of the prim and know how to clear the text.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. (Note that this implies that an understanding of how rotations and offsets are changed in the context of attachments and can adjust scripts accordingly.) Scripts should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
The person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
A person seeking certification at the advanced level in this category must have a detailed understanding of permissions and controls and know how to use them in context. The person should be able to assemble scripts that can use the control system to get input from a person through their viewer and then relinquish the control in an appropriate way. The person should be able to do this in conjunction with the permissions system to animate or move an avatar and attachments on an avatar.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to obtain information about the ownership and settings for a given parcel. The person should be able to have the script react in appropriate ways with respect to the parcel settings. The person should be able to obtain the information for different parcels in any given relative position from the object containing the script. For example, at the advanced level the person should be able to construct a script that can map out all of the parcels and their respective properties in predetermined arc away from the object containing the script without moving the object.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate that they can establish secure and trusted relationships between separate objects that communicate in world. For example, the person should be able to demonstrate efficient techniques for a child object to establish a trusted connection with the object that rezzed it. The person should also demonstrate that they can establish secure and trusted connections between different objects that are not owned by the same person. For example, they should be able to demonstrate that they can verify that an object owned by another person and in a different group is a trusted object and share information with that object in a secure manner.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=676262</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=676262"/>
		<updated>2009-12-01T15:26:17Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Inventory and Simulator Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
The person should be able to go beyond an understanding of the commands and know how to achieve specific objectives. For example, the person should know how to use the llSitTarget command to have an avatar moved and rotated so that they will be looking at a specific location from a predefined distance. This requires that the person not only know how to use the llSitTarget command but also have a basic understanding of calculations of relative positions and rotations.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should also have a detailed understanding of what aspects of a prim are persistent properties and how to clear properties. For example, a person should know that text over an object is a property of the prim and know how to clear the text.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. (Note that this implies that an understanding of how rotations and offsets are changed in the context of attachments and can adjust scripts accordingly.) Scripts should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
The person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
A person seeking certification at the advanced level in this category must have a detailed understanding of permissions and controls and know how to use them in context. The person should be able to assemble scripts that can use the control system to get input from a person through their viewer and then relinquish the control in an appropriate way. The person should be able to do this in conjunction with the permissions system to animate or move an avatar and attachments on an avatar.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to obtain information about the ownership and settings for a given parcel. The person should be able to have the script react in appropriate ways with respect to the parcel settings. The person should be able to obtain the information for different parcels in any given relative position from the object containing the script. For example, at the advanced level the person should be able to construct a script that can map out all of the parcels and their respective properties in predetermined arc away from the object containing the script without moving the object.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=676252</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=676252"/>
		<updated>2009-12-01T15:21:26Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Avatars and Agents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
The person should be able to go beyond an understanding of the commands and know how to achieve specific objectives. For example, the person should know how to use the llSitTarget command to have an avatar moved and rotated so that they will be looking at a specific location from a predefined distance. This requires that the person not only know how to use the llSitTarget command but also have a basic understanding of calculations of relative positions and rotations.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should also have a detailed understanding of what aspects of a prim are persistent properties and how to clear properties. For example, a person should know that text over an object is a property of the prim and know how to clear the text.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. (Note that this implies that an understanding of how rotations and offsets are changed in the context of attachments and can adjust scripts accordingly.) Scripts should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
The person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
A person seeking certification at the advanced level in this category must have a detailed understanding of permissions and controls and know how to use them in context. The person should be able to assemble scripts that can use the control system to get input from a person through their viewer and then relinquish the control in an appropriate way. The person should be able to do this in conjunction with the permissions system to animate or move an avatar and attachments on an avatar.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=676242</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=676242"/>
		<updated>2009-12-01T15:14:35Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Primitives, Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
The person should be able to go beyond an understanding of the commands and know how to achieve specific objectives. For example, the person should know how to use the llSitTarget command to have an avatar moved and rotated so that they will be looking at a specific location from a predefined distance. This requires that the person not only know how to use the llSitTarget command but also have a basic understanding of calculations of relative positions and rotations.&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should also have a detailed understanding of what aspects of a prim are persistent properties and how to clear properties. For example, a person should know that text over an object is a property of the prim and know how to clear the text.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. (Note that this implies that an understanding of how rotations and offsets are changed in the context of attachments and can adjust scripts accordingly.) Scripts should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673892</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673892"/>
		<updated>2009-11-27T20:47:36Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Avatars and Agents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. (Note that this implies that an understanding of how rotations and offsets are changed in the context of attachments and can adjust scripts accordingly.) Scripts should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673882</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673882"/>
		<updated>2009-11-27T20:45:12Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Primitives, Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should be able to bring together more complex calculations with respect to the various commands. For example, the person should be able to convert between RGB and HSV colors. Another example is the person should be able to construct scripts that automatically scale and position textures to achieve complex effects such as using multiple prims to display one large texture.&lt;br /&gt;
&lt;br /&gt;
The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. They should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=673112</id>
		<title>SL Cert - Basic Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=673112"/>
		<updated>2009-11-26T16:30:41Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Control Structures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This list of requirements is part of the [[SL Certification | Second Life Certification]] project. It is an effort to create a list of specific skills  required for persons to become certified in basic scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in basic LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Some experience and familiarity of the second life graphical user interface and controls is necessary. Also some experience of building within second life would be an advantage. Six months secondlife experience recommended.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to basic level==&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should demonstrate a mastery of common programming tasks. The following categories provide the basic categories.&lt;br /&gt;
&lt;br /&gt;
=== Broad Overview and Most Basic Skills  === &lt;br /&gt;
&lt;br /&gt;
* Rationale for scripting &lt;br /&gt;
* Script creation &lt;br /&gt;
* Commenting and Clarity &lt;br /&gt;
* Mono vs. LSL2&lt;br /&gt;
* Software Development&lt;br /&gt;
&lt;br /&gt;
A person should provide a basic understanding of the potential and the limitations of scripts. The person should be able to demonstrate how to create a script both within an object rezzed in world or in their inventory. The person should  know the difference between mono and LSL2 and the implications when a script is created within inventory as opposed to an object&#039;s inventory.  A person should demonstrate a basic understanding of the construction of consistent, structured code and consistent commenting style. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the difference between server side lag, client side lag, and the script delays associated with different LSL library calls. The person does not need to memorize which function calls have a delay and how much the delay is, but they need to understand what a delay is and how to determine if a given function has a delay and how long the delay is.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should provide a very basic understanding of practices for good software development. This includes the use and maintenance of comments and the rationale for the use of functions and subroutines. Additionally, the person should provide a rudimentary understanding of code revisioning and practices to keep and maintain local back up files.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
* Types &lt;br /&gt;
* Operators &lt;br /&gt;
* Global vs. Local Variables &lt;br /&gt;
* Typecasting &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to identify the basic data types, integer, float, string, key, list, vector and rotation. The person should know the basic operations and what they mean in context. For example, division with integers is different compared to division with floats. The person should understand that some operations are overloaded and have different meanings when combined with different types. For example, if v1 and v2 are vectors then v1*v2 is the dot product, but if v1 is a vector and r is a rotation then v1*r will rotate the vector. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate the concept of the &amp;quot;scope&amp;quot; of a variable. There is a difference if it is defined outside of an event or function. Also, the person should demonstrate an understanding that a global variable can be ignored if it is also defined locally.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate how to &amp;quot;convert&amp;quot; one variable into another and what happens. For example, a float is trunctated when cast as an integer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
* Loop Constructs&lt;br /&gt;
* Conditionals &lt;br /&gt;
&lt;br /&gt;
A person should demonstrate an understanding of the different looping constructs using for, while, and do-whole loops and understand when one loop construct might be favored over another in a given context. The person should also demonstrate an understanding of the &amp;quot;if&amp;quot; statement and be able to use compound and nested if statements. &lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate the ability to construct complex boolean expressions. For example, they should be able to make use of multiple boolean statements using the boolean &amp;quot;or,&amp;quot; boolean &amp;quot;not,&amp;quot; and boolean &amp;quot;and&amp;quot; to filter nontrivial conditions in a control structure or conditional. The person should demonstrate an understanding of the difference between integer operations such as &amp;quot;xor,&amp;quot; &amp;quot;and,&amp;quot; &amp;quot;or,&amp;quot; and the shift operations as opposed to the similar boolean operations.&lt;br /&gt;
&lt;br /&gt;
=== Events and Functions ===&lt;br /&gt;
&lt;br /&gt;
* Events &lt;br /&gt;
* Functions &lt;br /&gt;
* States &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic idea of an event and how a script might react in various circumstances. For example, the person should have a basic understanding of the three touch events and how they differ. At the basic level the broad categories of events that should be mastered include collision, touch, land collision, state entry/exit, timer, and attach events. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the use and creation of their own functions. This includes understanding the difference between null functions and functions that return a specific data type. The person should know the difference between a user defined function and the set of functions available within the build in library.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an understanding of the use of states. They should understand the default state, how to define new states, and move between different states. The person should have a firm understanding of the control flow as a script moves between different states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Basic I/0 ===&lt;br /&gt;
&lt;br /&gt;
* llWhisper&lt;br /&gt;
* llSay&lt;br /&gt;
* llShout&lt;br /&gt;
* llRegionSay&lt;br /&gt;
* llOwnerSay&lt;br /&gt;
* llInstantMessage&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to communicate information in LSL. The person should know the limitations and advantages of each command. The person should now the predefined channels for open chat and debug messages and also know the range of possible channels. The person should know the differences between using a positive number and negative number for the channel number and the relative advantages.&lt;br /&gt;
&lt;br /&gt;
At the basic level a person should know how to open a channel for listening and construct a listening event. The person should understand the importance of being able to close a listening event. For example, the person should know how to use a timer to insure that an open listener will be closed within a given time frame. &lt;br /&gt;
&lt;br /&gt;
At the basic level a person should also have a rudimentary understanding of the string functions. The person should be able to make direct comparisons and also be able to manipulate substrings. Additionally a person should be able to trim spaces off of the beginning and end of a string as well as convert the case to all upper or all lower.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=673102</id>
		<title>SL Cert - Basic Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=673102"/>
		<updated>2009-11-26T16:28:16Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Broad Overview and Most Basic Skills */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This list of requirements is part of the [[SL Certification | Second Life Certification]] project. It is an effort to create a list of specific skills  required for persons to become certified in basic scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in basic LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Some experience and familiarity of the second life graphical user interface and controls is necessary. Also some experience of building within second life would be an advantage. Six months secondlife experience recommended.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to basic level==&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should demonstrate a mastery of common programming tasks. The following categories provide the basic categories.&lt;br /&gt;
&lt;br /&gt;
=== Broad Overview and Most Basic Skills  === &lt;br /&gt;
&lt;br /&gt;
* Rationale for scripting &lt;br /&gt;
* Script creation &lt;br /&gt;
* Commenting and Clarity &lt;br /&gt;
* Mono vs. LSL2&lt;br /&gt;
* Software Development&lt;br /&gt;
&lt;br /&gt;
A person should provide a basic understanding of the potential and the limitations of scripts. The person should be able to demonstrate how to create a script both within an object rezzed in world or in their inventory. The person should  know the difference between mono and LSL2 and the implications when a script is created within inventory as opposed to an object&#039;s inventory.  A person should demonstrate a basic understanding of the construction of consistent, structured code and consistent commenting style. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the difference between server side lag, client side lag, and the script delays associated with different LSL library calls. The person does not need to memorize which function calls have a delay and how much the delay is, but they need to understand what a delay is and how to determine if a given function has a delay and how long the delay is.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should provide a very basic understanding of practices for good software development. This includes the use and maintenance of comments and the rationale for the use of functions and subroutines. Additionally, the person should provide a rudimentary understanding of code revisioning and practices to keep and maintain local back up files.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
* Types &lt;br /&gt;
* Operators &lt;br /&gt;
* Global vs. Local Variables &lt;br /&gt;
* Typecasting &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to identify the basic data types, integer, float, string, key, list, vector and rotation. The person should know the basic operations and what they mean in context. For example, division with integers is different compared to division with floats. The person should understand that some operations are overloaded and have different meanings when combined with different types. For example, if v1 and v2 are vectors then v1*v2 is the dot product, but if v1 is a vector and r is a rotation then v1*r will rotate the vector. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate the concept of the &amp;quot;scope&amp;quot; of a variable. There is a difference if it is defined outside of an event or function. Also, the person should demonstrate an understanding that a global variable can be ignored if it is also defined locally.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate how to &amp;quot;convert&amp;quot; one variable into another and what happens. For example, a float is trunctated when cast as an integer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
* Loop Constructs&lt;br /&gt;
* Conditionals &lt;br /&gt;
&lt;br /&gt;
A person should demonstrate an understanding of the different looping constructs using for, while, and do-whole loops and understand when one loop construct might be favored over another in a given context. The person should also demonstrate an understanding of the &amp;quot;if&amp;quot; statement and be able to use compound and nested if statements. &lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate the ability to construct complex boolean expressions. For example, they should be able to make use of multiple boolean statements using the boolean &amp;quot;or&amp;quot; and boolean &amp;quot;and&amp;quot; to filter nontrivial conditions in a control structure or conditional.&lt;br /&gt;
&lt;br /&gt;
=== Events and Functions ===&lt;br /&gt;
&lt;br /&gt;
* Events &lt;br /&gt;
* Functions &lt;br /&gt;
* States &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic idea of an event and how a script might react in various circumstances. For example, the person should have a basic understanding of the three touch events and how they differ. At the basic level the broad categories of events that should be mastered include collision, touch, land collision, state entry/exit, timer, and attach events. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the use and creation of their own functions. This includes understanding the difference between null functions and functions that return a specific data type. The person should know the difference between a user defined function and the set of functions available within the build in library.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an understanding of the use of states. They should understand the default state, how to define new states, and move between different states. The person should have a firm understanding of the control flow as a script moves between different states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Basic I/0 ===&lt;br /&gt;
&lt;br /&gt;
* llWhisper&lt;br /&gt;
* llSay&lt;br /&gt;
* llShout&lt;br /&gt;
* llRegionSay&lt;br /&gt;
* llOwnerSay&lt;br /&gt;
* llInstantMessage&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to communicate information in LSL. The person should know the limitations and advantages of each command. The person should now the predefined channels for open chat and debug messages and also know the range of possible channels. The person should know the differences between using a positive number and negative number for the channel number and the relative advantages.&lt;br /&gt;
&lt;br /&gt;
At the basic level a person should know how to open a channel for listening and construct a listening event. The person should understand the importance of being able to close a listening event. For example, the person should know how to use a timer to insure that an open listener will be closed within a given time frame. &lt;br /&gt;
&lt;br /&gt;
At the basic level a person should also have a rudimentary understanding of the string functions. The person should be able to make direct comparisons and also be able to manipulate substrings. Additionally a person should be able to trim spaces off of the beginning and end of a string as well as convert the case to all upper or all lower.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=673092</id>
		<title>SL Cert - Basic Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=673092"/>
		<updated>2009-11-26T15:33:04Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Basic I/0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This list of requirements is part of the [[SL Certification | Second Life Certification]] project. It is an effort to create a list of specific skills  required for persons to become certified in basic scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in basic LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Some experience and familiarity of the second life graphical user interface and controls is necessary. Also some experience of building within second life would be an advantage. Six months secondlife experience recommended.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to basic level==&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should demonstrate a mastery of common programming tasks. The following categories provide the basic categories.&lt;br /&gt;
&lt;br /&gt;
=== Broad Overview and Most Basic Skills  === &lt;br /&gt;
&lt;br /&gt;
* Rationale for scripting &lt;br /&gt;
* Script creation &lt;br /&gt;
* Commenting and Clarity &lt;br /&gt;
* Mono vs. LSL2&lt;br /&gt;
* Software Development&lt;br /&gt;
&lt;br /&gt;
A person should provide a basic understanding of the potential and the limitations of scripts. The person should be able to demonstrate how to create a script both within an object rezzed in world or in their inventory. The person should  know the difference between mono and LSL2 and the implications when a script is created within inventory as opposed to an object&#039;s inventory.  A person should demonstrate a basic understanding of the construction of structured code and consistent commenting style. &lt;br /&gt;
&lt;br /&gt;
Finally, the person should provide a very basic understanding of practices for good software development. This includes the use and maintenance of comments and the rationale for the use of functions and subroutines. Additionally, the person should provide a rudimentary understanding of code revisioning and practices to keep and maintain local back up files.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
* Types &lt;br /&gt;
* Operators &lt;br /&gt;
* Global vs. Local Variables &lt;br /&gt;
* Typecasting &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to identify the basic data types, integer, float, string, key, list, vector and rotation. The person should know the basic operations and what they mean in context. For example, division with integers is different compared to division with floats. The person should understand that some operations are overloaded and have different meanings when combined with different types. For example, if v1 and v2 are vectors then v1*v2 is the dot product, but if v1 is a vector and r is a rotation then v1*r will rotate the vector. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate the concept of the &amp;quot;scope&amp;quot; of a variable. There is a difference if it is defined outside of an event or function. Also, the person should demonstrate an understanding that a global variable can be ignored if it is also defined locally.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate how to &amp;quot;convert&amp;quot; one variable into another and what happens. For example, a float is trunctated when cast as an integer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
* Loop Constructs&lt;br /&gt;
* Conditionals &lt;br /&gt;
&lt;br /&gt;
A person should demonstrate an understanding of the different looping constructs using for, while, and do-whole loops and understand when one loop construct might be favored over another in a given context. The person should also demonstrate an understanding of the &amp;quot;if&amp;quot; statement and be able to use compound and nested if statements. &lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate the ability to construct complex boolean expressions. For example, they should be able to make use of multiple boolean statements using the boolean &amp;quot;or&amp;quot; and boolean &amp;quot;and&amp;quot; to filter nontrivial conditions in a control structure or conditional.&lt;br /&gt;
&lt;br /&gt;
=== Events and Functions ===&lt;br /&gt;
&lt;br /&gt;
* Events &lt;br /&gt;
* Functions &lt;br /&gt;
* States &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic idea of an event and how a script might react in various circumstances. For example, the person should have a basic understanding of the three touch events and how they differ. At the basic level the broad categories of events that should be mastered include collision, touch, land collision, state entry/exit, timer, and attach events. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the use and creation of their own functions. This includes understanding the difference between null functions and functions that return a specific data type. The person should know the difference between a user defined function and the set of functions available within the build in library.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an understanding of the use of states. They should understand the default state, how to define new states, and move between different states. The person should have a firm understanding of the control flow as a script moves between different states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Basic I/0 ===&lt;br /&gt;
&lt;br /&gt;
* llWhisper&lt;br /&gt;
* llSay&lt;br /&gt;
* llShout&lt;br /&gt;
* llRegionSay&lt;br /&gt;
* llOwnerSay&lt;br /&gt;
* llInstantMessage&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to communicate information in LSL. The person should know the limitations and advantages of each command. The person should now the predefined channels for open chat and debug messages and also know the range of possible channels. The person should know the differences between using a positive number and negative number for the channel number and the relative advantages.&lt;br /&gt;
&lt;br /&gt;
At the basic level a person should know how to open a channel for listening and construct a listening event. The person should understand the importance of being able to close a listening event. For example, the person should know how to use a timer to insure that an open listener will be closed within a given time frame. &lt;br /&gt;
&lt;br /&gt;
At the basic level a person should also have a rudimentary understanding of the string functions. The person should be able to make direct comparisons and also be able to manipulate substrings. Additionally a person should be able to trim spaces off of the beginning and end of a string as well as convert the case to all upper or all lower.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=673082</id>
		<title>SL Cert - Basic Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=673082"/>
		<updated>2009-11-26T15:32:32Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Control Structures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This list of requirements is part of the [[SL Certification | Second Life Certification]] project. It is an effort to create a list of specific skills  required for persons to become certified in basic scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in basic LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Some experience and familiarity of the second life graphical user interface and controls is necessary. Also some experience of building within second life would be an advantage. Six months secondlife experience recommended.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to basic level==&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should demonstrate a mastery of common programming tasks. The following categories provide the basic categories.&lt;br /&gt;
&lt;br /&gt;
=== Broad Overview and Most Basic Skills  === &lt;br /&gt;
&lt;br /&gt;
* Rationale for scripting &lt;br /&gt;
* Script creation &lt;br /&gt;
* Commenting and Clarity &lt;br /&gt;
* Mono vs. LSL2&lt;br /&gt;
* Software Development&lt;br /&gt;
&lt;br /&gt;
A person should provide a basic understanding of the potential and the limitations of scripts. The person should be able to demonstrate how to create a script both within an object rezzed in world or in their inventory. The person should  know the difference between mono and LSL2 and the implications when a script is created within inventory as opposed to an object&#039;s inventory.  A person should demonstrate a basic understanding of the construction of structured code and consistent commenting style. &lt;br /&gt;
&lt;br /&gt;
Finally, the person should provide a very basic understanding of practices for good software development. This includes the use and maintenance of comments and the rationale for the use of functions and subroutines. Additionally, the person should provide a rudimentary understanding of code revisioning and practices to keep and maintain local back up files.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
* Types &lt;br /&gt;
* Operators &lt;br /&gt;
* Global vs. Local Variables &lt;br /&gt;
* Typecasting &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to identify the basic data types, integer, float, string, key, list, vector and rotation. The person should know the basic operations and what they mean in context. For example, division with integers is different compared to division with floats. The person should understand that some operations are overloaded and have different meanings when combined with different types. For example, if v1 and v2 are vectors then v1*v2 is the dot product, but if v1 is a vector and r is a rotation then v1*r will rotate the vector. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate the concept of the &amp;quot;scope&amp;quot; of a variable. There is a difference if it is defined outside of an event or function. Also, the person should demonstrate an understanding that a global variable can be ignored if it is also defined locally.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate how to &amp;quot;convert&amp;quot; one variable into another and what happens. For example, a float is trunctated when cast as an integer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
* Loop Constructs&lt;br /&gt;
* Conditionals &lt;br /&gt;
&lt;br /&gt;
A person should demonstrate an understanding of the different looping constructs using for, while, and do-whole loops and understand when one loop construct might be favored over another in a given context. The person should also demonstrate an understanding of the &amp;quot;if&amp;quot; statement and be able to use compound and nested if statements. &lt;br /&gt;
&lt;br /&gt;
The person should be able to demonstrate the ability to construct complex boolean expressions. For example, they should be able to make use of multiple boolean statements using the boolean &amp;quot;or&amp;quot; and boolean &amp;quot;and&amp;quot; to filter nontrivial conditions in a control structure or conditional.&lt;br /&gt;
&lt;br /&gt;
=== Events and Functions ===&lt;br /&gt;
&lt;br /&gt;
* Events &lt;br /&gt;
* Functions &lt;br /&gt;
* States &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic idea of an event and how a script might react in various circumstances. For example, the person should have a basic understanding of the three touch events and how they differ. At the basic level the broad categories of events that should be mastered include collision, touch, land collision, state entry/exit, timer, and attach events. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the use and creation of their own functions. This includes understanding the difference between null functions and functions that return a specific data type. The person should know the difference between a user defined function and the set of functions available within the build in library.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an understanding of the use of states. They should understand the default state, how to define new states, and move between different states. The person should have a firm understanding of the control flow as a script moves between different states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Basic I/0 ===&lt;br /&gt;
&lt;br /&gt;
* llWhisper&lt;br /&gt;
* llSay&lt;br /&gt;
* llShout&lt;br /&gt;
* llRegionSay&lt;br /&gt;
* llOwnerSay&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to communicate information in LSL. The person should know the limitations and advantages of each command. The person should now the predefined channels for open chat and debug messages and also know the range of possible channels. The person should know the differences between using a positive number and negative number for the channel number and the relative advantages.&lt;br /&gt;
&lt;br /&gt;
At the basic level a person should know how to open a channel for listening and construct a listening event. The person should understand the importance of being able to close a listening event. For example, the person should know how to use a timer to insure that an open listener will be closed within a given time frame. &lt;br /&gt;
&lt;br /&gt;
At the basic level a person should also have a rudimentary understanding of the string functions. The person should be able to make direct comparisons and also be able to manipulate substrings. Additionally a person should be able to trim spaces off of the beginning and end of a string as well as convert the case to all upper or all lower.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Certification&amp;diff=673072</id>
		<title>SL Certification</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Certification&amp;diff=673072"/>
		<updated>2009-11-26T15:29:57Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Scripting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
=SL Certification Project=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
In Second Life, education exists already in the form of many SL Schools. But certification does not yet exist in the form of SL Certifiers. The goal of the SL Certification Project is to create these certifiers. &lt;br /&gt;
&lt;br /&gt;
SL Certification is a task-based approach to identifying those who have attained a given level of proficiency in world in a given knowledge and skills area. &#039;&#039;&#039;To become a SL Certification project participant, contact {{User|Orange Planer}} (Leader) or {{User|Glenn Linden}} (Linden Lab Sponsor).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Action Plan==&lt;br /&gt;
Test&lt;br /&gt;
=== Phase One - Develop Skills Lists ===&lt;br /&gt;
&lt;br /&gt;
# SLCERT team uses VOLUNTEER MODERATORS to maintain:&lt;br /&gt;
#* A single &#039;&#039;&#039;SCHOOLS LIST&#039;&#039;&#039; on the PUBLIC WIKI with links to their information locations showing what they teach&lt;br /&gt;
#* Multiple &#039;&#039;&#039;SKILLS LISTS&#039;&#039;&#039; on the PUBLIC WIKI of what people need to know how to do in multiple categories of SL skills&lt;br /&gt;
# The VOLUNTEER MODERATORS keep the lists current&lt;br /&gt;
# The SCHOOLS continue to:&lt;br /&gt;
#* Teach their classes&lt;br /&gt;
#* Remain responsible for their own existing certification programs for now&lt;br /&gt;
# RESIDENTS have a choice of where to go to learn the skills&lt;br /&gt;
# EVERYONE has the benefit of a shared set of SKILLS LISTS for reference:&lt;br /&gt;
#* Individuals have:&lt;br /&gt;
#** A checklist for managing their own skills education program&lt;br /&gt;
#* Schools have:&lt;br /&gt;
#** The opportunity to be known for the classes they already make available&lt;br /&gt;
#** The opportunity to offer new classes not yet available&lt;br /&gt;
#* Solution Providers have:&lt;br /&gt;
#** A checklist for managing their employee skills education programs or checking skills levels of their contractors&lt;br /&gt;
&lt;br /&gt;
=== Phase Two - Develop Skills Tests ===&lt;br /&gt;
# SL CERT team uses VOLUNTEER MODERATORS to develop, test, and document:&lt;br /&gt;
#* Multiple &#039;&#039;&#039;SKILLS TESTS&#039;&#039;&#039; on the PUBLIC WIKI of what people need to know, and know how to do, in multiple categories of SL skills&lt;br /&gt;
#* BEST BLENDS of test methods including: Written (True/False; Multiple Choice), Performance (Build; Texture; Plan), and Other.&lt;br /&gt;
&lt;br /&gt;
=== Phase Three - Identify Third Party Certification Companies ===&lt;br /&gt;
# SLCERT team identifies CANDIDATE THIRD PARTY SKILLS CERTIFICATION COMPANIES&lt;br /&gt;
#* Including criteria for ranking and selecting&lt;br /&gt;
#* Present their results and recommendations to Linden Lab Sponsor&lt;br /&gt;
&lt;br /&gt;
=== Phase Four - Hire Recommended Certification Company ===&lt;br /&gt;
&lt;br /&gt;
* SL Certification Developers identify and prioritize selection criteria&lt;br /&gt;
* Make recommendation to Linden Lab&lt;br /&gt;
* Target identifying recommended SL Certifier 2H09&lt;br /&gt;
&lt;br /&gt;
=== Phase Five - Certification in Operation ===&lt;br /&gt;
* Linden Lab Sponsor reviews SL Certification Developer recommendations&lt;br /&gt;
* Presents plan for Executive Committee discussion, approval, budgeting&lt;br /&gt;
* Target 2010 to begin&lt;br /&gt;
&lt;br /&gt;
== Process Guides ==&lt;br /&gt;
&lt;br /&gt;
=== SL Certification Process ===&lt;br /&gt;
* [[SL Cert Process Document | How skills lists become skills tests]]&lt;br /&gt;
&lt;br /&gt;
=== Roles Guide ===&lt;br /&gt;
* [[SL Certification Roles | Action roles in the SL Certification Project]]&lt;br /&gt;
&lt;br /&gt;
=== Certification Guide ===&lt;br /&gt;
* [[SL Cert Guide to Certification Testing | How 3rd party testing companies work]]&lt;br /&gt;
&lt;br /&gt;
=== Wiki Guide ===&lt;br /&gt;
* [http://wiki.secondlife.com/wiki/Style_Guide SL KB Style Guide]&lt;br /&gt;
&lt;br /&gt;
=== Skills List Template ===&lt;br /&gt;
* [[SL Cert Criteria Template | A template for consistent format of skills list criteria pages.]]&lt;br /&gt;
&lt;br /&gt;
== Company Lists ==&lt;br /&gt;
&lt;br /&gt;
=== Education Companies / Schools ===&lt;br /&gt;
:Moderator: {{User|Lady Hathaway}}&lt;br /&gt;
* [[List of Second Life Skills Training Schools|SL Cert Schools]]&lt;br /&gt;
&lt;br /&gt;
=== Testing Companies / Certifiers ===&lt;br /&gt;
:Moderator: {{User|Orange Planer}}&lt;br /&gt;
* [[3rd Party Testing Agencies | SL Cert Certifiers (Candidates)]]&lt;br /&gt;
&lt;br /&gt;
== Skills Lists ==&lt;br /&gt;
* In PHASE ONE ACTION PLAN these lists are sorted in the order they were first created.&lt;br /&gt;
* In PHASE TWO ACTION PLAN a logical grouping will be added to make subjects easier to find.&lt;br /&gt;
&lt;br /&gt;
=== Land Management ===&lt;br /&gt;
:Moderator: {{User|Starglazer Blazer}}&lt;br /&gt;
* [[SL Cert - Basic Land Management]]&lt;br /&gt;
* [[SL Cert - Intermediate Land Management]]&lt;br /&gt;
* [[SL Cert - Advanced Land Management]]&lt;br /&gt;
&lt;br /&gt;
=== Texturing ===&lt;br /&gt;
:Moderator: {{User|Alice Klinger}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Textures Skill Set]]&lt;br /&gt;
&lt;br /&gt;
=== Terraforming ===&lt;br /&gt;
:Moderator: {{User|Patrice Cournoyer}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Terraforming]]&lt;br /&gt;
* [[SL Cert - Intermediate Terraforming]]&lt;br /&gt;
* [[SL Cert - Advanced Terraforming]]&lt;br /&gt;
&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
:Moderator: {{User|Grandma Bates}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Basic Scripting]]&lt;br /&gt;
* [[SL Cert - Intermediate Scripting]]&lt;br /&gt;
* [[SL Cert - Advanced Scripting]]&lt;br /&gt;
=== Event Hosting ===&lt;br /&gt;
:Moderator: {{User|Linda Sautereau}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Basic Event Hosting]]&lt;br /&gt;
&lt;br /&gt;
=== Machinima ===&lt;br /&gt;
:Moderator: {{User|Allison Selene}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Machinima Skills Set]]&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
:Moderator: {{User|Aquarius Paravane}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Basic Building]]&lt;br /&gt;
&lt;br /&gt;
=== Marketing ===&lt;br /&gt;
:Moderator: {{User|Ppmediadev Blinker}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Basic Marketing]]&lt;br /&gt;
&lt;br /&gt;
=== SL Mentoring ===&lt;br /&gt;
:Moderator: {{User|Orange Planer}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Basic Mentoring]]&lt;br /&gt;
* [[SL Cert - Intermediate Mentoring]]&lt;br /&gt;
* [[SL Cert - Advanced Mentoring]]&lt;br /&gt;
&lt;br /&gt;
== Skills Tests ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meetings and Notes ==&lt;br /&gt;
Certification discussions, hosted by {{User|Orange Planer}} (2009) and {{User|Emily Darrow}} (2008)&lt;br /&gt;
* [http://slurl.com/secondlife/SLDEVU/227/73/27 Location (SLDEVU ISLAND)]&lt;br /&gt;
* [http://www.spin-stream.com/support/forumdisplay.php?f=90 Minutes (SP COUNCIL FORUM)]&lt;br /&gt;
&lt;br /&gt;
=== 4th Quarter 2008 Accomplishments ===&lt;br /&gt;
* Team Leader [[User:Emily Darrow|Emily Darrow]]&lt;br /&gt;
* Developed Action Plan&lt;br /&gt;
* Schools List Up on Wiki&lt;br /&gt;
&lt;br /&gt;
=== First Quarter 2009 Accomplishments ===&lt;br /&gt;
* Team Leader {{User|Orange Planer}}&lt;br /&gt;
* Additional Participation Generated by Post on XStreet&lt;br /&gt;
* Ten Skills Lists Up on Wiki&lt;br /&gt;
&lt;br /&gt;
=== Second Quarter 2009 Goals ===&lt;br /&gt;
* Team Leader {{User|Orange Planer}}&lt;br /&gt;
* Continue and Deepen Generation of Skills Lists&lt;br /&gt;
* Begin Generation of Skills Tests&lt;br /&gt;
* Identify 3rd Party testing companies to be used for certification process&lt;br /&gt;
&lt;br /&gt;
== Overarching Goal ==&lt;br /&gt;
&lt;br /&gt;
SL Certification is a Resident-Managed Project with Linden Lab Sponsorship and Support.&lt;br /&gt;
&lt;br /&gt;
The purpose of the SL Certification Project is to allow individuals to have their Second-Life skills recognized as meeting a set criteria, at various levels of &amp;quot;Basic&amp;quot;, &amp;quot;Intermediate,&amp;quot; and &amp;quot;Advanced&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A list of certified people will then be maintained and made available to those requesting a service.&lt;br /&gt;
&lt;br /&gt;
To assist residents in achieving these levels, schools will educate those interested. They will create learning content based on the certification criteria.&lt;br /&gt;
&lt;br /&gt;
Once the process is complete, a list of certified individuals will then be made publically available.&lt;br /&gt;
&lt;br /&gt;
== Immediate Goal ==&lt;br /&gt;
* Develop certification criteria for modeling and scripting&lt;br /&gt;
** We are looking for members of the Developer, Instructor, and Volunteer communities to work with Lindens in creating the skills list and certification tasks for those skills in Modeling and in Scripting.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Linden Lab is supporting the development of certification for the use of key Second Life tools. We’ll begin with in-world building tools and LSL. We believe this will benefit Residents, Developers, and anyone who wishes to use Second Life by clearly identifying both key skills and the holders of those skills. This will also enable the creation of training to build the skills required for certification.&lt;br /&gt;
It is Linden Lab&#039;s intent to work with an external certification provider to offer certification testing and maintain a list of those Residents who have been certified.&lt;br /&gt;
&lt;br /&gt;
== Linden Participants ==&lt;br /&gt;
* {{User|Glenn Linden}}&lt;br /&gt;
&lt;br /&gt;
== [[:Category:SL Certification Participant|Resident Participants]] ==&lt;br /&gt;
{{:Category:SL Certification Participant}}&lt;br /&gt;
&lt;br /&gt;
== Certification Mailing List ==&lt;br /&gt;
https://lists.secondlife.com/cgi-bin/mailman/listinfo/slcertification&lt;br /&gt;
&lt;br /&gt;
== SL Certification Group ==&lt;br /&gt;
SL Certification Devs - request membership from {{User|Glenn Linden}} or {{User|Orange Planer}} in world.  Membership is open to anyone who requests it. Meetings are announced here.&lt;br /&gt;
&lt;br /&gt;
== Frequently Asked Questions ==&lt;br /&gt;
=== What is the value of Certification? ===&lt;br /&gt;
The primary value of certification is to those hiring people to create content for them in SL. Certification is one indication that someone has at least a minimum set of skills. Certification is only one of many ways to demonstrate competency. Certification also clarifies skills and helps instructors develop instruction. &lt;br /&gt;
&lt;br /&gt;
Certification also provides a set of skills against which anyone in Second Life, whether they build for fun or for hire, can measure their accomplishments.&lt;br /&gt;
&lt;br /&gt;
By more clearly defining skills related to Second Life tools, certification may improve the quality of construction in Second Life, and may encourage a broader range of instruction about the Second Life tools.&lt;br /&gt;
&lt;br /&gt;
=== Portfolios already show if someone is competent; why do we need certification? ===&lt;br /&gt;
Portfolios have a valuable role in demonstrating accomplishment, both in RL and SL. In Second Life, many projects are done collaboratively.  Builds can incorporate content that is bought and created, and many people can be involved. It can be hard to look at a project and understand what a particular person has contributed. Certification provides one method of demonstrating your own skill set. It should be only one of many potential ways to evaluate a candidate.&lt;br /&gt;
&lt;br /&gt;
=== Is Linden Lab mandating certification? ===&lt;br /&gt;
You can chose to be certified if you want, or not. Linden Lab has no intent to monitor or mandate that Second Life content be created only by Residents with certification, or to mandate certification in any way. Nor will Certification (or non-certification) be tied by Linden Lab in any way to land ownership, group membership, membership level, or any other attribute of a Second Life account. While Linden Lab may provide a way for those listed in the Developer Directory to identify certification, it will not require it for the Developer Directory, Classifieds, Events, or any other Linden Lab-operated listing service.  &lt;br /&gt;
&lt;br /&gt;
=== Is Linden Lab mandating content of certification? ===&lt;br /&gt;
Linden Lab has engaged the Residents in defining the skills involved in competency, and in developing the appropriate demonstration of those skills. Linden Lab is not defining the skills nor the demonstration of them, it is simply supporting the process. &lt;br /&gt;
&lt;br /&gt;
=== Will it cost money? Does Linden Lab intend to profit by Certification? ===&lt;br /&gt;
Linden Lab was looking to have a third party organization manage certification; we don&#039;t want the administrative hassle of doing it, nor the potential for anyone to claim that we would have influence on who gets certified. We intend to make certification as widely available as possible. We will work with Residents, Instructors and Developers to find the best way to enable certification.&lt;br /&gt;
&lt;br /&gt;
=== Who will be providing the Certification service? ===&lt;br /&gt;
At this time, the only answer we can give is &amp;quot;Not Linden Lab.&amp;quot; We will work with the Residents who participate in developing certification to find the best provider - whether a Resident, an external third party, or some other provider. Ironically, our original reason for only considering an external provider was to prevent any concern that one group of Residents might use Certification against other Residents. Linden Lab has no intent of operating the Certification service - we don&#039;t have the expertise or resources, nor do we want the inevitable accusations of bias.&lt;br /&gt;
&lt;br /&gt;
=== Will certification make it harder to become competent in using Second Life tools? ===&lt;br /&gt;
Certification is a way to more clearly communicate skills. Without certification, everyone has their own idea of what competency is.  Some classes will teach one set of skills, others another, and outcomes aren&#039;t comparable. That&#039;s why we&#039;re involving SL instructors in this project.&lt;br /&gt;
Learning to use SL Tools will still take the same amount of effort.  Certification will help guide builders and scripters in what they ought to learn in order to achieve particular measurable standards.&lt;br /&gt;
&lt;br /&gt;
=== How will information on who is certified by made available? ===&lt;br /&gt;
The Residents involved in developing certification will help us determine the most effective way to list who is certified.&lt;br /&gt;
&lt;br /&gt;
=== Can we do certification in Second Life? ===&lt;br /&gt;
At least one Resident has started building a set of in-world tasks that could become part of a certification system.  This seems preferable to having external tests/tasks.&lt;br /&gt;
&lt;br /&gt;
== Certification Categories ==&lt;br /&gt;
Categories for certification will be varied, and will grow over time. &lt;br /&gt;
The basic principal behind the certification process is to provide as wide an array of subjects as possible, and involve residents with skills in these areas.&lt;br /&gt;
&lt;br /&gt;
Currently the following categories are being developed:&lt;br /&gt;
* Land Management&lt;br /&gt;
* Texturing&lt;br /&gt;
* Terraforming&lt;br /&gt;
* Scripting&lt;br /&gt;
* Event Hosting&lt;br /&gt;
* Machinima&lt;br /&gt;
* Building&lt;br /&gt;
* Marketing&lt;br /&gt;
* SL Mentoring&lt;br /&gt;
&lt;br /&gt;
By the end of February 09 we hope to have a framework of skill sets which will then form the basis to develop learning materials.&lt;br /&gt;
&lt;br /&gt;
== Previous Attempt at Categorization ==&lt;br /&gt;
An initial attempt at the SL Certification project began in the second quarter of 2007. Included below is an initial attempt at categorizing Modelling and Scripting skills (further works and discussion can be seen on the [[ModelingSkills|List of Modeling Skills]] and [[Scripting Certification|Scripting]] pages). The current work on skill categorization can be found in [[#Skills Lists|Skills Lists]] above.&lt;br /&gt;
&lt;br /&gt;
=== [[Modeling Certification|Modeling]] ===&lt;br /&gt;
[[ModelingSkills|List of Modeling Skills]]&lt;br /&gt;
* Architecture&lt;br /&gt;
* Furnishings/Interior Design&lt;br /&gt;
* Objects&lt;br /&gt;
* Weapons and Vehicles&lt;br /&gt;
Note: Includes using scripts to animate objects and textures but no writing of scripts&lt;br /&gt;
&lt;br /&gt;
=== [[Scripting Certification|Scripting]] ===&lt;br /&gt;
* Animation&lt;br /&gt;
** Note: Animation includes object animation, texture animation and particle systems&lt;br /&gt;
* Attachments &lt;br /&gt;
* Movement &lt;br /&gt;
* Physics &amp;amp; Collisions &lt;br /&gt;
* Detection &amp;amp; Sensing &lt;br /&gt;
* Asset Management &lt;br /&gt;
* Setting Properties &lt;br /&gt;
* Communications&lt;br /&gt;
* Interacting with external data stores &amp;amp; web content &lt;br /&gt;
* Media Management&lt;br /&gt;
&lt;br /&gt;
Alternative Method:&lt;br /&gt;
&lt;br /&gt;
* Dynamic Objects - manipulation of objects&lt;br /&gt;
** Subcategory: Physics and movement in 3-D space&lt;br /&gt;
** Subcategory: Primitive Attributes&lt;br /&gt;
* User interaction&lt;br /&gt;
** Subcategory: User input and communication&lt;br /&gt;
** Subcategory: Event handling&lt;br /&gt;
* Web interface&lt;br /&gt;
** HTML, XML/RPC, and any knowledge of web languages - Perl, Python, PHP, Java, etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Skills]]&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673062</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673062"/>
		<updated>2009-11-26T15:27:00Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Criteria for testing to advanced level */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
The understanding and knowledge of any one command is similar to that required at the intermediate level. The primary difference is that at the advanced level a person must understand and know how to bring together a wide variety of different categories available to accomplish sophisticated tasks. For example, a person should know how to read a note card and interact with a person and then change a particular prim in an object based on that interaction.&lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. They should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673052</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673052"/>
		<updated>2009-11-26T15:24:59Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Inventory and Simulator Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. They should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should know how to use all of the basic commands. At this level is also vital that the person be able to seamlessly make use of these tools to complete complex tasks. For example, the person should be able to use the various communication techniques to determine which inventory to share with a person based on the creator of the object and a set of permissions based on groups or other limitations defined in a note card.&lt;br /&gt;
&lt;br /&gt;
The person should be able to determine advanced information about the terrain at a given point and react accordingly. For example, the person should be able to make use of the ground normal at a point and have an object moved in an appropriate way based on the ground normal. Also, the person should be able to determine the ownership and restrictions on a given parcel and have the script react in appropriate ways and communicate with an agent to determine how to react.&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673042</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673042"/>
		<updated>2009-11-26T15:21:00Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Avatars and Agents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
At the advanced level the person should be able to use all of the different commands to obtain information about an avatar or agent. This includes obtaining information about attachments and the related attachment events. The person should be able to use these methods along with other techniques in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to detect when an object is attached and based on the attachment point move and rotate the object. They should be able to interact with the agent using dialogs and chat commands to change and adapt based on the agents responses. Such interactions may require the use of the various data server commands and react according to the information obtained through the data server event.&lt;br /&gt;
&lt;br /&gt;
Additionally, the person must know how to use a single script to obtain multiple permissions from more than one avatar. For example, the person must demonstrate how to animate more than one avatar using a list of agents and maintaining that list and requesting different permissions as is necessary.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person&#039;s camera to a specific location and look at the position from a predefined orientation.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673032</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673032"/>
		<updated>2009-11-26T15:15:12Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Detection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to put together complex systems of scripts using a variety of detection methods. The person should be able to use these methods to interact with a person and react in non-trivial ways. For example, a person should be able to create scripts that can detect which prim a person has touched or collided with and then interact with the person using the various communication methods. &lt;br /&gt;
&lt;br /&gt;
The person should also have an advanced understanding of the sensor system. For example, the person should know what happens when you try to combine different sensor types by using binary &amp;quot;or&amp;quot; and how that changes the results that a sensor will return. Also, the person should be able to use sensors along with other techniques to interact with agents in nontrivial ways. For example, a person should be able to use a sensor to detect an agent and then alter the sensor based on interaction through dialogs and chat commands, or be able to use sensors to identify and object and then use commands such as llGetObjectPrimCount or the data server commands to obtain other information.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should be able to identify potential server side impacts with the use of the various routines. For example, the person should be able to use detection routines that allow complicated interaction between different prims in an object using only one script and identify the server side impact of using more than one script. Also, the person should be able to identify schemes to minimize the use of sensors and avoid the use of sensors using other commands such as llGetObjectDetails and a timer as a way to avoid potential server side impacts.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673022</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673022"/>
		<updated>2009-11-26T15:07:10Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Primitives, Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level the person should be aware of all the different ways that a prim can be altered using LSL. This includes all of the methods listed at the intermediate level. The person should demonstrate knowledge of how to change multiple properties of any prim in a linkset in one command. The person should also be able to demonstrate an understanding of issues related to lag and script delay. For example, the person should be able to predict potential problems with a particle command and how it relates to client side performance of people viewing the object.&lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to combine a wide variety of other techniques to manipulate and change the prims within an object to a predetermined state. For example, the person should be able to read the contents of a notecard and interact with an agent using the dialog, chat, and instant message commands to determine how a prim should appear and then change the appearance of the particular prim. The person should also be able to use the link detection commands to determine which prim to change in an object.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673012</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673012"/>
		<updated>2009-11-26T15:00:43Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Advanced I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673002</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=673002"/>
		<updated>2009-11-26T15:00:19Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Intermediate I/0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* HTTP - in&lt;br /&gt;
# Creating an HTTP server&lt;br /&gt;
# Reacting to errors in the set up&lt;br /&gt;
# Reacting to changes to the server&lt;br /&gt;
# Reacting to outside requests&lt;br /&gt;
&lt;br /&gt;
* HTTP - out&lt;br /&gt;
# Sending communications out to other http servers&lt;br /&gt;
# reacting to errors&lt;br /&gt;
# Writing flexible scripts that can adapt to server outages and other potential failures.&lt;br /&gt;
&lt;br /&gt;
* Communication with outside servers.&lt;br /&gt;
&lt;br /&gt;
At the advanced level for communications a person should be able to combine the different communication techniques to complete complex operations. For example, the person should be able to combine the use of dialogs and chat commands to send information to different scripts in various prims in an object using the link message system and a single script that interacts with an agent.&lt;br /&gt;
&lt;br /&gt;
In addition to combining communication routines the person should be able to communicate between different objects in world using the http-in and http-out systems. The person should demonstrate scripts that have the flexibility to handle errors in the set up of the http routines and demonstrate flexibility in handling situations impact the http system. For example, the person should be able to develop systems of scripts that can maintain communication in the presence of sim crossings and resets.&lt;br /&gt;
&lt;br /&gt;
Finally the person should demonstrate that they can communicate with outside servers and provide persistant data sources. The person must show basic proficiency in at least one other scripting language such as php, python, perl, or other relevant language. They should also demonstrate a basic profiency in connecting with a database and manipulating the database.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=672992</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=672992"/>
		<updated>2009-11-26T14:51:37Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Physics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Text commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level for physics a person should know the difference between the linear and rotational commands for force and impulse. The person should understand the impulse momentum theorem and the differential form of Newton&#039;s Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.&lt;br /&gt;
&lt;br /&gt;
For example, a person should be able to use the physics commands to move an object to a specific location and keep it in a specific orientation. The person should be able to combine different categories in order to move the object. For example, the person should be able to use a sensor or a timer to have a physical object follow an agent and maintain a specific rotation.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should be able to calculate the moment of inertia for simple objects and combinations of simple objects. The person should demonstrate that they know how to use this understanding when using the rotational commands for angular impulse and torque.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be able to construct a vehicle. A person should be able to construct a variety of vehicles and know the differences between them. For example, the person should be able to construct a boat, car, or plane. They should be able to use the permissions system to have a person control the vehicle in nontrivial ways.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=672982</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=672982"/>
		<updated>2009-11-26T14:45:02Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Programming and Software Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Text commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Know the commands.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Momentum&lt;br /&gt;
# Know the commands.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular momentum.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  &lt;br /&gt;
# Multiple Data Types &lt;br /&gt;
# Using strided lists with multiple data types &lt;br /&gt;
# Manipulating all data types &lt;br /&gt;
* Advanced revision systems.  &lt;br /&gt;
# Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  &lt;br /&gt;
# Finding and using differences between revisions&lt;br /&gt;
* Workflow &lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.  &lt;br /&gt;
# Establishing a plan for systems of scripts and carrying it out.  &lt;br /&gt;
# Be able to adapt the plan as the requirements change.  &lt;br /&gt;
# Be able to establish time lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=672972</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=672972"/>
		<updated>2009-11-26T14:43:53Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Programming and Software Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Text commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Know the commands.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Momentum&lt;br /&gt;
# Know the commands.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular momentum.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists and data types.  # Multiple Data Types #&lt;br /&gt;
Using strided lists with multiple data types # Manipulating all data&lt;br /&gt;
types * Advanced revision systems.  # Branching and merging revisions.&lt;br /&gt;
# Tagged revisions.  # Finding and using differences between revisions&lt;br /&gt;
* Workflow # Demonstrate effective interactions with clients and&lt;br /&gt;
remain flexible through the entire development cycle.  # Establishing&lt;br /&gt;
a plan for systems of scripts and carrying it out.  # Be able to adapt&lt;br /&gt;
the plan as the requirements change.  # Be able to establish time&lt;br /&gt;
lines and effectively communicate them with clients.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the advanced level a person should be familiar with all data&lt;br /&gt;
types. The person should know when to use a given a data type and when&lt;br /&gt;
it is appropriate. The person should be able to use the most advanced&lt;br /&gt;
features of lists and work with strided lists that contain a variety&lt;br /&gt;
of data types. The person should be able to use the list functions to&lt;br /&gt;
determine the data type for an entry in the list.&lt;br /&gt;
&lt;br /&gt;
A person should be able to use the more advanced features of a&lt;br /&gt;
software revision system. The person should know when it is&lt;br /&gt;
appropriate to create a branch and know how to create a branch. The&lt;br /&gt;
person should know how to merge a branch back into an established&lt;br /&gt;
trunk. The person should also know what a tagged release is and how to&lt;br /&gt;
create a tagged release in the revision software that they are using.&lt;br /&gt;
&lt;br /&gt;
A person should be able to create plans for creating systems of&lt;br /&gt;
scripts. The person should be able to demonstrate that they can&lt;br /&gt;
establish a time line for a project and determine a set of&lt;br /&gt;
intermediate steps necessary in order to complete a project. The&lt;br /&gt;
person should demonstrate an ability to communicate the time line and&lt;br /&gt;
the reasons for their decisions with a client. Finally, the person&lt;br /&gt;
should demonstrate an ability to adapt and change a timeline as the&lt;br /&gt;
client changes the requirements. As part of this aspect the person&lt;br /&gt;
should demonstrate that they can anticipate potential problems with a&lt;br /&gt;
given set of requirements and work with a client in advance to avoid&lt;br /&gt;
potential problems.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=672963</id>
		<title>SL Cert - Basic Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Basic_Scripting&amp;diff=672963"/>
		<updated>2009-11-26T13:29:32Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Broad Overview and Most Basic Skills */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This list of requirements is part of the [[SL Certification | Second Life Certification]] project. It is an effort to create a list of specific skills  required for persons to become certified in basic scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in basic LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Some experience and familiarity of the second life graphical user interface and controls is necessary. Also some experience of building within second life would be an advantage. Six months secondlife experience recommended.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to basic level==&lt;br /&gt;
&lt;br /&gt;
In the basic skill sets a person should demonstrate a mastery of common programming tasks. The following categories provide the basic categories.&lt;br /&gt;
&lt;br /&gt;
=== Broad Overview and Most Basic Skills  === &lt;br /&gt;
&lt;br /&gt;
* Rationale for scripting &lt;br /&gt;
* Script creation &lt;br /&gt;
* Commenting and Clarity &lt;br /&gt;
* Mono vs. LSL2&lt;br /&gt;
* Software Development&lt;br /&gt;
&lt;br /&gt;
A person should provide a basic understanding of the potential and the limitations of scripts. The person should be able to demonstrate how to create a script both within an object rezzed in world or in their inventory. The person should  know the difference between mono and LSL2 and the implications when a script is created within inventory as opposed to an object&#039;s inventory.  A person should demonstrate a basic understanding of the construction of structured code and consistent commenting style. &lt;br /&gt;
&lt;br /&gt;
Finally, the person should provide a very basic understanding of practices for good software development. This includes the use and maintenance of comments and the rationale for the use of functions and subroutines. Additionally, the person should provide a rudimentary understanding of code revisioning and practices to keep and maintain local back up files.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
* Types &lt;br /&gt;
* Operators &lt;br /&gt;
* Global vs. Local Variables &lt;br /&gt;
* Typecasting &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should be able to identify the basic data types, integer, float, string, key, list, vector and rotation. The person should know the basic operations and what they mean in context. For example, division with integers is different compared to division with floats. The person should understand that some operations are overloaded and have different meanings when combined with different types. For example, if v1 and v2 are vectors then v1*v2 is the dot product, but if v1 is a vector and r is a rotation then v1*r will rotate the vector. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate the concept of the &amp;quot;scope&amp;quot; of a variable. There is a difference if it is defined outside of an event or function. Also, the person should demonstrate an understanding that a global variable can be ignored if it is also defined locally.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate how to &amp;quot;convert&amp;quot; one variable into another and what happens. For example, a float is trunctated when cast as an integer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
&lt;br /&gt;
* Loop Constructs&lt;br /&gt;
* Conditionals &lt;br /&gt;
&lt;br /&gt;
A person should demonstrate an understanding of the different looping constructs using for, while, and do-whole loops and understand when one loop construct might be favored over another in a given context. The person should also demonstrate an understanding of the &amp;quot;if&amp;quot; statement and be able to use compound if statements. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Events and Functions ===&lt;br /&gt;
&lt;br /&gt;
* Events &lt;br /&gt;
* Functions &lt;br /&gt;
* States &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic idea of an event and how a script might react in various circumstances. For example, the person should have a basic understanding of the three touch events and how they differ. At the basic level the broad categories of events that should be mastered include collision, touch, land collision, state entry/exit, timer, and attach events. &lt;br /&gt;
&lt;br /&gt;
The person should demonstrate an understanding of the use and creation of their own functions. This includes understanding the difference between null functions and functions that return a specific data type. The person should know the difference between a user defined function and the set of functions available within the build in library.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should demonstrate an understanding of the use of states. They should understand the default state, how to define new states, and move between different states. The person should have a firm understanding of the control flow as a script moves between different states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Basic I/0 ===&lt;br /&gt;
&lt;br /&gt;
* llWhisper&lt;br /&gt;
* llSay&lt;br /&gt;
* llShout&lt;br /&gt;
* llRegionSay&lt;br /&gt;
* llOwnerSay&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to communicate information in LSL. The person should know the limitations and advantages of each command. The person should now the predefined channels for open chat and debug messages and also know the range of possible channels. The person should know the differences between using a positive number and negative number for the channel number and the relative advantages.&lt;br /&gt;
&lt;br /&gt;
At the basic level a person should know how to open a channel for listening and construct a listening event. The person should understand the importance of being able to close a listening event. For example, the person should know how to use a timer to insure that an open listener will be closed within a given time frame. &lt;br /&gt;
&lt;br /&gt;
At the basic level a person should also have a rudimentary understanding of the string functions. The person should be able to make direct comparisons and also be able to manipulate substrings. Additionally a person should be able to trim spaces off of the beginning and end of a string as well as convert the case to all upper or all lower.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672953</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672953"/>
		<updated>2009-11-26T13:26:23Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Intermediate I/0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person  should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the data server event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types. &lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Chat commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Commands for Force&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Impulse&lt;br /&gt;
# Commands for Impulse&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular impulse.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
The person who wants to achieve an intermediate rating for physics should know all of the basic commands for both linear and angular force as well as momentum. The person should know the difference between the local and global settings. The person should know the difference between the the force/torque commands and the impulse commands.&lt;br /&gt;
&lt;br /&gt;
The person should know the relationship between force and impulse. Both are representations of Newton&#039;s Second Law where force is the differential form and impulse is the integral form. The person should understand the relationship between force, mass, and acceleration as well as the relationship between impulse and momentum.&lt;br /&gt;
&lt;br /&gt;
The very basic commands of scripting a vehicle should be known. At the intermediate level a person is not expected to be able to create a script for a vehicle but should understand the basic commands and alter an existing vehicle script.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
A person who wishes to achieve an intermediate certification in detection should know the different events in which detection is relevant. The person should know how the different detection commands are used within the different events. The person should know be able to construct scripts that make use of the events and detection routines and combine them. &lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to use sensors to detect a person. The person should know the difference between a repeating and one time sensor. The person should know how to construct scripts that make use of the sensor and no_sensor events. The person should know the limitations of the commands and understand the importance and how to narrowly define a sensor.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Workflow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;br /&gt;
&lt;br /&gt;
At the intermediate level the Programming and Software Development category includes greater in depth knowledge of the basic LSL commands. At this level the person should know how to use all of the flow commands and construct a wide variety of scripts that require all of the flow commands.&lt;br /&gt;
&lt;br /&gt;
In addition, the person should know and understand how to use all of the list commands. A person should be able to manipulate lists. For example, a person should be able to delete and insert sublists into an existing list. The person should be able to use strided list and know how to sort and randomize a list.  The person should also have a basic understanding of the memory overhead associated with a list.&lt;br /&gt;
&lt;br /&gt;
The person should also know and understand all of the string manipulation routines. The person should be able to manipulate strings. For example, a person should be able to delete and insert substrings into an existing string. The person should have a basic understanding of the memory overhead associated with strings.&lt;br /&gt;
&lt;br /&gt;
The person should be able to make use of at least one revision control system. The person should be able to maintain revisions and recall specific revisions. At this level a person does not need to know know how to find differences in revisions or be able to create and maintain a branch and merge the branch into an existing code base.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should understand how to create a broad, flexible plan to create and maintain a software project. The person should understand how the importance of creating a plan and developing an approach to a project before any coding is to begin. The person should understand the importance of flexibility and the importance of long term planning and how it relates to the code base.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672943</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672943"/>
		<updated>2009-11-26T13:25:40Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Programming and Software Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person  should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the data server event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types. &lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Text commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Commands for Force&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Impulse&lt;br /&gt;
# Commands for Impulse&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular impulse.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
The person who wants to achieve an intermediate rating for physics should know all of the basic commands for both linear and angular force as well as momentum. The person should know the difference between the local and global settings. The person should know the difference between the the force/torque commands and the impulse commands.&lt;br /&gt;
&lt;br /&gt;
The person should know the relationship between force and impulse. Both are representations of Newton&#039;s Second Law where force is the differential form and impulse is the integral form. The person should understand the relationship between force, mass, and acceleration as well as the relationship between impulse and momentum.&lt;br /&gt;
&lt;br /&gt;
The very basic commands of scripting a vehicle should be known. At the intermediate level a person is not expected to be able to create a script for a vehicle but should understand the basic commands and alter an existing vehicle script.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
A person who wishes to achieve an intermediate certification in detection should know the different events in which detection is relevant. The person should know how the different detection commands are used within the different events. The person should know be able to construct scripts that make use of the events and detection routines and combine them. &lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to use sensors to detect a person. The person should know the difference between a repeating and one time sensor. The person should know how to construct scripts that make use of the sensor and no_sensor events. The person should know the limitations of the commands and understand the importance and how to narrowly define a sensor.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Workflow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;br /&gt;
&lt;br /&gt;
At the intermediate level the Programming and Software Development category includes greater in depth knowledge of the basic LSL commands. At this level the person should know how to use all of the flow commands and construct a wide variety of scripts that require all of the flow commands.&lt;br /&gt;
&lt;br /&gt;
In addition, the person should know and understand how to use all of the list commands. A person should be able to manipulate lists. For example, a person should be able to delete and insert sublists into an existing list. The person should be able to use strided list and know how to sort and randomize a list.  The person should also have a basic understanding of the memory overhead associated with a list.&lt;br /&gt;
&lt;br /&gt;
The person should also know and understand all of the string manipulation routines. The person should be able to manipulate strings. For example, a person should be able to delete and insert substrings into an existing string. The person should have a basic understanding of the memory overhead associated with strings.&lt;br /&gt;
&lt;br /&gt;
The person should be able to make use of at least one revision control system. The person should be able to maintain revisions and recall specific revisions. At this level a person does not need to know know how to find differences in revisions or be able to create and maintain a branch and merge the branch into an existing code base.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should understand how to create a broad, flexible plan to create and maintain a software project. The person should understand how the importance of creating a plan and developing an approach to a project before any coding is to begin. The person should understand the importance of flexibility and the importance of long term planning and how it relates to the code base.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672933</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672933"/>
		<updated>2009-11-26T13:03:59Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Programming and Software Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person  should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the data server event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types. &lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Text commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Commands for Force&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Impulse&lt;br /&gt;
# Commands for Impulse&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular impulse.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
The person who wants to achieve an intermediate rating for physics should know all of the basic commands for both linear and angular force as well as momentum. The person should know the difference between the local and global settings. The person should know the difference between the the force/torque commands and the impulse commands.&lt;br /&gt;
&lt;br /&gt;
The person should know the relationship between force and impulse. Both are representations of Newton&#039;s Second Law where force is the differential form and impulse is the integral form. The person should understand the relationship between force, mass, and acceleration as well as the relationship between impulse and momentum.&lt;br /&gt;
&lt;br /&gt;
The very basic commands of scripting a vehicle should be known. At the intermediate level a person is not expected to be able to create a script for a vehicle but should understand the basic commands and alter an existing vehicle script.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
A person who wishes to achieve an intermediate certification in detection should know the different events in which detection is relevant. The person should know how the different detection commands are used within the different events. The person should know be able to construct scripts that make use of the events and detection routines and combine them. &lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to use sensors to detect a person. The person should know the difference between a repeating and one time sensor. The person should know how to construct scripts that make use of the sensor and no_sensor events. The person should know the limitations of the commands and understand the importance and how to narrowly define a sensor.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Workflow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;br /&gt;
&lt;br /&gt;
At the intermediate level the Programming and Software Development category includes greater in depth knowledge of the basic LSL commands. At this level the person should know how to use all of the flow commands and construct a wide variety of scripts that require all of the flow commands.&lt;br /&gt;
&lt;br /&gt;
In addition, the person should know and understand how to use all of the list commands. A person should be able to manipulate lists. For example, a person should be able to delete and insert sublists into an existing list. The person should be able to use strided list and know how to sort and randomize a list.  The person should also have a basic understanding of the memory overhead associated with a list.&lt;br /&gt;
&lt;br /&gt;
The person should also know and understand all of the string manipulation routines. The person should be able to manipulate strings. For example, a person should be able to delete and insert substrings into an existing string. The person should have a basic understanding of the memory overhead associated with strings.&lt;br /&gt;
&lt;br /&gt;
The person should be able to make use of at least one revision control system. The person should be able to maintain revisions and know how to find differences in revisions and be able to make a branch and merge a branch into an existing code base.&lt;br /&gt;
&lt;br /&gt;
Finally, a person should understand how to create a flexible plan to create and maintain a software project. The person should understand how the importance of creating a plan and developing an approach to a project before any coding is to begin. The person should understand the importance of flexibility and the importance of long term planning and how it relates to the code base.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672923</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672923"/>
		<updated>2009-11-26T12:56:12Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Detection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person  should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the data server event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types. &lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Text commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Commands for Force&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Impulse&lt;br /&gt;
# Commands for Impulse&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular impulse.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
The person who wants to achieve an intermediate rating for physics should know all of the basic commands for both linear and angular force as well as momentum. The person should know the difference between the local and global settings. The person should know the difference between the the force/torque commands and the impulse commands.&lt;br /&gt;
&lt;br /&gt;
The person should know the relationship between force and impulse. Both are representations of Newton&#039;s Second Law where force is the differential form and impulse is the integral form. The person should understand the relationship between force, mass, and acceleration as well as the relationship between impulse and momentum.&lt;br /&gt;
&lt;br /&gt;
The very basic commands of scripting a vehicle should be known. At the intermediate level a person is not expected to be able to create a script for a vehicle but should understand the basic commands and alter an existing vehicle script.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
A person who wishes to achieve an intermediate certification in detection should know the different events in which detection is relevant. The person should know how the different detection commands are used within the different events. The person should know be able to construct scripts that make use of the events and detection routines and combine them. &lt;br /&gt;
&lt;br /&gt;
Additionally a person should be able to use sensors to detect a person. The person should know the difference between a repeating and one time sensor. The person should know how to construct scripts that make use of the sensor and no_sensor events. The person should know the limitations of the commands and understand the importance and how to narrowly define a sensor.&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Workflow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672913</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672913"/>
		<updated>2009-11-26T12:52:26Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Physics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person  should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the data server event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types. &lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Text commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Commands for Force&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Impulse&lt;br /&gt;
# Commands for Impulse&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular impulse.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
The person who wants to achieve an intermediate rating for physics should know all of the basic commands for both linear and angular force as well as momentum. The person should know the difference between the local and global settings. The person should know the difference between the the force/torque commands and the impulse commands.&lt;br /&gt;
&lt;br /&gt;
The person should know the relationship between force and impulse. Both are representations of Newton&#039;s Second Law where force is the differential form and impulse is the integral form. The person should understand the relationship between force, mass, and acceleration as well as the relationship between impulse and momentum.&lt;br /&gt;
&lt;br /&gt;
The very basic commands of scripting a vehicle should be known. At the intermediate level a person is not expected to be able to create a script for a vehicle but should understand the basic commands and alter an existing vehicle script.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Workflow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672903</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672903"/>
		<updated>2009-11-26T12:22:18Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
A person should know the basic ways to manipulate and change an avatar. The person should be able to set and clear sit positions on a prim. The person should be able to set the default camera position for an agent once their avatar is sitting on a prim. The person should know how to find the UUID and link number of an avatar when an agent sits on an object.&lt;br /&gt;
&lt;br /&gt;
A person should demonstrate the basic use of the permission system. This includes the different types of permissions. Also, the person should know under what circumstances the agent is given a dialog to obtain permissions and when the dialog is not provided to the agent. The different permissions are not limited to just animations but include all permissions.&lt;br /&gt;
&lt;br /&gt;
The person should demonstrate a basic understanding of how to change a camera. The person is required to be able to move a camera to look at a specific point but not necessarily calculate specific rotations for a given view. The person  should be able to obtain permission to change a camera and know how to change it.&lt;br /&gt;
&lt;br /&gt;
The person should be able to identify all of the options available for the data server event and find a given piece of information. The person should be able to manipulate the information and identify what the information is and any limitations. For example, a query to determine if an agent is online will only determine if the agent is online and has provided permission for the owner of the script to determine if the agent is online.&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
A person seeking intermediate accreditation for the inventory and simulator information should be able to read the full contents of a note card and perform basic string manipulations to determine and react to the contents on a given line in the note card. The person should be able to read the full contents of the note card using both the number of lines in the card and using the EOF constant. &lt;br /&gt;
&lt;br /&gt;
The person should be able to use the changed event to determine when the inventory has been changed and react accordingly.&lt;br /&gt;
&lt;br /&gt;
The person should be able to get basic information about specific inventory items. The person should know how to search all items in the inventory and search all inventory items of a given type. This implies a basic understanding of how the inventory is numbered in relation to the different types. &lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Text commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Know the commands.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Momentum&lt;br /&gt;
# Know the commands.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular momentum.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Workflow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=672893</id>
		<title>SL Cert - Advanced Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Advanced_Scripting&amp;diff=672893"/>
		<updated>2009-11-26T11:34:56Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in advanced scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in advanced LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold intermediate scripting certification in the specific area.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to advanced level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate and advanced level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Text commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Know the commands.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Momentum&lt;br /&gt;
# Know the commands.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular momentum.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Workflow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Certification&amp;diff=672883</id>
		<title>SL Certification</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Certification&amp;diff=672883"/>
		<updated>2009-11-26T11:32:50Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: /* Scripting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
=SL Certification Project=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
In Second Life, education exists already in the form of many SL Schools. But certification does not yet exist in the form of SL Certifiers. The goal of the SL Certification Project is to create these certifiers. &lt;br /&gt;
&lt;br /&gt;
SL Certification is a task-based approach to identifying those who have attained a given level of proficiency in world in a given knowledge and skills area. &#039;&#039;&#039;To become a SL Certification project participant, contact {{User|Orange Planer}} (Leader) or {{User|Glenn Linden}} (Linden Lab Sponsor).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Action Plan==&lt;br /&gt;
Test&lt;br /&gt;
=== Phase One - Develop Skills Lists ===&lt;br /&gt;
&lt;br /&gt;
# SLCERT team uses VOLUNTEER MODERATORS to maintain:&lt;br /&gt;
#* A single &#039;&#039;&#039;SCHOOLS LIST&#039;&#039;&#039; on the PUBLIC WIKI with links to their information locations showing what they teach&lt;br /&gt;
#* Multiple &#039;&#039;&#039;SKILLS LISTS&#039;&#039;&#039; on the PUBLIC WIKI of what people need to know how to do in multiple categories of SL skills&lt;br /&gt;
# The VOLUNTEER MODERATORS keep the lists current&lt;br /&gt;
# The SCHOOLS continue to:&lt;br /&gt;
#* Teach their classes&lt;br /&gt;
#* Remain responsible for their own existing certification programs for now&lt;br /&gt;
# RESIDENTS have a choice of where to go to learn the skills&lt;br /&gt;
# EVERYONE has the benefit of a shared set of SKILLS LISTS for reference:&lt;br /&gt;
#* Individuals have:&lt;br /&gt;
#** A checklist for managing their own skills education program&lt;br /&gt;
#* Schools have:&lt;br /&gt;
#** The opportunity to be known for the classes they already make available&lt;br /&gt;
#** The opportunity to offer new classes not yet available&lt;br /&gt;
#* Solution Providers have:&lt;br /&gt;
#** A checklist for managing their employee skills education programs or checking skills levels of their contractors&lt;br /&gt;
&lt;br /&gt;
=== Phase Two - Develop Skills Tests ===&lt;br /&gt;
# SL CERT team uses VOLUNTEER MODERATORS to develop, test, and document:&lt;br /&gt;
#* Multiple &#039;&#039;&#039;SKILLS TESTS&#039;&#039;&#039; on the PUBLIC WIKI of what people need to know, and know how to do, in multiple categories of SL skills&lt;br /&gt;
#* BEST BLENDS of test methods including: Written (True/False; Multiple Choice), Performance (Build; Texture; Plan), and Other.&lt;br /&gt;
&lt;br /&gt;
=== Phase Three - Identify Third Party Certification Companies ===&lt;br /&gt;
# SLCERT team identifies CANDIDATE THIRD PARTY SKILLS CERTIFICATION COMPANIES&lt;br /&gt;
#* Including criteria for ranking and selecting&lt;br /&gt;
#* Present their results and recommendations to Linden Lab Sponsor&lt;br /&gt;
&lt;br /&gt;
=== Phase Four - Hire Recommended Certification Company ===&lt;br /&gt;
&lt;br /&gt;
* SL Certification Developers identify and prioritize selection criteria&lt;br /&gt;
* Make recommendation to Linden Lab&lt;br /&gt;
* Target identifying recommended SL Certifier 2H09&lt;br /&gt;
&lt;br /&gt;
=== Phase Five - Certification in Operation ===&lt;br /&gt;
* Linden Lab Sponsor reviews SL Certification Developer recommendations&lt;br /&gt;
* Presents plan for Executive Committee discussion, approval, budgeting&lt;br /&gt;
* Target 2010 to begin&lt;br /&gt;
&lt;br /&gt;
== Process Guides ==&lt;br /&gt;
&lt;br /&gt;
=== SL Certification Process ===&lt;br /&gt;
* [[SL Cert Process Document | How skills lists become skills tests]]&lt;br /&gt;
&lt;br /&gt;
=== Roles Guide ===&lt;br /&gt;
* [[SL Certification Roles | Action roles in the SL Certification Project]]&lt;br /&gt;
&lt;br /&gt;
=== Certification Guide ===&lt;br /&gt;
* [[SL Cert Guide to Certification Testing | How 3rd party testing companies work]]&lt;br /&gt;
&lt;br /&gt;
=== Wiki Guide ===&lt;br /&gt;
* [http://wiki.secondlife.com/wiki/Style_Guide SL KB Style Guide]&lt;br /&gt;
&lt;br /&gt;
=== Skills List Template ===&lt;br /&gt;
* [[SL Cert Criteria Template | A template for consistent format of skills list criteria pages.]]&lt;br /&gt;
&lt;br /&gt;
== Company Lists ==&lt;br /&gt;
&lt;br /&gt;
=== Education Companies / Schools ===&lt;br /&gt;
:Moderator: {{User|Lady Hathaway}}&lt;br /&gt;
* [[List of Second Life Skills Training Schools|SL Cert Schools]]&lt;br /&gt;
&lt;br /&gt;
=== Testing Companies / Certifiers ===&lt;br /&gt;
:Moderator: {{User|Orange Planer}}&lt;br /&gt;
* [[3rd Party Testing Agencies | SL Cert Certifiers (Candidates)]]&lt;br /&gt;
&lt;br /&gt;
== Skills Lists ==&lt;br /&gt;
* In PHASE ONE ACTION PLAN these lists are sorted in the order they were first created.&lt;br /&gt;
* In PHASE TWO ACTION PLAN a logical grouping will be added to make subjects easier to find.&lt;br /&gt;
&lt;br /&gt;
=== Land Management ===&lt;br /&gt;
:Moderator: {{User|Starglazer Blazer}}&lt;br /&gt;
* [[SL Cert - Basic Land Management]]&lt;br /&gt;
* [[SL Cert - Intermediate Land Management]]&lt;br /&gt;
* [[SL Cert - Advanced Land Management]]&lt;br /&gt;
&lt;br /&gt;
=== Texturing ===&lt;br /&gt;
:Moderator: {{User|Alice Klinger}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Textures Skill Set]]&lt;br /&gt;
&lt;br /&gt;
=== Terraforming ===&lt;br /&gt;
:Moderator: {{User|Patrice Cournoyer}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Terraforming]]&lt;br /&gt;
* [[SL Cert - Intermediate Terraforming]]&lt;br /&gt;
* [[SL Cert - Advanced Terraforming]]&lt;br /&gt;
&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
:Moderator: {{User|Grandma Bates}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Basic Scripting]]&lt;br /&gt;
* [[SL Cert - Intermediate Scripting]]&lt;br /&gt;
* [[SL Cert - Advanced Scripting]]&lt;br /&gt;
=== Event Hosting ===&lt;br /&gt;
:Moderator: {{User|Linda Sautereau}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Basic Event Hosting]]&lt;br /&gt;
&lt;br /&gt;
=== Machinima ===&lt;br /&gt;
:Moderator: {{User|Allison Selene}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Machinima Skills Set]]&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
:Moderator: {{User|Aquarius Paravane}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Basic Building]]&lt;br /&gt;
&lt;br /&gt;
=== Marketing ===&lt;br /&gt;
:Moderator: {{User|Ppmediadev Blinker}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Basic Marketing]]&lt;br /&gt;
&lt;br /&gt;
=== SL Mentoring ===&lt;br /&gt;
:Moderator: {{User|Orange Planer}}&lt;br /&gt;
&lt;br /&gt;
* [[SL Cert - Basic Mentoring]]&lt;br /&gt;
* [[SL Cert - Intermediate Mentoring]]&lt;br /&gt;
* [[SL Cert - Advanced Mentoring]]&lt;br /&gt;
&lt;br /&gt;
== Skills Tests ==&lt;br /&gt;
&lt;br /&gt;
=== Scripting ===&lt;br /&gt;
:Moderator: {{User|Grandma Bates}}&lt;br /&gt;
&lt;br /&gt;
== Meetings and Notes ==&lt;br /&gt;
Certification discussions, hosted by {{User|Orange Planer}} (2009) and {{User|Emily Darrow}} (2008)&lt;br /&gt;
* [http://slurl.com/secondlife/SLDEVU/227/73/27 Location (SLDEVU ISLAND)]&lt;br /&gt;
* [http://www.spin-stream.com/support/forumdisplay.php?f=90 Minutes (SP COUNCIL FORUM)]&lt;br /&gt;
&lt;br /&gt;
=== 4th Quarter 2008 Accomplishments ===&lt;br /&gt;
* Team Leader [[User:Emily Darrow|Emily Darrow]]&lt;br /&gt;
* Developed Action Plan&lt;br /&gt;
* Schools List Up on Wiki&lt;br /&gt;
&lt;br /&gt;
=== First Quarter 2009 Accomplishments ===&lt;br /&gt;
* Team Leader {{User|Orange Planer}}&lt;br /&gt;
* Additional Participation Generated by Post on XStreet&lt;br /&gt;
* Ten Skills Lists Up on Wiki&lt;br /&gt;
&lt;br /&gt;
=== Second Quarter 2009 Goals ===&lt;br /&gt;
* Team Leader {{User|Orange Planer}}&lt;br /&gt;
* Continue and Deepen Generation of Skills Lists&lt;br /&gt;
* Begin Generation of Skills Tests&lt;br /&gt;
* Identify 3rd Party testing companies to be used for certification process&lt;br /&gt;
&lt;br /&gt;
== Overarching Goal ==&lt;br /&gt;
&lt;br /&gt;
SL Certification is a Resident-Managed Project with Linden Lab Sponsorship and Support.&lt;br /&gt;
&lt;br /&gt;
The purpose of the SL Certification Project is to allow individuals to have their Second-Life skills recognized as meeting a set criteria, at various levels of &amp;quot;Basic&amp;quot;, &amp;quot;Intermediate,&amp;quot; and &amp;quot;Advanced&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A list of certified people will then be maintained and made available to those requesting a service.&lt;br /&gt;
&lt;br /&gt;
To assist residents in achieving these levels, schools will educate those interested. They will create learning content based on the certification criteria.&lt;br /&gt;
&lt;br /&gt;
Once the process is complete, a list of certified individuals will then be made publically available.&lt;br /&gt;
&lt;br /&gt;
== Immediate Goal ==&lt;br /&gt;
* Develop certification criteria for modeling and scripting&lt;br /&gt;
** We are looking for members of the Developer, Instructor, and Volunteer communities to work with Lindens in creating the skills list and certification tasks for those skills in Modeling and in Scripting.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Linden Lab is supporting the development of certification for the use of key Second Life tools. We’ll begin with in-world building tools and LSL. We believe this will benefit Residents, Developers, and anyone who wishes to use Second Life by clearly identifying both key skills and the holders of those skills. This will also enable the creation of training to build the skills required for certification.&lt;br /&gt;
It is Linden Lab&#039;s intent to work with an external certification provider to offer certification testing and maintain a list of those Residents who have been certified.&lt;br /&gt;
&lt;br /&gt;
== Linden Participants ==&lt;br /&gt;
* {{User|Glenn Linden}}&lt;br /&gt;
&lt;br /&gt;
== [[:Category:SL Certification Participant|Resident Participants]] ==&lt;br /&gt;
{{:Category:SL Certification Participant}}&lt;br /&gt;
&lt;br /&gt;
== Certification Mailing List ==&lt;br /&gt;
https://lists.secondlife.com/cgi-bin/mailman/listinfo/slcertification&lt;br /&gt;
&lt;br /&gt;
== SL Certification Group ==&lt;br /&gt;
SL Certification Devs - request membership from {{User|Glenn Linden}} or {{User|Orange Planer}} in world.  Membership is open to anyone who requests it. Meetings are announced here.&lt;br /&gt;
&lt;br /&gt;
== Frequently Asked Questions ==&lt;br /&gt;
=== What is the value of Certification? ===&lt;br /&gt;
The primary value of certification is to those hiring people to create content for them in SL. Certification is one indication that someone has at least a minimum set of skills. Certification is only one of many ways to demonstrate competency. Certification also clarifies skills and helps instructors develop instruction. &lt;br /&gt;
&lt;br /&gt;
Certification also provides a set of skills against which anyone in Second Life, whether they build for fun or for hire, can measure their accomplishments.&lt;br /&gt;
&lt;br /&gt;
By more clearly defining skills related to Second Life tools, certification may improve the quality of construction in Second Life, and may encourage a broader range of instruction about the Second Life tools.&lt;br /&gt;
&lt;br /&gt;
=== Portfolios already show if someone is competent; why do we need certification? ===&lt;br /&gt;
Portfolios have a valuable role in demonstrating accomplishment, both in RL and SL. In Second Life, many projects are done collaboratively.  Builds can incorporate content that is bought and created, and many people can be involved. It can be hard to look at a project and understand what a particular person has contributed. Certification provides one method of demonstrating your own skill set. It should be only one of many potential ways to evaluate a candidate.&lt;br /&gt;
&lt;br /&gt;
=== Is Linden Lab mandating certification? ===&lt;br /&gt;
You can chose to be certified if you want, or not. Linden Lab has no intent to monitor or mandate that Second Life content be created only by Residents with certification, or to mandate certification in any way. Nor will Certification (or non-certification) be tied by Linden Lab in any way to land ownership, group membership, membership level, or any other attribute of a Second Life account. While Linden Lab may provide a way for those listed in the Developer Directory to identify certification, it will not require it for the Developer Directory, Classifieds, Events, or any other Linden Lab-operated listing service.  &lt;br /&gt;
&lt;br /&gt;
=== Is Linden Lab mandating content of certification? ===&lt;br /&gt;
Linden Lab has engaged the Residents in defining the skills involved in competency, and in developing the appropriate demonstration of those skills. Linden Lab is not defining the skills nor the demonstration of them, it is simply supporting the process. &lt;br /&gt;
&lt;br /&gt;
=== Will it cost money? Does Linden Lab intend to profit by Certification? ===&lt;br /&gt;
Linden Lab was looking to have a third party organization manage certification; we don&#039;t want the administrative hassle of doing it, nor the potential for anyone to claim that we would have influence on who gets certified. We intend to make certification as widely available as possible. We will work with Residents, Instructors and Developers to find the best way to enable certification.&lt;br /&gt;
&lt;br /&gt;
=== Who will be providing the Certification service? ===&lt;br /&gt;
At this time, the only answer we can give is &amp;quot;Not Linden Lab.&amp;quot; We will work with the Residents who participate in developing certification to find the best provider - whether a Resident, an external third party, or some other provider. Ironically, our original reason for only considering an external provider was to prevent any concern that one group of Residents might use Certification against other Residents. Linden Lab has no intent of operating the Certification service - we don&#039;t have the expertise or resources, nor do we want the inevitable accusations of bias.&lt;br /&gt;
&lt;br /&gt;
=== Will certification make it harder to become competent in using Second Life tools? ===&lt;br /&gt;
Certification is a way to more clearly communicate skills. Without certification, everyone has their own idea of what competency is.  Some classes will teach one set of skills, others another, and outcomes aren&#039;t comparable. That&#039;s why we&#039;re involving SL instructors in this project.&lt;br /&gt;
Learning to use SL Tools will still take the same amount of effort.  Certification will help guide builders and scripters in what they ought to learn in order to achieve particular measurable standards.&lt;br /&gt;
&lt;br /&gt;
=== How will information on who is certified by made available? ===&lt;br /&gt;
The Residents involved in developing certification will help us determine the most effective way to list who is certified.&lt;br /&gt;
&lt;br /&gt;
=== Can we do certification in Second Life? ===&lt;br /&gt;
At least one Resident has started building a set of in-world tasks that could become part of a certification system.  This seems preferable to having external tests/tasks.&lt;br /&gt;
&lt;br /&gt;
== Certification Categories ==&lt;br /&gt;
Categories for certification will be varied, and will grow over time. &lt;br /&gt;
The basic principal behind the certification process is to provide as wide an array of subjects as possible, and involve residents with skills in these areas.&lt;br /&gt;
&lt;br /&gt;
Currently the following categories are being developed:&lt;br /&gt;
* Land Management&lt;br /&gt;
* Texturing&lt;br /&gt;
* Terraforming&lt;br /&gt;
* Scripting&lt;br /&gt;
* Event Hosting&lt;br /&gt;
* Machinima&lt;br /&gt;
* Building&lt;br /&gt;
* Marketing&lt;br /&gt;
* SL Mentoring&lt;br /&gt;
&lt;br /&gt;
By the end of February 09 we hope to have a framework of skill sets which will then form the basis to develop learning materials.&lt;br /&gt;
&lt;br /&gt;
== Previous Attempt at Categorization ==&lt;br /&gt;
An initial attempt at the SL Certification project began in the second quarter of 2007. Included below is an initial attempt at categorizing Modelling and Scripting skills (further works and discussion can be seen on the [[ModelingSkills|List of Modeling Skills]] and [[Scripting Certification|Scripting]] pages). The current work on skill categorization can be found in [[#Skills Lists|Skills Lists]] above.&lt;br /&gt;
&lt;br /&gt;
=== [[Modeling Certification|Modeling]] ===&lt;br /&gt;
[[ModelingSkills|List of Modeling Skills]]&lt;br /&gt;
* Architecture&lt;br /&gt;
* Furnishings/Interior Design&lt;br /&gt;
* Objects&lt;br /&gt;
* Weapons and Vehicles&lt;br /&gt;
Note: Includes using scripts to animate objects and textures but no writing of scripts&lt;br /&gt;
&lt;br /&gt;
=== [[Scripting Certification|Scripting]] ===&lt;br /&gt;
* Animation&lt;br /&gt;
** Note: Animation includes object animation, texture animation and particle systems&lt;br /&gt;
* Attachments &lt;br /&gt;
* Movement &lt;br /&gt;
* Physics &amp;amp; Collisions &lt;br /&gt;
* Detection &amp;amp; Sensing &lt;br /&gt;
* Asset Management &lt;br /&gt;
* Setting Properties &lt;br /&gt;
* Communications&lt;br /&gt;
* Interacting with external data stores &amp;amp; web content &lt;br /&gt;
* Media Management&lt;br /&gt;
&lt;br /&gt;
Alternative Method:&lt;br /&gt;
&lt;br /&gt;
* Dynamic Objects - manipulation of objects&lt;br /&gt;
** Subcategory: Physics and movement in 3-D space&lt;br /&gt;
** Subcategory: Primitive Attributes&lt;br /&gt;
* User interaction&lt;br /&gt;
** Subcategory: User input and communication&lt;br /&gt;
** Subcategory: Event handling&lt;br /&gt;
* Web interface&lt;br /&gt;
** HTML, XML/RPC, and any knowledge of web languages - Perl, Python, PHP, Java, etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Skills]]&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672873</id>
		<title>SL Cert - Intermediate Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SL_Cert_-_Intermediate_Scripting&amp;diff=672873"/>
		<updated>2009-11-26T11:24:09Z</updated>

		<summary type="html">&lt;p&gt;Grandma Bates: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SLCert Navbox}}&lt;br /&gt;
[[Category:Certification]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Criteria required for persons to become certified in intermediate scripting.&lt;br /&gt;
&lt;br /&gt;
==Audience==&lt;br /&gt;
&lt;br /&gt;
Persons who wish to demonstrate competence in intermediate LSL scripting.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Applicant must hold basic scripting certification.&lt;br /&gt;
&lt;br /&gt;
==Criteria for testing to intermediate level==&lt;br /&gt;
&lt;br /&gt;
Scripting includes a wide variety of categories. At the intermediate level the different categories are broken out separately. The different categories are given below with the associated topics. Note that there is some overlap between categories. This is because the different topics can not be easily divided and are related. Some topics may be necessary for multiple categories and are listed multiple times to avoid prerequisite clashes between categories. &lt;br /&gt;
&lt;br /&gt;
=== Primitives, Objects   ===&lt;br /&gt;
&lt;br /&gt;
The different ways scripts can manipulate an object is included in this category. It does not include the ways to interact between objects and agents. The interaction categories are included in the detection and communications categories.&lt;br /&gt;
&lt;br /&gt;
* Faces&lt;br /&gt;
# Each face on a prim has a number associated with it. &lt;br /&gt;
# The number varies by prim type and can vary depending if the prim has a &amp;quot;cut.&amp;quot; &lt;br /&gt;
# It is not necessary to memorize all of the face numbers for every prim. It is necessary to know how to find the information and understand how the convention depends on whether or not a prim is cut.&lt;br /&gt;
&lt;br /&gt;
* Changing color&lt;br /&gt;
# Commands for changing the color &lt;br /&gt;
# RGB definition of a color vector in LSL and how it is different from the editor window.&lt;br /&gt;
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.&lt;br /&gt;
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing alpha &lt;br /&gt;
# Commands for changing the alpha level&lt;br /&gt;
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and  e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).&lt;br /&gt;
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.&lt;br /&gt;
&lt;br /&gt;
* Changing textures&lt;br /&gt;
# Commands for changing the textures&lt;br /&gt;
# Predefined constants for UUIDs of textures&lt;br /&gt;
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.&lt;br /&gt;
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.&lt;br /&gt;
&lt;br /&gt;
* Particles &lt;br /&gt;
# Command to create particles&lt;br /&gt;
# basic limitation of particles&lt;br /&gt;
# basic understanding on how to turn particles on and turn.&lt;br /&gt;
&lt;br /&gt;
* Link commands and options&lt;br /&gt;
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.&lt;br /&gt;
&lt;br /&gt;
* Text and pie menu text&lt;br /&gt;
# Commands to change the text over a prim.&lt;br /&gt;
# Commands to change the text for different options in the pie menu.&lt;br /&gt;
&lt;br /&gt;
* Primitive name and description&lt;br /&gt;
# Commands to get the name and description of a prim.&lt;br /&gt;
# Commands to change the name and description of a prim.&lt;br /&gt;
&lt;br /&gt;
* Dataserver events&lt;br /&gt;
# Basic understanding of the data server event.&lt;br /&gt;
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.&lt;br /&gt;
&lt;br /&gt;
* Obtaining object information&lt;br /&gt;
# Getting agent information (llRequestAgentData)&lt;br /&gt;
# Getting object information (llGetObjectDetails)&lt;br /&gt;
&lt;br /&gt;
* Sound&lt;br /&gt;
# Commands to preload sound files.&lt;br /&gt;
# Commands to play sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that for many of these items there are a large number of commands asociated with the topic. For example, just to change the color of a prim the following commands can be used: llSetColor, llSetLinkColor, llGetColor, llSetPrimitiveParams, llGetPrimitiveParams, llSetLinkPrimitiveParams. It is adequate for a person to just know how to use llSetPrimitiveParams and llSetLinkPrimitiveParams to change the color of a prim, but the person should know the other commands in case they are asked to adapt another person&#039;s code.&lt;br /&gt;
&lt;br /&gt;
=== Avatars and Agents === &lt;br /&gt;
&lt;br /&gt;
* Sit positions and associated functions&lt;br /&gt;
# Setting the position and rotation of a sit position.&lt;br /&gt;
# Turning off a sit position after it has been set.&lt;br /&gt;
# Know how to set the camera orientation for a sitting avatar.&lt;br /&gt;
&lt;br /&gt;
* Permissions&lt;br /&gt;
# Basic understanding of the permissions system. &lt;br /&gt;
# Know how to obtain permissions and basic understanding when it is required.&lt;br /&gt;
&lt;br /&gt;
* Animations&lt;br /&gt;
# Know how to set a the animation of a person sitting on a prim.&lt;br /&gt;
# Know how to obtain permission before setting the animation.&lt;br /&gt;
# Know how to remove an active animation.&lt;br /&gt;
&lt;br /&gt;
* Camera Controls &lt;br /&gt;
# Know how to obtain permission to change the camera orientation.&lt;br /&gt;
# Know the basic ways to change the camera. (Static positioning)&lt;br /&gt;
&lt;br /&gt;
* Dataserver&lt;br /&gt;
# Know the commands that can be used to obtain information about an agent.&lt;br /&gt;
# Know how to obtain agent and avatar information via the data server event.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inventory and Simulator Information ===&lt;br /&gt;
&lt;br /&gt;
* Notecards&lt;br /&gt;
# Get the number of lines in a note card.&lt;br /&gt;
# Step through and get each line in a note card.&lt;br /&gt;
# Know how to stop reading a note card by testing for the EOF constant.&lt;br /&gt;
&lt;br /&gt;
* Detect when the inventory has changed.&lt;br /&gt;
* Inventory information&lt;br /&gt;
# Get the name of the creator for an object.&lt;br /&gt;
# Inventory numbering system.&lt;br /&gt;
# Inventory types.&lt;br /&gt;
# Inventory Permissions.&lt;br /&gt;
&lt;br /&gt;
* Basic use of the llRequestSimulatorData command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Intermediate I/0 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Text commands&lt;br /&gt;
# Dialogs&lt;br /&gt;
# Limitations of chat commands&lt;br /&gt;
# Email&lt;br /&gt;
&lt;br /&gt;
* Text and menu&lt;br /&gt;
# Setting text over an object&lt;br /&gt;
# Commands to manipulate the pie menu&lt;br /&gt;
&lt;br /&gt;
* Link messages&lt;br /&gt;
# The link_message event.&lt;br /&gt;
# Sending link messages.&lt;br /&gt;
# Limiting link messages to specific prims within a build.&lt;br /&gt;
&lt;br /&gt;
* Basic security&lt;br /&gt;
# Relying on arcane channels is not secure.&lt;br /&gt;
# Methods to insure a message is coming from an agent/object.&lt;br /&gt;
# Basic validation using MD5 and SHA1 hashes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition to the basic chat commands and listen event defined in the basic level the person should now be able to perform more advanced interactions including the use of dialogs. Also the person should have a broader understanding of the limitations of chat commands and know how to use the options to share email messages between scripts.&lt;br /&gt;
&lt;br /&gt;
Also, the person should be able to change and manipulate the text over an object as well as remove the text over an object. The various commands to change the text in a pie menu should also be known. &lt;br /&gt;
&lt;br /&gt;
In addition to the chat and listening events the person should also know how to use link messages to communicate between scripts within an object. The person should know all of the options to communicate to specific prims or all of the prims in an object using link messages.&lt;br /&gt;
&lt;br /&gt;
Finally, the person should have a basic understanding of security issues and limitations. The person should be able to identify and check for specific agents as well as check and limit communications for ownership and group identities. &lt;br /&gt;
&lt;br /&gt;
Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
&lt;br /&gt;
* Linear and Angular Force&lt;br /&gt;
# Know the commands.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular forces.&lt;br /&gt;
* Linear and Angular Momentum&lt;br /&gt;
# Know the commands.&lt;br /&gt;
# Know the difference between local and global settings.&lt;br /&gt;
# Know the difference between linear and angular momentum.&lt;br /&gt;
* Vehicles&lt;br /&gt;
# Know the basic commands and settings to initiate a vehicle.&lt;br /&gt;
# Know the basic ideas behind the different options.&lt;br /&gt;
# Know the impact of changing the individual parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* Touch events&lt;br /&gt;
# The three touch events.&lt;br /&gt;
# Functions to detect information about who has touched a prim.&lt;br /&gt;
# Passing touch information to other prims in a build.&lt;br /&gt;
&lt;br /&gt;
* Collision events&lt;br /&gt;
# The three collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the collision.&lt;br /&gt;
&lt;br /&gt;
* Land collision events&lt;br /&gt;
# The three land collision events.&lt;br /&gt;
# Functions to detect information about what/who took part in the land collision.&lt;br /&gt;
&lt;br /&gt;
* Sensors&lt;br /&gt;
# The  sensor commands.&lt;br /&gt;
# The two sensor related events.&lt;br /&gt;
# Limiting the scope of a sensor.&lt;br /&gt;
# Limitations of a sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming and Software Development ===&lt;br /&gt;
&lt;br /&gt;
* More advanced use of lists.&lt;br /&gt;
# Adding to a list.&lt;br /&gt;
# Removing part of a list.&lt;br /&gt;
# Inserting into a list.&lt;br /&gt;
# Replacing part of a list.&lt;br /&gt;
# Finding an item in a list.&lt;br /&gt;
* More advanced string functions.&lt;br /&gt;
# Removing a substring.&lt;br /&gt;
# Replacing a substring.&lt;br /&gt;
# Inserting a substring.&lt;br /&gt;
# Finding a substring.&lt;br /&gt;
* More advanced revision systems.&lt;br /&gt;
# Basic understanding and use of at least on revision control system. (ex: RCS, subversion, or git)&lt;br /&gt;
# Be able to maintain revisions and find particular revisions using at least one revision control system.&lt;br /&gt;
* Workflow&lt;br /&gt;
# Demonstrate effective interactions with clients and remain flexible through the entire development cycle.&lt;br /&gt;
# Be able to establish a basic plan for the creation of a script that must accomplish multiple task.&lt;br /&gt;
# Be able to adapt the plan as the requirements change.&lt;br /&gt;
# Be able to provide effective mock-ups and trial programs for clients.&lt;/div&gt;</summary>
		<author><name>Grandma Bates</name></author>
	</entry>
</feed>