On scripts and performance

I have learned a lot over the past two years and now sell a bunch of stuff on the Second Life Marketplace, enough to cover the tier for the 64×48 parcel in a private region where I now live. It’s nice to now be financially self-sufficient.

My main project, which is music (and / or sound-design)-related, is on hold due to lack of time, and as I found it quite satisfying to make products that others want to buy, and which bring short term income I mostly spend time on that instead.

Something that I learned a lot about through making HUDs and dialogs (pop up menus) is the importance of keeping the number of running listeners to a minimum. I released product updates to ensure all my items use listeners as sparingly as possible (in many cases llMessageLinked can be used instead). And in addition to give users the option of deleting scripts once no longer needed.

Minimising lag should be front of mind for all SL builders and scripters but I get the impression that it is not. Many mesh fashion and hair attachments are bad at this. You get lots of items where a HUD can be used to change the colour. By necessity this has a script running all the time listening for a message on a certain channel from that HUD.

I would guess that 99% of the time the buyer tries out the colours then decides on their favourite and never changes it. And if the item is copyable the owner could easily make several copies, set the colour for each copy and then delete the scripts from those copies.

Yet many of these HUDs from the biggest names do not have a button to tell an attachment to delete its scripts. And in many cases the attachment is not editable so you can’t remove the script(s) yourself.

If I – an amateur beginner – can take care of this then why not the Blueberrys and Addamses?

Linden Lab could do more to incentivise this. I can imagine an equivalent the the efficiency ‘Energy Star’ rating which rates or ranks items sold on the Marketplace according to some automated metrics:

  • Number of non-deletable scripts
  • Number of listeners detected
  • Editability
  • Complexity / LI

An interesting interactive product may well justify being script intensive due to its features. But a pair of earrings would likely not justify it. The customer could then make a more informed choice.

I’m not suggesting that these items be blocked but labelling could inform buyers, and also incentivise builders to improve their products. It would be less feasible to apply this in-world but if a creator has to do it for the Marketplace they would most likely sell the same better-optimised product at their in-world store too.

Just some thoughts anyway. Lots of small improvements can add up a lot.

In other news I just caught up with Linden Lab’s blog post from the end of 2021. What stood out for me was this paragraph:

Over the last few months we have been busy optimizing our viewer and simulator, too. We have already made good gains that we are eager to share with the community as we deploy in the new year. An area of emphasis and success for us has been improved avatar rendering; initial test results show an increase from 25fps to 55fps with our new viewer with 20 avatars in the scene.

This sounds like a most welcome viewer improvement and I look forward to this among the other upgrades due this year.

Time to reset

Hello! Yes I’m still here. Bit of an unplanned hiatus there as I tumbled down various SL rabbit holes. It’s good at that.

Needing a complete reset, I vacated the houseboat the other day and went to see what was available. Long term I will build a place from scratch but right now I needed something quick and ready to go so another Linden Home makes sense. I really just need a space where I can build things, leave code running and so on but the environment matters; I don’t want to spend my time on a vast green rectangular prim.

It seems the Linden Homes in Bellisseria are still very popular as it took a few attempts to find one available. It wouldn’t have been my first choice but I opted for one of the Victorian homes. The spot is absolutely perfect, with access to the road, and open water at the end of the garden. The landscaping around here is stunning, hats off to the Moles!

I don’t have much stuff yet – it’s very much a bachelor pad, just my cat, a couple of chairs and a fridge pretty much. But I’ve set up a little studio in the bedroom at the back. Just a simple prim desk and a comfy desk chair from Bensen. When the fog lifts the view is lovely over garden to the waterway and with the window open occasional birdsong, and the trickle of the stream adds ambiance.

Latest on the project? Well I’ve decided to slim down my music hardware and focus working with Max in Ableton Live. I’m using my Launchpad Pro as a controller and have some basic scripts talking to my SL-link API (see previous posts). So at some point I can decide which inworld parameters map to what. For example number of people in the region, some properties of them, their positions or which object they are sitting on.

Still a long way to go but it’s a fun sideline from my RL work which is also software but less creative.

Good Morning

Greetings this autumnal morning. This is one of the TOR Sunrise presets. That reminds me, I need to take a good look at EEP. That’s also working in Firestorm now right?

[Let Me Google That For You… Yes.]

I’ve not posted for a little while because RL has been busy so SL time has been light, boo… But over the weekend I’ve been back in SL a little bit. Not much to report really but I wanted to check in. Despite not being on an awful lot lately I have made quite a few new friends. It never ceases to amaze me how open people are here. Maybe it’s something to do with being behind avatars; I often find myself having surprisingly open and honest long conversations with people I have only just met. Exactly like never happens in real life! It’s as much how it affects me as everyone else.

Small things of note: I’m still living in my Bellisseria houseboat which is great. I still plan to build my own home, store and arts venue from scratch but I’m in no hurry. I’ve started to make a little bit of money from Marketplace sales which is cool as it offsets some of my living costs.

And whoa look how big my cat got!

Catch you soon, SL friends.

Mesh avatar

I have not been on SL for a while, RL is stressful what with children being off school and trying to look after them while working. But we cope because we have to.

Logged on for a few hours this afternoon and – yay – I finally got myself out of that noob avatar. Hard to believe I am already 300 days old or so. Anyway here I am now:

Mesh mesh

I chose the Signature Geralt mesh body, and the LeLUTKA Luka head with a skin from ‘Not Found’. I look younger than in RL but I do look about as young as I feel. On a good day. This still feels a bit generic so I intend to do some more customisation – a couple of tattoos, maybe a hat, some accessories and some more interesting clothes. Anyway, feeling comfy for now 🙂

