Difference between revisions of "SL Cert - Advanced Scripting"

From Second Life Wiki
Jump to navigation Jump to search
m (Remove legalese)
 
(20 intermediate revisions by 3 users not shown)
Line 17: Line 17:


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.  
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.  
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.


=== Primitives, Objects  ===
=== Primitives, Objects  ===


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.
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.


* Faces
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.
# Each face on a prim has a number associated with it.
# The number varies by prim type and can vary depending if the prim has a "cut."
# 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.


* Changing color
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.
# Commands for changing the color
# RGB definition of a color vector in LSL and how it is different from the editor window.
# Know how to convert back and forth between an RGB color vector in LSL and the format found in the editor window.
# Know how to identify when a color is changed using the changed event and the predefined constant CHANGED_COLOR.


* Changing alpha
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.
# Commands for changing the alpha level
# Difference between changing alpha level and the two different transparant textures, TEXTURE_TRANSPARENT and e97cf410-8e61-7005-ec06-629eba4cd1fb (invisiprim).
# Know how to identify when an alpha level is changed using the changed event and the predefined constant CHANGED_COLOR.


* Changing textures
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.
# Commands for changing the textures
# Predefined constants for UUIDs of textures
# Know the difference between the constants TEXTURE_TRANSPARENT, TEXTURE_BLANK, TEXTURE_MEDIA, and TEXTURE_PLYWOOD.
# Know how to identify when a texture is changed using the changed event and the predefined constant CHANGED_TEXTURE.


* Particles
=== Avatars and Agents ===
# Command to create particles
# basic limitation of particles
# basic understanding on how to turn particles on and turn.


* Link commands and options
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.
# Commands to determine the UUID, link number, total number of prims etc. for prims within the current object.


* Text and pie menu text
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.
# Commands to change the text over a prim.
# Commands to change the text for different options in the pie menu.


* Primitive name and description
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.
# Commands to get the name and description of a prim.
# Commands to change the name and description of a prim.


* Dataserver events
The person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person's camera to a specific location and look at the position from a predefined orientation.
# Basic understanding of the data server event.
# Basic understanding of the different kinds of information that can be obtained using the Dataserver event.


* Obtaining object information
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.
# Getting agent information (llRequestAgentData)
# Getting object information (llGetObjectDetails)


* Sound
=== Inventory and Simulator Information ===
# Commands to preload sound files.
# Commands to play sounds.


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.


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's code.
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.


=== Avatars and Agents ===
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.


* Sit positions and associated functions
=== Advanced I/0 ===
# Setting the position and rotation of a sit position.
# Turning off a sit position after it has been set.
# Know how to set the camera orientation for a sitting avatar.


* Permissions
# Basic understanding of the permissions system.
# Know how to obtain permissions and basic understanding when it is required.


* Animations
* HTTP - in
# Know how to set a the animation of a person sitting on a prim.
# Creating an HTTP server
# Know how to obtain permission before setting the animation.
# Reacting to errors in the set up
# Know how to remove an active animation.
# Reacting to changes to the server
# Reacting to outside requests


* Camera Controls
* HTTP - out
# Know how to obtain permission to change the camera orientation.
# Sending communications out to other http servers
# Know the basic ways to change the camera. (Static positioning)
# reacting to errors
# Writing flexible scripts that can adapt to server outages and other potential failures.


* Dataserver
* Shared Media
# Know the commands that can be used to obtain information about an agent.
# Interacting with forms and outside servers.
# Know how to obtain agent and avatar information via the data server event.
# Interacting with forms specified data:urls and sending information back to the same script via HTTP-in.  


* Communication with outside servers.
# Difference between POST and Get for HTTP forms.
# At least one scripting language for obtaining information from an in-world script.
# Demonstrate at least one way to reliably retain information from an in-world script and relay it back to another in-world script.


=== Inventory and Simulator Information ===
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.


* Notecards
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.
# Get the number of lines in a note card.
# Step through and get each line in a note card.
# Know how to stop reading a note card by testing for the EOF constant.


* Detect when the inventory has changed.
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.
* Inventory information
# Get the name of the creator for an object.
# Inventory numbering system.
# Inventory types.
# Inventory Permissions.


* Basic use of the llRequestSimulatorData command.
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.


=== Physics ===


=== Intermediate I/0 ===
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's Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.


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.


* Text commands
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.
# Dialogs
# Limitations of chat commands
# Email


* Text and menu
# Setting text over an object
# Commands to manipulate the pie menu


* Link messages
=== Vehicles ===
# The link_message event.
 
# Sending link messages.
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.
# Limiting link messages to specific prims within a build.


* Basic security
=== Detection ===
# Relying on arcane channels is not secure.
# Methods to insure a message is coming from an agent/object.
# Basic validation using MD5 and SHA1 hashes


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.


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.
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 "or" 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.


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.  
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.


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.
=== Rotations and Vectors ===


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.  
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 .


Predefined channels (DEBUG_CHANNEL and PUBLIC_CHANNEL).
==== Rotations and position ====
* using llSetPrimitiveParams to move and rotate at the same time
* Rotating and moving a prim to a specified orientation
** Absolute coordinates
** Relative coordinates (in a link set)


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).


==== Smooth movements ====


=== Physics ===
===== Absolute coordinates =====
* Rotate and movement around the edge of a prim
* Rotate and move around a fixed point using a predefined axis


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's Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.
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.


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.
===== Local coordinates (within a linkset) =====
* Rotate and movement around the edge of a prim
* Rotate and move around a fixed point using a predefined axis


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.
This is the same as the previous tasks only in a relative coordinate system.


==== Transitions ====
* Smooth movements from one orientation (position and rotation) to another.


=== Vehicles ===
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.


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.
==== Determining specific orientations ====


