Tuesday, December 29, 2020

Sooooo ... what if I get bored with all of this?

I just discovered your microbey system - it looks pretty interesting, but I do have a question on it. Given its nature as being web hosted, there is definite concern on my end that if you were to cut support it could wind up being completely dead - is there a plan in place to be able to convert it to something else if that did happen or where people could get that information back somehow?


I really hope they don't mind me using their question word for word, but I seriously love questions like this that make me think and that deserve an expanded answer. I gave a short answer immediately, but here's something a little more tangible.

The short answer is that this past year (2020) has been all about creation and building something of a foundation of things that are of a serious interest to me. Namely, SL stuff with remote integrations. I won't fib on this, disaster recovery and apocalyptic scenarios haven't been on my mind. Like most anyone who does code for fun, those things are way at the bottom of my list even on the best of days. Most of you wouldn't know this, but I actually DID have a disaster scenario when I first opened up. The hosting provider that I was using got themselves infected with a worm and things went from bad to doomed in a hurry. Instead of worrying myself about it too much (though I'll admit I was fuming at the time), I just tossed away everything I'd done up to that point. No worries, really. Not like an entire enterprise (or even a small section of an enterprise) was running on that stuff. But it did make me wary of hosting providers. When I started messing with things again, I went with a cloud provider that I trust for things that I get paid a whole lot of money to trust them with (NOT Second Life, mind you). And I try to ensure that should a lift and shift be necessary, I can do so with at least a minimal amount of hassle. Not to mention I have backups, for what they'd be worth. Code is in a safe place. So on and so forth. At an architectural level, things are pretty safe. The gloomiest scenario right now is that things are down while I lift and shift somewhere else. I'm not making light of the gloomiest scenario, believe me. It'd be a pain in my ass, and likely not something I'd be able to prioritize above other commitments. But it has been on my mind off an on since my prior provider crapped the bed in a huge way. It's from a selfish perspective, though. I don't want to have to deal with it any more than I have to when it does happen! 😀

Now most everything I do with Imperium boils down to: I want to. It's a passion pet project, and one that costs me money and time. More than I make, and definitely more so once you consider how much my time is worth (a lot). And that's fine, really, because it's really about me tinkering and learning and expanding my thoughts on integrations between systems (doesn't have to be SL and the web, but that's what fascinates me) mixed in with the recurring kink that I appreciate. So I make my own profit in my own way. But the question brings up a seriously valid point: My payoff in this scenario is my amusement. What happens if I'm no longer amused? What about the people who've sunk their own treasure and considerable amount of time into something I've created? I get this. I have to ask myself the same question a LOT when deciding on library use and third party product integrations.

A part of what I ask for with the MicrObey and MacrObey (and all things Imperium, really) is participation. It's why I have the author/contributor system and why I've put so much effort into things like Zen and Collectives. So I'm asking people to put time into things, and time is worth a lot for everyone. L$1499 isn't much (US $6.22 at the moment ... less than a decent cup of coffee), so that's not really my worry. At that exchange rate, no one gets to have any expectations - much less make any demands - of me or my time. Not when in RL I charge quite a bit just to answer the phone (should see what I charge to answer an email!). My worry is people's time and creative investments being disrupted. I don't want that. Even if I'm bored out of my mind with it, I wouldn't want that. YOUR time is valuable, too. But do you know that for sure? I mean, how can you take me at my word there? What if I decide I want to stop spending money on the fancy cloud stuff I'm so fond of? Redis caches are fun as fuck, after all. They're also expensive. Fortunately, I'm in it for the fun and the knowledge. But that's me saying that. I try to be as honest as possible when it comes to things like this, but I'm not trying to sell you snake oil or make myself out to be some kind of saint, either. I'm not. Hell, I'm a pretty bad example of being a human being! But I do have my reasons and I do have my fun out of it all. That's generally enough to keep me around and happy. There's actually kind of a benefit here. I'm not really here to make a living off of you guys. The income helps pay the bills, and that's a good thing, but I'm under no delusion that I'm going to make a killing here. Really, I'm here for me. This is my playground. I'm not going to try to sell you a line of customer service or marketing hype bullshit. Take that for what it's worth .... Which is not much. 😂

