Skip to content

“开源软件供应链点亮计划——暑期2021”项目提案

Ciel edited this page Jun 4, 2021 · 4 revisions

项目简介

今年,中科院软件所与华为 openEuler 项目继续共同举办 “开源软件供应链点亮计划——暑期2021” 项目。本次 Universal OJ 开源社区将继续作为社区加入这一计划,提供若干项目需求。欢迎有能力、有热情、有时间的小伙伴们参加,也欢迎社区成员们提出更多需求。Universal OJ 开源社区愿意和大家一起,为国内的开源生态添砖加瓦。

2020 年, Universal OJ 开源社区基于自身需求,提出了涉及赛制支持、丰富小工具、完善数据合规的三个项目,均顺利结项。详情可见项目页面官网公示。Universal OJ 社区代表也参与了后续举办的开源软件供应链 2020 峰会,与其他社区积极地进行交流。

再次感谢上方来自 TUNA 的文案

如未特别标明,本页面所有项目均使用 MIT License 授权。

项目申请说明

由于主办方今年采用了线上申请管理系统,请有意申请的同学至 活动社区页面 ,在查看项目详情页面中选择申请,注册完善申请人信息并提交申请。

申请前建议先与社区导师取得联系,也建议阅读主办方的 学生参与指南

测试数据包的自动识别配置

在项目“引导式题目配置功能”中我们为 UOJ 配置题目提供了更好的人机界面,在这个项目中我们希望提升题目配置的自动化水平。对一般的传统题来说,我们希望程序能够自动识别出各个测试点的输入和输出文件、按照文件夹放置的子任务组、答案检查器(checker)、数据校验器(validator)、标准答案程序(standard);此外,我们希望能够自动识别 LibreOJ、Luogu、Vijos、fps 等 OJ 使用的题目数据包、题目配置文件,并按 UOJ 的约定完成题目配置。

社区导师:cebarobot <ceba_robot at outlook.com>

难度等级:高

产出要求:

  • 实现对名称相同的 *.in*.out / *.ans 测试点文件对的识别,整理文件,在配置文件记录相应信息
  • 实现对以子文件夹分类放置的测试点文件的识别,整理文件,在配置文件记录相应信息
  • 实现对答案检查器(checker)、数据校验器(validator)、标准答案程序(standard)的识别,在配置文件记录相应信息
  • 识别 LibreOJ、Luogu、Vijos 使用的数据包格式和配置文件,生成对应的 UOJ 数据包,并给出兼容性提示(可选)

UOJ 后台管理

目前 UOJ 的系统管理功能较少,仅包括用户操作、博客管理、提交记录、自定义测试等功能。本项目希望在现有后台管理基础上,丰富 UOJ 后台管理功能。

社区导师:billchenchina <billchenchina2001 at gmail.com>

难度等级:低

产出要求:

  • 用户列表与管理
  • 用户密码重置
  • UOJ 顶部 Banner 管理
  • 首页排行榜逻辑切换
  • IP 查询与封禁
  • ...

题目推荐系统

通过机器学习的方法,为 Universal OJ 添加可靠的题目推荐系统。根据个人做题的记录,推荐与之能力相匹配、知识点覆盖类似的问题。本项目需要学生掌握机器学习相关知识。本项目计划先采用无监督或者基于用户标记的标签的方法,为题目生成 feature 向量用于进一步处理;并分析用户过往的做题序列,训练模型来给出下一个推荐的题目。

社区导师:阮行止 <ruanxingzhi at gmail.com>

难度等级:高

产出要求:产出一套可以集成到 Universal OJ 社区版的推荐系统,为其他 UOJ 发行版提供部署方式。

评测核心代码重构

目前测评逻辑部分是由 C++ 编写,集中在 uoj_judger.h 这一个文件内。如果想要上传非传统题,则需要自己调用 uoj_judger.h 里面的函数编写测评程序(judger)。然而目前该头文件设计上有些问题,很多时候有些函数并不好直接用,造题的用户往往需要从该头文件复制粘贴,然后改几行具体的代码以适应需求。该项目希望交流、讨论出一种更好的设计模式,然后对 uoj_judger.h 进行代码重构,让造题的用户更容易写自定义的测评程序。由于造题的用户一般来说都是信息学竞赛生,对面向对象、软件工程方面的知识有限。所以我们既希望使用面向对象等技术实现多态,还要力求代码对于只有一般工程代码经验的人来说简洁好懂。

社区导师:vfleaking <vfleaking at gmail.com>

难度等级:高

产出要求:重构原有的 uoj_judger.h ,保证一定的后向兼容性(会提供线上 UOJ 的非传统题 judger 以供测试)。

双因素认证

为 UOJ 实现基于邮件、OATH-TOTP、WebAuthn 的双因素认证。

社区导师:TechCiel <iscas at ciel.dev>

难度等级:低

产出要求:

  • 实现邮件验证码认证
  • 实现 OATH-TOTP 认证
  • 实现 WebAuthn 认证
  • 后台实现管理员移除双因素认证

引导式题目配置

UOJ 目前只有 SVN 题目上传与 ZIP 传题的两种方法进行题目传输,我们希望提供更人性化的题目配置功能。例如,我们可以一步一步引导管理员上传题目数据。第一步让管理员选择题目类型(传统、提答、交互、通信、自定义judger等等)。然后根据他所选择的题目类型,引导他上传所有数据点,以及配置时空限制、子任务等等。

社区导师:TechCiel <iscas at ciel.dev>

合作导师:billchenchina <billchenchina2001 at gmail.com>

难度等级:中

产出要求:

  • 传统题引导式题目配置功能
  • 提交答案题引导式题目配置功能
  • 交互题引导式题目配置功能
  • 通信题引导式题目配置功能

使用 parsedown 替换现有的 Markdown 渲染

目前 UOJ 使用的 Markdown 渲染为 V8Js + marked.js。我们希望能够使用 parsedown 替换现有的 Markdown 渲染机制,同时移除 V8Js 的使用。

社区导师:billchenchina <billchenchina2001 at gmail.com>

难度等级:中

产出要求:

  • 使用 parsedown 替换现有的 Markdown 渲染
  • 尽可能保证与 marked.js 的兼容性

适配 t123yh/simple-sandbox 沙箱

目前,UOJ 评测机的沙箱方案为使用 ptrace 对程序的内存、系统调用进行监控。cgroup 是 Linux 内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制。本项目希望能够为 UOJ 适配 LibreOJ 采用的 simple-sandbox 沙箱。

社区导师:t123yh <t123yh at outlook.com>

难度等级:中

产出要求:为 UOJ 社区版适配 simple-sandbox 沙箱