nyuuzyou/wikis huggingface dataset:
Gesture Recognition

Update - 2010 January: this project wasn't implemented in 2009 and it appears that Linden Lab has no more short-term plans for it.
= Gesture Tracking =
Goal: Add the ability for a PC camera to detect head and upper body movements and relay them to your own avatar. This is a design for a first simple project, intended as a summer intern project which will affect only the viewer/Snowglobe codebase.
== Minimal Functional Goal == 
* Nodding or shaking your head 'yes' or 'no' triggers the equivalent animation on your SL avatar.
* Relative motion of your head is captured in real time and used to animate where your avatar is looking in real time. Inotherwards, if you look up, down, left, or right, your avatar will do the same thing. 
== Design Details == 
 
Add the ability for Snowglobe viewer to listen on a port for local UDP messages containing either head position updates or animation triggers. This creates an easy way for developers to control the viewer by simply sending small network packets. This design will also keep the latency and CPU cost of the interface at a minimum. 
Write an application which accesses the PC camera, analyzes the image to detect head movement and gestures, and sends UDP packets to the viewer port. 
== Project Milestones (weekly or better) ==
* write the basic 'camera' app that can send UDP messages to the SL viewer, initially just triggered by keystrokes for testing. Modify the SL viewer to receive these packets and trigger an animation. 
* Add ability for SL viewer to receive head position information and pass it on to the lookAt point for the avatar. Again, use keystrokes for trivial testing. Verify that latency and performance is adequate/instantaneous. 
* Add ability to get frames of video from the camera. Demonstrate simplest analysis by looking for a bright light or color in frame and animating lookAt according to its location in the camera frame. 
* Add calls to openCV (or alternative library) to detect head orientation. Pass head orientation to viewer lookAt.
* Add ability to trigger animation based on data reported from the analysis library. Demonstrate nodding and shaking head. 
Extra Credit: 
* Attempt to detect other upper body gestures: Hand raised, Hand wave, Shrug shoulders. 
* Extend application to run on both mac and windows.
* Include application in the snowglobe installer package.
== Useful Links ==
* Learning OpenCV
* VRPN : Virtual Reality Peripheral Network
* D-Bus
* Keith Price Bibliography on Facial Expressions and Emotion Analysis and Description
* Tutorial on OpenCV facedetect
Thanks to Jan Ciger for providing most of those links.
== Project Log ==
LL intern will start first week of June and begin updating this page. In the meantime it would be great if someone is interested in implementing the viewer-side changes to listen for UDP packets and trigger animations and lookAt based on the data in those packets.
== See Also ==
* VWR-13713 Gesture Tracker JIRA issue
* Camera-based Input‎
Category:Snowglobe
Gestures OS

In case you'd like to know how to create a gesture, please have a look at Help:Gestures
=== Feature Design Document ===
* Gestures are assets that can trigger animations, sounds, and chat via chat or from the UI. Gestures can be triggered by pre-defined function keys or keywords (such as /bow to perform a bow).
=== Functional Spec ===
(none)
=== Test scripts ===
Animation test
* Should attach some BVH files from Poser versions 4, 5 and 6ServiceRelease1 for testing purposes.
* Add section for testing emotes in IMs.
=== Discussion for future improvements ===
(none)
=== Relationship to other features ===
 List of features that need to be tested when this feature changes, and why. 
Animations
Newbie Test - Make sure a new user has a useful collection of gestures enabled.
=== User Guides ===
(none)
GetDisplayNames

