UOJ Logo vfleaking的博客

博客

近期UOJ的一些改动

2020-03-29 17:08:56 By vfleaking

大扎吼,我四渣渣k,贪玩懒J,介四里没有挽过的船新版本。挤需体验三番钟,里造会赶我一样,爱象节款OJ!(大雾)

咳咳,说人话。就是最近觉得 UOJ 实在是太年久失修了!强迫症的我这两周改了一发各种不爽。

当然在强迫症的眼里不爽的地方太多了,与我自身能付出的时间极度不匹配。所以我只能先改一部分了。。。

也欢迎大家前往 UOJ 的 GitHub 仓库提交 issue 或者 pull request 呀!https://github.com/vfleaking/uoj

已经完成的改动

题目中的图片问题

由于有些题目时间比较久了,图挂掉了。这是因为有些图片是放在奇奇怪怪的网站的,然后有些没能经受起大风大浪,就倒闭了。。。

所以我通过各种方式先把挂掉的图找了回来(主要是找出题人要),然后把所有现存的题目中的图片移动到了 UOJ 的图床 img.uoj.ac 下。

这样只要 UOJ 不倒,图片就不会挂啦!

Mathjax 的问题

博客评论里面,如果对一个评论的回复超出了一页,那么翻页的时候 Mathjax 不会被重新加载。去年 9 月 就有良心用户报告过这个问题。这显然是个 bug,现在已经修好辣!

以及 UOJ 使用的 Mathjax 原来是 2.6.0,有点老了。为了紧跟潮流,现在升级到 2.7.7 辣。当然如果 Mathjax 3 更好用的话会考虑再升级一下。

CE 时的错误信息长度

原来 UOJ 存储时为了节省空间,在大家 CE 的时候会把错误信息只截取前 500 个字节保存下来。

但我寻思着你交个代码就几 KB 没了,何必节省这种空间。。毕竟通常来说只截取前 500 个字节会看得人一脸懵逼。

所以现在把长度限制改成 10KB 了,感觉肯定够用了。

Markdown 教程的链接

UOJ 博客编辑器右上方会有个 “这玩意儿怎么用” 的链接,链到 UOJ博客使用教程

里面附了一个完整的 Markdown 教程链接,但是不知什么时候链接挂掉了。去年 8 月就有良心用户报告过这个问题。

现在我已经把该链接从 http://wowubuntu.com/markdown/ 更换为了 https://www.w3cschool.cn/markdownyfsm/

如果你是考古爱好者,可以在这里找到原来的链接的存档。

即将上线

HTTPS

如果你戳戳 https://uoj.ac 就会发现 UOJ 已经可以通过 HTTPS 访问勒。。

当然我还没有设置把 HTTP 强制跳转到 HTTPS,估计在某个夜深人静的晚上我就会设置了。

交互库加密

UOJ 一直以来都是使用输出 token 的策略来防止交互库被 hack 的,但 UOJ 上有些 CTF 选手水平非常高超,一眼就看穿了怎么把 UOJ 的交互库给 hack 掉,程序跑得比谁都快:#277631, #352160

