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.

A word of caution

Not that it matters really in my case but I like to keep a level of separation between RL and SL. It’s fun to have an alter ego and it kinda spoils that fun if you can trace it back to my plain old real life self.

I’ve done a few little things to cover my tracks, like using a separate SL Twitter account, and using domain privacy for my DNS records. If you were some kind of forensic data scientist I’ve no doubt you could find me in seconds but for day to day SL this is fine.

But then the other day I was chatting to someone in SL and then I logged off and I got a late reply from them, which I got via email. I quickly replied from the Gmail app on my phone, which converts the message back to a Second Life IM and replies to them even though you are offline.

Then next time we spoke inworld they said: “Oh btw is this you?” And showed me a screenshot of the IM with my mobile number, skype, email address and website link a the end!

Schoolboy error I guess. It turns out Gmail app was adding my standard signature to replies sent back to Second Life.

One to watch out for anyway, if you use the reply by email thing.

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.

I made myself a barcode leg tattoo, which I also made free on the Marketplace. And whoa look how big my cat got!

Catch you soon, SL friends.

Giant LED Ring Light

I am creating some items as part of the design of my music venue. These giant suspended LED ring lights are my first proper foray into creating mesh models. The result of many hours grappling with Blender 2.8, I have got this down to a land impact of just 3 (4 if you use the version with the wire).

They are scripted so you can turn them on of off, and I’ve coded a system where they sync to each other, so you only need to click one of them to control any number of copies in your region.

They are available for L$60 here on the Second Life Marketplace. It’s only a few pence in real life money but the hope is if I make enough items available for sale it will start to offset some of the costs of running my region.

Giant Suspended LED ring light

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

I changed my name

OK so I got sucked in...

When I signed up to SL I didn’t actually realise that the username you pick is not just a login name but is actually your resident name. They don’t make it clear that you can’t change it. Well, to be more accurate, it is your first name and you get this kinda hidden second name ‘Resident’. So with my project being Lostware I figured lostware (lowercase) would be a suitable username, and I would pick the name display name Rem.

But there’s this slightly messy situation whereby some people go by their resident name but if you pick a display name you then have two names above your head by default (you can hide one of them but this only affects what you see).

And really ‘lostware Resident’ isn’t much of a name. My name is Rem. I wouldn’t care that much but a lot of things in SL like transactions use the proper resident name, so it’s a lot more than just this username you log in with.

Really I think they need to be clearer about all of this when you sign up. Instead of just saying “pick a username” they should explain that this is also your resident first name, and also that you’ll get the second name Resident and that you cannot change this so pick it wisely! (And of course explain that if you want you can also use a display name which you can change).

Then the other day they announced that you can now change your resident name and pick a new second name from a list. Apparently this was how it was like 10 years ago but it was taken away and now it’s back. But it costs $40 US + VAT. And you have to have a premium account.

My first reaction was that this is extortionate. And I commented about it one Twitter and in some blog comments. Well maybe it is extortionate, but apparently they spent two years working on this feature. And then also I looked at the list of second names and I quite like the second name ‘Voxel’ (like a 3D pixel). And I already have a premium account. Aaaand it’s a one-off change. And I guess I’m a bit shallow because I care about such things.

In a sense what they’ve done is created a kind of exclusive club of people with proper names. And while on the one hand I hate that in principle, I also wanted in and can afford it. Like a Guardian reading socialist sending their child to private school. So what the hell, my name is now Rem Voxel.

I do kinda like the idea that I might meet other Voxels and that there’s a sort of family-type aspect to that. I get it.

I will have to earn some money in SL to pay it back! I have started making some stuff for my art space / club so will sell those and hopefully over time it will cover my costs so I don’t have to put any more real £££ into Second Life. Or as much. We will see!

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.



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