Indirect Reflections
Fri Aug 3, 2012I've got some thinking to do, and given how long the alternative was taking, it's obvious that it can't happen effectively in my head. I don't want to tell you exactly what I'm working on yet, because revealing my projects before I'm done with them results in them never getting done. Witness the detritus that already litters this blog
[cl-chan](https://github.com/Inaimathi/cl-chan)
took about a year and a half to get a quarter of the way I was going, whereupon I was distracted by shinies[Strifebarge](https://github.com/Inaimathi/strifebarge)
was supposed to be a quick weekend project to get me back into the groove of programming after a bit of a vacation, but it's taking months and counting[auth](https://github.com/Inaimathi/auth)
was meant to have a working external API layer by now, as well as two-factor-authentication capability|1|[clomments](https://github.com/Inaimathi/clomments)
was a piece that I literally planned out in its entirety and proceeded to0.1
in about four hours, then got bored and started poking at Arduinos[cl-leet](https://github.com/Inaimathi/cl-leet)
took months of planning and a week of the CL Games Competition to get to a hemi-semi-playable state|3|
Hell, the only projects I've gotten to done
, for some value of "done", are the ones I never really think about as projects.
[emacs-utils](https://github.com/Inaimathi/emacs-utils)
is sitting quietly up on github, saving me a few hours per day on various tasks.[formlets](https://github.com/Inaimathi/formlets)
is doing likewise, though not on a daily basis.[cl-css](https://github.com/Inaimathi/cl-css)
should probably be replaced by something closer tocl-who
, and stop using so many ``',@`s, but it gets the job done in the meanwhile.- finally, my mplayer web-frontend is still as awful as the day I threw it together, but it actually functions and lets me "control"|4| my media center from any wifi-capable device in the house.
So, given the track record of "things I talk about first" vs "things I put together first", you'll pardon me for keeping my latest exploits under my hat until I'm ready to pull the big red lever. Thing is, there's a component that I'm trying to assemble that has me unsure about direction, so sitting down and throwing those thoughts through the loopback interface seems like a good idea.
Moderation
I've talked about this before, but not exactly in the same context. How do you moderate a system? Scratch that, how do you moderate a decentralized, public system with an eye for data transmission and potentially divisive discussions, in the light of recent-era copyright rules.
In totality, that offers some interesting challenges, even if no individual component is an unsolved problem. DMCA et al basically necessitate that there be a way to permanently and completely remove a piece of information from a given server, because legal battles may result otherwise. Maybe they don't happen often in practice, but that's still not the sort of risk I'd be willing to take. Trouble is, permanent and complete deletion of information gives some odd incentives to the moderators.
Ok, actually, lets step back a bit further, I've noticed another assumption that should probably be explained.
Moderators
And that's probably not far enough.
Authority Figures
Hmm. No, it's bigger than that too.
Market-Capable Primates
Right, that's far enough back. I'll try to zoom back in as quickly as I can while at least giving some clues as to my thought process.
The interactions of MCPs is predictable in a couple of ways|5|. When you get a bunch of them talking to each other, over whatever hardware and protocol they actually decide to use, you're going to get three basic types of messages going back and forth.
- messages genuinely generated by some internal state (regular discussion,
*signal*
) - messages generated by external forces rather than intrinsic interest ("buy these dick pills!" or "one weird old tip to whiten your small intestine!",
*noise*
) - messages generated by environmental factors, causing intrinsic interest (religious discussions,
*echo*
)
You can subtype each of those almost arbitrarily, but it's possible to classify any message you come across into one of the three.
The perfect communication forum|6| would consist of a single instance of each *echo*
conversation|7|, and be completely free of *noise*
.
The ideal message profile is (setf *noise* 0 *echo* #'unique-p *signal* #'not-echo-p)
Authority Figures
In order to ensure that a given forum approaches the ideal message profile, most of them vest power in authority figures. These figures tend to be present whether the forum has other ways of telling *signal*
from *noise*
, and I'll argue that the reason is largely because of that third category of message we've identified as being somewhat useful to MCPs. The power vested in these authority figures is largely censorship; they kill the *noise*
that slips through whatever automated/cloud-based/crowd-sourced/buzzword-compliant system is in place to catch the bulk of it, and are expected to make judgment calls bout *echo*
s. If a given topic is judged as being *noise*
y, it's deleted, or its visibility is artificially reduced in some way.
Authority Figures in this context do a lot of their work behind closed doors, and each of them is only human. The vague hope is that either they'll be kept in check by the community that develops around them, or by other Authority Figures. In meatspace, that's not a less-than-catastrophic assumption to make, but web forums tend to be viewed as less important (or perhaps better monitored), so something different seems to be happening.
Hmm. We'll actually need a detour on our way back.
Echoes and Shadows
The problem with *echo*
s is precisely that they demand a judgment call. One human will take a look at the weekly /r/lisp argument about newLisp/Clojure/whatever-the-new-lisp-dialect-is and hit the spam button before she gets past the first sentence. Another will take a look at the exact same conversation, wonder why they've never heard about it before, and grumble quite loudly when someone closes it. That grumble incurs a cost on the system, measured in citizen good-will; someone who had no idea about a particular discussion is effectively prevented from having it, or forced to have it somewhere else.
This is the best-case situation, mind you; Authority Figures that are doing their very best to provide a balanced community free from inbuilt bias will still occasionally trip over an *echo*
and shitcan it, or accidentally mistake a *signal*
for *noise*
. The typical case is probably going to be worse; AFs deleting *signal*
they don't agree with, or aggressively permitting *noise*
they enjoy on some level.
That's the trouble with Authority Figure-based *noise*
reducing systems; false positives and negatives in situations where you'd rather not have them if you can avoid it. The naive response is fine-graining that Authority.
Moderators
Instead of having a set of Authority Figures for the whole community, shard the community and set up Moderators for each shard. That should reduce pressure on each Moderator, as well as allow them to work to their strengths by moderating communities centered around things they're more than baseline passionate about. The thing is, the output of this process is still not accurate sorting of message types. Moderators still commonly delete things for reasons other than objective merit. If you disagree, spend a few hours here|8|.
Moderation
And we're back. Based on the principles outlined above, it seems like the best way to avoid over-moderation-related costs on a community is to make sure that any actions moderators take are
- publicly viewable in context
- fully reversible
As mentioned earlier though, there needs to be a way to actually, factually delete threads posts and images for legal purposes. If you get hit upside the head with a DMCA or similar, you can't really say "Yup, we've deleted it, only our moderator community can see it now", that shit needs to be gone. Which means I'm stuck implementing both, and worrying (perhaps excessively) about the effects of the nuclear option. In other words, I want
delete
; meaning, "make sure no one but mods can see this, show everyone else a deleted tag"undelete
; meaning, "oops, that wasn't supposed to happen, release that one back to the public"purge
; meaning, "nuclear option, this is either unauthorized or illegal media and it needs to go. Log who hit the kill switch, and ask them for a reason (which should ideally be a copy of the C&D that came in requesting the deletion)"
That third one implies the presence of an outside deletions system that keeps track of information about vaporized stuff without keeping it for archival and post-mortem purposes later.
Perfect! That cleared my mind a bit. I think I can see the way through now. Hopefully, this doesn't prevent me from reaching it.
Footnotes
1 - |back| - That's still coming|2|, the project I'm pointedly not mentioning uses auth for the user system, and actually started as a demo project for how you'd go about hooking that up to a larger system.
2 - |back| - Though, to be perfectly fair, I've been saying that about a lot of things.
3 - |back| - Though it did result in two articles that were reasonably interesting to write.
4 - |back| - It can browse one specified directory and play one video at a time. I don't a random wifi user to be able to do anything more than that.
5 - |back| - And a few of them might extend past MC, right into Social Primates in general, but I'm thinking of a particular primate species which disproportionately tends to internet use so we don't have to cast a net quite that wide.
6 - |back| - "Forum" in the general sense, not just the kind you find on the internet.
7 - |back| - You need to talk about these things, but given how often MCPs circle back to them, it's very unlikely you have a new idea, and we definitely don't need to keep hearing about it every week.
8 - |back| - If you were there at the early days of programmers.SE, you don't disagree.