发布于 ,更新于 

2023 年 5 月:离散

都看到这里了就麻烦点个 Star 吧!

顺便一提,博客中的图片启用了 FancyBox,点击即可查看原图。

再顺便一提,博客启用了 Beaudar 评论系统,欢迎留言。(如果无法使用,请尝试更换浏览器。)

1
2
3
4
Scherzando Disarray[0] 
Accelerando Disorder[1]
Fortepiano Dispersion[2]
Staccato Da Capo[::-1]

2023 年 5 月 1 日,星期一

华丽收场

首先得给上个月的最终章收个尾。

嗯,我上个月想着,怎么样也能在月底之前再增补点内容,但是那句话实在是太酷了,后面继续写就有狗尾续貂之嫌,未免是有点缺乏幽默感了。所以,结果而言,非常成功的烂尾了。

不过,我还是想说,那句话真的很酷。

首先,本节的标题谓作 Terminology。

故事是不可能不完结的——对某些两年能水千把章的作者来说,那就不是完结是寸止了——我当然早就明白这个道理了。不过,现在有些东西却再次激发了我对故事能够继续的期待。更确切地说,不太具有教育意义的一个续章。考虑到受众的类型,作品一定是携带一定的目的性的,但是有的时候飞得太高了,收不回来怎么办呢?

