普通视图

发现新文章,点击刷新页面。
昨天 — 2026年4月15日林林杂语

文章选题汇总

作者 肖宗林
2026年4月15日 22:09

我是一个喜欢立 Flag,但是有时没什么动力来推进选题和项目。写个置顶文章,就当是我写过了

ICanManage:大学生事务管理应用
想着写个小东西可以把大学的事项都整到一个应用当中,番茄ToDo和口袋清单感觉都差点意思,西电学长开发的XDYou缺乏待办管理的功能,系统自带的日历难添加那种没有特定时间的待办。

大创过程记录:面向大模型抗投毒的检索增强生成技术
如题,还没开始整,也就还没开始写。

npm供应链投毒攻击
整理了一些参考材料扔草稿里了,很怕写成一篇记录几次投毒事件的流水账。

英语打卡系统:用 ai 写全栈
如题,这段时间抽不出身跟老师讨论。在考虑我自己要从中获得什么,总不能在vibe coding然后整天都是在跟ai对话,什么都没学到。

如何让博客实现赛博永生?
Mayx大佬一直在尝试让他的博客实现永恒,本文尝试讨论WordPress博客实现赛博永生的方法。因为没什么好唠的,所以暂时划掉。

文章选题汇总最先出现在林林杂语

昨天以前林林杂语

星火杯参赛小记:XDWe——驱动教学相长的AI智能学习助手

本篇文章使用时间顺序整理和撰写,大致就是比赛的流程。我们在几次答辩后根据新情况对代码进行优化,于是就有每次答辩之后紧跟着的改进和优化。我们项目的大致信息如下:

项目名称XDWe:驱动教学相长的AI智能学习助手
XDAgent:一个AI驱动的师生交流互动平台
所属赛道大学生创业计划竞赛赛道-新一代信息技术赛道(主体赛)
大模型智能体开发挑战专项赛-“教-学-管-评”智能体(专项赛)
所获奖项2026年星火杯网络安全与密码学部选拔赛一等奖

目前专项赛还在进行,本文会持续更新,记录我们参加星火杯的完整的过程。

前言:从一些想法开始

前段时间,学院发了关于星火杯的报名文件。上个学期就听说过星火杯,但没想到这学期刚开学就要提交作品,没有做什么事先准备。

3月8日晚点名结束后,我与一位同学在图书馆用“腾讯元器”做了一个 AI 问答服务,零代码平台开发这个并不难,但一个小时弄出作品还是给这位同学比较大的震撼。星火杯有支持提交零代码平台开发的智能体的赛道,我打算就这样交上去。

当天晚上,那位同学找我,我们和另外一位同学沟通一些想法,初步确定往“教-学-管-评”智能体方向去做,设计一个平台来服务教育教学。

当天我们三个初步的想法

智能体知识库本身其实就是一个 RAG 系统,我将此前做 RAG 的代码基本照搬过来,大致用 flask + langchain 做了一个后端出来。姚焱夫同学负责前端,此前他并没有接触过前端的开发,现用现学,很快就了解了前端项目的文件结构、代码逻辑,非常厉害。孟子钦同学将我们聚到一起,对一些想法进行了完善。


设计与开发

通过我们的观察,大学的课堂教学过程中存在一些问题,例如:

从“教、学、管、评”四个角度对教学过程问题的分析(点击图片可跳转到图片文件)

针对这些问题,我们用我们的项目给出解决方案:

  • 提供大模型问答功能,回答问题
  • 教师可以针对学生提出的问题给出权威回答,完成知识沉淀
  • 知识库可以添加文档、资料,充分利用教学材料
  • 使用大模型对学生的学习情况进行总结,方便老师分析

这是关于系统问答与知识库功能的流程动图:学生向学习助手提出问题,学习助手在知识库中检索相关资料附在问题后交给大模型,大模型回答学生;教师可以在管理后台看到学生提出的问题并给出权威答案,权威答案沉淀到知识库中,下一次有学生提出类似的问题,大模型将被要求根据权威答案生成回答。

这是关于系统架构的动图:前端用 Vue 进行开发,后端由 Python Flask 提供服务,使用 Qwen 开源模型。

以上两张动图都是用 manim 制作的,截取自我们的项目介绍视频。PPT 的模板来自人智院的刘卓东学长。由于视频文件比较大,内容就是这两个动图加上功能的演示,所以介绍视频的链接附在本文的附录。


结合我与 Gemini、ChatGPT的对话记录,总结在开发过程中遇到的问题。

环境依赖问题
这个问题我愿意给到“夯爆了”,配环境的时候基本都会出现各种各样的依赖问题,要么是 Python 版本太低或者太高了,要么是langchain_community的版本跟其他依赖不匹配……langchain两个大版本的接口有很大的差异。每次遇到这种问题问 ai 折腾一两个小时估计都折腾不好,用一下搜索引擎很快就解决了。

之前发的一条QQ空间

在与 ChatGPT 沟通的过程中,遇到开发中最麻烦的两个模块create_retrieval_chaincreate_stuff_documents_chain。根据我们 ChatGPT 同学之前的回答,它应该是知道由langchain_classic这个包的,但不知道为什么它在这及之后就忘记这两个模块被移到langchain_classic里面去了。我也是头脑不清醒,跟着它折腾半天,最后不得不找谷歌看看。(其实谷歌应该是第一选项才对,但是我懒,喜欢让 ai 直接给答案)

ChatGPT“正儿八经”地给出错误回答

我在谷歌上搜索了一下这个导入语句,马上就找到了 python – Using create_retrieval_chain due to RetrievalQA deprecation – Stack Overflow 这个帖子,将langchain改成langchain_classic,问题就这样解决了。

在与 Gemini 谈话的过程中,估计是训练数据过时了或者没有搜索到合适的资料,它反复提醒我:“导包错误:LangChain 较新版本中,记忆和链模块应从langchain.memorylangchain.chains导入,而不是langchain_classic。”还好我自己知道,没在同一个地方摔倒第二次。

在开发的过程中也遇到过依赖地狱,不过折腾几次全部使用新版本就解决了。

ChatGPT的聊天截图

Prompt拼接问题
这个问题也挺搞心态,没找到什么比较好的解决方案,后面用曲线救国的方式解决了。属于是治本不行就治标吧。

Python
if '<|im_end|>' in token or '<|im_start|>' in token:
  token = token.replace('<|im_end|>', '').replace('<|im_start|>', '')
  if not token.strip():
    continue

我在后端开发好之后让 ai 写了一份接口文档,供负责前端的姚同学阅读。原本以为 git 和前后端协作这方面会出现一些问题,结果并没有我想的那样困难。在帮忙装后端环境的时候出现了一个问题,关于 cuda 的问题:

我在装 pytorch 的时候,Gemini 给的命令pip install --pre torch --index-url https://download.pytorch.org/whl/nightly/cu128能用,而cu129的预编译包却找不到。没办法,只好让同学降级,后面我在代码里也适配了没有 cuda 的环境。

答辩之前,代码之外,团队协作的过程中出现一些小插曲,经过沟通顺利解决。团队的负责人需要跟进比赛的时间点,熟悉项目并协调准备好材料,带领团队推进。

准备答辩时将材料交给皓子学长过目,大佬给了一些诸如突出显示关键词之类的建议。


主体赛初赛

答辩出现的问题

3 月 26 日晚上,我参加了网安密码学部的院级答辩。将答辩的录音转文字进行分析,结合答辩时的一些主观感受,发现答辩中暴露的一些问题:

  • 答辩的时候超时了,后面关于项目优势和未来展望的部分没讲到。
  • 问辩的时候展现项目的必要性还不够,相对于通用大模型的不可替代性没讲清楚。
  • 产品对于老师留言提醒的功能做得还不够完善,例如:如果多个学生针对同一问题给老师留言,老师会收到多个邮件。
Deepseek给出的分析

差不多要 29 日学院里统计分数后才会出结果,这段时间可以对提出的不完善的功能进行一下优化。如果被推荐到学校里,完善完善,校赛再战。

与浦彦松学长交流了一下答辩的事情,学长给了一些建议:

  • 不要列技术架构,关于技术的设计和改进可以提,但是要有数据、对比。
  • 答辩不需要讲解技术,讲创新点,细节就说后续会优化。
  • 背景只需要一两页。
  • 不要有长段文字,图片的视觉冲击力好过红色标记。
  • PPT 很重要。

针对问题进行的一些优化

让 ai 完善了一下留言邮件提醒的逻辑,学生提交留言提醒之后会先在最近 24 小时的留言里匹配相似度,如果发现有相似度高于 0.85 的留言,则不会给老师发送邮件通知。

例如学生提交了两条相同的留言

在我们完善代码的时候微信发来消息,我们的项目没有被推荐到校赛,这次主体赛我们到这里就结束了。我们队伍里面讨论了一下,决定将这个项目做完。“无论还有没有机会,无论结没结束,咱们都尽量把这个项目完成。不管成没成功,都是自己做的一个项目。”

学校流程系统的通知

我们梳理了尚未完成的工作,大致分成三个部分:

  • 项目 README 的实现效果部分目前缺省,没有直观的展现
  • 资料库内容还不够丰富,有待充实后发布版本
  • 暂时还没有对于 RAG 投毒的防御措施

假如LLM无限上下文了,RAG还有意义吗? 这篇回答给我提供了一个可能的优化方向,即“主动RAG,让模型自己决定查什么”。

原先的问答代码是这样的,用户提问→系统检索→模型生成,整个生成过程只检索一次知识库,属于是一个比较普通的 RAG 流程。以下是关于这一流程的生动的图片,图片中红色的内容为投毒内容,暂时不考虑这一点。

图片来自Certifiably Robust RAG against Retrieval Corruption(arXiv:2405.15556)

我让 Gemini 根据主动检索的概念对代码进行修改,修改后的 ai 可以自己决定要不要检索知识库,如果是寒暄之类的提问可以直接回答,跳过检索步骤。可以进一步对代码进行优化,让 AI 自己决定检索词。

