Skip to content

开源软件供应链点亮计划 暑期2021 | Summer 2021 of Open Source Promotion Plan

Leo edited this page Jun 9, 2021 · 5 revisions

项目简介

今年,中科院软件所与华为 openEuler 项目共同举办了 “开源软件供应链点亮计划——暑期2021” 项目。该项目与 Google Summer of Code 形式类似:开源社区提供项目需求并提供导师(mentor),在校学生利用暑期时间进行开发,主办方为顺利完成的项目提供一定额度的奖金。无论 GSoC 还是这次的“点亮计划”,都是一种非常好的开源实践范式,能够有效地增进高校学生对开源的理解、增加与真实社区的接触,并积累宝贵的经验。

感谢上方来自 TUNA 的文案

讨论区: https://github.com/EduOJ/backend/discussions/80

1. 邮件通知/验证系统

项目编号:210110012

项目描述

现在OJ注册时输入的邮箱仅用于登录,缺失邮件验证/邮件通知/邮件重置密码等功能。 请调研并比较邮件相关库/HTML模板库,实现一个注册时邮件验证/邮件通知/邮件重置密码功能。

参考: https://github.com/go-gomail/gomail https://github.com/go-mail/mail

产出要求:

  • 用户注册时(管理员可配置是否要求)需要邮箱认证
  • 通过邮件重置密码
  • 基于现有的Event/Hook系统,实现邮件通知接口。
  • 后端代码DIFF测试覆盖率100%,符合社区命名、代码风格规范

项目导师:Leo 联系方式:[email protected]

2. 支持多文件评测

项目编号:210110275

项目描述

现在OJ的前端编辑器和后端/评测机均只支持单文件评测。对于C++工程(如要求学生自己实现Vector/List/Map)只能粘贴到同一个文件中,对于Java工程的评测也不方便。请你设计/实现多文件(项目)评测支持。

产出要求:

  • 实现多文件提交/评测
  • 给出C++/Java的评测脚本
  • 后续可拓展别的语言
  • 后端代码DIFF测试覆盖率100%,符合社区命名、代码风格规范

项目导师:Leo 联系方式:[email protected]

3. 完善题目讨论区 / 题目Tag / 题目赞、踩 系统

项目编号: 210110278

项目描述

现在同学在题目列表能看到有关题目的信息只有名称。需要实现一个题目标签(如选择结构/分支结构/循环结构/递归等语言结构,链表/顺序表等算法结构)系统,并可高效的按照标签查找题目(如查找有链表、图论的题目)。 需要实现一个题目讨论区。可以在讨论区内发言,用#id的方式来提到另一道题目,用@username的方式来@用户。可以评论讨论区内的讨论。可选支持任意级评论。 需要实现一个题目/讨论区的赞/踩功能,可参考github的issue里评论赞/火箭等emoji的实现方式。

产出要求

  • 实现题目tag系统
  • 实现题目讨论区系统
  • 实现题目赞/踩系统
  • 后端代码DIFF测试覆盖率100%,符合社区命名、代码风格规范

项目导师:Leo 联系方式:[email protected]

4. 通知系统

  • 项目主导师:Sun123t2

  • 项目联合导师:Leo

  • 项目描述:

    目前的EduOJ缺乏一个通知系统。我们期望实现一个可由用户配置渠道偏好的通知系统,具体需求如下: 1.实现通知渠道偏好设置。用户可设置其偏好的通知渠道。 2.设计通知接口,该接口每次调用时,给指定用户,按其偏好渠道发送一条通知。本接口需在通知系统中实现,供通知发送者调用。 3.设计通知渠道接口,该接口每次调用时,给指定用户,从特点渠道发送一条通知。本接口由他人实现,在通知系统中调用。

    注:接口请在proposal中完成设计,在项目开始后开会讨论修改,并决定使用的最终版本

  • 难度:中

  • 项目标签:Go、Database、Notification System

  • 领域标签:Web、Notification System

  • 项目产出要求:

    • 实现通知形式偏好设置
    • 设计并实现通知接口、设计通知渠道接口
    • 实现与讨论区、email通知联动
    • 基于现有的Event/Hook系统
  • 项目技术要求:

    • 后端代码测试覆盖率70%以上
    • 命名/文档/注释复合社区规范

5. 重构任务系统

  • 语言:仅中文

  • 项目名称:重构任务系统

  • 项目主导师:Sun123t2

  • 项目联合导师:Leo

  • 项目描述:

    目前的EduOJ评测机仅接收评测提交一种任务,每次任务对应一个Run(一个提交中一个测试点的测试任务)。这种结构约束了评测机的功能。我们期望评测机可以同时完成代码查重、输出对比等更多功能,因此需要重构任务系统。 1.当前任务队列以Run为元素,创建类Task以及元素为Task的任务队列,代替Run的任务队列 2.任务队列使用数据库实现,保证程序中断不会丢失任务数据 3.修改现评测机和后端交流的API及两端相关代码,以适配不同种类的任务(不仅是Run) 4.整体操作是对于原有评测任务的一次重构,在支持其他种任务的同时,不应改变原有评测任务的功能

  • 难度:高

  • 项目标签:Go、Database

  • 领域标签:Web

  • 项目产出要求:

    • 新建类Task,并使用数据库实现以Task为元素的任务队列
    • 修改评测机与后端交流的API及相关功能,支持多种任务
    • 保证原有评测任务的功能不变
  • 项目技术要求:

    • 后端代码测试覆盖率70%以上
    • 命名/文档/注释复合社区规范

6. 前端评测c/c++程序

项目ID: 210110782

项目描述

本项目的终极目标是实现一个可以运行c/c++程序的“在线ide”。 需要提供编译/运行代码功能,支持输入输出。 鉴于项目难度较高,给出部分实现方案:

  1. 基于 https://github.com/binji/wasm-clang 实现在前端把c/c++代码编译为WebAssembly代码
  2. 基于项目联合导师的PR https://github.com/binji/wasm-clang/pull/6 提供的输入支持,封装成一个可以直接调用的库
  3. 和当前的代码编辑器整合,提供运行代码、获取输出功能。
  4. (可选)基于asyncify实现用户实时交互的输入。(当前只能在运行程序前处理好输入)

产出要求

  • 封装wasm-clang,提供一个单独的编译/运行 c/c++的 npm 包
  • 整合npm包到当前的代码编辑器中