好吧,其实不需要列术语。这段话里面能够挖掘深义的关键词总共就 3 个,“教育意义”“目的性”“飞得太高”,它们自然也是互相关联的。

  • 我们假定,公开的作品在创作时就已经是准备拿给别人看的。即使作者沉浸在自我的世界中,落笔时也明晰,作品并非只是为了自己而存在的。因此,作品一定是携带一定的目的性的,这个目的性源自作者,指向读者,或者说就是为了“受众”而存在的。
    • 目的性可以是多样的,包括但不限于取悦读者、戏弄读者、教育读者,或者引发更加混杂的情感。我们一般说,“单纯地讲个故事”,那也是有目的性的,一般来说是以取悦读者为主,如果不是,看来故事还是有点教育意义的。此处的“故事”不等于“剧情”或者“叙述”,“故事”存在纯粹是因为文本存在,有必要用文本来引入场景,来描述人物,来展开情节,来表达情感
    • 与之相对的,一般意义上的“剧情”指的是(大量的)戏剧冲突,讲求的是让读者感受到强烈、递进的情感变化。
    • 由是,“单纯讲故事”可以概括为低戏剧性的作品,但是并不是哪里都低。艺术是很复杂的,艺术鉴赏更是复杂,咬文嚼字就会犯一些小错误——场景人物情节情感都是可以被戏剧化的,也就是说,它们都可以被用来讲故事。这样一来,我们就可以把“单纯讲故事”理解为“单纯讲情节”,而不是“单纯讲故事”——这个说法有点误导性,因为它会让人想到“单纯讲故事”是一种低级的艺术形式,而实际上,它只是一种艺术形式而已。
    • ——低剧情性,或者更直接的,“没有剧情”,这种说法没什么问题,但是这并不妨碍情节的铺陈,照样可以把场景人物情感展现好,而进一步地,能够创造的是一种“情感的空间”,能够承载一种密度并不低的“情感的变化”。
  • 那么,为什么要强调受众呢?
    • 对于已经小有名望的作者来说,他们的受众群体是明确的,进一步地,作品的目的往往也是明确的,反映到作品本身来说,故事的“配置”——以“标签”或是“概要”描述的要素——有很多会在不同的作品中保持一致。尽管如此,情感和情节的变化仍然能够让读者感受到新鲜感;到我们今天讨论的这个故事上来,其本身配置也是迎合“单纯讲故事”的模式的,但是能够把剩下的要素都处理好,那就足够激发我作为读者的期待——叫做故事能够继续也就是说,我能够在这个故事的世界里面继续感受到情感的变化,而不是说,我能够在这个故事的世界里面继续看到情节的变化。这个期待是很有意思的,因为它是一种“不确定性”,而不是“不确定性”——这个“不确定性”是指,我不知道作者会怎么写,而不是说,我不知道作者会不会写。这种“不确定性”是一种“期待”,而不是一种“担忧”。也就是说,我不会担心作者会不会写,我只会期待作者会怎么写。——我已经知道作者有创作的动机(会写)和创作的能力(能写),因此我不担心作者不写,也不担心作者写不好,只是期待作者会怎么写
    • ——回到受众和目的性上来,这个故事的目的性是明确的,它是为了取悦某个特定读者群体而存在的,而这个读者群体的特点是,他们喜欢这种“单纯讲故事”的模式,他们喜欢在这种模式下感受情感的变化,而不是情节的变化。这种故事的缺陷在于,“情感的变化”是高度抽象的,而“情节的变化”则是高度具体的,因此,这种故事的受众群体是有限的,虽说有限,却足以给作者提供源源不断的创作动机,而作者的创作能力也足以创作出足够好的“情感的变化”,从而让这个故事的受众群体保持稳定。
    • 对于还不太出名的作者,甚至是初次涉足这个领域的作者来说,个人往往携带一种强烈的倾向,而创作动机也就从此发源。当然,作者如果想的话,可以随时选择自己的方向、筛选自己的受众,变成另一种作者,但是可以肯定的是,作者并不能变成另一个特定的作者。个人情感与个人的目的性在早期塑造了创作目的性,而在后期限制了创作目的性。——这两者本来就是同一的,但是评论的语义却不同。这种限制并不是说,作者不能够创作出其他类型的作品,而是说,作者不能够创作出能够稳定受众的其他类型作品。——“类型作品”,这个词语的意义在于,它是一种“模式”,而不是一种“风格”。也就是说,它是一种“创作的方法”,而不是一种“创作的结果”。哪怕两个作品的风格完全不同,有时候你也可以断言,这是一个人写的,创作者携带的情感与展现出的目的性是一致的,这种一致性很容易因为外壳(风格)的变化而被忽略,但是它是存在的。
    • 因此,低剧情性和高戏剧性,这种分类方法是不严格的。很多作品因为“剧情好”就被划分进了后者。我自然并不是觉得“剧情好”是什么问题,但是有很多作品就是因为这种外壳的变化影响了读者对内核的感受,换言之有很多读者将对外壳和内核的理解已经完全混淆了。作者一以贯之的是创作方法,而读者的感官更加适应相似的创作结果,受众也是根据这种创作结果来判断作者的目的性,从而形成了一个恶性循环。无论高剧情还是低剧情,都存在着海量套壳换皮的作品,无论作者是否相同,创作方法和目的性是否相同,读者感受到的都是同一种创作结果,这已经和外壳与内核都无关了。现在再来揭开它们的面具,场景是旧有的,人物是旧有的组合体,情节也是旧有的组合体,难道你指望他们要靠着不同的目的性创造不同的混杂情感缺乏创造力的人,只能靠着创造力的人来制造,这是一个很简单的道理,但是这个道理在这个领域里却被忽略了。写故事不仅是“讲故事”,更是“讲故事的方法”,而这种方法是可以被学习的,但是学习的前提是,你要有自己的目的性,而不是盲目的模仿。你要有自己的目的性,才能够创造出自己的方法,而不是盲目的模仿。
    • 由是,受众是非常重要的,作者如果不清楚受众,只能证明根本就没打算公开这部作品。创造力市场作为一个严重饱和的市场,作者的目的性是非常重要的,而这种目的性是由作者的情感和受众的需求共同决定的。经验不丰富的读者很容易被外壳迷惑,但是浅尝就能领会,因为作者的产出是有对象性和限制性的,读者也必须找到自己的位置,而不是哪里有人就往哪里凑。有的读者自认为能够感受到作者的目的性,但是却不知道自己的位置,这种读者往往会成为“狂热粉丝”,他们的目的性是“追星”,而不是“追作品”。
  • 当然,这个假定并不太成立,但是在这种不太严格的语言和思辨环境下,我们没有必要去追究那些脱离常轨的个例。倘我欲将其奉为艺术,证明不同的出发点并不妨碍我作为读者来感受作者指向我的目的性。若是感受不到,则证明我不属于受众群体,那么也就不需要我来评价作品了。
  • 飞得太高了,指一个原本“纯粹情节”的故事因为戏剧性增强,而增加了过多的教育意义。教育意义本身也没有错,但是因为故事原本的设计就是低剧情,高戏剧冲突必然集中在很小的一部分,这样就会导致
    • 因为文本的信息量激增,而读者已经适应纯粹情节的低密度信息,导致读者无法理解个中道理
    • 因为故事本身的设计框架,高戏剧冲突的段落不能很长,很容易潦草收场;或者作者意将与之相关的进一步讨论作为下一个场景的引入,这样也可能导致节奏的不连贯
    • 因为有必要交代更多信息来强化感情爆发,如果这样做就可能导致剧情存在不自洽的情况(这还具体包括两种情况,一种是比较显然的,平行视角下,不同未来交代的过去相互矛盾,而解决方案也很简单,只要减少其他未来的交代就可以了;另一种平行视角下,不同未来交代的客观未来相互矛盾,如果要把被动、客观的事件当作下一个场景的楔子,就有必要考虑在其他的未来如何解决这个矛盾,而这个矛盾的解决方案往往是不解决或者自行解决,也就是缺乏必要的交代,这样就会导致剧情不自洽)
    • 而如果不这样做,就可能导致铺垫不足,或者减少其他未来的交代从宏观来说也促发了铺垫不足
    • 而可以看到,剧情节奏和故事结构处理不好,是一个更加宽泛且常见的问题,在任何故事载体上都能够呈现。
    • 最后,继续在“地面上跑”意味着专注于本来就应该作为核心的“情感”,而不是“教育意义”。这可以说是一个“情感”和“教育意义”之间的权衡问题,而这个权衡问题在“飞得太高了”之后,就变得更加复杂了。因为“飞得太高了”之后,作者已经不再是一个“纯粹情节”的作者,而是一个“高戏剧冲突”的作者,这样就会导致作者在权衡“情感”和“教育意义”的时候,会更加倾向于“教育意义”,而这样的结果就是“飞得太高了”。作者可以,但不一定想去控制自己的作品,而这种控制往往是“教育意义”导向的,而不是“情感”导向的。这种情况下,作者的目的性就会变得模糊,而这种模糊的目的性,可以导致读者无法感受到作者的目的性,而这种情况下,读者就会成为“狂热粉丝”,而不是“追作品”。与之相对应的,作者在完成这个受到载体限制同时又受到故事本身的限制,不得不收笔时,作者仍然有着充足的创作动机(戏剧冲突提供的发展空间)和创作能力,却没有高到能够让人断言这种在相同的外壳下的故事是“有剧情的”,那就反而引发了更多的问题。至于这个故事继续下去,能不能有所突破,答案是,续篇的目的性和受众只能更明确,方向是不能变的,甚至成了束缚。所以本来是因为写的好而出彩,而获得更高的关注度,结局却是陷入了一个“飞得太高了”的怪圈,而这个怪圈的出口,就是“写得更好”。
  • 我得说 Copilot 的 NLP 仍然有很大进步空间(废话——难道想拿 GPT-3 干四代吗?),但是最终结论是明晰的:因为收束是很重要的,而在这种环境下作者也很容易倾向于“教育意义”,这样反而会导致读者觉得不知所云。如果受众倾向于“情感”和“纯粹情节”(虽然说情节真的只是附带的,至少,默认如此),而作者在半途写出了不错的戏剧性,那可能反而会导致读者无法理解个中道理,觉得这些片断生涩割裂,而如果结尾还在强调这种教育意义,那就是“飞得太高了”,确实不如一直在“地面上跑”来得好——虽然,后者又谈何容易呢?
  • 对读者来说,这么长篇大论地分析作者的动机,那可能确实不太实用,但是我本来就是为了逃避艺术鉴赏而不得不鉴赏艺术来说服自己,缓释遗憾——自然,阅历越广泛,遗憾越丰富。我本来就不准备评判有些东西好或者不好,只是举手对讲师说一句“我有点想法……”,然后就在混乱无序和缺乏逻辑的论坛里制造低熵信息。当然,本来就不存在这样一个论坛,只要我说服自己,那就直接说就是了。