当提问“栈是什么东西”时,检索被重写为“栈”

关于抗投毒,TrustRAG: Enhancing Robustness and Trustworthiness in RAG(arXiv:2501.00879) 提供了一种可行的方法,主要通过 k-均值聚类和大模型自评估来过滤恶意投毒文档。因为懒,目前文档数量比较少,没有什么过滤的必要。

项目 README 的实现效果需要实际应用之后才能拿到数据,不方便摆太多的数字。

3 月 29 日晚上,在推完主动检索的修改之后,将新生成的向量知识库上传到 GitHub,发了一个版本。目前的开发任务差不多就完成了。

Release Note

3 月 29 日中午,就在我们知道我们这个项目没有被推荐到学校过后不久,学部把选拔赛的获奖名单发出来了,我们项目获得选拔赛的一等奖。到此,主体赛算是“有始有终”。

至此,可以跟主体赛说拜拜了。


智能体专项赛

初赛答辩

清明节时,我与姚焱夫同学在原有的基础上准备专项赛初赛答辩的PPT。专项赛答辩的时间比主体赛还短,只有3分钟时间,问辩时间也只有2分钟,这对我们来说是一个挑战。吸取之前主体赛答辩背景讲太多的教训,我们将四个方面的背景整合到一页。我们参加的是“教-学-管-评”智能体开发挑战专项赛,将这四个方面一起展示感觉更有冲击力。同时,我们避免出现大段的文字,只留关键词,然后用我自己的审美稍微排版了一下,感觉还行?PPT后面的创新之处也使用这样的排版。

参加专项赛初赛答辩的ppt-背景

4 月 9 日晚上,我与姚焱夫同学准备次日早上的专项赛初赛答辩。我们又一次咨询了皓子学长。大佬给了我们很多建议,比如“可以吹自己已经部署使用了一段时间,请了多少个老师同学试用,评分均分多少分”“未来展望,直接落地得了,引入多模态大模型,这种用绘图技术结合下多好”等等。我们对创新之处作了一些修改。

参加专项赛初赛答辩的ppt-创新之处

次日早上,姚同学前去答辩。姚同学不愧是大佬,结构清晰,回答自信。

Deepseek评这次答辩

功能的改进

4 月 9 日,我们看了一下我们的那些展望。姚同学想着用 opencode 把多模态实现了,结果 Deepseek 把代码实现之后,发现它把后端登录、注册的路由给删了。我让同学好好骂一骂 ai。

ai再一次闯祸

这次专项赛立了这些 flag,如果进校赛的话要在比赛之前做好。

  • 多模态问答
  • 知识库自动管理(Python爬虫)
  • 基于 TrustRAG 的抗投毒机制
  • 更智能的 Agent 功能
  • 预留对接学校的系统
  • 使用 Java Spring AI 作为后端架构,贴合实际部署的情况

图文问答(多模态问答)

关于多模态部分,我和姚焱夫同学弄了几次没弄好,opencv和ocr好像都差点意思,大模型已读乱回。

比如这一张,明明没有用算法库里的东西,ai还是回答algorithm

我们打算使用Qwen/Qwen2-VL-2B-Instruct来实现多模态功能,但在回答含文字的内容时效果还是不怎么好。根据 如何使用Qwen3.6模型实现视觉理解 这篇文档的介绍,我打算使用Qwen/Qwen3-VL-2B-Instruct试试,速度快,又具备文档解析、复杂题目解答的能力。我先对原本的后端代码进行一些拆分,给500行的代码瘦瘦身。

在独立出数据模型时出现了问题。后端使用SQLAlchemy创建数据模型,我将数据模型独立到一个models.py文件中,如下:

Python
import os
from dotenv import load_dotenv
load_dotenv()
from datetime import datetime
import flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin

app = flask.Flask(__name__)
app.config.update(
    SQLALCHEMY_DATABASE_URI=os.getenv('DATABASE_URL'),
    SQLALCHEMY_TRACK_MODIFICATIONS=False,
)

db = SQLAlchemy(app)

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    ...

class Question(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(1000), nullable=False)
    ...

class Message(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(1000), nullable=False)
    ...

然后在main.py中将原本的数据模型替换为from modules.models import User, Question, Message,发现失败。后面将上面代码中的db改成从main.py导入,出现循环导入的错误。Gemini推荐使用工厂模式来解决这个问题。但我懒,把数据模型又给搬回去了,没用这个。

Python
from transformers import AutoProcessor, AutoModelForVision2Seq

model_name = "Qwen/Qwen3-VL-2B-Instruct" 

self.processor = AutoProcessor.from_pretrained(model_name, trust_remote_code=True)
self.llm = AutoModelForVision2Seq.from_pretrained(
  model_name,
  torch_dtype=self.dtype,
  device_map="auto" if self.device == "cuda" else None,
  trust_remote_code=True
)

在导入过程中发现我的transformers库没有AutoModelForVision2Seq,搜索之后发现 ImportError: cannot import name ‘AutoModelForVision2Seq’ from ‘transformers’ · Issue #8200 · modelscope/ms-swift 这位与我遇到了同样的问题,也是在用这个模型时发现无法导入。将transformers调整为4.57.6就解决了。

使用了Qwen3之后,模型就能够读懂图片了。

同时给定图片和问题,要求根据图片回答指定的问题
不给文字,让ai分析图片,可以看出ai解释图片内容的能力不错

知识库自动管理(爬虫)

我关于爬虫流程的想法

以上是我用Mermaid画的一个大致的流程,经过确认这也是姚焱夫同学想要的效果:我们设定一些网址,脚本爬取这些网址的网页内容,经过大模型以及一些人工设定的规则清洗后变成干净的markdown文档,存在知识库文件夹中。

RAG知识库搭建-文档预处理-数据清洗:基于异步的AI文本批处理系统实践-腾讯云开发者社区 这篇文章提供了一个可以借鉴的system prompt。基于此,我们设定知识库负责清洗的llm的system prompt。


姚焱夫:
You can just build things.

Hi,这里是XDwe团队姚焱夫。作为我第一个真正意义上的项目,我感觉这次体验很棒。

作为非cs专业学生,其实我对编程方面并不算特别熟悉,不管是编程基础还是工作流程熟练度都没办法和宗林相比。小到Git,终端的使用和开发环境的搭建,大到前端开发,vibe coding的使用,还有项目的协作,我学习到的东西真的很多很多。以前作为兴趣浅尝辄止的东西,在这次实践过程中真的深入了很多。虽然学的是电子信息,但其实我一直是对计科、人智和具身这些方面更感兴趣,所以当其他人都在学习单片机,如火如荼准备电赛的时候,我毅然决然地放弃了之前参加电赛的想法,转而学习自己感兴趣的内容。不仅把竞赛方向换到了更喜欢的Robomaster,也有了参加科研的想法。

这次比赛便是我学习cs的一个初尝。放弃了电院和物理院的比赛,我转而和网信院的同学组队,开发了这个ai问答平台。我能明显的感受到,在这个项目过程中,我是深度沉浸,高度投入的。最开始的时候恨不得把每天的时间都投到项目里面。当然,这期间我的开发能力也得到了飞快的增长,我开始越来越像一个真正的开发者。

想法的构建和具体的实施,都是我们团队经过商讨之后共同完成的,这种协作的工作方式不仅能最大化每个人的能力,大大提高项目的实现效率,而且对以后的工作裨益无穷。我一直相信卓越不是一蹴而就,所以我一开始就告诉自己,不要太看重成绩,注重学习的过程。虽然主体赛道没能进入校赛,但是我们优化过的项目在专项赛道貌似得到了很高的评价。事实证明,如果你认真去做了,就算结果不一定如你所愿,但也一定不会差到哪儿去。

技术之外,我还学到了很多。比如之前一直不怎么重视ppt的重要性……但事实是,ppt就是评委了解项目的唯一渠道,不仅要要重视它,甚至还得弄得夸张点……再比如这次的专项赛答辩。因为我其实是一个非常outgoing的人,所以我一直相信自己肯定能做到,也没给自己太大压力。答辩前一天认真准备了一下,第二天轻装上阵,做了一次还算不错的答辩。

所以,你真的不能吗?你真的不行吗?
未必。

无论是电信科转战cs的决定,还是项目的每一个实现,都在告诉我

You can just build things.

给自己一点压力,给自己一点信心,然后JUST DO IT.

感谢:特别感谢宗林在技术方面对我的帮助~宗林是一个技术栈十分全面的大佬,工作认真负责,是一个特别优秀的队友。
特别感谢子钦对项目在构思,改进和设计方面的贡献~虽然子钦在项目中期因为身体原因产生过退出的想法,但是后来还是坚持下来了,这让我很感动。正如我所秉持的观念,Every one matters.一个人都不能少。
特别感谢我自己,你从不缺乏勇气和自信,Keep going!


致谢与附录

致谢

感谢负责进行前端开发工作的姚焱夫同学、负责协调与 UI 图标设计工作的孟子钦同学、给我们提供宝贵建议的皓子大佬和浦彦松学长与提供 PPT 的刘卓东学长。与此同时,我在大创课题组所做的工作在本次比赛开发 AI 应用过程中给我提供帮助,感谢苗教授和负责指导我们的张博士师兄。

附录

  1. 项目代码仓库:Xiaozonglin/shallowseek: Teacher-Augmented AI Learning System for Xidian University
  2. 项目展示视频:XDWe manim展示视频代码 XDWe项目介绍视频
  3. 大佬推荐的 PPT 设计视频:
    PPT遇上大段文字,这样排版更清晰!_哔哩哔哩
    大段文字并且很多要点,要怎么排版呢?这个视频就教会你!_哔哩哔哩

星火杯参赛小记:XDWe——驱动教学相长的AI智能学习助手最先出现在林林杂语

都市天际线2:通过优化设计路网解决拥堵

