一份学生名单是个人数据。把它粘到一个会发到服务器上去打乱的网站里,等于把自己班级的构成交给一个陌生人,而这件事浏览器本来就自己做得了。在这里,名单是在您的标签页里读的,不会被发到任何地方,页面一关它就没了。
抽签本身也不是小事。浏览器那个普通的随机数发生器是为了快,不是为了公平:它的序列是可复现的,而且在某些引擎上很长时间里明显有偏。这件工具只用系统的密码学随机数发生器,也就是用来造密钥的那一个,而且它宁可把一次抽取作废重来,也不去把它硬掰进您名单的长度里。
它还显示了别人藏起来的东西:一共有多少种可能的结果,于是每个名字有多大的机会。在一份二十八个名字的名单上,一次老实的抽取给每个人的机会正好是二十八分之一,而这一点靠算式核对,不靠动画。
怎么用
- 把您的名单粘到上面那个框里,一行一个名字。空行会被忽略。
- 启动工具。它会读这份名单,把它理解成什么样就显示成什么样,然后抽。
- 接着选您想要什么:一个名字、若干个不重复的名字、整份打乱的顺序,或者分组。每改一处,都会重新抽一次。
支持的格式
一行一个名字。空行和多余的空格会被去掉;重名会被保留并标出来,因为两个人可以叫同一个名字,而把它去掉会在您不知情的情况下改变名单的构成。
粘进来的文字
一行一个名字。您可以从表格软件里整列复制过来:每个单元格会各占一行。
它的限制
这里没有转盘,而这话写在这儿,不是在别处许出去的
转盘动画是一个本站规范里没有的图形组件,而我们不会为了好看临时凑一个出来。更要紧的是,转盘不会让抽签更公正:它只是让抽签更慢。让抽签公正的是所用的发生器和有没有偏差,而这两点连同它们的算式都显示在屏幕上。如果您真的缺一块课堂显示屏,请说出来:这是一个正当的诉求,不是一件理所当然的事。
名单最多 40000 个字符,远超过一整所学校
再往上,读出来的名单会先变得没法看,抽签才轮到变慢。所以这个上限画在“工具不再有用”的地方,不是画在“工具不再能用”的地方。
重名会被保留
两个学生可以都叫小雨。一声不响地把第二个去掉,就等于把一个人从抽签里拿走了,那跟人家要的服务正好相反。工具会数一遍重名并说出来,由您来定夺。
两次之间什么都不记
工具不会把任何名单写到您的设备上,也不留任何痕迹:所以它想不起来上星期谁已经轮过了。这是一条认下的限制,也是那句承诺的代价:一份存在某个地方的学生名单,就是一份可能泄露的名单。
抽签不等于把机会在时间上均摊
真正的随机可以连着两次点到同一个人,这很正常:这甚至正是没做手脚的标志。如果您想让每个人都轮到一次、且只轮一次,请用整份打乱的顺序,而不是反复抽取:那个模式就是为这件事做的。
关于这个工具的问题
我的名单会被发到什么地方吗?
不会,而这是这里最要紧的一点,因为一份学生名单是个人数据。按 F12 打开开发者工具,切到“网络”标签页,清空列表,然后把名字粘进来,想抽多少次就抽多少次:请求列表一直是空的。把网断掉再做一遍:工具照样抽得出来。
为什么要这么强调随机数发生器?
因为这是区分一次真抽签和一场表演的唯一一件事,而几乎没有人去看它。浏览器那个普通的发生器是从一个内部状态出发产生一串可复现的序列:它是为快而做的,不是为不可预测而做的,而且它的质量长期以来各引擎不一。而系统的密码学随机数发生器,是用来造加密密钥的那一个。在一个班级面前抽个名字,这个差别不会带来什么严重后果;但当正确的做法只要三行代码时,用错的那一种就毫无借口。
页面上说的“拒绝重抽”是什么?
一种避开无声偏差的办法。系统给出的随机数落在一个固定范围里,比如从零到六万五千五百三十五。如果您的名单有二十八个名字,而我们只是简单地取它除以二十八的余数,那么名单前面的几个名字就比后面的多得到一次机会,因为这个范围没法均分。差距极小,却是系统性的,而且看不见。解决办法是把落在那不完整的一份里的抽取扔掉、重来一次:结果就精确了。
为什么同一个名字会连着出来两次?
因为每一次抽取都不理会前面几次,而这恰恰是一次老实的抽签该有的样子。一件“禁止再抽到上一次那个名字”的工具就不公平了:它给了那个名字零机会,给了其他人更大的机会。如果您要的是每人轮一次,“把整份名单打乱”这个模式一次就做到了,而且谁也不会漏掉。
分组是怎么分的?
整份名单先用费雪-耶茨的办法打乱,再一个名字一个名字地发进各组里,就像发一副牌。这个细节有一个很有用的后果:即使名字数除不尽组数,各组之间也绝不会相差超过一个名字。把打乱后的名单切成几段也能得到同样的均衡,但“发牌”这种写法在代码里更容易读,而读得懂的代码才是查得了的代码。
我能用它来做有实际后果的抽签吗?
非正式的抽签,可以,没有保留:方法是可靠的,而且您可以自己核验。要做一次能对第三方生效的抽签,比如分配一件财物或者一个名额,不行,而原因不在于所用的随机:而在于这里没有任何东西能向第三方证明您屏幕上发生了什么。一次能对外生效的抽签需要见证人、笔录或者执达员,而没有哪个网站替代得了这些,包括那个会向您赌咒说自己可以的网站。
我能把名单留到下次用吗?
在工具里不行,而这是有意的:我们不把任何名单写到您的设备上,所以在那里也就找不出任何一份。请把您的名单留在您本来放它的地方,一个文件或者一张表格里,下次再粘一遍。多一个动作,换来的是一份值得的保证。