I'm not one to make guarantees or offer any warranty of any kind. Shit happens, and no one is guaranteed tomorrow. But even if I were to wander away from Imperium stuff, it'd still be there and working. Why? Because I use my cloud stuff for lots of other things. And I like it all being billed in one place. It's very convenient for me, and I can't see changing that. See above, though ... You have to take me at my word there, that I'll try to keep everything running smooth even if I'm not around on a daily basis. I know this may not be easy, especially when I'm very brutally honest that I'm not going to ever make any promises to that effect. BUT I don't have any plans of going anywhere, and even if I'm on a break or away doing other things that amuse me, it's all going to be up and running. Because I want it to be, and I'm pretty selfish about things like that. If I'm ever in a situation where it can't continue? Well, no offense, but I've got bigger fish to fry at that stage.

Alllllllllll that said, though, I've been on something of a retrospective of 2020 and where I'd like to go with a lot of this in 2021. A totally natural breakpoint for reflection, the end of the calendar year. Arbitrary, but well-known and consistent. One of the things I'd like to work on in 2021 is scalability of the systems WITHOUT having to scale out or scale up the server side. Of course, the most scalable solution is the scaled solution that's already right there: the grid itself. Now, SL makes this haaaaaaaaaaarder than it has to be, but with VERY good reason, even if I disagree with a lot of the reasoning. Doesn't make it impossible, though. Just tricky. Without going into a nerd tirade about it all, there are a lot of impediments that make exporting data to the cloud a preference to begin with. The biggest thing is the ability to manipulate information. Notecards are idempotent (static and not changeable) in SL, and lots of other minor things. But it really boils down to control of the architecture in the Imperium products. I get to take a lot of the load of running fairly complex systems away from the grid so that the grid doesn't have to. This means less lag, less resource hogging, a better overall experience, and I have a LOT more leeway from an architecture perspective. The downside of all that? Well, read on ...

A few weeks ago, the SL systems had a problem that brought even comprehensive grid-wide systems like the major vendor systems to a screeching halt. It really boiled down to that scripted objects couldn't make web requests outside of the grid ... including MicrObey and MacrObey. This did prompt me to do up the status page for Imperium @ https://imperium.statuspage.io/ ... But it also got me thinking about something very similar to the original question that prompted this writing: what if SL itself were to remove the ability to integrate with the web? Not saying they would. But, again, see above ... Do I know that for sure? Really, if they ever truly wanted to make Marketplace the only viable option for in-world commerce? It would be ridiculously easy for that to happen by adjusting some firewall settings. Even without the "what if" conspiracy theories, the truth is that the more complex a system, the more points of failure will be present. Breaking llHttpRequest by accident is a really good example of that axiom.

So for 2021? I'll be exploring ways to better answer that question, along with other things in my (long) list of things I'd like to do. I want to be able to say that if something were to happen to me, it wouldn't be too difficult to resurrect the systems. My primary focus would be on the author contributors and making sure they can migrate their stuff (and have hard copies, if need be). The rest should follow suit. Now this is all a nebulous notion in my coffee-addled mind, and I don't have a plan in mind yet ... Only a destination of where I'd like to be at some point in 2021. There's a lot of convergence there that I'd like to explore more completely, for sure.