不过有一点是无可争议的:

TL;DR

如果作品卖的不是剧情,剧情太好只会是可持续性的竭泽而渔,长远而言对作者和读者都有负面影响。

Copilot 的完美算术教室

昨天兴致偶发,开始统计 Bangumi 上的动画评分,到今天为止已经完成了所有的数据获取和宏观统计。

点进去能看到更详细的说明和更多统计结果。

都看到这里了就麻烦点个 Star 吧!

这里不讲技术细节、代码实现。总之,大概思路是,先用爬虫一页一页地爬取排行榜,获取到每个条目的 ID,再访问 API 来下载 JSON 数据,之后的处理分析真没啥好说的。当然,更重要的是,看这节标题你也知道,从 README.mdstat.py,全都是 Copilot 在干苦工。

这是 Copilot 参与工作比例最高的一个项目,因为,pandas numpy matplotlib scipy 这几件套我是一个都不会用啊。

我高中的时候也做过这个工作,不过当时

  • 我没有一点前端知识。当时是照着网上豆瓣 Top 250 爬虫的代码修修补补。(我已经不清楚具体是哪篇博客了,不过我建议是别查博客了,让 Copilot 帮你完成机械化的部分,不会有错的!)现在的我知道直接一个 BeautifulSoup 扔一个 CSS 选择器进去就能找到条目的 ID 了,但是当时怎么跑的,可能真是个奇迹吧。
  • 我不会用 JSON API,也就是说,我获取条目的具体信息用的是爬条目的详情页来解析,直接后果就是速度慢太多了,最终应该是只爬了 240 个项目。
  • 当时 Bangumi 的受限条目还是从排行榜上隐藏的。现在有排名的受限条目一样会出现在排行榜上,计算条目数量非常方便,看分页数就行。不过,受限条目的 API 自然还是用不了的。

