Mastodon 的「去中心化」所导致的……?

看到 @durian@moresci.sale 写的论文导读。在 Mastodon 的去中心化网络里,用户之间的关联状况,其实比 twitter 更加高度集中。

Raman, Aravindh, Sagar Joglekar, Emiliano De Cristofaro, Nishanth Sastry, and Gareth Tyson. 2019. “Challenges in the Decentralised Web: The Mastodon Case.” Pp. 217–229 in Proceedings of the Internet Measurement Conference, IMC ’19. New York, NY, USA: Association for Computing Machinery.
研究人员爬取了在2017年4月到2018年7月期间的1750个实例,涵盖了23.9万用户和六千七百万条嘟嘟。基于这些数据,构建了用户相互关注的网络,以及实例之间的连接网络。

通过分析这些网络,论文发现了长毛象的中心化趋势。以下结果是基于搜集到的样本,不是全长毛象数据。

1. 用户方面,大约50%的用户都集中在10%的实例里面,因此少数的管理员在长毛象联邦中拥有过量的影响力。开放注册的实例拥有的用户比邀请注册实例里的更多,但是,邀请注册实例的用户平均嘟嘟数量差不多是开放实例用户嘟嘟数量的两倍(187嘟/人 vs. 95嘟/人)。不管哪种实例,都有中心化趋势,服从幂律(power law),前5%的实例容纳了约95%的嘟嘟;

2. 内容方面,只要关掉最大的10个实例,跨站时间轴上62.69%的嘟嘟都会消失。有些实例带有话题标签,研究发现,科技相关实例占据了55.2%的实例,却只容纳20.8%的用户和24.5%的嘟嘟。相比之下,虽然只有12.3%的实例是跟色情相关,但是却吸引了61%的全网用户;

3. 服务器方面,大部分实例都集中在少数的自治系统(Autonomous System, AS)上,主要在日美法德四国。最大的三个AS就有62%的实例。比如亚马逊AS上集中了62%的用户,尽管上面只有6%的实例。关注网络上,92%的用户是连接在一起的,但在极端情况下,只要五个AS崩坏,就会把相互连接的用户数量减到46%。

作者还分析了网络结构的强度。虽然长毛象分成了很多独立的实例,但是用户之间是高度连接的,跟推特相比,长毛象的连接更加脆弱,只要破坏少量的重要节点(高关注用户)就能够极大破坏原本的连接,相比之下,推特的关注网络就比较稳健。

伦理声明:研究通过了大学伦理审查,只收集了公共嘟嘟,并进行了匿名处理,论文结果不包括任何的嘟文内容分析。

实际使用中,也有类似的感觉,Mastodon 用户互相 follow 所形成的网络,比 twiiter 更加纵向化。大家相对更集中关注一些较活跃的用户,而在用户网络的末梢,横向的互相关注相对较少,尤其是不同实例之间的关注,更是如此。

但我觉得这种状况,是和 Mastodon(以及整个 ActivityPub)目前的设计机制有关。最近自己架设实例时,看了一下 Mastodon 和 Pleroma 的后台数据库,架构上有一些莫名其妙的地方:

