With the world still in the grip of the COVID-19 pandemic and evidently
doomed to stay there for an indefinite future, Arisia 2021 was forced to
go completely online just like many other events.
By now I had helped with my share of virtual-space happenings, and
could bring my
acquired knowledge
to beneficial use for Arisia as well.
This would involve almost none of the traditional skills -- wrangling trucks
and gear, flying lights, gaffing cable, balancing power circuits -- only
sitting parked on my butt for a weekend-plus with fingers flying over a
keyboard.
So much for "the most exercise some of us get all winter"... One significant component of many prior events has been Discord, aka "IRC on way too many colorful steroids". A large-scale multi-channel chat system can bring an event quite a sense of personal community without the overhead and/or exposure of interactive videoconferencing, while providing some veneer of semi-anonymity and the ability to go back in time within any conversational space to see what people said before. The medium works well for some people and not others, so it's one of several choices we offer to try and help bring people "together", in that ironic pandemic-homebound sense. As Discord has grown in popularity it has also grown in its versatility, with the addition of external third-party "bots", or robots, which can perform interactive programmable functions. Even at its most fundamental level, Discord's complex matrix of roles and permissions allows fine-grained access control and bestowing of different levels of administrative capability. Really, it's almost a video game in itself, likely one reason that the gamer communities flock to it. So while I expected to primarily function as a Zoom tech-host for the convention, there's a reason I'm harping on Discord here. The "remote division" folks programming the online and backend sites for the convention were already going flat-out and had sent pleas for implementation help, but were developing code in environments I'd never even *heard* of let alone had any competency with. However, in the preceding year I had not only overcome my initial revulsion to Discord as so much millennial fluff, I had taken rather a liking to it and how the complexity and subtleties of it could be managed. I had set up a small "sandbox" server and was testing bot functions on it, discovering that things that had looked so obtuse and scary were actually fairly easy to manage and bend to some degree of my will. Some of the prior online events I'd been to had also provided setup examples, as I'd observed in my summary and comparison of recent ones. So by the time I looked to the Arisia environment, I considered myself reasonably competent in Discord management. Who'd-a thunk it, when a year before I barely knew what it was. |
What they needed done happened to be stuff I already had experience with, so
it didn't take long to convince them that I would be able to put some of
these things together and thus offload several things from their to-do
list.
Gail [aka "Rainbow GailBear", expressible in UTF-8 as she'd done] was helping
head up the "remote" group, and she and I discussed a bit of the "integration"
they wanted to accomplish with regard to Discord.
A server allows users to pick a nickname that's different from their base
Discord ID, so the intent was to put the person's desired "badge name"
there as chosen at the Registration site.
A mostly-automated means was needed to set a user's server-local nickname
on a one-shot basis and then keep it for the duration of the event.
Gail had already tried various APIs including Discord's newer "slash
commands" interface, but hadn't come up with something that would make
the process truly *easy* for our attendees.
I said I'd give it a shot with the tools I knew how to use, and after some
mild reservations expressed about relying on third-party facilities,
received her blessing to plunge ahead with a test setup while she continued
to fight with it from her end.
| |
So yes, these are screenshots, which someone will inevitably claim violates the "no recording" policy of Arisia. To those people I would encourage reading the policy again, which dwells almost entirely on identifiable images of *people*. I have documented my purview of our procedures and accomplishments in detail for years, with detailed images that frequently included shots of us working our butts off, and nobody objected to that. Very little of what's here shows images of humans at all. Only snippets of what they said and did, which has also been an integral part of previous reports. It is rendered as images because that brings out the flavor of how we would interact in Discord and other virtual spaces, just like our running interaction, expression, and commentary in real life. Furthermore, much of this is documenting my own work, which I have every right to do and make public for the benefit of others. I know how to sanitize out anything viewable as critical personal details, and I have it from people at con-chair and corporate-officer levels that what I'm presenting here is perfectly okay.
| |
The other thing to be aware of is that the sizes of thumbnails and full-size images alike is much more freeform than in my usual reports. Because the relevant part of any high-resolution screenshot varies so much, and a full-size image carries a lot of relevant text, trying to resize everything to my usual strict 1024 x 768 photo environment just wasn't going to work. So yes, please freely click the thumbnails to view the big-pictures and enjoy the full flavor of what we were doing. You may have to use your browser navigation and sizing controls a little more to see everything. There's not much to be done about that; in the absence of running around real-life spaces with a camera, this is what I have. Efforts have also been made to streamline the main storyline a bit, and put deeper technical asides in their own optional sections. |
I dug my Discord environment out of running-configuration storage,
and headed off to play with "the bots" and see how far Mike et al had gotten
with setting them up.
The first project was to build the auxiliary "gating-in" means, based on a
proposed attendee copy/paste method, and that is detailed in greater depth
in our first ...
Rathole: Backup "hack API" development with sixteen more to come. This would provide a workable substitute if the original "login integration" idea didn't work out somehow. |
As I started poking at this, I was changing some things at the web portal
where one of the bots gets configured.
Submitting a change would briefly show a round "spinner" overlay
on the page while the data was updated.
At one point I clicked "save" on some piece I wasn't dead-sure about and
would need further testing, and the "spinner" popped up ... and stayed,
going around and around.
Reloading the control-panel page simply hung and remained blank.
Had I done something so egregiously wrong that the bot couldn't handle it? </lovecraftian-horror-italics> No, in fact, it turned out that right at the same moment, the entire YAGPDB infrastructure had crashed hard. |
I reported this into our "design" channel, and of course was jokingly
accused of breaking the internet.
On a little more investigation into bot status, where there had been numerous
green squares representing the "shards" that handle subsets of servers, there
were a lot of yellow, red or flat-out missing ones.
It was slowly starting to come back to life, and the process took another
ten or fifteen minutes to complete.
[And what had Gail been saying moments before about third-party tools??
I think we both understood, however, that such occurrences are likely quite
rare and that something this far-reaching was coincidental and definitely
out of the ordinary.]
This got me more curious about the backend relationships between servers and bots, so I went off to the various bot support forums to ask a few questions about minimizing our own impact. More on this is detailed in our next Rathole: Being nicer to bots | |
Once the bot infrastructure was back up, I could continue working. But I still needed a little more detail and wanted to describe some of the limitations in the bots, so three of us had an audio-conference right there on Discord to just talk about stuff at higher bandwidth. A voice chat is super-useful when a team is trying to debug something or interactively work through design details. |
Gail screenshared some of her development environment, where she was
working up calls into the Discord API to try various strategies for
authenticating users, changing nicknames and assigning roles.
More detail into this, at least some bits that I could pretend to
understand the gist of, can be explored down the
Rathole: Discord API innards ... in which we agreed that most available tools, be they third-party bots or direct API connections, have certain limitations and caveats. |
A bit of discussion ensued about channel or "room" naming, and how it would
match up with the online site.
In addition, several more areas corresponding to spaces that our real-life
conventiongoers had gotten used to still needed their virtual counterparts
constructed, and the overall organization needed to make sense.
The idea of naming the runtime spaces after, say, existing function rooms
at our usual hotel had already been discarded; the "UX team" wanted to
keep it simple and generic.
This is explored further in
Rathole: more on server structure. For the most part, others had the broader view of this and I deferred to how they wanted to lay things out. I would come along later after the dust had settled, and make sure things like channel permissions were still set right. |
Even with the layout still in flux, other folks were working hard on the means to welcome our attendees and participants in and get them comfortable in the weirdness of the online environment, and that meant documenting everything. Raven and others had done an hour-long Zoom-based training video to orient our program participants, going over as many aspects as could be demonstrated by then. A major takeaway was that Arisia was trying to encourage everyone to use *Discord* for panel-related chat and questions as much as possible, instead of the built-in Zoom facilities, in the interest of leaving the latter for operational traffic such as tech-to-moderators communication. This was a rather different approach than in previous online events -- it was unclear how it would work out in the end, but it did mean that getting attendees settled into Discord as the main interaction hub was even more imperative. |
A few more staff-level people had connected to the server, and as known
entities they were just informally "roled up" to the appropriate status
without going through any rigorous integration.
The idea was eventually to "un-role" everyone's "Arisian" status, which was
basically the main key to membership in the server as a whole, and then
have them all re-enter through the formal process when it was ready.
A bit of discussion ensued over whether to eject them from the server
completely, to which I objected because their additional roles such as
"staff" and/or specific departments had already been done by hand and I
didn't want that work to simply be trashed.
More reflection on this is contained in
Rathole: Convention roles vs. Discord roles In fact, after seeing relatively poor attendee "pickup" of Discord at other events, I didn't want any actions taken that would discourage participants we had already brought in. There was still much to be figured out about this. |
Discord role names and colors aren't only for classifying users into
functional categories for staff, admins, participants, attendees, secret
clubs, or whatever.
They can be general-purpose tags that simply exist in their own right.
Our "role stack" was rapidly growing, especially with the addition of the
tag sets to support the reaction-click menus.
Those are specifically explored in
Rathole: Role and "ribbon" menus Role purposes aside, I had a nice color spectrum going for base convention staff, participant, and guest roles; it had already been suggested to leave other subsets as the "default" color which is actually transparent and doesn't affect displayed colors from roles farther down. Arisia had a real-life tradition that con-chair and other high authority badge ribbons are black, which is an available role color but makes things like names completely unreadable in a dark-themed Discord, and thus unusable here. It would ultimately turn out that a pretty graduated spectrum wasn't going to serve anyway; see below... |
Meanwhile, we knew that just like with real life, the staff would need
various special areas to coordinate and access certain "back of house"
services.
A couple of tech channels were set up, and into one of them I dropped a
big dump on where some of the prior events' Discord servers were still
open, and which ones still had voice-chat channels.
Why that was a particular concern is explored in
Rathole: Technical service hangouts Other staff areas included Safety and IRT, and our own running "design-chat" discussion area eventually got moved under the staff heading too. Unfortunately, the "staff den" was Bring Your Own Food And Coffee this time. |
With a more solid understanding of the reaction-response menus in general,
I was prepared to support a fun variety of them.
One of the Discord fundamentals is that an assigned role can optionally be
"hailed for" or "pinged", by typing in the format "@TheRole" into a
channel which not only sends the message, it alerts all the users tagged
with that role.
So we had a number of convention jobs run in shifts, where volunteers would
be "on duty" or not, and we wanted a convenient way for them to either be
included in the "pingable" groups or not by their own choice.
The answer?
A "time clock" setup where they could punch in and out for their respective
duties, more fully detailed in
Rathole: The timeclock Here I had set up a preliminary wrapper message, but hadn't actually added the menu mechanics yet. |
The last pre-con full committee meeting happened over Zoom about a week and a half out, and people were becoming more enthusiastic about the approaching event even though there was still a ton of work to do. Especially on the virtual side of things, where coding progress had met an assortment of impediments, interface surprises, and changing requirements. But we had been getting registrations and signups, more technical folks were coming on board from prior event crews, and there was growing confidence that we'd actually pull this off. |
The "remote" team shared up a couple of demos of the convention site to
date.
The gaming support page layout was rather amusing and still in progress, but
the really key thing was the active schedule, which we would all be referring
to frequently over the course of the weekend.
This was where everyone would get info for everything else, such as the
Zoom sessions and pointers to external streams, and where techs would pick
up info for actually *starting* sessions at the right times.
The navigation framework was built on the fundamentals of
KonOpas,
with several custom tweaks.
Program info was still being added to the backend database, which the
outwardly-visible site would pull from every so often to update.
Diving down Rathole: site design will reveal a more detailed look at backend stuff, at least from my overly critical perspective. |
Subtle color and brightness gradations like what I'd originally come up with
would have been fine for many people, but in the interest of accessibility,
the user-experience team needed to sanity-check all of our visual
presentation conduits for compatibility with common color-blindness.
Raven demoed a way to check on this within Discord, with a display filter
she could run on her own machine to show color as a colorblind person might
perceive it.
Rathole: Color range fixups describes how this and other "UX" aspects ultimately got tweaked. |
It was inevitable that a discussion would come up about what powers and
procdedures the Safety and Incident Reponse teams would have to handle
unruly attendees.
They were used to dealing with such things in real life; now it all had to
map to the virtual world.
Ultimately these were con-chair and division-head level decisions, but they
needed a little assistance to understand the tools available -- one of which
was the concept of temporarily muting an attendee's ability to speak to
anyone except the Safety team while an incident was being handled.
The power to block someone's channel-participation ability on Discord is
also the power to cause unrelated collateral damage, so we wanted to be very
careful about handing out privilege to less technical team members.
However the decisions would fall, I and the other admin-level folks would
help provide the technical means to implement what they needed and/or
instruct people how to go about it.
The implicit goal of utilizing privilege but limiting its scope could be addressed in several different ways, which Rathole: the muting problem takes a closer look at. Unfortunately, the most elegant solution I came up with was mid-convention and never really saw the light of day. Next time, maybe. |
Perhaps IRT didn't care for a streamlined mute handler, but they did
want some other utility functions.
With debate on authority levels still swirling way above my pay grade,
a more immediate request fell out of that discussion, and with it another
implementation challenge: the IRT wanted an "answering machine" for when
nobody was on duty, such that anyone posting to their public "hallway desk"
channel would get a reassuring auto-response offering alternatives.
Rathole: IRT answering service describes how that was put together, using another two-bot combination of functionality. |
The line between "work" and "play" is unclear even in real-life conventions,
when we get to haul out all our toys and tools and build something that lets
everyone have fun and solve challenges.
We already had a special channel called #pets, one of the few areas
where image posting was allowed because, well, the internet IS for cute cat
pictures and even well before con, we had several uploaded already.
As I explored more bot functionality I remembered that YAGPDB has some
amusing features such as "cat fact" and "dog fact", where a random quote
about either can be requested on command.
But rather than try to teach people how to use those commands in the channel,
how about wiring things up to simply trigger off their running conversation
in the #pets area?
This turned out to be relatively easy, and
Rathole: pet-quote development describes it and also gets into why the response frequency needed a bit of tweaking. |
Continue to Part 2
_H* 210129