好了,废话不多说,我们上统计结果。所有数据爬取于 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》。

2023 年 5 月 2 日,星期二

好的故事

做了一个过于荒诞的梦,趁着我还笑得出来,辑录如下:


算了还是不写了,彻底缺乏逻辑的虚构已经超过了语言能够概括的范围。

好吧,我就直说吧,我之前也做过很多荒诞的梦,但是唯独今天的毫无理性可言,就好像是为了荒诞而荒诞一样。我现在有个小问题,为什么飞行员会需要买机票啊?还会因为买成了 1250 块的经济舱而被直接丢下啊?这不是荒诞,这是脑子进水了啊。

当然最荒诞的部分应该是高中生飞行员,不过这种设定应该属于是见惯不怪了。


坏的故事

在梦中的场景,我跟一群人围坐在一个圆桌旁,圆桌的中央是银河系中央的黑洞在外部探测器监测到内容的全息影像,一直到圆桌的转盘边缘处为止都是这个大黑洞的影响范围
我夹了个菜,然后直接抛向转盘范围内,奇怪的是这片菜并没有像常规认知下落在桌上,而是开始浮空,并以一种不规律的轨迹在边缘不断盘旋,以各个方向转了很久之后,这片菜尽管还在盘旋,但它已经裂开成几片碎片——这些碎片相互的组合方式也不是常规认知中的一片一片,而是在三维空间中不可能实现地直接交叠,直到最后交叠到看不见为止
我现在想了想,就需要确认个事,在接近黑洞的过程中,是否连同维度也受到了影响?越靠近黑洞中央,展开为宏观状态的维度越多?
除此之外,我还有个更奇怪的猜想,黑洞的视界范围内并不是单纯像电影中那样全是能量的,而是类似行星那样有具体的物质分布——换句话说,黑洞附近并不是均匀的,也有“陆地”、“海洋”,只不过密度变得非常高罢了,这一点我也有点迷惑

2023 年 5 月 3 日,星期三

新的故事

今天的梦也很荒诞,但是至少有逻辑可言,而且还有点新意,所以我就写下来吧。

简单来说,有两个市因为人太少废除了部门(简称废部),然后是一段非常王道的故事,以一次尝试为契机,最终两市合并,成为了一个新的市,广受好评。

好吧,故事概要还是太无聊了,我们还是讨论一下买四两还是半斤肉吧。