=== Detection ===
===== Absolute/Sim coordinates =====
* Given a point rotate an object to face the point.
* Given two points and the current position rotate an object to face perpindicular to the two points.


* Touch events
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 "upward" direction.
# The three touch events.
# Functions to detect information about who has touched a prim.
# Passing touch information to other prims in a build.


* Collision events
===== Local  coordinates to local =====
# The three collision events.
* Given a point rotate an object to face a local point.
# Functions to detect information about what/who took part in the collision.
* Given two points and the current position rotate an object to face perpindicular to the two points.  


* Land collision events
Similar to the previous task, but the objects should both be in the same local context.
# The three land collision events.
# Functions to detect information about what/who took part in the land collision.


* Sensors
===== Local  coordinates to absolute =====
# The  sensor commands.
* Given a point rotate an object to face a point in absolute/sim coordinates.
# The two sensor related events.
* Given two points and the current position rotate an object to face perpindicular to the two points.  
# Limiting the scope of a sensor.
# Limitations of a sensor.


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's global coordinate system.


=== Programming and Software Development ===
=== Programming and Software Development ===
Line 210: Line 178:
of data types. The person should be able to use the list functions to
of data types. The person should be able to use the list functions to
determine the data type for an entry in the list.
determine the data type for an entry in the list.
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.


A person should be able to use the more advanced features of a
A person should be able to use the more advanced features of a

Latest revision as of 09:03, 6 September 2010

Overview

Criteria required for persons to become certified in advanced scripting.

Audience

Persons who wish to demonstrate competence in advanced LSL scripting.

Prerequisites

Applicant must hold intermediate scripting certification in the specific area.

Criteria for testing to advanced level

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.

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.

Primitives, Objects

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.

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.

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.

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.

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.

Avatars and Agents

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.

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.

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.

The person should be able to apply fine changes to the agents camera. For example, the person should be able to move a person's camera to a specific location and look at the position from a predefined orientation.

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.

Inventory and Simulator Information

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.

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.

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.

Advanced I/0

  • HTTP - in
  1. Creating an HTTP server
  2. Reacting to errors in the set up
  3. Reacting to changes to the server
  4. Reacting to outside requests
  • HTTP - out
  1. Sending communications out to other http servers
  2. reacting to errors
  3. Writing flexible scripts that can adapt to server outages and other potential failures.
  • Shared Media
  1. Interacting with forms and outside servers.
  2. Interacting with forms specified data:urls and sending information back to the same script via HTTP-in.
  • Communication with outside servers.
  1. Difference between POST and Get for HTTP forms.
  2. At least one scripting language for obtaining information from an in-world script.
  3. Demonstrate at least one way to reliably retain information from an in-world script and relay it back to another in-world script.

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.

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.

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.

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.

Physics

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's Second Law. The person should know how to put the rotational and linear forms of the commands together to achieve specific objectives.

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.

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.


Vehicles

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.

Detection

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.

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 "or" 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.

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.

Rotations and Vectors

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 .

Rotations and position

  • using llSetPrimitiveParams to move and rotate at the same time
  • Rotating and moving a prim to a specified orientation
    • Absolute coordinates
    • Relative coordinates (in a link set)

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).

Smooth movements

Absolute coordinates
  • Rotate and movement around the edge of a prim
  • Rotate and move around a fixed point using a predefined axis

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.

Local coordinates (within a linkset)
  • Rotate and movement around the edge of a prim
  • Rotate and move around a fixed point using a predefined axis

This is the same as the previous tasks only in a relative coordinate system.

Transitions

  • Smooth movements from one orientation (position and rotation) to another.

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.

Determining specific orientations

Absolute/Sim coordinates
  • Given a point rotate an object to face the point.
  • Given two points and the current position rotate an object to face perpindicular to the two points.

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 "upward" direction.

Local coordinates to local
  • Given a point rotate an object to face a local point.
  • Given two points and the current position rotate an object to face perpindicular to the two points.

Similar to the previous task, but the objects should both be in the same local context.

Local coordinates to absolute
  • Given a point rotate an object to face a point in absolute/sim coordinates.
  • Given two points and the current position rotate an object to face perpindicular to the two points.

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's global coordinate system.

Programming and Software Development

  • More advanced use of lists and data types.
  1. Multiple Data Types
  2. Using strided lists with multiple data types
  3. Manipulating all data types
  • Advanced revision systems.
  1. Branching and merging revisions.
  2. Tagged revisions.
  3. Finding and using differences between revisions
  • Workflow
  1. Demonstrate effective interactions with clients and remain flexible through the entire development cycle.
  2. Establishing a plan for systems of scripts and carrying it out.
  3. Be able to adapt the plan as the requirements change.
  4. Be able to establish time lines and effectively communicate them with clients.


At the advanced level a person should be familiar with all data types. The person should know when to use a given a data type and when it is appropriate. The person should be able to use the most advanced features of lists and work with strided lists that contain a variety of data types. The person should be able to use the list functions to determine the data type for an entry in the list.

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.


A person should be able to use the more advanced features of a software revision system. The person should know when it is appropriate to create a branch and know how to create a branch. The person should know how to merge a branch back into an established trunk. The person should also know what a tagged release is and how to create a tagged release in the revision software that they are using.

A person should be able to create plans for creating systems of scripts. The person should be able to demonstrate that they can establish a time line for a project and determine a set of intermediate steps necessary in order to complete a project. The person should demonstrate an ability to communicate the time line and the reasons for their decisions with a client. Finally, the person should demonstrate an ability to adapt and change a timeline as the client changes the requirements. As part of this aspect the person should demonstrate that they can anticipate potential problems with a given set of requirements and work with a client in advance to avoid potential problems.