Category:Capabilities
==GetDisplayNames Capability==
===Request===
Basic syntax for getting display name data structures for a given uuid or slid:
 GET getCapability("GetDisplayNames") + "/?ids=<uuid>" [ + "&username=<slid> ... ]
 GET getCapability("GetDisplayNames") + "/?username=<slid>" [ + "&username=<slid> ... ]
You can mix and match uuids and slids in a single query, too:
 GET getCapability("GetDisplayNames") + "/?ids=<uuid>&username=<slid>" ...
Please limit request length to reasonable lengths, otherwise truncation may occur in the middle of a query parameter.
===Response===
 GET getCapability("GetDisplayNames") + "/?username=stone.linden"
 
 <?xml version="1.0"?>
 <llsd>
 <map>
 <key>agents</key>
 <array>
 <map>
 <key>username</key>
 <string>stone.linden</string>
 <key>display_name</key>
 <string>Stone Linden</string>
 <key>display_name_next_update</key>
 <date>1970-01-01T00:00:00Z</date>
 <key>legacy_first_name</key>
 <string>Stone</string>
 <key>legacy_last_name</key>
 <string>Linden</string>
 <key>id</key>
 <uuid>c06c4bd0-e8e6-4712-9918-c4d8443dd20a</uuid>
 <key>is_display_name_default</key>
 <boolean>true</boolean>
 </map>
 </array>
 
 
 <key>bad_ids</key>
 <array>
 <string>bad-uuid-here</string>
 </array>
 
 
 <key>bad_usernames</key>
 <array>
 <string>bad-usernames-here</string>
 </array>
 </map>
 </llsd>
GetRootLocalPos

While writing another function, I got thinking about the whole attachment local root rotation problem (you need to know the local rotation of the root prim in an attachment so you can use PRIM_ROTATION). I came to the conclusion with all the new(ish) functions, it is now possible to actually work this out.
# You know the position and rotation of the avatar, thanks to llGetObjectDetails.
# You know the attach point (llGetAttached)
# You know the combined rotation and position (llGetRootRotation & llGetRootPosition)
It should just be a matter of subtracting the one from the other and canceling out the attach point offsets.
Something like this should work...
<lsl>//list offsets = [ 0, <0.5, 0.5, 0.5, 0.5>, <0.0, 0.0, 0.70710678118654752440084436210485, 0.70710678118654752440084436210485>, 0, 0, 0, 0, 0, 0, <-0.5, -0.5, 0.5, 0.5> ];
vector GetRootLocalPos()
{
 if(llGetLinkNumber() <= LINK_ROOT)
 return llGetLocalPos();
 integer point = llGetAttached();
 if(point)// (((child-global - avatar-position) / rot-avatar) / rot-root) (/ attach-offset?) - child-local == root-local
 return (((llGetPos() - llGetRootPosition()) / llGetRootRotation()) / GetRootLocalRot()) - llGetLocalPos();
 return llGetRootPosition();
}
vector GetRootLocalRot()
{
 return llList2Rot(llGetLinkPrimitiveParams(!!llGetLinkNumber(), [PRIM_ROT_LOCAL]), 0);
}</lsl>
-- Strife (talk|contribs) 08:35, 6 May 2010 (UTC)
:Or you could just use PRIM_POS_LOCAL. -- Strife (talk|contribs) 12:32, 13 March 2014 (PDT)
GetTimestampOffset

This function returns llGetTimestamp() with an hour offset. It will wrap day, month and year as required. If it is passed an offset of more than 24 hours either way, it will use the offset for US Pacific Time (SL time), automatically adjusting for DST.
string sbGetTimestamp(integer intOffset) {
 // Start with December for purposes of wrapping
 list lstDays = [31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
 string strTimestamp = llGetTimestamp();
 list lstTime = llParseString2List(strTimestamp, ["-", ":", ".", "T"], []);
 integer intYear = llList2Integer(lstTime, 0);
 integer intMonth = llList2Integer(lstTime, 1);
 integer intDay = llList2Integer(lstTime, 2);
 integer intHour = llList2Integer(lstTime, 3);
 string strYear;
 string strMonth;
 string strDay;
 string strHour;
 if (intOffset == 0) { return strTimestamp; }
 if (intOffset < -24 || intOffset > 24) {
 intOffset = ((integer)llGetWallclock() - (integer)llGetGMTclock()) / 3600;
 }
 intHour+= intOffset;
 // Add a day to February in leap years
 if (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0)) {
 lstDays = llListReplaceList(lstDays, [29], 2, 2);
 }
 if (intOffset < 0) {
 if (intHour < 0) { 
 intHour+= 24;
 --intDay;
 }
 if (intDay < 1) {
 intDay = llList2Integer(lstDays, --intMonth);
 }
 if (intMonth < 1) {
 intMonth = 12;
 --intYear;
 }
 }
 if (intOffset > 0) {
 if (intHour > 23) {
 intHour-= 24;
 ++intDay;
 }
 if (intDay > llList2Integer(lstDays, intMonth)) {
 intDay = 1;
 ++intMonth;
 }
 if (intMonth > 12) {
 intMonth = 1;
 ++intYear;
 }
 }
 strYear = (string)intYear;
 strMonth = (string)intMonth;
 strDay = (string)intDay;
 strHour = (string)intHour;
 if (llStringLength(strMonth) < 2) { strMonth = "0" + strMonth; }
 if (llStringLength(strDay) < 2) { strDay = "0" + strDay; }
 if (llStringLength(strHour) < 2) { strHour = "0" + strHour; }
 return
 strYear + "-" + 
 strMonth + "-" + 
 strDay + "T" + 
 strHour + ":" + 
 llList2String(lstTime, 4) + ":" + 
 llList2String(lstTime, 5) + "." + 
 llList2String(lstTime, 6) + "Z";
 // Obviously this isn't really Z time anymore, but I left it there in case there
 // are scripts expecting it.
}
Get Profile Picture

Get Profile Picture by Valentine Foxdale
// Snippets and HTTPRequest bits were taken from:
//~ RANDOM PROFILE PROJECTOR v5.4.5 by Debbie Trilling ~
 
// Get Profile Picture by Valentine Foxdale
// optmisation by SignpostMarv Martin
// workaround for WEB-1384 by Viktoria Dovgal:
// try meta tag instead of img first, try img as backup in case meta breaks
list sides;
list deftextures;
string profile_key_prefix = "<meta name=\"imageid\" content=\"";
string profile_img_prefix = "<img alt=\"profile image\" src=\"http://secondlife.com/app/image/";
integer profile_key_prefix_length; // calculated from profile_key_prefix in state_entry()
integer profile_img_prefix_length; // calculated from profile_key_prefix in state_entry()
GetProfilePic(key id) //Run the HTTP Request then set the texture
{
 //key id=llDetectedKey(0); This breaks the function, better off not used
 string URL_RESIDENT = "https://world.secondlife.com/resident/";
 llHTTPRequest( URL_RESIDENT + (string)id,[HTTP_METHOD,"GET"],"");
}
GetDefaultTextures() //Get the default textures from each side
{
 integer i;
 integer faces = llGetNumberOfSides();
 for (i = 0; i < faces; i++)
 {
 sides+=i;
 deftextures+=llGetTexture(i);
 }
}
SetDefaultTextures() //Set the sides to their default textures
{
 integer i;
 integer faces;
 faces = llGetNumberOfSides();
 for (i = 0; i < faces; i++)
 {
 llSetTexture(llList2String(deftextures,i),i);
 }
}
default
{
 state_entry()
 {
 profile_key_prefix_length = llStringLength(profile_key_prefix);
 profile_img_prefix_length = llStringLength(profile_img_prefix);
 llSetText("Touch for this object to display your profile picture!",<0.8,0,1>,1); 
 //Note: Usage of another person's profile picture without their permission may be viewed as copyright infringement. 
 GetDefaultTextures();
 }
 touch_start(integer total_number)
 {
 GetProfilePic(llDetectedKey(0));
 }
 http_response(key req,integer stat, list met, string body)
 {
 integer s1 = llSubStringIndex(body, profile_key_prefix);
 integer s1l = profile_key_prefix_length;
 if(s1 == -1)
 { // second try
 s1 = llSubStringIndex(body, profile_img_prefix);
 s1l = profile_img_prefix_length;
 }
 
 if(s1 == -1)
 { // still no match?
 SetDefaultTextures();
 }
 else
 {
 s1 += s1l;
 key UUID=llGetSubString(body, s1, s1 + 35);
 if (UUID == NULL_KEY) {
 SetDefaultTextures();
 }
 else {
 llSetTexture(UUID,ALL_SIDES);
 }
 }
 }
}
Get source and compile

This information is for people who want to work with the source code for the viewer.
==Open Source Viewer==
Viewer code is hosted by GitHub using git.
* Second Life Viewer
Other repositories where development for future features can be seen are listed on the Release Notes Repositories page. If you have not worked with GitHub or distributed version control you may be interested in GitHub's introductory material.
=== Checking out Code ===
To clone the current release repository:
 git clone https://github.com/secondlife/viewer.git
== Compiling ==
Per platform instructions are available in these topics:
* Windows
* macOS
=== Notes ===
* Common compilation problems
=== Autobuild ===
Autobuild is the new Linden Lab framework to maintain and build everything, from viewer to 3rd party libraries. 
Instructions:
* Build Viewer With Autobuild
* Build_3rd_Party_lib_with_Autobuild
== Channels and Versions ==
Channels are just groupings of versions. Linden Lab uses channels to track and supply updates for Project, Beta, and Release Viewers separately.
On login, the combination of channel plus version is checked against a set of rules in the Viewer Version Management service. Within each channel, some versions are allowed and some are blocked. Viewers are blocked if they are too old, are unsafe (security issues),
incompatible (the protocol has been changed in some fundamental way), or
are a test version and Linden Lab only wants data from the most recent. See Viewer Integration and Release Processes for an explanation of how different versions are managed by Linden Lab.
If you are building a viewer, the Policy on Third Party Viewers requires that you set your own channel name.
See:
:;Channel and Version Requirements
::a detailed explanation and official policy on channels and versions in Second Life, and an explanation of how to set your channel name when building. 
Category:Compiling viewer
Get source and compile/ja

この情報は、ビューアのソースコードを使って何かしたい人に向けて書かれたものです。
== Snowstorm プロジェクト ==
こちらにあるのが、最新のビューアのソースコードとなります。
ビューアのソースコードは、オープンソースのリポジトリサイト、GitHub の Gitリポジトリにあります。そこにはたくさんのバージョンがありますが、多くの人が関心があるのは、おそらく以下のバージョンでしょう。
* Second Life Viewer
普通の Web ブラウザでソースコードをブラウズすることもできますし、パソコンにダウンロードすることもできますし、Mercurial を使って好きなように操作することもできます。
Viewer-Development ブランチの面白い特徴の一つに、Linden の担当者がバグフィックスや新しい機能を目の前で追加していくのを文字通り観察できる、というのがあります。
それ以外にソースコードをブラウズするやり方として、Doxygen を使う方法があります。この方法では、UML ダイアグラムも参照することができます。
必ず Creating a version control repository をご一読ください。
=== バージョン管理 ===
ビューアの開発には Gitバージョン管理システムを利用しています。現在のリリースのリポジトリをクローンするには、以下のコマンドを使ってください。
 git clone https://github.com/secondlife/viewer.git
== コンパイル ==
プラットフォームごとのコンパイル手順が、以下のページに記載されています。
* Microsoft Windowsの場合
* Mac OS Xの場合
* Linuxの場合
=== 補足 ===
* Common compilation problems ビルドでエラーが発生した場合はこちら
* Improving compilation time もっと高速にコンンパイルする方法
* LLMozLib2 LLMozLib2 のビルド
=== Autobuild ===
Autobuild は、ビューアからサードパーティーのライブラリまで、あらゆるものを管理／ビルドする Linden Lab の新しいフレームワークです。
手順の説明:
* Building the Viewer with Autobuild/ja
* Build_3rd_Party_lib_with_Autobuild
== 実行する際のヒント ==
=== チャネルとバージョンについて ===
チャネルというものは、単にバージョンをグループ化したものです。Linden Lab ではチャネルを使い、 Project、Beta、Release Vewers のそれぞれに対してアップデートの追跡／提供を行っています。
自分でコンパイルしたビューアを起動したときに強制アップデートを伝えるメッセージが出ても、あわてる必要はありません。自分が作ったものは全く消えません。(通常は)新しいソースリリースに対して変更を適用しなくても、自分のソースコードをテストできます。ここで、チャネルの出番です。
ログインするときに、チャネル名とバージョンの組み合わせが、リストと照合されます。チャネルごとに、特定のバージョンのログインが許可されたり、ブロックされたりします。ブロックされるビューアは、危険なビューア (セキュリティ問題があるもの)、非互換なビューア (プロトコルが著しく変更されたもの)、サポートが打ち切られたビューア (古すぎてサポートの提供が割に合わないとリンデン社が判断したもの)、(ここで最も関係あるものとして)テストチャネルにあるビューア(Release Candidate, First Look) です。Linden Lab は、最新バージョンのビューアで生成されるデータだけをテストしたいと考えています。
 Setting a Channel and Version for an Open Source Viewer に、ソースコードでこれを行う方法が説明されています。
Channel and Version Requirements に、Linden Lab が Second Life でチャネルとバージョンを扱う際の公式なポリシーが詳細に説明されています。
The Third Party Viewer Policy で、全てのビューアには一意のチャネル名を付けなければならない旨が規定されています。詳細は こちらを参照してください。
Category:Compiling viewer
Getting Autobuild

Autobuild is under active development, so it's recommended that you get the latest version and keep it up to date:
* CD to where you want to install autobuild. Do not have any spaces in the path to this directory.
* Do:
 hg clone http://bitbucket.org/lindenlab/autobuild
* Modify your path statement to include the autobuild \bin directory
For setting up Visual Studio to use Autobuild, see Viewer_2_Microsoft_Windows_Builds#Install_Autobuild
Getting Started As A Venue Operator

==A Note On Adding To This Page==
Please respect the fact that this wiki is for education and information, and is not here to advertise any particular performer, manager or venue. Mentions of specific venues, managers or performers will be removed. Thanks! 
== Setting up your Venue ==
* Deciding on a business model
* Designing the performance space
* In cases of private islands, optimizing the region for low lag and maximum capacity
== Operations ==
* Event Planning
* Marketing
* Event management
* Interacting with Promoters, Agents, Managers and Talent
* Dealing with griefers
Getting Started in SL

== Business ==
* Glenn's Tips for Businesses
* Frequently Asked Questions (from What Is Second Life? on secondlife.com)
* New Media Consortium's Getting Started
* Getting Started in Second Life by Random Unsung and Prokofy Neva
* How to learn about Second Life before learning Second Life (Eric Rice)
* Getting Started in LSL scripting in Second Life
* It's not an economy, it's a product - understanding Linden Lab's view of Second Life
* Half of 'Social Media Campaigns' will flop Helpful ideas when thinking about SL and advertising. 
* The Guardian UK's Second Life Survival Guide: http://www.guardian.co.uk/secondfest/story/0,,2098676,00.html
* What every Second Life newbie should know - Ten Secret Tips: http://npirl.blogspot.com/2007/12/what-every-second-life-newbie-should.html
* The technology gap in action: Second Life vs. College Instructors
== Consumer ==
* These are some useful guides to getting started for residents that provide general suggestions
* Help:Getting started in Second Life
* 30 Things Every Newbie Should Know Before Starting Second Life
* New Media Consortium's Getting Started Guide
== See Also ==
* Business Articles
Category:Marketing
Getting Your Music Right in First Life

When planning to play live music in Second Life there is certainly some unique aspects to getting your music to your fellow avatars inworld. However, this does not change the need for you to be able to get your music right in real life before streaming it in world. At some point your music needs to be "mixed" down to a stereo input to send to the streaming software. A great test to check before streaming is to record your output and listen to it. You can record it on your computer using free software like Audacity on the PC or GarageBand if you own a Macintosh. If it doesn't sound good recorded on your local computer. It's not going to get any better streamed inworld.
== The Audio Chain ==
It's a good idea to check your audio quality chain completely. At every point you have a volume setting or EQ - you should make a note of the setting. Also keep in mind the distance of your mouth and your instrument from the microphone affect the volume. You don't want to be so loud you distort, or so soft no one can hear you. Check each step of your audio chain BEFORE it gets into the computer.
== Tune Up ==
This seems obvious, but many times you will hear a performer playing out of tune. Take a minute before you go on to tune all of your instruments and get them ready for your show.
== Disaster Recovery ==
The most common disaster of course is a broken guitar string. Have a plan for that situation. Maybe have a spare instrument, or have an .mp3 on standby. Also make sure you have fresh batteries on hand for any battery powered effects and of course make sure your Internet bill is paid!
Getting your live music sounding great before you stream it inworld will protect you from losing fans based on a bad first impression. Believe it or not word-of-mouth is highly effective in Second Life and people will tell others if you are not up to the task. Don't let something as simple as settings kill your musical career.
Learn more at Getting Started As A Second Life Performer‎
Getting started/pt

= Introdução = 
Se já entrou no mundo virtual e deseja saber mais sobre as funções do Visualizador e dos menus, veja mais em Guia rápido do Second Life 
== Verifique se o seu computador pode executar o Second Life ==
O Visualizador do Second Life é executado em Windows, Mac OS e em Linux.
O Visualizador é o programa que permite acessar o Second Life, funciona como o Internet Explorer ou como o Mozilla.
Verifique se o computador atende aos requisitos do sistema. O Second Life não será executado em sistemas que não cumprem esses requisitos.
Para maiores detalhes, consulte:
* Placas de Vídeo ou também na página no site da na Linden.
== Registre-se e baixe o Second Life! ==
* 1. Inscreva-se no Second Life, criando uma conta. Caso você ainda não tenha feito isso. Contas básicas são grátis! Escolha o nome que desejar, lembrando que o nome de usuário escolhido durante o seu cadastro, não poderá ser mais alterado. Para saber mais, veja em nomes de usuários para obter maiores informações.
* 2. Baixe e instale o Visualizador do Second Life.
:* 1 Execute o Visualizador como faria com qualquer outra aplicação em seu sistema.
:* 2 Entre com o nome de usuário e a senha que você escolheu.
== Inicie a exploração o Second Life ==
Você também poderá clicar no botão Como... (ou How To em inglês) para obter uma rápida ajuda com as tarefas básicas.
Se você se perder ou ficar confuso no mundo virtual, tente pedir a ajuda de alguém. Muitos moradores experientes ficam felizes em ajudar aos recém-chegados, pois em algum momento todos precisaram de algum tipo de ajuda!
== Como obter mais ajuda ==
Pesquisar na Base de Conhecimento pode ajudar na obtenção de maiores informações sobre o Second Life. Você também pode clicar no botão de ajuda (?) em qualquer janela de ajuda sensível ao contexto.
Também poderá consultar a: Extensão da base de conhecimento localizado nesta wiki
Se você precisar de uma ajuda mais individualizada, você pode enviar um tíquete ao suporte, consulte: Como entrar em contato com o suporte ao cliente.
== Veja também ==
* Guia rápido do Second Life 
* Movimento básico controles (em inglês)
* Controles da câmera (ponto de vista) 
* Guia de destinos
* Infohubs
* Bate-papo de texto e mensagens instantâneas
Category:Ajuda Portal
Ghost Detector

The following script detects "ghosted" avatars within sensor range.
Avatars sometimes become ghosted due to a longstanding server bug. Ghosted avatars are motionless and phantom: other avatars can walk through them without colliding. A ghosted avatar cannot be teleported home using estate management tools; the error is Could not find user to teleport home / estate owner request failed: teleporthomeuser. Their visual appearance may be partially or completely grayed; a cloud; or invisible. Although seemingly present (and detectable by llSensor and visible on the Mini-Map), ghosted avatars are in fact usually logged out and unable to log in (although sometimes they will be logged in on some other region). The only way to "rescue" a ghosted avatar is to restart the region it is in.
This code takes advantage of the fact that llKey2Name returns an empty string for ghosted avatars.
default
{
 touch_start(integer total_number)
 {
 llSensor("", NULL_KEY, AGENT, 96.0, PI );
 }
 
 sensor(integer num_detected) {
 integer i;
 for (i = 0; i < num_detected; i++) {
 key k = llDetectedKey(i);
 vector pos = llDetectedPos(i);
 
 if (llKey2Name(k) == "") {
 llOwnerSay("Ghosted avatar: " +
 "secondlife:///app/agent/" + (string)k + "/about" +
 " at secondlife://" + llEscapeURL(llGetRegionName()) + "/" +
 (string)llRound(pos.x) + "/" +
 (string)llRound(pos.y) + "/" +
 (string)llRound(pos.z) + "/");
 }
 }
 }
 
 no_sensor() {
 llOwnerSay("...");
 }
}