QCrypt/qcrypt-website
GitHub: QCrypt/qcrypt-website
QCrypt 国际量子密码学会议官方网站源码,基于 Hugo 构建,提供多年度学术会议内容的统一管理与自动化部署。
Stars: 1 | Forks: 1
# QCrypt 2025+ 网站
[](https://app.netlify.com/sites/qcrypt-website/deploys)
由 Hugo 驱动的 QCrypt 2025 及后续版本的网站,已上线于 https://qcrypt.net。QCrypt 是一年一度的国际科学会议,展示过去一年量子密码学领域的顶级研究成果。[Hugo](https://gohugo.io/) 是一个快速的静态网站生成器。https://qcrypt.net 由 [netlify](https://www.netlify.com/) 在其 [开源计划](https://www.netlify.com/legal/open-source-policy/) 下慷慨托管 :heart:!
该项目始于 2020 年,并由 [Christian Schaffner](https://github.com/cschaffner) 至今维护。
## 历史
最初基于来自 https://github.com/GDGToulouse/devfest-theme-hugo 的 Hugo 模板
改编自 cloudnative-amsterdam 团队的分支:https://github.com/cloudnative-amsterdam/public-website
曾用于运行 https://2020.qcrypt.net, https://2021.qcrypt.net, https://2022.qcrypt.net。
自 2023 年起,theme 子模块已直接包含在此 git 仓库中。
为了筹备 2025 年版本,我们设想了一个更长期的解决方案:设立一个主页面,可以在其中添加更多年份的内容。其大致设计参考了 IACR 的旗舰网站,例如 https://eurocrypt.iacr.org/2024, https://eurocrypt.iacr.org/2025, https://crypto.iacr.org/2023/, https://asiacrypt.iacr.org/2024/,以及*在设计上独树一帜的* https://crypto.iacr.org/2024/。
## 从头开始构建此会议网站
1. 安装 [Hugo](https://gohugo.io/installation/) 和 [Dart Sass](https://gohugo.io/functions/css/sass/#dart-sass)
2. 克隆此仓库:
```
$ git clone https://github.com/QCrypt/qcrypt-website.git
```
3. 完成了。只需启动 Hugo server 即可查看实时网站!
```
$ cd qcrypt-website
$ hugo server
```
你可以使用 `--ignoreCache` 来忽略本地缓存文件,并使用 `--disableFastRender` 来禁用快速渲染模式(此模式在每次更改时不会重新构建所有文件),这对于调试非常有用。
5. 编辑位于 [/content/](/content/) 子目录中以 `.md` 结尾的 Markdown 源文件来更改网站内容。你可能还需要编辑 [/data/](/data/) 子目录中的 `.json` 和 `.yml` 文件。只要 Hugo server 正在运行,你的更改应该会立即在 http://localhost:1313/ 生效。
你可以通过在命令行中添加 `--bind ip.addr.1.1` 和 `--port 1234` 来更改此默认行为。
6. 使用合适的编辑器(如 [Visual Studio Code](https://code.visualstudio.com/))可以轻松地在所有源文件中进行搜索,并帮助你找到需要进行特定更改时所需编辑的正确文件。
7. 当你对结果满意时,将更改提交到 master 分支。然后,网站将自动部署到 https://qcrypt-website.netlify.com/ 并可通过 https://qcrypt.net 访问。如果你拥有适当的权限,可以在 [netlify](https://app.netlify.com/sites/qcrypt-website/deploys) 上查看部署日志。
## 自定义主题
相关说明在主题的 [README.md ](https://github.com/QCrypt/qcrypt-website/blob/main/themes/devfest-theme-hugo/README.md) 中有所描述。
## 高级概述
本网站采用现代 Web 技术构建:
* **Hugo**:[Hugo](https://gohugo.io/) 是一个快速的网站构建器,可将简单的文本文件转换为完整的网站。它会监视你内容中的更改,并在你工作时即时更新网站。
* **JamStack 架构**:该网站遵循一种现代方法,即所有页面都是提前创建好的。由于无需在访问者到达时生成页面,这使得网站快速、安全且可靠。了解更多关于 [JamStack](https://jamstack.org/) 的信息。
* **内容管理**:内容使用 [Markdown](https://www.markdownguide.org/) 文件编写,易于编辑和跟踪更改。多人可以通过 [GitHub](https://github.com/) 共同协作开发网站,所有更改都会被安全地存储并可以进行审查。
* **使用 CSS/SASS 进行样式设计**:网站的外观通过 [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS) 和 [SASS](https://sass-lang.com/) 样式文件控制,使得维护一致的视觉外观变得容易。每个会议年份都可以拥有自己的视觉主题,并且网站能在所有屏幕尺寸上良好显示。
* **Netlify 托管**:每当有更改提交到此仓库时,[Netlify](https://www.netlify.com/) 都会自动构建并发布网站。它通过其全球网络确保网站的安全性、快速访问和全球可用性。
这些工具组合创建了一个快速、安全且易于由会议组织者维护的网站。听起来很棒吗?查看 [此引导式讲解](https://github.com/QCrypt/qcrypt-website/tree/main/themes/devfest-theme-hugo#a-guided-walk-through-the-ingredients) 以详细了解其实际运作方式。
## 基于前几年设置下一个年份 2025
### 设计
1. 创建一个新 logo,带点绵羊元素的……参见[此处](https://qcrypt.net/2024/history/#websites--logos)寻找灵感。
2. 为主站选择一张背景图片,例如 [2024](/static/images/2024/background-2024.jpg) 或 [2023](/static/images/2023/background-2023.jpg)
3. 制作相关的 banner,例如 [2024](/static/images/2024/banner-2024.jpg) 或 [2023](/static/images/2023/banner-2023.jpg)
4. 挑选相关的主题颜色,如 `#0099cc` 或 `#ac191c`。
### 为内容创建新的子目录
1. 最简单的方法可能是复制前一年如 [/content/2024](/content/2024) 的整个 content 文件夹,并从中开始调整
2. 在 [/static/images](/static/images) 中创建 2025 子文件夹
3. 将上述图片(logo、背景图、banner)放入此文件夹
### 向主配置文件 [/hugo.toml](/hugo.toml) 添加信息
4. 在 `[params]` 中,保持当前的 currentYear 和 date 不变。仅当新的 2025 网站准备好时才更改此项。
5. 添加一个 `[params.2025]` 部分并提供所需信息
6. timeanddate_cityid 可以从 https://www.timeanddate.com/worldclock/personal.html 获取,方法是在点击“Share This Personal World Clock”后查看其链接
7. 在 `[menu]` 下,按照 2023 和 2024 的方式创建一个新的 `[[menu.2025]]` 结构。
### 调整内容文件
1. 检查 [/content/2025](/content/2025) 中的所有 .md 文件以及子目录中的 `_index.md` 文件,并调整 front matter。
2. 将 `menu:` 子条目从 `2024` 更改为 `2025`。
3. 如果你暂时想禁用该页面,请添加 `draft: true`。
4. 通常情况下,当年份作为参数传递时,你可能需要更新它。因此,在 [/content/2025](/content/2025) 下搜索所有出现 2024 的地方,并将正确的那些替换为 2025,这可能是一个很好的策略。
### 创建新的样式文件
1. 在 [/themes/devfest-theme-hugo/assets/style/] 中,复制 [theme-2024.css](/themes/devfest-theme-hugo/assets/style/theme-2024.css) 并将其重命名为 `theme-2025.css`
2. 调整最后一行,将 `root` 中的 `--primary:` 变量设置为你之前挑选的主题颜色。
### 需要协助的步骤
1. 在 https://github.com/orgs/QCrypt/teams 上,创建一个新团队 ```QCrypt 2025```
2. 添加管理员 https://github.com/orgs/QCrypt/teams/qcrypt-2025/members
3. 添加仓库 https://github.com/orgs/QCrypt/teams/qcrypt-2025/repositories
4. 在 netlify https://app.netlify.com/teams/qcrypt/members:将新管理员作为协作者添加到 qcrypt-website
5. 在 https://api.slack.com/apps/A01P06YNCCU/incoming-webhooks 上,创建一个新的 Webhook(位于页面底部)
6. 将 Webhook URL 粘贴到 netlify:https://app.netlify.com/sites/qcrypt2024/settings/deploys(用于部署成功和部署失败)
7. 将管理员添加到 Slack 频道
8. 我们可能需要新的电子邮件地址,例如 2025@qcrypt.net 和 pcchairs2025@qcrypt.net。
9. 将新管理员与去年的管理员对接
10. 是否到了更新 hugo 版本的时候?检查需要更新的内容。
### 更新年份
一旦新站点准备好被“升级”为当前年份,请进行以下更改:
1. 在 hugo.toml 中的 [params] 下,更改 currentYear 和 date
2. 在 [[server.redirects]] 中,将 forward 更改为 = "/2025/"
3. 在 https://github.com/QCrypt/qcrypt-website/blob/main/netlify.toml 中,同样调整 redirect
## 后续更新
### 征文、场地更新、注册
1. 调整 [/content/2025/](/content/2025/) 中相应的 `.md` 文件,可能需要将 "draft: false" 改回,并基于上一年的内容进行调整
2. **对网站的所有更改都应记录在类似 https://qcrypt.net/2023/ 上的“Website Updates”表格中**,以方便网站访问者
3. 主站上的行动号召按钮可以根据新闻动态进行调整。
### 已知教程、受邀演讲者、小组成员
1. 更新 https://github.com/QCrypt/qcrypt-website/tree/main/content/2025/speakers 中的 `.md` 文件
2. 从 images 子目录中删除以前的图片,上传新图片,并确保演讲者的 `photoURL` 字段指向该位置。
3. 为 `.md` 文件使用合理的名称,如 `eleni_diamanti.md`
4. 为每位演讲者在 https://github.com/QCrypt/qcrypt-website/tree/main/content/2025/sessions 中创建相应的 session,参考前几年的示例。
### 已知录用的论文和海报
1. 从 PC chair 获取从 hotcrp 导出的录用论文 JSON 文件
2. 运行 [此 Python 脚本](https://github.com/QCrypt/qcrypt-website/blob/main/static/python-scripts/sanitize_hotcrp_json.py) 清理输出,移除所有电子邮件、pc_conflicts 等。
3. 将生成的文件作为 accepted-papers-2025.json 放入 [data](https://github.com/QCrypt/qcrypt-website/tree/main/data) 中
对录用海报的列表进行类似处理。
### 创建日程表
1. 复制 https://github.com/QCrypt/qcrypt-website/blob/main/data/schedule-2024.yml 并命名为 schedule-2025.yml
2. 确保所有 session 均存在
3. 在包含报告论文的 session 中调整录用论文的 id
## 各内容板块的详细说明
请查阅 [Hugo 文档](https://gohugo.io/documentation/),ChatGPT 也是相当精通的。
Hugo 最喜欢的[内容格式](https://gohugo.io/content-management/formats/)是 Markdown,我们在整个网站中都使用它。对于[数据源](https://gohugo.io/content-management/data-sources/)和配置文件,Hugo 支持 TOML、YAML、JSON、CSV、XML。我们仅使用前三种。
每个内容文件都包含一个 [front matter](https://gohugo.io/content-management/front-matter/),用于指定内容的元数据,通常采用 YAML 格式。重要参数包括 title、year、type、draft、menu。它们会影响内容的显示方式。
最初的 Hugo 模板支持多语言(法语/英语),但我们在此期间放弃了此功能,不过,那些时期的痕迹依然存在。
### Hugo Shortcodes
### 文件名
### 头部的菜单
参见 Hugo 文档中的 [菜单](https://gohugo.io/content-management/menus/)。我们混合使用了“在配置中定义”和“在 front matter 中定义”的菜单方式。
顶部菜单的基本结构参考自 IACR 旗舰会议网站(如 https://eurocrypt.iacr.org/2024)。基本菜单结构定义在 [/hugo.toml](/hugo.toml) 的 [menu] 下。我们为每年设置了菜单层级,但这些基本条目基本上在每年都应保持一致。“Technical Program”和“Attend”项不对应实际的页面,它们被用作其他页面的父级菜单项。
菜单中的其他项在内容页面的 front matter 中定义。
### 页脚
页脚的内容在 [/data/footer.yml](/data/footer.yml) 中指定。“社交分享”选项目前已禁用,“社交关注”选项为 Twitter 和 YouTube。
页脚很少需要更改。它会自动链接到当前年份的章程、历史和行为准则。只需确保 currentYear 的内容目录中也包含以下三个文件:
* `charter.md`
* `history.md`
* `code-of-conduct.md`
从上一年复制它们并确保它们是最新的!
Netlify 开源计划要求链接到行为准则,因此请勿移除该部分!
### 主页
每年的主页面是 `/content/YEAR/_index.html`,例如 [/content/2024/_index.html](/content/2024/_index.html)。其 front matter 中包含 `type: home` 和 `layout: home`。
这是唯一一个顶部没有 banner 的页面,因为它以一个 [jumbo 元素](https://github.com/QCrypt/qcrypt-website/blob/main/themes/devfest-theme-hugo/README.md#jumbo-bloc) 开始,该元素接受背景图片、标签和 logo 作为参数。其内容日期,以及各种使用按钮链接的行动号召,而这些按钮链接又接受 label、url、icon 等参数。
接下来的元素是:
* home-info:关于 QCrypt 的一些基本信息
* home-keydates:两个最重要的表格:一个是关键日期,另一个是网站更新,参见 [2023](https://qcrypt.net/2023/) 中的示例。同样,这是受 [IACR 页面](https://eurocrypt.iacr.org/2023/) 启发。
* home-location:场地的图片、地址和坐标
* partners:赞助商列表,或征集赞助
### 团队
这是首要需要更新和展示的内容页面之一。请按照前几年的示例进行操作。
所有委员会都有自己的子文件夹,并且有一个用于存放所有肖像照片的图片文件夹。确保 photoURL front matter 条目指向正确的照片。在创建和命名新文件时,请遵循[合理的约定](#file-names)。
### 合作伙伴 / 赞助商
子目录名为 `partners`,但在网站上,我们通常称其为“赞助商 (Sponsors)”。针对不同类别设有子文件夹。Logo 应放入 `logos/` 子文件夹中,并且 `logo` front matter 条目应引用该 logo 文件。
### 演讲者 & Session
与[团队](#Team)的管理非常相似。
确保为所有演讲者创建 [session](/content/2024/sessions/)。在 session 的 front matter(例如[此示例](/content/2023/sessions/tutorial_yuen.md))中,指定一个或多个演讲者,引用演讲者 front matter(例如[此示例](/content/2023/speakers/tutorial/yuen.md))中的 `key` 条目(如 `yuen`)。
session 的 front matter 应指定 `year`、`format`(例如 `contributed`、`invited`、`industry`、`tutorial` 等)。为了正确渲染 session,`type` 必须为 `sessions`。
对于包含报告演讲的 session,一旦知晓论文 id,请进行指定。
这里有[演讲者概览](/content/2025/speakers/_index.html)(例如 [2024](https://qcrypt.net/2024/speakers/)),以及[session 概览](/content/2025/sessions/_index.html)(例如 [2024](https://qcrypt.net/2024/sessions/)),两者在准备好后都应添加到“Technical Program”菜单中。
### 日程表
一旦日程表制定完毕,像前几年一样将 session 名称和开始时间插入到 [/data/schedule-2025.yml](/data/schedule-2025.yml) 中。日程表将随后自动生成,并可以通过在 [/content/2025/schedule/_index.html](/content/2025/schedule/_index.html) 中设置 `draft: false` 将其添加到“Technical Program”子菜单中
日程表页面由几个 session 组成。每个 session 包含以下元素:
|元素|必需|描述|
|---|---|---|
|title|是|session 的标题|
|format|否|session 的格式,例如 `contributed`、`invited`、`industry`、`tutorial` 等。|
|type|是|应为 `sessions`|
|year|是|session 的年份|
|papers|否|录用论文或海报的 paper id(一个或多个)。Stuff session 可以留空|
|chair|否|该 session 的主持|
|draft|是|未发布的 session 应为 `false`,已发布的应为 `true`|
|tags|否|session 的标签,这将影响网站中 session 元素的 class|
标签:Homebrew安装, Hugo, Python安全, 学术会议, 网站源码, 逆向工具, 量子密码学, 防御加固, 静态网站