作者 肖宗林
2026年2月26日 18:17

《都市天际线2》这款游戏我玩了大概半年,游戏平台上显示我玩了五百多个小时,玩通了两次(指的是达到最终的里程碑)。这款游戏的体验比较好,我在里面喜欢静静看着十字路口的车流发呆。

玩游戏经常会遇到棘手的交通堵塞问题,且最近一次工业区还因为交通条件不好出现了大面积进货成本过高的情况。

先前玩通的一次城市全景
先前玩通的一次城市全景

之前我是这样缓解拥堵问题的:拓宽普通道路、区与区之间用简单的八车道道路或高速公路连接。导致了一些问题:内陆地区没有高速公路,交通条件差,到其他区域的运输时间长;高速公路出入口容易拥堵,从主干道堵到高速上等。

除了工业区大面积提示原料成本过高之外,因为一处人行天桥设计不到位,几个东西“互锁”起来删也删不掉,所以打算重新开一个存档解决交通堵塞的问题。

存档初期建立两个居民区和一个工业办公区,区与区之间用高速公路连接,区内部用双向四车道道路,居民上下高速通过区内部的高速主干道和立交桥。

城市道路承载能力总览
城市道路承载能力总览(紫色为高速公路,橙色为普通道路)
工业区连接立交
工业区连接立交
居民区一连接立交
居民区二连接立交

高速公路匝道出入口可以使用 Taffic 插件设置让行规则与规划车道,经过一番设计,高速公路的承载能力有所提高。

区内路网像前文那样设计会出现一个问题:高速车道会延伸出四条高速主干道插入小区,如果高速主干道位于小区的中间,那这几条主干道需要同时承担车辆进出高速和小区内部两部分沟通的功能,会发生拥堵。

图片远处的高速公路通过两条高速主干道进入小区

根据参考资料[1],要避免拥堵,需要设计以快速路为骨架、主干道为辅助、高密度支路为主体的分级交通网络。这样可以做到交通流逐级往下分配缓解拥堵。同时设计地铁连接主要功能区。

关于地铁的设计:每个辖区设一个地铁站,通过地铁线路连接居民区和工业办公区,区内部设置住宅到地铁站的辖区公交环线,方便居民通过公交转乘地铁通勤。

图片上方为连接各区的高速公路,高速公路经立交接三车道高速主干道,随后连接八车道分隔式次干道,最后连接四车道分隔式道路进入网状居民区

连接网状居民区的路口需要有人行天桥,否则游戏红绿灯的神奇机制会让路口堵塞。

估计是没有人行天桥,又或者是刚建住宅区,有大量居民迁入,路口很堵

“高速-高架立交-主干道-八车道次干道-四车道小区网格”路网的效果不错。在有两处较高密度住宅区连接的次干道,车流流动顺畅。

参考资料:

都市天际线2:通过优化设计路网解决拥堵最先出现在林林杂语

博客聚合有感

作者 肖宗林
2026年2月23日 22:28

我辞去开往维护组负责人的文章一经发出,Blogsclub的创始人便邀请我前去参加维护,盛情难却,如今也在 Blogsclub 上挂了名。几年以来,与十年之约、开往、中文博客列表导航和 Blogsclub 打交道多了,有些话,收集起来发在这里,与君共勉。

数载躬行未肯轻,是非功过任人评。
心持灯火照前路,不负江湖不负名。


因为公告和博客是维护组的传声筒,对开往项目举足轻重,所以谁掌握了公告和博客,谁就掌握了开往。

域名这些基础设施固然重要,服务器可能被投毒,域名解析可能被篡改。掌握基础设施的人如果愿意可以导致开往一段时间的瘫痪。但,QQ 群被封了可以发个公告让大家到新群,域名变了可以发通知让大家改域名。项目需要这些基础设施,但并不依赖某个特定的基础设施。换句话说,开往没了某个域名、某台服务器照样还能转。就影响力来说,在我看来不如博客。博客作为开往维护组对外发声的主要工具,同样也是将开往某个成员的想法、观点上升为项目集体意志的主要途径。

某个圈子里有他们自己的道德,好比行侠仗义,讲的是自己心中的义,而不是法律和规定差不多。

你项1跟个球场看台一样,都有一群人在上面看球,下面踢球的每次都不一样。(开往成员群2025年8月20日公告)


不以“世界是个草台班子”为由耻笑任何一个站在台上、且能一直站住的人。创造一出戏要比评价一场表演难一万倍。敢上台的人,就是要比坐在下面黑漆漆人群里的看客牛逼。宁当草台上的主演,不做豪华席位的观众。

摘自微信公众号“新青年王昱”

有时,你会收到来自他人自以为是的指导。他们其实也不知道该怎么做,随便乱说一通,等你失败之后再来一句「我早就说了…」。要清楚台上的人就是比看客牛逼。我也一样。

开往不一定要发博客、发公告、颁布新规则才能算回应,无声本身就是一种回应。(2026年2月8日晚与柯致信)


两年半前,我曾跟着写一篇《加入开往团队所给我带来的》,具陈当时项目的氛围。“希望之后可以将开往内部的一些讨论分享出来,让大家了解,这是一个有趣的维护组,有趣的小团伙。”如今的光景又有些不一样。

就本文章而言,前面说要严格标准不要门槛太低,后面又说审核不透明。加入门槛这件事高了有人骂,低了也有人骂。我们夹在中间很不舒服。但是我们不会让只有初始页的网站加入开往,至于您遇到的网站可能是由于删库导致的,如果您遇到长期没有更新博客的网站可以通过成员列表的投诉功能向开往反应。至于您引用 HowieHz 的文章,建议您阅读开往去年 5 月和 7 月的博客,QQ 群的事情说明不了什么。关于兜底条款,您可以在仓库中搜索有援引该条款驳回的情况。我在审核的过程中援引该条款时会在社群说明。原本我在项目的讨论里发了一个废除兜底条款的帖子,但组里没有同意。兜底条款算是目前比较平衡的一个方案了。最后,我从初三接手开往到现在,除去高三缺席的一年,四年接手经营的项目被您说成黑社会,我深感痛心。感谢您能拨冗写出这一篇炮轰开往的文章。每个人对开往这种项目都有自己的理解。对我来说,我平时逛逛开往,给博客发一点评论,欣赏欣赏别人的文章,这是开往于我的意义。(于《炮轰开往:泛滥低质链接失去初心的开往,还有存在的必要吗?》一文下的留言)

我问:不知你曾经是否有这种感觉:作为一个项目的维护者,很少从这个项目得到成就感,每次都像是给站长们打工似的被催审,出事的时候被嘲讽,还没有人在我们花时间处理申请和事件之后说一声谢谢。维护者有何错,才让站长们群嘲热讽?谁愿意忍受人世的鞭挞和讥嘲、旁人看客的冷眼和费尽辛勤所换来的小人的鄙视。干得好了,是应该的;干不好了,就是自己的失责。钱要自己花,时间精力要自己出,评价的那张嘴却张在闲人头上。
他答:所以我不干啦。(与某人的对话)

这份所谓的规范貌似可以看作十年之约项目组交接的直接原因。目前十年之约主动注销了ICP备案,关闭了项目网站的访问。
夜以继日燃烧着自己热情与精力,秉持着利他主义辛勤工作着的十年之约维护者,已经做得足够好了!(于频道中的发言)


革命的队伍越到后面越是精纯。

在热闹之后是无人问津和费劲不讨巧。做这件事情需要耐得住寂寞,但我显然耐不住寂寞。

先前的我错了,管理一个团队并不是讨好团队里的所有人,并幻想一些人能够在团队中和睦相处,而是划定一个共同的目标,将害群之马从团队里清除出去。讨好别人太累,幻想用自己的热情留下别人不切实际,跟一个不讲道理的人讲道理更是不着边际。

就跟公司一样,开往的开发不是热闹的,热闹的时候也不会用来开发和维护,而是在吵需求、可用性、必要性这类可有可无的东西,因为其实开往本身就是可有可无的东西,有些需求只要妥协一下就消失了。开往项目的维护在时间精力投入上像个无底洞,就跟不断优化博客加载速度、访问体验一样。从开往跳出来对于别人来说未尝是件难事,互联网也不是我们生活的一切。我更希望维护组的成员能在做完自己安排的事情之后,自我提升完,再来弄开往的事情。显然,我自己做不到。我个人从去年开始就有些担心开往正在我的误导下逐渐背离初衷,还有开往被其他的项目淹没(开往不是博客聚合项目。)我个人的领导能力很差,每当维护组群里要吵起来的时候,我这个INFP都很想发“别吵了,你们别吵了”。从小学开始到现在,由我主导的活动、团体比赛无一幸免地失败了,我一直在告诉自己那只不过是过去的自己能力不够,但一次又一次的巧合…上面论证了我在能力和人品上存在不足,外加我对项目的一些看法和期许。(2024年2月16日一些没用的话)

不要每天花出多少时间来维护,只需要能跟着长期做下来。(与某人的对话)

  1. 「你项」是我当时说的玩笑话,如今看来并不合适 ↩

四载心血筑联营,岂为虚名纸上争。
台前尽历风霜路,屏后谁同苦甘情?
春蚕吐尽心尤热,烛火燃残夜自明。
莫道无声真已默,山河不改月长庚。

博客聚合有感最先出现在林林杂语

HGAME 2026 WriteUp

作者 肖宗林
2026年2月16日 20:00

很多题不会做,等题解出来在这里一并记录自己当时做题的思路和照着题解做题的过程。

一周目

魔理沙的魔法目录

观察网络控制台

看控制台发现网页每过一段时间向/record发请求(通过Authorization Header 来鉴权),再通过/check检查是否达到足够的时间。tracker.js被混淆了,就是一个黑盒。用 Postman 试试看。

通过 Postman 给接口发请求

接口并没有限制 time 的大小,那我们填大一点,发完请求在浏览器等一会 flag 就出来了。

答案自己就出来了

