学好了 Ruby on Rails, Ember.js, Discourse,可以去 Discourse 背后的 CDCK 公司上班,或者 去 Discourse Marketplace 接活,或者开一家 Discourse Hosting 公司成为 CDCK 的伙伴。
Long / Short Term Evolution (LSTE):
-
Most Urgent:
修 Mastodon m.xjtu.app 无法使用的问题。(发现竟然是因为 caddy 没有读 mastodon 静态文件的权限造成的错误,忘了除了反代到 puma 的 3000 端口还要 serve static files)共享.men, .live 等不同域名的登陆凭据,否则xjtu.app
的用户会经常会跳转到 canonical namexjtu.app
。自动识别插入的站内 URL 并自动替换到当前访问使用的域名(类似目前的 Watched words,可参考 https://github.com/openSUSE-zh/discourse-cjk-text-spacing)。解决 CSP 和 CORS 问题。难度:
进展:在尝试用 non-Rails-native 方法在本地调试到接近成功的状态下无法进展,已经放弃了,可在 GitHub - xjtumen/discourse_share_sessions 参观胚胎代码。 -
加快网站首次打开速度。不知道这是否可行,有些网站是渐进式加载。Discourse 最好也能首先显示基本文本内容,在浏览的过程中逐渐加载各种功能。现在是几个点在那跳,让人等的很不爽。Discourse team 估计很难遇到低网速情况,应该是不会做这个功能的。
难度:?
进展:无 -
用 GitHub - oracle/truffleruby: A high performance implementation of the Ruby programming language, built on GraalVM. 替代默认的 CRuby。根据 benchmark(https://eregon.me/blog/2022/01/06/benchmarking-cruby-mjit-yjit-jruby-truffleruby.html),性能提高了 N 多倍。
进展:无 -
Discourse as blog fediverse
进展:仅测试了将 discourse 嵌入到其他页面作为评论系统以及自动触发在 Discourse 建立新话题。 -
~~自动在中英文之间加空格,之前看 SUSE 中文社区好像做过相关工作:https://github.com/openSUSE-zh/rubygem-cjk_auto_space,不知道能否直接拿来用。~~
难度:
进展:无需,使用:GitHub - fokx/discourse-cjk-formatter: A Discourse plugin that reformat posts with CJK characters using autocorrect-rb(以下两条可以归并成:搞搞新意思:开发离线可用的手机 App )
-
做真正的本地化 APP,利用 Hysteria 做网络优化,达到忽略线路丢包/延迟的极速访问的用户体验,最重要的是把很多静态资源缓存到本地。
进展:交大門桌面 App 已释出 v0.0.1 版本,请 Windows 用户务必使用,可对抗 DNS 污染并加速网站的访问
由于为了应对 DDoS,暂时失效。后续会在 Tauri 2 基础上开发全平台 App:用 tauri 做一个交大門跨平台应用 -
开发一个类似 Reddit/百度贴吧的 折叠式 UI。已经有类似 Stack Overflow 的开源插件:Discourse Post Voting - plugin - Discourse Meta 和 How the journal plugin works - Docs - Pavilion view 和 flat view 相比各有千秋,例如前者可以方便查看两个人交替的讨论(目前 Discourse 只能通过嵌套的引用来实现)。
难度:
进展:无需更多操作,当前 课程点评 - 移动交通大学&/银行 日知錄 - 移动交通大学&/银行 类别均启用了此种 一层缩进式 UI。 -
参考 https://github.com/discourse/discourse-graphviz,给 Discourse 加上 tikz 支持。
理论上有 GitHub - kisonecat/tikzjax: TikZJax is TikZ running under WebAssembly in the browser 这个开源项目,通过 js 和 wasm 将源码转成 svg,但问题在于正常情况下不允许用户插入<script>
块以防止 mischief,所以得通过插件来实现,上面那个项目就是通过viz.js
来支持 graphviz,所以理论上要支持 tikz 可以如法炮制。
难度:
进展:Graphviz 都冇人用,做这个有乜意义 -
把 discourse 的 nginx 配置转成 caddy 的从而给反代加上缓存功能
难度:
进展:无需,现在使用 cloudflared 拉,弃用 caddy 了。理论上 caddy 的配置我已经转写出来了,但效果似乎不是太明显,也许可以在反代机上搞一个 caddy+nginx 的两层结构或者直接用 nginx。 -
完善快速回复功能和防刷屏功能- 目前是外挂到一个 python 程序,调用 discourse api。用户体验上不如用插件的方式将回复功能嵌入到页面内,这方面 pkuanvil 做的快速回复 UI 就很好。
外挂的实现方式有以下问题: - 假如因为 rate limit 而失败,直接返回草稿编辑页面(当前为需要人工 Alt + \leftarrow 返回)
- 防止话题页面内滚动 post_id URL 变化引起的 iframe 刷新。
- 没有亮暗色自动切换,可以通过 python 程序里读 header 来自适应。
不如直接调用 Discourse原生 Composer进行匿名回帖/发帖。参考:GitHub - alangibson/discourse-loners: Discourse Loners plugin allows unregistered users to watch and reply to topics using only their email addresses.
难度:
进展:完成
bug:匿名回复和问答模式插件冲突,最新的 Discourse API 升级使得插件失效。 - 目前是外挂到一个 python 程序,调用 discourse api。用户体验上不如用插件的方式将回复功能嵌入到页面内,这方面 pkuanvil 做的快速回复 UI 就很好。
-
完善评课社区,详见 交大門评课社区上线 网址 xjtu.app/course
解决割裂的使用体验(不同的 UI,无法接入 AI),并且避免再次从 上游 人工合并,写一个插件,类似 https://meta.discourse.org/t/topic-ratings-plugin/39578,将 MySQL 里的数据批量导入 PG,增加该类别 topic 的 field,主要的关系是课程的老师的不同教学班,选修课该板块的其他课程,注意和导师信息的联系,学期信息、推荐星级无所谓,数据初始化的时候很多数据是无意义的平均值,成绩信息可视化不重要(数据来源无法说服用户可信、不同学期之间的差距、没有新人贡献数据)。可借助现有的 模板 功能应用到新的回复。
难度:
进展:弃用 USTC 评课社区软件,改用 Discourse 的具有模板的类别:课程点评 - 移动交通大学&/银行 -
定制主页和用户界面、配色、完善中文翻译,使用 Stable Diffusion 自动生成头像图片,Auto dark mode for instant reply + course review
支持动态头像、动态徽标、动态格言(参考 www/craiglist theme 顶部的滚动栏])。对于不喜欢浏览时页面有像素改变的用户,提供设置允许静止一切。进展:已有动态头像的插件:https://meta.discourse.org/t/animated-avatar-plugin/220445,修改了部分 UI,可在 GitHub - xjtumen/discourse-xjtumen-custom-tc 参观代码
-
利用有关语料 finetune 并部署开源 LLM,用于自动回帖以及应答。(注:GPU 不是问题)
开发 bot(@forward_bot)自动理解并回复现有的相关链接,不过这跟当前的 related topic 功能重叠。(进阶:Finetune LLM)进展:(效果不好,已被禁用)试验:训练一个解答下交学生疑问的 Chatbot
为了让门友和水友们更不孤独,我设置了一个自动回复的 bot -
Better recommender system 推荐系统(全局 / 针对不同用户,定制 主页 / 相关话题)。弄清现在的 Discourse 自带的推荐/排序方法,再利用开源的 SOTA 方法进行改进。See more: Ideas behind requiring login to browse . 有人分析了 Discourse 是怎么统计用户阅读时间的:https://linux.do/t/topic/26966
难度:
进展:无进展。现在使用 Discourse-AI 插件通过 Open AItext-embedding-ada-002
接口自动生成帖子的 embeddings,然后根据相似性推荐 5 条相关话题。 -
管理 tag(聚类),利用 LLM 自动打 tag,可视化:Discourse Tag Cloud - theme-component - Discourse Meta
进展:discourse-ai 插件已有此类功能 https://meta.discourse.org/t/discourse-ai-post-classifier-automation-rule/281227,但尚未配置 -
基于地理位置的社区功能,现有 discourse 插件
discourse-locations
可以给帖子和用户增加位置属性,可以在此之上增加发现附近的人等功能。
难度: -
基于 SMS 的注册登录,大多数中国人没有 email 邮箱,但上网的人大多用行動裝置,因而虽然 SMS 不安全,SIM swap scam,实现 SMS 注册/登录依然很有意义。事实上,一些基于 Discourse 的网站如 https://swapd.co 已经实现了这个功能。
进展:太烧钱了,还不如实现和 T 的深度结合
没有任何意义:
- 适当做点花里胡哨的网站挂件效果
- Upvote / downvote + karma → automatically promote a user to specific group + Category ACL 量化用户的活跃度/贡献度(已有 discourse-gamification),并自动授予相应的权限和功能(已有 trust level 系统)。
实现 南开 zulip → 交大门 discourse 的消息传递,即正确处理 Zulip’s outgoing webhooks,监听在某个地址,识别出是对xjtu-to-nk
这个 bot 的回复,并从文本中提取出交大门上的 topic id,然后调用 discourse 的 api 进行发帖。更进一步,实现 两个/多个 Discourse 之间的互联。