Jump to content

animats

Resident
  • Posts

    6,144
  • Joined

  • Last visited

Posts posted by animats

  1. Quote

    "This creature ... would engage the visitor in conversation where the visitor would ask a question and get an answer. "

    I've been doing some work on that. I'm looking into bolting the Rasa system onto Second Life. But I'm months away from having anything useful.

    Rasa is intended for customer-support chatbots. It's open source, and it may be possible to bash it into being an NPC engine. I loaded the GTFO frequently asked questions list into it, and it gives you back the most relevant answer for whatever question you ask. It's good at matching sentences to ones with the same meaning, and uses machine learning techniques to do it. But I only have about 20 Q and As to work with, so if you ask something not covered, you get a mostly bogus answer. It knows it doesn't have a good match, and can be set to respond with something like "I don't understand". This sort of thing needs hundreds of examples to work well, and someone has to monitor its errors for the first few thousand requests to train it. So it needs infrastructure and a staff to feed it data.

    This sort of thing is intended for a business faced with hundreds of thousands or millions of support requests every day, and wants to handle 99% of them automatically, while diverting the hard cases to a call center. So you have lots of text to work with. For a NPC that gets a few users a day, it's going to take a long time to get enough interactions to train the system. It's overkill for Second Life, but interesting to work on during lockdown.

    If you have some good question and answer sets, let me have a copy and I'll play with them a bit. Best to have three or four ways of stating each question,  and about a hundred answers. Then there's enough data for the machine learning system to get started.

    • Like 1
  2. 9 minutes ago, Lucia Nightfire said:

    It's KVP, not KPV, heh

    There was this feature which would have given us synchronous access to "prim memory", something unique to SL. It's why developers couldn't wrap the heads around it, heh.

    Re-propose after "cloud uplift". The server processes are still in a 32 bit address space, right? The original SL hardware from 17 years ago had to be 32-bit. Almost everything in AWS is 64 bits now, with more address space. So using more space after "cloud uplift" becomes easier.

  3. I wish we had some way to save more data in ordinary objects.

    (Experiences get a key-value store, but regular prims get nothing. They can't even write notecards. You can store data in lists, but that eats up script memory, so you can't store much data. Using an external server means the product requires that external server stay up forever.)

  4. Most of what Firestorm writes is to the cache. I have the Firestorm cache, but nothing else, on a small SSD, which helped performance considerably. There's almost no disk I/O on the main disk after that.

    You get to set where Firestorm puts its cache in Preferences, so that's easy to do.

  5. More Metaverse coverage in the press: TechCrunch talks about Wave, which is yet another system for virtual concerts.  Not much of an article except for one part: "The Wave has features for its virtual reality users that allow them to communicate and enter private virtual spaces where they can share unique visual experiences — Arrigo likens it to taking virtual drugs or having a virtual drink. There’s no reason why a venue couldn’t sell those experiences to concert-goers for a fee." But, of course, no sex.

    Forbes, in another article, addresses whether the metaverse should be story-driven.

    "(Metaverse-like) online experiences have been available for some time. Yet, these virtual worlds have failed to approach the popularity of modern video games. Linden Labs, the developer of Second Life, which began in 2003, intentionally differentiates its platform from video games by having "no set objective." In short, it lacks the story-driven goals of modern video games."

    "Early video games were not heavily story-driven and were targeted to a rather narrow demographic of young male gamers. This is changing as modern video games are delivering story-driven content in an expanding variety of genres and gameplay types that appeal to a broader audience than the traditional gamer. By comparison, on-demand cable and OTT content is almost exclusively story-driven and attracts a larger audience than AAA games."

    The downside of having a story is that, after a while, the users have seen the story. So the story line needs new episodes regularly, which gets expensive. Nostos just ran into this. It was supposed to be a big open-world metaverse built on the Spatial OS backend. It's really just a grinding/quest MMO that takes experienced gamers about three hours to finish. Great artwork, though.

    There's a place for big worlds between story-driven and having no set objective. GTA V Online lives there. It has about the same number of concurrent users as SL, interestingly.  Drivers of SL, and GTFO, are low-key examples of that model. They live in the big world, not their own dedicated world, but have game-like structure. Interesting to think about what else could be done in that direction.

     

  6. LL put in one kind of synchronized viewing in that new project viewer for a special event - the capability of watching live streams. That will go into all viewers soon, Oz mentioned. If everyone is watching the same live stream, they should be in sync. So you can watch live sports as a group, if you can solve the rights problem.

    Sports bars, here we come?

    • Like 1
    • Thanks 1
  7. On 6/8/2020 at 8:48 AM, Whirly Fizzle said:

    Which of the two viewers has better performance probably depends on if the users system is GPU or CPU bound.

    This change in Alchemy isn't something we could do in Firestorm.  The consequences of the optimizations Alchemy did would stop users on older systems being able to run the viewer at all - it wouldn't even launch. I don't think it would run on any Windows 7/8 system either, no matter how new the hardware was.
    Unfortunately there are a large proportion of SL users running on outdated OS with older hardware.

    So what is Alchemy doing in the GPU?

  8. 1 hour ago, brodiac90 said:

    Me, my brother Tyler and our mum went sailing on our Loonetta yacht. We set sail from our own house boat and then headed South down the continent some 100 sims to see a friend at their house boat, all before sailing back. 

    Sailing with Mum

    7bc6c13e96c075f2691aad6ddc55c5c8.jpg

    Who's steering the boat?

    Wow, 100 sims with 3 avatars. Did you do that without region crossing failures?

    • Like 1
  9. Oh, I could really use that. I think Havok has that function, as "cast beam".

    Finding out if a space is empty takes too many ray casts. Here's what I do in my NPCs to check if an NPC-sized cylinder is empty.

        if (obstacleraycasthoriz(p0+halfheight+fwdoffset, pc + halfheight)) { return(-1.0); }// Horizontal cast at mid height, any hit is bad
        if (obstacleraycasthoriz(p0+fullheight+fwdoffset, pc + fullheight)) { return(-1.0); }// Same at full height to check for low clearances
        if (obstacleraycasthoriz(p0+halfheight+fwdoffset+sideoffset, pa + halfheight)) { return(-1.0); }// Horizontal cast at mid height, any hit is bad
        if (obstacleraycasthoriz(p0+halfheight+fwdoffset-sideoffset, pb + halfheight)) { return(-1.0); }// Horizontal cast at mid height, any hit is bad
        //  Crosswise horizontal check.
        if (obstacleraycasthoriz(pa+halfheight,pb+halfheight)) { return(-1.0); }   // Horizontal cast crosswize at mid height, any hit is bad
        //  Downward ray casts only.  Must hit a walkable.
        //  Center of cell is clear and walkable. Now check upwards at front and side.
        //  The idea is to check at points that are on a circle of diameter "gPathWidth"
        if (obstacleraycastvert(pa+fullheight,pa-mazedepthmargin) < 0) { return(-1.0); }   
        if (obstacleraycastvert(pb+fullheight,pb-mazedepthmargin) < 0) { return(-1.0); } // cast downwards, must hit walkable
        if (obstacleraycastvert(pc+fullheight,pc-mazedepthmargin) < 0) { return(-1.0); } // cast downwards, must hit walkable
        if (obstacleraycastvert(pd+fullheight,pc-mazedepthmargin) < 0) { return(-1.0); } // cast at steep angle, must hit walkable
        //  Need to do all four corners of the square. Used when testing and not coming from a known good place.
        if (obstacleraycastvert(pd+fullheight,pd-mazedepthmargin) < 0) { return(-1.0); }; // cast downwards for trailing point

    10 calls to llCastRay for each square as the maze solver plans its way around an obstacle. The script doing this sometimes runs for two minutes on hard cases. There are horizontal ray casts to catch vertical obstacles, and vertical ray casts to catch horizontal obstacles. If a ray cast starts inside an obstacle, it doesn't see it, so all this is necessary. Even with all this, it can miss a thin pole.

  10. 1 hour ago, Twisted Pharaoh said:

    Speaking of llRequestSecureURL(), I got an issue recently:

    
    curl https://simXXXXX.agni.lindenlab.com:12043/cap/4700d12c-7c84-580a-892c-1f997899a73b
    curl: (60) SSL certificate problem: unable to get local issuer certificate
    More details here: https://curl.haxx.se/docs/sslcerts.html
    
    curl failed to verify the legitimacy of the server and therefore could not
    establish a secure connection to it. To learn more about this situation and
    how to fix it, please visit the web page mentioned above.

    What's using "curl"?

    You probably need a version of "curl" that uses a more recent root certificate store. See:

    https://jira.secondlife.com/browse/BUG-228848

    https://www.ssl.com/blogs/addtrust-external-ca-root-expired-may-30-2020/

     

     

  11. There are places inside the viewer code that may think they know a little too much about SL URLs:

    grep "secondlife.com" *.cpp
    fsgridhandler.cpp:const char* MAIN_GRID_SLURL_BASE = "http://maps.secondlife.com/secondlife/";
    fsslurl.cpp:const char* LLSLURL::MAPS_SECONDLIFE_COM         = "maps.secondlife.com";
    fsslurl.cpp:                // (or its a slurl.com or maps.secondlife.com URL).
    llappviewer.cpp:        LL_ERRS() << "Viewer failed to find localization and UI files. Please reinstall viewer from  https://secondlife.com/support/downloads/ and contact https://support.secondlife.com if issue persists after reinstall." << LL_ENDL;
    llappviewer.cpp:    // https://releasenotes.secondlife.com/viewer/2.1.0.123456.html
    llfloaterland.cpp:    // the search crawler "grid-crawl.py" in secondlife.com/doc/app/search/ JC
    llfloatermodelpreview.cpp:    //    validate_url = "http://secondlife.com/my/account/mesh.php";
    llfloatermodelpreview.cpp:        validate_url = "http://secondlife.com/my/account/mesh.php";
    llfloatermodelpreview.cpp:            if (num_hulls > 256) // decomp cannot have more than 256 hulls (http://wiki.secondlife.com/wiki/Mesh/Mesh_physics)
    llimprocessing.cpp:        indx = msg.find(" ( http://maps.secondlife.com/secondlife/");
    llmarketplacefunctions.cpp:        std::string domain = "secondlife.com";
    llmeshrepository.cpp://       http://wiki.secondlife.com/wiki/Mesh/Mesh_Asset_Format)
    llmeshrepository.cpp:// See wiki at https://wiki.secondlife.com/wiki/Mesh/Mesh_Asset_Format
    llslurl.cpp:const char* LLSLURL::MAPS_SECONDLIFE_COM         = "maps.secondlife.com";
    llslurl.cpp:                // (or its a slurl.com or maps.secondlife.com URL).
    llstartup.cpp:        gSavedSettings.setString("MapServerURL", "http://test.map.secondlife.com.s3.amazonaws.com/");
    llviewercontrol.cpp:    // AO - Phoenixviewer doesn't want to send unecessary noise to secondlife.com
    llviewercontrol.cpp:    //if((std::string)test_BrowserHomePage != "http://www.secondlife.com") LL_ERRS() << "Fail BrowserHomePage" << LL_ENDL;
    llviewernetwork.cpp:const std::string SL_UPDATE_QUERY_URL = "https://update.secondlife.com/update";
    llviewernetwork.cpp:const std::string MAIN_GRID_SLURL_BASE = "http://maps.secondlife.com/secondlife/";
    llviewernetwork.cpp:const std::string MAIN_GRID_WEB_PROFILE_URL = "https://my.secondlife.com/";
    llviewernetwork.cpp:    // This file does not contain definitions for secondlife.com grids,
    llviewernetwork.cpp:                  "https://secondlife.com/helpers/",
    llweb.cpp:        substitution["GRID"] = "secondlife.com";
    llweb.cpp:        //boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com)$", boost::regex::perl|boost::regex::icase);
    llweb.cpp:        boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com|secondlifegrid.net|secondlife-status.statuspage.io)$", boost::regex::perl|boost::regex::icase);
    llwebprofile.cpp: *    -> GET https://my-demo.secondlife.com/ via LLViewerMediaWebProfileResponder
    llwebprofile.cpp: *    -> GET "https://my-demo.secondlife.com/snapshots/s3_upload_config" via ConfigResponder
    llxmlrpctransaction.cpp:    std::string uri = "http://support.secondlife.com";

    Some of those are OK, and some may need attention.

     

  12. The game rating systems for kids won't allow unmoderated chat below age 12. So SL is out.

    Animal Crossing is an option. Chat is automatically censored, and it's all saturated colors and rounded corners, so it's considered kid-friendly. Animal Crossing seems nice, but it is a harsh world - you start out in debt and have to work your way out, paying off Tom Nook, the landlord. Preparation for real life.

     

     

×
×
  • Create New...