但如果挂机等一个小时的话应该也能做出来。

Vidarshop

我自己没做出来这一题。

什么你这卖的东西这么贵 什么为什么都用uid了用户名还要抢啊, 什么凭啥admin可以管我们所有人的钱啊

题目的题干

update接口直接改的好像是User类的balance属性欸,但是User属性中balance似乎并非。。。该怎么修改balance呢

题目的提示

一开始看题目和登陆页面看感觉像是 SQLi,要直接登录到 admin 账号去管钱。注入试了两次之后发现能登录,登陆进去发现鉴权用的是 Bearer Token,token 为 JWT,用空密钥试了一下不行。然后对着/api/update接口调了半天,发现没用,睡觉。

第二天醒来接着看这道题,注册了一个用户名和 uid 都是 111 的账号,对着 JWT 解析出来的结果发呆。不知道想到什么了,试着把 111 输到密钥里,验证成功…是哪个地方有问题吗?为什么就验证成功了?我将 token 拿到工具里爆破了一下,工具给出结果:密钥还真是 111。

此时的我欣喜若狂

我猜想密钥应该和 uid 是一样的,因为 uid 也被放在 header 传给接口了。拿其他账号一试,我猜错了:是所有账号生成的 JWT 密钥都是 111 啊。这样就可以构造一个 admin 的 token 了。

然后用这个管理员的 token 在题目环境里试了试,知道了这些信息:

  • balance 貌似是所有用户的共有属性,前端的接口是假的(貌似就算用 admin 权限也无法修改,还没找到题目说的 admin 管钱是怎么管的)
  • 应用好像用 uid 来识别是否为管理员,ctf-token 来识别用户名(并且没有检验用户是否存在的逻辑)可以通过在接口请求的 body 里指定 username 来显示某个用户的 balance(虽然大家都共用同一个)
  • buy 接口能使 balance 实实在在地变少,但好像利用不了(没办法指定花的钱数,自然无法改为负数)

我又试了试,还是没有试出什么名堂来。题目归档之后,CopperKoi 同学把题解发给我,是我没见过的原型链污染。大概就是用前面伪造的 token 发请求到 /update 接口,payload 如下:

{"__init__": {"__globals__": {"balance": 2000000}}}

看样子题目确实是这么解的。

二周目

easyuu

很早以前玩虚拟空间的时候有部署过一个 PHP 文件就实现文件上传、查看、登录等功能,给我当时幼小的心灵带来一些震撼。

貌似发现了一个可以利用的接口

“uu是什么意思,很简单吗,分开来想想你就明白啦”,题干是这样说的。从同学口中得知,uu 是 upload & update 的意思。他还说,做题首先应该尝试拿到源码。我在题目环境的/app/update里发现了一个压缩包,像是源码,想着用download_file接口进行目录穿越下载下来又不行,浏览器好像会把../和链接的上一级进行“消消乐”。

要不要encode一下试试?

然后我就把源码的压缩包下载下来了。打开一看,Rust Cargo!

我将代码喂给 GitHub Copilot 和 Deepseek,Deepseek 给出一种可能的攻击方案:可以先在本地加恶意代码并编译,再通过上传接口将文件上传到/app/update(又是一个目录穿越),等代码自动更新之后拿到 flag。

import requests

url = "http://环境地址/api/upload_file"
files = {
    'file': ('../../../../app/update/easyuu', 
             open('target/x86_64-unknown-linux-musl/release/easyuu', 'rb'),
             'application/octet-stream')
}
response = requests.post(url, files=files)
print(response.status_code)
print(response.text)

但是没成功。上传文件这个接口的目录穿越可行。但自动更新这个机制能否利用不清楚,本地编译了几次,一直cargo clean cargo build --release --target x86_64-unknown-linux-musl,文件大小都是553928。估计编译出来的一直是老代码。

baby-web?

读附件的代码之后发现应用并没有限制 php 文件的上传,所以上传了一个一句话木马上去,然后用蚁剑连接。结果发现上传附件的文件夹只有我上传的文件,flag也不在文件系统当中。

HGAME 2026 WriteUp最先出现在林林杂语

新年新气象:网站快一点,再快一点

作者 肖宗林
2026年2月16日 12:28

WordPress 如果没有缓存,就会加载得超级慢。此前,我在网站上装了 Jetpack Boost、WP Super Cache 等插件。昨晚看到 此前发的文章,发现还能装一个 Redis Object Cache。

插件装得越来越多,我问 ChatGPT 有没有必要装这么多插件,它向我推荐了一种方案。如今,网站的访问速度基本得到了改善。秒开估计还是有些困难。

测速全绿(全部深绿还有点难)

Fastcgi Cache

WordPress 上的缓存插件都是在 PHP 运行的过程中起作用的,Fastcgi 缓存可以将服务器的缓存前置到 Nginx,如果 Nginx 匹配到缓存文件直接返回,请求不会给到 PHP。

在站点的 Nginx 配置文件伪静态部分后面加上如下片段,其中加粗部分为缓存的有效时间。

    set $skip_cache 0;
    if ($request_method = POST) { set $skip_cache 1; }
    if ($http_cookie ~* "wordpress_logged_in_") { set $skip_cache 1; }
    if ($request_uri ~* "/wp-admin/|/wp-login.php|/xmlrpc.php") { set $skip_cache 1; }
    if ($args != "") { set $skip_cache 1; }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-cgi-85.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_cache WORDPRESS;
        fastcgi_cache_key "$scheme$request_method$host$request_uri";
        <strong>fastcgi_cache_valid 200 301 302 30m;
        fastcgi_cache_valid 404 1m;</strong>
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;

        add_header X-Cache $upstream_cache_status;
    }

在 Nginx 的全局配置文件中加上如下片段。

fastcgi_cache_path /www/wwwroot/fastcgi_cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Gzip 和 Brotli 压缩

知道创宇的加速乐本就有 Gzip 自动压缩的功能,默认开启且无法关闭。皓子的 静态资源预压缩:零运行时开销,极致节省带宽 这篇文章给我提供了一种可能的优化路径。因为原先安装的 Nginx 并没有带 Brotli 模块,所以我卸载掉重新编译安装了一个。

然后 apt 安装 Brotli,在网站目录里搜索 js、css 文件并生成其对应的 gz、br 文件。

随后,在 Nginx 站点配置文件中添加关于 Gzip 和 Brotli 压缩的设置。

brotli on; brotli_static on; brotli_comp_level 5;
brotli_types text/plain text/css application/javascript application/json application/xml text/html image/svg+xml;

gzip on; gzip_static on; gzip_vary on; gzip_comp_level 5;
gzip_types text/plain text/css application/javascript application/json application/xml text/html image/svg+xml;

但可能是因为 CDN,我并没能测试到服务器返回 br encoded 的内容。

WordPress的插件

弄好上面的缓存和压缩之后,把 WP Super Cache 插件移除掉网站访问起来也不会太卡。目前网站正在用这些优化速度的插件:

插件名用途
Advanced Database Cleaner清理修订版本等垃圾数据
CompressX提供图片的webp和avif版本
Redis Object Cache网站目前使用的唯一缓存插件

新年新气象:网站快一点,再快一点最先出现在林林杂语

HarmonyOS 6初体验

作者 肖宗林
2026年2月13日 13:59

晚上,咖啡豆子突然问我:“你手机用的是华为吗?有升级 HarmonyOS 6 吗?”起初注意过设置里有升级鸿蒙 6 公测版的选项,但没关注。如今被问到,才在网上看看,群里问问。去年春节买的手机如今也可以用上鸿蒙操作系统了。

从安卓的鸿蒙 4 升级到鸿蒙 6,升级前我有一些顾虑:

  • 应用数据会丢吗?
  • 学校要求的软件能否兼容?
  • 没有备案的软件可以使用吗?
  • ……

咖啡豆子晚上因为忍不住好奇就先更新了,我早上找了一些回答,问咖啡豆子,明确了一些信息:

  • 在更新之前系统会进行数据备份,开机后使用微信会自动回复聊天记录,软件数据不会丢。
  • 暂不支持鸿蒙的应用会变成“卓易通”版的应用,软件数据也不会丢,功能也都能正常使用,再也不怕把 2Fa 软件里的数据丢掉了。
  • 鸿蒙操作系统的应用商店有我们学校使用的定制款学习通,至于能不能签到就要开学之后试。

早上,带着一些忐忑,我点下那个更新按钮。手机自己进行下载、备份、安装,整个流程用时不短,备份时还不能切屏,好在我没有什么要用手机处理的事情。接近中午,手机才向我展现出“鸿蒙版”的新面目。

新系统,微信、QQ、支付宝…几乎所有应用都需要重新登录。鸿蒙最开始惊艳我的一点是:输入法在将短信收到的验证码填进去之后会随即把短信标为已读并划去通知。这个体验点真的很小,虽然我手动把消息划掉也用不了多少时间,但真方便不少。

临近中午用网易云音乐听歌,虽然网易云音乐还是安卓版,但体验上优化不少。我不需要进入网易云音乐就可以实现音乐的操控。比起此前将音乐控制放在控制中心,这样我连下划调出控制中心的步骤都省了。

感觉像是苹果的灵动岛?

听说 QQ 和微信少了很多功能,如今用了一天,并没有感觉到什么不方便。微信的消息通知还是跟安卓时的一样,估计是我禁止自启动了。欸,鸿蒙 6 好像连应用启动管理的设置都没有了(都是系统来管的嘛)。

下拉呼出通知栏,解锁手机,滑动退出这些操作都很丝滑。在鸿蒙用安卓应用(比如 Chrome)感觉有些问题,我在编辑文章的时候经常触发黑屏。

目前总的来说,鸿蒙系统惊艳了我,给不时要输验证码的我方便不少,流畅的使用体验也让我舒心不少。

HarmonyOS 6初体验最先出现在林林杂语

云上

