顺便一提,博客中的图片启用了 FancyBox,点击即可查看原图。
再顺便一提,博客启用了 Beaudar 评论系统,欢迎留言。(如果无法使用,请尝试更换浏览器。)
1 | Scherzando Disarray[0] |
首先得给上个月的最终章收个尾。
嗯,我上个月想着,怎么样也能在月底之前再增补点内容,但是那句话实在是太酷了,后面继续写就有狗尾续貂之嫌,未免是有点缺乏幽默感了。所以,结果而言,非常成功的烂尾了。
不过,我还是想说,那句话真的很酷。首先,本节的标题谓作 Terminology。
故事是不可能不完结的——对某些两年能水千把章的作者来说,那就不是完结是寸止了——我当然早就明白这个道理了。不过,现在有些东西却再次激发了我对故事能够继续的期待。更确切地说,不太具有教育意义的一个续章。考虑到受众的类型,作品一定是携带一定的目的性的,但是有的时候飞得太高了,收不回来怎么办呢?
好吧,其实不需要列术语。这段话里面能够挖掘深义的关键词总共就 3 个,“教育意义”“目的性”“飞得太高”,它们自然也是互相关联的。
不过有一点是无可争议的:
如果作品卖的不是剧情,剧情太好只会是可持续性的竭泽而渔,长远而言对作者和读者都有负面影响。
昨天兴致偶发,开始统计 Bangumi 上的动画评分,到今天为止已经完成了所有的数据获取和宏观统计。
点进去能看到更详细的说明和更多统计结果。
都看到这里了就麻烦点个 Star 吧!
这里不讲技术细节、代码实现。总之,大概思路是,先用爬虫一页一页地爬取排行榜,获取到每个条目的 ID,再访问 API 来下载 JSON 数据,之后的处理分析真没啥好说的。当然,更重要的是,看这节标题你也知道,从 README.md
到 stat.py
,全都是 Copilot 在干苦工。
这是 Copilot 参与工作比例最高的一个项目,因为,pandas
numpy
matplotlib
scipy
这几件套我是一个都不会用啊。
我高中的时候也做过这个工作,不过当时
BeautifulSoup
扔一个 CSS 选择器进去就能找到条目的 ID 了,但是当时怎么跑的,可能真是个奇迹吧。好了,废话不多说,我们上统计结果。所有数据爬取于 2023 年 4 月 30 日,我写本文的时候已经更新了,但是显然差距是不大的。
项目 | 结果 |
---|---|
排行榜条目总数 | 7673 |
排行榜受限条目数 | 1108 |
参与下述统计条目数 | 6565 |
总计评分人次 | 7,573,022 |
条目评分数的均值 | 1153.3 |
条目评分数的中位数 | 395 |
条目平均分的均值 | 6.6637 |
条目平均分的中位数 | 6.7071 |
用户评分的均值 | 7.1854 |
用户评分的中位数 | 7 |
用户评分的众数 | 7 |
由于下列图表保存在 Github 仓库中,国内访问可能有问题。如果看不到图表,可以直接访问仓库。
图表
下列图表中的 ±n sigma
指的是百分位数等于标准正态分布 CDF(±n)
的值时对应的自变量值,而不是 mean±n×std
。(我当然知道这样描述是错的,还是常见错误,但是以后改)
当然这还不是全部,所以快给我点个 Star!
另外,这只是第一部分,第二部分是对于排名算法的分析,我准备学习 Bangumi Research,呃,这里面的排名算法我怎么一个都没听说过?
现在正在研读《Who’s #1?: The Science of Rating and Ranking》。
做了一个过于荒诞的梦,趁着我还笑得出来,辑录如下:
算了还是不写了,彻底缺乏逻辑的虚构已经超过了语言能够概括的范围。
好吧,我就直说吧,我之前也做过很多荒诞的梦,但是唯独今天的毫无理性可言,就好像是为了荒诞而荒诞一样。我现在有个小问题,为什么飞行员会需要买机票啊?还会因为买成了 1250 块的经济舱而被直接丢下啊?这不是荒诞,这是脑子进水了啊。
当然最荒诞的部分应该是高中生飞行员,不过这种设定应该属于是见惯不怪了。
在梦中的场景,我跟一群人围坐在一个圆桌旁,圆桌的中央是银河系中央的黑洞在外部探测器监测到内容的全息影像,一直到圆桌的转盘边缘处为止都是这个大黑洞的影响范围
我夹了个菜,然后直接抛向转盘范围内,奇怪的是这片菜并没有像常规认知下落在桌上,而是开始浮空,并以一种不规律的轨迹在边缘不断盘旋,以各个方向转了很久之后,这片菜尽管还在盘旋,但它已经裂开成几片碎片——这些碎片相互的组合方式也不是常规认知中的一片一片,而是在三维空间中不可能实现地直接交叠,直到最后交叠到看不见为止
我现在想了想,就需要确认个事,在接近黑洞的过程中,是否连同维度也受到了影响?越靠近黑洞中央,展开为宏观状态的维度越多?
除此之外,我还有个更奇怪的猜想,黑洞的视界范围内并不是单纯像电影中那样全是能量的,而是类似行星那样有具体的物质分布——换句话说,黑洞附近并不是均匀的,也有“陆地”、“海洋”,只不过密度变得非常高罢了,这一点我也有点迷惑
简单来说,有两个市因为人太少废除了部门(简称废部),然后是一段非常王道的故事,以一次尝试为契机,最终两市合并,成为了一个新的市,广受好评。
好吧,故事概要还是太无聊了,我们还是讨论一下买四两还是半斤肉吧。
从不知道几重梦境中醒来之时,我似乎突然下定决心,要做一款名为“我的暑假”的放置游戏,游戏中主角最初的目标只是“暑假找点事情做”,但是随着游戏的进行,主角会逐渐发现自己的潜力,最终成为一个“改变世界”的人。——或者说,哪怕以我稚嫩的文笔、贫瘠的想象,也要写出一个“改变世界”的故事。
这款游戏还附带许多无障碍功能,都是为了元游戏体验而实现的。比如说,有一个功能可以加粗显示主视角人称代词。这是一个很奇怪的说法,但是主视角并不等价于主角,而是指在游戏中,玩家所扮演的角色。这个角色并不一定是主角,但是在游戏中,玩家的视角一定是主视角。
代词会在“我”“你”“他”之间切换,而且会在游戏中的不同阶段有不同的含义。比如说,在游戏的最初阶段,玩家扮演的角色是一个普通的高中生,这时候“我”指的就是这个高中生。但是随着游戏的进行,这个高中生会逐渐发现自己的潜力,最终成为一个“改变世界”的人。这时候,“我”指的就是这个“改变世界”的人,而不是高中生。
——嗯,显然 Copilot 还没有理解我的言外之意。除了不同章节会使用不同人称叙述,同一章节也会切换人称,用“我”和“你”分别指代玩家所扮演的角色和玩家自己,或者同样用“你”来指代两个不同的“你”。除此之外,有时还会省略人称,这时候加粗显示就不起作用。玩家可以调整为下划线显示,这样就会在原来省略的地方加入一个空白字符,但是代价是下划线并不如加粗醒目,这在视觉设计上也是可以利用的。
还有一些你永远无法在任何一款游戏中见到的很多功能——因为我觉得不太有人会喜欢几十页的游戏内设置。比如说,深色/浅色模式软切换,BGM独立设置淡入淡出,微软雅黑巨型文本框,这些都是我在玩游戏的时候想到的,但是没有见过的功能。但是,这些功能都是为了更好的游戏体验而实现的,而不是为了炫技。
今天的梦境还是很有趣的,但是我还是觉得这个故事太王道了,所以我就写了一个更王道的故事。结果而言,我觉得我还是不太适合写故事,但是我还是想写一些故事。
好的故事不好。
坏的故事不坏。(我能如此断言,因这并非我的创作)
新的故事不新。
这个故事就点到为止了。
我已经 10 分钟没有炫耀我的脚本了。如果你还没有听说过,首先,
都看到这里了就麻烦点个 Star 吧!
原来发布页的内容就写在这里,显得太杂乱了。所以把它独立成一篇文章了。
博客上的发布页:Bangumi:用户悬浮面板
好吧,我当然知道,没有人想再看一遍我复制粘贴了多少遍的文字。
接下来分享点君の知らない物語花絮吧。
首先,我的前端水平非常糟糕。好吧,无论是哪一门编程语言,我在语言层面上的掌握都非常有限,现在想起来以前在 Leetcode 上填“精通 C++”真是贻笑大方了。
几天前因为考试周闲得发慌,学了学 React.js,做了 react.dev 官方教程上的两个入门项目。顺便也是我第一次接触 JSX,给我带来了第一次冲击。我一边查着文档思考怎么语法全是错的,一边得出结论,算是学了一门全新的语言。
然后因为还是太闲了,就考虑整点爬虫玩。由于我对世界与互联网的认知有限,不知道有什么有趣的数据集可以爬,就想到了 Bangumi 和 Codeforces。但是后者之前也做过相关项目:mojimoon/Codeforces-Rating-System,新的起始 Rating 制度又让分析 Elo Rating 的意义大打折扣,所以就选择了前者。
然后就是上文 5 月 1 日提到的统计结果。确实很有意思,但是还不够,我还想整排名算法。我这时候一直惦记着某科学的动画排名,那肯定得点进去看看最新最热排名啊。
再然后,就是 5 月 3 日再次加入 Bangumi,刷着茶话会刷到凌晨三点,九点醒来继续水评分与排名讨论会 水到中午。这时候我在想,在这人生地不熟的社区——活跃的老面孔姑且是能刷到几个——快速查成分是很有必要的。但是我又没有数据库,能整点啥呢?
5 月 4 日,我给出的答案是史诗级烂活,在讨论、日志和条目页显示用户收藏和评分统计数据。没有任何技术含量,就简单用 .getElementsByClassName()
读一下用户页的 HTML,然后在原页面显示需要的数据,没了。因为请求频率太高,会引发 503 错误,所以我加了 1 秒的延迟并做了 SessionStorage
缓存,还是无法避免 503。不到 100 行的源码,唯一用到样式的地方是保持灰字颜色与字号和原页面一致。
结果而言,确实很失败。只有两条评论。“这么有用的功能居然没人写?”——当我满怀希望地点击发送按钮时,虽然没写下来,肯定是这样想的。
不过,评论区推荐我去做新版的鼠标移到用户链接上时展示一个用户简介的悬浮框。这确实是很有建设性的建议。——结果而言,就有了今天这个插件。
v0.1
| 深色模式:在关灯模式下,原版组件仍然以浅色模式呈现,作为 Dark Reader 重度依赖患者(Dark Reader 识别到网站深色模式而未启用。不过如果网站浅色启用 Dark Reader,组件能正确显示)这当然是得第一个改的。于是我学到了 CSS 变量——这玩意之前在 murasaki 和 Stellar 主题的深色模式配置文章中都有读到过,实际用起来确实是叫一个方便。v0.2
| 统计数据:没错,我注册就是为了整这个。这个功能的最大难点就是把需要的信息提取出来。——用到了 正则、regExp.exec()
、Array.from()
、map(=>)
,我还是不会,但是由于我和 Copilot 都能参考原作者的代码,总是能写出来的。一开始 Copilot 没法正确理解我的需求,但是调试调试总能改对的。显示信息本身是非常简单的,哪怕我不知道 JSX 函数外面一大堆圆括号方括号花括号的语法,往原来的函数体里面加东西就行了!v0.3
| UI 美化:原组件的 UI 其实存在一些没对齐、不对称的问题,这个版本就水了一下,顺便把主题从粉色改成粉蓝双色相间。v0.4.4
| 正式发布:这个版本没改啥东西,就制作了预览图和 GIF(用 Screen2gif 做的)。顺便一提,文盲如我,把放图片素材的文件夹 assets/
误拼成了 assests/
。——不过,正式发布也确实值得改个版本号;也巧,原组件停留在了 v0.3,我就从 v0.4 开始了。——这次发布,收到了相当热烈的反馈,评论区非常热情地提供了美化 UI、增加时间线功能等建议,外加很多言语上的支持。我确实得向你们表示由衷感谢。v0.5.1
| UI 美化:又是一个小版本,因为我整个白天都在写脚本,在学校外面一边被蚊子骚扰一边吃麦当劳打 8 折的巨无霸套餐,一边想着得赶紧关网去复习期末最后一门了。——我从来没觉得巨无霸这么难吃,不过尺寸上来说姑且合格。v0.6.4
| 最新最热:这是目前改动最大、我最满意的版本。新增内容实在太多,建议点击链接获取详情。最主要的,当然是用户可以自行配置显示哪些部分。我本来想写个下拉框,但是 <select>
的问题是需要按 Ctrl
复选,可能对一些设备不是很友好。所以最后只能写个弹窗,用 <input type="checkbox">
实现——我不会写弹窗,因此我只是写了个 position: fixed
、在页面正中间、z-index
比原面板还要高的面板。如果把背景虚化(提高透明度)看起来会很酷,但是我不会写。我还希望能够在修改设置之后立即刷新,我也不知道怎么重新渲染。但是因为弹窗独立于原面板,所以实际上修改设置肯定会导致原面板消失,这样就手工重渲染了。这个版本用到了 localStorage
和位状态以保存选项。位状态这个想法大概是从反物质维度的现实升级里面学到的(用 1, 2, 4, ..., 2 ** 24
分别表示 25 个升级,用部分元素和表示哪些升级已购买/解锁)——或者说,它的诨名叫做状态压缩,我可终于是正儿八经用上一次了。顺便一提,Bangumi 的组件审核速度大概和另一个 B 站一样神奇。v0.6.3
一下午都在审核中,然后因为更新 v0.6.4
撤下,再更新到 v0.6.4
居然秒过了。