( btw,我的新帐号: @fivestone@fivest.one

在当前实例里访问其它实例的文章时,系统要先把其它实例的文章(以及图片附件)复制到当前实例的服务器(而且是和本地用户的文章放在同一个数据表里……),才能被本地用户读取。本地用户所看到的,并不是其它实例的原始数据,而是被保存在本地实例的镜像。

当一个实例的用户 follow 其它实例的用户时,两个实例的数据库把外来实例用户的信息和 public key,保存在各自的数据库里(也是本地用户和外来用户存在同一个数据表里……)。当外来实例的用户发布新文章时,外来实例的服务器会把这条新文章,主动 push 到订阅了它的那些服务器里存起来。

我能看出这样做的一些好处,譬如减少了实例之间的重复通信、避免最终用户和外来实例间的翻墙屏蔽、增强安全性……etc。然而,一切外来实例的文字和图片,都要先保存到本地服务器,才能被阅读,由此导致的,就是用户在随意浏览外面实例的历史文章时,体验非常不友好

界面里显示的外部实例用户的 following 和 followers 数量,也仅仅是当前实例里和这个用户有关联的用户的数量,而不是这个用户在所有实例的真正总关联数。

不仅是外面实例陌生人的信息,不能直接看到;连已经 follow 的用户,在 follow 之前所写的文章,也不能在系统里直接看到。一定要再打开一个浏览器页面,访问对方在其自己实例上的页面,才能浏览。对历史信息的转发和回复也非常不便。

当用户在 Mastodon 界面中,点开一个陌生人的帐号时,有三种情况:

  1. 陌生人也在同一个实例。此时用户可以直接看到陌生人的所有历史文章;
  2. 陌生人在其它实例,但之前曾经被用户实例里的其它用户 follow 过。此时用户可以直接看到,从这个实例里第一次有人 follow 开始,陌生人发过的所有文章。再之前的文章,则必须打开外置浏览器才能查看;
  3. 陌生人在其它实例,之前用户所在实例并没有人 follow 过他。此时用户完全不能直接看到陌生人的任何历史文章,只能通过打开外置浏览器查看。

不能方便地查看一个人以前发过的文章,也就自然没有兴趣去 follow 他。这就导致了两种「集中化」的关联:

  1. 在同一实例内部的人,由于可以互相看到历史文章,所以更方便互相 follow;
  2. 一些已经被实例里其它人 follow 过的「热门用户」,他们的文章更容易被这个实例里的其它用户看到,从而更容易被 follow。

而与之相对的,就是不同实例之间从没 follow 过的陌生人之间,其横向关联度急剧下降。

如果换一种架构模式,每个实例把自己用户的文章都做出静态缓存;然后用户访问外来实例时,直接访问对方服务器的页面,这样的话,情况会不会好很多?

我的技术水平不够,不能再深入分析对比这些机制的优劣了。但这些,其实和「去中心化」本身,并没有直接的联系。「去中心化」和「中心化」的区别,其实仅仅是后台服务器由谁去建,以及随之带来的审查和信息自由度方面的不同。普通用户在使用中,其实是不应该感受到 Mastodon 和 Twitter 的差别的。我们所面对的,并不是「去中心化」带来的问题,而是在做一套新的「去中心化」架构时,所没能解决好的技术问题。那些「中心化」的服务,也有很多因为设计的不如 twitter 理想,而最终倒闭了。目前而言,Mastodon 的架构还远称不上完美,有很多不足,或者让用户觉得不习惯的地方。但这些问题,其实只属于某个产品设计上的问题,而不应该归咎于「去中心化」

社交平台的六围

对各种用户提供内容的平台进行评价和比较时,我觉得大家争吵的,往往是不同维度的东西,而每个人更在意的方向并不相同。我列了一下,大概有这些因素。首先要做的,是自己打个权重,看看你对每个因素是不是真的在意(譬如公众传播度在有些人心中的比重,是远大于帖子是否会被删的——这未必是坏事)。然后就可以像游戏里角色的六围那样(其实列出来的不止六项),给每个平台逐项打分。

  • 思维自由度:你在写东西的时候,多大程度上,会受到其它因素的约束和干扰?这不仅仅指在真理部面前进行自我审查,也包括你所在的社区的发言氛围,以及你是否介意朋友们看到你发言时的反应。
  • 信息存活性:你的发言会不会被删,以及在更大范围上,你所在的平台会不会突然就没了……(或许这两条应该分开算?
  • 信息持续性:一方面是指热度:文章会不会过两天就沉下去,再没人关注(其实所有平台都会这样)。另一方面,哪怕没人关注,你是否希望文章一直存在,被需要的人偶尔搜出来看看?还有一点就是,当你换了平台,或者换了图床的时候,能不能用某种技术手段,让你的外链一直有效?
  • 便于讨论:你的文章是否便于让同好们进行讨论?以及,你所在的平台是否能聚集你的同好?
  • 公众影响:为了赚钱或者社会责任感,你是否宁愿自我阉割,也希望文章尽可能地被更多人看到?
  • 跨平台开放性:文章是否能让平台之外的用户看到?
  • 隐私安全:如果作者没有主动泄露个人信息,平台的架构以及管理人员,能否防止你被喝茶或者被人肉?
  • 技术便利性:建站、管理、日常访问、翻墙……是否方便?(其实我应该把管理员和普通用户分开的)

此外当然还有更多的参考因素(界面美观、用户体验、是否免费……),这里只是提供这样一个比较的思路。

我这里随手列了几个例子。一些网站我不常用没什么发言权:Facebook、Lofter、Matters、AO3、豆瓣……大家可以自行吐槽。

以下是吐槽部分:

  • 虽然 Mastodon 最初是作为避免 twitter 越发严重的政治审查而存在的,但目前各个实例中的用户趋向(或者说他们希望能趋向)同质化,导致目前给我的感觉,在 Mastodon 里说话的自由还不如 twitter。
  • 在 Google Reader 的时代,以及 Disqus 等平台试图统一 blog 评论体系的时代,blog 的讨论性是接近四颗星的,但目前只能用凄惨来形容。虽然每篇文章还是有评论区,但大家宁愿在 twitter 的链接下面回复,而没有人去文章下面留言了。
  • Facebook 这种完全建立在实名上的讨论群体,以及随之关联的发言规范,和我完全就是不同的世界,索性不予评价。

我为什么来推特

突然大家在回忆这个,于是也整理一下。

其实是先有 blog 再有 twitter 的。

2007年,在某个国内 blog 网站(好像是已经倒闭的 blogcn),看到个功能:在首页更新自己的一句话状态,类似于 QQ 签名档的样子。于是也想在自己的 wordpress 上面搞一个。研究了一圈,发现与其在 wordpress 上写代码,不如去注册 twitter,然后把最新的 twitter 信息同步过来。

当时有个叫做 twitter tools 的 wordpress 插件,可以定时把自己最新的推,存储到 wordpress 的数据库里,然后就可以本地调用,用纯文本的格式显示在首页上。——比 twitter 官方,以及各家山寨们,用 JavaScript 或者嵌入 frame 的方式显示,要清爽很多。这可能也是当时为什么没有首先用饭否、叽歪,等山寨货的原因。

后来还自己写了个插件,把存下来的推,每个月合成一篇 blog 文章。再后来 twitter API 改版,twitter tools 的插件也就不能用了。而 JavaScript 或者 frame 的方式,墙内的访问者是看不到的,反而会影响网页加载,也就没法用。(同样的道理 Google Analytics 也不好用)。一直想自己再写一个,基于新的 API 或者 RSS 把推同步到本地的插件的,但始终没有弄。

所以对我而言,注册 twitter 最初仍然只是自说自话的另一种方式,和 social 完全没关系。

稳定感 – 2

推友提到:寿司之神小野二郎,在纪录片里说,女人不能当寿司师傅,是因为女性生理期会影响味蕾,从而不能做出品质稳定的寿司。——且不说小野二郎说这话时已经86岁,老年人味蕾退化,和女性生理期波动,到底哪个更剧烈。单单是看到这样的言论,瞬间觉得那些所谓追求稳定品质的顶级料理,变成了一件索然无味的事情。让吃到的风味随着生理期变化而随机波动,不是也很好么?

这种对稳定品质的追求,似乎可以追溯到工业革命后期对机械之美的迷恋。这种迷恋在十九世纪的哲学社会学中,有着很深的影响。卢梭那种人应该像机器一样各司其职的社会分工论、从各个机械部件的作用延申到专注文化各部件的人类学功能主义,都可以隐约看出其脉络。

没有Google Reader了,blog还要继续。

RT @ztpala: 没有Google Reader了,blog还要继续。

ps,但首先要搞定在blog上备份twitter的问题。twitter-tools倒是推出了配合Social插件,支持API 1.1的新版twitter认证,装上之后能从wordpress发推,但实时备份目前还没反应。而且原来是用新的数据表保存tweets,现在居然都存到wp-posts里了,导入旧推后,文章序列号从900多直接跳到5000多……挠头ing

如何隐藏身份建立网站

zuola: 妈的,我怎么这么蠢,居然忘了隐藏 truthcn.com 的whois信息导致被和谐,我记不清是否用过privite whois服务了,失忆了,失策了.这次出事还好不需要坐牢。 #TruthCN #FML

对这个级别的geek而言,确实是白痴级错误。我很久之前就说过,那些拥有自己域名的人,其中超过一半在注册域名时填写的是真实信息,其姓名住址邮件电话,都可以在 who.is 轻松查到的。你们丫没有自露癖的话都快去改。。。

刚巧昨晚也想过这个问题:如果自建低俗网站,而又不想被抓去喝茶的话,如何在管理网站的全过程中,不暴露自己的身份?整理了一下,大家补充。

0.1、首先确保你的电脑是干净的,不要有任何病毒、木马、绿坝、QQ、360安全卫士……等等疑似可能会监控你的电脑从而泄露安全信息的软件。对多数非专业用户而言,做到这一点可能比下面所有的加起来都难。但电脑安全方面的知识不是本文的主要话题。

0.2、其实最方便的是使用国外已有的blog服务如tumblr、blogger、wordpress.com(如这个版本的真理部)……就发布信息而言,其实不必非要自己建个网站。但本着geek精神我们还是从自建网站谈起。至于网站在国内会否被禁止访问,也不是本文的话题。反正要是到了被喝茶的程度,之前你的网站也差不多已经被GFW了。

0.3、不要用任何国内的服务:域名注册、虚拟主机、邮箱、支付宝……这个不用多说了吧?

1、先去注册电子邮箱,以后所有的对外联系、在其它网站的注册,都用这个邮箱。不要在自己的主邮箱里同时管理这个邮箱,以免不小心混淆。邮箱名不要和自己的姓名以及另外的常用域名有联系,可以乱写也可以编个其它名字用于误导。注册邮箱推荐用gmail,严重不推荐雅虎

2、注册PayPal,作为唯一的对外支付方式。在购买域名和虚拟空间时,尽量选择那些支持PayPal支付,而不用填写信用卡的。是的,信用卡是整个过程中唯一不得不透露个人身份的破绽!我也不清楚这样用PayPal套一层,是否绝对安全。对方在和你的PayPal账户(就是那个电子邮件地址)交易时,应该是看不到你的信用卡号和信用卡姓名的(?我不确定这一点,请大家查证)。我也不确定Paypal有没有可能向国家机构透露你的用户信息,请大家查证。我不知道那个中文版贝宝是否安全,但谨慎起见还是去英文版注册吧。地址随便填一个(PayPal地址分验证和不验证两种,有些商家需要验证过的地址,但我们不需要)。【妄想狂】如果用的是国内信用卡,理论上国保可以通过在银行记录中对比你的每笔交易金额从而把你找到,所以更谨慎的方式是先从信用卡往PayPal直接充一笔钱,而不是每项支出都分别提取。

———————–
UPDATE:据说1984BBS的张书记被贝宝(PayPal)中国分公司配合国保调查账户隐私,后来还停了账户。具体怎么回事我还不清楚。PayPal的安全性存疑

@SecretaryZhang: PayPal上海公司一个客服询问我一堆问题,进行审查:资金来源方我是否认识、这些资金的使用目的。
———————–

3、注册域名。用godaddy就可以了,支持PayPal。切记注册时不要填真实个人信息!不然即使你事后改了,也很难确保其它域名镜像服务器是否有原先的存档,以及被搜索引擎缓存下来。另外最好不要和你的其它域名,在同一个账号下注册。

4、注册虚拟空间。LunarPages、HostMonster、GoDaddy,都支持PayPal支付的,更多的资源自己去找。不要把低俗网站和你的其它网站放在同一个账号下。不要图方便,用低俗网站的空闲子域名去做其它事情。另外为了同一台空间服务器上的其它站点着想,请自觉给你的网站配上独立IP地址。

5、注册了域名和空间后,就可以用形如“mail@你的域名”的邮箱来作为对外联系方式,之前的几个账号也可以把注册邮箱换成新的邮箱,这样更不着痕迹一些,不过意义也不大。

6、然后就可以建网站了,网络安全和密码复杂度方面,请自己注意。不要在和这个网站相关的任何地方同时留下自己的主网站和联系方式。顺便建议不要把twitter这种到处同步的网站的密码和其它关键密码设成一样的

7、对外联系,如美工、翻译公司等,选择那些可以PayPal付款的,尽管可能要多付一点点钱。网上都找得到。

8、对外联系,不要用你的座机手机直接打电话。用网络电话。Skype可以,但不要用国内从tom.com下载的那个中文版!最好选pingo这种和中国完全没业务往来,又支持PayPal充值的。注册Google Voice后可以得到免费的美国电话号码,作为对外公布的联系电话,支持自动转接和语音信箱。

9、尽量用安全的聊天软件。MSN安全性怎么样,我完全没概念。推荐支持https加密的google talk,但不要用中文的gtalk!(那个是不加密明文的!)。如果和你联系的人非要用QQ,也不要在你的机器上装QQ,用Miranda IM这种支持QQ的第三方软件。

10、身在国内的人,在进行以上所有操作,以及网站日常管理时,最好使用支持加密传输的位于国外的VPN(不然你也翻不了墙)。更稳妥的方式是使用支持加密传输的国外VPN后再跳转到第二个国外的VPN或Proxy。

11、在和别人传输文件,以及在网站上提供文件下载时,请注意发出去的文件是否包含你的个人信息!譬如从.doc文件中是能看到你当初装Word时填写的注册用户名的。所以尽量使用纯文本.txt文件,其它文件如音频、视频、pdf、照片Exif(这个更恐怖,有的手机拍的照片,连GPS位置都在里面了)……自己斟酌。自己机器上装软件时也从不用真名注册,才是王道。

12、不要和任何朋友谈论你做的事情。但可以在网站上留下机关,一旦多少天你没上线,系统就认为你被喝茶了,在网站上公布信息呼吁救援。不过这个trigger最好放在别的地方而不是这个站点下,不然被人提前hack出来,就彻底白痴鸟。

[wordpress plugin] FS Twitter Digest

a: 你blog顶上那个状态是怎么弄的啊?
f: twitter-tools,把我发在twitter的状态同步到blog。
a: 。。twitter。。。。如果不用twitter。。你推荐什么呢?
f: 那你打算在哪里写你的状态呢?
a: 我的blog亚。。
f: twitter-tools,你可以在blog后台写了让它发到twitter再同步回来…反正你如今从海外服务器连twitter不用翻墙了。

嗯,恭喜a伉俪网站成功翻墙以及双双告别cn生涯~~ 用twitter-tools显示状态的时候,可以在边栏使用插件自带的widget,也可以编辑后台主题,在你想要显示的地方写上

<?php aktt_latest_tweet(); ?>

话说twitter-tools有个功能,可以自动把你每天/每周发的tweet整理成一篇文章发到blog上。但每天/每周这个频率太夸张了,乃至自己正常的blog文章会完全淹没在这种话痨帖里,所以很多人用了这个功能没几周就受不了又关掉了。后来我把twitter-tools修改了一下,可以指定日期范围手动生成,然后通常每个月来一次

后来这个修改版给过几个人。但我当时是在Twitter-tools 1.0的代码里修改的,如今都2.2了(虽然没觉得添加了什么功能……),一直不方便升级。刚刚又弄了一番,把那段修改的代码拿出来,作为一个独立的插件,和twitter-tools分离开。

用这个插件的前提:
1. 你wordpress所在的服务器可以访问twitter;(如今还有在墙内活着的个人wordpress么?)
2. 你在用Twitter-tools

生成的整理帖,其中的作者、分类、标签,都根据twitter-tools里的设置自动生成。除了题目和日期外,和twitter-tools生成的格式完全没区别。我自己用的时候,把twitter的输出格式稍微改了一下,这个功能也放在插件里了。你可以在程序第61行把调用函数改成fis_gene_digest(),然后到那个函数里去手动改输出格式。

a同学的想法还是要赞一下的。因为我当年开始用twitter,就是之前看到某博客网站有个可以自己写一句话显示在页面顶部的功能,觉得不错,也想在wordpress里写一个,后来研究了一下才决定用twitter来辗转实现的。个么我的twitter主要还是用来写自己的琐碎,对那些号称要多@别人参与讨论的说法,从来都是无视。别人@给我的,其中聊天性质的也不大想re。我的twitter信息同步到了很多其它网站。大家更多的是在friendfeedgoogle buzz上讨论,个人更喜欢friendfeed一些。

Plugin Name: FS Twitter Digest
Version: 0.8
Author: fivestone
Requires at least: 2.7
Tested up to: 2.9

[download id=”7″]

== Description ==
As a patch to Twitter-tools, this plugin help users post the twitter digest bwtween the manual dates.
The digests use catalog and tag info as what you set in Twitter-Tools interface. It’s all the same as the “Create a daily/weekly digest” function in Twitter-tools, except the title and the date.
If you are a coder and wish to customize the format in the digest, you can change the code at Line 61, and design your own output in the function fis_gene_digest().
This patch was tested successfully under the Twitter-tools version 1.0 – 2.2.1

== Installation ==
1. Ensure you are using the Twitter-tools plugin.
2. Upload the directory “fis-twitter-digest” to the “/wp-content/plugins/” directory
3. Activate the plugin through the ‘Plugins’ menu in WordPress
4. In menu “Setting -> FS Twitter Digest”, generate the digests manually.

== Screenshots ==

[教程] 同步twitter到国内微博客

本文受众:用twitter、有自己的php空间、需要把twitter同步到国内的微博客及某些网站。

原来的方案已经不能用了。虽然国内微博客如嘀咕、做啥……长时间被和谐后终于死灰复燃,虽然复燃后丫们仍然号称自己可以同步到buboo、hellotxt(可以通过这些网站中转到twitter),但实际测试从来没成功过。新方案采用中转程序把twitter上的信息直接发送到嘀咕,在从嘀咕同步到其它国内网站。受twitterfeed的限制,每30分钟同步一次,每次最多5条。

原帖来自月光博客和传说中forgotthemilk写的同步程序CustomURL,但月光的介绍不会编程的人实在看不懂,个么在这里介绍得详细一些。并对代码做了些修改:

1、增加了密码验证,以确保程序不会被别人盗用;
2、从twitter获得的RSS,每句前面会出现多余的”username: “字串,月光的方案里专门在twitterfeed之前写了一段程序过滤,我把过滤功能放到了CustomURL里,以避免程序直接访问twitter,从而让墙内的php空间也能够使用。(but…见ps.1)

需要注册的网站:twitter.comping.fmtwitterfeed.comdigu.com

同步的流程为: twitter -> twitterfeed -> ping.fm -> CustomUrl -> 嘀咕 -> 人人、新浪微博……

1、下载源程序,解压

[download id=”5″]

Continue reading