作者 肖宗林
2026年2月7日 23:25
建议配合听蒼鈺Danielle翻唱的《归途有风》
晚上从飞机上看

此前来西安坐的是傍晚的飞机,飞在空中只能看到地面上的灯光,灯光连成一条一条路。有些城市像是依山而建,有些城市则从中心向四周放射状伸展。

起初一片黑,什么都看不见。突然出现地上发出的灯光,我们便伸向舷窗看。有时看得清楚,还能看到路上的车灯。

白天,白白的天。从西安回来的飞机是白天的。云多,天又亮,我能从舷窗看到清晰又细腻的云层。云层望不到边。小时候说云像棉花糖一样,看上去好像真的和棉花糖一样软。云多是好,我能看看此前没见过的云层;云多不好,我还没在白天看过高空下的城市呢。回到家之后,我将我在飞机上拍的照片和视频分享给我的父母。他们坐飞机回来时是深夜,看到这些照片时颇为震撼。

回来坐飞机用不到三小时,却隔五个月。

短聚,长离。

云上最先出现在林林杂语

西电信安协会招新系统 Golang 后端开发小记

作者 肖宗林
2026年2月5日 18:07

大概是,今年 1 月份与协会的 CopperKoi 同学把协会的招新系统重新做了一版。CopperKoi 用 Vite 写前端,他和我用 Golang 写后端。后端用 gin 处理请求,用 gorm 对接数据库。文章到这里就结束了。

招新系统公测截图

接下来是废话时间。

CopperKoi 真的是一个很厉害的大佬。

吹,接着吹

迎新页面(一般每年由大一同学建设)

引自某个文档

大概就是这样,今年我们在使用的招新系统有一些功能需要改进,但我找不到代码仓库,协会服务器里的站点文件夹里赫然堆着 Flask 大代码,明显不是今年用的这个。又听学长说历来都有大一新生写招新页面的传统,就来了。

CopperKoi 此前跟我聊过前端。当我问他愿不愿意带飞我做一个招新页面时,他欣然答应了。此前写过一些关于流程和数据库的设计图,CopperKoi 也写了接口文档,开整!

Golang 写完之后可以直接部署成二进制文件,这一点比 Python 方便许多。虽然能做到这一点的语言很多,Python 也有 Pyinstaller,不过没用过。

对面试者的面试流程
对面试官的面试流程
数据库模型
很古早的流程和数据库设计

我们在开发的过程中有一些迷,这里记录一下。

前后端分离了怎么用 X-CSRF-Token 来防 csrf:好像光想着要放 csrf 了,但我们不是前后端分离了吗?😅后来 CopperKoi 想到前端把 JWT 放在 Authorization Header 不依赖 Cookies 就可以让 csrf 几乎不可能实现。

腾讯的 CodeBuddy 写代码是真的快。我刚开始边翻文档边写代码速度好慢,把文档交给 ai 没过多久路由就都写好了。目前公测没有报告出 ai 代码的问题(只有我灵机一动犯的错)。但是 ai 写代码和我一样有时会出现想当然的错误。

ai 的幻觉(幸好我略微熟悉代码)

密码怎么传输?我原本以为在后端 bcrypt 的基础上前端用 sha256 加密之后传输会安全一点,并且将这个设计补充到文档里。但当我问 Deepseek 时,它给出了不同的意见(聊天链接)。“sha256 碰撞都来了。”CopperKoi 经过一番研究之后采用了 Deepseek 的建议,传输明文密码,传输过程中的安全由 https 来保障。

没过几天,CopperKoi 的前端也写好了。测试的时候公告的置顶接口出现了一个很奇妙的问题。

接口原本用来绑定 body 的模型

接口通过 Params 获取要置顶 / 取消置顶的公告的 uuid,通过 ShouldBindJSON 函数将 body 绑定到模型上。Pinned 布尔值为真则置顶公告,为假则取消置顶。

但是我在测试的时候发现:置顶公告的功能可以跑通,但取消置顶都会报告“参数校验失败”的错误。欸,明明 body 的结构符合要求啊。然后,就出现了惊天大瓜。

看到这个回答我脑子都宕机了

六百六十六。我和 CopperKoi 都看呆了。当我们把这个发给学长时,他给我们分享了这个。

When I send a JSON request with the value true it works, but when I send the same request with false I get the following error.

In summary you need a pointer or custom type to know if the value exists due to Go’s static nature.

Bool binding required Bug · Issue #814 · gin-gonic/gin

然后学长跟我们介绍了一件事情。

对于一些可以 nil 的字段而言,静态检查十分重要。GORM 的默认主键自增是从 0 开始的,不是从 1 开始,而你初始化系统用的第一个账户大概率是 admin 账户,账户 id 大概率也是 0。如果因为某些 bug,鉴权中间件没绑上 id……所有人都是 admin 了,而且 go 不会有任何错误汇报。

寄。但我们主键用 uuid 好像把这个坑绕过去了。(不然高低也要踩一回)

给 CopperKoi 提建议的时候我可得劲啦!我给 CopperKoi 提了:将性别从 input 改为单选框、textarea 没有限制宽度可以拉出容器边框、简历显示不出来等等…我们改、测得差不多之后就把代码部署上去让协会里的人公测。

在公测之前,我灵机一动:要不把里面能提的东西都提到 env 里面吧,把参数硬写在代码里不太优雅。然后我看到了 JWT 的 secret…让程序从 env 里面获取 secret。我真是个甜菜!(操作没错,但我的环境变量是用 .env 设置的)

想当然地让程序从 env 里获取密钥

在公测的那天晚上,服务就被学长攻破了。

学长通过修改 JWT 越权访问面试官才能访问的接口

学长通过 gpt 发现的。