从不知道几重梦境中醒来之时,我似乎突然下定决心,要做一款名为“我的暑假”的放置游戏,游戏中主角最初的目标只是“暑假找点事情做”,但是随着游戏的进行,主角会逐渐发现自己的潜力,最终成为一个“改变世界”的人。——或者说,哪怕以我稚嫩的文笔、贫瘠的想象,也要写出一个“改变世界”的故事。

这款游戏还附带许多无障碍功能,都是为了元游戏体验而实现的。比如说,有一个功能可以加粗显示主视角人称代词。这是一个很奇怪的说法,但是主视角并不等价于主角,而是指在游戏中,玩家所扮演的角色。这个角色并不一定是主角,但是在游戏中,玩家的视角一定是主视角。

代词会在“我”“你”“他”之间切换,而且会在游戏中的不同阶段有不同的含义。比如说,在游戏的最初阶段,玩家扮演的角色是一个普通的高中生,这时候“我”指的就是这个高中生。但是随着游戏的进行,这个高中生会逐渐发现自己的潜力,最终成为一个“改变世界”的人。这时候,“我”指的就是这个“改变世界”的人,而不是高中生。

——嗯,显然 Copilot 还没有理解我的言外之意。除了不同章节会使用不同人称叙述,同一章节也会切换人称,用“我”和“你”分别指代玩家所扮演的角色和玩家自己,或者同样用“你”来指代两个不同的“你”。除此之外,有时还会省略人称,这时候加粗显示就不起作用。玩家可以调整为下划线显示,这样就会在原来省略的地方加入一个空白字符,但是代价是下划线并不如加粗醒目,这在视觉设计上也是可以利用的。

还有一些你永远无法在任何一款游戏中见到的很多功能——因为我觉得不太有人会喜欢几十页的游戏内设置。比如说,深色/浅色模式软切换,BGM独立设置淡入淡出,微软雅黑巨型文本框,这些都是我在玩游戏的时候想到的,但是没有见过的功能。但是,这些功能都是为了更好的游戏体验而实现的,而不是为了炫技。

今天的梦境还是很有趣的,但是我还是觉得这个故事太王道了,所以我就写了一个更王道的故事。

结果而言,我觉得我还是不太适合写故事,但是我还是想写一些故事。


好的故事不好。

坏的故事不坏。(我能如此断言,因这并非我的创作)

新的故事不新。

这个故事就点到为止了。

2023 年 5 月 6 日,星期六

脚本道,堂堂连载

我已经 10 分钟没有炫耀我的脚本了。如果你还没有听说过,首先,

都看到这里了就麻烦点个 Star 吧!

原来发布页的内容就写在这里,显得太杂乱了。所以把它独立成一篇文章了。

博客上的发布页:Bangumi:用户悬浮面板

好吧,我当然知道,没有人想再看一遍我复制粘贴了多少遍的文字。

接下来分享点君の知らない物語花絮吧。

CSS_is_awesome.min.js

首先,我的前端水平非常糟糕。好吧,无论是哪一门编程语言,我在语言层面上的掌握都非常有限,现在想起来以前在 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 行的源码,唯一用到样式的地方是保持灰字颜色与字号和原页面一致。

结果而言,确实很失败。只有两条评论。“这么有用的功能居然没人写?”——当我满怀希望地点击发送按钮时,虽然没写下来,肯定是这样想的。

不过,评论区推荐我去做新版的鼠标移到用户链接上时展示一个用户简介的悬浮框。这确实是很有建设性的建议。——结果而言,就有了今天这个插件。

  • 初览源码:原版组件使用了 jQuery 和 Promise,这不巧了嘛,我都不会。
  • 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 个升级,用部分元素和表示哪些升级已购买/解锁)——或者说,它的诨名叫做状态压缩,我可终于是正儿八经用上一次了。
  • 未来计划:不知道。修 bug、优化 UI、优化代码,但是还有什么新东西呢?可能是有的,比如说可以获取用户最近发表的主题,比如说拓展或者独立出条目悬浮框的功能,大概还是有点事可做的。

顺便一提,Bangumi 的组件审核速度大概和另一个 B 站一样神奇。v0.6.3 一下午都在审核中,然后因为更新 v0.6.4 撤下,再更新到 v0.6.4 居然秒过了。