Night night x

time to crash

Experimenting with Second Life data

Second Life data experiments

RL: Lockdown day 4, Isolation day… 10ish? Maybe. I hope you are all safe.

Over in SL: I’ve made some progress exploring what data I can get about users visiting my location. Essentially by getting a list of avatars in the parcel, and then for each of them using llGetObjectDetails I can get some basic info about avatars who visit.

The unit I’ve built keeps track of who has been there before and either says “Welcome” or “Welcome back” when they appear. Yes this is essentially a greeter and yes I know there are a thousand scripts for this or free units I could have got on the marketplace… but I wanted to make my own for two reasons:

  1. As a learning exercise
  2. Because my version does more than just saying Hi.

Below this inworld unit I’ve built a REST API on my web server. The ‘greeter’ checks in with this, when it loads and whenever someone arrives at or leaves the parcel. Anonymised data is then stored in a database and we can start to derive some stats, including some real-time stats.

The reason I wanted this outside of Second Life is that I wanted to enable some interesting real-world-linked stuff that consumes this data. Eventually this will feed back to sounds streamed back to the parcel, and also interactive objects in the region can respond to it too. But for now we just have some raw stats. And basic at that.

Below is a simple javascript widget that pings the API to load the stats then just prints them to the page. So now when I am at home avatars_current will change from 0 to 1. Or I can see if someone else is there while I am offline (really I don’t care if you want to snoop around my houseboat for any reason… do give my cat Lily a little stroke while you’re there though!!)

The raw API URL being used here (which is public) is https://api.lostware.uk/1.0/sl/guests/stats – this returns the raw JSON data, not really intended for displaying in a web browser.

Incidentally most of the API methods are authenticated i.e. not public. However this specific URL only returns anonymised statistical data so can be safely made public without the need to authenticate.

Some details:

  • avatars_all_time is unique avatars. i.e. The same avatar coming back is not counted again. avatars_current is how many are there right now.
  • avatars_body_shape_type_percent represents the user’s gender expression in their avatar shape. See here. Essentially 0 is a female body type, 100 is male (I have scaled it into a percentage) and anything in between is a customised shape deemed by SL to be intermediate. So far users appear to be either 0 or 100 on this scale.
  • Average ages (for current and all-time) are currently null. This is because ‘avatar date of birth’ is not available via llGetObjectDetails. I need to update the greeter to fetch this just once per new user using llRequestAgentData which is an asynchronous request. Once this is hooked up the unit will post that data separately and update the visitor records in the database with their birth date (if those users come back).
  • There is a 30 second in-memory cache on this to avoid the chance of some rogue script overloading the database.
  • Before it goes into my public venue I will implement some kind of opt-in to having your avatar data collected. However it is only going to be used for artistic purposes.

Visitor numbers are currently low because this is just code running in my houseboat in Bellisseria, and there is nothing to come and see! Nobody knows about it apart from my small number of friends (noob, remember). But eventually I will build some kind of public venue.

Isolation

Isolation

Taking a moment out just to breathe.

Back in the real world shit is – very obviously – going down. It’s a strange time, and obviously kinda scary certainly for some people. In the UK everything is weirdly calm right now but really not as quiet as I think it should be. Everyone is worried but for the first time in my life everyone (certain notorious assholes excluded) pretty much feel the same so there’s that sense of connectedness that I think is healthy (and real) too.

I have a lot of work to do right now but I imagine it will dry up at some point. So I’m going to focus on getting that paid work done and invoiced for so I have some real money in the bank. Linden Dollars alone won’t keep the lights on. This means I will have less time for my Second Life project but then if and when my proper work dries up I might have all the time in the world to play around later in the year! My kid wants me to make him a Roblox game too. Some of the stuff that goes on there is crazy!

Anyway, a bit more progress has been made – I now have a web server up and running and running its own REST API. The basic concept is that the music of lostware is to an extent generative and controlled by data. At least some of that data will come from Second Life as close to in real time as possible. And when we’re streaming live you’ll be able to hear that music live back in SL as it happens in the studio in meatspace.

It’s still a fair way off but we now have some of the basic wiring in place.

Look after each other by keeping apart, and keep washing your hands. X

Lily

Lily

So I got myself one of those KittyCats. Kinda cool. She’s pretty tiny as you can see, not even a day old. She will of course grow bigger. Less distracting than the pooch, and doesn’t need walking…

Done some more work on the API tonight, mostly on the server side. Nothing much to see on that front and won’t be for a while yet.

My avatar… Yeah I know – still the noob. I have some mesh head and body demos and I will get round to it soon. Can anyone recommend a good maker of skins? Oh and I guess I will need clothes too once I go mesh. I guess I can look on the Marketplace.

Another Fairy Tale

I got chatting to a woman called Cica Ghost who builds amazing fantasy worlds that really make Second Life look like something else. She is super friendly and interesting too. Her new work is called Another Fairy Tale and I took some pics here. I don’t know how long it will be there of because she keeps coming up with new ideas and each one replaces the last. Here’s the landmark – go check it out.

Long Day

Long Day

Busy day… long day! Lots going on back in real life so I did not achieve a lot here.

I did at least find time to start furnishing the houseboat. Someone made a kit that adds on a pergola, some interior dividing walls and a bathroom and kitchen area among other things. From camming around it seems every other houseboat of this type has it installed. So I picked that up. And then I saw someone had this furniture set so I grabbed a copy of that too. Links below if you’re interested. My houseboat is the ‘Barnacle’ model.

Time to crash out now. Good night x