为了防止世界被破坏,我研究了下怎么更好地防御攻击,做了一个小小的带加密的交互库(见 #509 下方的说明,mt19937_64 未来会改为 AES)。

当然肯定不能杜绝交互库被 hack 的行为,因为你的程序和交互库编译在了一起,熟悉存储结构的 CTF 选手可能仍然有很多绕开密码学的攻击方式。例如 #388739 曾经就获得了满分,还有这种直接改交互库的 srand 的 #205655。。我也会再研究下怎么更好地防御这些攻击。。不过我觉得这里的哲学应该是:只要我们让交互库被 hack 的难度和代码量足够大,大到选手觉得 hack 交互库还不如直接写个正解的话,这种行为就自然被杜绝了。即使真的被 hack 了,我们也会移除此类提交,保证他们不在 AC 的排行榜上出现。

当然有同学就会问了:为什么不直接使用标准输入输出进行交互?这里的主要问题其实是效率问题。如果交互量不大(比如 #545),当然可以采取这种方式。但如果交互量大到了 $10^7$,效率其实是非常低的。所以为了支持所有可能的题目,UOJ 未来将把通过函数交互和通过标准输入输出交互两类题目的支持做得更好。

等到我确定 #509 的有效防御方式之后将会把 UOJ 上所有函数交互的题目加上此类防御,欢迎大家最近踊跃尝试一下有哪些 hack 掉 #509 的交互库的方式并及时告诉我。

准备解决的问题

  • 仿照 UOJ 社区版直接通过 UOJ 系统生成时间空间限制以及样例下载链接,避免出题人手打出错
  • 题库搜索
  • 支持 C++ 14、C++ 17
  • 邮箱认证
  • Runtime Error 和使用危险系统调用的时候给予更多的提示信息
  • ……

解决不了的问题

题目中的维基链接

UOJ 上有些题目(#75, #83, #475)上面有指向维基的链接,但由于众所周知的原因,你不用“一些网络技术”,是没法直接访问的。这些题目链接了维基,主要是因为当时传题的时候维基还是个可以正常访问的网站。为了保持历史的原始风貌,就只能让这些不能直接访问的链接留着了(不过之后可能会换上个镜像。。。吧)

2020.6.6 更新

有点鸽,默默地把标题上的“【持续更新】”去掉了

2020.8.19 更新

  • 评论回复上限从140个字节改为500个字节(因为现在这个时代模仿微博没有任何意义。。)
  • 新增博客按最后回复时间排序的功能

2020.8.24 更新

  • 题面和博客中的列表增加两格缩进,被包含于列表、引用、表格等之内的段落取消自动缩进
  • 博客总览页显示评论数和点赞数

2020.8.30 更新

  • 终于加上了题库搜索。。。之前一直没加的原因其实是我想做个比较完整的站内搜索功能,但我也并没有多少开发时间。意识到这一点之后,我今天趁着有空快速写了个简易的题库搜索功能凑合凑合,参考了点 UOJ 社区版的代码 orz

2020.9.14 更新

  • 所有 http 请求强制跳转到 https

2020.9.22 更新

  • Markdown 支持表格、引用用户名

2020.12.29 更新

  • 增加 IOI 赛制的完整支持

2020.12.31 更新

  • 如果 subtask 内分数是 min 的,那么碰到 0 分的就自动跳过后面的(之前是全部测完)

2021.01.07 更新

  • 管理员可以看见测评机记录是由哪个测评机测的
  • 优化了下对测评记录表的数据库查询。。。(也可能会起反作用。。。欢迎报告)
  • 自动禁止比赛期间的 hack(很久很久以前 vfk 以为 uoj 以后会有比赛期间可以互相 hack 的比赛,现在发现并没有。。所以默认关掉 hack 好了)

2021.01.29 更新

  • 突然发现两台测评机上 libc 和 linux 内核版本不一致,于是均升级到了 apt-get 能升级到的最新版本

2021.02.02 更新

  • 增加超管隐藏评论的功能

2021.02.09 更新

  • 比赛迟到10分钟会弹出参赛提醒

2021.02.13 更新

  • 首页显示 6 条公告

2021.02.14 更新

  • 翻页的范围在原本的 $[x - 5, x + 5] \cap [1, n]$ 基础上增加特判。如果 $x \le 5$ 那么范围固定为 $[1, 11] \cap [1, n]$;如果 $x > n - 5$ 那么范围固定为 $[n - 10, n] \cap [1, n]$($x$ 为当前页编号,$n$ 为总页数)。

2021.02.19 更新

2021.03.13 更新

  • 发现有位机智的小同学对着一个测评记录的历史版本hack了一发:https://uoj.ac/hack/10489 。。。哦豁,赶紧修了这个 bug

2021.03.16 夜里更新

  • 以前说好“关于我”页面要给定制功能的,可是一直咕咕着,好难过。经群友提醒突然想起来了这个坑,并想起了本科的种种忙碌。。然而现在vfk依然忙忙,短时间内可能没机会来码这个功能了。所以。。暂时让这个页面显示用户信息页的东西了,不至于让这个坑太突兀。

2021.04.01 夜里更新

2021.04.04

  • ouuan 发现带有某些特殊字符的评论并不能正常发表。查了下发现是因为 MySQL 字符集的问题,现在什么都可以发啦(包括 🤔😜😀😊😃)

2021.04.23

  • 把用于渲染数学公式的 mathjax 库部署在了 UOJ 自己的服务器上

2021.06.28

  • 点我的提交记录的时候会保留表单里其他搜索内容

2021.06.29

  • 增加活跃用户rating排行榜

2021.07.05

2021.07.11

  • 提交答案题支持文件拖拽上传
  • 比赛相关页面的题目名字自动缩短
  • 比赛页面的提交记录支持按题目ID查询
  • 每道题目都自动添加了附件下载按钮
  • 未参加比赛的人的权限改为可以看榜但不能看题

2021.07.14

  • 支持管理员传题时自己加图片

2021.07.15

  • 自动更新赛前rating

2021.12.20

好久没搞 UOJ 了,鸽鸽我又来修修补补了。

  • 改善了 Rating 变化图的显示方式,比如标出了比赛时间,比如参赛次数较少的用户的变化图不会显得很鬼畜了
  • AC 题目列表增加了题目名称的显示
  • 修正了英文界面的一部分翻译错误

2021.12.29

更新 Linux 内核至 5.4.0-92-generic。升级了 Python 的解释器和 Java 的编译器,但版本号均未发生变化。

2022.01.10

更改了题面、博客、评论区、格言的换行规则。在一行超长时,先尝试在空白字符处断开,然后再尝试在英文单词中间断开。(当然如果写的全是中文,那怎么断开都无所谓)

2022.01.16

2022.03.23

最新的 UOJ 源码公布在了 https://github.com/vfleaking/uoj

以后主要会以 github 上的 commit 的形式宣布系统更新。本博客只会写一些特别值得注意的更新内容。

2022.04.08

提升了通信题的测试效率

2022.09.20

  • 不再使用 php 的 jsv8 库编译 markdown,转而开了一个内部的 nodejs 服务器
  • 更新测评系统,提升安全性
  • 移除 Java 7 和 Java 14;新增 Java 17;原 Java 7、Java 14 分别改用 Java 8、Java 17 测评

2022.12.13

renbaoshuo 的帮助下,UOJ 的时间限制可以是小数了:https://github.com/vfleaking/uoj/pull/100

2023.1.30

UOJ 测评给出的得分可以是小数了

2023.2.12

UOJ 的 mathjax 升级到 mathjax 3.2.2:https://github.com/vfleaking/uoj/pull/101

2023.7.6

UOJ 头像改用 Cravatar

2023.7.14

增加在线测验题,可以在浏览器上作答:https://uoj.ac/problem/808

评论

AThousandMoon
前排资磁!
MagicDuck
前排资磁!
EntropyIncreaser
期待资词 c++17
837951602
强行CTF 选手还行(
r_64
中排资磁!
zhouziheng
中排兹磁!
moyusteve
【该评论包含无意义的降低页面加载速度的内容,已被管理员删除】
are_you_cxk
uoj啥时候能封禁一下在博客区发谔谔内容的小学生啊
are_you_cxk
uoj啥时候能封禁一下在博客区发谔谔内容的小学生啊
are_you_cxk
uoj啥时候能封禁一下在博客区发谔谔内容的小学生啊
are_you_cxk
uoj啥时候能封禁一下在博客区发谔谔内容的小学生啊
I_am_China
资瓷
YuHaoXiang
uoj 啥时候滋磁一下修改/删除评论/回复啊 qwq
837951602
> 只要我们让交互库被 hack 的难度和代码量足够大,大到选手觉得 hack 交互库还不如直接写个正解的话,这种行为就自然被杜绝了。 并不。经过hack之后,即使代码量增加,耗时正常也会下降,已经达到霸榜目的了。
foreverlasting
uoj 啥时候滋磁一下修改/删除评论/回复啊 qaq
suncongbo
中排资瓷!
837951602
【该评论没有包含无意义的降低页面加载速度的内容,尚未被管理员删除】
englandmen
【该评论包含无意义的降低页面加载速度的内容,已被管理员删除】
yx20201301
【该评论包含有意义的膜拜VFK的内容,已被管理员删除】
foreverlasting
话说能不能改下比赛算rating的机制啊,就改成报名了比赛没交代码就不改变rating。

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。