diff --git a/.github/ISSUE_TEMPLATE/event.yml b/.github/ISSUE_TEMPLATE/event.yml new file mode 100644 index 0000000..251f932 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/event.yml @@ -0,0 +1,39 @@ +name: 推荐活动或更新活动信息 +description: 为活动与竞赛中心提供公开来源、时间修正或参与经验 +title: '[活动] ' +body: + - type: input + id: name + attributes: + label: 活动名称 + validations: + required: true + - type: dropdown + id: kind + attributes: + label: 活动类型 + options: + - 开源活动 + - 学科竞赛 + - 社区共建 + validations: + required: true + - type: input + id: source + attributes: + label: 官方来源链接 + description: 提供可公开访问的官网或正式通知地址。 + validations: + required: true + - type: textarea + id: details + attributes: + label: 推荐或修正内容 + description: 请说明面向对象、年份或届次、报名时间与时区;不确定的信息写待确认。修正已有活动时请附本站页面地址。 + validations: + required: true + - type: textarea + id: experience + attributes: + label: 参与经验(可选) + description: 注明参加年份,将个人经验与官方规则分开。不填写个人隐私或非公开材料。 diff --git a/.github/pr-assets/events-center-desktop.png b/.github/pr-assets/events-center-desktop.png new file mode 100644 index 0000000..4f85046 Binary files /dev/null and b/.github/pr-assets/events-center-desktop.png differ diff --git a/.github/pr-assets/events-center-mobile.png b/.github/pr-assets/events-center-mobile.png new file mode 100644 index 0000000..b732603 Binary files /dev/null and b/.github/pr-assets/events-center-mobile.png differ diff --git a/.gitignore b/.gitignore index a4113e4..bef890a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ node_modules/ +.playwright-cli/ +output/playwright/ dist/ .vitepress/cache/ .vitepress/dist/ diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml index 28a9f55..bc2a643 100644 --- a/.markdownlint-cli2.yaml +++ b/.markdownlint-cli2.yaml @@ -11,6 +11,8 @@ config: - ContentMeta - ElectiveCourseTable - HomePage + - EventCenter + - EventDetails - MaterialResourceList - ProgrammingLanguageNav - XingshuCampusMap diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9dfc567..06820a1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -46,16 +46,40 @@ sources: [] ## 引用来源 -外部来源应写入 `sources`: +未提供可访问来源时,使用以下待核验元数据;在正文保留资料名称和适用届次: ```yaml -sources: - - name: 来源名称 - url: https://example.com/source +status: needs-review +sources: [] ``` 政策、流程、培养方案、奖助、考试等高风险内容应优先引用公开正式来源。没有来源时,只能提交待核验模板。 +## 活动与竞赛中心 + +活动中心位于 `/events/`,每个活动在 `docs/events/` 下使用独立 Markdown 详情页。普通 Front Matter 之外增加 `event` 字段,列表在构建时自动读取这些字段;不要另建一份卡片数据。 + +```yaml +event: + kind: 开源活动 # 开源活动 / 学科竞赛 / 社区共建 + eyebrow: 活动封面标题 + cover: code # summer / code / fest / blue / ladder / wiki + tags: [Git, 项目实践] + beginner: false # 本站入门建议,不代表官方资格 + schedule: 当届时间待核实 + reviewRequired: true # 缺少可访问来源时明确标记待核验 + checked: '2026-09-12' # 资料核查日期 + order: 10 +``` + +正文包含活动简介、参与入口、时间说明、准备建议和公开来源,并在标题后放置 ``。当前活动页不提供外部跳转,来源名称保留在正文;缺少可访问来源时须使用 `status: needs-review` 和 `event.reviewRequired: true`。目录和侧边栏自动读取详情页 Front Matter,无需手动添加重复的导航数据。 + +只对有来源的时间填写 `registrationOpen`、`registrationClose`、`start`、`end`,格式为含时区的 ISO 8601 时间,例如 `'2026-10-01T09:00:00+08:00'`。开放报名必须同时提供截止时间。未核验的届次使用 `status: needs-review`,不推测截止日期。长期贡献入口可填写 `ongoing: true`;手动归档用 `archived: true`。 + +待核验活动统一显示“待核验”,不提示正在报名。其他活动的状态按报名窗口、活动周期和当前时间计算。到达 `end` 的活动自动进入历史归档;报名截止但未开始的活动仍在目录中,标注“报名已截止”。有开始时间但没有结束时间时,不自动推断“进行中”。年度活动若含延长周期,应在正文解释,不能让“进行中”被误解为可报名。页面打开后每分钟刷新时间状态,无需后台服务。 + +封面由站内 CSS 图形与文字生成,不需要复制第三方海报。字段校验、状态边界和真实活动来源一致性已纳入 `pnpm check`。活动建议可通过 `.github/ISSUE_TEMPLATE/event.yml` 提交。 + ## 本地检查 ```bash @@ -65,3 +89,13 @@ pnpm build ``` 不要通过关闭规则、删除测试或忽略错误来让检查通过。 + +### 活动名称、别名与收录范围 + +活动详情的 `title` 使用可核验的完整名称,`event.eyebrow` 可使用封面简称,`event.aliases` 保存常见缩写或历史名称。更名须在正文说明对应届次并附来源;不要把旧名称直接覆盖为没有出处的新名称。目录、详情和侧边栏均从详情页 Front Matter 生成。 + +`event.topic` 表示主要实践方向,用于筛选。优先复用已有方向:程序设计、软件开发、综合计算机、人工智能与数据、网络安全、系统开发、数学建模、机器人与硬件、创新创业、开源实践。 + +`event.scope: series` 表示常设赛事或活动入口,状态为“查看当届通知”,不可附带 `ongoing`、`archived` 或具体起止时间。`event.scope: edition` 表示具体活动,可按来源填写已核验时间。仅有日期但没有时刻的通知可以写入 `schedule` 和正文,不补写不存在的精确截止时间。 + +父赛事、子赛项、不同地区和届次不应重复充当独立机会以增加目录数量。来源访问受限时保留明确的待核验说明,研究依据见 [活动收录研究](docs/events/research.md)。 diff --git a/docs/.vitepress/event-clock.data.ts b/docs/.vitepress/event-clock.data.ts new file mode 100644 index 0000000..cb548a0 --- /dev/null +++ b/docs/.vitepress/event-clock.data.ts @@ -0,0 +1,8 @@ +declare const data: number; +export { data }; + +export default { + load() { + return Date.now(); + }, +}; diff --git a/docs/.vitepress/event-schema.ts b/docs/.vitepress/event-schema.ts new file mode 100644 index 0000000..89477e6 --- /dev/null +++ b/docs/.vitepress/event-schema.ts @@ -0,0 +1,54 @@ +import { z } from 'zod'; + +import { eventKinds } from './events'; +const timestamp = z.string().datetime({ offset: true }); +export const eventSchema = z + .object({ + kind: z.enum(eventKinds), + scope: z.enum(['series', 'edition']).optional(), + aliases: z.array(z.string().min(1)).optional(), + topic: z.string().min(1).optional(), + eyebrow: z.string().min(1), + cover: z.enum(['summer', 'code', 'fest', 'blue', 'ladder', 'wiki']), + tags: z.array(z.string().min(1)).min(1), + beginner: z.boolean(), + schedule: z.string().min(1), + checked: z.string().regex(/^\d{4}-\d{2}-\d{2}$/), + reviewRequired: z.boolean().optional(), + order: z.number(), + ongoing: z.boolean().optional(), + archived: z.boolean().optional(), + registrationOpen: timestamp.optional(), + registrationClose: timestamp.optional(), + start: timestamp.optional(), + end: timestamp.optional(), + }) + .superRefine((event, context) => { + if ( + event.scope === 'series' && + (event.ongoing || + event.archived || + event.registrationOpen || + event.registrationClose || + event.start || + event.end) + ) { + context.addIssue({ + code: z.ZodIssueCode.custom, + message: '常设入口不得混入具体届次的报名、起止或归档状态', + }); + } + for (const [a, b] of [ + [event.registrationOpen, event.registrationClose], + [event.start, event.end], + ]) { + if (a && b && Date.parse(a) >= Date.parse(b)) { + context.addIssue({ code: z.ZodIssueCode.custom, message: '活动起止时间顺序错误' }); + } + } + if (event.registrationOpen && !event.registrationClose) { + context.addIssue({ code: z.ZodIssueCode.custom, message: '开放报名必须提供截止时间' }); + } + }); + +export type EventInfo = z.infer; diff --git a/docs/.vitepress/event-sidebar.ts b/docs/.vitepress/event-sidebar.ts new file mode 100644 index 0000000..bdc30e7 --- /dev/null +++ b/docs/.vitepress/event-sidebar.ts @@ -0,0 +1,44 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import matter from 'gray-matter'; +import type { DefaultTheme } from 'vitepress'; +import { eventSchema } from './event-schema'; +import { eventKinds } from './events'; + +// Build-time only: titles share the same source as the directory and detail pages. +export function eventSidebar(): DefaultTheme.SidebarItem[] { + const root = path.resolve('docs/events'); + const entries = fs + .readdirSync(root) + .filter((file) => file.endsWith('.md')) + .flatMap((file) => { + const { data } = matter.read(path.join(root, file)); + if (!data.event) return []; + return [ + { + title: String(data.title), + link: `/events/${file.slice(0, -3)}`, + event: eventSchema.parse(data.event), + }, + ]; + }) + .sort((a, b) => a.event.order - b.event.order); + return [ + { + text: '活动与竞赛', + items: [ + { text: '探索活动', link: '/events/' }, + { text: '收录研究与名称核验', link: '/events/research' }, + { text: '推荐活动与补充经验', link: '/events/contribute' }, + { text: '竞赛学习指南', link: '/competitions/' }, + ], + }, + ...eventKinds.map((kind) => ({ + text: kind, + collapsed: true, + items: entries + .filter((entry) => entry.event.kind === kind) + .map((entry) => ({ text: entry.title, link: entry.link })), + })), + ]; +} diff --git a/docs/.vitepress/events.data.ts b/docs/.vitepress/events.data.ts new file mode 100644 index 0000000..287dc1c --- /dev/null +++ b/docs/.vitepress/events.data.ts @@ -0,0 +1,20 @@ +import { createContentLoader } from 'vitepress'; +import { eventSchema } from './event-schema'; +import type { EventItem } from './events'; + +declare const data: EventItem[]; +export { data }; + +export default createContentLoader('events/*.md', { + transform(pages): EventItem[] { + return pages + .filter((page) => page.frontmatter.event) + .map((page) => ({ + ...eventSchema.parse(page.frontmatter.event), + title: page.frontmatter.title, + description: page.frontmatter.description, + url: page.url, + })) + .sort((a, b) => a.order - b.order); + }, +}); diff --git a/docs/.vitepress/events.ts b/docs/.vitepress/events.ts new file mode 100644 index 0000000..f1c9f51 --- /dev/null +++ b/docs/.vitepress/events.ts @@ -0,0 +1,69 @@ +import type { EventInfo } from './event-schema'; +export type { EventInfo } from './event-schema'; +export const eventKinds = ['开源活动', '学科竞赛', '社区共建'] as const; + +export type EventItem = EventInfo & { title: string; description: string; url: string }; +export type EventStatus = + | '待核验' + | '长期开放' + | '报名中' + | '报名已截止' + | '即将开始' + | '进行中' + | '已结束' + | '查看当届通知' + | '时间待确认'; + +export function eventStatus(event: EventInfo, now: number): EventStatus { + if (event.reviewRequired) return '待核验'; + if (event.scope === 'series') return '查看当届通知'; + if (event.archived || (event.end && now >= Date.parse(event.end))) return '已结束'; + if (event.ongoing) return '长期开放'; + if ( + event.registrationOpen && + event.registrationClose && + now >= Date.parse(event.registrationOpen) && + now < Date.parse(event.registrationClose) + ) + return '报名中'; + if (event.start && event.end && now >= Date.parse(event.start)) return '进行中'; + if (event.registrationClose && now >= Date.parse(event.registrationClose)) return '报名已截止'; + if (event.start && now < Date.parse(event.start)) return '即将开始'; + return '时间待确认'; +} + +export function filterEvents( + items: EventItem[], + filters: { + query: string; + kind: string; + status: string; + beginner: boolean; + archive: boolean; + topic?: string; + }, + now: number, +) { + const words = filters.query.trim().toLocaleLowerCase().split(/\s+/).filter(Boolean); + return items.filter((event) => { + const status = eventStatus(event, now); + const searchable = [ + event.title, + event.description, + event.eyebrow, + event.topic, + ...(event.aliases ?? []), + ...event.tags, + ] + .join(' ') + .toLocaleLowerCase(); + return ( + (filters.archive ? status === '已结束' : status !== '已结束') && + (!filters.kind || event.kind === filters.kind) && + (!filters.topic || event.topic === filters.topic) && + (!filters.status || status === filters.status) && + (!filters.beginner || event.beginner) && + words.every((word) => searchable.includes(word)) + ); + }); +} diff --git a/docs/.vitepress/sidebar.ts b/docs/.vitepress/sidebar.ts index b846d27..de9b730 100644 --- a/docs/.vitepress/sidebar.ts +++ b/docs/.vitepress/sidebar.ts @@ -1,6 +1,8 @@ import type { DefaultTheme } from 'vitepress'; +import { eventSidebar } from './event-sidebar'; export const sidebar: DefaultTheme.Sidebar = { + '/events/': eventSidebar(), '/start/': [ { text: '新生专题', @@ -62,6 +64,7 @@ export const sidebar: DefaultTheme.Sidebar = { { text: '学科竞赛', items: [ + { text: '活动与竞赛中心', link: '/events/' }, { text: '总览', link: '/competitions/' }, { text: '算法类竞赛', link: '/competitions/algorithm' }, { text: '软件类竞赛', link: '/competitions/software' }, diff --git a/docs/.vitepress/site-map.ts b/docs/.vitepress/site-map.ts index e37ce25..6ffe8df 100644 --- a/docs/.vitepress/site-map.ts +++ b/docs/.vitepress/site-map.ts @@ -40,16 +40,17 @@ export const siteSections: SiteSection[] = [ title: '学业与课程', }, { - activeMatch: '^/(competitions|development|research|career)/', + activeMatch: '^/(events|competitions|development|research|career)/', description: '连接竞赛、开发、科研实践与升学就业。', index: '03', links: [ + { href: '/events/', title: '活动与竞赛' }, { href: '/competitions/', title: '学科竞赛' }, { href: '/development/', title: '开发与工具' }, { href: '/research/', title: '科研与项目' }, { href: '/career/', title: '升学与就业' }, ], - primaryHref: '/competitions/', + primaryHref: '/events/', title: '成长与实践', }, { diff --git a/docs/.vitepress/theme/components/EventCenter.vue b/docs/.vitepress/theme/components/EventCenter.vue new file mode 100644 index 0000000..a93a989 --- /dev/null +++ b/docs/.vitepress/theme/components/EventCenter.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/docs/.vitepress/theme/components/EventDetails.vue b/docs/.vitepress/theme/components/EventDetails.vue new file mode 100644 index 0000000..fb3cf04 --- /dev/null +++ b/docs/.vitepress/theme/components/EventDetails.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/docs/.vitepress/theme/events.css b/docs/.vitepress/theme/events.css new file mode 100644 index 0000000..d8190e9 --- /dev/null +++ b/docs/.vitepress/theme/events.css @@ -0,0 +1,905 @@ +.events-page { + --event-ink: #23324b; + --event-muted: #68768a; + --event-line: #e3e8ee; + --event-accent: #3d58c9; + --event-paper: #fff; + --event-bg: #f8fafc; + background: var(--event-bg); + color: var(--event-ink); + padding: 30px 32px 48px; +} +.dark .events-page { + --event-ink: #e6ebf5; + --event-muted: #a6b1c6; + --event-line: #343d50; + --event-accent: #a8b8ff; + --event-paper: #202633; + --event-bg: #191e28; +} +.events-wrap { + max-width: 1184px; + margin: 0 auto; +} +.events-page a { + text-decoration: none; +} +.events-page button, +.events-page a, +.events-page input, +.events-page select { + -webkit-tap-highlight-color: transparent; +} +.events-page :is(a, button, input, select):focus-visible { + outline: 3px solid var(--event-accent); + outline-offset: 4px; +} +.events-page button { + cursor: pointer; +} +.events-breadcrumb { + display: flex; + align-items: center; + gap: 13px; + color: var(--event-muted); + font-size: 12px; +} +.events-breadcrumb strong { + font-weight: 500; + color: var(--event-ink); +} +.events-breadcrumb a:hover { + color: var(--event-accent); +} +.events-hero { + display: grid; + grid-template-columns: 1.15fr 1fr; + align-items: center; + padding: 52px 0 38px; + gap: 30px; +} +.events-eyebrow { + display: flex; + align-items: center; + gap: 9px; + color: var(--event-accent); + font: 600 10px/1.5 var(--vp-font-family-mono); + letter-spacing: 2px; + margin: 0; +} +.events-eyebrow > span { + width: 6px; + height: 6px; + border-radius: 50%; + background: var(--event-accent); +} +.events-hero h1 { + margin: 23px 0 22px; + font-size: clamp(32px, 3.5vw, 48px); + font-weight: 750; + letter-spacing: -1.8px; + line-height: 1.4; +} +.events-hero h1 span { + color: var(--event-accent); +} +.events-lead { + font-size: 15px; + line-height: 1.9; + color: var(--event-muted); + margin: 0; +} +.events-hero-actions { + display: flex; + align-items: center; + gap: 26px; + margin-top: 28px; +} +.events-button { + display: inline-flex; + justify-content: center; + align-items: center; + gap: 24px; + border: 1px solid var(--event-line); + border-radius: 8px; + padding: 11px 20px; + font-size: 13px; + font-weight: 600; + background: var(--event-paper); + color: var(--event-ink); + transition: + transform 160ms, + border-color 160ms; +} +.events-button:hover { + transform: translateY(-2px); + border-color: var(--event-accent); +} +.events-button.primary { + color: #fff; + background: #3d58c9; + border-color: #3d58c9; + box-shadow: 0 4px 12px #3d58c91a; +} +.events-text-link { + color: var(--event-muted); + display: flex; + gap: 14px; + font-size: 13px; +} +.events-text-link:hover { + color: var(--event-accent); +} +.events-hero-note { + display: flex; + align-items: center; + gap: 10px; + font-size: 11px; + color: var(--event-muted); + margin-top: 27px; +} +.events-hero-note > span { + color: #3e8873; + font-size: 17px; +} +.events-hero-note i { + font-style: normal; + opacity: 0.5; +} +.events-art { + height: 355px; + position: relative; + overflow: hidden; + isolation: isolate; + background: radial-gradient(ellipse, #dfe7fa99, transparent 70%); +} +.dark .events-art { + background: radial-gradient(ellipse, #46578244, transparent 70%); +} +.events-orbit { + border: 1px solid #a5b8d940; + border-radius: 50%; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(-24deg); + width: 430px; + height: 235px; +} +.orbit-two { + transform: translate(-50%, -50%) rotate(40deg); + width: 370px; + height: 305px; + border-style: dashed; +} +.art-code { + position: absolute; + top: 56px; + left: 26%; + width: 235px; + height: 235px; + background: linear-gradient(135deg, #536cdd, #324aae); + border: 1px solid #ffffff70; + border-radius: 21px; + transform: rotate(-9deg); + box-shadow: + 15px 24px 42px #3d58c925, + inset 0 0 0 7px #ffffff08; + display: flex; + flex-direction: column; + align-items: flex-start; + padding: 19px 25px; +} +.art-dots { + font-size: 8px; + letter-spacing: 4px; + color: #bacaff; +} +.art-code-mark { + color: #fff; + font: 500 65px/1.6 var(--vp-font-family-mono); + letter-spacing: -6px; + align-self: center; +} +.art-code-line { + height: 5px; + width: 125px; + background: #91b4f5; + border-radius: 5px; + margin-top: 7px; +} +.art-code-line.short { + width: 76px; + background: #7c8fdb; +} +.art-code-caption { + color: #dbe5ff; + margin-top: 13px; + font: 10px var(--vp-font-family-mono); +} +.art-label { + position: absolute; + font: 9px var(--vp-font-family-mono); + letter-spacing: 1.3px; + color: var(--event-muted); +} +.label-top { + top: 16px; + left: 19%; +} +.label-bottom { + bottom: 15px; + right: 12%; +} +.art-chip { + position: absolute; + display: flex; + align-items: center; + gap: 12px; + background: var(--event-paper); + border: 1px solid var(--event-line); + box-shadow: 0 8px 24px #2839540d; + border-radius: 10px; + z-index: 1; +} +.chip-branch { + left: 6%; + bottom: 57px; + padding: 16px; + transform: rotate(-4deg); + font: 11px var(--vp-font-family-mono); +} +.chip-branch svg { + width: 22px; + height: 22px; + fill: none; + stroke: #42866f; + stroke-width: 1.6; +} +.chip-star { + right: 1%; + top: 84px; + padding: 12px 16px; + color: #bd8c43; + font-size: 28px; + transform: rotate(6deg); +} +.chip-star span { + font-size: 11px; + color: var(--event-ink); +} +.events-start { + display: flex; + align-items: center; + gap: 17px; + padding: 21px 25px; + border-radius: 11px; + border: 1px solid var(--event-line); + background: var(--event-paper); +} +.start-icon { + display: grid; + place-items: center; + width: 42px; + height: 42px; + background: #ebf0fc; + color: #3d58c9; + border-radius: 10px; + font-size: 23px; + flex-shrink: 0; +} +.events-start strong { + font-size: 14px; + font-weight: 600; +} +.events-start p { + margin: 4px 0 0; + font-size: 12px; + color: var(--event-muted); +} +.events-start > a { + margin-left: auto; + color: var(--event-accent); + font-size: 12px; + white-space: nowrap; +} +.events-start > a span { + margin-left: 16px; +} +.events-explore { + padding-top: 52px; + scroll-margin-top: 105px; +} +.events-section-heading { + display: flex; + justify-content: space-between; + align-items: end; + gap: 18px; + margin-bottom: 23px; +} +.events-section-heading .events-eyebrow { + color: var(--event-muted); + font-size: 9px; +} +.events-section-heading h2 { + margin: 8px 0 0; + font-size: 25px; + font-weight: 700; + letter-spacing: -0.6px; + line-height: 1.5; +} +.events-section-heading h2 > span { + font-size: 12px; + font-weight: 400; + color: var(--event-muted); + letter-spacing: 0; + margin-left: 18px; +} +.events-view-switch { + display: flex; + padding: 4px; + border: 1px solid var(--event-line); + border-radius: 8px; + background: var(--event-paper); +} +.events-view-switch button { + padding: 6px 12px; + border-radius: 5px; + font-size: 11px; + color: var(--event-muted); +} +.events-view-switch button.active { + background: var(--event-bg); + color: var(--event-ink); + font-weight: 600; +} +.events-filter-panel { + border: 1px solid var(--event-line); + border-radius: 10px; + background: var(--event-paper); + margin-bottom: 24px; + padding: 0 20px; +} +.events-filter-top { + display: flex; + justify-content: space-between; + align-items: center; + gap: 20px; + border-bottom: 1px solid var(--event-line); + min-height: 73px; +} +.events-tabs { + display: flex; + align-items: center; + gap: 7px; +} +.events-tabs button { + padding: 8px 12px; + border-radius: 6px; + color: var(--event-muted); + font-size: 12px; + white-space: nowrap; +} +.events-tabs button span { + padding-left: 6px; + font-size: 10px; + opacity: 0.75; +} +.events-tabs button.active { + background: #eef1fc; + color: #3d58c9; + font-weight: 600; +} +.dark .events-tabs button.active { + background: #354268; + color: #dae2ff; +} +.events-search { + display: flex; + align-items: center; + gap: 9px; + background: var(--event-bg); + border: 1px solid var(--event-line); + border-radius: 7px; + padding: 8px 11px; + width: 275px; +} +.events-search svg { + width: 17px; + height: 17px; + fill: none; + stroke: var(--event-muted); + stroke-width: 1.6; + flex-shrink: 0; +} +.events-search input { + width: 100%; + min-width: 0; + font-size: 12px; + color: var(--event-ink); + background: transparent; +} +.events-search input::placeholder { + color: var(--event-muted); +} +.events-filter-bottom { + display: flex; + align-items: center; + justify-content: space-between; + gap: 14px; + min-height: 60px; + padding: 12px 0; +} +.events-filter-options { + display: flex; + align-items: center; + gap: 24px; + font-size: 11px; + color: var(--event-muted); +} +.events-filter-options label { + display: flex; + gap: 12px; + align-items: center; +} +.events-filter-options select { + padding: 5px 23px 5px 9px; + border: 1px solid var(--event-line); + border-radius: 5px; + color: var(--event-ink); + background: var(--event-paper); + appearance: auto; + font-size: 11px; +} +.events-filter-options select:disabled { + opacity: 0.5; +} +.events-checkbox { + cursor: pointer; +} +.events-checkbox input { + accent-color: #3d58c9; + width: 14px; + height: 14px; +} +.events-reset { + color: var(--event-accent); +} +.events-result { + font-size: 11px; + color: var(--event-muted); + white-space: nowrap; +} +.events-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 23px; +} +.event-card { + min-width: 0; + border: 1px solid var(--event-line); + border-radius: 12px; + overflow: hidden; + background: var(--event-paper); + transition: + box-shadow 180ms, + transform 180ms; + display: flex; + flex-direction: column; +} +.event-card:hover { + transform: translateY(-4px); + box-shadow: 0 14px 32px #25355712; +} +.event-cover { + position: relative; + height: 176px; + display: flex; + flex-direction: column; + justify-content: space-between; + overflow: hidden; + padding: 19px 23px; + isolation: isolate; + color: #fff; +} +.event-cover::before, +.event-cover::after { + content: ''; + position: absolute; + border: 1px solid #ffffff24; + width: 250px; + height: 250px; + border-radius: 50%; + right: -55px; + top: -45px; + z-index: -1; +} +.event-cover::after { + width: 180px; + height: 180px; + right: -20px; + top: -10px; +} +.cover-summer { + background: linear-gradient(120deg, #276a58, #539c76); +} +.cover-code { + background: linear-gradient(120deg, #253b75, #5b75bd); +} +.cover-fest { + background: linear-gradient(120deg, #593d78, #9c6790); +} +.cover-blue { + background: linear-gradient(120deg, #2662a3, #6099cb); +} +.cover-ladder { + background: linear-gradient(120deg, #975c38, #c49160); +} +.cover-wiki { + background: linear-gradient(120deg, #3d548f, #788bc1); +} +.cover-category { + align-self: flex-start; + font-size: 10px; + border: 1px solid #ffffff40; + background: #ffffff10; + padding: 1px 7px; + border-radius: 4px; +} +.cover-word { + font-size: 25px; + font-weight: 650; + line-height: 1.2; + letter-spacing: -0.5px; + max-width: 80%; + text-shadow: 0 1px 3px #0002; +} +.cover-footer { + display: flex; + justify-content: space-between; + font: 9px var(--vp-font-family-mono); + letter-spacing: 1px; + opacity: 0.85; +} +.cover-footer > span { + font-size: 16px; +} +.cover-decoration { + position: absolute; + right: 23px; + top: 53px; + font: 65px var(--vp-font-family-mono); + color: #ffffff22; + transform: rotate(-12deg); + z-index: -1; +} +.event-card-body { + padding: 20px 21px 0; + display: flex; + flex-direction: column; + flex: 1; +} +.event-card-meta { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 10px; + color: var(--event-muted); +} +.event-status { + display: flex; + align-items: center; + gap: 6px; +} +.event-status > span { + width: 5px; + height: 5px; + background: #8b94a3; + border-radius: 50%; +} +.event-status.live { + color: #347c67; +} +.event-status.live > span { + background: #459278; +} +.dark .event-status.live { + color: #9adac5; +} +.event-beginner { + color: var(--event-muted); + background: var(--event-bg); + padding: 1px 6px; + border-radius: 4px; +} +.event-card h3 { + font-size: 17px; + font-weight: 650; + line-height: 1.5; + margin: 13px 0 8px; + letter-spacing: -0.3px; +} +.event-card h3 a:hover { + color: var(--event-accent); +} +.event-description { + font-size: 12px; + line-height: 1.9; + color: var(--event-muted); + margin: 0 0 17px; + min-height: 46px; +} +.event-tags { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin: auto 0 18px; +} +.event-tags span { + font-size: 10px; + color: var(--event-muted); + border: 1px solid var(--event-line); + padding: 1px 7px; + border-radius: 4px; +} +.event-card-footer { + border-top: 1px solid var(--event-line); + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + padding: 14px 0; + font-size: 10px; + color: var(--event-muted); +} +.event-card-footer > a { + flex-shrink: 0; + color: var(--event-accent); + font-weight: 600; +} +.event-card-footer > a > span { + margin-left: 6px; +} +.events-source-note { + margin: 18px 0 0; + font-size: 11px; + line-height: 1.9; + color: var(--event-muted); +} +.events-empty { + text-align: center; + padding: 64px 20px; + border: 1px dashed var(--event-line); + border-radius: 12px; + background: var(--event-paper); +} +.events-empty > span { + font-size: 38px; + color: var(--event-muted); +} +.events-empty h3 { + font-size: 19px; + margin-top: 12px; + font-weight: 600; +} +.events-empty p { + font-size: 13px; + color: var(--event-muted); + margin: 10px 0 20px; +} +.events-bottom { + display: flex; + justify-content: space-between; + align-items: center; + gap: 24px; + margin-top: 48px; + padding: 32px; + background: var(--event-paper); + border: 1px solid var(--event-line); + border-radius: 12px; +} +.events-bottom h2 { + font-size: 23px; + font-weight: 650; + letter-spacing: -0.6px; + margin: 9px 0; + line-height: 1.5; +} +.events-bottom p:not(.events-eyebrow) { + font-size: 12px; + color: var(--event-muted); + margin: 0; +} +.events-bottom .events-button { + flex-shrink: 0; +} +.events-learning { + display: flex; + align-items: center; + justify-content: center; + gap: 28px; + font-size: 11px; + margin-top: 28px; + color: var(--event-muted); +} +.events-learning a { + color: var(--event-accent); +} +@media (min-width: 1500px) { + .events-wrap { + max-width: 1240px; + } + .events-hero { + padding-top: 60px; + padding-bottom: 48px; + } + .event-cover { + height: 190px; + } +} +@media (max-width: 1000px) { + .events-hero { + grid-template-columns: 1.15fr 0.85fr; + } + .art-code { + left: 13%; + width: 215px; + } + .chip-star { + right: -20px; + } + .chip-branch { + left: 0; + } + .events-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .events-search { + width: 235px; + } + .events-tabs { + gap: 0; + } + .events-tabs button { + padding: 8px; + } +} +@media (max-width: 767px) { + .events-page { + padding: 24px 20px 100px; + } + .events-hero { + grid-template-columns: 1fr; + padding: 35px 0 28px; + gap: 8px; + } + .events-hero h1 { + font-size: 38px; + } + .events-art { + display: none; + } + .events-start { + padding: 18px; + flex-wrap: wrap; + gap: 12px; + } + .events-start > div { + flex: 1; + } + .events-start > a { + width: 100%; + margin: 4px 0 0 54px; + } + .events-start p { + font-size: 11px; + } + .events-section-heading { + align-items: center; + } + .events-section-heading h2 > span { + display: none; + } + .events-section-heading .events-eyebrow { + font-size: 8px; + letter-spacing: 0.8px; + } + .events-explore { + padding-top: 36px; + } + .events-view-switch button { + padding: 5px 8px; + } + .events-filter-panel { + padding: 0 14px; + } + .events-filter-top { + flex-direction: column; + align-items: stretch; + padding: 14px 0; + gap: 14px; + } + .events-tabs { + justify-content: space-between; + } + .events-search { + width: 100%; + } + .events-filter-options { + flex-wrap: wrap; + gap: 12px; + } + .events-filter-options label { + gap: 8px; + } + .events-filter-bottom { + align-items: flex-start; + } + .events-result { + padding-top: 6px; + } + .events-bottom { + padding: 24px; + flex-direction: column; + align-items: flex-start; + gap: 20px; + } + .events-bottom h2 { + font-size: 21px; + } + .events-learning { + flex-wrap: wrap; + gap: 12px 24px; + } + .events-learning > span { + width: 100%; + text-align: center; + } +} +@media (max-width: 540px) { + .events-grid { + grid-template-columns: 1fr; + gap: 20px; + } + .event-cover { + height: 170px; + } + .event-card-body { + padding: 20px 22px 0; + } + .event-description { + min-height: 0; + } + .events-hero h1 { + font-size: 34px; + } + .events-tabs button { + font-size: 11px; + padding: 7px 6px; + } + .events-tabs button span { + padding-left: 3px; + } + .events-filter-options { + gap: 10px; + } + .events-checkbox { + font-size: 10px; + } +} +@media (prefers-reduced-motion: reduce) { + .events-page *, + .events-page *::before, + .events-page *::after { + transition: none !important; + } +} +.events-load-more { + display: flex; + justify-content: center; + margin: 32px 0; +} +.events-source-note a { + color: var(--vp-c-brand-1); + text-decoration: underline; +} diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts index aff660a..62848f8 100644 --- a/docs/.vitepress/theme/index.ts +++ b/docs/.vitepress/theme/index.ts @@ -5,6 +5,8 @@ import AutoMergeTable from './components/AutoMergeTable.vue'; import ContentMeta from './components/ContentMeta.vue'; import ElectiveCourseTable from './components/ElectiveCourseTable.vue'; import HomePage from './components/HomePage.vue'; +import EventCenter from './components/EventCenter.vue'; +import EventDetails from './components/EventDetails.vue'; import MaterialResourceList from './components/MaterialResourceList.vue'; import ProgrammingLanguageNav from './components/ProgrammingLanguageNav.vue'; import ScsLayout from './components/ScsLayout.vue'; @@ -19,6 +21,8 @@ export default { app.component('ContentMeta', ContentMeta); app.component('ElectiveCourseTable', ElectiveCourseTable); app.component('HomePage', HomePage); + app.component('EventCenter', EventCenter); + app.component('EventDetails', EventDetails); app.component('MaterialResourceList', MaterialResourceList); app.component('ProgrammingLanguageNav', ProgrammingLanguageNav); app.component( diff --git a/docs/.vitepress/theme/useEventClock.ts b/docs/.vitepress/theme/useEventClock.ts new file mode 100644 index 0000000..654e894 --- /dev/null +++ b/docs/.vitepress/theme/useEventClock.ts @@ -0,0 +1,16 @@ +import { onMounted, onUnmounted, ref } from 'vue'; +import { data as builtAt } from '../event-clock.data'; + +export function useEventClock() { + // The generated timestamp is identical in server HTML and the hydration bundle. + const now = ref(builtAt); + let timer: ReturnType | undefined; + onMounted(() => { + now.value = Date.now(); + timer = setInterval(() => { + now.value = Date.now(); + }, 60000); + }); + onUnmounted(() => clearInterval(timer)); + return now; +} diff --git a/docs/competitions/index.md b/docs/competitions/index.md index 353d42c..169abbd 100644 --- a/docs/competitions/index.md +++ b/docs/competitions/index.md @@ -5,18 +5,18 @@ category: competitions audience: - 本科生 content_type: experience -status: active +status: needs-review maintainers: - 程序设计算法协会 -sources: - - name: 西华师范大学程序设计算法协会 - url: https://www.cwnupaa.com/ +sources: [] --- # 竞赛与实践总览 +想寻找可以参与的开源活动与比赛?前往[活动与竞赛中心](/events/),按方向筛选活动、查看活动介绍与准备建议。 + 本页不说明学院或学校对竞赛的认定规则。竞赛认定、奖项统计、加分或报销等事项必须以正式通知为准。 ## 可以沉淀的内容 @@ -30,3 +30,9 @@ sources: - 校内选拔规则。 - 当前负责人和联系方式。 - 经费、认定、奖助相关流程。 + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 西华师范大学程序设计算法协会 diff --git a/docs/events/astar.md b/docs/events/astar.md new file mode 100644 index 0000000..cb6c56e --- /dev/null +++ b/docs/events/astar.md @@ -0,0 +1,68 @@ +--- +title: 百度之星程序设计大赛 +description: 以程序设计与算法解题为主要内容,适合进行个人限时编程训练。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 百度之星 + - Astar + - Baidu Star + topic: 程序设计 + eyebrow: 百度之星 + cover: blue + tags: + - 算法 + - 程序设计 + beginner: false + schedule: 常设入口 · 当届赛程另查 + order: 15 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 百度之星程序设计大赛 + +以程序设计与算法解题为主要内容,适合进行个人限时编程训练。 + + + +## 名称与收录范围 + +官方历届网站使用“百度之星程序设计大赛”。本页仅用历届公开资料核实赛事名称与方向,不将旧届时间、奖金或参赛规则套用到 2026 年。 + +依据:百度之星官方历届网站。 + +## 准备建议 + +从公开历年题目开始,记录解题思路、复杂度和边界错误。报名时重新确认当届承办平台及资格。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 百度之星程序设计大赛官方入口 +- 百度之星官方历届网站 diff --git a/docs/events/bdci.md b/docs/events/bdci.md new file mode 100644 index 0000000..ca68ec4 --- /dev/null +++ b/docs/events/bdci.md @@ -0,0 +1,67 @@ +--- +title: CCF大数据与计算智能大赛 +description: 从数据问题出发,实践建模、计算智能与可复现的算法评测。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - BDCI + - CCF BDCI + topic: 人工智能与数据 + eyebrow: CCF BDCI + cover: fest + tags: + - 机器学习 + - 大数据 + beginner: false + schedule: 已核验 2025 总结 · 新届通知另查 + order: 21 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# CCF大数据与计算智能大赛 + +从数据问题出发,实践建模、计算智能与可复现的算法评测。 + + + +## 名称与收录范围 + +CCF 官方介绍的名称为“CCF大数据与计算智能大赛”,缩写 BDCI。目录使用学会公开介绍作为稳定入口,已核验到 2025 年赛事总结;不将旧届合作平台、赛题或日程当作 2026 年安排。 + +依据:CCF 数据库专委会:2025 BDCI 总结。 + +## 准备建议 + +建立数据划分、训练与验证的可复现流程,先完成基线再做改进。确认所选赛题的数据许可、外部数据与提交限制。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- CCF大数据与计算智能大赛官方入口 +- CCF 数据库专委会:2025 BDCI 总结 diff --git a/docs/events/blockchain.md b/docs/events/blockchain.md new file mode 100644 index 0000000..3bb23f6 --- /dev/null +++ b/docs/events/blockchain.md @@ -0,0 +1,67 @@ +--- +title: CCF大学生区块链安全技术与创新应用竞赛 +description: 结合区块链安全与应用设计,完成技术方案、实现和测试验证。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - CCF区块链竞赛 + - 区块链安全 + topic: 网络安全 + eyebrow: 区块链安全与创新 + cover: code + tags: + - 区块链 + - 安全设计 + beginner: false + schedule: 2026 报名至 10 月 20 日 · 时刻见官网 + order: 33 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# CCF大学生区块链安全技术与创新应用竞赛 + +结合区块链安全与应用设计,完成技术方案、实现和测试验证。 + + + +## 名称与收录范围 + +官方章程使用“CCF大学生区块链安全技术与创新应用竞赛”。2026 年章程列出报名期 5 月 23 日至 10 月 20 日、作品提交期 9 月 1 日至 10 月 31 日,决赛日期标注预计。页面未给出的精确截止时刻不在本站补写。 + +依据:2026 年第五届竞赛章程。 + +## 准备建议 + +明确区块链是否适合所选问题,完成系统方案、代码与测试材料。资格、组队和指导教师要求按章程逐项确认。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- CCF大学生区块链安全技术与创新应用竞赛官方入口 +- 2026 年第五届竞赛章程 diff --git a/docs/events/c4-ai.md b/docs/events/c4-ai.md new file mode 100644 index 0000000..3a1d190 --- /dev/null +++ b/docs/events/c4-ai.md @@ -0,0 +1,66 @@ +--- +title: 中国高校计算机大赛—人工智能创意赛 +description: 围绕人工智能应用与创意作品,探索从技术原型到场景验证的完整过程。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - C4-AI + - 人工智能创意赛 + topic: 人工智能与数据 + eyebrow: 人工智能创意赛 + cover: fest + tags: + - 人工智能 + - 应用创新 + beginner: false + schedule: 2026 官方入口 · 分项安排查页面 + order: 25 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 中国高校计算机大赛—人工智能创意赛 + +围绕人工智能应用与创意作品,探索从技术原型到场景验证的完整过程。 + + + +## 名称与收录范围 + +官方页面使用“中国高校计算机大赛—人工智能创意赛”,标识为 C4-AI。2026 年页面包含鸿蒙高校创新赛、昇腾 AI 创新大赛等安排;具体分项规则需在该届平台核对。 + +依据:2026 中国高校计算机大赛人工智能创意赛官方页面。 + +## 准备建议 + +从一个可验证的应用问题出发,准备原型、实验结果与演示。确认所用平台、模型和素材满足所选方向要求。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 中国高校计算机大赛—人工智能创意赛官方入口 diff --git a/docs/events/ccf-open.md b/docs/events/ccf-open.md new file mode 100644 index 0000000..3a41a07 --- /dev/null +++ b/docs/events/ccf-open.md @@ -0,0 +1,67 @@ +--- +title: CCF开源创新大赛 +description: 通过项目贡献、任务挑战或案例教学参与开源,把成果放到真实社区中检验。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - CCF开源大赛 + - CCF ODC + topic: 开源实践 + eyebrow: CCF 开源创新大赛 + cover: code + tags: + - 开源贡献 + - 软件工程 + beginner: false + schedule: 2026 第八届 · 后续安排查官方平台 + order: 17 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# CCF开源创新大赛 + +通过项目贡献、任务挑战或案例教学参与开源,把成果放到真实社区中检验。 + + + +## 名称与收录范围 + +中国计算机学会发布的第八届通知使用“CCF开源创新大赛”,包含开源项目贡献、开源任务挑战、开源案例教学方向。该赛事与 GitLink“确实开源”编程夏令营不同,分别收录。 + +依据:CCF 第八届开源创新大赛通知。 + +## 准备建议 + +先挑选与现有技术栈匹配的赛题,阅读交付与评审标准。使用公开仓库记录贡献过程,并确认代码和材料的许可。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- CCF开源创新大赛官方入口 +- CCF 第八届开源创新大赛通知 diff --git a/docs/events/ccpc.md b/docs/events/ccpc.md new file mode 100644 index 0000000..845d7c2 --- /dev/null +++ b/docs/events/ccpc.md @@ -0,0 +1,67 @@ +--- +title: 中国大学生程序设计竞赛(CCPC) +description: 面向大学生的程序设计赛事,适合持续进行算法训练与团队配合练习。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - CCPC + - China Collegiate Programming Contest + topic: 程序设计 + eyebrow: CCPC + cover: blue + tags: + - 算法 + - 团队竞赛 + beginner: false + schedule: 常设入口 · 各届与赛项分别安排 + order: 13 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 中国大学生程序设计竞赛(CCPC) + +面向大学生的程序设计赛事,适合持续进行算法训练与团队配合练习。 + + + +## 名称与收录范围 + +官方名称为中国大学生程序设计竞赛,英文为 China Collegiate Programming Contest。CCPC 与 ICPC 是不同赛事;网络赛、分站赛与总决赛属于赛事体系中的不同阶段或赛站,不在目录中重复计数。 + +依据:CCPC 官方报名与赛事平台。 + +## 准备建议 + +根据当届赛站要求核对资格与名额,使用公开题目开展限时训练。校内选拔、名额和认定只以本校通知为准。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 中国大学生程序设计竞赛(CCPC)官方入口 +- CCPC 官方报名与赛事平台 diff --git a/docs/events/challenge-business.md b/docs/events/challenge-business.md new file mode 100644 index 0000000..d31d0da --- /dev/null +++ b/docs/events/challenge-business.md @@ -0,0 +1,68 @@ +--- +title: “挑战杯”中国大学生创业计划竞赛 +description: 围绕真实需求和创业方案,检验用户价值、实施条件与团队计划。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 挑战杯 + - 小挑 + - 创业计划竞赛 + topic: 创新创业 + eyebrow: 挑战杯 · 创业计划 + cover: code + tags: + - 创业计划 + - 需求调研 + beginner: false + schedule: 2026 第十五届 · 校内推荐另查 + order: 32 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# “挑战杯”中国大学生创业计划竞赛 + +围绕真实需求和创业方案,检验用户价值、实施条件与团队计划。 + + + +## 名称与收录范围 + +官网将创业计划竞赛与课外学术科技作品竞赛分列,常用简称分别为“小挑”与“大挑”。2026 年官网通知对应第十五届创业计划竞赛;本目录使用不含当届冠名的稳定名称。 + +依据:挑战杯官方历史站与 2026 通知入口。 + +## 准备建议 + +开展可核验的需求调研,说明产品、实施路径与团队分工。不要把未经验证的收入或用户规模当作既有成果。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- “挑战杯”中国大学生创业计划竞赛官方入口 +- 挑战杯官方历史站与 2026 通知入口 diff --git a/docs/events/challenge-science.md b/docs/events/challenge-science.md new file mode 100644 index 0000000..4124aef --- /dev/null +++ b/docs/events/challenge-science.md @@ -0,0 +1,67 @@ +--- +title: “挑战杯”全国大学生课外学术科技作品竞赛 +description: 围绕研究问题与科技作品,组织调研、实验验证和成果展示。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 挑战杯 + - 大挑 + - 科技作品竞赛 + topic: 创新创业 + eyebrow: 挑战杯 · 科技作品 + cover: code + tags: + - 科研实践 + - 科技作品 + beginner: false + schedule: 与创业计划竞赛分届举办 + order: 31 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# “挑战杯”全国大学生课外学术科技作品竞赛 + +围绕研究问题与科技作品,组织调研、实验验证和成果展示。 + + + +## 名称与收录范围 + +挑战杯官网分别列出课外学术科技作品竞赛与创业计划竞赛,两类赛事交替举办。通常所说“大挑”指科技作品竞赛,不应把“小挑”的届次和通知用于本赛。 + +依据:挑战杯官网赛事介绍。 + +## 准备建议 + +先明确研究问题和已有工作,再持续积累实验、调研与原创证据。具体申报类别、资格与校内推荐需查对应通知。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- “挑战杯”全国大学生课外学术科技作品竞赛官方入口 diff --git a/docs/events/ciscn.md b/docs/events/ciscn.md new file mode 100644 index 0000000..2287982 --- /dev/null +++ b/docs/events/ciscn.md @@ -0,0 +1,69 @@ +--- +title: 全国大学生信息安全竞赛 +description: 了解信息安全作品设计与创新实践能力两类赛道,培养安全分析与工程能力。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - CISCN + - 信息安全国赛 + - 作品赛 + - 创新实践能力赛 + topic: 网络安全 + eyebrow: 信息安全国赛 + cover: code + tags: + - CTF + - 安全作品 + beginner: false + schedule: 2026 第十九届 · 分赛道查看 + order: 18 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 全国大学生信息安全竞赛 + +了解信息安全作品设计与创新实践能力两类赛道,培养安全分析与工程能力。 + + + +## 名称与收录范围 + +2026 年官网发布第十九届竞赛公告,并分别列出作品赛和创新实践能力赛通知。两条赛道的日程与形式不能互相替代;某一赛道的联合赛事名称也不能用于重命名整个竞赛。 + +依据:竞赛官方公告列表。 + +## 准备建议 + +作品方向先明确安全问题、实现方案与验证方法;实践方向使用授权靶场训练。参赛资格和评测要求分别查阅所选赛道公告。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 全国大学生信息安全竞赛官方入口 +- 竞赛官方公告列表 diff --git a/docs/events/computer-design.md b/docs/events/computer-design.md new file mode 100644 index 0000000..1309a95 --- /dev/null +++ b/docs/events/computer-design.md @@ -0,0 +1,69 @@ +--- +title: 中国大学生计算机设计大赛 +description: 围绕软件应用、人工智能、物联网和数字媒体等方向,完成可展示的计算机作品。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 4C + - 计算机设计大赛 + - Chinese Collegiate Computing Competition + topic: 综合计算机 + eyebrow: 计算机设计大赛 + cover: code + tags: + - 软件作品 + - 数字媒体 + - 人工智能 + beginner: true + schedule: 2026 第十九届 · 当届分类查官网 + order: 19 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 中国大学生计算机设计大赛 + +围绕软件应用、人工智能、物联网和数字媒体等方向,完成可展示的计算机作品。 + + + +## 名称与收录范围 + +官网名称为“中国大学生计算机设计大赛”,常用缩写 4C。它与“中国高校计算机大赛”(含天梯赛、人工智能创意赛等)是不同赛事。本页不把二者混称为“计算机大赛”。 + +依据:中国大学生计算机设计大赛:大赛简介。 + +## 准备建议 + +先确定当届作品类别,围绕真实问题完成原型、说明文档和演示。参赛作品需符合相应原创性、素材与提交规则。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 中国大学生计算机设计大赛官方入口 +- 中国大学生计算机设计大赛:大赛简介 diff --git a/docs/events/contribute.md b/docs/events/contribute.md new file mode 100644 index 0000000..beb8120 --- /dev/null +++ b/docs/events/contribute.md @@ -0,0 +1,44 @@ +--- +title: 推荐活动与补充经验 +description: 为活动与竞赛中心推荐公开活动、修正时间或分享参与经验。 +category: competitions +audience: + - 贡献者 +content_type: verified +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +--- + + + +# 推荐活动与补充经验 + +[← 返回活动与竞赛中心](/events/) + +一个官网链接、一份清晰的准备指南,或一次有帮助的复盘,都能为下一位参与者节省时间。 + +## 推荐一个活动 + +在项目仓库的 Issues 中选择“推荐活动或更新活动信息”提交建议。需要登录 GitHub,由维护者核验后收录。 + +请提供活动名称、官方链接、活动类型、面向对象,以及能核验时间的具体通知。未找到当届时间也可以推荐,明确写“待确认”即可。 + +## 修正过期信息 + +请写清本站页面地址、原来的信息、建议修改及最新公开来源。日期尽量包含年份、时区与具体时刻,避免只写“月底截止”。 + +## 分享参与经验 + +可以分享准备方法、工具使用、协作过程和复盘。注明参加的年份与届次,将个人经验与官方规则分开;不提供未公开题目、他人隐私或未经授权的材料。 + +## 用 Pull Request 直接贡献 + +熟悉 Git 的同学可以按[如何贡献](/about/contribute)修改活动详情页。列表会读取详情页中的活动字段生成卡片,无需另外维护一份列表。维护字段的说明见仓库 CONTRIBUTING.md 中的“活动与竞赛中心”。 + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- SCSWiki 项目 diff --git a/docs/events/craic.md b/docs/events/craic.md new file mode 100644 index 0000000..c2ae05a --- /dev/null +++ b/docs/events/craic.md @@ -0,0 +1,66 @@ +--- +title: 中国机器人及人工智能大赛 +description: 围绕机器人与人工智能开展工程实践,按任务、平台和设备条件选择赛项。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - CRAIC + - 机器人及人工智能大赛 + topic: 机器人与硬件 + eyebrow: 机器人及人工智能大赛 + cover: ladder + tags: + - 机器人 + - 人工智能 + beginner: false + schedule: 2026 第二十八届 · 分赛项查看 + order: 23 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 中国机器人及人工智能大赛 + +围绕机器人与人工智能开展工程实践,按任务、平台和设备条件选择赛项。 + + + +## 名称与收录范围 + +官网使用“中国机器人及人工智能大赛”,2026 年为第二十八届。不同赛项和决赛场次有独立安排,不能把某地决赛日期推广为整个大赛的统一时间。 + +依据:中国机器人及人工智能大赛官网。 + +## 准备建议 + +先核实赛项设备、软件平台和赛制,评估现有实验条件。尽早将感知、控制与机械或仿真模块分工落实。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 中国机器人及人工智能大赛官方入口 diff --git a/docs/events/cumcm.md b/docs/events/cumcm.md new file mode 100644 index 0000000..8d08733 --- /dev/null +++ b/docs/events/cumcm.md @@ -0,0 +1,70 @@ +--- +title: 全国大学生数学建模竞赛 +description: 把现实问题转化为数学模型,结合编程计算、结果验证与论文表达完成团队作品。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - CUMCM + - 高教社杯 + - 数学建模国赛 + - 2026高教社杯全国大学生数学建模竞赛 + topic: 数学建模 + eyebrow: 全国大学生数学建模竞赛 + cover: code + tags: + - 数学建模 + - Python + - 论文表达 + beginner: false + schedule: 2026 通知已发布 · 完整赛程见官网 + order: 22 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 全国大学生数学建模竞赛 + +把现实问题转化为数学模型,结合编程计算、结果验证与论文表达完成团队作品。 + + + +## 名称与收录范围 + +2026 年组委会通知标题使用“2026高教社杯全国大学生数学建模竞赛”。“高教社杯”为该届标题中的冠名,本目录保留稳定赛事名称。国内赛与美国大学生数学建模竞赛不是同一赛事。 + +依据:2026 高教社杯全国大学生数学建模竞赛通知。 + +## 准备建议 + +练习建模、编程和写作分工,重视模型假设、检验与引用。参赛前阅读当届关于 AI 工具和学术规范的专门规定。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 全国大学生数学建模竞赛官方入口 +- 2026 高教社杯全国大学生数学建模竞赛通知 diff --git a/docs/events/electronic.md b/docs/events/electronic.md new file mode 100644 index 0000000..e80c571 --- /dev/null +++ b/docs/events/electronic.md @@ -0,0 +1,66 @@ +--- +title: 全国大学生电子设计竞赛 +description: 围绕电子系统设计、嵌入式开发与测试,完成软硬件结合的工程作品。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - NUEDC + - 电赛 + topic: 机器人与硬件 + eyebrow: 全国大学生电子设计竞赛 + cover: ladder + tags: + - 嵌入式 + - 电路设计 + beginner: false + schedule: 2026 专题赛 · 分项查看 + order: 34 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 全国大学生电子设计竞赛 + +围绕电子系统设计、嵌入式开发与测试,完成软硬件结合的工程作品。 + + + +## 名称与收录范围 + +官网名称为“全国大学生电子设计竞赛”,缩写 NUEDC。2026 年页面中的专题竞赛与往届全国赛的安排需要分别核对,不能把某个专题赛时间写成全部赛事的时间。 + +依据:全国大学生电子设计竞赛组委会官网。 + +## 准备建议 + +从电路、单片机、嵌入式与测量基础入手,安排模块测试与联调。设备、器件和赛题限制以具体竞赛要求为准。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 全国大学生电子设计竞赛官方入口 diff --git a/docs/events/glcc.md b/docs/events/glcc.md new file mode 100644 index 0000000..8b0d33a --- /dev/null +++ b/docs/events/glcc.md @@ -0,0 +1,68 @@ +--- +title: GitLink“确实开源”编程夏令营 +description: 在导师与社区支持下参与真实开源项目,通过持续贡献完成开发实践。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 开源活动 + scope: series + aliases: + - GLCC + - 确实开源 + - GitLink + topic: 开源实践 + eyebrow: GLCC + cover: summer + tags: + - 开源开发 + - 导师指导 + beginner: false + schedule: 已核验 2025 通知 · 新届招募另查 + order: 27 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# GitLink“确实开源”编程夏令营 + +在导师与社区支持下参与真实开源项目,通过持续贡献完成开发实践。 + + + +## 名称与收录范围 + +CCF 2025 年通知使用“GitLink‘确实开源’编程夏令营”,缩写 GLCC。本次核实到的具体招募通知属于 2025 年,不能据此宣称 2026 年正在招募。它与 CCF开源创新大赛分别收录。 + +依据:CCF:2025 GitLink“确实开源”编程夏令营。 + +## 准备建议 + +先在项目列表中筛选熟悉的技术,阅读项目背景与预期交付,再尝试一个小任务。申请前确认当届资格与可投入周期。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- GitLink“确实开源”编程夏令营官方入口 +- CCF:2025 GitLink“确实开源”编程夏令营 diff --git a/docs/events/gplt.md b/docs/events/gplt.md new file mode 100644 index 0000000..2fdbdb4 --- /dev/null +++ b/docs/events/gplt.md @@ -0,0 +1,68 @@ +--- +title: 中国高校计算机大赛—团体程序设计天梯赛 +description: 以团队形式参与分梯级程序设计挑战,兼顾个人编程基础和队伍整体实力。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - GPLT + - 天梯赛 + - 团体程序设计天梯赛 + topic: 程序设计 + eyebrow: 团体程序设计天梯赛 + cover: blue + tags: + - 程序设计 + - 团队协作 + beginner: true + schedule: 常设入口 · 各届与赛项分别安排 + order: 6 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 中国高校计算机大赛—团体程序设计天梯赛 + +以团队形式参与分梯级程序设计挑战,兼顾个人编程基础和队伍整体实力。 + + + +## 名称与收录范围 + +组委会通知中的全称为“中国高校计算机大赛-团体程序设计天梯赛”。本页使用中文破折号统一排版;GPLT、天梯赛为简称。它属于中国高校计算机大赛系列,不能与中国大学生计算机设计大赛合并。 + +依据:第十一届赛前准备会通知(组委会 PDF)。 + +## 准备建议 + +从基础题开始限时练习,再逐步补充数据结构和算法。参赛队伍的组织、选拔和报名方式需查看本校正式通知。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 中国高校计算机大赛—团体程序设计天梯赛官方入口 +- 第十一届赛前准备会通知(组委会 PDF) diff --git a/docs/events/gsoc-2026.md b/docs/events/gsoc-2026.md new file mode 100644 index 0000000..076a363 --- /dev/null +++ b/docs/events/gsoc-2026.md @@ -0,0 +1,80 @@ +--- +title: Google Summer of Code 2026 +description: 在导师指导下参与开源项目,与全球社区协作,积累真实开发经验。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 开源活动 + eyebrow: Summer of Code + cover: code + tags: + - 开源开发 + - 导师指导 + - 英语协作 + beginner: false + schedule: 2026 年度 · 含延长项目周期 + order: 3 + registrationOpen: '2026-03-16T18:00:00Z' + registrationClose: '2026-03-31T18:00:00Z' + start: '2026-05-25T00:00:00Z' + end: '2026-11-09T18:00:00Z' + checked: '2026-09-12' + aliases: + - GSoC + - Google Summer of Code + topic: 开源实践 + scope: edition + reviewRequired: true +--- + + + +# Google Summer of Code 2026 + +在导师指导下参与开源项目,与全球社区协作,积累真实开发经验。 + + + +## 活动简介 + +Google Summer of Code(GSoC)是面向开源新贡献者的全球线上项目,参与者在导师指导下与开源组织共同开发。具体资格与项目要求请阅读官网规则。 + +## 2026 时间线 + +以下来自 Google 官方时间线。精确时刻以 UTC 表示,北京时间需加 8 小时。 + +| 阶段 | 官方时间 | +| ------------------------ | -------------------- | +| 贡献者开始申请 | 3 月 16 日 18:00 UTC | +| 贡献者申请截止 | 3 月 31 日 18:00 UTC | +| 正式编码开始 | 5 月 25 日 | +| 标准周期导师最终评估截止 | 8 月 31 日 18:00 UTC | +| 延长项目最终成果提交截止 | 11 月 2 日 18:00 UTC | +| 延长项目导师评估截止 | 11 月 9 日 18:00 UTC | + +本页日期作为历史检索记录保留,当前条目标为“待核验”,不据此提示正在报名或进行中。个人项目安排可能不同。 + +## 准备建议 + +先选择感兴趣的组织,阅读项目文档、尝试运行代码,并尽早讨论项目想法。练习用清楚的文字描述问题与解决方案,比一次性提交庞大的提案更适合作为准备起点。 + +## 继续学习 + +- [Git 入门](/development/git-basics) +- [开发与工具](/development/) + +往届经验可以用于了解协作方式,但不能替代当届规则。 + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- Google Summer of Code 官网 +- Google Summer of Code 2026 时间线 diff --git a/docs/events/hacktoberfest-2026.md b/docs/events/hacktoberfest-2026.md new file mode 100644 index 0000000..525bdad --- /dev/null +++ b/docs/events/hacktoberfest-2026.md @@ -0,0 +1,73 @@ +--- +title: Hacktoberfest 2026 +description: 围绕开源 AI 动手学习,探索线上与线下社区活动,和其他开发者一起创造。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 开源活动 + eyebrow: Hacktoberfest + cover: fest + tags: + - 开源 AI + - 社区活动 + - 动手实践 + beginner: true + schedule: 2026 年 10 月 · 各场次另行安排 + order: 4 + start: '2026-10-01T00:00:00Z' + end: '2026-11-01T00:00:00Z' + checked: '2026-09-12' + aliases: + - Hacktoberfest + - AI Fests + topic: 开源实践 + scope: edition + reviewRequired: true +--- + + + +# Hacktoberfest 2026 + +围绕开源 AI 动手学习,探索线上与线下社区活动,和其他开发者一起创造。 + + + +## 今年的活动是什么 + +根据官网,Hacktoberfest 2026 由 MLH 与 DEV 运营,与 DigitalOcean 合作,转向围绕开源 AI 的线上和线下社区活动。主题包括动手构建、实验与学习。 + +**不要套用往年的 PR 数量规则。** 官网明确说明今年的活动形式已发生变化。 + +## 如何参与 + +1. 在官网通过 Find a Fest 查找活动。 +2. 查看具体场次的主题、形式、地点或线上参与方式。 +3. 以场次说明核实报名要求、容量和时区,再安排参与。 + +## 时间安排 + +官网列出的活动月份为 2026 年 10 月。本站用 UTC 月份边界展示整体活动季的“即将开始 / 进行中 / 已结束”,不是某个场次的报名或结束时间;具体以场次通知为准。 + +## 适合谁 + +对开源 AI 和动手实践感兴趣的同学。“新手友好”是本站对探索入口的建议,各场次仍可能有不同基础要求。 + +## 准备建议 + +- 阅读所选活动的准备清单,提前安装需要的工具。 +- 用[Git 入门](/development/git-basics)了解协作基础。 +- 记录成果与复盘,后续可以通过[贡献入口](/events/contribute)分享经验。 + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- Hacktoberfest 2026 官网 diff --git a/docs/events/icpc.md b/docs/events/icpc.md new file mode 100644 index 0000000..0f782ea --- /dev/null +++ b/docs/events/icpc.md @@ -0,0 +1,69 @@ +--- +title: 国际大学生程序设计竞赛(ICPC) +description: 三人团队协作解决算法问题,沿区域赛等赛事体系逐级参与挑战。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - ICPC + - ACM-ICPC + - ACM + - International Collegiate Programming Contest + topic: 程序设计 + eyebrow: ICPC + cover: blue + tags: + - 算法 + - 团队竞赛 + beginner: false + schedule: 常设入口 · 各届与赛项分别安排 + order: 12 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 国际大学生程序设计竞赛(ICPC) + +三人团队协作解决算法问题,沿区域赛等赛事体系逐级参与挑战。 + + + +## 名称与收录范围 + +ICPC 官方英文全称为 International Collegiate Programming Contest。其赛事体系包括地区及更高层级赛事,不能用世界总决赛日程代表所有区域赛。历史资料中的 ACM-ICPC 可用于检索,不作为当前名称。 + +依据:ICPC 2026 World Finals:About。 + +## 准备建议 + +先建立算法和数据结构基础,再开展三人共用比赛资源的团队训练。查看拟参加赛站的资格规则及学校组队要求。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 国际大学生程序设计竞赛(ICPC)官方入口 +- ICPC 2026 World Finals:About diff --git a/docs/events/index.md b/docs/events/index.md new file mode 100644 index 0000000..2aeb965 --- /dev/null +++ b/docs/events/index.md @@ -0,0 +1,24 @@ +--- +layout: page +title: 活动与竞赛 +description: 发现开源活动、学科竞赛与 SCSWiki 社区共建,从第一次贡献开始实践。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: verified +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +sidebar: false +outline: false +--- + + + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- SCSWiki 项目 diff --git a/docs/events/innovation.md b/docs/events/innovation.md new file mode 100644 index 0000000..dd00f31 --- /dev/null +++ b/docs/events/innovation.md @@ -0,0 +1,69 @@ +--- +title: 中国国际大学生创新大赛 +description: 围绕创新项目开展实践与展示,按教育部当届通知选择适用赛道。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 互联网+ + - 互联网加 + - 中国国际大学生创新大赛(2026) + - 大学生创新创业大赛 + topic: 创新创业 + eyebrow: 中国国际大学生创新大赛 + cover: code + tags: + - 创新项目 + - 团队实践 + beginner: false + schedule: '2026 全国报名至 9 月 25 日 12:00' + order: 35 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 中国国际大学生创新大赛 + +围绕创新项目开展实践与展示,按教育部当届通知选择适用赛道。 + + + +## 名称与收录范围 + +教育部 2026 年通知使用“中国国际大学生创新大赛(2026)”。“互联网+”大学生创新创业大赛属于历史检索名称。通知所列国内参赛报名系统于 8 月 10 日开放,9 月 25 日 12:00 截止;校内推荐时间可能更早。 + +依据:教育部关于举办中国国际大学生创新大赛(2026)的通知。 + +## 准备建议 + +先核对赛道、项目阶段和团队资格,准备可核实的项目材料。教育部全国截止时间不能替代本校申报与推荐截止时间。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 中国国际大学生创新大赛官方入口 +- 教育部关于举办中国国际大学生创新大赛(2026)的通知 diff --git a/docs/events/jittor.md b/docs/events/jittor.md new file mode 100644 index 0000000..c76d9de --- /dev/null +++ b/docs/events/jittor.md @@ -0,0 +1,68 @@ +--- +title: “计图”人工智能算法挑战赛 +description: 使用计图深度学习框架实践人工智能算法,关注官方热身任务与正式赛道。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 计图 + - Jittor + - 计图人工智能挑战赛 + topic: 人工智能与数据 + eyebrow: 计图人工智能算法挑战赛 + cover: fest + tags: + - 深度学习 + - Jittor + beginner: false + schedule: 名称已核实 · 2026 规则待核验 + order: 36 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# “计图”人工智能算法挑战赛 + +使用计图深度学习框架实践人工智能算法,关注官方热身任务与正式赛道。 + + + +## 名称与收录范围 + +计图官方文章的完整名称为“‘计图’人工智能算法挑战赛”。检索结果可见第六届启动条目,但本次官网正文访问受限,尚未完成 2026 年规则核验。2025 年官方文章仅用于核实名称与框架方向,不把旧届任务和报名链接当作当届安排。 + +依据:计图官方第五届赛事介绍(2025)。 + +## 准备建议 + +先学习计图框架并运行公开示例。准备参赛前,必须找到当届正式公告,确认热身任务、数据集、评测和报名入口。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- “计图”人工智能算法挑战赛官方入口 +- 计图官方第五届赛事介绍(2025) diff --git a/docs/events/lanqiao.md b/docs/events/lanqiao.md new file mode 100644 index 0000000..87e7d59 --- /dev/null +++ b/docs/events/lanqiao.md @@ -0,0 +1,67 @@ +--- +title: 蓝桥杯全国大学生软件和信息技术大赛 +description: 从程序设计到软件与电子实践,按当届科目和组别选择适合自己的赛道。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 蓝桥杯大赛 + - 蓝桥杯全国软件和信息技术专业人才大赛 + topic: 程序设计 + eyebrow: 蓝桥杯 + cover: blue + tags: + - 程序设计 + - 软件开发 + beginner: true + schedule: 常设入口 · 当前届次请查官网 + order: 5 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 蓝桥杯全国大学生软件和信息技术大赛 + +从程序设计到软件与电子实践,按当届科目和组别选择适合自己的赛道。 + + + +## 名称与收录范围 + +第十七届官方指南使用“蓝桥杯全国大学生软件和信息技术大赛”。旧届常见的“全国软件和信息技术专业人才大赛”保留为历史检索词,不作为本页现行标题。该指南仅覆盖软件、电子赛,不能用来推断其他赛道或第十八届的安排。 + +依据:第十七届软件、电子赛报名指南(官方 PDF)。 + +## 准备建议 + +先核对语言、考试环境和组别,再按大纲练习。不要把不同赛道的报名、费用和省赛安排混在一起。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 蓝桥杯全国大学生软件和信息技术大赛官方入口 +- 第十七届软件、电子赛报名指南(官方 PDF) diff --git a/docs/events/lfx.md b/docs/events/lfx.md new file mode 100644 index 0000000..3a4d5ad --- /dev/null +++ b/docs/events/lfx.md @@ -0,0 +1,68 @@ +--- +title: LFX Mentorship +description: 通过 Linux Foundation 生态中的导师项目,参与开源技术实践。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 开源活动 + scope: series + aliases: + - LFX + - Linux Foundation Mentorship + topic: 开源实践 + eyebrow: LFX Mentorship + cover: summer + tags: + - 开源开发 + - 导师指导 + - 英语协作 + beginner: false + schedule: 按项目与批次开放 + order: 28 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# LFX Mentorship + +通过 Linux Foundation 生态中的导师项目,参与开源技术实践。 + + + +## 名称与收录范围 + +LFX Mentorship 是 Linux Foundation 提供的开源导师计划工具与项目入口,不是统一赛制的竞赛。各项目的申请窗口、技术要求与投入安排分别发布。 + +依据:LFX Mentorship 项目平台。 + +## 准备建议 + +根据技术方向查看项目和导师要求,先阅读社区贡献规范、运行项目并积累公开贡献记录,再准备申请材料。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- LFX Mentorship官方入口 +- LFX Mentorship 项目平台 diff --git a/docs/events/matibei.md b/docs/events/matibei.md new file mode 100644 index 0000000..6d758d8 --- /dev/null +++ b/docs/events/matibei.md @@ -0,0 +1,66 @@ +--- +title: 码蹄杯全国大学生程序设计大赛 +description: 结合官方历年题集练习程序设计,了解不同院校类型与赛道的参赛要求。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 码蹄杯 + - MATIBEI + topic: 程序设计 + eyebrow: 码蹄杯 + cover: blue + tags: + - 程序设计 + - 公开题集 + beginner: true + schedule: 历年题集入口 · 报名另查当届通知 + order: 14 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 码蹄杯全国大学生程序设计大赛 + +结合官方历年题集练习程序设计,了解不同院校类型与赛道的参赛要求。 + + + +## 名称与收录范围 + +官方题集页面使用“码蹄杯全国大学生程序设计大赛”。页面关于竞赛榜单的说明特别指向职业院校赛道,不能据此宣称本科赛道或本校具有相同认定。题集年份也不等于开放报名年份。 + +依据:码蹄集官方历年题集与赛事简介。 + +## 准备建议 + +先用公开题集了解难度,再确认当届本科、职业院校等赛道的适用对象。公开题目适合训练,但不是报名入口。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 码蹄杯全国大学生程序设计大赛官方入口 diff --git a/docs/events/ncccu.md b/docs/events/ncccu.md new file mode 100644 index 0000000..b414171 --- /dev/null +++ b/docs/events/ncccu.md @@ -0,0 +1,73 @@ +--- +title: 全国高校计算机能力挑战赛 +description: 覆盖程序设计、Office、大数据、人工智能和数字媒体,按具体赛项选择方向。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 计挑赛 + - NCCCU + - 程序设计挑战赛 + - Office高级应用赛 + - 大数据挑战赛 + - 人工智能挑战赛 + - 数字媒体创新设计赛 + topic: 综合计算机 + eyebrow: 计挑赛 + cover: code + tags: + - 程序设计 + - 人工智能 + - 数字媒体 + beginner: true + schedule: 2026 第八届 · 各赛项分别安排 + order: 16 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 全国高校计算机能力挑战赛 + +覆盖程序设计、Office、大数据、人工智能和数字媒体,按具体赛项选择方向。 + + + +## 名称与收录范围 + +2026 年官方入口列出五大赛项:程序设计挑战赛、Office 高级应用赛、大数据挑战赛、人工智能挑战赛、数字媒体创新设计赛。“程序设计挑战赛”是子赛项,不能当作整项赛事的全称。 + +依据:2026 年第八届赛项规程。 + +## 准备建议 + +先读所选赛项规程,再核对全国通知及适用赛区要求。不同赛项的考核形式、模拟赛和截止时间可能不同。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 全国高校计算机能力挑战赛官方入口 +- 2026 年第八届赛项规程 diff --git a/docs/events/os-design.md b/docs/events/os-design.md new file mode 100644 index 0000000..e4e9891 --- /dev/null +++ b/docs/events/os-design.md @@ -0,0 +1,69 @@ +--- +title: 全国大学生计算机系统能力大赛—操作系统设计赛 +description: 通过内核功能与系统设计挑战,把操作系统课程知识转化为可运行的实现。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 操作系统设计赛 + - OS大赛 + - OS + topic: 系统开发 + eyebrow: 操作系统设计赛 + cover: code + tags: + - 操作系统 + - 内核 + - RISC-V + beginner: false + schedule: 2026 赛事入口 · 赛道时间分别查看 + order: 26 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 全国大学生计算机系统能力大赛—操作系统设计赛 + +通过内核功能与系统设计挑战,把操作系统课程知识转化为可运行的实现。 + + + +## 名称与收录范围 + +赛事官网使用“全国大学生计算机系统能力大赛—操作系统设计赛”。它是计算机系统能力大赛的分赛项,本目录不再另列同一个上级赛事来增加数量。 + +依据:全国大学生计算机系统能力大赛官方入口。 + +## 准备建议 + +准备 Linux、C 或 Rust 与操作系统基础,先运行官方框架和样例。功能挑战、内核实现等具体任务以当届赛题为准。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 全国大学生计算机系统能力大赛—操作系统设计赛官方入口 +- 全国大学生计算机系统能力大赛官方入口 diff --git a/docs/events/oscamp.md b/docs/events/oscamp.md new file mode 100644 index 0000000..3feb0a4 --- /dev/null +++ b/docs/events/oscamp.md @@ -0,0 +1,69 @@ +--- +title: 开源操作系统训练营 +description: 从 Rust 与操作系统基础出发,通过实验逐步参与 rCore 等开源系统实践。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 开源活动 + scope: series + aliases: + - rCore + - OSCamp + - 开源训练营 + topic: 系统开发 + eyebrow: 开源操作系统训练营 + cover: summer + tags: + - Rust + - 操作系统 + - RISC-V + beginner: true + schedule: 集中授课已结束 · 回放学习见官网 + order: 30 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 开源操作系统训练营 + +从 Rust 与操作系统基础出发,通过实验逐步参与 rCore 等开源系统实践。 + + + +## 名称与收录范围 + +2026 春夏季官方页面列出 3 月 1 日至 6 月 21 日的集中学习周期,同时明确全年可报名并使用回放学习。集中授课结束不等于学习资料关闭,但也不代表仍有同期直播与实时答疑。 + +依据:LearningOS 开源学习社区。 + +## 准备建议 + +先完成 Rust、Linux 与操作系统导学内容,再尝试基础实验。按官方阶段任务推进,记录可复现的实验环境与问题。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 开源操作系统训练营官方入口 +- LearningOS 开源学习社区 diff --git a/docs/events/ospp.md b/docs/events/ospp.md new file mode 100644 index 0000000..51f74b9 --- /dev/null +++ b/docs/events/ospp.md @@ -0,0 +1,69 @@ +--- +title: 点亮计划-开源之夏 +description: 围绕 RISC-V 基础软件生态参与开源项目,按项目节奏开展持续开发。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 开源活动 + scope: series + aliases: + - OSPP + - 开源之夏 + - 点亮计划 + topic: 开源实践 + eyebrow: 开源之夏 OSPP + cover: summer + tags: + - RISC-V + - 基础软件 + - 开源项目 + beginner: false + schedule: 2026 滚动开放 · 按项目安排 + order: 2 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# 点亮计划-开源之夏 + +围绕 RISC-V 基础软件生态参与开源项目,按项目节奏开展持续开发。 + + + +## 名称与收录范围 + +2026 年官方名称为“点亮计划-开源之夏”,聚焦 RISC-V 生态基础软件。FAQ 明确项目与开发阶段滚动开放,并提供经典模式与学生领航模式,不再沿用统一暑期时间表。学生须年满 18 周岁,且开发期间保持符合要求的在籍身份。 + +依据:点亮计划-开源之夏 2026 官方 FAQ。 + +## 准备建议 + +先选择匹配自身能力的项目,阅读学生指南与项目交付标准,再尝试运行代码。滚动开放不代表任意项目随时有名额,申请窗口需逐项查看。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 点亮计划-开源之夏官方入口 +- 点亮计划-开源之夏 2026 官方 FAQ diff --git a/docs/events/outreachy.md b/docs/events/outreachy.md new file mode 100644 index 0000000..375388e --- /dev/null +++ b/docs/events/outreachy.md @@ -0,0 +1,66 @@ +--- +title: Outreachy +description: 面向符合资格的申请者提供远程开源实习,涵盖编程、文档、设计等贡献。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 开源活动 + scope: series + aliases: + - Outreachy Internship + topic: 开源实践 + eyebrow: Outreachy + cover: summer + tags: + - 开源实习 + - 文档与设计 + - 英语协作 + beginner: false + schedule: 按轮次申请 · 需先核对资格 + order: 29 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# Outreachy + +面向符合资格的申请者提供远程开源实习,涵盖编程、文档、设计等贡献。 + + + +## 名称与收录范围 + +Outreachy 面向在技术行业受到代表性不足或系统性偏见等影响、且符合其资格政策的人群。它是有资格审核的开源实习计划,不是所有在校生均可报名的比赛;不同轮次的申请、贡献期与实习期分开安排。 + +依据:Outreachy 官方活动与资格入口。 + +## 准备建议 + +先阅读当轮完整资格规则并核对可投入时间,再评估项目。通过初步资格审核后的贡献阶段,不等于已获实习录取。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- Outreachy官方入口 diff --git a/docs/events/research.md b/docs/events/research.md new file mode 100644 index 0000000..b906651 --- /dev/null +++ b/docs/events/research.md @@ -0,0 +1,154 @@ +--- +title: 活动与竞赛收录研究及名称核验 +description: 2026 年 9 月的赛事目录深度检索,说明 31 项活动的名称依据、层级差异、收录范围和待核验事项。 +category: competitions +audience: + - 本科生 + - 开源贡献者 + - 内容维护者 +content_type: verified +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +--- + + + +# 活动与竞赛收录研究及名称核验 + +以下为历史检索记录。当前未提供来源地址,结论与日期须重新核验后使用。 + +历史检索日期:**2026 年 9 月 12 日**。本次将目录从 6 项扩展为 **31 项:23 项学科竞赛、7 项开源活动、1 项社区共建**。覆盖程序设计、软件开发、综合计算机、人工智能与数据、网络安全、系统开发、数学建模、机器人与硬件、创新创业、开源实践。 + +这是一份面向计算机学院学生的机会目录,不是全国赛事全集,也不是学校认可的竞赛名单。收录仅提供名称和活动线索,不表示正在报名、学校组织参赛或已获学校认定。[返回活动目录](/events/)。 + +## 检索方法与证据标准 + +本次按“赛事全称/常用缩写 → 主办学会或组织 → 官方赛规与项目指南 → 当届通知 → 冲突核对”逐项检索。优先采用主办方、赛事组委会、官方项目社区及教育部资料;官网正文访问不稳定时,明确区分检索摘要、历届材料与高校转载的证据作用。 + +每项只收录一个稳定入口,避免通过重复列举母赛事、子赛项、校赛或不同届次增加数量。图文参考页仅用于界面和发现线索,不作为名称、赛事级别或赛程的事实依据。没有搬用宣传海报中的“国家级”标签。 + +以下几类信息单独处理: + +- **名称已核验,当前届次未核验**:保留常设入口,状态为“查看当届通知”,不猜测报名时间。 +- **具体年度活动**:如 GSoC 2026、Hacktoberfest 2026,按官方已核验时间线展示;详情说明适用阶段。 +- **官网内容受限或资料不足**:明确标注待核验,列出目前能支持与不能支持的结论。 +- **高校转载**:仅作赛事名称等公开信息的交叉证据,不照搬该校报名、加分、推荐名额或联系方式。 +- **日期冲突**:优先采用同一事项更新的官方通知;不同赛道、地区或阶段的日期不互相覆盖。仅给出日期而无时刻时,不补写精确截止时刻。 + +## 关键名称修正与容易混淆的关系 + +| 对象 | 本次处理 | 依据 | +| -------------- | ---------------------------------------------------------------------------------------------------------------- | -------------------------------------- | +| 蓝桥杯 | 使用第十七届指南中的“蓝桥杯全国大学生软件和信息技术大赛”;旧名“全国软件和信息技术专业人才大赛”仅保留为历史检索词 | 官方第十七届指南 | +| 天梯赛 | 补全“中国高校计算机大赛—团体程序设计天梯赛”,保留 GPLT、天梯赛简称 | 组委会通知 | +| 计挑赛 | 全称“全国高校计算机能力挑战赛”;程序设计挑战赛是其中的赛项 | 2026 赛项规程 | +| 计算机设计大赛 | “中国大学生计算机设计大赛”(4C)与“中国高校计算机大赛”分别处理 | 4C 大赛简介、人工智能创意赛官方页 | +| GLCC | 使用 GitLink“确实开源”编程夏令营;与 CCF开源创新大赛分别收录 | CCF 的 GLCC 通知、CCF 开源创新大赛通知 | +| 计图 | 全称补上“算法”,写作“‘计图’人工智能算法挑战赛”;2026 规则仍待核验 | 计图官方历届介绍 | +| 挑战杯 | 科技作品竞赛与创业计划竞赛各收录一次;大挑、小挑不是同一赛事的随意简称 | 挑战杯官网 | +| 创新大赛 | 使用“中国国际大学生创新大赛”;“互联网+”作为历史检索词 | 教育部 2026 通知 | +| 码蹄杯 | 使用“码蹄杯全国大学生程序设计大赛”;不把职业院校赛道的榜单说明推广到本科赛道 | 官方题集及简介 | +| ICPC | 当前英文全称为 International Collegiate Programming Contest;ACM-ICPC 只用于历史检索 | ICPC 官方介绍 | + +标点统一使用中文引号和破折号,不改变专有名称。年份、届次和冠名只在有相应证据的当届说明中出现,常设入口不把所有比赛一律加上“2026”。 + +## 本次收录与证据目录 + +“当届入口”不等于完整赛程已核实;下列来源的适用范围详见各活动页。官网按钮用于导航,核验资料链接用于追溯具体结论。 + +| 活动与详情 | 方向 | 核验资料 | 适用范围 | +| ------------------------------------------------------------------- | -------------- | -------------------------------------------------- | ------------------------------------ | +| [蓝桥杯全国大学生软件和信息技术大赛](/events/lanqiao) | 程序设计 | 第十七届软件、电子赛报名指南(官方 PDF) | 常设入口 · 当前届次请查官网 | +| [中国高校计算机大赛—团体程序设计天梯赛](/events/gplt) | 程序设计 | 第十一届赛前准备会通知(组委会 PDF) | 名称与常设入口;各届规则另查 | +| [国际大学生程序设计竞赛(ICPC)](/events/icpc) | 程序设计 | ICPC 2026 World Finals:About | 名称与常设入口;各届规则另查 | +| [中国大学生程序设计竞赛(CCPC)](/events/ccpc) | 程序设计 | CCPC 官方报名与赛事平台 | 名称与常设入口;各届规则另查 | +| [码蹄杯全国大学生程序设计大赛](/events/matibei) | 程序设计 | 码蹄集官方历年题集与赛事简介 | 历年题集入口 · 报名另查当届通知 | +| [百度之星程序设计大赛](/events/astar) | 程序设计 | 百度之星官方历届网站 | 常设入口 · 当届赛程另查 | +| [全国高校计算机能力挑战赛](/events/ncccu) | 综合计算机 | 2026 年第八届赛项规程 | 2026 第八届 · 各赛项分别安排 | +| [CCF开源创新大赛](/events/ccf-open) | 开源实践 | CCF 第八届开源创新大赛通知 | 2026 第八届 · 后续安排查官方平台 | +| [全国大学生信息安全竞赛](/events/ciscn) | 网络安全 | 竞赛官方公告列表 | 2026 第十九届 · 分赛道查看 | +| [中国大学生计算机设计大赛](/events/computer-design) | 综合计算机 | 中国大学生计算机设计大赛:大赛简介 | 2026 第十九届 · 当届分类查官网 | +| [“中国软件杯”大学生软件设计大赛](/events/software-cup) | 软件开发 | 第十五届赛事通知(西南交通大学公开转载) | 名称有依据;当前规则待复核 | +| [CCF大数据与计算智能大赛](/events/bdci) | 人工智能与数据 | CCF 数据库专委会:2025 BDCI 总结 | 已核验 2025 总结 · 新届通知另查 | +| [全国大学生数学建模竞赛](/events/cumcm) | 数学建模 | 2026 高教社杯全国大学生数学建模竞赛通知 | 2026 通知已发布 · 完整赛程见官网 | +| [中国机器人及人工智能大赛](/events/craic) | 机器人与硬件 | 中国机器人及人工智能大赛官网 | 2026 第二十八届 · 分赛项查看 | +| [RoboMaster机甲大师高校系列赛](/events/robomaster) | 机器人与硬件 | RoboMaster 官方赛事导航 | 名称与常设入口;各届规则另查 | +| [中国高校计算机大赛—人工智能创意赛](/events/c4-ai) | 人工智能与数据 | 2026 中国高校计算机大赛人工智能创意赛官方页面 | 2026 官方入口 · 分项安排查页面 | +| [全国大学生计算机系统能力大赛—操作系统设计赛](/events/os-design) | 系统开发 | 全国大学生计算机系统能力大赛官方入口 | 2026 赛事入口 · 赛道时间分别查看 | +| [GitLink“确实开源”编程夏令营](/events/glcc) | 开源实践 | CCF:2025 GitLink“确实开源”编程夏令营 | 已核验 2025 通知 · 新届招募另查 | +| [LFX Mentorship](/events/lfx) | 开源实践 | LFX Mentorship 项目平台 | 按项目与批次开放 | +| [Outreachy](/events/outreachy) | 开源实践 | Outreachy 官方活动与资格入口 | 按轮次申请 · 需先核对资格 | +| [开源操作系统训练营](/events/oscamp) | 系统开发 | LearningOS 开源学习社区 | 集中授课已结束 · 回放学习见官网 | +| [“挑战杯”全国大学生课外学术科技作品竞赛](/events/challenge-science) | 创新创业 | 挑战杯官网赛事介绍 | 与创业计划竞赛分届举办 | +| [“挑战杯”中国大学生创业计划竞赛](/events/challenge-business) | 创新创业 | 挑战杯官方历史站与 2026 通知入口 | 2026 第十五届 · 校内推荐另查 | +| [CCF大学生区块链安全技术与创新应用竞赛](/events/blockchain) | 网络安全 | 2026 年第五届竞赛章程 | 2026 报名至 10 月 20 日 · 时刻见官网 | +| [全国大学生电子设计竞赛](/events/electronic) | 机器人与硬件 | 全国大学生电子设计竞赛组委会官网 | 2026 专题赛 · 分项查看 | +| [中国国际大学生创新大赛](/events/innovation) | 创新创业 | 教育部关于举办中国国际大学生创新大赛(2026)的通知 | 2026 全国报名至 9 月 25 日 12:00 | +| [“计图”人工智能算法挑战赛](/events/jittor) | 人工智能与数据 | 计图官方第五届赛事介绍(2025) | 名称有依据;当前规则待复核 | +| [点亮计划-开源之夏](/events/ospp) | 开源实践 | 点亮计划-开源之夏 2026 官方 FAQ | 2026 滚动开放 · 按项目安排 | +| [Google Summer of Code 2026](/events/gsoc-2026) | 开源实践 | Google 官方时间线 | 2026 年度,含延长项目及评估 | +| [Hacktoberfest 2026](/events/hacktoberfest-2026) | 开源实践 | Hacktoberfest 官网 | 2026 活动说明 | +| [SCSWiki 开源共建](/events/wiki-contribution) | 开源实践 | SCSWiki 仓库 | 本项目持续共建,不是对外主办的比赛 | + +## 当届变化与时间信息 + +### 开源之夏:2026 年改为滚动项目模式 + +官方 FAQ 的名称为“点亮计划-开源之夏”,本届围绕 RISC-V 基础软件生态,项目和开发阶段滚动开放,并加入学生领航模式。因此,目录改为“2026 滚动开放 · 按项目安排”,没有继续套用往年的统一暑期报名表。2026 官方 FAQ。 + +### 开源学习与比赛结束不能用同一个状态解释 + +2026 春夏季开源操作系统训练营的集中学习周期为 3 月 1 日至 6 月 21 日,但官方说明全年可报名、通过回放学习。本目录保留训练营入口,同时说明集中课程已结束,不把它显示成仍在集中授课。训练营官方页。 + +GSoC 的申请截止、编码周期和导师评估截止是不同阶段;活动尚在进行不代表仍能报名。Hacktoberfest 2026 官网介绍的活动形式也应按当届页面阅读,不能直接复用过去按 PR 数量达标的规则。GSoC 时间线、Hacktoberfest 官网。 + +### 可供近期关注的官方日期 + +- 中国国际大学生创新大赛(2026):教育部通知列出的国内报名截止为 **9 月 25 日 12:00**;学校推荐和审核可能更早。教育部通知。 +- CCF大学生区块链安全技术与创新应用竞赛:2026 章程列出的报名截止日期为 **10 月 20 日**,作品提交截止日期为 **10 月 31 日**;决赛日期是预计值,不据此生成确定倒计时。官方章程。 +- 全国高校计算机能力挑战赛:已找到 2026 年第八届大赛规程及赛项规程,须按具体赛项查看日期,不能用一项模拟赛时间代替整场比赛。大赛规程、赛项规程。 + +以上仅是截至核验日的公开信息摘要。常设目录不据这段文字永久标记“报名中”。 + +## 证据冲突、缺口与后续核验 + +| 问题 | 已知情况 | 本次处理与下一步 | +| ------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| 计图 2026 规则 | 官方检索摘要出现第六届,但正文访问受限;可追溯到第五届官方介绍 | 保留全称与常设入口,页面标记待核验;补查可公开访问的第六届公告后再填赛题与时间 | +| 中国软件杯最新日期 | 官网正文访问不稳定;高校转载、赛题平台出现不同报名日期,且含校内安排 | 使用正式全称,页面标记待核验;不选择其中一个日期冒充统一最新截止 | +| GLCC 2026 招募 | 本次找到的明确招募通知属于 2025 年 | 不把历届通知改成 2026;等待当届主办方材料 | +| BDCI 当前平台与赛程 | 学会介绍与 2025 总结可确认赛事身份,新的平台线索不足以替代完整赛规 | 保留学会入口,不写推测的 2026 日程 | +| 常设入口的未来届次 | 旧届指南能证明名称或历史形式,不能保证下一届安排 | 名称变更需保留新旧证据,届次内容单独核验 | +| 校内组织与认定 | 本次主要核实全国或项目方公开资料 | 不生成本校报名群、校内截止、加分和保研承诺 | + +软件杯的日期差异可对照高校公开转载与赛题平台。本次没有足够证据判断两处安排是否适用于完全相同的赛道,因此保留差异,而非强行合并。 + +## 面向学生的使用建议 + +下面是 SCSWiki 根据活动形式给出的选择建议,不是官方难度评级或获奖预测。 + +| 你的目标 | 可以先看的入口 | 做决定前重点确认 | +| ------------------ | -------------------------------------------- | ------------------------------------ | +| 第一次参与开源 | SCSWiki 共建、开源操作系统训练营导学 | 可投入时间、基础环境、社区贡献要求 | +| 练习算法和程序设计 | 蓝桥杯、天梯赛、ICPC、CCPC、码蹄杯、百度之星 | 个人或团队形式、语言、组别、校内选拔 | +| 做一个完整软件作品 | 计算机设计大赛、中国软件杯、CCF开源创新大赛 | 作品类别、交付标准、许可、团队分工 | +| 深入 AI 或数据建模 | BDCI、计图、人工智能创意赛、数学建模竞赛 | 数据与模型规则、算力、复现和论文要求 | +| 走安全或系统方向 | 信息安全竞赛、区块链竞赛、操作系统设计赛 | 授权环境、技术基础、赛道规则 | +| 软硬件结合 | 电赛、RoboMaster、机器人及人工智能大赛 | 实验设备、成本、联调与团队经验 | +| 推进研究或创新项目 | 挑战杯两类竞赛、中国国际大学生创新大赛 | 项目真实性、适用赛道、学校申报与推荐 | + +## 维护约定 + +更名时同时更新页面标题与依据,历史称呼放入检索别名;详情标题、目录标题和侧边栏从同一份 Front Matter 读取。补充当届时间必须给出来源,常设入口与具体年度条目不得混用状态。信息变化可通过[推荐活动与补充经验](/events/contribute)提交。 + +本次未逐条收录所有区域赛、平台常驻题库、职业认证、青少年赛事或所有线上练习赛,也没有把缺少可靠来源的宣传信息加入目录。 + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- 中国计算机学会 +- 全国大学生数学建模竞赛 +- 点亮计划-开源之夏 2026 官方 FAQ diff --git a/docs/events/robomaster.md b/docs/events/robomaster.md new file mode 100644 index 0000000..3718705 --- /dev/null +++ b/docs/events/robomaster.md @@ -0,0 +1,69 @@ +--- +title: RoboMaster机甲大师高校系列赛 +description: 从机器人对抗、联盟赛事到人工智能挑战,锻炼软硬件团队协作能力。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - RoboMaster + - 机甲大师 + - RM + - 机甲大师超级对抗赛 + topic: 机器人与硬件 + eyebrow: RoboMaster + cover: ladder + tags: + - 机器人 + - 嵌入式 + - 计算机视觉 + beginner: false + schedule: 常设入口 · 各届与赛项分别安排 + order: 24 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# RoboMaster机甲大师高校系列赛 + +从机器人对抗、联盟赛事到人工智能挑战,锻炼软硬件团队协作能力。 + + + +## 名称与收录范围 + +官网“高校系列赛”下设超级对抗赛、高校联盟赛、人工智能挑战赛等入口。RoboMaster 2026 机甲大师超级对抗赛是其中一项,本目录合并为一个系列入口,不把系列和子赛重复计数。 + +依据:RoboMaster 官方赛事导航。 + +## 准备建议 + +根据队伍设备与经验选择具体赛事。先熟悉规则和硬件要求,再安排控制、视觉、嵌入式与机械模块的联调。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- RoboMaster机甲大师高校系列赛官方入口 diff --git a/docs/events/software-cup.md b/docs/events/software-cup.md new file mode 100644 index 0000000..325835a --- /dev/null +++ b/docs/events/software-cup.md @@ -0,0 +1,67 @@ +--- +title: “中国软件杯”大学生软件设计大赛 +description: 围绕企业和行业赛题开发软件作品,练习需求分析、实现、测试与成果演示。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: official-source +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 学科竞赛 + scope: series + aliases: + - 中国软件杯 + - 软件杯 + topic: 软件开发 + eyebrow: 中国软件杯 + cover: code + tags: + - 软件工程 + - 团队作品 + beginner: false + schedule: 2026 第十五届 · 最新安排查官网 + order: 20 + checked: '2026-09-12' + reviewRequired: true +--- + + + +# “中国软件杯”大学生软件设计大赛 + +围绕企业和行业赛题开发软件作品,练习需求分析、实现、测试与成果演示。 + + + +## 名称与收录范围 + +第十五届通知使用“‘中国软件杯’大学生软件设计大赛”。本次检索官网正文访问不稳定,名称与赛事方向交叉参考高校公开转载;其中的校内安排仅适用于发布学校,不适用于西华师范大学。 + +依据:第十五届赛事通知(西南交通大学公开转载)。 + +## 准备建议 + +按所选赛题要求搭建最小可演示版本,再完善测试、文档与演示材料。A、B 组及专项赛道适用对象须核对当届规则。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- “中国软件杯”大学生软件设计大赛官方入口 +- 第十五届赛事通知(西南交通大学公开转载) diff --git a/docs/events/wiki-contribution.md b/docs/events/wiki-contribution.md new file mode 100644 index 0000000..bb0704c --- /dev/null +++ b/docs/events/wiki-contribution.md @@ -0,0 +1,70 @@ +--- +title: SCSWiki 开源共建 +description: 从修正文档、补充公开来源开始,让你的第一份贡献帮助下一位同学。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: verified +status: needs-review +maintainers: + - SCSWiki 维护组 +sources: [] +event: + kind: 社区共建 + eyebrow: 'Hello, contributor.' + cover: wiki + tags: + - 文档贡献 + - Git + - 校园共建 + beginner: true + schedule: 长期开放 · 按自己的节奏参与 + ongoing: true + order: 1 + checked: '2026-09-12' + aliases: + - SCSWiki + - Wiki共建 + topic: 开源实践 + scope: edition + reviewRequired: true +--- + + + +# SCSWiki 开源共建 + +从修正文档、补充公开来源开始,让你的第一份贡献帮助下一位同学。 + + + +## 这是什么 + +SCSWiki 是学生维护的非官方知识库。仓库接受内容纠错、来源补充和工程改进;这里提供的是长期贡献入口,不是已经启动的限时比赛。 + +## 适合谁 + +希望尝试开源协作的同学。不要求先会编程:能描述一个问题、核实一个公开来源,就可以开始。 + +## 如何参与 + +1. 在本站找到一个可以改进的页面,例如过期链接、遗漏的说明或不清楚的步骤。 +2. 查阅公开来源,记录页面地址、问题和建议。避免加入个人隐私与未经授权的材料。 +3. 通过仓库 Issue 提交建议,或按照[如何贡献](/about/contribute)创建 Pull Request。 +4. 根据维护者反馈完善内容,合并后检查页面效果。 + +## 出发前的准备 + +- [Git 入门](/development/git-basics):了解版本管理和基础协作。 +- [可信度与内容边界](/about/trust):区分学校正式信息与学生经验。 + +## 时间与成果 + +没有统一报名截止时间,也不设自动发放的证书或奖项。实际任务与合并情况以仓库记录为准。首次贡献建议选择范围清晰的小改动。 + +## 参考资料名称 + +本页暂未提供可访问的来源地址,以下名称仅供检索核对;活动资格、规则和日期仍需向主办方确认。 + +- SCSWiki 项目与贡献指南 diff --git a/scripts/tests/events.test.ts b/scripts/tests/events.test.ts new file mode 100644 index 0000000..54f99df --- /dev/null +++ b/scripts/tests/events.test.ts @@ -0,0 +1,137 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import matter from 'gray-matter'; +import { describe, expect, it } from 'vitest'; +import { eventSchema } from '../../docs/.vitepress/event-schema'; +import { eventStatus, filterEvents, type EventItem } from '../../docs/.vitepress/events'; +import { eventSidebar } from '../../docs/.vitepress/event-sidebar'; + +const fixture: EventItem = { + title: 'Open Source 实践', + description: '与社区协作', + url: '/events/test', + kind: '开源活动', + eyebrow: 'CODE', + cover: 'code', + tags: ['Git', 'TypeScript'], + beginner: true, + schedule: '测试时间', + checked: '2026-09-12', + order: 1, + registrationOpen: '2026-09-01T00:00:00+08:00', + registrationClose: '2026-09-10T00:00:00+08:00', + start: '2026-09-15T00:00:00+08:00', + end: '2026-09-20T00:00:00+08:00', +}; +const at = (date: string) => Date.parse(`${date}T00:00:00+08:00`); +const filters = { query: '', kind: '', status: '', beginner: false, archive: false }; + +describe('活动状态与筛选', () => { + it('待核验活动不会因历史时间而显示报名中或进行中', () => { + const pending = { ...fixture, reviewRequired: true }; + for (const date of ['2026-09-01', '2026-09-15', '2026-09-20']) { + expect(eventStatus(pending, at(date))).toBe('待核验'); + expect(filterEvents([pending], { ...filters, status: '报名中' }, at(date))).toHaveLength(0); + expect(filterEvents([pending], { ...filters, status: '待核验' }, at(date))).toHaveLength(1); + } + }); + it('常设入口不推测当前报名状态,且不可混入具体届次时间', () => { + const series = { + ...fixture, + scope: 'series' as const, + registrationOpen: undefined, + registrationClose: undefined, + start: undefined, + end: undefined, + }; + expect(eventStatus(series, at('2026-09-12'))).toBe('查看当届通知'); + expect(filterEvents([series], { ...filters, archive: true }, at('2030-09-12'))).toHaveLength(0); + expect(eventSchema.safeParse(series).success).toBe(true); + expect(eventSchema.safeParse({ ...series, ongoing: true }).success).toBe(false); + expect(eventSchema.safeParse({ ...series, end: fixture.end }).success).toBe(false); + }); + it('正式名称之外支持历史称呼检索,并与实践方向组合筛选', () => { + const renamed = { ...fixture, aliases: ['互联网+'], topic: '创新创业' }; + expect( + filterEvents( + [renamed], + { ...filters, query: '互联网+', topic: '创新创业' }, + at('2026-09-12'), + ), + ).toHaveLength(1); + expect( + filterEvents( + [renamed], + { ...filters, query: '互联网+', topic: '网络安全' }, + at('2026-09-12'), + ), + ).toHaveLength(0); + }); + it('在报名、开始和结束边界更新状态,不将截止后的活动显示为报名中', () => { + expect(eventStatus(fixture, at('2026-09-01'))).toBe('报名中'); + expect(eventStatus(fixture, at('2026-09-10'))).toBe('报名已截止'); + expect(eventStatus(fixture, at('2026-09-15'))).toBe('进行中'); + expect(eventStatus(fixture, at('2026-09-20'))).toBe('已结束'); + expect(eventStatus(fixture, Date.parse('2026-09-09T16:00:00Z'))).toBe('报名已截止'); + }); + it('未核验时间不猜测开放报名,长期入口和手动归档保持明确', () => { + const unknown = { + ...fixture, + registrationOpen: undefined, + registrationClose: undefined, + start: undefined, + end: undefined, + }; + expect(eventStatus(unknown, at('2026-09-12'))).toBe('时间待确认'); + expect(eventStatus({ ...unknown, ongoing: true }, at('2026-09-12'))).toBe('长期开放'); + expect(eventStatus({ ...unknown, ongoing: true, archived: true }, at('2026-09-12'))).toBe( + '已结束', + ); + }); + it('支持组合筛选、大小写和空白,并把已结束活动放入归档', () => { + expect( + filterEvents( + [fixture], + { ...filters, query: ' OPEN git ', kind: '开源活动', beginner: true }, + at('2026-09-12'), + ), + ).toHaveLength(1); + expect( + filterEvents([fixture], { ...filters, kind: '学科竞赛' }, at('2026-09-12')), + ).toHaveLength(0); + expect( + filterEvents([fixture], { ...filters, status: '报名中' }, at('2026-09-12')), + ).toHaveLength(0); + expect(filterEvents([fixture], filters, at('2026-09-20'))).toHaveLength(0); + expect(filterEvents([fixture], { ...filters, archive: true }, at('2026-09-20'))).toHaveLength( + 1, + ); + }); + it('拒绝没有截止时间的开放报名及倒序日期', () => { + expect(eventSchema.safeParse({ ...fixture, registrationClose: undefined }).success).toBe(false); + expect(eventSchema.safeParse({ ...fixture, end: fixture.start }).success).toBe(false); + }); + it('所有实际活动使用有效字段,无外部跳转时保持待核验及导航一致', () => { + const root = path.resolve('docs/events'); + const entries = fs + .readdirSync(root) + .filter((file) => file.endsWith('.md')) + .map((file) => matter.read(path.join(root, file)).data) + .filter((data) => data.event); + expect(new Set(entries.map((entry) => entry.title)).size).toBe(entries.length); + const navigation = eventSidebar().flatMap((group) => group.items ?? []); + for (const entry of entries) { + const event = eventSchema.parse(entry.event); + expect(event.aliases?.length).toBeGreaterThan(0); + expect(event.topic).toBeTruthy(); + expect(navigation.filter((item) => item.text === entry.title)).toHaveLength(1); + expect(entry.sources).toEqual([]); + expect(entry.status).toBe('needs-review'); + expect(event.reviewRequired).toBe(true); + expect(entry.event).not.toHaveProperty('official'); + } + for (const file of fs.readdirSync(root).filter((file) => file.endsWith('.md'))) { + expect(fs.readFileSync(path.join(root, file), 'utf8')).not.toMatch(/\bhttps?:\/\/|\bwww\./i); + } + }); +});