From the Westin to the Web: Arisia 2021 goes virtual

  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.

Admin status: extension of trust, like keys to the truck One afternoon I took another quick look into the Arisia server, which had remained largely stagnant for months, but now a conversation had started up about the immediate future.  I amplified my offer to help out, and next thing I knew I had been conferred full administrative rights on the server and we were already talking about task lists.  In this image we can see exactly when my role status went from green to red, as Mike added the "Admin" flag to me.

Now, this was "a moment", similar to the times when, for example, I had been handed a truck key and entrusted to shepherd large parts of essential convention infrastructure through downtown Boston traffic.  This brings a feeling of pride but also of great responsibility -- not just a label, but committed confidence in my ability and work ethic.  It's usually nice to be tapped as a key player, but I'd have to proceed carefully with keen sensitivity to the team's needs.

Helping offload mike on Discord con-basics discussing discord-account-integration
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.

Off to go play with the bots: Yag ctl  R:hack-api 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.

YAGPDB crashed hard!  R:bottraf 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 shows us: generating API keys n stuff  R:site-api 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.

Report on proof-of-concept backup 'hack login API' After bringing in a second bot and a bit more late-night thrashing, I was able to report back to Gail with a successful proof-of-concept that could easily be extended to handle changing requirements.  The remaining problem was for her end to pick up the right events and confirm the interactions into the Arisia database; I wasn't sure how easy that would be, but it was at least a start.

Testing my own real registration At some point it was time to make sure I was officially registered for the con so I'd be in the right databases to begin with, so I ran through the Reg process in the "Convention Master" site, which would then set me up correctly on the virtual convention's online site itself.  My running year-to-year comp was still in place... and now, the back-end of the "online" site would pick up my status for this year and then I'd be able to log into it.

Testing Registration redirect to HTTPS It was there that I noticed the CM server trying to do my whole interaction in the clear, pointed it out, and Ben dipped in to set up a forced redirect to HTTPS instead.  He asked me to test it, so I gave him a screenclip of my super-bare-bones demo proving that it now worked.

Nattering about runtime channel names  R:struct 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.

Slide from Raven's teaching zoom, espousing Discord-based approach 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.

More discussion of account-merge approaches  R:roles 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.

nice role rainbow starting  R:menus 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...

Old servers listing, with audio chat chans available  R:techs 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.

clock template 0.1, no menu yet  R:clock 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. 

Concom meeting, with demos 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.

Gail screenshare: gaming-layout page Gail screenshare: early main site demo  R:site
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.

raven shows colorblind-filter to work from  R:uxcb 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.

request for IRT 'answering machine'  R:mute  R:irt-aa 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.

temporary compromise allowing lock-click to get people in and roled up It was the week before con by now, and we needed to strike a balance between the need to get the full Discord integration finished, vs. the need to get our staffers onto the server and settled in and less afraid of it.  Gail understood this, and I had set up the "portcullis" backup-API channel with a secondary one-click means of getting usefully into the server that we could let people temporarily use.  Gail generated a server invite and posted it to the staff Slack with instructions, and strict caveats that it was only for necessary early access and for folks to have no expectations of stability.

a few techs arrive.. It was enough to get things started, though, and more of the people working the convention started to arrive.  I'm guessing that my "portcullis" message that they saw on the way in also served as a hint that I might be a person to ask about roles, as I started getting questions about staff, tech, safety, etc status.  For the most part was able to keep up with handling requests, but needed guidance from division heads once in a while when I didn't know who someone was.  In the interim stages with expanded privilege bestowed to certain positions of authority, our more technically-adept leads could also take care of their own people as needed.
But a general perception of me as "the Discord guy" seemed to be taking hold, which I didn't regret at all since so far this was all being quite fun.  The other admins were also there to field requests and collectively, we were getting things done with the server pretty rapidly.  Within that context, we were growing our community once again.

oops, too many dogs/cats  R:pets 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.

Policy and Code of Conduct tweaks were still being discussed on Slack, with an example held up from the SCA about automatic Zoom disclaimers.  Fortunately, Arisia's stance was pretty clear to everyone without such heavy-handed in-your-face means.
CoC and policy chat on slack I had made the observation to quite a few folks already that over my last year's experience helping with virtual events, everyone involved and attending had been remarkably well-behaved, and there were few if any actual incidents needing unusual handling.  Perhaps it was because all of this was new to people and they didn't yet know all the ways in which trouble could be caused.  Active participation in an event space isn't really the same mindset as someone just out to "zoombomb" or the like.  Over time as the public gets more used to this medium that could begin to change, but at this juncture I still felt that we could get by without undue paranoia.  I figured, let's see what happens through 2021 and re-evaluate later!

Raven progress report, slack Raven also posted a concise report of where things were at in a development sense, and meanwhile the backend and site folks were still hammering away getting things working and presentable.  I still sort of wished I could help there, but even if I had the right skills it would likely have been too many cooks in that kitchen anyway.  Instead, I continued testing things on the Discord side and reading more bot documentation and gaining broader perspective into what clever combinations of these facilities could provide.

    Continue to   Part 2

_H*   210129