jwtSecret =[]byte(os.Getenv("secretKey")在包初始化阶段执行,而 env 是在 main.go 里godotenv.Load()才加载;结果 jwtSecret 可能为空字符串。攻击者可用空密钥自行签发 JWT,伪造 role=interviewer 直接接管所有受保护接口。

gpt如是说

把 secret 硬编码在代码里就把这个漏洞 fix 了。

CopperKoi/XDSEC-Recruitment-System:协会2026招新系统前端
Xiaozonglin/xdsec-join-2026: 西电信安协会2026招新系统后端

西电信安协会招新系统 Golang 后端开发小记最先出现在林林杂语

关于辞去“开往友链接力”项目维护组负责人的辞呈

作者 肖宗林
2026年2月3日 15:59

亲爱的开往项目社区,
尊敬的项目创始人逊狼,
维护组、巡查组的各位同事们:

我在此宣布,我将在不久后辞去开往项目维护组负责人一职。

在我负责开往项目各项事务的四年多来,我受到了来自维护组的同事、博主、网友以及家人的鼓励和支持。他们的支持让我备受鼓舞,坚持在维护项目这条路上走下来。能与各位一起改进开往项目,是我的荣幸。在这里,我对与我并肩处理项目事务的维护组成员、利用零碎时间为项目做贡献的巡查组成员、向我们提出宝贵意见的社区成员、在我遇到困难时给予支持的家人,以及所有使用开往、向我们反馈问题的访客,表示由衷的敬意和衷心的感谢。

在大家的共同努力下,开往官网变得更加美观,跳转页更加多样,项目的知名度也稳步提升。截至撰写本辞呈时,项目仓库的 Star 数量已经突破 1500 个。我在浏览博客留下评论时,偶尔遇到认出我的博主;也欣慰地看到,许多博主将开往作为发现同好、串门交流的窗口。这一切都让我深感自豪。

为确保项目平稳过渡,我已制定以下计划:

  1. 项目现状:项目的代码、议题和讨论均托管在 GitHub 上,目前服务稳定,状态良好。
  2. 继任者:根据项目运维规定,并经过慎重考量,我提名 Kegongteng 接任项目维护组的负责人。他自 2024 年 4 月起加入维护组,长期负责项目的文案工作,熟悉项目各方面的情况。我对他稳步推进改革、沉着应对挑战的能力充满信心,并将全力支持他完成过渡。
  3. 过渡期:接下来的一段时间里,我将作为顾问协助 Kegongteng 熟悉各项职责,日常决策将由他牵头负责。
  4. 权限移交:开往的组织权限将在本周内完成移交。域名、服务器等关键基础设施的移交方式,将由维护组后续根据需求共同商议决定。

在项目的成长过程中,我们听到了来自社区的各种声音,其中既有鼓励也有批评。这些不同的视角,始终是推动开往前行的宝贵动力。我深信,一个健康的开源项目正是在倾听、讨论与迭代中不断完善的。此刻,虽然我选择卸下负责人的职责,但这份对项目“孩子”般的珍视之情丝毫未减。我将继续以社区成员的身份,关注并支持开往的未来发展。大家仍可通过我的社交媒体或个人博客与我联系。

我对开往项目的未来充满信心,我相信项目将迎来更辉煌的篇章。

最后,再次致以我最诚挚的谢意。

祝好,

林林

关于辞去“开往友链接力”项目维护组负责人的辞呈最先出现在林林杂语

博客访问体验量化评估方法的失败探索尝试

作者 肖宗林
2026年1月26日 23:32

1. 前言

在浏览博客的过程当中,有一些博客以其花里胡哨的设计掩盖其贫瘠的内容。今天在友情链接串门的时候发现博友发了一篇《老派博主的博客体验笔记》,将访问体验这个东西又搬到台面上讨论。文章评论区多是吐槽文中提及的这种花里胡哨的设计。若是吐槽,我没办法发出什么有新意的评论。如何建立一套量化评估博客访问体验的方法,给出一个能够代表博客访问体验的数值,这让我感兴趣。

本文预期达成以下目标:

  • 给出一个量化博客访问体验的公式
  • 给出公式中一些权重值的支撑实例
  • 建立一个测试博客访问体验的网站,给出得分和改进建议

你可以直接跳到本文的后言

2. 影响因素

网页设计的过程中应当有效管理视觉配色、规范设计排版样式和精简 Tab 标签信息等事项1。结合各位大佬发的文章(《谈谈不受欢迎的博客技术特征》《关于无后端 web 服务的优化方案和思路》《中文博客倡议》等),容我粗略总结博客访问体验的影响因素,也就是评估应该纳入考量的东西。

  • 访问所需时间(域名解析耗时、TTFB、FCP、LCP等)
  • 不必要的特效(鼠标移动、评论区打字时的特效)
  • 与博客功能没有关联的设计(华丽的背景大图、看板娘、弹窗、切换标签页改标题、悬浮音乐播放组件、广告过滤程序检测器)
  • 影响阅读的设计(难以阅读的艺术字体、颜色对比度、文字大小、无订阅源)
  • 烦人的限制(禁止复制、右键、F12)
  • 没什么内容的文章还弄 AI 摘要
  • 移动端的适配

访问所需时间以及与浏览器有关的指标基本都可以用代码来测。下面由我对影响因素进行逐一分析。

2.1 访问所需时间

为了探究访问所需时间的几个指标的影响,我对 100 个博客进行了测试,由于网络条件,我只测试成功了 36 个,拉了一张表出来。

序号博客名称URL总耗时(s)TTFB(s)LCP(ms)DOM加载(ms)
1TomyJan 的博客https://blog.tomys.top29.0440.040199512232
2不淡定的实验室https://xd.sh.cn27.4410.366186732303
15御坂の地下室https://misakamoe.com9.4942.11043204876
18花开陌上https://moshanghua.net9.1601.59040504108
35夏日鱼塘https://www.summerpond.cn6.1760.08916761550
36MBRjun-Bloghttps://www.libmbr.com5.8790.04412571313
表一 36 个博客的访问耗时、TTFB、LCP 和 DOM 加载耗时

上表中的第 1 个博客虽然测出来的总耗时较长,但是实际访问似乎在 1500ms 前就将主体内容(网站名称、简介、背景图片)加载出来了,后面不知道在加载什么东西。自动播放音乐 + 弹窗广告 + 切换标签页改标题 + 看板娘,后面可以用这个网站做测试(也是 buff 叠满了)。第 2 个网站也是,前 1500ms 就把文章列表这些内容加载好了,后面请求 gravatar 头像的时候拖了 14 秒……感觉是这些没用的资源把 LCP 抬高到原本不属于它的高度。虽然无语,但是这两个例子说明页面加载的总耗时没办法代表我们访问博客时的实际体验。TTFB 能稍微体现访问网站刚开始空白加载的时间,但代表性不大。DOM 加载时间的差别我访问时是感受不到的。

啊,感觉找的这几个指标都挺废的(虽然指标优秀的博客访问体验的确挺好)。于是,我问 Deepseek:

你知道有什么指标可以用来描述页面加载的流畅程度吗?有些网页 1500ms 前就把主体内容加载出来了,但是后面在加载一些无关紧要的东西,拉长了加载时间,LCP 也不低。

它向我推荐 Speed Index 和 TTI 这两个指标,「页面内容视觉填充的速度」和「页面完全可交互的时间」,感觉是我想要的指标。拿这两个指标再测一下,拉一个表。

排名博客名称URLSpeed Index(ms)TTI(ms)
1Foxholehttps://blog.southfox.me1590310541
2异国迷宫的十字路口https://blog.fivezha.cn149553264
3ADD-SP‘s Bloghttps://www.addesp.com1440211609
56杜老师说https://dusays.com21371519
57夏日鱼塘https://www.summerpond.cn17311591
58MBRjun-Bloghttps://www.libmbr.com14291317
59Declan’s Bloghttps://blog.haojin.li10921092
表二 部分博客的 Speed Index 和 TTI

不得不说,这两个指标还真「有点东西」。Speed Index 高的博客相比于 Speed Index 低的博客页面加载感觉会慢一点。TTI 在一些 Speed Index 比较高的博客反而比较低,例如表一的第 1 个博客,Speed Index 为 13580ms,而 TTI 却为 2144ms,有一些资源加载很慢,但页面主体加载比较快,访客访问很快就可以与页面交互了。因此,TTI 比 Speed Index 更能够描述页面主体的加载速度。

故,我们可以粗略定义一个基于访问速度的因子:

Factor=100×2.52.5+ln(1+TTI1200+Speed Index1800+TTFB×1000350)\text{Factor} = 100 \times \frac{2.5}{2.5 + \ln\left(1 + \frac{\text{TTI}}{1200} + \frac{\text{Speed Index}}{1800} + \frac{\text{TTFB} \times 1000}{350}\right)}

我们可将 Factor 视作 TTI(ms)、Speed Index(ms) 和 TTFB(ms) 的函数,函数具有以下性质:

  • 单调递减:随着性能指标变差(TTI↑、SI↑、TTFB↑),因子↓
  • 值域:(0, 100],理论上不可能达到100,易于理解
  • 对数让 Factor 更贴近人眼的感受

我又双叒给这个 Factor 拉了一张表。

排名博客名称URLFactor
1MBRjun-Bloghttps://www.libmbr.com69.84
2ncc 的个人网站https://www.zqcnc.cn69.49
3杜老师说https://dusays.com67.77
4夏日鱼塘https://www.summerpond.cn67.76
5SkYe’s Bloghttps://www.mrskye.cn64.98
23F 君的博客https://blog.fkun.tech50.95
24静静的小窝https://wznmickey.com49.95
25HandSonic‘s Bloghttps://handsonic.top47.67
26提莫酱的博客https://www.timochan.cn46.75
27人家故里https://fx7.top46.45
表三 Factor解析式方案一实测数据

原本还有另外一个解析式来增大不同博客 Factor 的区分度,但是测了一遍「属实」是太有区分度了,没用这个。既然做了,公式和数据贴在这里。

Factor=max(0,100(TTI50+Speed Index100+TTFB×200)0.7)\text{Factor} = \max\left(0, 100 – \left(\frac{\text{TTI}}{50} + \frac{\text{Speed Index}}{100} + \text{TTFB} \times 200\right)^{0.7}\right)
排名博客名称URLFactor
1f2h2h1’s bloghttps://f2h2h1.github.io89.97
2飞刀博客https://www.feidaoboke.com86.93
3爱吃肉的猫https://meuicat.com85.81
4晓雨杂记https://www.lihaoyu.cn85.78
5MBRjun-Bloghttps://www.libmbr.com85.72
100BOB’S BLOGhttps://www.itbob.cn76.54
101Revincx 的小破站https://blog.revincx.icu76.31
102a.d博客https://blog.aiheadn.cn/76.16
103刘郎阁https://vjo.cc76.12
104树洞笔记https://www.x8xx.cn76.05
105无用笔记https://www.xhily.com/76.00
251希望的博客https://www.xiwangly.com56.69
252空鸣深语https://blog.deepchirp.com56.56
253陌子夕生活记https://mozixi.com56.28
254异国迷宫的十字路口https://blog.fivezha.cn55.99
255夜庭記https://musenxi.com55.95
304F 君的博客https://blog.fkun.tech30.51
305阿云的宝库https://www.yunxge.cn28.91
306imba久期的博客https://imba97.com28.76
307Sakitami 的集装箱https://blog.skihome.xyz19.38
308海蓝岛https://hailandao.com/9.80
表四 Factor解析式方案二实测数据

2.2 不必要的特效和设计

原本以为这一块的检测做起来会比较容易,没想到 Deepseek 给出的几版代码误报都很严重,比如误报禁止 F12,误报对比度不足,报告标题文字过大等等……(已晕厥)

程序在检测看板娘、弹窗的时候采用的方式有限,只是通过检测 live2d、waifu、kanban、看板娘、pio 等关键词来实现。

图一 检测结果

FactordesignFactor_{\text{design}}初始化为 100 分,然后按照不同类型的问题扣减不同的分数。

图二 分数生成代码

由两个因子组成总分数。

Scoretotal=Factorperf×Factordesign100Score_{\text{total}} = \frac{Factor_{\text{perf}} \times Factor_{\text{design}}}{100}

3. 搭建测试网站

使用 Flask 弄了一个小网站,可以输入一个博客,会给出博客的分数。然后我拿我自己的博客进去测了一下:不合格。(事已至此,已成艺术)

图三 拿我自己的博客进去测试一下

4. 后言

对比前言提出的预期目标,本文既没能给出一个令人信服的公式,也没能搭建一个可以对访问体验进行测量的框架。本文所做实验是相当失败的。

本文没能正确评估这项工程的复杂性。打开一个网页给人的主观感受不是一两个指标所能反应的,总有博客与实验预期格格不入。探测悬浮组件、鼠标特效也缺乏有效的方案。指标只能反映出过程的某个侧面。我在对比数据的过程中,有时感觉不到数值差异巨大的博客给我感受上的差别。

若有人能够对博客的访问速度、内容质量、页面设计进行量化,并用作对博客进行筛选的指标,那量化的东西就不再是好的了。“当一项指标成为目标时,它就不再是一个好指标了。”古德哈特就像这些指标的诅咒。我失败了,就没脸说量化这个东西是个徒劳。愿意尝试这个东西的人也不会把这篇文章当回事。模拟不出来是我菜,不是不行。

本文的用处可能远没有谈论博客体验的博文用处大。

抱歉,各位读者。

附录与参考文献

Xiaozonglin/webpage-visit-feeling-score: 博客访问体验量化评估方法的失败探索尝试

  1. 孙聪妮.视觉元素在网页设计中的应用与研究[J].卫星电视与宽带多媒体,2019,(19):56-57 ↩

博客访问体验量化评估方法的失败探索尝试最先出现在林林杂语

整活:基于对等原则的流量交换系统

作者 肖宗林
2026年1月16日 17:18

起因是我在“开往-友链接力”项目审核的时候,偶尔遇到一些博客站长非常在意自己的流量,在审核通过之前不把链接挂上去,觉得提前挂是开往占了便宜。被恶心到了,于是我想着做一套基于对等原则的流量交换系统(也就是一个链接跳转),这样链接双方给彼此的流量就是接近的,谁也不占谁的便宜。

这个系统的功能非常简单,只需要给一个跳转的路由传从哪里来和到哪里去,加一些判断逻辑就可以了。下午四处查文档花了一点时间。

系统具有以下特性:

  • 静默跳转:跳转时没有提示页面,非常丝滑
  • 非对等阻拦:当流量不对等时对跳转进行阻拦,将访客送回原地址,决不让另一方占任何便宜,做到真正的对等

流量在交换的过程中可以有20%的透支,也就是一个方向的流量大于另一个方向流量的1.2倍才会阻拦,避免频繁出现阻拦的情况,优化访客体验。

代码实现得比较简单,计数机制没有区分是不是同一个访客,没有针对访客滥用刷次数建立防护机制。

跳转过程非常丝滑,访客感受不到有中间页面
当流量出现不对等时,中间页面会将访客送回原页面

“开往-友链接力”项目本来就是一个流量交换项目。且不论流量对不想靠博客赚钱的博主有什么意义,如果吝惜自己那可怜的流量又想要别人链接给自己流量,这跟贫穷的守财奴有什么区别?

项目地址:Xiaozonglin/swap-system-based-on-equality-principle: 基于对等原则的流量交换系统

整活:基于对等原则的流量交换系统最先出现在林林杂语

生日(贰)

作者 肖宗林
2025年12月26日 00:18

但在此时此刻,你的出生是值得被庆祝的。

在之前的 《生日》一文中我写到过这样一句话。

一年中平平凡凡的日子那么多,可“生日”对每个人来说似乎都是特别的。记住别人的生日,常被视为拉近关系的一种方式——可我连父母的生日都记不牢。有一个例外:我清晰地记得“他”的生日,就在我生日的后一天,也就是第一个月的第五天。

如今我与他,大概已是“形同陌路的朋友”。为他写一篇文章很难,也写不真实。我曾为高中班里一位同学写过博客,那好歹是两年间的见闻与经历拼凑而成;而对他,我手头只有一部分残缺的聊天记录,以及他在社交频道里的零碎推文。我看的动画不多,但听说“朋友”是个很重要的概念。朋友究竟是什么呢?我曾把他当朋友吗?他又是否曾把我当朋友?

我已不记得我们是如何相识的了。翻看他博客里的截图,才确定是三年前的一月。我们在微信上热聊了好几个夜晚,交流福建与山西的习俗,我吐槽这里一下雨就能下一个月,问他那里下雪吗,考他为什么福建沿海降雨反而不如内陆多……对当时的我而言,北方的一切都新鲜而遥远;他也耐心地与我聊着,无话不谈。他喜欢打“舞萌”,那大约是一种音游。他曾喜欢过“散兵”——而散兵的生日,恰巧是第一个月的第三天。

他有一位很优秀的女朋友,据说从小学习信息学竞赛。

我和他曾互相写过一次信。我寄给他一张与他女朋友相关的厦门大学明信片,那是特地从出租屋抽屉里翻出,塞进书包的。今年三月,他从太原回寄了一封,信里提到他们高二做果酒果醋的实验,也向我流露他对成绩的焦虑。那时我已无法在周末去邮局寄信,便用活页纸写了回信,拍照发他。“转到文科已经不现实,焦虑没用,重要的是行动,行动啊!”我这样写道。他或许是听进去了。

那封信里,他还问我关于双相情感障碍的看法。今年二月时,他曾突然问我:“抗抑郁药推荐药店还是就诊医院买?”我一时错愕。“真的要到吃药的地步吗?”我问他能不能尝试心理咨询,他说不行;能不能请假调整,也不行。我便不知再说什么——他仿佛被困在一扇门里,没有钥匙。

“你看搞笑吗?一对恋人,男的是边缘型人格障碍,女的是双相情感障碍。”后来,他在群聊里发出一长串聊天记录,里面全是他与她、他与她父母、她与她父母之间错综复杂的对话。我默默看着,望而生畏。

他在频道里发诊断报告,发朋友圈,还有那只带着划痕的手。

大概我们之间已无话可聊。他开始对我已读不回。“感觉你最近经历了很多混乱的事。希望你能找到自己的‘轨迹’,或者至少收获一份稳定平和的心情。”他没回。“新头像是自己画的吗?”他没回。“如果物理或生物有问题,随时可以问我,我这阵子都在的。”他依然没回。

高考后的暑假,我曾写信给另一位笔友倾诉:“他们不会抛弃我了吧?我向两位即将升入高三的网友表明了答疑的意愿,他们从此再不回复……”那时我不理解。笔友却宽慰我:“他们可能不想在网友面前谈学习,又不好直接拒绝,只好暂时搁置你的提议。”

今年九月,我又提笔给他写了一封信,回忆之前热聊的夜晚,也表达对他已读不回的嗔怨。信从西安飞往南京,再转至太原。“信收到了吗?”“看到了。”回答依然寥寥。

至于他生活的全貌,他从未向我展开太多。近来,他又开始在朋友圈发“舞萌”的截图。我看到他与高中朋友、老师的合影——不知何时,他好像已从门里走了出来。

圣诞节,圣诞老人会把礼物悄悄放进孩子的袜子里。多美的故事。生日,生日——诞生之日。

我依然记得他的生日,在第一个月的第五天。虽然我们已走散在各自的生活里,但那个曾经无话不说的冬天,那些交换过的气候与习俗、明信片与信纸,依旧在记忆中落着细雪。也许某些人出现,就是为了陪你走一段路,看一段风景;路尽之时,不必追,也不必忘。只要记得,我们曾真诚地相遇过——而你的诞生,至少在某个平凡的夜晚,曾被另一颗心郑重地庆祝过。

我们见过。我,记得你生日。

生日(贰)最先出现在林林杂语

生日

作者 林林
2024年1月14日 06:35

这些天我因为辩论赛几乎没再写过什么完整的文章了。2024年1月4日,是我的公历生日。一想到“生日”这个话题还蛮有意思的,于是想要动笔写作这篇文章。

生日,顾名思义,就是出生的日子。乍一想,那也就是个日子嘛。我们生来过了那么多个日子,其中有些日子因为其发生的事情具有特殊意义而被我们所纪念。那照这个说法,生日也可以叫出生纪念日了。

出生,也就是降生。先前的我们不知在哪里,而后来到了这个世界上。蚂蚁来到这个世界上,好像也没过什么生。人参加工作之后也可能不过生日了。生日也许是小孩子过的。“这是我的日子。”

由此能想到,生命的诞生是件多么神奇的事。要是我们没有出生,那还会有现在的世界吗?

我们想象,在一个加班的夜晚,耳边忽然传来生日歌,还有孩子的笑声,可能会让我们不由自主地想起之前自己过生日的场景:拿出蛋糕,点上蜡烛,关灯,吹灭,切蛋糕。蛋糕常常被我们看作生日的象征之物,但蛋糕并不重要,我们在生日时的快乐才重要。若寿星吹蜡烛的时候板着个脸,那生日自然过得淡然无味。

像生日这样的纪念日可以帮助我们在特定的日子回想起特定的事。在生日的时候,诸多平台都会给你送上生日祝福。“生日快乐!”这个日子可能不像签大单的日子那样重要,但在此时此刻,你的出生是值得被庆祝的。

生日最先出现在林林杂语

兴趣的魅力

作者 林林
2023年11月19日 23:48

在英语当中,喜欢有like和love两个单词,分别表示不同的程度。若是程度比love还要深,那就要用热爱passion来描述了。一个人要想将某件事情做到极致,大概就需要对这件事情有兴趣。许智宏院士曾说过:“不管做什么工作,一旦有了兴趣,你就会有毅力坚持下去,可以长时间专注于一件事情。”热爱在我眼中是对某件事情“痛并快乐着”。热爱一件事情,无论在这件事情上花多少时间,我都乐意。

我们的英语老师曾说:“要想考好高考英语很简单,路都铺好了,但要想学好英语,就需要对英语有兴趣了。”兴趣这个东西可能就是在某一瞬间像火花那样闪现,就像一对情侣再见面的时候可能通过眼神交流就在某一时刻坠入爱河一样,有兴趣的人和他着迷的东西也掉进河里无法自拔。

罗素曾在《哲学简史》一书中这样描述哲学:“在具体科学之间存在着许多空白,当我们不慎从具体科学掉到空白中,我们就会陷入永无止境的思考,哲学就诞生了。”民主、公平、自由、正义、善恶,越是抽象的名词,对我们就越有吸引力。(《乌合之众》)陷入对这些概念的思考,过程是“痛并快乐着”的。

正如天赋是与生俱来的一样,有些人天生就对语言有感觉,有些人天生就对哲学感兴趣,还有些人对整天沉浸在理工研究中的生活感到着迷。我们肩膀上的脑都是不一样的,发现自己真正喜欢的东西,发现知己也是我们穷其一生所要做的事。

兴趣的魅力最先出现在林林杂语

随笔几则

作者 林林
2023年11月19日 05:22

音乐:I’m in paradise

每周我们的语文老师会让我们写一篇随笔,或长或短,但都心有所得。现在已经半个学期了,在这里将这半个学期以来积累的随笔统一发一下。

为什么要尊重知识?因为知识就是力量。亨利•福特派大批检修工来都未能解决的故障,物理学家斯坦门茨一听声音就知道问题出在哪里。《论衡》中曾有一言“人有知学,则有力矣”。掌握丰富知识的斯坦门茨可以快速的解决检修工们处理不了的故障,掌握知识的人有能力去解决更多的问题。这社会需要有能够解决问题的人,所以我们要尊重知识、尊重知识分子。

正所谓,“天下不患寡,而患不均”。在我看来,城市中出现幼儿园一孩难求和农村里适龄儿童入园难之间形成的反差,是由于教育资源分配不均造成的。教育资源分配不均的问题还不仅仅体现于此。近年来,多地发布义务教育阶段学位预警,而在一些教育发达地区学位反而有冗余的情况。城乡之间,东西部之间,教育教学资源的分配存在很大的不均衡,这种不均衡导致了开头提到的反差。
那么是什么原因导致了这种分配不均呢?在我看来,主要是城乡之间,东西部之间的经济发展水平导致的。教育是一种社会公益性质的服务业,虽然它与盈利为主要目的的商业服务业不同,但它受当地基础设施、人口和财政等状况的影响,仍会向经济发达地区倾斜。故,教育资源分配不均一部分是由于经济社会发展不均衡导致的。
世上的万物都有从不成熟到较为成熟的曲折发展的过程,我国的教育体系也是如此。政府应该加大对教育欠发达地区和乡村的教育资金投入,做好教育教学质量和资金使用监管,始终坚持人民立场,让投入教育的每一分钱都实打实地用在教书育人上。

“生命在于运动。”不错的,大家嘴上都嚷嚷着要体育锻炼,但实际坚持运动的人又有多少呢?我看这数字并不乐观。那么,是什么原因导致我们中的一部分人没有坚持运动呢?是我们身边的体育设施太少了吗?我看并不是。第一,体育设施并非参与体育锻炼的必要条件,例如跑步、慢走就不需要专门的体育设施。第二,我们身边的体育设施其实在逐渐增多。这次亚运会、大运会新建场馆的开放就为当地百姓提供了许多运动的好去处。我们可以观察到的是:我们身边的公园、运动器材越修越多,却出现了一些公园荒无人烟,一些运动器材无人使用的情况。所以,无法坚持体育运动的原因不是,至少不主要是体育设施不足。相反,在我看来,无法坚持体育运动是“不为也,非不能也”。从外部环境看,近年来我国经济下行压力加大,“内卷”成为网络热词,人们的工作生活压力比以往大很多,有些时候可能抽不出时间进行体育锻炼。从内部因素看,一部分人没有养成运动锻炼的习惯,内心里缺乏进行体育运动的动力。
对此,我认为政府应继续推进“健康中国”“体育中国”工程的建设,我们作为个人应养成运动的习惯,并尽自己的一份力量带动他进行体育锻炼。

每个人都可以是诗人,只要他有一颗观察思考生活的眼睛。外卖小哥王计兵在每天忙碌工作之余不忘写诗,还出版了个人诗集。写诗是一种精神行为,能否写诗与职业的关系不大。与先前一些图书馆允许拾荒老人进馆阅读相似,我们每个人都有创作诗歌的权利。创作诗歌是对生活的诗化,让我们用诗的态度去看待生活。一位诗人,无论他面对怎样的生活,总能看见其中的美好。当今,丰富的物质生活对应的是精神上的疲乏。而创作诗歌,用诗的态度生活可以帮助解决这一问题。因此,我们不仅可以写诗,还应该写诗。

我们国家为什么没有获得诺贝尔物理学奖、化学奖的科学家呢?相比之下,日本获得诺奖的科学家却比比皆是呢?若将或者诺奖的数量来衡量一个国家的科研发展水平,我们就会发现我们国家在科研尤其是基础科学领域存在着与别国很大的差距。
造成这一差距的原因,除了先前落后的历史之外,还有体制和环境的原因。环境对一个人的成长来说非常重要,科研土壤对科学家的培养也十分重要。爱因斯坦曾说,要评价一个人,不能看他获得了什么,而要看他贡献了什么。当下,个人主义正逐步污染着我国的科研环境。科学家们谈论彼此,最先提到的是谁获得了国家级科研专项经费,获得了求是杰出青年科学家称号,而不是谁发现了反霍尔现象,谁推出了标准模型。我们说环境对个人的影响毕竟有限,因为有个人定力的作用。但在这种以获得荣誉为价值导向,对科研成果漠不关心的环境下,专心从事科研的人会灰心丧志,不得重视,我们国家科研水平落后也就很显然了。

“追随你的内心。”这是无数人梦寐以求,但遥不可及的境界。对于大多数人来说,热爱某件东西似乎是件容易的事,但喜欢什么就去做却很困难。安久喜欢仰望星空,便由一位业余的天文爱好者成为了一名天文摄影师。一位视障儿童因在黑暗中由收音机得到了希望,便想成为一名播音主持。在电影《心灵奇旅》中,我们每个人出生都需要一个火花,这个火花就是我们陶醉的热爱的东西。“生活不止眼前的苟且,还有诗和远方的田野。”喜欢星空就追求星空,喜欢诗就创作诗,喜欢探险就上天入地。有个口号,“喜欢你所做的东西,做你所喜欢的东西”。可能受限于环境,我们也许无法将自己热爱的事情作为一项职业,但只要我们拥有一颗向往热爱的心,我们就始终是自由和快乐的。

随笔几则最先出现在林林杂语

结束之后

作者 林林
2023年10月29日 17:47

前天是校运会的第二天,班里播了《茶啊二中》电影和《工作细胞》里有关流感病毒的一集。今天提早放学,晚上十点大家就都走了。我留下来,看着班级里乱糟糟的桌子,听着班级的风扇发出咯吱的响声,坐在讲台上。黑板擦过了,但还能从中看出字迹,那是运动会自习的作业,是今天运动会的项目,是课表。讲台上的秩序册摊开着。

我们初中老师跟我们讲,他有一次晚上睡不着,打开手机调出监控,教室空荡荡的,有的同学还把笔散落在桌上,地上有垃圾。寂静让他不禁要想些什么。

“如果地球毁灭了,那…”
“那就结束了呗。想那么多干嘛。”
“那结束之后呢?”
“…”

结束之后最先出现在林林杂语

尊重不同

作者 林林
2023年10月29日 06:29

“君子和而不同。”在不同的社会历史背景下,在不同的人生经历的基础上,我们每个人都有着不同的价值判断与价值选择。正如世界文化具有多元性一样,我们的价值取向也各有差异。尊重各自的不同,放下彼此的偏见,正是当下我们作为开放多元社会的成员所应具备的素质。

“人生来就应是自由和平等的。”人类社会的多元代表着有“少数”存在。有时成为“少数”并非自己所能决定,却要遭受他人异样的眼光和尖酸刻薄的言语。我们看到坐着轮椅的出行障碍人士会感到好奇,我们遇到“长相突出”的会感到不自然,我们见到与我们意见不同的会大骂粗口,我们听到与常见价值取向不同的人会背地讥讽……这些都是不尊重“不同”的表现。这些行为很明显影响到了社会的包容性,对少数群体不友好。

我所强调的尊重不同,并非是对主流思想的结构,对大多数群体的道德绑架。我也不认为成为少数就可以高人一等。在我看来,社会至少需要给“少数”生存的空间,在主流外应该允许特例的存在。

前文提到,成为少数有时并不是自己的主观意识所能决定的。这就好比客体事物是不会因我们的主观意识而凭空消失的。例如性取向和性别认同就是既定的。目前普遍的说法是,性取向和性别认同是不会因我们人的意志而转移的。这所带来的影响有两个方面:第一,我们无需思考我们应该是怎样的性取向或性别认同,因为“是”出现在“应该”之前。我们也无法主观变成某种性取向或性别认同的人。第二,我们无法为我们的性别认同或性取向提供必要性和合理性的解释。“你配是男同吗?”回答这类问题,就是在为必要性和合理性做解释。很显然,这类问题是回答不了的。因此,我们也不需要为自己早就有的性别认同和性取向做任何解释。

尊重不同最先出现在林林杂语

读后感

作者 林林
2023年10月15日 06:35

在小学,我似乎没有读过多少书。有些书,例如《阁楼里的秘密》和《绿山墙的安妮》里面的内容我已不记得了,当时可能也没有太认真看。《金银岛》只看了开头和结尾。从小学开始,我们的作业里就有读后感,别的班级甚至还有阅读检测题。写这些读后感的时候都会不自觉地写成摘抄,但摘抄的内容现在不记得了。《山羊不吃回头草》《青铜葵花》《童年》和《母亲》里的东西仍然记忆犹新。

初中的推荐书目好些,但每次语文考试都会有阅读检测题。这些题目会考祥子用多少钱买的黄包车,车厂的经营者是谁,尼莫船长到了哪里之类的问题。这些问题能否检验一个人阅读过名著暂且不说(答案也很明显),如果一个人读书是为了打这些边边角角的奇怪的问题的话,读书也就变了味。似乎我们这一届中考有所改变,不会问那种答不上来的题了。

初中的《骆驼祥子》《格列佛游记》《简•爱》记忆犹新,但你若叫我写这几本书的读后感,那我大概只会写个“同情新鲜和自由”了。

自我感觉阅读有点来者不拒。至少不会因为内容高度理论化就看不下去。高一的《乡土中国》我能读进去,但《红楼梦》就把我排除在外了,没读多少,读的过程中最多因为里面的低级玩笑提神几下,根本没读进去。高一因为有打算做研究性学习,读了些许社科论文,一口气读完之后头会有些晕。

高中又有读后感的任务,反复到网络上去搜写读后感的方法。有些人说要抓住人物的主要矛盾,但我读《雾都孤儿》只注意到奥利弗,为他在收养时日过的生活感到宽慰,对他在小偷团伙里的日子感到悲伤和气愤,真没什么感受好写。《山》和《朝闻道》也是一样,本身小说就短,还没什么好讲的。若是要谈感受的话,一个“震撼”就搞定了。《三体》小说长,但有什么感受呢?

有一篇《大卫•科波菲尔》的读后感范文,每一段大概写大卫是什么样的人,他的母亲是什么样的人,谋德斯通姐弟是什么样的人……这样好写,也很无聊。我看我自己阅读,不求能写出什么能获得市级征文比赛几等奖的读后感,只要读的时候有些感动,有些震撼,感觉自己的生活有谁也是这样子的,就成功了。

读后感最先出现在林林杂语

❌
❌