https://wiki.secondlife.com/w/api.php?action=feedcontributions&user=Yoz+Linden&feedformat=atomSecond Life Wiki - User contributions [en]2024-03-29T06:18:02ZUser contributionsMediaWiki 1.36.1https://wiki.secondlife.com/w/index.php?title=Template:LSL_All_Functions/Name&diff=1129184Template:LSL All Functions/Name2010-12-21T00:02:17Z<p>Yoz Linden: </p>
<hr />
<div><ul style="{{NewStyle|column-width|20.5em|moz=*|webkit=*}}"><br />
<li> [[llAbs{{#var:lang}}|llAbs]]<br />
<li> [[llAcos{{#var:lang}}|llAcos]]<br />
<li> [[llAddToLandBanList{{#var:lang}}|llAddToLandBanList]]<br />
<li> [[llAddToLandPassList{{#var:lang}}|llAddToLandPassList]]<br />
<li> [[llAdjustSoundVolume{{#var:lang}}|llAdjustSoundVolume]]<br />
<li> [[llAllowInventoryDrop{{#var:lang}}|llAllowInventoryDrop]]<br />
<li> [[llAngleBetween{{#var:lang}}|llAngleBetween]]<br />
<li> [[llApplyImpulse{{#var:lang}}|llApplyImpulse]]<br />
<li> [[llApplyRotationalImpulse{{#var:lang}}|llApplyRotationalImpulse]]<br />
<li> [[llAsin{{#var:lang}}|llAsin]]<br />
<li> [[llAtan2{{#var:lang}}|llAtan2]]<br />
<li> [[llAttachToAvatar{{#var:lang}}|llAttachToAvatar]]<br />
<li> [[llAvatarOnSitTarget{{#var:lang}}|llAvatarOnSitTarget]]<br />
<li> [[llAxes2Rot{{#var:lang}}|llAxes2Rot]]<br />
<li> [[llAxisAngle2Rot{{#var:lang}}|llAxisAngle2Rot]]<br />
<li> [[llBase64ToInteger{{#var:lang}}|llBase64ToInteger]]<br />
<li> [[llBase64ToString{{#var:lang}}|llBase64ToString]]<br />
<li> [[llBreakAllLinks{{#var:lang}}|llBreakAllLinks]]<br />
<li> [[llBreakLink{{#var:lang}}|llBreakLink]]<br />
<li> [[llCastRay{{#var:lang}}|llCastRay]] {{LSL New}} {{LSL I}}<br />
<li> [[llCeil{{#var:lang}}|llCeil]]<br />
<li> [[llClearCameraParams{{#var:lang}}|llClearCameraParams]]<br />
<li> [[llClearPrimMedia{{#var:lang}}|llClearPrimMedia]] {{LSL New}}<br />
<li> [[llCloseRemoteDataChannel{{#var:lang}}|llCloseRemoteDataChannel]]<br />
<li> [[llCloud{{#var:lang}}|llCloud]]<br />
<li> [[llCollisionFilter{{#var:lang}}|llCollisionFilter]]<br />
<li> [[llCollisionSound{{#var:lang}}|llCollisionSound]]<br />
<li> [[llCollisionSprite{{#var:lang}}|llCollisionSprite]]<br />
<li> [[llCos{{#var:lang}}|llCos]]<br />
<li> [[llCreateLink{{#var:lang}}|llCreateLink]]<br />
<li> [[llCSV2List{{#var:lang}}|llCSV2List]]<br />
<li> [[llDeleteSubList{{#var:lang}}|llDeleteSubList]]<br />
<li> [[llDeleteSubString{{#var:lang}}|llDeleteSubString]]<br />
<li> [[llDetachFromAvatar{{#var:lang}}|llDetachFromAvatar]]<br />
<li> [[llDetectedGrab{{#var:lang}}|llDetectedGrab]]<br />
<li> [[llDetectedGroup{{#var:lang}}|llDetectedGroup]]<br />
<li> [[llDetectedKey{{#var:lang}}|llDetectedKey]]<br />
<li> [[llDetectedLinkNumber{{#var:lang}}|llDetectedLinkNumber]]<br />
<li> [[llDetectedName{{#var:lang}}|llDetectedName]]<br />
<li> [[llDetectedOwner{{#var:lang}}|llDetectedOwner]]<br />
<li> [[llDetectedPos{{#var:lang}}|llDetectedPos]]<br />
<li> [[llDetectedRot{{#var:lang}}|llDetectedRot]]<br />
<li> [[llDetectedTouchBinormal{{#var:lang}}|llDetectedTouchBinormal]]<br />
<li> [[llDetectedTouchFace{{#var:lang}}|llDetectedTouchFace]]<br />
<li> [[llDetectedTouchNormal{{#var:lang}}|llDetectedTouchNormal]]<br />
<li> [[llDetectedTouchPos{{#var:lang}}|llDetectedTouchPos]]<br />
<li> [[llDetectedTouchST{{#var:lang}}|llDetectedTouchST]]<br />
<li> [[llDetectedTouchUV{{#var:lang}}|llDetectedTouchUV]]<br />
<li> [[llDetectedType{{#var:lang}}|llDetectedType]]<br />
<li> [[llDetectedVel{{#var:lang}}|llDetectedVel]]<br />
<li> [[llDialog{{#var:lang}}|llDialog]]<br />
<li> [[llDie{{#var:lang}}|llDie]]<br />
<li> [[llDumpList2String{{#var:lang}}|llDumpList2String]]<br />
<li> [[llEdgeOfWorld{{#var:lang}}|llEdgeOfWorld]]<br />
<li> [[llEjectFromLand{{#var:lang}}|llEjectFromLand]]<br />
<li> [[llEmail{{#var:lang}}|llEmail]]<br />
<li> [[llEscapeURL{{#var:lang}}|llEscapeURL]]<br />
<li> [[llEuler2Rot{{#var:lang}}|llEuler2Rot]]<br />
<li> [[llFabs{{#var:lang}}|llFabs]]<br />
<li> [[llFloor{{#var:lang}}|llFloor]]<br />
<li> [[llForceMouselook{{#var:lang}}|llForceMouselook]]<br />
<li> [[llFrand{{#var:lang}}|llFrand]]<br />
<li> [[llGetAccel{{#var:lang}}|llGetAccel]]<br />
<li> [[llGetAgentInfo{{#var:lang}}|llGetAgentInfo]]<br />
<li> [[llGetAgentLanguage{{#var:lang}}|llGetAgentLanguage]]<br />
<li> [[llGetAgentSize{{#var:lang}}|llGetAgentSize]]<br />
<li> [[llGetAlpha{{#var:lang}}|llGetAlpha]]<br />
<li> [[llGetAndResetTime{{#var:lang}}|llGetAndResetTime]]<br />
<li> [[llGetAnimation{{#var:lang}}|llGetAnimation]]<br />
<li> [[llGetAnimationList{{#var:lang}}|llGetAnimationList]]<br />
<li> [[llGetAttached{{#var:lang}}|llGetAttached]]<br />
<li> [[llGetBoundingBox{{#var:lang}}|llGetBoundingBox]]<br />
<li> [[llGetCameraPos{{#var:lang}}|llGetCameraPos]]<br />
<li> [[llGetCameraRot{{#var:lang}}|llGetCameraRot]]<br />
<li> [[llGetCenterOfMass{{#var:lang}}|llGetCenterOfMass]]<br />
<li> [[llGetColor{{#var:lang}}|llGetColor]]<br />
<li> [[llGetCreator{{#var:lang}}|llGetCreator]]<br />
<li> [[llGetDate{{#var:lang}}|llGetDate]]<br />
<li> [[llGetDisplayName{{#var:lang}}|llGetDisplayName]] {{LSL New}}<br />
<li> [[llGetEnergy{{#var:lang}}|llGetEnergy]]<br />
<li> [[llGetEnv{{#var:lang}}|llGetEnv]] {{LSL New}} {{LSL I}}<br />
<li> [[llGetForce{{#var:lang}}|llGetForce]]<br />
<li> [[llGetFreeMemory{{#var:lang}}|llGetFreeMemory]]<br />
<li> [[llGetFreeURLs{{#var:lang}}|llGetFreeURLs]]<br />
<li> [[llGetGeometricCenter{{#var:lang}}|llGetGeometricCenter]]<br />
<li> [[llGetGMTclock{{#var:lang}}|llGetGMTclock]]<br />
<li> [[llGetHTTPHeader{{#var:lang}}|llGetHTTPHeader]]<br />
<li> [[llGetInventoryCreator{{#var:lang}}|llGetInventoryCreator]]<br />
<li> [[llGetInventoryKey{{#var:lang}}|llGetInventoryKey]]<br />
<li> [[llGetInventoryName{{#var:lang}}|llGetInventoryName]]<br />
<li> [[llGetInventoryNumber{{#var:lang}}|llGetInventoryNumber]]<br />
<li> [[llGetInventoryPermMask{{#var:lang}}|llGetInventoryPermMask]]<br />
<li> [[llGetInventoryType{{#var:lang}}|llGetInventoryType]]<br />
<li> [[llGetKey{{#var:lang}}|llGetKey]]<br />
<li> [[llGetLandOwnerAt{{#var:lang}}|llGetLandOwnerAt]]<br />
<li> [[llGetLinkKey{{#var:lang}}|llGetLinkKey]]<br />
<li> [[llGetLinkName{{#var:lang}}|llGetLinkName]]<br />
<li> [[llGetLinkNumber{{#var:lang}}|llGetLinkNumber]]<br />
<li> [[llGetLinkNumberOfSides{{#var:lang}}|llGetLinkNumberOfSides]] {{LSL New}}<br />
<li> [[llGetLinkPrimitiveParams{{#var:lang}}|llGetLinkPrimitiveParams]] {{LSL New}}<br />
<li> [[llGetListEntryType{{#var:lang}}|llGetListEntryType]]<br />
<li> [[llGetListLength{{#var:lang}}|llGetListLength]]<br />
<li> [[llGetLocalPos{{#var:lang}}|llGetLocalPos]]<br />
<li> [[llGetLocalRot{{#var:lang}}|llGetLocalRot]]<br />
<li> [[llGetMass{{#var:lang}}|llGetMass]]<br />
<li> [[llGetNextEmail{{#var:lang}}|llGetNextEmail]]<br />
<li> [[llGetNotecardLine{{#var:lang}}|llGetNotecardLine]]<br />
<li> [[llGetNumberOfNotecardLines{{#var:lang}}|llGetNumberOfNotecardLines]]<br />
<li> [[llGetNumberOfPrims{{#var:lang}}|llGetNumberOfPrims]]<br />
<li> [[llGetNumberOfSides{{#var:lang}}|llGetNumberOfSides]]<br />
<li> [[llGetObjectDesc{{#var:lang}}|llGetObjectDesc]]<br />
<li> [[llGetObjectDetails{{#var:lang}}|llGetObjectDetails]]<br />
<li> [[llGetObjectMass{{#var:lang}}|llGetObjectMass]]<br />
<li> [[llGetObjectName{{#var:lang}}|llGetObjectName]]<br />
<li> [[llGetObjectPermMask{{#var:lang}}|llGetObjectPermMask]]<br />
<li> [[llGetObjectPrimCount{{#var:lang}}|llGetObjectPrimCount]]<br />
<li> [[llGetOmega{{#var:lang}}|llGetOmega]]<br />
<li> [[llGetOwner{{#var:lang}}|llGetOwner]]<br />
<li> [[llGetOwnerKey{{#var:lang}}|llGetOwnerKey]]<br />
<li> [[llGetParcelDetails{{#var:lang}}|llGetParcelDetails]]<br />
<li> [[llGetParcelFlags{{#var:lang}}|llGetParcelFlags]]<br />
<li> [[llGetParcelMaxPrims{{#var:lang}}|llGetParcelMaxPrims]]<br />
<li> [[llGetParcelPrimCount{{#var:lang}}|llGetParcelPrimCount]]<br />
<li> [[llGetParcelPrimOwners{{#var:lang}}|llGetParcelPrimOwners]]<br />
<li> [[llGetPermissions{{#var:lang}}|llGetPermissions]]<br />
<li> [[llGetPermissionsKey{{#var:lang}}|llGetPermissionsKey]]<br />
<li> [[llGetPos{{#var:lang}}|llGetPos]]<br />
<li> [[llGetPrimitiveParams{{#var:lang}}|llGetPrimitiveParams]]<br />
<li> [[llGetPrimMediaParams{{#var:lang}}|llGetPrimMediaParams]] {{LSL New}}<br />
<li> [[llGetRegionAgentCount{{#var:lang}}|llGetRegionAgentCount]]<br />
<li> [[llGetRegionCorner{{#var:lang}}|llGetRegionCorner]]<br />
<li> [[llGetRegionFlags{{#var:lang}}|llGetRegionFlags]]<br />
<li> [[llGetRegionFPS{{#var:lang}}|llGetRegionFPS]]<br />
<li> [[llGetRegionName{{#var:lang}}|llGetRegionName]]<br />
<li> [[llGetRegionTimeDilation{{#var:lang}}|llGetRegionTimeDilation]]<br />
<li> [[llGetRootPosition{{#var:lang}}|llGetRootPosition]]<br />
<li> [[llGetRootRotation{{#var:lang}}|llGetRootRotation]]<br />
<li> [[llGetRot{{#var:lang}}|llGetRot]]<br />
<li> [[llGetScale{{#var:lang}}|llGetScale]]<br />
<li> [[llGetScriptName{{#var:lang}}|llGetScriptName]]<br />
<li> [[llGetScriptState{{#var:lang}}|llGetScriptState]]<br />
<li> [[llGetSimulatorHostname{{#var:lang}}|llGetSimulatorHostname]]<br />
<li> [[llGetStartParameter{{#var:lang}}|llGetStartParameter]]<br />
<li> [[llGetStatus{{#var:lang}}|llGetStatus]]<br />
<li> [[llGetSubString{{#var:lang}}|llGetSubString]]<br />
<li> [[llGetSunDirection{{#var:lang}}|llGetSunDirection]]<br />
<li> [[llGetTexture{{#var:lang}}|llGetTexture]]<br />
<li> [[llGetTextureOffset{{#var:lang}}|llGetTextureOffset]]<br />
<li> [[llGetTextureRot{{#var:lang}}|llGetTextureRot]]<br />
<li> [[llGetTextureScale{{#var:lang}}|llGetTextureScale]]<br />
<li> [[llGetTime{{#var:lang}}|llGetTime]]<br />
<li> [[llGetTimeOfDay{{#var:lang}}|llGetTimeOfDay]]<br />
<li> [[llGetTimestamp{{#var:lang}}|llGetTimestamp]]<br />
<li> [[llGetTorque{{#var:lang}}|llGetTorque]]<br />
<li> [[llGetUnixTime{{#var:lang}}|llGetUnixTime]]<br />
<li> [[llGetUsername{{#var:lang}}|llGetUsername]] {{LSL New}}<br />
<li> [[llGetVel{{#var:lang}}|llGetVel]]<br />
<li> [[llGetWallclock{{#var:lang}}|llGetWallclock]]<br />
<li> [[llGiveInventory{{#var:lang}}|llGiveInventory]]<br />
<li> [[llGiveInventoryList{{#var:lang}}|llGiveInventoryList]]<br />
<li> [[llGiveMoney{{#var:lang}}|llGiveMoney]]<br />
<li> <s>[[llGodLikeRezObject{{#var:lang}}|llGodLikeRezObject]]</s> {{LSL_GM}}<br />
<li> [[llGround{{#var:lang}}|llGround]]<br />
<li> [[llGroundContour{{#var:lang}}|llGroundContour]]<br />
<li> [[llGroundNormal{{#var:lang}}|llGroundNormal]]<br />
<li> [[llGroundRepel{{#var:lang}}|llGroundRepel]]<br />
<li> [[llGroundSlope{{#var:lang}}|llGroundSlope]]<br />
<li> [[llHTTPRequest{{#var:lang}}|llHTTPRequest]]<br />
<li> [[llHTTPResponse{{#var:lang}}|llHTTPResponse]]<br />
<li> [[llInsertString{{#var:lang}}|llInsertString]]<br />
<li> [[llInstantMessage{{#var:lang}}|llInstantMessage]]<br />
<li> [[llIntegerToBase64{{#var:lang}}|llIntegerToBase64]]<br />
<li> [[llKey2Name{{#var:lang}}|llKey2Name]]<br />
<li> [[llLinkParticleSystem{{#var:lang}}|llLinkParticleSystem]] {{LSL New}}<br />
<li> [[llList2CSV{{#var:lang}}|llList2CSV]]<br />
<li> [[llList2Float{{#var:lang}}|llList2Float]]<br />
<li> [[llList2Integer{{#var:lang}}|llList2Integer]]<br />
<li> [[llList2Key{{#var:lang}}|llList2Key]]<br />
<li> [[llList2List{{#var:lang}}|llList2List]]<br />
<li> [[llList2ListStrided{{#var:lang}}|llList2ListStrided]]<br />
<li> [[llList2Rot{{#var:lang}}|llList2Rot]]<br />
<li> [[llList2String{{#var:lang}}|llList2String]]<br />
<li> [[llList2Vector{{#var:lang}}|llList2Vector]]<br />
<li> [[llListen{{#var:lang}}|llListen]]<br />
<li> [[llListenControl{{#var:lang}}|llListenControl]]<br />
<li> [[llListenRemove{{#var:lang}}|llListenRemove]]<br />
<li> [[llListFindList{{#var:lang}}|llListFindList]]<br />
<li> [[llListInsertList{{#var:lang}}|llListInsertList]]<br />
<li> [[llListRandomize{{#var:lang}}|llListRandomize]]<br />
<li> [[llListReplaceList{{#var:lang}}|llListReplaceList]]<br />
<li> [[llListSort{{#var:lang}}|llListSort]]<br />
<li> [[llListStatistics{{#var:lang}}|llListStatistics]]<br />
<li> [[llLoadURL{{#var:lang}}|llLoadURL]]<br />
<li> [[llLog{{#var:lang}}|llLog]]<br />
<li> [[llLog10{{#var:lang}}|llLog10]]<br />
<li> [[llLookAt{{#var:lang}}|llLookAt]]<br />
<li> [[llLoopSound{{#var:lang}}|llLoopSound]]<br />
<li> [[llLoopSoundMaster{{#var:lang}}|llLoopSoundMaster]]<br />
<li> [[llLoopSoundSlave{{#var:lang}}|llLoopSoundSlave]]<br />
<li> <s>[[llMakeExplosion{{#var:lang}}|llMakeExplosion]]</s> {{LSL_D}}<br />
<li> <s>[[llMakeFire{{#var:lang}}|llMakeFire]]</s> {{LSL_D}}<br />
<li> <s>[[llMakeFountain{{#var:lang}}|llMakeFountain]]</s> {{LSL_D}}<br />
<li> <s>[[llMakeSmoke{{#var:lang}}|llMakeSmoke]]</s> {{LSL_D}}<br />
<li> [[llMapDestination{{#var:lang}}|llMapDestination]]<br />
<li> [[llMD5String{{#var:lang}}|llMD5String]]<br />
<li> [[llMessageLinked{{#var:lang}}|llMessageLinked]]<br />
<li> [[llMinEventDelay{{#var:lang}}|llMinEventDelay]]<br />
<li> [[llModifyLand{{#var:lang}}|llModifyLand]]<br />
<li> [[llModPow{{#var:lang}}|llModPow]]<br />
<li> [[llMoveToTarget{{#var:lang}}|llMoveToTarget]]<br />
<li> [[llOffsetTexture{{#var:lang}}|llOffsetTexture]]<br />
<li> [[llOpenRemoteDataChannel{{#var:lang}}|llOpenRemoteDataChannel]]<br />
<li> [[llOverMyLand{{#var:lang}}|llOverMyLand]]<br />
<li> [[llOwnerSay{{#var:lang}}|llOwnerSay]]<br />
<li> [[llParcelMediaCommandList{{#var:lang}}|llParcelMediaCommandList]]<br />
<li> [[llParcelMediaQuery{{#var:lang}}|llParcelMediaQuery]]<br />
<li> [[llParseString2List{{#var:lang}}|llParseString2List]]<br />
<li> [[llParseStringKeepNulls{{#var:lang}}|llParseStringKeepNulls]]<br />
<li> [[llParticleSystem{{#var:lang}}|llParticleSystem]]<br />
<li> [[llPassCollisions{{#var:lang}}|llPassCollisions]]<br />
<li> [[llPassTouches{{#var:lang}}|llPassTouches]]<br />
<li> [[llPlaySound{{#var:lang}}|llPlaySound]]<br />
<li> [[llPlaySoundSlave{{#var:lang}}|llPlaySoundSlave]]<br />
<li> <s>[[llPointAt{{#var:lang}}|llPointAt]]</s> {{LSL_D}}<br />
<li> [[llPow{{#var:lang}}|llPow]]<br />
<li> [[llPreloadSound{{#var:lang}}|llPreloadSound]]<br />
<li> [[llPushObject{{#var:lang}}|llPushObject]]<br />
<li> <s>[[llRefreshPrimURL{{#var:lang}}|llRefreshPrimURL]]</s> {{LSL_D}}<br />
<li> [[llRegionSay{{#var:lang}}|llRegionSay]]<br />
<li> <s>[[llReleaseCamera{{#var:lang}}|llReleaseCamera]]</s> {{LSL_D}}<br />
<li> [[llReleaseControls{{#var:lang}}|llReleaseControls]]<br />
<li> [[llReleaseURL{{#var:lang}}|llReleaseURL]]<br />
<li> [[llRemoteDataReply{{#var:lang}}|llRemoteDataReply]]<br />
<li> <s>[[llRemoteDataSetRegion{{#var:lang}}|llRemoteDataSetRegion]]</s> {{LSL_D}}<br />
<li> <s>[[llRemoteLoadScript{{#var:lang}}|llRemoteLoadScript]]</s> {{LSL_D}}<br />
<li> [[llRemoteLoadScriptPin{{#var:lang}}|llRemoteLoadScriptPin]]<br />
<li> [[llRemoveFromLandBanList{{#var:lang}}|llRemoveFromLandBanList]]<br />
<li> [[llRemoveFromLandPassList{{#var:lang}}|llRemoveFromLandPassList]]<br />
<li> [[llRemoveInventory{{#var:lang}}|llRemoveInventory]]<br />
<li> [[llRemoveVehicleFlags{{#var:lang}}|llRemoveVehicleFlags]]<br />
<li> [[llRequestAgentData{{#var:lang}}|llRequestAgentData]]<br />
<li> [[llRequestDisplayName{{#var:lang}}|llRequestDisplayName]] {{LSL New}}<br />
<li> [[llRequestInventoryData{{#var:lang}}|llRequestInventoryData]]<br />
<li> [[llRequestPermissions{{#var:lang}}|llRequestPermissions]]<br />
<li> [[llRequestSecureURL{{#var:lang}}|llRequestSecureURL]]<br />
<li> [[llRequestSimulatorData{{#var:lang}}|llRequestSimulatorData]]<br />
<li> [[llRequestURL{{#var:lang}}|llRequestURL]]<br />
<li> [[llRequestUsername{{#var:lang}}|llRequestUsername]] {{LSL New}}<br />
<li> [[llResetLandBanList{{#var:lang}}|llResetLandBanList]]<br />
<li> [[llResetLandPassList{{#var:lang}}|llResetLandPassList]]<br />
<li> [[llResetOtherScript{{#var:lang}}|llResetOtherScript]]<br />
<li> [[llResetScript{{#var:lang}}|llResetScript]]<br />
<li> [[llResetTime{{#var:lang}}|llResetTime]]<br />
<li> [[llRezAtRoot{{#var:lang}}|llRezAtRoot]]<br />
<li> [[llRezObject{{#var:lang}}|llRezObject]]<br />
<li> [[llRot2Angle{{#var:lang}}|llRot2Angle]]<br />
<li> [[llRot2Axis{{#var:lang}}|llRot2Axis]]<br />
<li> [[llRot2Euler{{#var:lang}}|llRot2Euler]]<br />
<li> [[llRot2Fwd{{#var:lang}}|llRot2Fwd]]<br />
<li> [[llRot2Left{{#var:lang}}|llRot2Left]]<br />
<li> [[llRot2Up{{#var:lang}}|llRot2Up]]<br />
<li> [[llRotateTexture{{#var:lang}}|llRotateTexture]]<br />
<li> [[llRotBetween{{#var:lang}}|llRotBetween]]<br />
<li> [[llRotLookAt{{#var:lang}}|llRotLookAt]]<br />
<li> [[llRotTarget{{#var:lang}}|llRotTarget]]<br />
<li> [[llRotTargetRemove{{#var:lang}}|llRotTargetRemove]]<br />
<li> [[llRound{{#var:lang}}|llRound]]<br />
<li> [[llSameGroup{{#var:lang}}|llSameGroup]]<br />
<li> [[llSay{{#var:lang}}|llSay]]<br />
<li> [[llScaleTexture{{#var:lang}}|llScaleTexture]]<br />
<li> [[llScriptDanger{{#var:lang}}|llScriptDanger]]<br />
<li> [[llSendRemoteData{{#var:lang}}|llSendRemoteData]]<br />
<li> [[llSensor{{#var:lang}}|llSensor]]<br />
<li> [[llSensorRemove{{#var:lang}}|llSensorRemove]]<br />
<li> [[llSensorRepeat{{#var:lang}}|llSensorRepeat]]<br />
<li> [[llSetAlpha{{#var:lang}}|llSetAlpha]]<br />
<li> [[llSetBuoyancy{{#var:lang}}|llSetBuoyancy]]<br />
<li> [[llSetCameraAtOffset{{#var:lang}}|llSetCameraAtOffset]]<br />
<li> [[llSetCameraEyeOffset{{#var:lang}}|llSetCameraEyeOffset]]<br />
<li> [[llSetCameraParams{{#var:lang}}|llSetCameraParams]]<br />
<li> [[llSetClickAction{{#var:lang}}|llSetClickAction]]<br />
<li> [[llSetColor{{#var:lang}}|llSetColor]]<br />
<li> [[llSetDamage{{#var:lang}}|llSetDamage]]<br />
<li> [[llSetForce{{#var:lang}}|llSetForce]]<br />
<li> [[llSetForceAndTorque{{#var:lang}}|llSetForceAndTorque]]<br />
<li> [[llSetHoverHeight{{#var:lang}}|llSetHoverHeight]]<br />
<li> <s>[[llSetInventoryPermMask{{#var:lang}}|llSetInventoryPermMask]]</s> {{LSL_GM}}<br />
<li> [[llSetLinkAlpha{{#var:lang}}|llSetLinkAlpha]]<br />
<li> [[llSetLinkColor{{#var:lang}}|llSetLinkColor]]<br />
<li> [[llSetLinkPrimitiveParams{{#var:lang}}|llSetLinkPrimitiveParams]]<br />
<li> [[llSetLinkPrimitiveParamsFast{{#var:lang}}|llSetLinkPrimitiveParamsFast]] {{LSL New}}<br />
<li> [[llSetLinkTexture{{#var:lang}}|llSetLinkTexture]]<br />
<li> [[llSetLinkTextureAnim{{#var:lang}}|llSetLinkTextureAnim]] {{LSL New}}<br />
<li> [[llSetLocalRot{{#var:lang}}|llSetLocalRot]]<br />
<li> [[llSetObjectDesc{{#var:lang}}|llSetObjectDesc]]<br />
<li> [[llSetObjectName{{#var:lang}}|llSetObjectName]]<br />
<li> <s>[[llSetObjectPermMask{{#var:lang}}|llSetObjectPermMask]]</s> {{LSL_GM}}<br />
<li> [[llSetParcelMusicURL{{#var:lang}}|llSetParcelMusicURL]]<br />
<li> [[llSetPayPrice{{#var:lang}}|llSetPayPrice]]<br />
<li> [[llSetPos{{#var:lang}}|llSetPos]]<br />
<li> [[llSetPrimitiveParams{{#var:lang}}|llSetPrimitiveParams]]<br />
<li> [[llSetPrimMediaParams{{#var:lang}}|llSetPrimMediaParams]] {{LSL New}}<br />
<li> <s>[[llSetPrimURL{{#var:lang}}|llSetPrimURL]]</s> {{LSL_D}}<br />
<li> [[llSetRemoteScriptAccessPin{{#var:lang}}|llSetRemoteScriptAccessPin]]<br />
<li> [[llSetRot{{#var:lang}}|llSetRot]]<br />
<li> [[llSetScale{{#var:lang}}|llSetScale]]<br />
<li> [[llSetScriptState{{#var:lang}}|llSetScriptState]]<br />
<li> [[llSetSitText{{#var:lang}}|llSetSitText]]<br />
<li> [[llSetSoundQueueing{{#var:lang}}|llSetSoundQueueing]]<br />
<li> [[llSetSoundRadius{{#var:lang}}|llSetSoundRadius]]<br />
<li> [[llSetStatus{{#var:lang}}|llSetStatus]]<br />
<li> [[llSetText{{#var:lang}}|llSetText]]<br />
<li> [[llSetTexture{{#var:lang}}|llSetTexture]]<br />
<li> [[llSetTextureAnim{{#var:lang}}|llSetTextureAnim]]<br />
<li> [[llSetTimerEvent{{#var:lang}}|llSetTimerEvent]]<br />
<li> [[llSetTorque{{#var:lang}}|llSetTorque]]<br />
<li> [[llSetTouchText{{#var:lang}}|llSetTouchText]]<br />
<li> [[llSetVehicleFlags{{#var:lang}}|llSetVehicleFlags]]<br />
<li> [[llSetVehicleFloatParam{{#var:lang}}|llSetVehicleFloatParam]]<br />
<li> [[llSetVehicleRotationParam{{#var:lang}}|llSetVehicleRotationParam]]<br />
<li> [[llSetVehicleType{{#var:lang}}|llSetVehicleType]]<br />
<li> [[llSetVehicleVectorParam{{#var:lang}}|llSetVehicleVectorParam]]<br />
<li> [[llSHA1String{{#var:lang}}|llSHA1String]]<br />
<li> [[llShout{{#var:lang}}|llShout]]<br />
<li> [[llSin{{#var:lang}}|llSin]]<br />
<li> [[llSitTarget{{#var:lang}}|llSitTarget]]<br />
<li> [[llSleep{{#var:lang}}|llSleep]]<br />
<li> <s>[[llSound{{#var:lang}}|llSound]]</s> {{LSL_D}}<br />
<li> <s>[[llSoundPreload{{#var:lang}}|llSoundPreload]]</s> {{LSL_D}}<br />
<li> [[llSqrt{{#var:lang}}|llSqrt]]<br />
<li> [[llStartAnimation{{#var:lang}}|llStartAnimation]]<br />
<li> [[llStopAnimation{{#var:lang}}|llStopAnimation]]<br />
<li> [[llStopHover{{#var:lang}}|llStopHover]]<br />
<li> [[llStopLookAt{{#var:lang}}|llStopLookAt]]<br />
<li> [[llStopMoveToTarget{{#var:lang}}|llStopMoveToTarget]]<br />
<li> <s>[[llStopPointAt{{#var:lang}}|llStopPointAt]]</s> {{LSL_D}}<br />
<li> [[llStopSound{{#var:lang}}|llStopSound]]<br />
<li> [[llStringLength{{#var:lang}}|llStringLength]]<br />
<li> [[llStringToBase64{{#var:lang}}|llStringToBase64]]<br />
<li> [[llStringTrim{{#var:lang}}|llStringTrim]]<br />
<li> [[llSubStringIndex{{#var:lang}}|llSubStringIndex]]<br />
<li> <s>[[llTakeCamera{{#var:lang}}|llTakeCamera]]</s> {{LSL_D}}<br />
<li> [[llTakeControls{{#var:lang}}|llTakeControls]]<br />
<li> [[llTan{{#var:lang}}|llTan]]<br />
<li> [[llTarget{{#var:lang}}|llTarget]]<br />
<li> [[llTargetOmega{{#var:lang}}|llTargetOmega]]<br />
<li> [[llTargetRemove{{#var:lang}}|llTargetRemove]]<br />
<li> [[llTeleportAgentHome{{#var:lang}}|llTeleportAgentHome]]<br />
<li> [[llTextBox{{#var:lang}}|llTextBox]] {{LSL New}}<br />
<li> [[llToLower{{#var:lang}}|llToLower]]<br />
<li> [[llToUpper{{#var:lang}}|llToUpper]]<br />
<li> [[llTriggerSound{{#var:lang}}|llTriggerSound]]<br />
<li> [[llTriggerSoundLimited{{#var:lang}}|llTriggerSoundLimited]]<br />
<li> [[llUnescapeURL{{#var:lang}}|llUnescapeURL]]<br />
<li> [[llUnSit{{#var:lang}}|llUnSit]]<br />
<li> [[llVecDist{{#var:lang}}|llVecDist]]<br />
<li> [[llVecMag{{#var:lang}}|llVecMag]]<br />
<li> [[llVecNorm{{#var:lang}}|llVecNorm]]<br />
<li> [[llVolumeDetect{{#var:lang}}|llVolumeDetect]]<br />
<li> [[llWater{{#var:lang}}|llWater]]<br />
<li> [[llWhisper{{#var:lang}}|llWhisper]]<br />
<li> [[llWind{{#var:lang}}|llWind]]<br />
<li> <s>[[llXorBase64Strings{{#var:lang}}|llXorBase64Strings]]</s> {{LSL_D}}<br />
<li> [[llXorBase64StringsCorrect{{#var:lang}}|llXorBase64StringsCorrect]]<br />
</ul></div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Wiki_Acceptance_Tests&diff=1104913Wiki Acceptance Tests2010-11-12T21:24:21Z<p>Yoz Linden: /* HTTPS */</p>
<hr />
<div>When upgrading the wiki, or moving to a new operational location, use these tests to ensure that everything is functional.<br />
<br />
In all cases, the pages should look the same as they did previously.<br />
The best way to ensure this would be to compare their appearance in the new installation with their appearance in the old (existing) installation.<br />
<br />
== Upgrade notes ==<br />
<br />
With this upgrade, we are also upgrading a number of extensions. There may be some backward-incompatibilities that require content changes:<br />
* The newer version of the ImageMap extension requires polygon shapes to have an even number of points.<br />
<br />
== Basic content tests ==<br />
* [[Main Page]] - Check that it looks the same.<br />
<br />
=== Special pages ===<br />
* [[Special:Recentchanges]]<br />
* [[Special:Version]] - check list of extensions and make sure it matches.<br />
<br />
=== API ===<br />
<br />
To check that the API is active, click this link: <br />
{{SERVER}}{{SCRIPTPATH}}/api.php<br />
<br />
=== HTTPS ===<br />
<br />
Nowhere on the site should have HTTPS errors (i.e. broken lock in the browser), especially not the Login page. Acid test is IE, which complains the most. Chrome has a weird bug where sometimes it'll complain about HTTPS problems while no other browser does.<br />
<br />
Pages to test:<br />
* Front page<br />
* Login page<br />
* User page (Torley's?)<br />
* File:Image page<br />
<br />
=== Namespaces ===<br />
<br />
The following query returns a list of the namespaces defined:<br />
* https://wiki.secondlife.com/w/api.php?action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics<br />
<br />
This should return the following:<br />
<pre><br />
<?xml version="1.0"?><br />
<api><br />
<query><br />
<general mainpage="Main Page" base="https://wiki.secondlife.com/wiki/Main_Page" sitename="Second Life Wiki" generator="MediaWiki 1.14.1" rev="34" case="first-letter" rights="Creative Commons Attribution-Share Alike 3.0" lang="en" fallback8bitEncoding="windows-1252" writeapi="" timezone="UTC" timeoffset="0" /><br />
<namespaces><br />
<ns id="-2" canonical="Media">Media</ns><br />
<ns id="-1" canonical="Special">Special</ns><br />
<ns id="0" subpages="" /><br />
<ns id="1" subpages="" canonical="Talk">Talk</ns><br />
<ns id="2" subpages="" canonical="User">User</ns><br />
<ns id="3" subpages="" canonical="User talk">User talk</ns><br />
<ns id="4" subpages="" canonical="Project">Project</ns><br />
<ns id="5" subpages="" canonical="Project talk">Project talk</ns><br />
<ns id="6" subpages="" canonical="File">File</ns><br />
<ns id="7" subpages="" canonical="File talk">File talk</ns><br />
<ns id="8" subpages="" canonical="MediaWiki">MediaWiki</ns><br />
<ns id="9" subpages="" canonical="MediaWiki talk">MediaWiki talk</ns><br />
<ns id="10" subpages="" canonical="Template">Template</ns><br />
<ns id="11" subpages="" canonical="Template talk">Template talk</ns><br />
<ns id="12" subpages="" canonical="Help">Help</ns><br />
<ns id="13" subpages="" canonical="Help talk">Help talk</ns><br />
<ns id="14" subpages="" canonical="Category">Category</ns><br />
<ns id="15" subpages="" canonical="Category talk">Category talk</ns><br />
<ns id="100" subpages="" canonical="Linden Lab Official">Linden Lab Official</ns><br />
<ns id="101" subpages="" canonical="Linden Lab Official talk">Linden Lab Official talk</ns><br />
<ns id="102" subpages="" canonical="Viewerhelp">Viewerhelp</ns><br />
<ns id="103" subpages="" canonical="Viewerhelp talk">Viewerhelp talk</ns><br />
<ns id="104" subpages="" canonical="Article officiel de Linden Lab">Article officiel de Linden Lab</ns><br />
<ns id="105" subpages="" canonical="Article officiel de Linden Lab talk">Article officiel de Linden Lab talk</ns><br />
<ns id="106" subpages="" canonical="Linden Lab公認">Linden Lab公認</ns><br />
<ns id="107" subpages="" canonical="Linden Lab公認 talk">Linden Lab公認 talk</ns><br />
<ns id="108" subpages="" canonical="Articolo ufficiale Linden Lab">Articolo ufficiale Linden Lab</ns><br />
<ns id="109" subpages="" canonical="Articolo ufficiale Linden Lab talk">Articolo ufficiale Linden Lab talk</ns><br />
<ns id="110" subpages="" canonical="Artigo oficial da Linden Lab">Artigo oficial da Linden Lab</ns><br />
<ns id="111" subpages="" canonical="Artigo oficial da Linden Lab talk">Artigo oficial da Linden Lab talk</ns><br />
<ns id="112" subpages="" canonical="Artículo oficial de Linden Lab">Artículo oficial de Linden Lab</ns><br />
<ns id="113" subpages="" canonical="Artículo oficial de Linden Lab talk">Artículo oficial de Linden Lab talk</ns><br />
<ns id="114" subpages="" canonical="Linden Lab Offiziell">Linden Lab Offiziell</ns><br />
<ns id="115" subpages="" canonical="Linden Lab Offiziell talk">Linden Lab Offiziell talk</ns><br />
<ns id="274" canonical="Widget">Widget</ns><br />
<ns id="275" canonical="Widget talk">Widget talk</ns><br />
</namespaces><br />
<namespacealiases><br />
<ns id="100">LLO</ns><br />
<ns id="114">LLOde</ns><br />
<ns id="104">LLOfr</ns><br />
<ns id="106">LLOja</ns><br />
<ns id="108">LLOit</ns><br />
<ns id="110">LLOpt</ns><br />
<ns id="112">LLOes</ns><br />
<ns id="6">Image</ns><br />
<ns id="7">Image talk</ns><br />
</namespacealiases><br />
<statistics pages="33962" articles="8215" views="118745206" edits="187815" images="5426" users="50807" activeusers="240" admins="33" jobs="0" /><br />
</query><br />
</api><br />
</pre><br />
<br />
=== Search ===<br />
Test "Google Search" in the sidebar:<br />
# Enter a search term.<br />
# Click '''Google Search'''.<br />
Make sure it returns reasonable results.<br />
<br />
=== Subpages in main namespace===<br />
<br />
Go to [[Wiki Acceptance Test/Subpages]] -- first line should just say "Wiki Acceptance Test", second line should just say "Subpages". If they both say "Wiki Acceptance Test/Subpages", then this isn't working right.<br />
<br />
== Extensions ==<br />
<br />
Check that [[Special:Version]] lists the same set of installed extensions.<br />
<br />
=== Cite ===<br />
<br />
The special page [[Special:Cite]] should exist.<br />
<br />
=== Flagged Revisions ===<br />
<br />
# Edit a page in the [[Knowledge Base]].<br />
# Check that the edit becomes a "draft" revision.<br />
# As a reviewer user, approve the edit, and check that it becomes the "stable" revision.<br />
<br />
Check the [[Admin Dashboard]] to ensure that pages show up in the various FR special pages.<br />
<br />
=== ImageMap ===<br />
<br />
Copied from [[User:Ugleh Ulrik]]:<br />
<br />
<div style="position: relative; top: -0px; right: -0px; margin-top: 0px;"><div><br />
{| cellspacing="0" cellpadding="0" border="0"<br />
|colspan="3"|<imagemap><br />
Image:Ugleh_chat_top.png<br />
poly 0 [[User:Ugleh Ulrik]]<br />
desc none<br />
</imagemap><br />
|-<br />
|<imagemap> <br />
Image:Ugleh_chat_left.png<br />
poly 0 0 [[User:Ugleh Ulrik]]<br />
desc none<br />
</imagemap><br />
|style="background:#3E3E3E;" valign="top" width="394" align="left"|{{:User:Ugleh_Ulrik/quote}}<br />
|<imagemap><br />
Image:Ugleh_chat_right.png<br />
poly 0 [[User:Ugleh Ulrik]]<br />
desc none<br />
</imagemap><br />
|-<br />
|colspan="3"|<imagemap><br />
Image:Ugleh_chat_bottom.png|<br />
poly 0 [[User:Ugleh Ulrik]]<br />
desc none<br />
</imagemap><br />
|-<br />
|}<br />
<br />
=== MathStatFunctions ===<br />
<br />
If these show the correct values, then this extension is working:<br />
<br />
*pi = {{ #const: pi }}<br />
*e = {{ #const: e }}<br />
*sqrt(2) = {{#const:sqrt(2)}}<br />
<br />
===SimpleTable===<br />
<br />
(nobody uses this extension)<br />
<br />
===Variables===<br />
<br />
Set the variable "myvar" to be "1234: {{#vardefine:myvar|1234}}<br />
<br />
If the following shows "1234", then this is working properly:<br />
<br />
The value is >>> {{#var:myvar}} <<<<br />
<br />
===VideoFlash ===<br />
<br />
===Widgets ===<br />
Check that the following list of widgets shows up: https://wiki.secondlife.com/w/index.php?title=Special%3AAllPages&from=&to=&namespace=274<br />
<br />
* [[Widget:Blip.tv]]<br />
* [[Widget:Chat Transcript]]<br />
* [[Widget:Feed]]<br />
* [[Widget:Flickr]]<br />
* [[Widget:Flickr/SlideShow]]<br />
* [[Widget:Flickr/Slideshow]]<br />
* [[Widget:FlickrShow]]<br />
* [[Widget:Google Gadget]]<br />
* [[Widget:Scribd]]<br />
* [[Widget:SlideShare]]<br />
* [[Widget:Twitter]]<br />
* [[Widget:Vimeo]]<br />
* [[Widget:Widgetbox]]<br />
* [[Widget:YouTube]]<br />
* [[Widget:YouTubeChannel]]<br />
<br />
Do we need to test each individual widget? Probably not. Maybe just test a couple.<br />
<br />
===Add metas ===<br />
<br />
Check that each page has <br />
<nowiki><meta name="mat" content="PG_NOT" /> </nowiki><br />
<br />
in its <head>.<br />
<br />
===Breadcrumbs2 ===<br />
Check that [[MediaWiki:Breadcrumbs]] exists and that breadcrumbs are displayed properly.<br />
<br />
===GeSHiHighlight===<br />
<br />
If the following is displayed as formatted text the extension is working.<br />
<br />
<lsl>default { state_entry() { llOwnerSay(""); } }</lsl><br />
<br />
Also see [[Syntax Highlighting Examples]].<br />
<br />
===Google Analytics Integration ===<br />
<br />
Check that each wiki page has the following at the bottom:<br />
<pre><br />
<script type="text/javascript"><br />
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");<br />
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));<br />
</script><br />
<script type="text/javascript"><br />
var pageTracker = _gat._getTracker("UA-190376-9");<br />
pageTracker._initData();<br />
pageTracker._trackPageview();<br />
</script><br />
</pre><br />
<br />
===HeaderFooter===<br />
<br />
Check that [https://wiki.secondlife.com/w/index.php?title=Special%3AAllPages&from=&to=&namespace=100 a page in the LLO namespace] shows the following header and footer:<br />
* [[MediaWiki:Hf-nsheader-Linden Lab Official]]<br />
* [[MediaWiki:Hf-nsfooter-Linden Lab Official]]<br />
<br />
=== Rename User ===<br />
<br />
See if [[Special:RenameUser]] exists.<br />
<br />
===ReplaceText===<br />
If this page exists, then the extension is installed. [[Special:ReplaceText]]. Try it out and confirm that it works properly.<br />
<br />
===ParserFunctions===<br />
<br />
If what follows is the current date and time formatted as Y m d H:i:s then this extension is working.<br />
<br />
{{#time: Y m d H:i:s}}<br />
<br />
===StringFunctions===<br />
<br />
If the number on the line below is 4, then this extension is working.<br />
<br />
{{#len:test}}<br />
<br />
[[Category:Wiki]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Wiki_Acceptance_Tests&diff=1104902Wiki Acceptance Tests2010-11-12T21:06:10Z<p>Yoz Linden: </p>
<hr />
<div>When upgrading the wiki, or moving to a new operational location, use these tests to ensure that everything is functional.<br />
<br />
In all cases, the pages should look the same as they did previously.<br />
The best way to ensure this would be to compare their appearance in the new installation with their appearance in the old (existing) installation.<br />
<br />
== Upgrade notes ==<br />
<br />
With this upgrade, we are also upgrading a number of extensions. There may be some backward-incompatibilities that require content changes:<br />
* The newer version of the ImageMap extension requires polygon shapes to have an even number of points.<br />
<br />
== Basic content tests ==<br />
* [[Main Page]] - Check that it looks the same.<br />
<br />
=== Special pages ===<br />
* [[Special:Recentchanges]]<br />
* [[Special:Version]] - check list of extensions and make sure it matches.<br />
<br />
=== API ===<br />
<br />
To check that the API is active, click this link: <br />
{{SERVER}}{{SCRIPTPATH}}/api.php<br />
<br />
=== HTTPS ===<br />
<br />
=== Namespaces ===<br />
<br />
The following query returns a list of the namespaces defined:<br />
* https://wiki.secondlife.com/w/api.php?action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics<br />
<br />
This should return the following:<br />
<pre><br />
<?xml version="1.0"?><br />
<api><br />
<query><br />
<general mainpage="Main Page" base="https://wiki.secondlife.com/wiki/Main_Page" sitename="Second Life Wiki" generator="MediaWiki 1.14.1" rev="34" case="first-letter" rights="Creative Commons Attribution-Share Alike 3.0" lang="en" fallback8bitEncoding="windows-1252" writeapi="" timezone="UTC" timeoffset="0" /><br />
<namespaces><br />
<ns id="-2" canonical="Media">Media</ns><br />
<ns id="-1" canonical="Special">Special</ns><br />
<ns id="0" subpages="" /><br />
<ns id="1" subpages="" canonical="Talk">Talk</ns><br />
<ns id="2" subpages="" canonical="User">User</ns><br />
<ns id="3" subpages="" canonical="User talk">User talk</ns><br />
<ns id="4" subpages="" canonical="Project">Project</ns><br />
<ns id="5" subpages="" canonical="Project talk">Project talk</ns><br />
<ns id="6" subpages="" canonical="File">File</ns><br />
<ns id="7" subpages="" canonical="File talk">File talk</ns><br />
<ns id="8" subpages="" canonical="MediaWiki">MediaWiki</ns><br />
<ns id="9" subpages="" canonical="MediaWiki talk">MediaWiki talk</ns><br />
<ns id="10" subpages="" canonical="Template">Template</ns><br />
<ns id="11" subpages="" canonical="Template talk">Template talk</ns><br />
<ns id="12" subpages="" canonical="Help">Help</ns><br />
<ns id="13" subpages="" canonical="Help talk">Help talk</ns><br />
<ns id="14" subpages="" canonical="Category">Category</ns><br />
<ns id="15" subpages="" canonical="Category talk">Category talk</ns><br />
<ns id="100" subpages="" canonical="Linden Lab Official">Linden Lab Official</ns><br />
<ns id="101" subpages="" canonical="Linden Lab Official talk">Linden Lab Official talk</ns><br />
<ns id="102" subpages="" canonical="Viewerhelp">Viewerhelp</ns><br />
<ns id="103" subpages="" canonical="Viewerhelp talk">Viewerhelp talk</ns><br />
<ns id="104" subpages="" canonical="Article officiel de Linden Lab">Article officiel de Linden Lab</ns><br />
<ns id="105" subpages="" canonical="Article officiel de Linden Lab talk">Article officiel de Linden Lab talk</ns><br />
<ns id="106" subpages="" canonical="Linden Lab公認">Linden Lab公認</ns><br />
<ns id="107" subpages="" canonical="Linden Lab公認 talk">Linden Lab公認 talk</ns><br />
<ns id="108" subpages="" canonical="Articolo ufficiale Linden Lab">Articolo ufficiale Linden Lab</ns><br />
<ns id="109" subpages="" canonical="Articolo ufficiale Linden Lab talk">Articolo ufficiale Linden Lab talk</ns><br />
<ns id="110" subpages="" canonical="Artigo oficial da Linden Lab">Artigo oficial da Linden Lab</ns><br />
<ns id="111" subpages="" canonical="Artigo oficial da Linden Lab talk">Artigo oficial da Linden Lab talk</ns><br />
<ns id="112" subpages="" canonical="Artículo oficial de Linden Lab">Artículo oficial de Linden Lab</ns><br />
<ns id="113" subpages="" canonical="Artículo oficial de Linden Lab talk">Artículo oficial de Linden Lab talk</ns><br />
<ns id="114" subpages="" canonical="Linden Lab Offiziell">Linden Lab Offiziell</ns><br />
<ns id="115" subpages="" canonical="Linden Lab Offiziell talk">Linden Lab Offiziell talk</ns><br />
<ns id="274" canonical="Widget">Widget</ns><br />
<ns id="275" canonical="Widget talk">Widget talk</ns><br />
</namespaces><br />
<namespacealiases><br />
<ns id="100">LLO</ns><br />
<ns id="114">LLOde</ns><br />
<ns id="104">LLOfr</ns><br />
<ns id="106">LLOja</ns><br />
<ns id="108">LLOit</ns><br />
<ns id="110">LLOpt</ns><br />
<ns id="112">LLOes</ns><br />
<ns id="6">Image</ns><br />
<ns id="7">Image talk</ns><br />
</namespacealiases><br />
<statistics pages="33962" articles="8215" views="118745206" edits="187815" images="5426" users="50807" activeusers="240" admins="33" jobs="0" /><br />
</query><br />
</api><br />
</pre><br />
<br />
=== Search ===<br />
Test "Google Search" in the sidebar:<br />
# Enter a search term.<br />
# Click '''Google Search'''.<br />
Make sure it returns reasonable results.<br />
<br />
=== Subpages in main namespace===<br />
<br />
Go to [[Wiki Acceptance Test/Subpages]] -- first line should just say "Wiki Acceptance Test", second line should just say "Subpages". If they both say "Wiki Acceptance Test/Subpages", then this isn't working right.<br />
<br />
== Extensions ==<br />
<br />
Check that [[Special:Version]] lists the same set of installed extensions.<br />
<br />
=== Cite ===<br />
<br />
The special page [[Special:Cite]] should exist.<br />
<br />
=== Flagged Revisions ===<br />
<br />
# Edit a page in the [[Knowledge Base]].<br />
# Check that the edit becomes a "draft" revision.<br />
# As a reviewer user, approve the edit, and check that it becomes the "stable" revision.<br />
<br />
Check the [[Admin Dashboard]] to ensure that pages show up in the various FR special pages.<br />
<br />
=== ImageMap ===<br />
<br />
Copied from [[User:Ugleh Ulrik]]:<br />
<br />
<div style="position: relative; top: -0px; right: -0px; margin-top: 0px;"><div><br />
{| cellspacing="0" cellpadding="0" border="0"<br />
|colspan="3"|<imagemap><br />
Image:Ugleh_chat_top.png<br />
poly 0 [[User:Ugleh Ulrik]]<br />
desc none<br />
</imagemap><br />
|-<br />
|<imagemap> <br />
Image:Ugleh_chat_left.png<br />
poly 0 0 [[User:Ugleh Ulrik]]<br />
desc none<br />
</imagemap><br />
|style="background:#3E3E3E;" valign="top" width="394" align="left"|{{:User:Ugleh_Ulrik/quote}}<br />
|<imagemap><br />
Image:Ugleh_chat_right.png<br />
poly 0 [[User:Ugleh Ulrik]]<br />
desc none<br />
</imagemap><br />
|-<br />
|colspan="3"|<imagemap><br />
Image:Ugleh_chat_bottom.png|<br />
poly 0 [[User:Ugleh Ulrik]]<br />
desc none<br />
</imagemap><br />
|-<br />
|}<br />
<br />
=== MathStatFunctions ===<br />
<br />
If these show the correct values, then this extension is working:<br />
<br />
*pi = {{ #const: pi }}<br />
*e = {{ #const: e }}<br />
*sqrt(2) = {{#const:sqrt(2)}}<br />
<br />
===SimpleTable===<br />
<br />
(nobody uses this extension)<br />
<br />
===Variables===<br />
<br />
Set the variable "myvar" to be "1234: {{#vardefine:myvar|1234}}<br />
<br />
If the following shows "1234", then this is working properly:<br />
<br />
The value is >>> {{#var:myvar}} <<<<br />
<br />
===VideoFlash ===<br />
<br />
===Widgets ===<br />
Check that the following list of widgets shows up: https://wiki.secondlife.com/w/index.php?title=Special%3AAllPages&from=&to=&namespace=274<br />
<br />
* [[Widget:Blip.tv]]<br />
* [[Widget:Chat Transcript]]<br />
* [[Widget:Feed]]<br />
* [[Widget:Flickr]]<br />
* [[Widget:Flickr/SlideShow]]<br />
* [[Widget:Flickr/Slideshow]]<br />
* [[Widget:FlickrShow]]<br />
* [[Widget:Google Gadget]]<br />
* [[Widget:Scribd]]<br />
* [[Widget:SlideShare]]<br />
* [[Widget:Twitter]]<br />
* [[Widget:Vimeo]]<br />
* [[Widget:Widgetbox]]<br />
* [[Widget:YouTube]]<br />
* [[Widget:YouTubeChannel]]<br />
<br />
Do we need to test each individual widget? Probably not. Maybe just test a couple.<br />
<br />
===Add metas ===<br />
<br />
Check that each page has <br />
<nowiki><meta name="mat" content="PG_NOT" /> </nowiki><br />
<br />
in its <head>.<br />
<br />
===Breadcrumbs2 ===<br />
Check that [[MediaWiki:Breadcrumbs]] exists and that breadcrumbs are displayed properly.<br />
<br />
===GeSHiHighlight===<br />
<br />
If the following is displayed as formatted text the extension is working.<br />
<br />
<lsl>default { state_entry() { llOwnerSay(""); } }</lsl><br />
<br />
Also see [[Syntax Highlighting Examples]].<br />
<br />
===Google Analytics Integration ===<br />
<br />
Check that each wiki page has the following at the bottom:<br />
<pre><br />
<script type="text/javascript"><br />
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");<br />
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));<br />
</script><br />
<script type="text/javascript"><br />
var pageTracker = _gat._getTracker("UA-190376-9");<br />
pageTracker._initData();<br />
pageTracker._trackPageview();<br />
</script><br />
</pre><br />
<br />
===HeaderFooter===<br />
<br />
Check that [https://wiki.secondlife.com/w/index.php?title=Special%3AAllPages&from=&to=&namespace=100 a page in the LLO namespace] shows the following header and footer:<br />
* [[MediaWiki:Hf-nsheader-Linden Lab Official]]<br />
* [[MediaWiki:Hf-nsfooter-Linden Lab Official]]<br />
<br />
=== Rename User ===<br />
<br />
See if [[Special:RenameUser]] exists.<br />
<br />
===ReplaceText===<br />
If this page exists, then the extension is installed. [[Special:ReplaceText]]. Try it out and confirm that it works properly.<br />
<br />
===ParserFunctions===<br />
<br />
If what follows is the current date and time formatted as Y m d H:i:s then this extension is working.<br />
<br />
{{#time: Y m d H:i:s}}<br />
<br />
===StringFunctions===<br />
<br />
If the number on the line below is 4, then this extension is working.<br />
<br />
{{#len:test}}<br />
<br />
[[Category:Wiki]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=HTTP_Texture&diff=994722HTTP Texture2010-08-03T23:52:52Z<p>Yoz Linden: /* HTTP API */ Added HTTP docs</p>
<hr />
<div>== Deployment ==<br />
HTTP textures have been deployed to Second Life in 2010, August.<br />
* August, 3: HTTP textures enabled on 30% of Second Life regions. [https://lists.secondlife.com/pipermail/server-beta/2010-August/000083.html Read Oskar Linden's message] to the [https://lists.secondlife.com/cgi-bin/mailman/listinfo/server-beta server-beta mailing list].<br />
<br />
== Overview ==<br />
Questions this document will answer:<br />
* What is the "http-texture" project?<br />
* Where are the files involved with this project? (modified compared to trunk)<br />
* How is this supposed to work?<br />
* What about all those threads and their use?<br />
* What about CURL use?<br />
<br />
== Objective of the http-texture Project ==<br />
The initial idea of the project is to allow the viewer to point to any image file of any format anywhere on the internet, pull it using the http protocol and use it as a regular texture anywhere textures are used.<br />
<br />
This involves a bunch of moving (and new) parts:<br />
* Using any file format as textures (instead of just j2c)<br />
* Pulling image files using HTTP (instead of UDP)<br />
* Getting resources from any host (instead of just the LL asset server)<br />
<br />
This is a rather ambitious and wide ranging change. As of today (March 24th, 2009), the main plumbing has been implemented with the following caveats:<br />
* Only jpeg images are supported as another file format<br />
* Such images must be loaded at once (no progressive rendering yet)<br />
* Except for jpegs specified with an "http://" URLs, all other images are still using the old fashion protocol<br />
* There are still quite a bit of crashes here and there... Don't use such a build for your regular SL activities (search for bugs logged against ''http-texture branch'' in PJIRA for more info)<br />
<br />
== HTTP API ==<br />
<br />
This is the method used to retrieve textures or texture-fragments from the grid. At time of writing, requests are made directly to the sim host; this may change in the future.<br />
<br />
===Texture retrieval===<br />
<br />
First, request the GetTexture capability; then GET request the capability URL. Requests must specify an <tt>Accept</tt> header of content type <tt>image/x-j2c</tt> . The request takes one parameter: <tt>texture_id</tt><br />
<br />
Example header:<br />
Accept: image/x-j2c<br />
<br />
Example request URL:<br />
http://simXXXX.agni.lindenlab.com/caps/918c0998-68ce-4ac5-aada-a22f9af53e87/?texture_id=89556747-24cb-43ed-920b-47cabd15465f<br />
<br />
A successful request will return a status of 200. If the texture is not present, the status will be 404.<br />
<br />
===Partial Range===<br />
<br />
To retrieve a fragment of the texture, specify a <tt>Range</tt> header as described in [http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC-2616]<br />
<br />
Example:<br />
Range: bytes=0-1023<br />
<br />
Retrieves the first 1024 bytes. This also returns a status of 206 instead of the usual 200.<br />
<br />
If the range is invalid then the service may ignore the header and return a status of 200 with the body of the full texture. If the service can not return the range then the service will return a status of 416.<br />
<br />
===Cap throttle===<br />
<br />
The GetTexture capability is rate limited to 100 qps. If this rate is exceeded then the service will return a status of 503 indicating that the URL is temporarily unavailable.<br />
<br />
===Baked Textures===<br />
<br />
To upload a baked texture: <br />
# Request the UploadBakedTexture capability.<br />
# Post an empty body request to the capability URL. The returned LLSD structure will have an <tt>uploader</tt> property containing a URL. <br />
# POST the texture, as the body, to the above URL. <br />
# The response should contain an LLSD with a 'new_asset' UUID. This UUID can be used to download the texture using the mechanism described above.<br />
<br />
== Files Involved ==<br />
Here are the files involved in the implementation of this feature:<br />
<br />
<pre><br />
/indra/llcommon/llqueuedthread.cpp // Modifications to the virtual method LLQueuedThread::threadedUpdate()<br />
/indra/llcommon/llqueuedthread.h // (does nothing in the root class, see derived class)<br />
<br />
/indra/llimage/llimage.cpp // Initializes the image worker thread LLImageWorker::initImageWorker()<br />
/indra/llimage/llimagedxt.cpp<br />
/indra/llimage/llimageworker.cpp // Main implementation of the threading for llimage objects (completely redone)<br />
/indra/llimage/llimageworker.h<br />
<br />
/indra/llmessage/llcurl.cpp // Threaded CUrl implementation<br />
/indra/llmessage/llcurl.h // (all of this has already been merged in trunk)<br />
/indra/llmessage/llhttpclient.cpp //<br />
/indra/llmessage/llhttpclient.h //<br />
/indra/llmessage/llhttpassetstorage.cpp //<br />
/indra/llmessage/llurlrequest.cpp //<br />
/indra/llmessage/llurlrequest.h //<br />
<br />
/indra/newview/llappviewer.cpp // Calls the init of the image decoding threads<br />
/indra/newview/llconsole.cpp // Changed to use mutexes and different line coloring<br />
/indra/newview/llconsole.h // <br />
/indra/newview/lltexturecache.cpp // Changes with locked mutex, cache but without offset writing and other limitations<br />
/indra/newview/lltexturecache.h // Adds open file book keeping mOpenFiles<br />
/indra/newview/lltexturefetch.cpp // Adds most of the changes related to http texture fetching and threading<br />
/indra/newview/lltexturefetch.h //<br />
/indra/newview/lltextureview.cpp // Lots of fonts and text changes. Similar to llconsole in scope.<br />
/indra/newview/llviewerimage.cpp // Creates the texture request from the passed URL<br />
/indra/newview/llviewerimage.h // Holds the URL for the texture in mURL<br />
/indra/newview/llviewerimagelist.cpp // Manages the list of textures<br />
/indra/newview/llviewerimagelist.h // Defines getImageFromUrl()<br />
</pre><br />
<br />
== Implementation ==<br />
=== Fetching ===<br />
==== Common Mechanism ====<br />
The fetching mechanism uses threads to get data while the main rendering loop goes on. All threads used here inherit from LLThread so a good understanding of this class (and of LLMutex, defined in the same llthread file) is important to understand the texture fetching mechanism.<br />
<br />
4 threads are used when requesting a tile/image/texture:<br />
* the LLTextureCache thread: used to retrieve all textures from the local cache. This one is actually not used for http fetched textures.<br />
* the LLTextureFetch thread: used to request textures (all types: j2c, jpg, etc...) from servers, support a variety of protocols (UDP, HTTP). That's the "front" thread of sort, the one that we hit first when posting a texture fetch request and that handles the delegation of tasks to other threads.<br />
* the LLImageDecodeThread thread: used to convert the raw data loaded from the image file (or gathered in chunks by the network thread) into pixel data. In http texture, this is used at the end to decode the whole jpeg image in one single chunk of work.<br />
* curl thread<br />
<br />
Synchronization between threads is done using LLMutex, a wrap around Apache mutex to lock/unlock critical sections. <br />
<br />
Threaded code is really hairy to track with work orders being created, checked, yielding, running, aborted, ending but not quite done, etc... It's hard to find ones way through the maze. So it's a good idea to keep in mind a little narrative, a story of what is supposed to happen. It's also a good handle to compare the code with the intent of the designer and, hopefully, fix problems.<br />
<br />
So, how is an http texture supposed to be fetched and find its way in the viewer's data structure?<br />
<br />
The general idea of texture fetching is the following:<br />
* code asks for an image using LLViewerImageList::getImageFromUrl(): ideally, this is all the high level code needs to know. Textures retrieved through http are simply passed to the LLViewerImageList which handles all the fetch, load, etc... of the texture and returns an LLViewerImage pointer to the caller. The whole thing is supposed to be handled completely transparently underneath.<br />
* this getImageFromUrl() call instantiates an LLViewerImage creation, passing the url to the constructor and adds it to the list of managed images<br />
* the list updateImagesFetchTextures() is regularly called on the main thread<br />
* this causes updateFetch() to be called on each image on the list<br />
* the updateFetch() eventually calls createRequest() on the LLTextureFetch thread using the image url<br />
* the LLTextureFetch thread adds a worker to its list to handle the request<br />
* depending on the url and image id, the LLTextureFetchWorker calls the LLTextureCached thread or not. Note that, as of today:<br />
** all files starting with "file://" are treated as local files and use the local cache worker to load. This is the case of all textures used in the UI and skins.<br />
** all textures known by their UUID use the remote cache worker which tests if there is a local cached texture (stored from a previous session) and, if not, makes a network request. This is the code path used for all j2c scene textures.<br />
** all other textures are "http://" jpeg images and will trigger an http request (see below)<br />
* if the cache has the image, it loads it and passes the resulting raw and decoded image to the fetch worker<br />
* if not, a network request is started, if the http flag is on, this will be an HTTP request. Note that, as of today:<br />
** all j2c textures are using the old UDP request scheme<br />
** only jpeg images are using the HTTP request scheme. This code path is exercised only in the map panel which fetches its image data from the Amazon S3 repository.<br />
* the image file is fetched<br />
* when done, the raw image is decoded using the LLImageDecodeThread thread<br />
* when decoded, the request is deleted and the LLViewerImage updated with the decoded image<br />
<br />
==== HTTP Fetch ====<br />
For the HTTP fetch mechanism, here's a zoomed in trace of what happens starting with the texture fetch request creation:<br />
* LLTextureFetch::createRequest() is called when an http url is detected<br />
** LLTextureFetchWorker::LLTextureFetchWorker(): a worker is added to the queue<br />
** LLTextureFetchWorker::startWork() starts by initializing a bunch of things on the worker<br />
*** LLTextureFetchWorker::setDesiredDiscard(): the code currently requests the entire image to be loaded by the worker before going back to the main thread<br />
** LLTextureFetchWorker::doWork() is called on the thread and allocate some time to each workers in sequence. The state of the work is updated depending of what's achieved:<br />
*** mState = INIT<br />
*** mState = LOAD_FROM_TEXTURE_CACHE : which actually does nothing currently for http fetched textures (no cached)<br />
*** mState = SEND_HTTP_REQ<br />
**** LLTextureFetch::addToHTTPQueue() and HTTPGetResponder::HTTPGetResponder() : creates a request on the http thread<br />
*** mState = WAIT_HTTP_REQ: waits for the http thread to come back <br />
*** during that time, the other threads might request the status of the worker using LLTextureFetch::getRequestFinished and LLTextureFetch::getFetchState<br />
**** HTTPGetResponder::completedRaw(): eventually, the http thread completes <br />
**** LLTextureFetch::removeFromHTTPQueue(): the fetch order is taken off the http queue<br />
**** LLTextureFetchWorker::callbackHttpGet(): the callback is executed and the http worker deleted<br />
*** mState = DECODE_IMAGE: is the new state of the fetch worker<br />
**** It instantiates a DecodeResponder() on the LLImageDecodeThread and the LLTextureFetchWorker will check for it to complete<br />
*** When completed, the file is written to cache (not implemented yet for http textures!)<br />
*** LLTextureFetchWorker::finishWork and LLTextureFetchWorker::endWork are called<br />
*** The request is then deleted, first it's removed from the queue, then the worker is deleted:<br />
**** LLTextureFetch::deleteRequest()<br />
**** LLTextureFetch::removeRequest()<br />
**** LLTextureFetch::removeFromNetworkQueue()<br />
**** LLTextureFetchWorker::deleteOK<br />
**** LLTextureFetchWorker::clearPackets is eventually called<br />
<br />
==== Notes ====<br />
* For the moment, the file (jpg) is downloaded at once (no partial download implemented yet)<br />
* http downloaded files are not cached yet. In most cases though, it's not very relevant since the LLViewerImageList maintains live instances of all loaded images so the cache would be useful only between sessions<br />
* The viewer uses only non nested mutex (APR_THREAD_MUTEX_UNNESTED).<br />
* Threads manage work units as lists (maps actually) of LLWorkerClass objects.<br />
<br />
=== Caching ===<br />
<br />
See also the public wiki [http://wiki.secondlife.com/wiki/Texture_Cache Texture Cache] documentation for a general overview. The writing here under covers things that are specific to the http-texture branch and questions recently asked on the sldev mailing list.<br />
<br />
The texture caching system implemented in lltexturecache.cpp is rather simple in its concept although it's not a simple store of raw files. The main elements of this system are:<br />
* the header cache<br />
* the "body" files<br />
* the LRU and time stamping mechanism<br />
<br />
LLTextureCache operations are implemented in a worker thread (inheriting from LLWorkerThread) so all the operations on the cache system are done by worker objects (inheriting from LLWorkerClass) in parallel to the rest of the viewer's operations.<br />
<br />
==== Header Cache ====<br />
<br />
The idea of the Header Cache is to allow fast retrieval of basic texture information (file size, image size, color model, other metadata...) without having to open and close each cached file. Instead, a single cache file containing all of these information for all cached textures is used.<br />
<br />
===== cache/texture.cache =====<br />
<br />
This file simply stores the first 600 byte chunk of raw data from the original stream into a single stream of texture "headers" (note that this is a conventional name and might store more than just metadata). This system is effective in SL because the viewer retrieves textures from the network in small packets of raw data and is able to decode a partially downloaded texture. So there's no penalty in storing the first retrieved packet in a special unique "header" file when they are first streamed down. The rest of the texture file is stored as a separate "body" file.<br />
<br />
Each record in that file is exactly TEXTURE_CACHE_ENTRY_SIZE (600 bytes) in size per texture.<br />
<br />
===== cache/texture.entries =====<br />
<br />
To retrieve a texture header knowing its UUID, the viewer uses a map giving for each UUID an index in the texture.cache file. This (UUID,index) table is saved in the cache/texture.entries file, alongside cache/texture.cache.<br />
<br />
In addition to the UUID (mID), each entry also contains:<br />
* mImageSize : the original raw file size<br />
* mBodySize : the size of the body file only (i.e. mBodySize = mImageSize - TEXTURE_CACHE_ENTRY_SIZE in the current case where the offset is null or zero if the file is smaller than TEXTURE_CACHE_ENTRY_SIZE)<br />
* mTime : a time stamp stating when last the texture was used.<br />
<br />
To optimize the position of frequently used textures and purge old ones, the cache is organized using an LRU (Least Recently Used) algorithm.<br />
<br />
==== Body Files ====<br />
<br />
Once the first packets are received and stored in the header cache file, the rest of the file (nicknamed "BODY") is stored in a texture specific file. Note that, because of this design: <br />
* the header part is not being duplicated in the body file so, in effect, those cached texture files are not usable as is<br />
* if the total file size is smaller than the size of a header cache entry (TEXTURE_CACHE_ENTRY_SIZE), the whole file is actually in the header cache and no body texture cached file is created<br />
<br />
The body file is stored in the cache/textures folder hierarchy using a name built from the UUID of the texture asset as:<br />
/[0-F]/UUID.texture<br />
<br />
[0-F] being the first digit (in hexadecimal) of the UUID. This split between folders is to avoid running into file count limits in a folder on some platforms.<br />
<br />
==== Reading and Writing the Cache ====<br />
<br />
Because of this (somewhat) arbitrary split between header cache and body cache, there is a little bit of copy bits acrobatic to do to recreate a seamless stream when reading the cache back. This code is implemented in LLTextureCacheRemoteWorker and can be traced between the (mState == HEADER) and (mState == BODY) sections in LLTextureCacheRemoteWorker::doRead().<br />
<br />
One puzzling data member of LLTextureCacheRemoteWorker to consider is mOffset. This covers data that are reserved for extra information in the formatted image buffer at creation *before* the readFromCache() is invoked (see LLTextureFetchWorker::doWork() in lltexturefetch.cpp). This quantity is fixed, file format specific and never changed. Those data are also *not* part of the raw stream of image data and should be taken out of the stream when reading the cache back.<br />
<br />
This is the idea behind the various offset and skipping of data made between the (mState == HEADER) and (mState == BODY) sections in doRead().<br />
<br />
In truth, we haven't found any instance of that code being exercised with anything else but (mOffset == 0). So it's possible that this code is somewhat buggy (there's no unit test for it). <br />
<br />
In the http-texture branch, the cache now supports jpeg cached files in addition to j2c files. However, it does not support offset writing so, again, there's no chance for the code to be ever exercised with anything else but (mOffset == 0). <br />
<br />
For this reason, we believe we should consider suppressing support for this mOffset reading/writing as it makes the code more complex and is likely to crash anyway since writing cache in http-texture does not support it.<br />
<br />
=== Threads ===<br />
[[Image:TextureThreads20090520.png|200px|thumb|right|Texture Threads]]<br />
[[Image:TextureWorkers20090520.png|200px|thumb|right|Texture Workers]]<br />
The relationship between the threads and workers described in this section is shown in the "Texture Threads" and "Texture Workers" simplified class diagrams (found on the right hand side). You can view larger versions of the diagrams by clicking on them, or you can open the larger versions in another browser window. (Some of the variable names from the source code have been renamed in the diagrams to simplify the explanation.)<br />
<br />
All threads in the viewer derives from LLThread which is a wrapper around the APR thread mechanism. This package implements threads (LLThread), mutexes (LLMutex) and mutex conditions (LLCondition).<br />
<br />
All threads involved with texture handling are of the LLQueuedThread class (derived from LLThread), meaning that they essentially run all the time and handle work bundle.<br />
<br />
Most of those (actually all of them except LLImageDecodeThread) are "worker threads" of the LLWorkerThread class (derived from LLQueuedThread) and handle specialized work orders (derived from LLWorkerClass) in a worker queue. This allows lengthy operations (like fetching textures...) to be delegated to the thread and, asynchronously, checked for completion while the application continues to render.<br />
<br />
The list of "workers" are organized as maps, usually indexed by images UUIDs.<br />
<br />
While debugging or tracing threads, a good advice is to "follow the mutex". You need to identify which section of memory each mutex or condition is protecting and make sure lock/unlock are done at the right moment when writing or reading those sections of memory.<br />
<br />
==== LLTextureFetch ====<br />
This is the most complete thread of the list. The complexity comes from the fact that the work order on that thread do instantiate other work orders on other threads to get the work done. An additional complexity is that there are several queues and, therefore, several mutexes handled on that thread making the deciphering of the state of the work orders on the thread a tad difficult.<br />
<br />
Basically though, the thread follows for each work order the narrative described above. Here's a complete trace of how the LLTextureFetch thread handles an http texture retrieval from the request creation to the image decoding passed to the image list:<br />
<pre><br />
LLTextureFetch::createRequest<br />
LLTextureFetchWorker::LLTextureFetchWorker<br />
LLTextureFetchWorker::calcWorkPriority, priority = 136633646<br />
LLTextureFetchWorker::startWork<br />
LLTextureFetchWorker::setDesiredDiscard, discard = 5, size = 33554432<br />
LLTextureFetch::getFetchState: Fetch state = 1<br />
LLTextureFetchWorker::doWork: Handle mState INIT<br />
LLTextureFetchWorker::clearPackets<br />
LLTextureFetchWorker::doWork: Handle mState LOAD_FROM_TEXTURE_CACHE<br />
LLTextureFetchWorker::doWork: Handle mState SEND_HTTP_REQ<br />
LLTextureFetch::getHTTPQueueSize<br />
LLTextureFetch::getTextureBandwidth<br />
LLTextureFetch::removeFromNetworkQueue<br />
LLTextureFetch::addToHTTPQueue<br />
HTTPGetResponder::HTTPGetResponder<br />
LLTextureFetchWorker::doWork: Handle mState WAIT_HTTP_REQ<br />
LLTextureFetch::getFetchState: Fetch state = 7<br />
LLTextureFetchWorker::setImagePriority, priority = 1.018e+006<br />
LLTextureFetch::getRequestFinished: Request finished = 0<br />
HTTPGetResponder::completedRaw<br />
LLTextureFetch::removeFromHTTPQueue<br />
LLTextureFetchWorker::callbackHttpGet<br />
HTTPGetResponder::~HTTPGetResponder<br />
LLTextureFetch::getFetchState: Fetch state = 8<br />
LLTextureFetchWorker::doWork: Handle mState DECODE_IMAGE<br />
Push a DecodeResponder() on the LLImageDecodeThread<br />
LLTextureFetchWorker::doWork: Handle mState DECODE_IMAGE_UPDATE<br />
LLTextureFetchWorker::doWork: Handle mState DONE<br />
LLTextureFetchWorker::finishWork, param = 0, completed = 1<br />
LLTextureFetchWorker::endWork, param = 0, aborted = 0<br />
LLTextureFetch::deleteRequest()<br />
LLTextureFetch::removeRequest()<br />
LLTextureFetch::removeFromNetworkQueue()<br />
LLTextureFetchWorker::deleteOK<br />
LLTextureFetchWorker::~LLTextureFetchWorker<br />
LLTextureFetchWorker::clearPackets<br />
</pre><br />
<br />
==== LLTextureCache ====<br />
The LLTextureCache thread takes care of saving and loading image files on the local file system, aka "cached" files as those files are supposed to be downloaded from SL servers or other web resources (e.g. Amazon S3). Note that in fact, some of those "cached" files are downloaded at install time with the application bundle so they are not truly "cached" but, heck... This thread allows the rest of the viewer application to request image files using file names, URLs or UUIDs transparently and rely on the LLTextureCache thread to load the cached version if it has already been downloaded.<br />
<br />
Note: in the current implementation, images that are fetched using an HTTP URL are never cached on the local system. For this to work, we would need a convention to convert URLs to local file name (using a parsing convention) and there's no such system in place yet. Besides, the system would have to handle obsolete files, modified files, etc... There is however a system to convert UUIDs into local file name through LLTextureCache::getLocalFileName(). For the moment though, we do not create a UUID for each HTTP fetched texture so this caching system is not usable in that case.<br />
<br />
The LLTextureCache thread is a worker thread (like almost all other threads in the viewer) meaning that it is started at launch and keeps running for the whole life time of the application. It handles "work orders" through a pooled list of objects types LLTextureCacheWorkers. There are actually 2 flavors of this worker:<br />
* LLTextureCacheRemoteWorker<br />
* LLTextureCacheLocalFileWorker: used to load local files (which file names start in "file://"), all UI textures are loaded using that worker.<br />
<br />
One or the other flavor is created when the cache is queried through a readFromCache() call on the LLTextureCache thread. This call is done by an LLTextureFetchWorker object in the LLTextureFetch thread. For the moment, such calls are done only for local files (file name starting with "file://") and for files known only by their UUID. Files known by an "http://" URL are not hitting that call at all.<br />
<br />
To load a local file (UI texture for instance), the sequence of calls is as follow:<br />
<pre><br />
LLTextureFetchWorker::CacheReadResponder::CacheReadResponder:()<br />
LLTextureCache::readFromCache()<br />
LLTextureCacheLocalFileWorker::LLTextureCacheLocalFileWorker()<br />
LLTextureCacheWorker::read()<br />
LLTextureCacheWorker::startWork()<br />
LLTextureCacheLocalFileWorker::doRead() // loads the entire file using LLAPRFile::readEx()<br />
LLTextureCacheWorker::finishWork()<br />
LLTextureCache::ReadResponder::setData: setData: imagesize = 1068, imagelocal = 1<br />
LLTextureCache::addCompleted()<br />
LLTextureFetchWorker::CacheReadResponder::completed: CacheReadResponder::completed() // will lock the fetch queue and transfer the image<br />
LLTextureFetch::lockQueue()<br />
LLTextureFetch::unlockQueue()<br />
LTextureCacheWorker::endWork()<br />
LLTextureCacheWorker::~LLTextureCacheWorker()<br />
LLTextureFetchWorker::DecodeResponder::DecodeResponder:()<br />
LLTextureFetchWorker::DecodeResponder::completed:()<br />
LLTextureFetch::lockQueue()<br />
LLTextureFetch::unlockQueue()<br />
LLTextureCache::readComplete()<br />
</pre><br />
<br />
==== LLImageDecodeThread ====<br />
This thread is used in http texture to decompress the image texture once the raw image has been downloaded. If you're trying to get familiar with threads in the viewer, it's interesting to read that code in detail as it is short and gives a good overview of how the various objects involved in thread signaling work in the viewer. You'll see thread, requests, mutex and responders in action in 150 or so lines of code.<br />
<br />
There's only one mutex (mCreationMutex) and one list (mCreationList) in the class. All access (read or write) to the mCreationList are guarded by mutex locking/unlocking. The list is a temporary buffer of data used to instantiate requests on the queued thread. Requests are then processed in order and the responder called when done.<br />
<br />
Computations performed on the requests themselves are not guarded by mutexes as no one access the request data but the decoding thread. Once a work order is done, its result is made accessible to the calling thread by calling a responder.<br />
<br />
Here's a detailed narrative of how things work:<br />
* LLTextureFetchWorker::doWork(): when the worker reaches the (mState == DECODE_IMAGE) state, a call to decodeImage() on the LLImageDecodeThread is made.<br />
* As part of the call, a pointer to a newly created DecodeResponder object is passed. This responder will be called once the decoding is complete.<br />
* That call to decodeImage() pushes a new record on the mCreationList in the LLImageDecodeThread. The mCreationMutex is locked/unlocked for this call.<br />
* At that point, no decoding code proper is really done or even started, there's just a record for a decoding request on the list. The request itself is not created either.<br />
* The decodeImage() call returns to the LLTextureFetch thread and the state of the worker is changed to (mState == DECODE_IMAGE_UPDATE)<br />
* For all subsequent LLTextureFetchWorker::doWork() calls, the worker will check the mDecoded flag which will be switched to true only when the responder's completed() method will be called by the LLImageDecodeThread thread.<br />
* During that time, the LLImageDecodeThread continues processing:<br />
** The way LLQueuedThread are implemented, they run an infinite loop and wait on condition. The main thread calls update() over and over updating the condition and making sure the processing thread gets some action (unless the thread is paused or idle but, let's not make things too complicated in this story, let's just assume the thread is running).<br />
** LLImageDecodeThread::update() is called, locks the list again and iterates through it.<br />
** For each record in that list, a new ImageRequest object is instantiated and is added to the queue using addRequest().<br />
** The generic LLQueuedThread code then calls LLImageDecodeThread::processRequest() and LLImageDecodeThread::finishRequest().<br />
** LLImageDecodeThread::processRequest() performs the actually decompression and decoding of the image data.<br />
** LLImageDecodeThread::finishRequest() does some basic clean up and calls the responder's completed() method that will flip the mDecoded flag in the fetch worker.<br />
<br />
For another view of that thread, you can take a look at its unit test in indra/llimage/tests/llimageworker_test.cpp. This unit test exercises the thread class in both a threaded and non threaded way.<br />
<br />
==== LLLFSThread ====<br />
The LLLFSThread (LFS stands for "Local File System") is used to queue file access on the client machine. It can be used to both load and save data on the local file system.<br />
<br />
In the case of texture loading, it's used to read images from the cache if the USE_LFS_READ compilation option is set (which is not set by default).<br />
<br />
By default (USE_LFS_READ not defined), the image files are loaded using LLAPRFile which is a wrapper class around the Apache file access facility.<br />
<br />
== Links ==<br />
Intro to threads and mutexes:<br />
* [http://www.ibm.com/developerworks/library/l-posix1.html Threads]<br />
* [http://www.ibm.com/developerworks/library/l-posix2/ Mutex]<br />
* [http://www.ibm.com/developerworks/library/l-posix3/ Condition Variables]<br />
<br />
== Jira Issues ==<br />
<br />
New Jira Issues<br />
{|<br />
|}<br />
<br />
Pre-existing Jira Issues<br />
{|<br />
{{Issue|VWR-8473|type=fs|Add a menu choice to force re-download of ruthed avs, missing textures or shapes}}<br />
{{Issue|SVC-3446|type=fs|Ability to load textures on prim faces via http/https, as well as, for sculpt maps}}<br />
{{Issue|VWR-217|type=fs|New Feature -> LSL -> Dynamic Web Textures}}<br />
|}<br />
<br />
== Development of this feature ==<br />
<br />
As of this writing (2009-03-30), development on this branch is being done in the [http://svn.secondlife.com/trac/linden/browser/projects/2009/http-texture http-texture branch on svn.secondlife.com]. See [[HTTP Texture Development]] for more information about contributing<br />
<br />
[[Category:Open Source Portal]]<br />
[[Category:Linden Lab Projects]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=HTTP_Texture&diff=994712HTTP Texture2010-08-03T23:50:39Z<p>Yoz Linden: </p>
<hr />
<div>== Deployment ==<br />
HTTP textures have been deployed to Second Life in 2010, August.<br />
* August, 3: HTTP textures enabled on 30% of Second Life regions. [https://lists.secondlife.com/pipermail/server-beta/2010-August/000083.html Read Oskar Linden's message] to the [https://lists.secondlife.com/cgi-bin/mailman/listinfo/server-beta server-beta mailing list].<br />
<br />
== Overview ==<br />
Questions this document will answer:<br />
* What is the "http-texture" project?<br />
* Where are the files involved with this project? (modified compared to trunk)<br />
* How is this supposed to work?<br />
* What about all those threads and their use?<br />
* What about CURL use?<br />
<br />
== Objective of the http-texture Project ==<br />
The initial idea of the project is to allow the viewer to point to any image file of any format anywhere on the internet, pull it using the http protocol and use it as a regular texture anywhere textures are used.<br />
<br />
This involves a bunch of moving (and new) parts:<br />
* Using any file format as textures (instead of just j2c)<br />
* Pulling image files using HTTP (instead of UDP)<br />
* Getting resources from any host (instead of just the LL asset server)<br />
<br />
This is a rather ambitious and wide ranging change. As of today (March 24th, 2009), the main plumbing has been implemented with the following caveats:<br />
* Only jpeg images are supported as another file format<br />
* Such images must be loaded at once (no progressive rendering yet)<br />
* Except for jpegs specified with an "http://" URLs, all other images are still using the old fashion protocol<br />
* There are still quite a bit of crashes here and there... Don't use such a build for your regular SL activities (search for bugs logged against ''http-texture branch'' in PJIRA for more info)<br />
<br />
== HTTP API ==<br />
<br />
This is the method used to retrieve textures or texture-fragments from the grid. At time of writing, requests are made <br />
<br />
===Texture retrieval===<br />
<br />
First, request the GetTexture capability; then GET request the capability URL. Requests must specify an <tt>Accept</tt> header of content type <tt>image/x-j2c</tt> . The request takes one parameter: <tt>texture_id</tt><br />
<br />
Example header:<br />
Accept: image/x-j2c<br />
<br />
Example request URL:<br />
http://simXXXX.agni.lindenlab.com/caps/918c0998-68ce-4ac5-aada-a22f9af53e87/?texture_id=89556747-24cb-43ed-920b-47cabd15465f<br />
<br />
A successful request will return a status of 200. If the texture is not present, the status will be 404.<br />
<br />
===Partial Range===<br />
<br />
To retrieve a portion of the texture, specify a <tt>Range</tt> header as described in [http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC-2616]<br />
<br />
Example:<br />
Range: bytes=0-1023<br />
<br />
Retrieves the first 1024 bytes. This also returns a status of 206 instead of the usual 200.<br />
<br />
If the range is invalid then the service may ignore the header and return a status of 200 with the body of the full texture. If the service can not return the range then the service will return a status of 416.<br />
<br />
===Cap throttle===<br />
<br />
The GetTexture capability is rate limited to 100 qps. If this rate is exceeded then the service will return a status of 503 indicating that the URL is temporarily unavailable.<br />
<br />
===Baked Textures===<br />
<br />
To upload a baked texture: <br />
# Request the UploadBakedTexture capability.<br />
# Post an empty body request to the capability URL. The returned LLSD structure will have an <tt>uploader</tt> property containing a URL. <br />
# POST the texture, as the body, to the above URL. <br />
# The response should contain an LLSD with a 'new_asset' UUID. This UUID can be used to download the texture using the mechanism described above.<br />
<br />
== Files Involved ==<br />
Here are the files involved in the implementation of this feature:<br />
<br />
<pre><br />
/indra/llcommon/llqueuedthread.cpp // Modifications to the virtual method LLQueuedThread::threadedUpdate()<br />
/indra/llcommon/llqueuedthread.h // (does nothing in the root class, see derived class)<br />
<br />
/indra/llimage/llimage.cpp // Initializes the image worker thread LLImageWorker::initImageWorker()<br />
/indra/llimage/llimagedxt.cpp<br />
/indra/llimage/llimageworker.cpp // Main implementation of the threading for llimage objects (completely redone)<br />
/indra/llimage/llimageworker.h<br />
<br />
/indra/llmessage/llcurl.cpp // Threaded CUrl implementation<br />
/indra/llmessage/llcurl.h // (all of this has already been merged in trunk)<br />
/indra/llmessage/llhttpclient.cpp //<br />
/indra/llmessage/llhttpclient.h //<br />
/indra/llmessage/llhttpassetstorage.cpp //<br />
/indra/llmessage/llurlrequest.cpp //<br />
/indra/llmessage/llurlrequest.h //<br />
<br />
/indra/newview/llappviewer.cpp // Calls the init of the image decoding threads<br />
/indra/newview/llconsole.cpp // Changed to use mutexes and different line coloring<br />
/indra/newview/llconsole.h // <br />
/indra/newview/lltexturecache.cpp // Changes with locked mutex, cache but without offset writing and other limitations<br />
/indra/newview/lltexturecache.h // Adds open file book keeping mOpenFiles<br />
/indra/newview/lltexturefetch.cpp // Adds most of the changes related to http texture fetching and threading<br />
/indra/newview/lltexturefetch.h //<br />
/indra/newview/lltextureview.cpp // Lots of fonts and text changes. Similar to llconsole in scope.<br />
/indra/newview/llviewerimage.cpp // Creates the texture request from the passed URL<br />
/indra/newview/llviewerimage.h // Holds the URL for the texture in mURL<br />
/indra/newview/llviewerimagelist.cpp // Manages the list of textures<br />
/indra/newview/llviewerimagelist.h // Defines getImageFromUrl()<br />
</pre><br />
<br />
== Implementation ==<br />
=== Fetching ===<br />
==== Common Mechanism ====<br />
The fetching mechanism uses threads to get data while the main rendering loop goes on. All threads used here inherit from LLThread so a good understanding of this class (and of LLMutex, defined in the same llthread file) is important to understand the texture fetching mechanism.<br />
<br />
4 threads are used when requesting a tile/image/texture:<br />
* the LLTextureCache thread: used to retrieve all textures from the local cache. This one is actually not used for http fetched textures.<br />
* the LLTextureFetch thread: used to request textures (all types: j2c, jpg, etc...) from servers, support a variety of protocols (UDP, HTTP). That's the "front" thread of sort, the one that we hit first when posting a texture fetch request and that handles the delegation of tasks to other threads.<br />
* the LLImageDecodeThread thread: used to convert the raw data loaded from the image file (or gathered in chunks by the network thread) into pixel data. In http texture, this is used at the end to decode the whole jpeg image in one single chunk of work.<br />
* curl thread<br />
<br />
Synchronization between threads is done using LLMutex, a wrap around Apache mutex to lock/unlock critical sections. <br />
<br />
Threaded code is really hairy to track with work orders being created, checked, yielding, running, aborted, ending but not quite done, etc... It's hard to find ones way through the maze. So it's a good idea to keep in mind a little narrative, a story of what is supposed to happen. It's also a good handle to compare the code with the intent of the designer and, hopefully, fix problems.<br />
<br />
So, how is an http texture supposed to be fetched and find its way in the viewer's data structure?<br />
<br />
The general idea of texture fetching is the following:<br />
* code asks for an image using LLViewerImageList::getImageFromUrl(): ideally, this is all the high level code needs to know. Textures retrieved through http are simply passed to the LLViewerImageList which handles all the fetch, load, etc... of the texture and returns an LLViewerImage pointer to the caller. The whole thing is supposed to be handled completely transparently underneath.<br />
* this getImageFromUrl() call instantiates an LLViewerImage creation, passing the url to the constructor and adds it to the list of managed images<br />
* the list updateImagesFetchTextures() is regularly called on the main thread<br />
* this causes updateFetch() to be called on each image on the list<br />
* the updateFetch() eventually calls createRequest() on the LLTextureFetch thread using the image url<br />
* the LLTextureFetch thread adds a worker to its list to handle the request<br />
* depending on the url and image id, the LLTextureFetchWorker calls the LLTextureCached thread or not. Note that, as of today:<br />
** all files starting with "file://" are treated as local files and use the local cache worker to load. This is the case of all textures used in the UI and skins.<br />
** all textures known by their UUID use the remote cache worker which tests if there is a local cached texture (stored from a previous session) and, if not, makes a network request. This is the code path used for all j2c scene textures.<br />
** all other textures are "http://" jpeg images and will trigger an http request (see below)<br />
* if the cache has the image, it loads it and passes the resulting raw and decoded image to the fetch worker<br />
* if not, a network request is started, if the http flag is on, this will be an HTTP request. Note that, as of today:<br />
** all j2c textures are using the old UDP request scheme<br />
** only jpeg images are using the HTTP request scheme. This code path is exercised only in the map panel which fetches its image data from the Amazon S3 repository.<br />
* the image file is fetched<br />
* when done, the raw image is decoded using the LLImageDecodeThread thread<br />
* when decoded, the request is deleted and the LLViewerImage updated with the decoded image<br />
<br />
==== HTTP Fetch ====<br />
For the HTTP fetch mechanism, here's a zoomed in trace of what happens starting with the texture fetch request creation:<br />
* LLTextureFetch::createRequest() is called when an http url is detected<br />
** LLTextureFetchWorker::LLTextureFetchWorker(): a worker is added to the queue<br />
** LLTextureFetchWorker::startWork() starts by initializing a bunch of things on the worker<br />
*** LLTextureFetchWorker::setDesiredDiscard(): the code currently requests the entire image to be loaded by the worker before going back to the main thread<br />
** LLTextureFetchWorker::doWork() is called on the thread and allocate some time to each workers in sequence. The state of the work is updated depending of what's achieved:<br />
*** mState = INIT<br />
*** mState = LOAD_FROM_TEXTURE_CACHE : which actually does nothing currently for http fetched textures (no cached)<br />
*** mState = SEND_HTTP_REQ<br />
**** LLTextureFetch::addToHTTPQueue() and HTTPGetResponder::HTTPGetResponder() : creates a request on the http thread<br />
*** mState = WAIT_HTTP_REQ: waits for the http thread to come back <br />
*** during that time, the other threads might request the status of the worker using LLTextureFetch::getRequestFinished and LLTextureFetch::getFetchState<br />
**** HTTPGetResponder::completedRaw(): eventually, the http thread completes <br />
**** LLTextureFetch::removeFromHTTPQueue(): the fetch order is taken off the http queue<br />
**** LLTextureFetchWorker::callbackHttpGet(): the callback is executed and the http worker deleted<br />
*** mState = DECODE_IMAGE: is the new state of the fetch worker<br />
**** It instantiates a DecodeResponder() on the LLImageDecodeThread and the LLTextureFetchWorker will check for it to complete<br />
*** When completed, the file is written to cache (not implemented yet for http textures!)<br />
*** LLTextureFetchWorker::finishWork and LLTextureFetchWorker::endWork are called<br />
*** The request is then deleted, first it's removed from the queue, then the worker is deleted:<br />
**** LLTextureFetch::deleteRequest()<br />
**** LLTextureFetch::removeRequest()<br />
**** LLTextureFetch::removeFromNetworkQueue()<br />
**** LLTextureFetchWorker::deleteOK<br />
**** LLTextureFetchWorker::clearPackets is eventually called<br />
<br />
==== Notes ====<br />
* For the moment, the file (jpg) is downloaded at once (no partial download implemented yet)<br />
* http downloaded files are not cached yet. In most cases though, it's not very relevant since the LLViewerImageList maintains live instances of all loaded images so the cache would be useful only between sessions<br />
* The viewer uses only non nested mutex (APR_THREAD_MUTEX_UNNESTED).<br />
* Threads manage work units as lists (maps actually) of LLWorkerClass objects.<br />
<br />
=== Caching ===<br />
<br />
See also the public wiki [http://wiki.secondlife.com/wiki/Texture_Cache Texture Cache] documentation for a general overview. The writing here under covers things that are specific to the http-texture branch and questions recently asked on the sldev mailing list.<br />
<br />
The texture caching system implemented in lltexturecache.cpp is rather simple in its concept although it's not a simple store of raw files. The main elements of this system are:<br />
* the header cache<br />
* the "body" files<br />
* the LRU and time stamping mechanism<br />
<br />
LLTextureCache operations are implemented in a worker thread (inheriting from LLWorkerThread) so all the operations on the cache system are done by worker objects (inheriting from LLWorkerClass) in parallel to the rest of the viewer's operations.<br />
<br />
==== Header Cache ====<br />
<br />
The idea of the Header Cache is to allow fast retrieval of basic texture information (file size, image size, color model, other metadata...) without having to open and close each cached file. Instead, a single cache file containing all of these information for all cached textures is used.<br />
<br />
===== cache/texture.cache =====<br />
<br />
This file simply stores the first 600 byte chunk of raw data from the original stream into a single stream of texture "headers" (note that this is a conventional name and might store more than just metadata). This system is effective in SL because the viewer retrieves textures from the network in small packets of raw data and is able to decode a partially downloaded texture. So there's no penalty in storing the first retrieved packet in a special unique "header" file when they are first streamed down. The rest of the texture file is stored as a separate "body" file.<br />
<br />
Each record in that file is exactly TEXTURE_CACHE_ENTRY_SIZE (600 bytes) in size per texture.<br />
<br />
===== cache/texture.entries =====<br />
<br />
To retrieve a texture header knowing its UUID, the viewer uses a map giving for each UUID an index in the texture.cache file. This (UUID,index) table is saved in the cache/texture.entries file, alongside cache/texture.cache.<br />
<br />
In addition to the UUID (mID), each entry also contains:<br />
* mImageSize : the original raw file size<br />
* mBodySize : the size of the body file only (i.e. mBodySize = mImageSize - TEXTURE_CACHE_ENTRY_SIZE in the current case where the offset is null or zero if the file is smaller than TEXTURE_CACHE_ENTRY_SIZE)<br />
* mTime : a time stamp stating when last the texture was used.<br />
<br />
To optimize the position of frequently used textures and purge old ones, the cache is organized using an LRU (Least Recently Used) algorithm.<br />
<br />
==== Body Files ====<br />
<br />
Once the first packets are received and stored in the header cache file, the rest of the file (nicknamed "BODY") is stored in a texture specific file. Note that, because of this design: <br />
* the header part is not being duplicated in the body file so, in effect, those cached texture files are not usable as is<br />
* if the total file size is smaller than the size of a header cache entry (TEXTURE_CACHE_ENTRY_SIZE), the whole file is actually in the header cache and no body texture cached file is created<br />
<br />
The body file is stored in the cache/textures folder hierarchy using a name built from the UUID of the texture asset as:<br />
/[0-F]/UUID.texture<br />
<br />
[0-F] being the first digit (in hexadecimal) of the UUID. This split between folders is to avoid running into file count limits in a folder on some platforms.<br />
<br />
==== Reading and Writing the Cache ====<br />
<br />
Because of this (somewhat) arbitrary split between header cache and body cache, there is a little bit of copy bits acrobatic to do to recreate a seamless stream when reading the cache back. This code is implemented in LLTextureCacheRemoteWorker and can be traced between the (mState == HEADER) and (mState == BODY) sections in LLTextureCacheRemoteWorker::doRead().<br />
<br />
One puzzling data member of LLTextureCacheRemoteWorker to consider is mOffset. This covers data that are reserved for extra information in the formatted image buffer at creation *before* the readFromCache() is invoked (see LLTextureFetchWorker::doWork() in lltexturefetch.cpp). This quantity is fixed, file format specific and never changed. Those data are also *not* part of the raw stream of image data and should be taken out of the stream when reading the cache back.<br />
<br />
This is the idea behind the various offset and skipping of data made between the (mState == HEADER) and (mState == BODY) sections in doRead().<br />
<br />
In truth, we haven't found any instance of that code being exercised with anything else but (mOffset == 0). So it's possible that this code is somewhat buggy (there's no unit test for it). <br />
<br />
In the http-texture branch, the cache now supports jpeg cached files in addition to j2c files. However, it does not support offset writing so, again, there's no chance for the code to be ever exercised with anything else but (mOffset == 0). <br />
<br />
For this reason, we believe we should consider suppressing support for this mOffset reading/writing as it makes the code more complex and is likely to crash anyway since writing cache in http-texture does not support it.<br />
<br />
=== Threads ===<br />
[[Image:TextureThreads20090520.png|200px|thumb|right|Texture Threads]]<br />
[[Image:TextureWorkers20090520.png|200px|thumb|right|Texture Workers]]<br />
The relationship between the threads and workers described in this section is shown in the "Texture Threads" and "Texture Workers" simplified class diagrams (found on the right hand side). You can view larger versions of the diagrams by clicking on them, or you can open the larger versions in another browser window. (Some of the variable names from the source code have been renamed in the diagrams to simplify the explanation.)<br />
<br />
All threads in the viewer derives from LLThread which is a wrapper around the APR thread mechanism. This package implements threads (LLThread), mutexes (LLMutex) and mutex conditions (LLCondition).<br />
<br />
All threads involved with texture handling are of the LLQueuedThread class (derived from LLThread), meaning that they essentially run all the time and handle work bundle.<br />
<br />
Most of those (actually all of them except LLImageDecodeThread) are "worker threads" of the LLWorkerThread class (derived from LLQueuedThread) and handle specialized work orders (derived from LLWorkerClass) in a worker queue. This allows lengthy operations (like fetching textures...) to be delegated to the thread and, asynchronously, checked for completion while the application continues to render.<br />
<br />
The list of "workers" are organized as maps, usually indexed by images UUIDs.<br />
<br />
While debugging or tracing threads, a good advice is to "follow the mutex". You need to identify which section of memory each mutex or condition is protecting and make sure lock/unlock are done at the right moment when writing or reading those sections of memory.<br />
<br />
==== LLTextureFetch ====<br />
This is the most complete thread of the list. The complexity comes from the fact that the work order on that thread do instantiate other work orders on other threads to get the work done. An additional complexity is that there are several queues and, therefore, several mutexes handled on that thread making the deciphering of the state of the work orders on the thread a tad difficult.<br />
<br />
Basically though, the thread follows for each work order the narrative described above. Here's a complete trace of how the LLTextureFetch thread handles an http texture retrieval from the request creation to the image decoding passed to the image list:<br />
<pre><br />
LLTextureFetch::createRequest<br />
LLTextureFetchWorker::LLTextureFetchWorker<br />
LLTextureFetchWorker::calcWorkPriority, priority = 136633646<br />
LLTextureFetchWorker::startWork<br />
LLTextureFetchWorker::setDesiredDiscard, discard = 5, size = 33554432<br />
LLTextureFetch::getFetchState: Fetch state = 1<br />
LLTextureFetchWorker::doWork: Handle mState INIT<br />
LLTextureFetchWorker::clearPackets<br />
LLTextureFetchWorker::doWork: Handle mState LOAD_FROM_TEXTURE_CACHE<br />
LLTextureFetchWorker::doWork: Handle mState SEND_HTTP_REQ<br />
LLTextureFetch::getHTTPQueueSize<br />
LLTextureFetch::getTextureBandwidth<br />
LLTextureFetch::removeFromNetworkQueue<br />
LLTextureFetch::addToHTTPQueue<br />
HTTPGetResponder::HTTPGetResponder<br />
LLTextureFetchWorker::doWork: Handle mState WAIT_HTTP_REQ<br />
LLTextureFetch::getFetchState: Fetch state = 7<br />
LLTextureFetchWorker::setImagePriority, priority = 1.018e+006<br />
LLTextureFetch::getRequestFinished: Request finished = 0<br />
HTTPGetResponder::completedRaw<br />
LLTextureFetch::removeFromHTTPQueue<br />
LLTextureFetchWorker::callbackHttpGet<br />
HTTPGetResponder::~HTTPGetResponder<br />
LLTextureFetch::getFetchState: Fetch state = 8<br />
LLTextureFetchWorker::doWork: Handle mState DECODE_IMAGE<br />
Push a DecodeResponder() on the LLImageDecodeThread<br />
LLTextureFetchWorker::doWork: Handle mState DECODE_IMAGE_UPDATE<br />
LLTextureFetchWorker::doWork: Handle mState DONE<br />
LLTextureFetchWorker::finishWork, param = 0, completed = 1<br />
LLTextureFetchWorker::endWork, param = 0, aborted = 0<br />
LLTextureFetch::deleteRequest()<br />
LLTextureFetch::removeRequest()<br />
LLTextureFetch::removeFromNetworkQueue()<br />
LLTextureFetchWorker::deleteOK<br />
LLTextureFetchWorker::~LLTextureFetchWorker<br />
LLTextureFetchWorker::clearPackets<br />
</pre><br />
<br />
==== LLTextureCache ====<br />
The LLTextureCache thread takes care of saving and loading image files on the local file system, aka "cached" files as those files are supposed to be downloaded from SL servers or other web resources (e.g. Amazon S3). Note that in fact, some of those "cached" files are downloaded at install time with the application bundle so they are not truly "cached" but, heck... This thread allows the rest of the viewer application to request image files using file names, URLs or UUIDs transparently and rely on the LLTextureCache thread to load the cached version if it has already been downloaded.<br />
<br />
Note: in the current implementation, images that are fetched using an HTTP URL are never cached on the local system. For this to work, we would need a convention to convert URLs to local file name (using a parsing convention) and there's no such system in place yet. Besides, the system would have to handle obsolete files, modified files, etc... There is however a system to convert UUIDs into local file name through LLTextureCache::getLocalFileName(). For the moment though, we do not create a UUID for each HTTP fetched texture so this caching system is not usable in that case.<br />
<br />
The LLTextureCache thread is a worker thread (like almost all other threads in the viewer) meaning that it is started at launch and keeps running for the whole life time of the application. It handles "work orders" through a pooled list of objects types LLTextureCacheWorkers. There are actually 2 flavors of this worker:<br />
* LLTextureCacheRemoteWorker<br />
* LLTextureCacheLocalFileWorker: used to load local files (which file names start in "file://"), all UI textures are loaded using that worker.<br />
<br />
One or the other flavor is created when the cache is queried through a readFromCache() call on the LLTextureCache thread. This call is done by an LLTextureFetchWorker object in the LLTextureFetch thread. For the moment, such calls are done only for local files (file name starting with "file://") and for files known only by their UUID. Files known by an "http://" URL are not hitting that call at all.<br />
<br />
To load a local file (UI texture for instance), the sequence of calls is as follow:<br />
<pre><br />
LLTextureFetchWorker::CacheReadResponder::CacheReadResponder:()<br />
LLTextureCache::readFromCache()<br />
LLTextureCacheLocalFileWorker::LLTextureCacheLocalFileWorker()<br />
LLTextureCacheWorker::read()<br />
LLTextureCacheWorker::startWork()<br />
LLTextureCacheLocalFileWorker::doRead() // loads the entire file using LLAPRFile::readEx()<br />
LLTextureCacheWorker::finishWork()<br />
LLTextureCache::ReadResponder::setData: setData: imagesize = 1068, imagelocal = 1<br />
LLTextureCache::addCompleted()<br />
LLTextureFetchWorker::CacheReadResponder::completed: CacheReadResponder::completed() // will lock the fetch queue and transfer the image<br />
LLTextureFetch::lockQueue()<br />
LLTextureFetch::unlockQueue()<br />
LTextureCacheWorker::endWork()<br />
LLTextureCacheWorker::~LLTextureCacheWorker()<br />
LLTextureFetchWorker::DecodeResponder::DecodeResponder:()<br />
LLTextureFetchWorker::DecodeResponder::completed:()<br />
LLTextureFetch::lockQueue()<br />
LLTextureFetch::unlockQueue()<br />
LLTextureCache::readComplete()<br />
</pre><br />
<br />
==== LLImageDecodeThread ====<br />
This thread is used in http texture to decompress the image texture once the raw image has been downloaded. If you're trying to get familiar with threads in the viewer, it's interesting to read that code in detail as it is short and gives a good overview of how the various objects involved in thread signaling work in the viewer. You'll see thread, requests, mutex and responders in action in 150 or so lines of code.<br />
<br />
There's only one mutex (mCreationMutex) and one list (mCreationList) in the class. All access (read or write) to the mCreationList are guarded by mutex locking/unlocking. The list is a temporary buffer of data used to instantiate requests on the queued thread. Requests are then processed in order and the responder called when done.<br />
<br />
Computations performed on the requests themselves are not guarded by mutexes as no one access the request data but the decoding thread. Once a work order is done, its result is made accessible to the calling thread by calling a responder.<br />
<br />
Here's a detailed narrative of how things work:<br />
* LLTextureFetchWorker::doWork(): when the worker reaches the (mState == DECODE_IMAGE) state, a call to decodeImage() on the LLImageDecodeThread is made.<br />
* As part of the call, a pointer to a newly created DecodeResponder object is passed. This responder will be called once the decoding is complete.<br />
* That call to decodeImage() pushes a new record on the mCreationList in the LLImageDecodeThread. The mCreationMutex is locked/unlocked for this call.<br />
* At that point, no decoding code proper is really done or even started, there's just a record for a decoding request on the list. The request itself is not created either.<br />
* The decodeImage() call returns to the LLTextureFetch thread and the state of the worker is changed to (mState == DECODE_IMAGE_UPDATE)<br />
* For all subsequent LLTextureFetchWorker::doWork() calls, the worker will check the mDecoded flag which will be switched to true only when the responder's completed() method will be called by the LLImageDecodeThread thread.<br />
* During that time, the LLImageDecodeThread continues processing:<br />
** The way LLQueuedThread are implemented, they run an infinite loop and wait on condition. The main thread calls update() over and over updating the condition and making sure the processing thread gets some action (unless the thread is paused or idle but, let's not make things too complicated in this story, let's just assume the thread is running).<br />
** LLImageDecodeThread::update() is called, locks the list again and iterates through it.<br />
** For each record in that list, a new ImageRequest object is instantiated and is added to the queue using addRequest().<br />
** The generic LLQueuedThread code then calls LLImageDecodeThread::processRequest() and LLImageDecodeThread::finishRequest().<br />
** LLImageDecodeThread::processRequest() performs the actually decompression and decoding of the image data.<br />
** LLImageDecodeThread::finishRequest() does some basic clean up and calls the responder's completed() method that will flip the mDecoded flag in the fetch worker.<br />
<br />
For another view of that thread, you can take a look at its unit test in indra/llimage/tests/llimageworker_test.cpp. This unit test exercises the thread class in both a threaded and non threaded way.<br />
<br />
==== LLLFSThread ====<br />
The LLLFSThread (LFS stands for "Local File System") is used to queue file access on the client machine. It can be used to both load and save data on the local file system.<br />
<br />
In the case of texture loading, it's used to read images from the cache if the USE_LFS_READ compilation option is set (which is not set by default).<br />
<br />
By default (USE_LFS_READ not defined), the image files are loaded using LLAPRFile which is a wrapper class around the Apache file access facility.<br />
<br />
== Links ==<br />
Intro to threads and mutexes:<br />
* [http://www.ibm.com/developerworks/library/l-posix1.html Threads]<br />
* [http://www.ibm.com/developerworks/library/l-posix2/ Mutex]<br />
* [http://www.ibm.com/developerworks/library/l-posix3/ Condition Variables]<br />
<br />
== Jira Issues ==<br />
<br />
New Jira Issues<br />
{|<br />
|}<br />
<br />
Pre-existing Jira Issues<br />
{|<br />
{{Issue|VWR-8473|type=fs|Add a menu choice to force re-download of ruthed avs, missing textures or shapes}}<br />
{{Issue|SVC-3446|type=fs|Ability to load textures on prim faces via http/https, as well as, for sculpt maps}}<br />
{{Issue|VWR-217|type=fs|New Feature -> LSL -> Dynamic Web Textures}}<br />
|}<br />
<br />
== Development of this feature ==<br />
<br />
As of this writing (2009-03-30), development on this branch is being done in the [http://svn.secondlife.com/trac/linden/browser/projects/2009/http-texture http-texture branch on svn.secondlife.com]. See [[HTTP Texture Development]] for more information about contributing<br />
<br />
[[Category:Open Source Portal]]<br />
[[Category:Linden Lab Projects]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=User:Yoz_Linden/Office_Hours/Thursday&diff=986622User:Yoz Linden/Office Hours/Thursday2010-07-22T19:53:02Z<p>Yoz Linden: </p>
<hr />
<div>{{hCalendar event/Office Hours<br />
|mode={{{mode|}}}<br />
|Resident=Yoz Linden<br />
|weekday=Thursday<br />
|start= 12pm {{SLT}}<br />
|end=1pm {{SLT}}<br />
|description=Web technology, JIRA, wiki, social applications!<br />
|location=[http://maps.secondlife.com/secondlife/Grasmere/174/112/27 Zero's Ground]<br />
}}</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Talk:Second_Life_Birthday&diff=952512Talk:Second Life Birthday2010-06-29T22:18:35Z<p>Yoz Linden: </p>
<hr />
<div>== sysop lock ? ==<br />
<br />
Curious to know why this article was sysop-locked.<br />
<br />[[User:SignpostMarv Martin|SignpostMarv Martin]] 00:49, 7 August 2008 (PDT)<br />
:Don't understand it either... Could a sysop add <nowiki>{{Help|Glossary=*}}</nowiki> on top of the page plz?<br />
:[[Image:Zai_signature.png|45px]] '''[[User:Zai Lynch|Lynch]]''' <sup><small>([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])</small></sup> 18:07, 29 September 2008 (PDT)<br />
<br />
== SL6B, SL7B Missing?==<br />
<br />
Would be nice if this page was enabled to edit to add SL6B and SL7B information to the page like previous birthdays in SL. Please can someone enable this page to edit or add the SL6B and SL7B info to the Second Life Birthday page like a portal. Thanks! - [[User:Daniel Voyager|Daniel Voyager]] 5:48am, 27th June 2010 PDT<br />
<br />
: Blame that on Everett's over-zealous use of the sysop lock tool (which [https://wiki.secondlife.com/w/index.php?title=Special%3ALog&type=protect&user=&page=&year=2008&month=-1 you'll note even drew criticism from within LL]).<br />
: [[User:SignpostMarv Martin|SignpostMarv Martin]] 07:48, 29 June 2010 (UTC)<br />
<br />
:: Guys, go ahead and update it. It was locked due to past drama (and splash damage page vandalism, I suppose). Thanks for pointing it out — Yoz mentioned this to me and, as they say, it's history. {{TorSig}} <font size="1">on 2010-06-29 @ 1:50 PM Pacific</font><br />
<br />
::: And thanks to SignpostMarv for pointing it out to me! [[User:Yoz Linden|Yoz Linden]] 22:18, 29 June 2010 (UTC)</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=User:Yoz_Linden/Office_Hours/Thursday&diff=944082User:Yoz Linden/Office Hours/Thursday2010-06-17T19:39:47Z<p>Yoz Linden: </p>
<hr />
<div>{{hCalendar event/Office Hours<br />
|mode={{{mode|}}}<br />
|Resident=Yoz Linden<br />
|weekday=Thursday<br />
|start=11:30am {{SLT}}<br />
|end=12:30pm {{SLT}}<br />
|description=Web technology, JIRA, wiki, social applications! (No OH on May 20th.)<br />
|location=[http://maps.secondlife.com/secondlife/Grasmere/174/112/27 Zero's Ground]<br />
}}</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=User:Yoz_Linden/Office_Hours/Thursday&diff=913932User:Yoz Linden/Office Hours/Thursday2010-05-13T18:40:03Z<p>Yoz Linden: </p>
<hr />
<div>{{hCalendar event/Office Hours<br />
|mode={{{mode|}}}<br />
|Resident=Yoz Linden<br />
|weekday=Thursday<br />
|start=11:30am {{SLT}}<br />
|end=12:30pm {{SLT}}<br />
|description=Web technology, JIRA, wiki, social applications! (No OH on May 20th.)<br />
|location=[http://slurl.com/secondlife/Grasmere/67/156/23?title=Linden%20Village Blue's Office]<br />
}}</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=User:Yoz_Linden/monobook.js&diff=908262User:Yoz Linden/monobook.js2010-05-09T06:08:45Z<p>Yoz Linden: Created page with 'alert("Hullo!");'</p>
<hr />
<div>alert("Hullo!");</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=User:Yoz_Linden/Office_Hours/Thursday&diff=813673User:Yoz Linden/Office Hours/Thursday2010-03-18T20:12:01Z<p>Yoz Linden: </p>
<hr />
<div>{{hCalendar event/Office Hours<br />
|mode={{{mode|}}}<br />
|Resident=Yoz Linden<br />
|weekday=Thursday<br />
|start=11:30am {{SLT}}<br />
|end=12:30pm {{SLT}}<br />
|description=On vacation until April 15th<br />
|location=[http://slurl.com/secondlife/Grasmere/67/156/23?title=Linden%20Village Blue's Office]<br />
}}</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=User:Yoz_Linden/Office_Hours/Thursday&diff=721603User:Yoz Linden/Office Hours/Thursday2010-02-04T20:50:12Z<p>Yoz Linden: </p>
<hr />
<div>{{hCalendar event/Office Hours<br />
|mode={{{mode|}}}<br />
|Resident=Yoz Linden<br />
|weekday=Thursday<br />
|start=11:30am {{SLT}}<br />
|end=12:30pm {{SLT}}<br />
|description=I'm involved with many of the Second Life websites, including Blogs & Forums, Avatars United, the wiki and JIRA.<br />
|location=[http://slurl.com/secondlife/Grasmere/67/156/23?title=Linden%20Village Blue's Office]<br />
}}</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=MediaWiki:Sidebar&diff=677692MediaWiki:Sidebar2009-12-02T21:40:43Z<p>Yoz Linden: </p>
<hr />
<div>* navigation<br />
** mainpage|mainpage<br />
** knowledgebase-url|knowledgebase<br />
** recentchanges-url|recentchanges<br />
** Special:Search|powersearch<br />
** editguidelines|editguidelines<br />
** helppage|help<br />
* other sites<br />
** slwebsite-url|slwebsite<br />
** issue-url|issuetracker<br />
** blog-url|blog<br />
** support-url|support</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=MediaWiki:Sidebar&diff=677682MediaWiki:Sidebar2009-12-02T21:39:12Z<p>Yoz Linden: </p>
<hr />
<div>* navigation<br />
** mainpage|mainpage<br />
** knowledgebase-url|knowledgebase<br />
** recentchanges-url|recentchanges<br />
** Special:Search|Advanced Search<br />
** editguidelines|editguidelines<br />
** helppage|help<br />
* other sites<br />
** slwebsite-url|slwebsite<br />
** issue-url|issuetracker<br />
** blog-url|blog<br />
** support-url|support</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=I_want_to_try_Second_Life!_Where_do_I_begin%3F&diff=591333I want to try Second Life! Where do I begin?2009-10-13T04:48:09Z<p>Yoz Linden: Configured stable versioning for I want to try Second Life! Where do I begin?: [Precedence: Quality, Default: Stable]</p>
<hr />
<div>{{KBmaster}}<br />
{{KB Getting Started}}<br />
<br />
To try Second Life®:<br />
<br />
# Make sure your computer can run Second Life. Check that your computer meets the [http://secondlife.com/corporate/sysreqs.php System Requirements]. <br />
# [https://secondlife.com/join/ Sign up for a Second Life account], if you haven't already done so. Basic accounts are free! Be sure to choose a name you can be proud of; the name you choose during registration is the name by which other Residents in Second Life will identify you.<br />
# [http://www.secondlife.com/community/downloads.php Download and install] the Second Life viewer. <br />
#* Run the Viewer as you would any application on your system.<br />
#* Log in with the name and password you chose, and start exploring! <br />
# The first time you log in, you start on one of many "Help Islands". <br />
#* A simple tutorial appears in a corner of the Viewer to guide you through Second Life's controls and features. Spending some time on Help Island will prepare you for a much more rewarding Second Life experience.<br />
#* If you've already left Help Island and want to go back, [http://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=4250 visit Help Island Public].<br />
<br />
If you get lost or confused while inworld, try asking someone for help. Many experienced Residents are happy to help new arrivals; everybody needs help at some time or another! The Second Life Mentor group in particular is dedicated to providing helpful advice to those in need.<br />
<br />
Information about Second Life is right here in the wiki: [[Linden Lab Official:Knowledge Base FAQ|Take a look around]]! You can also display the (old) Knowledge Base any time by pressing F1 while inworld or typing secondlife.com/kb into your browser window. <br />
<br />
If you don't find what you are looking for, let us know! [https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=5100 Submit a Knowledge Base suggestion ticket] or visit the Documentation Team inworld during our weekly [[Office Hours#Documentation Team|office hours]]. We'd love to have your feedback.<br />
<br />
[[Category:Second Life for Beginners]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=How_do_I_chat%3F&diff=591323How do I chat?2009-10-13T04:47:33Z<p>Yoz Linden: Configured stable versioning for How do I chat?: [Precedence: Quality, Default: Stable]</p>
<hr />
<div>{{KBmaster}}<br />
<br />
{{KB Communication}}Text chat is how you communicate with other Residents near you in Second Life® . Unlike an [[How do I Instant Message (IM) someone?|Instant Message (IM)]], chat can be "heard" by anyone (and any scripted objects) within range.<br />
<br />
Click the '''Chat''' button at the bottom of the Second Life Viewer. Type what you want to say, then click the '''Say''' button to say your message. Anyone within 20 meters of your avatar will see your message.<br />
<br />
[[Image:kb_text-chat.jpg]]<br />
<br />
==Other Ways to Chat==<br />
<br />
* Press '''Enter''' on your keyboard to open the chat bar. Type your message, then press '''Enter''' to say it.<br />
* Click the '''Say''' dropdown menu after typing your message to change your range:<br />
** '''Shout''' - Anyone within a 100m radius will see your message. You can also press '''Ctrl+Enter''' to shout.<br />
** '''Whisper''' - Anyone within a 10m radius will see your message.<br />
* To stop the typing sound and hand-waving animation, open the [[Preferences Window Guide|Preferences window]] (select '''Edit''' > '''Preferences'''), click the '''Text chat''' tab, and uncheck '''Play typing animation when chatting'''.<br />
* To speak on a non-default channel, start your message with "/#". For example, to speak on channel 4, type "/4 Hello!" Like radio frequencies, only those tuned in to a channel can listen. Channels are commonly used to give discreet commands to scripted objects. For technical info, see [[Chat channel]].<br />
<br />
To speak privately to one person, see "[[How do I Instant Message (IM) someone?]]".<br />
<br />
If you're using Second Life Viewer version 1.20 or later, you can click someone's name in chat history to open their profile.<br />
<br />
{{KBhint|Tip: You can emote with "/me", followed by an action. E.g., "/me grins" becomes "<your name> grins". You can also trigger [[How do I perform a gesture?|gestures]] with text commands.}}<br />
<br />
<br />
[[Category:Moving Around]]<br />
[[Category:Second Life for Beginners]]<br />
[[Category:Chat and IM]]<br />
[[Category:General Avatar Information]]<br />
[[Category:Menus and Controls]]<br />
[[Category:Inworld]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=MediaWiki:Sitenotice&diff=583933MediaWiki:Sitenotice2009-10-08T03:12:00Z<p>Yoz Linden: </p>
<hr />
<div>'''DOWNTIME NOTICE: The wiki will be undergoing maintenance on Wednesday 7th October, from 11PM to 1AM Pacific Time. There may be some intermittent downtime during this period. We recommend refraining from creating or editing articles during this maintenance window.'''</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Supported_file_types_for_upload&diff=562523Supported file types for upload2009-10-06T23:24:18Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
Second Life allows you to upload several different types of files for use in content creation. This article lists the file types supported by Second Life:<br />
<br />
=='''Textures/Images'''==<br />
<br />
[[Image:kb_SupportedFileTypes.png]]<br />
<br />
* .tga<br />
* .bmp<br />
* .jpg<br />
* .jpeg<br />
* .png<br />
<br />
When uploaded, images will be resized to square "powers of two" (16x16, 32x32, 64x64, etc.). Keep this in mind when creating textures, in order to avoid unnecessary image distortion! The maximum resolution for uploaded textures is 1024x1024. If you upload an image that is a higher resolution than this, it will be reduced to 1024x1024 resolution.<br />
<br />
=='''Sounds'''==<br />
<br />
[[Image:kb_soundfiletypeDefault.png]]<br />
<br />
* .wav<br />
<br />
Valid sounds are any .WAV file in standard PCM format, 16-bit/44.1kHz/mono or stereo (which will be converted to mono anyway), less than 10 seconds in length. (9.99 seconds is fine, but 10.0 will fail to upload.) Sounds cannot be saved as 8-bit, 22.05 kHz, or any other frequency. Sounds in other formats can be converted in most sound programs. An example of a free quality converter is [http://www.voxengo.com/r8brain/ r8brain]. There is currently no support for compression formats such as MP3.<br />
<br />
=='''Animation'''==<br />
<br />
[[Image:kb_Animation_File_Type.png]]<br />
<br />
* .bvh<br />
<br />
Valid animations are any .BVH file usable in Poser 2 or newer. Recommended settings are 10 frames per second. For more information on uploading animations, check out [[How to upload an animation|How to upload an animation.]]<br />
[[Category:Filming Audiovisual Extravaganzas]]<br />
[[Category:Building Objects]]<br />
[[Category:Content Creation]]<br />
[[Category:Making Clothing]]<br />
[[Category:Creators]]<br />
[[Category:Using External Applications]]<br />
[[Category:Educators]]<br />
[[Category:Business Owners]]<br />
[[Category:Menus and Controls]]<br />
[[Category:Landowners]]<br />
[[Category:General Second Life Software Information]]<br />
[[Category:Working with Textures]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Deposit_and_withdraw&diff=562503Linden Lab Official:Deposit and withdraw2009-10-06T23:24:17Z<p>Yoz Linden: 1 revision</p>
<hr />
<div><br />
<br />
Use the appropriate Page to deposit or withdraw Linden Dollars (L$) or USD, then simply follow the directions listed.<br />
<br />
Funds deposited on this page can be used in the following ways:<br />
<br />
* On the Currency Market to buy L$<br />
* In the Marketplace to buy Merchandise<br />
[[Category:Currency Exchange]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=How_do_I_make_it_brighter%3F_It%27s_so_dark_I_can%27t_see_anything.&diff=562483How do I make it brighter? It's so dark I can't see anything.2009-10-06T23:24:17Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
There are two ways!<br />
<br />
* Select '''World &gt; Force Sun &gt; Noon'''. The sun will come out and shine for you.<br />
* Another way is to select '''Edit &gt; Preferences &gt; Graphics''', and press the '''Hardware Options''' button. See where it says Gamma? Lower that number, click '''OK''', and it'll get brighter.<br />
[[Category:Moving Around]]<br />
[[Category:Controls and Getting Around]]<br />
[[Category:Menus and Controls]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Does_Second_Life_work_on_older_versions_of_Mac_OS_X,_such_as_OS_X_10.2&diff=562463Does Second Life work on older versions of Mac OS X, such as OS X 10.22009-10-06T23:23:55Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
Due to core engine updates and enhancements, Second Life only supports Mac OS X 10.3.9 (Panther) or later. An upgrade to OS 10.3.9 should allow a Macintosh computer meeting our [http://secondlife.com/corporate/sysreqs.php System Requirements] to run Second Life. We strongly suggest running Mac OS X 10.4.3 or later.<br />
[[Category:Troubleshooting]]<br />
[[Category:I&#39;m installing, uninstalling, or reinstalling]]<br />
[[Category:General Second Life Software Information]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Someone_claiming_to_be_a_Linden_is_threatening_to_ban_my_account_and_take_my_land!&diff=562443Linden Lab Official:Someone claiming to be a Linden is threatening to ban my account and take my land!2009-10-06T23:23:54Z<p>Yoz Linden: 1 revision</p>
<hr />
<div><br />
<br />
Any Resident who tries to intimidate you by claiming to be a Linden is violating Second Life's [http://secondlife.com/corporate/tos.php Terms of Service], and you should [[Linden Lab Official:Guide to Filing an Abuse Report|Abuse Report]] him immediately. <br />
<br />
Residents with the last name "Linden" (often referred to as "the Lindens") are the avatars of Linden Lab employees. Some Residents may try to intimidate you by claiming that they are friends with a particular Linden, or that they are a Linden themselves. They may imply that they can ban your account or take your land from you if you don't submit to their demands. Real Lindens adhere to a strict code of conduct inworld, and will only ban Resident accounts and reclaim land under specific circumstances:<br />
<br />
We may:<br />
<br />
* Ban a Resident's account for a violation of Second Life's [http://secondlife.com/corporate/tos.php Terms of Service]<br />
* Place an administrative hold on an account that is delinquent, meaning that its owner has not paid all his fees on time.<br />
* Reclaim land if the owner's account is delinquent for a long period of time, or if the owner's account has been administratively reviewed and permanently banned.<br />
Remember: If anyone threatens to ban you or take your land by force, file an [[Linden Lab Official:Guide to Filing an Abuse Report|Abuse Report]] against that Resident immediately!<br />
<br />
The [[Who are Lindens|Who are Lindens?]] video tutorial may be helpful to watch.<br />
[[Category:Support]]<br />
[[Category:Legal Questions]]<br />
[[Category:My Account]]<br />
[[Category:General Abuse and Griefing Information]]<br />
[[Category:Disputes Between Residents]]<br />
[[Category:Policies]]<br />
[[Category:Abuse and Griefing]]<br />
[[Category:I&#39;m having problems with other Residents]]<br />
[[Category:Dealing with Griefers]]<br />
[[Category:Inworld]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Is_it_OK_to_log_chat_with_a_scripted_object%3F&diff=562423Linden Lab Official:Is it OK to log chat with a scripted object?2009-10-06T23:23:53Z<p>Yoz Linden: 1 revision</p>
<hr />
<div><br />
<br />
You may log chat conversations with a scripted object as long as your actions do not conflict with Second Life's [http://secondlife.com/corporate/cs.php Community Standards].<br />
<br />
{{KBcaution|''' A scripted logging device may not remotely monitor conversations or share/post conversation logs without consent.<br />
}}<br />
[[Category:Legal Questions]]<br />
[[Category:Policies]]<br />
[[Category:Coding Scripts]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Second_Life_gives_me_an_error_message_about_being_%22Unable_to_find_a_valid_certificate%22_or_%22Unable_to_establish_a_secure_connection_to_the_login_server.%22&diff=562403Second Life gives me an error message about being "Unable to find a valid certificate" or "Unable to establish a secure connection to the login server."2009-10-06T23:23:52Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
Your local network may be blocking secure logins. It's also possible that your secure login is failing due to an incorrect date/time on your computer.<br />
<br />
Try double-clicking the clock in the Windows system tray (in the lower-right corner of the screen), and verify the date and time. Make sure it's not a year off!<br />
<br />
Be sure a firewall, or internet security or firewall software, is not blocking Second Life access.<br />
<br />
If you are on an office or university network, your network administrator may have secure logins disabled. In this case, you may not be able to use Second Life on that network connection.<br />
[[Category:Error Messages]]<br />
[[Category:Error Messages]]<br />
[[Category:I&#39;m crashing or experiencing errors]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Typical_Frame_Rate_Performance_by_Graphics_Card/GPU&diff=562383Typical Frame Rate Performance by Graphics Card/GPU2009-10-06T23:23:52Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
To help Residents determine the cause of slower frame rates (the rate at which the Second Life viewer draws objects), we take periodic samples of Second Life viewer performance statistics.<br />
<br />
While there are a number of factors that influence frame rates (see [[I have a lot of lag. How can I improve performance|I have a lot of lag; how do I stop it?]] for more information and troubleshooting tips), the the GPU (graphics processing unit) on your computer can definitely affect your viewing performance, since it does most of the work in drawing the objects you see. On many computers, this is part of your graphics card, but it could also be a graphics chip built directly into your computer's motherboard.<br />
<br />
The chart below represents a range of typical frame rates (in frames per second, or FPS) for a sample taken of the 100 most popular GPUs using Second Life, which makes up 99.5% of our current user base. The tick mark in the center of each floating bar shows the median frame rate; the bars themselves extend to the top and bottom 25% for each GPU. This should give you a sense of the kind of performance other users who have the same GPU are seeing.<br />
<br />
[[Image:kbext_frameratesbygpu.png]]<br />
<br />
If you're seeing worse performance than the range indicated, try the troubleshooting steps listed below, or in the related topics. If none of these steps help improve your performance, you may want to consider upgrading your graphics card. Note that some of the GPUs listed above, while common, are not on the supported GPU list on our [http://secondlife.com/corporate/sysreqs.php System Requirements] page, but we still see people trying to use them, which is likely to be frustrating for those users.<br />
<br />
Other possible factors that could affect viewer frame rates:<br />
<br />
* How busy your location is -- try teleporting to an area with less activity or fewer objects. Note that frame rates can vary greatly over the course of a session!<br />
* Viewer [[Preferences Window Guide|Preference settings]] -- you might have the settings too high for what you computer can easily handle. Try adjusting settings in the '''Graphics''' tab of the Preferences window:<br />
* Graphics card driver support for OpenGL functions (make sure you have the most recent update of your graphics card drivers).<br />
* Available memory.<br />
* Network issues (more commonly referred to as "lag").<br />
<br />
Useful information may be found in the following related topics:<br />
<br />
* [http://secondlife.com/corporate/sysreqs.php System Requirements]<br />
* [[What is a graphics card Will mine work with Second Life How do I tell which one I have|What is a graphics card? Will mine work with Second Life? How do I tell which one I have?]]<br />
* [[I have a lot of lag. How can I improve performance|I have a lot of lag. How do I stop it?]]<br />
* [[How do I get the latest drivers for my graphics card|How do I get the latest drivers for my graphics card?]]<br />
* [[Statistics Bar Guide]]<br />
* [[Preferences Window Guide]]<br />
[[Category:Improving Performance]]<br />
[[Category:Performance and Stability]]<br />
[[Category:Performance]]<br />
[[Category:Hardware Questions]]<br />
[[Category:Technical Issue]]<br />
[[Category:General Second Life Software Information]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Projects_and_Components_in_the_Public_Issue_Tracker_(JIRA)&diff=562363Projects and Components in the Public Issue Tracker (JIRA)2009-10-06T23:23:51Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
'''Projects''' - Used to categorize issues into logical groups.<br />
<br />
'''Components''' - Used to specify which part of a system the issue affects.<br />
<br />
When you create or search for an issue in the Public Issue Tracker, it is essential to understand the Tracker's organizational structure. The table below outlines typical issues that should fall under given '''Projects''' in the Public Issue Tracker:<br />
<br />
{| class="wikitable" border="1"<br />
|+ Projects and Components in JIRA<br />
|-<br />
! Viewer (VWR)<br />
! Service (SVC)<br />
! Website (WEB)<br />
! Miscellaneous (MISC)<br />
|- valign="top"<br />
|<br />
* Avatar/Character<br />
* Building (in-world)<br />
* Chat/IM<br />
* Crashes<br />
* Documentation<br />
* Graphics<br />
* Internationalization<br />
* Inventory<br />
* Land<br />
* Linden Dollars (L$)<br />
* Missing Content<br />
* Performance<br />
* Permissions<br />
* Physics<br />
* Scripting<br />
* Sound<br />
* Source Code<br />
* Stipends<br />
* User Interface<br />
* Voice<br />
|<br />
* HTTPRequest<br />
* Internationalization<br />
* Performance<br />
* Physics<br />
* Scripts<br />
* Simulation<br />
* Teleport<br />
* XML-RPC<br />
|<br />
* Account summary<br />
* blog.secondlife.com<br />
* Developer Directory<br />
* Events<br />
* forums.secondlife.com<br />
* Friends Online<br />
* Interactive map<br />
* jira.secondlife.com<br />
* Land Store<br />
* lindenlab.com<br />
* Lindex<br />
* New account creation<br />
* Public Data Feeds<br />
* Public Metrics &amp; Charts<br />
* secondlife.com<br />
* teen.secondlife.com<br />
* wiki.secondlife.com<br />
|<br />
* Miscellaneous<br />
|}<br />
<br />
; Second Life Viewer (VWR)<br />
: Issues pertaining to the Second Life viewer are reported under this project.<br />
: '''Examples''':<br />
:* llGetDate() is returning the wrong date Observed at 10:30 PM PDT on March 19, llGetDate() returns 2007-03-20 (Component = Scripting)<br />
:* "My avatar clothing is all black after installing a video driver update" (Component = Avatar/Character)<br />
:* "Objects in my Inventory do not remain sorted in the correct order after logging out and back in again" (Component = Inventory)<br />
:; Second Life Service (SVC)<br />
: Issues pertaining to the Second Life service are reported here.<br />
: '''Examples''':<br />
:* "Server performance decreases when several avatars teleport into the region at once" (Component = Performance and/or Teleport)<br />
:* "My scripted objects are not able to talk to the outside world after Second Life grid downtime" (Component = Scripts).<br />
:; Second Life Website (WEB)<br />
: Issues pertaining to the Second Life website are in this project.<br />
: '''Examples''':<br />
:* "Wiki prevents login for users with a dash in their name" (Component = wiki.secondlife.com)<br />
:* "jira.secondlife.com always forces me to authenticate even if I save my login information" (Component = jira.secondlife.com).<br />
:; Second Life Miscellaneous (MISC)<br />
: Any other type of issue should be reported in the MISC project.<br />
: '''Example''':<br />
:* "The TOS does not allow me to edit the viewer source code" (Component = Miscellaneous)<br />
:[[Category:Bugs and the Public JIRA]]<br />
[[Category:Public Issue Tracker (JIRA)]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Marketplace_Listing_Enhancements_-_Border&diff=562343Linden Lab Official:Marketplace Listing Enhancements - Border2009-10-06T23:23:51Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>Set your listing apart from the masses with an eye-catching border. Perfect for making your listings "pop!" Get your merchandise noticed with the power of a border. Enhancement costs are listed in the article describing [http://d3.parature.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=5988 Xstreet fees].<br />
[[Category:Listing Enhancements]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Rebaking_textures&diff=562323Rebaking textures2009-10-06T23:23:50Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
If your avatar's textures are not displaying properly or you see "Missing Image" all over your avatar, try rebaking your avatar's textures.<br />
<br />
First, [[How do I open the Advanced menu (Formerly known as the Client menu.)|open the Advanced menu]].<br />
<br />
Select '''Advanced &gt; Character &gt; Rebake Textures'''.<br />
<br />
[[Image:kb_rebake_textures.jpg]]<br />
<br />
For related information, see [[Invisible avatar Try these things!|Invisible avatar? Try these things!]]<br />
[[Category:Creators]]<br />
[[Category:Controls and Getting Around]]<br />
[[Category:Menus and Controls]]<br />
[[Category:Working with Textures]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:I_have_an_agreement_with_one_or_more_Residents_regarding_real_estate,_group_management,_performance_of_services,_division_of_revenue,_etc.,_but_they_aren%27t_keeping_to_the_agreement.&diff=562303Linden Lab Official:I have an agreement with one or more Residents regarding real estate, group management, performance of services, division of revenue, etc., but they aren't keeping to the agreement.2009-10-06T23:23:50Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>Linden Lab cannot verify, enforce, certify, examine, uphold, or adjudicate any oath, contract, deal, bargain, or agreement made by the Residents of Second Life. Please contact the Resident with whom you have a dispute, and request that they make good on the deal. While you may have a valid agreement with another person, Linden Lab is not a party to and cannot resolve your dispute.<br />
[[Category:Legal Questions]]<br />
[[Category:Information for Renters]]<br />
[[Category:Disputes Between Residents]]<br />
[[Category:L$ Transactions Between Residents]]<br />
[[Category:Business Owners]]<br />
[[Category:Social Stuff]]<br />
[[Category:I&#39;m having problems with other Residents]]<br />
[[Category:Landowners]]<br />
[[Category:Information for Landowners]]<br />
[[Category:Transactions with other residents]]<br />
[[Category:Inworld]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=What_is_a_bot%3F&diff=562283What is a bot?2009-10-06T23:23:50Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
The Viewer you use to access the Second Life<sup>&reg;</sup> world (and the fact that the Viewer code is open source) allows for the creation of custom Viewers that can log in without a human operator and perform the same actions as any normal avatar inworld. Avatars controlled by these custom, automated Viewers are called "bots" (a contraction of "robot").<br />
<br />
Bots can be hard to spot; sometimes they live very high up in the air, or are so fast that they have gone by before you're aware of them. If you find yourself somewhere that seems to be full of people, and yet nobody is talking or moving about, it is likely that some or all of the avatars you see are bots. Don't be alarmed if they don't respond to your chat!<br />
[[Category:General Information]]<br />
[[Category:General Avatar Information]]<br />
[[Category:General Help]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=I_can%27t_get_into_the_land_I_own.&diff=562263I can't get into the land I own.2009-10-06T23:23:49Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
There are a few possible reasons for not being able to get into land that you own:<br />
<br />
* If there's a rolling restart going on, the Region your land is in may be temporarily offline. Check the status blog.<br />
<br />
===Is it a parcel on the mainland?===<br />
<br />
* The Region you're trying to enter is full; that is, it's reached its maximum number of avatars. Take a look at the Region you're trying to enter on the World Map and see how many green dots are on it.<br />
* In the About Land window's '''Options''' tab, it's possible to set '''Teleport Routing''' to '''Blocked'''. You might be able to get around this by teleporting into a neighboring parcel and walking or flying in.<br />
<br />
===Is the parcel on a private Region you own?===<br />
<br />
* Has your account gone delinquent? "Delinquent" means you have not paid all your fees and bills. You can check by viewing your [https://secondlife.com/my/account/ '''Account Summary'''] in [http://secondlife.com/my your Dashboard] (shown by clicking '''Account''' on the left).<br />
* If you can get there fine, but other people cannot, please see the section below.<br />
<br />
===Is the parcel on a private Region owned by someone else?===<br />
<br />
* It's possible that the estate owner has changed the access permissions. You should contact the estate owner to find out what's going on.<br />
* It's possible that it has been taken offline because of issues with the owner's account. You should contact the Estate owner to find out what's going on.<br />
<br />
===Did you check your maturity setting?===<br />
<br />
* Compare your maturity setting with the Region maturity. For example, if your maturity preference is set to '''PG''' and the land is set to Mature, you will need to adjust your maturity setting to '''PG and Mature''' or '''PG, Mature and Adult''', to access the Mature land.<br />
* [[Linden Lab Official:Setting your maturity preferences|Change your maturity setting]] from the Viewer menu. Go to '''Edit''' &gt; '''Preferences''' &gt; click on the '''General''' tab.<br />
* If you don't have the option to set your preference to the Region maturity, see "How to become verified as an adult" for information.<br />
* If you do not see options to adjust your maturity preferences, check your Viewer version by going to '''Help''' &gt; '''About Second Life''' from the Viewer menu. Preferences can be adjusted using Viewer 1.23 and higher. [http://secondlife.com/support/downloads.php Download the latest Viewer.]<br />
<br />
===I can get there, but my friends can't!===<br />
<br />
* Make sure either '''Allow Public Access''' or '''Allow Group Access''' are enabled, or individual names are added to the '''Allowed Residents''' list in the '''Access''' tab of the '''About Land''' window. If you choose to limit access to a certain group, make sure your friends are in the group!<br />
* In the About Land window's '''Options''' tab, it's possible to set '''Teleport Routing''' to '''Blocked'''. You might be able to get around this by teleporting into a neighboring parcel and walking or flying in.<br />
* If your land is in a private Region, verify that the Region either has '''Allow Direct Teleport''' enabled in the '''Estate''' tab of the '''Region/Estate''' window, or a Telehub set up. <br />
* If your land is in a private Region, make sure either '''Allow Public Access''' is enabled, or individual people or groups are added to the '''Allowed Residents''' or '''Allowed Groups''' lists in the '''Estate''' tab of the '''Region/Estate''' window<br />
* Residents who cannot enter your land should check their maturity settings in the Preferences window. Let your friends know how your Region is rated so they will know which Preference to set, or they can look up the Region on the map and view the Region maturity.<br />
[[Category:Moving Around]]<br />
[[Category:Estates and Private Regions]]<br />
[[Category:Information for Landowners]]<br />
[[Category:Landowners]]<br />
[[Category:Land and the Linden Dollar (L$) Economy]]<br />
[[Category:Inworld]]<br />
[[Category:I&#39;m having navigation issues]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Charts&diff=562243Linden Lab Official:Charts2009-10-06T23:23:48Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>The Charts page allows you to look at trading history in a variety of different ways. You can use the dropdown menus to customize your chart view to show trades broken down by:<br />
<br />
* Different periods of time<br />
* Different time increments<br />
* Different formats<br />
<br />
We encourage you to tinker with these charts, as they're very useful for serious traders, as well as fun to play with for casual users.<br />
[[Category:Currency Exchange]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:I_can%27t_tell_how_much_L$_I_have;_it_just_says_%22Loading.%22&diff=562223Linden Lab Official:I can't tell how much L$ I have; it just says "Loading."2009-10-06T23:23:48Z<p>Yoz Linden: 1 revision</p>
<hr />
<div><br />
<br />
Don't panic! If you just logged in and your L$ amount, shown in the upper-right corner of the screen, says "Loading", it just means your L$ balance hasn't been loaded yet and will eventually appear. Sometimes, this is due to server issues, when we're experiencing heavy load and the data can't be retrieved quickly.<br />
<br />
Remember, while you wait inworld, you can also check your Linden Dollar balance on the [https://secondlife.com/account/ Your Account section of our website].<br />
<br />
{{KBnote|don't share your account]].<br />
}}<br />
<br />
==Tips &amp; Tricks==<br />
<br />
If you have waited five full minutes and your L$ balance still reads as "Loading", you can try the following tricks to try to force your balance to appear:<br />
<br />
* Try teleporting to another Region.<br />
* Try logging out of Second Life, and then log back in, preferably in a different Region. Giving the viewer a second chance to load your information often resolves the problem.<br />
* Ask a friend to pay you L$1. If you're really nice, give it back afterward!<br />
* Try bulk uploading a single image, sound, or animation. Make sure only to try to upload one item! Each attempt costs you L$10.<br />
Obviously we don't expect you to spend large sums of Linden dollars in order to find out how many you have; if your problem persists, you should file a help ticket via our [http://secondlife.com/support Support Portal].<br />
[[Category:My Account]]<br />
[[Category:Linden Dollars (L$)]]<br />
[[Category:The system is behaving strangely]]<br />
[[Category:General L$ Information]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Second_Life_Billing_Policies&diff=562203Linden Lab Official:Second Life Billing Policies2009-10-06T23:23:48Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>[http://secondlife.com/corporate/billing.php Click here to view the Second Life Billing Policies], which are also linked to from our [http://secondlife.com/corporate/tos.php Terms of Service].<br />
[[Category:Billing]]<br />
[[Category:My Account]]<br />
[[Category:Billing Issues]]<br />
[[Category:Policies]]<br />
[[Category:Policies]]<br />
[[Category:Billing Issues]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Bump_Mapping&diff=562183Bump Mapping2009-10-06T23:23:47Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
[http://en.wikipedia.org/wiki/Bump_mapping Bump mapping] is a graphical rendering technique in which a "bump map" texture is applied to the surface of a 3D object in order to give it a richer visual appearance closer to that of the real world. You can apply bump maps to some of your objects in Second Life to create a very stimulating visual experience!<br />
<br />
To apply a bump map to an object:<br />
<br />
# Right-click the object and select '''Edit'''.<br />
# If the tools window is not already expanded, press the '''More &gt;&gt;''' button.<br />
# Click the '''Texture''' tab.[[Image:kbsd_KB_menu_bump_map.jpg]]<br />
# In the Bumpiness dropdown menu, select a bump map from the list provided. The bump map will be applied ''over'' the existing texture on the object, giving the object's surface a more tactile look. <br />
<br />
{{KBtrivia|''' The '''Brightness''' and '''Darkness''' bump maps enhance the bumpiness of the existing texture on the object; if you apply them to an object with no texture, nothing will happen! Try applying the different bump maps to a standard cube and see what happens. The faces on the cubes below have been colored to add perspective:<br />
}}<br />
<br />
====[[Image:kbsd_kb_no_bumpmap_cube.jpg]][[Image:kbsd_kb_bump_map_cube.jpg]]====<br />
<br />
==Additional notes about bump mapping==<br />
<br />
Bump mapping is a client-side effect; this means that other Residents can turn it on and off under '''Edit &gt; Preferences &gt;Graphics &gt; Bump Mapping &amp; Shiny'''. If a Resident has this option turned off, they cannot see bump mapping effects on any objects, so you should not use bump mapping for vital effects on any object.<br />
<br />
The nature of Second Life's bump mapping effect means it can be hidden if an [http://lslwiki.net/lslwiki/wakka.php?wakka=Invisiprim invisiprim] is placed in front of it, just like regular textures with an alpha channel.<br />
[[Category:Building Objects]]<br />
[[Category:Textures and Snapshots]]<br />
[[Category:Creators]]<br />
[[Category:Working with Textures]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Something_happened_and_now_I%27m_bouncing_all_over_the_world_like_it%27s_a_trampoline._What_do_I_do_now%3F&diff=562143Something happened and now I'm bouncing all over the world like it's a trampoline. What do I do now?2009-10-06T23:23:46Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
Try a relog; Log out of Second Life, and then restart the program.<br />
<br />
If that doesn't work, try right-clicking on yourself and selecting '''Take Off &gt; Detach All''' to remove your attachments. Then, try relogging. Scripted attachments have the ability to affect your avatar's movement, so always try to make sure you know what you are attaching to yourself!<br />
<br />
If that still doesn't work, try unplugging your modems and routers for a full minute, then plug them back in and log back into Second Life.<br />
[[Category:Moving Around]]<br />
[[Category:I&#39;m having avatar problems]]<br />
[[Category:Avatar and Appearance]]<br />
[[Category:Inworld]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Known_Issues&diff=562123Linden Lab Official:Known Issues2009-10-06T23:23:45Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>This article describes how to navigate the [http://secondlife.com/support/known-issues.php Second Life Known Issues] page, which is a semi-automatically updated page describing known issues for non-beta releases.<br />
<br />
The Second Life Known Issues page contains issues Linden Lab has verified as in the current release and ''Safe for Public*''.<br />
<br />
{{KBwarning|%%}}<br />
<br />
This is not a complete list of bugs in Second Life.<br />
|}<br />
<br />
Here's what each term or icon means:<br />
<br />
* '''Priority Key''': This is the priority we've assigned to each bug. The priority is gauged by the following. It is not uncommon for bugs to be up/downgraded in priority throughout their lifespans.<br />
* [[Image:kbext_priority_blocker.gif]] '''Showstoppers''' are must-fixes for the next release version that cause Second Life to be completely unusable for the majority of residents.<br />
* [[Image:kbext_priority_critical.gif]] '''Criticals''' are should-fixes (but not guaranteed to be fixed) for the next release version.<br />
* [[Image:kbext_priority_major.gif]] '''Majors''' are bugs that we acknowledge as bad but usually have a known workaround, or are less critical to fix because they affect a minority of residents. We still feel these are important and we try to get them fixed in each major point release.<br />
* [[Image:kbext_priority_minor.gif]] '''Normals''' are bugs that do not hinder use of Second Life but are annoying nonetheless.<br />
* [[Image:kbext_priority_trivial.gif]] '''Smalls''' are bugs that we consider pretty low on the totem pole.<br />
* '''Issue (SL) Number''': This is the internal key (SL-#) of an issue. Linden Lab uses an issue tracking system company-wide, so these numbers tend to be all over the map. The SL-# does not in any way indicate how many bugs are in Second Life!<br />
* '''Short Bug Description''': This is a short description meant to allow quick scanning of the page for a specific issue. They are written tersely and usually modified by QA before posting.<br />
* '''Affects''': This indicates which version(s) of the Second Life client this bug has been verified in, and what key components are affected (in parentheses).<br />
* '''Show Repro''': Click this for instructions on how to reproduce the bug. Following these steps should result in the ''Observed Results''. We usually put the ''Expected Results'' here as well.<br />
<br />
<nowiki>* </nowiki>'''Safe for Public''' bugs are any non-exploit** issue that either hinders use of Second Life, results in unexpected behavior, or otherwise negatively impacts Resident experiences inworld. ''Safe for Public'' bugs are reproducible by Residents. An example of a bug we would not list would be a bug in simulator code that negatively impacts the Resident experience, but isn't Resident-reproducible. ** '''Exploits''' are bugs that could be used to get an advantage over others, unauthorized access to scripts, unauthorized copying, transferring or modifying of objects that you didn't create (also called 'permissions' bugs) and other bugs that could potentially cause a comprimise of the grid or a Resident's privacy. We take exploits very seriously, but we don't list them in the Known Issues page. If you have an exploit bug, please report it and contact a liaison or an officer of the Bug Hunters group with the RT# you're given by the auto-response email. (see also: How to Report a Bug)<br />
[[Category:Bugs and the Public JIRA]]<br />
[[Category:Quality Assurance]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Under_Windows_Vista,_my_graphics_card_reports_as_a_GDI_Generic._Why_is_that%3F&diff=562103Under Windows Vista, my graphics card reports as a GDI Generic. Why is that?2009-10-06T23:23:44Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
Second Life requires that the Windows drivers for the system's graphics card fully support the OpenGL graphics standard. Any graphics card whose installed driver does not support OpenGL detects as a "GDI Generic" instead. This message means that Second Life has detected no hardware with OpenGL support.<br />
<br />
It's up to the graphics vendor (Nvidia or ATI) to provide drivers that support both OpenGL and your operating system. As of this writing, we have successfully run Second Life on Vista under several PCs equipped with Nvidia's Geforce graphics cards.<br />
<br />
If you receive this message under Vista, are running graphics hardware that meets our [http://secondlife.com/corporate/sysreqs.php Minimum System Requirements], and can't find a driver provided by your graphics vendor that provides OpenGL support, you'll be unable to run Second Life under Windows Vista on that computer.<br />
[[Category:Troubleshooting]]<br />
[[Category:I&#39;m installing, uninstalling, or reinstalling]]<br />
[[Category:Hardware Questions]]<br />
[[Category:General Second Life Software Information]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Listing_Enhancements&diff=562083Linden Lab Official:Listing Enhancements2009-10-06T23:23:44Z<p>Yoz Linden: 1 revision</p>
<hr />
<div><br />
<br />
Enhance your listing and stand out from the crowd!!<br />
<br />
There are several ways you can help boost your sales on the Xstreet Marketplace by adding a little pizzazz to your product listings. Which one will you choose?<br />
<br />
* '''Basic Enhancements:''' [[Linden Lab Official:Marketplace Listing Enhancements - Bold|Bold]], [[Linden Lab Official:Marketplace Listing Enhancements - Highlight|Highlight]], or [[Linden Lab Official:Marketplace Listing Enhancements - Border|Border]]. Choose one of these and get your listing to stand out from the others as consumers browse through Categories or use the search tool.<br />
* '''[https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=5977" Featured Item]'''''':''' Includes Bold, Highlight, and Border enhancements, plus a label and positioning at the top of the page, as well as a Featured Category spot where applicable.<br />
* '''[https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=5979" Homepage Featured]''' A Featured enhancement plus inclusion into the Homepage rotation.<br />
[[Category:Merchant Help]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Terms_of_Service_Arbitration_FAQ&diff=562063Linden Lab Official:Terms of Service Arbitration FAQ2009-10-06T23:23:43Z<p>Yoz Linden: 1 revision</p>
<hr />
<div><br />
<br />
Our new updated [http://secondlife.com/corporate/tos.php Terms of Service], which are the terms and conditions on which Linden Lab provides access to the Second Life environment, give Residents the option of resolving claims for amounts less than $10,000.00 USD through a proceeding conducted by telephone, online, or based on written submissions. With this proceeding ââ¬" called "binding, non-appearance-based arbitration" ââ¬" we aim to save Residents both time and money by eliminating the need to appear in person at the arbitration hearing to resolve small claims.<br />
<br />
The Q&amp;As in this article go into greater detail about the updated TOS. We hope that this change provides a neutral and cost-effective means of resolving small disputes quickly and effectively, and as always, we welcome feedback.<br />
<br />
==Why is Linden Lab doing this?==<br />
<br />
We know that the amount of money that may be at issue in a Resident dispute with Linden Lab may be small. So we updated the TOS with the goal of allowing Residents to resolve small claims quickly and inexpensively. The updated TOS gives Residents the option of resolving small claims through an arbitration proceeding that doesn't involve a personal appearance by the Resident or Linden Lab.<br />
<br />
==What kinds of disputes does the TOS cover?==<br />
<br />
The TOS governs disputes between a Resident and Linden Lab. The new dispute resolution procedure does not apply to Resident-to-Resident disputes.<br />
<br />
==What is the arbitration option?==<br />
<br />
For claims where the total amount of damages sought is less than $10,000.00 USD, a Resident may choose to resolve the claims through a proceeding called "binding non-appearance-based arbitration."<br />
<br />
==What is "binding non-appearance-based arbitration"?==<br />
<br />
It is a legally binding procedure administered by a private organization. This means that the arbitrator's opinion on liability and damages may be entered as a final, binding judgment in a court of law. The arbitrator will conduct the arbitration by telephone, online, or based on written submissions, and the Resident and Linden Lab will not make any in-person appearance at the arbitration hearing.<br />
<br />
==How do I elect arbitration?==<br />
<br />
If a dispute arises with Linden Lab, we strongly encourage Residents to contact us so that we can learn about and try to address their concerns. However, if a Resident seeks to have a dispute resolved in arbitration, the Resident should send Linden Lab a written notice that contains the following:<br />
<br />
# A brief statement of the claims alleged and the relief sought;<br />
# Any preference regarding the "established ADR provider" that will conduct the arbitration (for what is an "established ADR provider," see the next question below);<br />
# Any preference regarding whether the arbitration is conducted by telephone, online, or based on written submissions to the arbitrator; and<br />
# Contact information (including mailing address, telephone number, and email address) for the Resident and, if the Resident is represented by counsel, for the Resident's attorney.<br />
<br />
Written notices should be sent by mail or fax to:<br />
<br />
Linden Lab Legal Department Attn: Dispute Resolution 945 Battery Street San Francisco, CA 94111 Fax: 415-243-9045<br />
<br />
==What is an "established ADR provider"?==<br />
<br />
The Resident and Linden Lab must agree on an established alternative dispute resolution ("ADR") provider to conduct the arbitration. Examples of established ADR providers are the American Arbitration Association (AAA) (http://www.adr.org/), Judicial Arbitration and Mediation Services/Endispute (JAMS) (http://www.jamsadr.com/), and the National Arbitration Forum (NAF) (http://www.arb-forum.com/). Linden Lab will consider reasonable requests to use an established ADR provider. However, please be aware that Linden Lab will not consider any ADR provider that does not have published rules and procedures governing arbitration. Linden Lab also requires that the arbitrator be a retired judge or attorney with legal expertise in the subject matter of the dispute.<br />
<br />
==How much will arbitration cost me?==<br />
<br />
The exact cost depends on the ADR provider selected. An ADR provider's rules and fee schedule are often available on the provider's website. For example, the National Arbitration Forum's rules currently provide that consumers will pay at most $185.00 in disputes between consumers and businesses where the total amount of damages sought is less than $10,000.00 USD. Businesses pay the remainder of the fees charged by the NAF.<br />
<br />
==What kinds of claims are not subject to arbitration under the TOS?==<br />
<br />
Arbitration is not an option if the total amount of damages sought is $10,000.00 USD or more, or if injunctive or other equitable relief is sought. Equitable remedies are discretionary and include injunctions, which are court orders that compel or proscribe certain conduct. For information about equitable relief, please see the Wikipedia entry titled "Equitable Remedy" (http://en.wikipedia.org/wiki/Equitable_remedies) and consult a lawyer.<br />
<br />
==Does the TOS allow me to file claims in a court of law?==<br />
<br />
Yes, Residents may file claims in a court in San Francisco, California.<br />
<br />
==Can I file claims in a court outside of San Francisco, California?==<br />
<br />
No, if a Resident seeks resolution in a court of law, the claim must be filed in a court in San Francisco, California.<br />
<br />
==What happens if I file a claim in a manner that is not allowed by the TOS?==<br />
<br />
Linden Lab will notify Residents in writing of claims filed contrary to the TOS. Residents who do not promptly withdraw the claims may be liable for the attorneys' fees and costs, up to $1,000.00 USD, that Linden Lab incurs as the result of the improper filing.<br />
<br />
==What law applies to a legal dispute that I may have with Linden Lab?==<br />
<br />
California law governs Residents' relationship with Linden Lab.<br />
<br />
==What if I do not agree to the updated TOS?==<br />
<br />
Residents who do not agree should decline the updated TOS and are prohibited from using Second Life.<br />
[[Category:Legal Questions]]<br />
[[Category:Policies]]<br />
[[Category:Policies]]<br />
[[Category:FAQs]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=How_do_I_fly_higher%3F_I_want_to_see_what%27s_on_top_of_this_building.&diff=562043How do I fly higher? I want to see what's on top of this building.2009-10-06T23:23:42Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
To fly upward, you may hold '''Page Up''' or hold the '''E''' key (the Chat bar should be closed; otherwise you'll end up saying "EEEEE" a lot). Also, selecting '''View &gt; Movement Controls''' from the menus at the top of the Second Life window opens controls that you may find helpful.<br />
<br />
An unassisted avatar can fly to slightly less than 200m above ground level, and may fly higher with the help of a scripted object or vehicle. An avatar's maximum ''hover'' height, without input from you, is 50m plus the height of the terrain. If you are above this altitude and you stop trying to actively fly higher, you will sink to the maximum hover height.<br />
<br />
===Video Quick Tip===<br />
<br />
<videoflash>Nkco7VmyDXI|640|480</videoflash><br />
<br />
===Other tricks to get up high!===<br />
<br />
<videoflash>XFHF2CpXovQ|640|480</videoflash><br />
[[Category:Moving Around]]<br />
[[Category:Controls and Getting Around]]<br />
[[Category:Menus and Controls]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=How_do_I_quit_or_leave_a_group%3F&diff=562023How do I quit or leave a group?2009-10-06T23:23:41Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
You can leave a Second Life group at any time, whether the group no longer suits you, you don't like the group's charter anymore, or you just want to reduce the number of groups you have.<br />
<br />
Important things to note, though:<br />
<br />
* Any land contribution you have given a group (to pay for group-owned land) is removed when you leave the group.<br />
* Leaving a group removes your ability to edit, change, or sell land held by the group.<br />
* Leaving a group makes you ineligible for any pending group dividends.<br />
* After you've left a group, no trace remains on the group's membership list. Group notices and voting proposals that mention your name are not edited automatically, and continue to exist for the usual timespan.<br />
<br />
To leave a group:<br />
<br />
# Select '''Edit &gt; Groups''' from the menus at the top of the Second Life window. <br />
# Click on the name of the group you wish to leave. <br />
# Click '''Leave'''.<br />
<br />
{{KBnote|''' If you're the last owner of a group, you are not allowed to leave it without appointing another person to the role of group owner first.<br />
}}<br />
[[Category:Disputes Between Residents]]<br />
[[Category:Making Your Avatar Fancy]]<br />
[[Category:Educators]]<br />
[[Category:General Avatar Information]]<br />
[[Category:Business Owners]]<br />
[[Category:Groups]]<br />
[[Category:Groups]]<br />
[[Category:Landowners]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Https://wiki.secondlife.com/wiki/Linden_Lab_Official:Holiday_2009_Land_Auction_FAQ&diff=561983Https://wiki.secondlife.com/wiki/Linden Lab Official:Holiday 2009 Land Auction FAQ2009-10-06T23:23:39Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>What follows are some frequently asked questions about the [http://blog.secondlife.com/2008/12/12/win-a-space-in-the-second-life-holiday-marketplace Holiday Marketplace auctions] of 2008.<br />
<br />
==What am I getting?==<br />
<br />
You're getting a parcel of land in the Second Life&reg; virtual world on one of our four special Holiday Marketplace Regions. It's yours for 60 days with no recurring land fees.<br />
<br />
==How can I get one of these parcels?==<br />
<br />
To get one of the Holiday Marketplace parcels, win one of the auctions that will begin on Monday, December 15th. You must be a Resident with a Premium account in good standing at least 14 days old. Auctions are accessible via the [http://usd.auctions.secondlife.com/ Second Life Land Auction] block.<br />
<br />
==What can I use my parcel for?==<br />
<br />
You can use your parcel for basically anything you want, as long as its content is PG and conforms to our [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards]. Some possible uses include:<br />
<br />
* Setting up a shop (feel free to direct shoppers to locations in other Regions)<br />
* Holding events and gatherings<br />
==Do I ''own'' the parcel?==<br />
<br />
Technically, no; think of it as a 60-day rental with all the rights implied thereby -- also, there's no additional rent beyond whatever the auction price was.<br />
<br />
==Can I resell the parcel after I get it?==<br />
<br />
We're sorry, but no; Holiday parcels cannot be transferred or deeded to a group. At the end of 60 days they will revert to Linden Lab ownership.<br />
<br />
==How much does my parcel cost me, total?==<br />
<br />
Whatever you paid for the auction is the total cost of the parcel. There are no recurring land fees for Holiday Marketplace parcels.<br />
<br />
==How many plots are available? How big are they?==<br />
<br />
There are 57 plots of several different sizes available, varying in size from 512m<sup>2</sup> to 4000m<sup>2</sup>.<br />
<br />
==What is the prim allowance for the parcels?==<br />
<br />
The prim allowance is the same as for all regions (65,536m<sup>2</sup> = 15,000 prims).<br />
<br />
==Can I keep my parcel forever?==<br />
<br />
We're sorry, but no; the Holiday Marketplace Regions are a special seasonal event. After 60 days, all Holiday Marketplace land will be returned to Linden Lab and all remaining objects returned to parcel owners.<br />
<br />
==What's this about a "limited edition holiday gift package"?==<br />
<br />
It's a surprise! But we can say that it's a physical object that will require auction winners to have an address on file outside of Second Life (such as a residence or office) in order to rez. This address will be verified by Linden Lab after the auctions are complete.<br />
<br />
==Is this parcel auction officially connected to Winterfaire?==<br />
<br />
Not really, although this auction is conducted with the same sort of holiday spirit in mind, and there may be Winterfaire-related events held on Holiday Marketplace Regions.<br />
[[Category:Creators]]<br />
[[Category:Information for Landowners]]<br />
[[Category:Landowners]]<br />
[[Category:FAQs]]<br />
[[Category:Business Owners]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Someone_else_has_my_password;_I_may_have_been_the_victim_of_fraud.&diff=561963Linden Lab Official:Someone else has my password; I may have been the victim of fraud.2009-10-06T23:23:39Z<p>Yoz Linden: 1 revision</p>
<hr />
<div><br />
<br />
==How do I know if my account was compromised?==<br />
<br />
* If you cannot access your account<br />
* If you suddenly notice a reduced available balance on the payment source you have on file.<br />
==What should I do?==<br />
<br />
Contact us immediately!<br />
<br />
Here are the steps:<br />
<br />
# Login to the [http://www.secondlife.com/support Support Portal]. (If you cannot log into your account, use our Guest Access Log In.) <br />
# Click the '''Submit a Ticket''' link. <br />
# In the '''Ticket Type''' Field, select '''Special Questions &gt; Basic Account or Guest Login''' from the dropdown list. <br />
# Select '''My account has been shut off and I don't know why'''. <br />
# Fill in the rest of the fields as directed. <br />
# Copy the Tracking Number for your new ticket. <br />
# You'll receive an email containing your ticket information. <br />
# Call the Fraud number: 800-860-6990<br />
<br />
==How will Linden Lab resolve my compromised account?==<br />
<br />
First, Linden Lab will place your account on hold, and investigate the relevant transactions. This may take a few days in some cases. Once we have concluded the investigation, we will send you an email explaining our conclusion and explaining the action that will be taken with respect to your account. As a reminder, all transactions involving L$ are subject to Linden Lab's [http://secondlife.com/corporate/tos.php Terms of Service].<br />
[[Category:Miscellaneous]]<br />
[[Category:My Account]]<br />
[[Category:General Abuse and Griefing Information]]<br />
[[Category:Billing Issues]]<br />
[[Category:The system is behaving strangely]]<br />
[[Category:Security Alerts]]<br />
[[Category:I&#39;m having account problems]]<br />
[[Category:Account Questions]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Creating_bug_reports_and_feature_requests_in_the_Public_Issue_Tracker&diff=561903Creating bug reports and feature requests in the Public Issue Tracker2009-10-06T23:23:36Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
==<br />
<br />
==<br />
<br />
If you feel lost and don't know where to begin, see the starter guide on the blog, "[http://blog.secondlife.com/2007/07/05/how-to-report-bugs-better/ How to report bugs better]".<br />
<br />
==Stay recent==<br />
<br />
You can check the [[Category:Release Notes|Release Notes]] to stay current with recent changes to Second Life. Sometimes you may discover the context around a new bug, or find that a change was intentional. For example, not being able to set content permissions to both no-transfer and no-copy is a feature, not a bug.<br />
<br />
You should also make sure your video drivers are up to date. These are normally obtained from the website of your graphics hardware manufacturer, usually either the [http://www.nvidia.com/content/drivers/drivers.asp NVIDIA official site] or the [http://ati.amd.com/support/driver.html ATI official site].<br />
<br />
==Determine if the issue has already been submitted==<br />
<br />
Avoiding duplicate issues is very important. Sorting through duplicates wastes time and effort for both Linden Lab and fellow Residents, and it causes bugs and feature proposals to seem like they are getting less attention. It is more effective to concentrate efforts on the same problem in a single issue, especially since more-active issues get a higher priority.<br />
<br />
Once you are logged into the Public Issue Tracker, your Dashboard gives you access to search filters which can help you find the most up-to-date information on submitted issues. For example, you can choose filters to show all unresolved (unfixed or untested) issues within each project, then begin a text search on those results by editing the filter. Of course you may create and save your own filters at any time, or simply run a new search from the '''Quick Search''' box. Either way, it is best practice to search for issues you wish to report before submitting them!<br />
<br />
If you find that your issue has already been submitted, you can still do several things to help:<br />
<br />
* Leave a comment containing additional information or details<br />
* If it is a bug, add another way to reproduce the bug<br />
* Vote for the issue to express that you feel it is important.<br />
<br />
The more information there is about a specific issue, the better chance it has for a quick resolution.<br />
<br />
==Guidelines==<br />
<br />
* When describing the bug, try to omit Resident names or other personally identifying information. If the bug seems to affect only you, or very few people, you should consider contacting technical support via the [https://secondlife.com/support Support Portal].<br />
* Provide detailed reproduction information when describing a bug. For example, instead of saying "I crash when I upload random things", the reproduction should be laid out in specific steps:<br />
*: Example:<br />
*:# Click File &gt; Upload Image ($L10)...<br />
*:# Choose a .TXT file instead of a .JPG file<br />
*:# Click the Open button<br />
<br />
: Try sending your writeup to a friend, to see if they can follow it! If your friend can follow the steps, chances are we can too!<br />
<br />
* Consider uploading snapshots, images, videos, crash logs, or any other related files (10MB limit each). In the above example, you might consider uploading the files you tried to upload that caused the crash.<br />
<br />
==Submitting a bug==<br />
<br />
To create a new bug in the Public Issue Tracker, do the following:<br />
<br />
# Click the '''Create New Issue''' link in the blue navigation bar towards the top of the screen. (If you don't see this, make sure you are logged in to JIRA.)<br />
# On the first page:<br />
#* Select a '''Project''' that most closely matches the kind of bug you are submitting - see [[Projects and Components in the Public Issue Tracker (JIRA)|Projects and Components]].<br />
#* Select '''Bug''' as your '''Issue Type'''.<br />
#* Click '''Next'''.<br />
# On the last page:<br />
#* The '''Basic''' tab of this page has the fields you'll need when submitting a bug:<br />
#** Enter a concise but descriptive '''Summary''' (title) for the issue.<br />
#** Select the '''Priority''' (severity) of the bug. For example, a '''Showstopper''' bug might render the program useless, but a '''Nice to have''' bug fix might be merely cosmetic. Click the icon next to the dropdown for more details.<br />
#** Select '''Components''' that narrow the scope of the bug. You can select multiple components by Ctrl-clicking.<br />
#** Choose the '''Affects Versions''' that the bug affects. You should only select those versions where you have observed the bug, and only select a "first look" version if the bug ''only'' applies to First Look.<br />
#** Describe the '''Environment''' in which the problem occurs, if you have noticed that the bug only occurs with certain hardware or software configurations. One way to find such information is from the Help &gt;About Second Life window on your viewer menu. If configuration doesn't seem to matter, you can leave it blank.<br />
#*** For example, "Only happens with Mac OS X 10.4.1," or "Seen only with NVIDIA GeForce Go 7800 card," etc.<br />
#** Enter a detailed '''Description''' of the issue, and be sure to include:<br />
#*** Steps to reliably reproduce the bug (how to make the bug happen), or at least a description of what precedes the bug in detail. Try to make the steps as simple as possible while still being specific and reliable. Simpler reproductions make it easier to narrow down the causes.<br />
#*** Observed results (what happens when the bug occurs)<br />
#*** Expected results (what behavior you would have expected instead)<br />
#*** Anything else which you think might help, such as forum links or blog posts.<br />
#*** Again, be as detailed as possible without including personal information!<br />
#** If you have a screenshot or video of the bug, or any other relevant file, you can attach it under '''Attachment'''. Note that there is a 10MB size limit per file. You can also attach additional files later.<br />
#* The '''Advanced''' tab of this page has some more fields you can fill out if you're submitting a fix or want to add more detail.<br />
#** The '''Linden Lab Issue ID''' should generally be left blank unless you are a Linden. If you want to reference a support ticket number, it should be entered in the description, not here.<br />
#** If you are a programmer and are attaching a patch for the source code, enter the '''Source Version''' the patch is against and check the '''Patch Attached''' box.<br />
# Finally, click '''Create''' to create the new issue.<br />
<br />
==Submitting a new feature==<br />
<br />
The process is similar to submitting a bug, with the following differences:<br />
<br />
* Select '''New Feature''' instead of '''Bug''' as your '''issue type'''.<br />
* Instead of a reproduction, clearly describe the desired implementation and functionality of the new feature. Make sure it hasn't already been done âââ‰â¬Â you can refer to [http://www.slhistory.org/index.php/Release_Notes release notes] for historical context and [http://status.secondlifegrid.net/ read our status page] to learn more about what we're doing next.<br />
<br />
==Return to check on issue status==<br />
<br />
Linden Lab will review issues submitted to jira.secondlife.com on a regular basis. The engineering team may require additional information from the issue reporter, or other contributors, so reviewing all your created/commented issues regularly is useful while email support in JIRA is disabled.<br />
<br />
When issues are resolved internally the external site will be updated as well, so check your issues for changes on a regular basis.<br />
<br />
==How to report a bug - Video Tutorial==<br />
<br />
Watch a [[How to report a bug - Video Tutorial|video tutorial]] which demonstrates the steps above for creating a bug report in our Public Issue Tracker.<br />
[[Category:Bugs and the Public JIRA]]<br />
[[Category:Public Issue Tracker (JIRA)]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Policy_on_ad_farms_and_network_advertisers&diff=561883Linden Lab Official:Policy on ad farms and network advertisers2009-10-06T23:23:35Z<p>Yoz Linden: 1 revision</p>
<hr />
<div><br />
<br />
We'd like to talk about the specifics of what we're doing with respect to advertising on the Linden Mainland.<br />
<br />
{{KBnote|''' Please keep in mind that this article is about the Linden Mainland, and does not apply to Private Regions (islands), where the Estate owners choose how they wish to run their own Estates.<br />
}}<br />
<br />
==What is networked advertising?==<br />
<br />
A number of you have raised concerns over going the formal license route, and we, too, have come to the conclusion that this isn't the best option. So instead, we're going to cover ad farming activities (and the operating of network advertising businesses) under our [http://secondlife.com/corporate/tos.php Terms of Service], specifically as Harassment under clause 4.1.<br />
<br />
{{KBnote|''' By "networked advertising", we're specifically talking about the use of multiple parcels on multiple Regions for the primary purpose of advertising, usually on behalf of other inworld businesses or organizations outside of Second Life.<br />
}}<br />
<br />
==Advertising rules and restrictions==<br />
<br />
If you operate a networked advertising business on the Linden Mainland that breaks any one of the following rules or restrictions, we will consider it to be a Terms of Service violation leading to disciplinary action that can include account suspension and loss of land.<br />
<br />
* We will allow no more than 50 advertising locations owned by a single individual, whether personally owned or via groups in which you are a member, unless you have written permission from Linden Lab to exceed this limit. The use of alt accounts/groups to circumvent this restriction will be considered a violation.<br />
* In addition to this cap, we will allow no more than one advertising placement by an individual in any single Region.<br />
The advertisements themselves should conform to the following rules and restrictions:<br />
<br />
* Ads should be grounded to the terrain, not floating.<br />
* Ads should extend no higher than 8m from the ground.<br />
* No rotating, no flashing content and no particles.<br />
* No unsolicited dispensing of IMs, notecards, landmarks, or content.<br />
* No light sources or glow (full bright is acceptable however).<br />
* Advertising hoardings should be Phantom.<br />
* Ads must be clearly PG in nature.<br />
* No sound and no temp-on-rez content.<br />
* Ban lines should be switched off.<br />
We will expect that all advertisers make a reasonable attempt to fit in with the local area and to respect the wishes of Residents living nearby wherever possible. Linden Lab can and will, at its sole discretion, ask you to remove or modify any advertising-related content that we feels is unacceptable. If you, using alternate accounts, groups or other methods, attempt to create a networked advertising business that extends over 50 placements without our express permission, we will consider that to be a violation and you will be asked to remove them.<br />
<br />
Finally, if we review your land transactions and deduce that your primary purpose in placing the advertising content is to force the sale of land rather than genuinely advertise, this will be deemed to be a violation and dealt with accordingly.<br />
<br />
==Frequently Asked Questions==<br />
<br />
This section answers some questions that came up in the forum posts following the initial announcement of this policy change on the [https://blogs.secondlife.com/index.jspa Official Second Life Blogs].<br />
<br />
===I have several Mainland store locations with signs above them; am I affected?===<br />
<br />
No. This policy change is not aimed at personal advertising of this kind.<br />
<br />
===I run a business that places ads inside clubs and malls; am I violating this policy?===<br />
<br />
We call this "affiliate advertising", and it's unlikely to be affected, especially when it's inside venues and therefore not adversely affecting the local area.<br />
<br />
===Does this policy include signs advertising parcels for sale?===<br />
<br />
Yes it does.<br />
<br />
===Why don't you just disallow small parcels?===<br />
<br />
While we might restrict parcel join/divide on new zoned areas in the future, this type of restriction isn't practical for existing Mainland. There are legitimate uses for small parcels, and with such a limit in place, complex parcel shapes would be impossible to ever divide.<br />
<br />
The issue here is not advertising, or parcel sizes; it's the way both are used together to the detriment of the Mainland as a whole.<br />
<br />
===What about land cutting?===<br />
<br />
There is no doubt that this is also a problem. If the removal of ad farms doesn't substantially reduce land cutting, we will look at other options.<br />
<br />
===How do I appeal this decision or your enforcement of it?===<br />
<br />
You can read about submitting an appeal in this article: [http://d3.parature.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=4830 My account has been unfairly or incorrectly suspended or permanently closed by Linden Lab -- how can I appeal this decision?]<br />
<br />
===What are you doing about other forms of land extortion and harassment?===<br />
<br />
This concerns us very much, and we'll be doing all we can to remove this behavior. Deliberately misleading other Residents (for example, with donut-shaped parcels) is unacceptable. You can expect that any practices that negatively impact the Mainland will be looked at and stopped where possible.<br />
<br />
If you're engaged in something that clearly has a negative and widespread impact on the Mainland experience, we will request that you stop.<br />
<br />
[[Category:Policies]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:I_bought_Linden_Dollars_(L$)_but_my_balance_hasn%27t_updated!&diff=561863Linden Lab Official:I bought Linden Dollars (L$) but my balance hasn't updated!2009-10-06T23:23:35Z<p>Yoz Linden: 1 revision</p>
<hr />
<div><br />
<br />
If you bought Linden Dollars (L$) through the [https://secure-web10.secondlife.com/currency/ LindeX], they should show up in your balance more or less instantly. So if they don't appear instantly (or after a reasonable wait time), something may be wrong.<br />
<br />
As a first step, you may want to check the [http://blog.secondlife.com/ Second Life Blog] to see if we're already aware of the problem and working to fix it. Chances are good that if it's something that affects a large number of Residents, we're already on it.<br />
<br />
If it looks like a problem that only affects you, you should probably file a support ticket.<br />
[[Category:LindeX]]<br />
[[Category:My Account]]<br />
[[Category:I&#39;m having a payment issue]]<br />
[[Category:Billing Issues]]<br />
[[Category:The system is behaving strangely]]<br />
[[Category:Linden Dollars (L$)]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Linden_Lab_Official:Can_I_rotate_my_Private_Region%3F&diff=561843Linden Lab Official:Can I rotate my Private Region?2009-10-06T23:23:35Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>There may come a time when you wish to rotate your Private Region (also called a Private Island, or a "sim"). For instance, you may wish to have the North side of your island face West, so that you can connect to a friend or business partner's Region. Unfortunately, we do ''not'' have the ability to rotate your Private Regions, so make sure to plan your layout carefully!<br />
[[Category:Estates and Private Regions]]<br />
[[Category:Information for Landowners]]<br />
[[Category:Landowners]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=Finding_your_chat_logs_-_Video_Tutorial&diff=561823Finding your chat logs - Video Tutorial2009-10-06T23:23:35Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
<br />
This video tutorial discusses how to locate your chat logs recorded by the Second Life&reg; viewer, as well as how to turn chat logging on and off.<br />
<br />
<videoflash type="blip">gZsWu_ZRAA|640|480</videoflash><br />
<br />
For more information about Chat and IM logs, see:<br />
<br />
* [[Linden Lab Official:How do I log chat and instant messages|How do I log chat and instant messages?]]<br />
* [[Where are my chat and IM logs stored|Where are my chat and IM logs stored?]]<br />
[[Category:Videos]]<br />
[[Category:Knowledge Base]]</div>Yoz Lindenhttps://wiki.secondlife.com/w/index.php?title=What%27s_a_relog%3F&diff=561803What's a relog?2009-10-06T23:23:34Z<p>Yoz Linden: 1 revision</p>
<hr />
<div>{{KBmaster}}<br />
It's a term for the action of selecting '''File &gt; Quit''', and then opening Second Life again. It's a first step to solving many problems, so if you don't know where else to start, try a relog.<br />
[[Category:Troubleshooting]]<br />
[[Category:Technical Issue]]<br />
[[Category:General Second Life Software Information]]<br />
[[Category:Knowledge Base]]</div>Yoz Linden