At any rate, the short answer to it all is this: I have no plans on going anywhere or stopping active work on things, much less stop support for it all. I don't know if I'd ever allow for straight conversions to another system (though it's already possible from a content author perspective in a lot of ways) ... I just don't see where I'd gain anything in that. Partnering with other developers and creators in-world? Yes. Absolutely I would. Exposing the guts of Imperium and MicrObey and MacrObey? Very likely a hard pass. There's other ways around all this, though, and other thoughts on things like the themes and so on. But that's for another day. I always have thoughts and opinions. Most of them bad.

Just as a postscript of sorts ... This scenario has already played out to a certain extent. I DID take a break from SL (hell, we all need to from time to time). The funny thing is that while I wasn't AT ALL present in-world (I even shut down the store), everything not only kept working, but I was seriously busy doing lots of background work on MicrObey. In a weird way, I tend to be a lot more productive on these things when I'm not doing an active presence. I don't get distracted near as easy. I have SQUIRREL syndrome like you wouldn't believe.

I'd like to say thanks again for the excellent question. It really tied in nicely with a lot of other thoughts I've been having (as if my rambling didn't make that obvious). Now that I'm brain dead, I hope it clarifies my position and does answer the question at least moderately adequately, and I thank you for wading through this pretty lengthy diatribe. 👼

Saturday, December 5, 2020

MicrObey HUD 201205.1 Released

 I've just released version 201205.1 of MicrObey and the corresponding MicrObey Owner HUD. So what's new? Mostly RLV related stuff, but there is some under the hood work on making things work with the upcoming MacrObey system, as well. The two things of immediate interest:

1. Force Sit - Make a subject sit on any nearby object (assuming they have RLV enabled)

2. Force Teleport - There's a new "Teleport Hub" in the MicrObey and MicrObey Owner HUD packages. You can use these to force teleport subjects wherever, so long as they have RLV enabled.

Enjoy, you fine, outstanding, beautiful people!


Saturday, October 24, 2020

Creating Content - Making A Training Session

So going to take you on a journey of creating a new training session. It's going to be a hoot. And a hollar. If you'd like to play along, I'm assuming you have the Content Contributors stuff already unpacked and in your inventory. If not, you're going to get lost in a hurry. Hell, I'm going to get lost for you, so I wouldn't worry too much about it.

Just as an aside, this isn't my normal workflow process. As the guy who wrote all of this stuff, I have subtle things that happen here and there when it comes to bundling behind the scenes. I'll try to avoid those steps. Anyway, a normal lifecycle looks something like:

1. Dream up an idea
2. Create the script
3. Refine the script
4. Upload the script to the Contributor Portal

For many purposes, that's all there is to it. You can automatically use your new creation either on yourself (or a trainer use on you) or when you're training others. It's yours. But if you're wanting to sell or distribute your new session, the lifecycle extends:

5. Prepare the Content Distribution HUD
6. Your own vendor management

Those last two can get tricky, according to how you like doing things. So let's begin!

1. Dream up an idea

Let's say we're considering a "BBC Worship" training script (I say this because I just did do one a few days ago) ... Where to begin? What's it about? What's the objective? I actually have a lot of problems here, but so many people have so many seriously badass ideas. I doubt anyone who's reading this would even consider this a step like I do. But it's where I begin, all the same.


2. Create the script

OK so what I tend to do is write the script first and then add in the bells and whistles like subliminals and such in step 3. This is where several "macros" are very important.

- {0} gets replaced with the trainer's name
- {1} gets replaced with the subject's name
- {gender} gets replaced with the subject's gender
- {title} gets replaced with the trainer's title
- \n gets replaced with a new line character, so you can do multi-line things.

All in all, something that looks similar to:

Relax, {1}
Just relax for {0} now
Nothing to do
Nowhere to go
So just relax for {0}
Let your mind drift now
Breathe deeply, {1}
Deep breaths in through the nose
And exhale slowly through your mouth
And with each deep breath you'll find yourself relaxing more, {1}
Good {gender}

Fairly easy, right? Each line is displayed to the subject with those tokens replaced. Keep them in mind, because they're useful in the other commands, too.

In the Creator's bundle, there's a notecard just for explaining macros. It's important. Read it.

3. Refine the script

Here's where all of the fun crap happens, like subliminals, broadcasts, whispers, and all kinds of stuff. You can make a script do special things. Normally, I start off with the training itself and then circle back and add all of this fun stuff. You have a lot of these commands at your disposal, and the content editor on the portal tries to keep an up to date list of what you can do. But at it's heart, a "command" is a line that begins with ":" (a colon, minus the quotes). So here's a snippet kind of illustrating this:

:subliminal 3|I am fixated for {0}
Whisper to yourself for {0}\n"I am fixated for {0}"
:subliminal 3|I am focused for {0}
Whisper to yourself for {0}\n"I am focused for {0}"
:subliminal 3|I obey {0}
Whisper to yourself for {0}\n"I obey {0}"
:subliminal 3|I submit to {0}
Whisper to yourself for {0}\n"I submit to {0}"
:subliminal 3|I must fixate for {0}
Whisper to yourself for {0}\n"I must fixate for {0}"
:subliminal 3|I must focus for {0}
Whisper to yourself for {0}\n"I must focus for {0}"
:subliminal 3|I must obey {0}
Whisper to yourself for {0}\n"I must obey {0}"
:subliminal 3|I must submit to {0}

The ":subliminal 3|text" tells the system to do something. In this case, it's telling the system to display a subliminal "text" for up to three seconds. There's a whole lot more like that. I have a strong tendency to use subliminals a lot along with with the ":broadcast" and ":saytostarter" commands.

A helpful reminder here is that these commands ONLY WORK IN INDUCTIONS, TRAININGS, and AWAKENINGS. Things like subliminals, broadcasts, devotions, and such are limited to the "{0}", "{1}" macros.

Much like the macros, there's a notecard in the bundle dealing with the commands and what you have available to you. Read it. Really. 

4. Upload the script to the Contributor Portal

Oh man now we're at the fun part. Screenshots, y'all!

First off, wear your Contributor HUD (In Firestorm, right-click and select Add):


Should show up on your right hand side:


Rock on. Now "touch" the HUD. You're going to get a popup asking you to go to a web page. Of course, you want to do this:


Now you should be at your Contributor Home Page. Looks something like:

Now we're cookin' ... Rock on! So for our purposes, we're going to click on "My Trainings":


Now keep in mind I've got a ton of stuff in mind. What you see will likely be a lot less populated. The important thing here is the "Add" button. Click on that.


OK so you have a "Title" and you have "Content", and a legend with some of the various macros and commands available to you just for verification. It's very important here that title be unique (and by unique, I mean across the entire system, so choose your title wisely). As a pro tip of sorts, I try to always use the word "Training" in the title, usually in parentheses. This just gives nice visual indicators later on.

Now once you have your content in, you should have something looks kind of like:

Save it and let it do its thang. Voila! You're done. You have officially added your own content.

You should be able to use your content anywhere it's supported. You can use it on others and you can have others use it with you. It's yours. 

Now something to keep in mind. Don't be afraid of experimentation. You can always come back and edit your content to correct any mistakes or make additions. So nothing's etched in stone here. You're free to mangle at will, and I encourage that. Creating this stuff is far more of an art form than it is a science, and I don't have a lock on the best approach by any means.

4A - What now?

I'm not going to get into the Content Distribution HUD so much in this one. It's already gotten too long. But you can do a lot right from the web, and you may not even need the Content Distribution HUD immediately.

Why's that? Well, the Contributor Portal lets you "share" your content with others. When you're in the Trainings page, you should see a list of your trainings. To the right of each training are several icons:

See that arrow to the right? Yeah that's the one. If you want to share your creation, click on that. You're going to get a popup box asking for a Second Life account name:

Just like it says, don't do their display name. Has to be their username or their SL UUID. For your sanity, go for the username and click OK. Now if the user exists and is valid, you should see a new popup asking you to confirm this:


Click OK. You should get one last popup box to confirm this is all good:

Congrats! The recipient of your love will now have your creation available to them. All very cool and stuff.

Now I went to all this effort precisely so people wouldn't have to mess with the mechanics of the Content Client unless they wanted to sell their content. I figure the vast majority of folks want to create their own customized content for their own personal use with limited distribution, and I applaud and encourage that.

Pre-5 And 6

The next steps all require basic understandings of building in Second Life, especially when it comes to setting up your own vendors. But when dealing with the Content Client, you need to know how to set permissions on objects and content within an object. It's not that hard, really, just a little mysterious if it's your first foray into the weirdness that is Second Life.

5 - Prepare the Content Distribution HUD

I'll do this separately at some point, as the Content Client is a beast unto itself. The bundle has a pretty comprehensive guide on it. What you'll need is the "content key". In the listing of your trainings, there's a convenient "copy content key" icon (it'll be the one on the left). That's what you plug in to the "content-key" notecard (of course without ANY spaces, blank lines, and so on).

6 - Your own Vendor Management

This is so far out of scope of any one tutorial I won't even scratch the surface. I will share that I use and I explicitly trust the entire CasperVend line of products. It's beyond great, friendly support, lots of documentation, and almost always beats SL at the "laggy-weird-shit-happening" game. 

Sunday, October 18, 2020

New BBC Worship Trainings

 For MicrObey, I just released a new suite of BBC Worship Trainings

- Worship BBC Training
- Worship BBC Mantra Training
- Worship BBC Subliminals
- Worship BBC Devotions
- Worship BBC Broadcasts
- Worship BBC Spirals

These are all bundled up (along with the BBC Worship Themes Collection #1), as well. Enjoy yourself responsibly.


Public Devices

So added a neat new thing last night for the in-world toys. Anyone can participate!

Now the Harmony setup screens have a checkbox "Public Device Available In Imperium Registry". If checked, then the device will be (just like it says) listed for people to visit in the Imperium web site.

When in the Imperium portal, the menu bar at the top should have a "Public Devices" entry. Click on that and go have a blast. Every public device across the grid should be listed.

Note that you have to explicitly enable this. I didn't want people landing in personal spaces.



Sunday, October 11, 2020

MicrObey Tasks

So released the very first rollout of what I call "tasks" this morning. Basically, you can assign a subject something that they need to do for you. This can be anything from what clothes they need to wear, edging for an hour, specifying a training session, or whatever. I'll be expanding on this notion soon, I hope, and refining it as I figure out how it's being used. So ideas? Let me know!

Now a task only lasts a week. If it's not completed, the subject will lose zen. If it's deleted, the subject will lose zen. If they mark it completed, then the world is good, and they'll receive zen. Because everyone wants a clean task list, naturally.


Sunday, September 27, 2020

MicrObey 200927.1 Released

So just to say I was at a quick stopping off point and not get too far ahead of myself, I've released the MicrObey HUD version 200927.1 ... So what's new?

- Gallery theme & spiral updates pre-caches images now. You've got nice new previous, next, and pause buttons. So you can peruse things that you like instead of waiting for the next image automatically. The cache gets updated every so often. You're welcome.

- The training session theme has been updated much like the gallery stuff. When in training, you can navigate the theme images for the session. Find one you like? Pause it!

- Poses are now a thing in MicrObey. This isn't anywhere near what I want it to be, but it's there to begin evaluating. Let me know what you think. All web-ified and stuff. There's also a new ":pose <pose>" command for training scripts.

- There's some new glasses included with the bundle that let's the world see subliminals, devotions, trainings, training themes, gallery themes and spirals. Thanks to Jan for the idea.

- Lots of other minor things that I stumbled across or was on my list that you may or may not even notice.

So what's next? I have me some ideas. ;) I'd like to proceed with in-world controls (freeze, follow, things like that). I'd also like to better define the internal API for potential integrations. There's a new notecard for collaborations, and I'd really like to pursue those prospects.

Questions? As always, hit me up either here in the comments or in-world.

Your friend indeed,
Imperium

PS - A huge shout out to Kelli for helping uncover issues for me that prompted an evening of rethinking. And to Jan for he idea of the glasses. You guys rule.

Tuesday, September 8, 2020

Training all subjects

 Just released an update that will allow owners to train all of their online subjects at one time. With your Owner HUD attached:

Click on it ("touch" it) to get the menu:

Click on "My Subjects". It's going to ask you to go to the portal, of course:

Click on "Go to page", just like always ...

At the top of the page will be a button:

Click on "Train My Online Subjects" ... Now it's going to tell you this may take a few seconds and ask if you're really wanting to continue:

So of course you want to continue! You'll be taken to a page that lists everyone who's online.

For those are online, you can select to train them or not. Everything else is roughly similar to the training screen. Select the induction, awakening, so on, so forth, ad nauseum. If a subject is offline or not wearing the MicrObey HUD, you won't be able to train them (and also won't be able to use their content in the selections)

Which brings me to the cool thing about this. The content selection is comprised of everyone who's online. The ultimate in sharing.

This is all still kind of in beta, but I wanted to get it out there all the same. Let me know what you think.