Conversation
Summary of ChangesHello @Nliver, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 本次拉取请求主要新增了一篇关于AI时代软件工程重塑的深度文章,该文章由许式伟先生撰写,详细阐述了AI技术如何改变软件开发范式。同时,对现有文档进行了重命名和结构调整,以保持内容组织的一致性,并对 Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request updates the closing ceremony speech and reorders some documents. The newly added article, 'Reshaping Software Engineering in the AI Era,' is insightful and well-structured.
My review focuses on the new Markdown file, providing suggestions to improve its formatting and maintain consistency with standard practices. The feedback includes:
- Adjusting heading levels for better document structure.
- Using standard Markdown syntax for paragraph breaks.
- Converting a plain URL into a clickable link for better usability.
- Ensuring the file ends with a newline, which is a common convention.
These minor changes will help improve the overall quality and readability of the document. Please see the specific comments for details.
|
|
||
| 在第四期1024实训营结营仪式上,实训营发起人许式伟先生以《AI 时代重塑软件工程》为题,为全体学员和在线观众带来了一场深度分享。他从软件工程的基础理论出发,深入剖析了AI技术对软件工程领域的深刻影响与重塑。以下是演讲全文: | ||
|
|
||
| # 正文: |
There was a problem hiding this comment.
It's recommended to adjust the heading level for better document structure. The main title of the article is already a level 1 heading (#). This line, 正文: (which means "Body text:"), should probably be a level 2 heading (##) to maintain a proper hierarchy. Alternatively, since it acts as an introduction, you could remove it entirely for a more compact presentation.
| # 正文: | |
| ## 正文: |
|
|
||
| 这意味着,“许式定律”中的极限理论不再只是思想实验,而成为每个团队必须面对的现实: | ||
|
|
||
| >如果你的产品需求清晰、架构拆解合理,AI能在几小时内交付过去需要数周的代码;<br/>但如果你的需求模糊、模块边界混乱,AI只会以百倍速度放大你的错误。 |
There was a problem hiding this comment.
It's better to use standard Markdown for paragraph breaks within a blockquote. Using <br/> might not render consistently across all platforms. I suggest splitting the content into two separate blockquotes for better clarity and standard compliance.
| >如果你的产品需求清晰、架构拆解合理,AI能在几小时内交付过去需要数周的代码;<br/>但如果你的需求模糊、模块边界混乱,AI只会以百倍速度放大你的错误。 | |
| >如果你的产品需求清晰、架构拆解合理,AI能在几小时内交付过去需要数周的代码; | |
| >但如果你的需求模糊、模块边界混乱,AI只会以百倍速度放大你的错误。 |
|
|
||
| 如果一个公司的软件开发过程没有因为AI而实现效率倍增,那么它必将成为落后者。效率翻倍只是底线,实际上有潜力实现更高的提升。 | ||
|
|
||
| 在 XGo 语言的开发中,我们已经全面使用 AI Coding,并且以完全公开透明的方式展示整个过程——包括如何给 AI 提任务、如何指挥 AI 工作。欢迎大家到 XGo 仓库(github.com/goplus/xgo)观摩交流。 |
There was a problem hiding this comment.
For better readability and accessibility, it's recommended to format this plain URL as a clickable Markdown link.
| 在 XGo 语言的开发中,我们已经全面使用 AI Coding,并且以完全公开透明的方式展示整个过程——包括如何给 AI 提任务、如何指挥 AI 工作。欢迎大家到 XGo 仓库(github.com/goplus/xgo)观摩交流。 | |
| 在 XGo 语言的开发中,我们已经全面使用 AI Coding,并且以完全公开透明的方式展示整个过程——包括如何给 AI 提任务、如何指挥 AI 工作。欢迎大家到 XGo 仓库([github.com/goplus/xgo](https://github.com/goplus/xgo))观摩交流。 |
|
|
||
| 软件工程正在被重塑,而我们有幸成为这场变革的见证者和参与者。与其恐惧,不如拥抱;与其被动,不如主动学习驾驭这个强大的新工具。 | ||
|
|
||
| 未来的软件工程,属于那些能够将人类智慧与机器智能完美结合的组织和个人。 No newline at end of file |
There was a problem hiding this comment.
| @@ -49,16 +49,16 @@ | |||
| ### 🎓 第 4 期训练营 | |||
There was a problem hiding this comment.
Critical: Missing entries for articles #16-22 in table of contents. The new article (#22) and 6 other existing articles are not discoverable via README. Please add:
| 16 | 关于架构设计的几点认知体会 | [📖 阅读](2025/16.%20关于架构设计的几点认知体会/content.md) |
| 17 | SPX-Algorithm:构建多模态搜索服务的一些心得 | [📖 阅读](2025/17.%20SPX-Algorithm:构建多模态搜索服务的一些心得/share.md) |
| 18 | 代码不是核心:从 XLink 项目看产品开发的决策层次 | [📖 阅读](2025/18.%20代码不是核心:从%20XLink%20项目看产品开发的决策层次/content.md) |
| 19 | llpyg: LLGo 快速集成 Python 生态的桥梁 | [📖 阅读](2025/19.%20llpyg:%20LLGo%20快速集成%20Python%20生态的桥梁/content.md) |
| 20 | X绘图-我们是如何让AI更好的融入我们的产品的 | [📖 阅读](2025/20.X绘图-我们是如何让AI更好的融入我们的产品的/实训感悟.md) |
| 21 | 实训营分享:LLGo 中 Python 编译与运行时集成 | [📖 阅读](2025/21.%20实训营分享:LLGo%20中%20Python%20编译与运行时集成/content.md) |
| 22 | 许式伟:AI时代重塑软件工程 | [📖 阅读](2025/22.许式伟:AI时代重塑软件工程/reinventing_software_engineering_in_the_AI_Era.md) ||
|
||
| 在第四期1024实训营结营仪式上,实训营发起人许式伟先生以《AI 时代重塑软件工程》为题,为全体学员和在线观众带来了一场深度分享。他从软件工程的基础理论出发,深入剖析了AI技术对软件工程领域的深刻影响与重塑。以下是演讲全文: | ||
|
|
||
| # 正文: |
There was a problem hiding this comment.
Critical: Double H1 heading violates markdown structure. Either remove "# 正文:" or change to ## 正文:. Recommend removing entirely as it adds no semantic value.
|
|
||
| 软件工程正在被重塑,而我们有幸成为这场变革的见证者和参与者。与其恐惧,不如拥抱;与其被动,不如主动学习驾驭这个强大的新工具。 | ||
|
|
||
| 未来的软件工程,属于那些能够将人类智慧与机器智能完美结合的组织和个人。 No newline at end of file |
There was a problem hiding this comment.
Critical: Missing newline at end of file (violates POSIX and repository's own article #6 standard "一行之差:为什么你的文件末尾应该留一个空行?"). Please add trailing newline.
|
|
||
| 如果一个公司的软件开发过程没有因为AI而实现效率倍增,那么它必将成为落后者。效率翻倍只是底线,实际上有潜力实现更高的提升。 | ||
|
|
||
| 在 XGo 语言的开发中,我们已经全面使用 AI Coding,并且以完全公开透明的方式展示整个过程——包括如何给 AI 提任务、如何指挥 AI 工作。欢迎大家到 XGo 仓库(github.com/goplus/xgo)观摩交流。 |
There was a problem hiding this comment.
Consider converting to proper markdown link for better UX:
欢迎大家到 [XGo 仓库](https://github.com/goplus/xgo) 观摩交流。| 架构设计之所以比产品设计更难,是因为它极度“逆直觉”。当我看到团队 Leader 简单地按照页面分配任务(页面A交给张三,页面B交给李四......)时,就知道这样的架构设计通常是错误的。**真正好的架构设计是在做“乘法”**,它要求每个模块都应被当作一个“子业务”来设计——**有独立需求边界、高复用性、低耦合。就像搭乐高,积木种类越少、拼装步骤越简、外部依赖越成熟,系统就越健壮**。 | ||
|
|
||
|
|
||
| ## AI时代:“人月神话” 的终结 |
There was a problem hiding this comment.
Inconsistent spacing: two blank lines before heading. Use single blank line for consistency.
|
|
||
| 这意味着,“许式定律”中的极限理论不再只是思想实验,而成为每个团队必须面对的现实: | ||
|
|
||
| >如果你的产品需求清晰、架构拆解合理,AI能在几小时内交付过去需要数周的代码;<br/>但如果你的需求模糊、模块边界混乱,AI只会以百倍速度放大你的错误。 |
There was a problem hiding this comment.
Consider using markdown line breaks instead of HTML <br/> for better portability:
> 如果你的产品需求清晰、架构拆解合理,AI能在几小时内交付过去需要数周的代码;
>
> 但如果你的需求模糊、模块边界混乱,AI只会以百倍速度放大你的错误。* feat: Add public-facing website with Docusaurus Implements #51 - Build a public-facing site for 1024 TechCamp **Features implemented:** - Landing page with TechCamp branding and introduction - Blog system with Markdown support - Tagging system for blog posts (AI, Go, compiler, engineering, architecture) - RSS feed support - SEO-friendly URLs - Mobile-first, responsive design - Documentation pages (intro, contributing, proposals) **Tech stack:** - Docusaurus (React-based static site generator) - TypeScript - GitHub Pages for hosting **Structure:** - `/website` - Docusaurus site - `/blog` - Blog posts - `/docs` - Documentation pages - `/src` - React components and custom pages - `/static` - Static assets **Note:** GitHub Pages deployment workflow needs to be added separately by a maintainer with workflow permissions. See website/README.md for deployment instructions. Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> * refactor: implement code review suggestions - Remove demo blog posts and template content - Clean up authors.yml (keep only techcamp team) - Remove tutorial directories (tutorial-basics, tutorial-extras) - Fix docusaurus.config.ts: add onBrokenMarkdownLinks, set blogSidebarCount to 10 - Fix React components: use stable keys, add aria-label for accessibility - Remove inline styles, use CSS modules with gap property - Clarify contributing.md documentation for blog vs technical articles Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> --------- Co-authored-by: xgopilot <[email protected]> Co-authored-by: Nliver <[email protected]>
There was a problem hiding this comment.
Pull Request Overview
This PR adds a Docusaurus-based website for the 1024 TechCamp project. The website includes documentation, a blog section, and various static assets to provide information about the training camp, allow content contributions, and enable community engagement.
Key Changes
- Added complete Docusaurus website infrastructure with TypeScript configuration
- Created documentation pages (intro, contributing, proposals) and initial blog post
- Configured multi-language support (Chinese) and GitHub Pages deployment
- Added website-specific files to .gitignore
Reviewed Changes
Copilot reviewed 20 out of 39 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| website/docusaurus.config.ts | Main Docusaurus configuration with site metadata, navigation, and deployment settings |
| website/package.json | Dependencies for Docusaurus 3.9.2, React 19, and development tooling |
| website/tsconfig.json | TypeScript configuration extending Docusaurus defaults |
| website/src/pages/index.tsx | Homepage component with hero banner and feature sections |
| website/src/components/HomepageFeatures/index.tsx | Features showcase component with SVG illustrations |
| website/docs/*.md | Documentation pages for intro, contributing, and proposals |
| website/blog/2025-01-01-welcome.md | Welcome blog post announcing the website |
| website/static/img/* | Logo, favicon, and illustration SVG/image assets |
| .gitignore | Updated to exclude website build artifacts |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| "react": "^19.0.0", | ||
| "react-dom": "^19.0.0" |
There was a problem hiding this comment.
Using React 19 with Docusaurus 3.9.2 may cause compatibility issues. Docusaurus 3.x typically requires React 18.x. Verify that Docusaurus 3.9.2 officially supports React 19, or consider downgrading to React ^18.0.0 to ensure compatibility.
| "react": "^19.0.0", | |
| "react-dom": "^19.0.0" | |
| "react": "^18.0.0", | |
| "react-dom": "^18.0.0" |
… hub (#62) * update(docs):Fix document outline and update article expressions (#59) * update(docs):Fix document outline and update article expressions * Update 2025/21. LLGo 中 Python 编译与运行时集成/content.md Signed-off-by: Nliver <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * chore: update the readme (#60) * feat: Add public-facing website with blog and resource hub - Built with Astro for fast, content-focused static site generation - Responsive, mobile-first design with dark mode support - Blog system with Markdown/MDX support - Tag-based categorization and filtering - RSS feed for blog posts - SEO-friendly URLs - Clean, minimal design inspired by modern dev sites Resolves #51 Generated with codeagent (https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> --------- Signed-off-by: Nliver <[email protected]> Co-authored-by: Nliver <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: xgopilot <[email protected]>
* update(docs):Fix document outline and update article expressions (#59) * update(docs):Fix document outline and update article expressions * Update 2025/21. LLGo 中 Python 编译与运行时集成/content.md Signed-off-by: Nliver <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * chore: update the readme (#60) * feat: Add public-facing website with blog and resource hub - Built with Astro for fast, content-focused static site generation - Responsive, mobile-first design with dark mode support - Blog system with Markdown/MDX support - Tag-based categorization and filtering - RSS feed for blog posts - SEO-friendly URLs - Clean, minimal design inspired by modern dev sites Resolves #51 Generated with codeagent (https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> * feat: Configure blog branch for direct GitHub Pages deployment - Built Docusaurus static site and moved files to root directory - Added .nojekyll file to prevent Jekyll processing - Site can now be deployed by selecting blog branch (root /) in Pages settings - Includes built HTML/CSS/JS for landing page, blog, and documentation This allows GitHub Pages deployment without GitHub Actions by simply configuring Settings > Pages to use the blog branch and root directory. Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> --------- Signed-off-by: Nliver <[email protected]> Co-authored-by: Nliver <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: xgopilot <[email protected]>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 87 out of 116 changed files in this pull request and generated 10 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
website/src/pages/rss.xml.js
Outdated
| import rss from '@astrojs/rss'; | ||
| import { getCollection } from 'astro:content'; | ||
|
|
||
| export async function GET(context) { | ||
| const posts = await getCollection('blog'); | ||
| return rss({ | ||
| title: '1024 TechCamp Blog', | ||
| description: '1024 实训营技术博客 - 工程实践、架构设计、AI 开发等深度技术分享', | ||
| site: context.site, | ||
| items: posts.map((post) => ({ | ||
| title: post.data.title, | ||
| pubDate: post.data.pubDate, | ||
| description: post.data.description, | ||
| link: `/blog/${post.slug}/`, | ||
| })), | ||
| customData: `<language>zh-CN</language>`, | ||
| }); | ||
| } |
There was a problem hiding this comment.
This file uses Astro server endpoint conventions (export async function GET, @astrojs/rss, astro:content). In a Docusaurus site, src/pages/*.js is expected to export a React component/MDX, so this will break the pages plugin build/bundle. Consider generating the RSS feed via Docusaurus blog feedOptions (already configured) and remove this file, or migrate the site to Astro fully.
website/src/content/config.ts
Outdated
| import { defineCollection, z } from 'astro:content'; | ||
|
|
||
| const blog = defineCollection({ | ||
| type: 'content', | ||
| schema: z.object({ | ||
| title: z.string(), | ||
| description: z.string(), | ||
| pubDate: z.coerce.date(), | ||
| author: z.string().optional(), | ||
| tags: z.array(z.string()).optional(), | ||
| }), | ||
| }); | ||
|
|
||
| export const collections = { blog }; |
There was a problem hiding this comment.
This file imports astro:content, which is not available in the current website/package.json (Docusaurus-only). It will also cause tsc to fail module resolution during npm run typecheck. Remove/move this Astro content config unless the site is switching to Astro and the missing dependencies/types are added.
website/astro.config.mjs
Outdated
| import { defineConfig } from 'astro/config'; | ||
| import mdx from '@astrojs/mdx'; | ||
|
|
||
| // https://astro.build/config | ||
| export default defineConfig({ | ||
| site: 'https://qiniu.github.io', | ||
| base: '/techcamp', | ||
| integrations: [mdx()], | ||
| markdown: { | ||
| shikiConfig: { | ||
| theme: 'github-dark', | ||
| wrap: true | ||
| } | ||
| } | ||
| }); |
There was a problem hiding this comment.
This Astro configuration requires astro/@astrojs/mdx, but the website/ project is currently configured and scripted as Docusaurus-only. Keeping both configs is likely to confuse contributors and can lead to broken builds. Either remove astro.config.mjs or add the missing dependencies and update scripts/docs to indicate Astro is the intended build pipeline.
website/src/layouts/BaseLayout.astro
Outdated
| <div class="nav-links"> | ||
| <a href="/techcamp/">首页</a> | ||
| <a href="/techcamp/blog">博客</a> | ||
| <a href="https://github.com/qiniu/techcamp" target="_blank">GitHub</a> |
There was a problem hiding this comment.
Links opened with target="_blank" should include rel="noopener noreferrer" to prevent tabnabbing and avoid exposing window.opener.
| "docusaurus": "docusaurus", | ||
| "start": "docusaurus start", | ||
| "build": "docusaurus build", | ||
| "swizzle": "docusaurus swizzle", | ||
| "deploy": "docusaurus deploy", | ||
| "clear": "docusaurus clear", | ||
| "serve": "docusaurus serve", | ||
| "write-translations": "docusaurus write-translations", | ||
| "write-heading-ids": "docusaurus write-heading-ids", | ||
| "typecheck": "tsc" | ||
| }, | ||
| "dependencies": { | ||
| "@docusaurus/core": "3.9.2", | ||
| "@docusaurus/preset-classic": "3.9.2", | ||
| "@mdx-js/react": "^3.0.0", | ||
| "clsx": "^2.0.0", | ||
| "prism-react-renderer": "^2.3.0", | ||
| "react": "^19.0.0", | ||
| "react-dom": "^19.0.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@docusaurus/module-type-aliases": "3.9.2", | ||
| "@docusaurus/tsconfig": "3.9.2", | ||
| "@docusaurus/types": "3.9.2", | ||
| "typescript": "~5.6.2" | ||
| }, |
There was a problem hiding this comment.
package.json defines only Docusaurus scripts/dependencies, but this PR also adds Astro-specific config/code (e.g., website/astro.config.mjs, website/src/pages/rss.xml.js, website/src/content/config.ts) requiring astro, @astrojs/*, and astro:content. As-is, npm install + npm run typecheck/build will fail due to missing modules. Either remove the Astro files or add the required Astro dependencies/scripts and clearly choose the build system for website/.
| // This file is not used in compilation. It is here just for a nice editor experience. | ||
| "extends": "@docusaurus/tsconfig", |
There was a problem hiding this comment.
The comment says this tsconfig.json is “not used in compilation”, but website/package.json runs tsc for typecheck, which will use this file by default. This is misleading and may hide real typecheck failures (especially with the Astro files added). Update the comment and/or point the typecheck script at a dedicated config if you intend an editor-only tsconfig.
| const config: Config = { | ||
| title: '1024 TechCamp', | ||
| tagline: '携手成长,成就优秀工程师', | ||
| favicon: 'img/favicon.ico', |
There was a problem hiding this comment.
The PR title/description says it updates an article (“Reshaping Software Engineering in the AI Era”), but the diff introduces a full website setup plus generated build artifacts and many unrelated content/docs changes. Please clarify the PR scope or split this into smaller PRs so review and rollback risk is manageable.
website/src/pages/index.astro
Outdated
| <a href="/techcamp/blog" class="btn btn-primary">浏览博客</a> | ||
| <a href="https://github.com/qiniu/techcamp" target="_blank" class="btn btn-secondary">GitHub 仓库</a> | ||
| </div> |
There was a problem hiding this comment.
This external link uses target="_blank" without rel="noopener noreferrer", which is a tabnabbing risk.
website/src/pages/index.astro
Outdated
| <a href="https://github.com/qiniu/techcamp/tree/main/4th" target="_blank" class="category-card"> | ||
| <h3>🎓 训练营课题</h3> |
There was a problem hiding this comment.
This external link uses target="_blank" without rel="noopener noreferrer", which is a tabnabbing risk.
website/src/pages/index.astro
Outdated
| <a href="https://github.com/qiniu/techcamp" target="_blank" class="category-card"> | ||
| <h3>📚 学习资料</h3> |
There was a problem hiding this comment.
This external link uses target="_blank" without rel="noopener noreferrer", which is a tabnabbing risk.
* update(docs):Fix document outline and update article expressions (#59) * update(docs):Fix document outline and update article expressions * Update 2025/21. LLGo 中 Python 编译与运行时集成/content.md Signed-off-by: Nliver <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * chore: update the readme (#60) * feat: Add public-facing website with blog and resource hub - Built with Astro for fast, content-focused static site generation - Responsive, mobile-first design with dark mode support - Blog system with Markdown/MDX support - Tag-based categorization and filtering - RSS feed for blog posts - SEO-friendly URLs - Clean, minimal design inspired by modern dev sites Resolves #51 Generated with codeagent (https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> * feat: Configure blog branch for direct GitHub Pages deployment - Built Docusaurus static site and moved files to root directory - Added .nojekyll file to prevent Jekyll processing - Site can now be deployed by selecting blog branch (root /) in Pages settings - Includes built HTML/CSS/JS for landing page, blog, and documentation This allows GitHub Pages deployment without GitHub Actions by simply configuring Settings > Pages to use the blog branch and root directory. Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> * feat: Migrate 2025 articles to Docusaurus blog system - Migrated 21 technical articles from 2025/ directory to website/blog/ - Added proper Docusaurus frontmatter with slug, title, authors, tags, date, description - Configured 9 tags: ai, go, compiler, engineering, architecture, xgo, llgo, python, career - Copied 15 images to website/static/img/blog/ directory - Updated all image references to use correct paths - Fixed YAML frontmatter issues and MDX compatibility - All articles now build successfully Articles cover topics: - AI and engineering (19 articles) - Architecture design (19 articles) - Career development (14 articles) - Go and compiler technology (11 articles) - XGo/LLGo compilers (11 articles) Date range: 2025-01-15 to 2025-02-24 Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> --------- Signed-off-by: Nliver <[email protected]> Co-authored-by: Nliver <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: xgopilot <[email protected]>
* update(docs):Fix document outline and update article expressions (#59) * update(docs):Fix document outline and update article expressions * Update 2025/21. LLGo 中 Python 编译与运行时集成/content.md Signed-off-by: Nliver <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * chore: update the readme (#60) * feat: Add public-facing website with blog and resource hub - Built with Astro for fast, content-focused static site generation - Responsive, mobile-first design with dark mode support - Blog system with Markdown/MDX support - Tag-based categorization and filtering - RSS feed for blog posts - SEO-friendly URLs - Clean, minimal design inspired by modern dev sites Resolves #51 Generated with codeagent (https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> * feat: Configure blog branch for direct GitHub Pages deployment - Built Docusaurus static site and moved files to root directory - Added .nojekyll file to prevent Jekyll processing - Site can now be deployed by selecting blog branch (root /) in Pages settings - Includes built HTML/CSS/JS for landing page, blog, and documentation This allows GitHub Pages deployment without GitHub Actions by simply configuring Settings > Pages to use the blog branch and root directory. Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> * feat: Migrate 2025 articles to Docusaurus blog system - Migrated 21 technical articles from 2025/ directory to website/blog/ - Added proper Docusaurus frontmatter with slug, title, authors, tags, date, description - Configured 9 tags: ai, go, compiler, engineering, architecture, xgo, llgo, python, career - Copied 15 images to website/static/img/blog/ directory - Updated all image references to use correct paths - Fixed YAML frontmatter issues and MDX compatibility - All articles now build successfully Articles cover topics: - AI and engineering (19 articles) - Architecture design (19 articles) - Career development (14 articles) - Go and compiler technology (11 articles) - XGo/LLGo compilers (11 articles) Date range: 2025-01-15 to 2025-02-24 Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]> * feat: Re-migrate blog articles with English slugs and configure edit URLs - Translate all 21 article filenames from Chinese to English slugs - Update frontmatter slugs to follow /blog/2025/english-slug format - Configure editUrl to point to blog branch for direct editing - Add translation script for automated slug conversion - Verify build succeeds with new slug structure Generated with codeagent Co-authored-by: Nliver <[email protected]> --------- Signed-off-by: Nliver <[email protected]> Co-authored-by: Nliver <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: xgopilot <[email protected]>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 115 out of 176 changed files in this pull request and generated 15 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
website/src/pages/rss.xml.js
Outdated
| import rss from '@astrojs/rss'; | ||
| import { getCollection } from 'astro:content'; |
There was a problem hiding this comment.
This page uses Astro-specific APIs (@astrojs/rss, astro:content) but the project is configured as a Docusaurus site (and website/package.json doesn’t include Astro deps). If this file is picked up by Docusaurus pages routing, it will fail to compile. Either rewrite RSS generation using Docusaurus’ built-in blog feed support / a Docusaurus-compatible implementation, or move this file out of website/src/pages (and remove the Astro imports) if it’s not meant to be built by Docusaurus.
fix_frontmatter.py
Outdated
| value = value.strip('"').strip("'") | ||
| # Replace Chinese quotes with regular text or escape them | ||
| value = value.replace('"', '').replace('"', '') | ||
| value = value.replace(''', '').replace(''', '') | ||
| # Truncate long descriptions |
There was a problem hiding this comment.
This script currently has invalid Python syntax on the value.replace(''', ...) lines, which will prevent it from running. Use properly-quoted strings (e.g., replace straight single quotes via "'") or handle quote normalization with a safer approach (like translating Unicode quote characters) before re-serializing YAML.
| @@ -0,0 +1 @@ | |||
| (()=>{"use strict";var e,a,t,r,o,c={},n={};function f(e){var a=n[e];if(void 0!==a)return a.exports;var t=n[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,f),t.loaded=!0,t.exports}f.m=c,f.c=n,e=[],f.O=(a,t,r,o)=>{if(!t){var c=1/0;for(d=0;d<e.length;d++){for(var[t,r,o]=e[d],n=!0,b=0;b<t.length;b++)(!1&o||c>=o)&&Object.keys(f.O).every(e=>f.O[e](t[b]))?t.splice(b--,1):(n=!1,o<c&&(c=o));if(n){e.splice(d--,1);var i=r();void 0!==i&&(a=i)}}return a}o=o||0;for(var d=e.length;d>0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[t,r,o]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var c={};a=a||[null,t({}),t([]),t(t)];for(var n=2&r&&e;("object"==typeof n||"function"==typeof n)&&!~a.indexOf(n);n=t(n))Object.getOwnPropertyNames(n).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,f.d(o,c),o},f.d=(e,a)=>{for(var t in a)f.o(a,t)&&!f.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((a,t)=>(f.f[t](e,a),a),[])),f.u=e=>"assets/js/"+({6:"56162685",31:"019c0c06",48:"a94703ab",61:"1f391b9e",65:"6bf23e06",98:"a7bd4aaa",134:"393be207",173:"58ffb59a",209:"01a85c17",212:"621db11d",235:"a7456010",249:"ccc49370",260:"73c4bc96",308:"1d55f0a7",343:"0e5e3125",375:"3f11435e",401:"17896441",410:"9184c370",459:"4d54d076",472:"814f3328",583:"1df93b7f",643:"a6aa9e1f",647:"5e95c892",711:"9e4087bc",742:"aba21aa0",813:"6875c492",858:"36994c47",903:"acecf23e",976:"0e384e19"}[e]||e)+"."+{6:"c9400a4e",31:"32ba87d6",48:"c67b1bec",61:"4a62a5d2",65:"b560b789",98:"c16b59cf",134:"5b8acf55",159:"0f31272e",173:"893e8d8c",209:"d1c02b46",212:"aa2ed407",235:"0073e292",237:"99b167a9",249:"b3874173",260:"3dceff6f",308:"548fd4da",343:"dd101bd2",375:"c72c298d",401:"9e2c74b6",410:"d42e3f83",459:"1daa96e2",472:"78769193",583:"4f432530",643:"b2e0db8a",647:"b67cad83",711:"fe67bdb5",742:"f990d6fb",785:"55cecb07",813:"46d50236",858:"21894843",903:"d8580b40",976:"2d5ff814"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},o="website:",f.l=(e,a,t,c)=>{if(r[e])r[e].push(a);else{var n,b;if(void 0!==t)for(var i=document.getElementsByTagName("script"),d=0;d<i.length;d++){var l=i[d];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==o+t){n=l;break}}n||(b=!0,(n=document.createElement("script")).charset="utf-8",f.nc&&n.setAttribute("nonce",f.nc),n.setAttribute("data-webpack",o+t),n.src=e),r[e]=[a];var u=(a,t)=>{n.onerror=n.onload=null,clearTimeout(s);var o=r[e];if(delete r[e],n.parentNode&&n.parentNode.removeChild(n),o&&o.forEach(e=>e(t)),a)return a(t)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=u.bind(null,n.onerror),n.onload=u.bind(null,n.onload),b&&document.head.appendChild(n)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/techcamp/",f.gca=function(e){return e={17896441:"401",56162685:"6","019c0c06":"31",a94703ab:"48","1f391b9e":"61","6bf23e06":"65",a7bd4aaa:"98","393be207":"134","58ffb59a":"173","01a85c17":"209","621db11d":"212",a7456010:"235",ccc49370:"249","73c4bc96":"260","1d55f0a7":"308","0e5e3125":"343","3f11435e":"375","9184c370":"410","4d54d076":"459","814f3328":"472","1df93b7f":"583",a6aa9e1f:"643","5e95c892":"647","9e4087bc":"711",aba21aa0:"742","6875c492":"813","36994c47":"858",acecf23e:"903","0e384e19":"976"}[e]||e,f.p+f.u(e)},(()=>{var e={354:0,869:0};f.f.j=(a,t)=>{var r=f.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(354|869)$/.test(a))e[a]=0;else{var o=new Promise((t,o)=>r=e[a]=[t,o]);t.push(r[2]=o);var c=f.p+f.u(a),n=new Error;f.l(c,t=>{if(f.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var o=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;n.message="Loading chunk "+a+" failed.\n("+o+": "+c+")",n.name="ChunkLoadError",n.type=o,n.request=c,r[1](n)}},"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,t)=>{var r,o,[c,n,b]=t,i=0;if(c.some(a=>0!==e[a])){for(r in n)f.o(n,r)&&(f.m[r]=n[r]);if(b)var d=b(f)}for(a&&a(t);i<c.length;i++)o=c[i],f.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return f.O(d)},t=globalThis.webpackChunkwebsite=globalThis.webpackChunkwebsite||[];t.forEach(a.bind(null,0)),t.push=a.bind(null,t.push.bind(t))})()})(); No newline at end of file | |||
There was a problem hiding this comment.
This appears to be a generated/minified Webpack bundle from a site build. Checking built artifacts into the main repo will greatly increase repo size and create noisy diffs/merge conflicts. Prefer generating these in CI and publishing via GitHub Pages (or keep them on a dedicated gh-pages branch), and add an ignore rule if these are not intended to be versioned.
| | 16 | 关于架构设计的几点认知体会 | [📖 阅读](2025/16.%20关于架构设计的几点认知体会/content.md) | | ||
| | 17 | SPX-Algorithm:构建多模态搜索服务的一些心得 | [📖 阅读](2025/17.%20SPX-Algorithm:构建多模态搜索服务的一些心得/share.md) | | ||
| | 18 | 代码不是核心:从 XLink 项目看产品开发的决策层次 | [📖 阅读](2025/18.%20代码不是核心:从%20XLink%20项目看产品开发的决策层次/content.md) | | ||
| | 19 | llpyg: LLGo 快速集成 Python 生态的桥梁 | [📖 阅读](2025/19.%20llpyg:%20LLGo%20快速集成%20Python%20生态的桥梁/content.md) | | ||
| | 20 | X绘图:我们如何让 AI 更好地融入产品 | [📖 阅读](2025/20.%20X绘图-我们是如何让AI更好的融入我们的产品的/实训感悟.md) | | ||
| | 21 | LLGo 中 Python 编译与运行时集成:从依赖识别到一键交付 | [📖 阅读](2025/21.%20LLGo%20中%20Python%20编译与运行时集成/content.md) | |
There was a problem hiding this comment.
The PR metadata/description says it updates an article, but this change set introduces a full website scaffold (Docusaurus config, pages, blog content, build artifacts, scripts, etc.). Please clarify the intended scope and consider splitting into smaller PRs (e.g., site scaffolding vs. content updates) to keep reviewability and reduce merge risk.
| 实训过程中最令我印象深刻的是导师们对工程质量的极致追求。一个 PR 经常被来回 review 三四十条 comment,比如 [https://lt;https://github.com/goplus/builder/pull/122\](https://lt;https://github.com/goplus/builder/pull/122\)gt; 和 [https://lt;https://github.com/goplus/builder/pull/96\](https://lt;https://github.com/goplus/builder/pull/96\)gt;。从前端构建过程到代码实现、从工程规范到部署落地,导师们以几乎"苛刻"的态度对待每一个技术细节。这种严谨的工程文化深深影响了我,至今在我的工作中,我仍然保持着对 PR 质量的高标准要求。 | ||
|
|
||
|  | ||
|
|
||
| 在接口设计阶段,导师们也不会简单地告诉我们“应该怎么做”,而是引导我们思考:这个接口的核心需求是什么?未来可能如何演变?当前设计是否存在潜在问题?这种启发式的教学方式培养了我的系统思维能力和前瞻性设计意识,受益匪浅。 | ||
|
|
||
| 回到 XGo 这个项目本身,XGo 是实训营的核心内容,更是一个硬核的、涉及编程语言底层技术的开源项目,它为不同技术、不同水平的同学提供了丰富的学习机会: | ||
|
|
||
| - 前端开发者可以从 XBuilder 项目入手 | ||
| - 对 AI 感兴趣的可以探索 AI 辅助编码功能 | ||
| - 底层技术爱好者可以深入研究 XGo 编译器及 LLGo 编译器等 | ||
|
|
||
| 每一层技术挑战都有实力强悍的导师耐心指导。这种阶梯式的学习路径让每个人都能找到适合自己的成长方向。 | ||
|
|
||
| 目前我正在负责 XGo 的底层编译器 LLGo 的子项目——llcppg,旨在自动生成 C/C++ 库的 LLGo Binding。通过这个项目,我不仅更深入理解了 C 编译器工作原理,也更理解了不同语言在设计其语法特性时的思考,还经常能从这一角的开源实践,窥探到整个软件工程的历史。在开发过程中也经常会得到导师们的经验上的分享、以及在架构设计方面的持续指导,这段经历成为我技术成长的重要里程碑。对于该工程的相关技术细节我专门写了一篇文章分享([https://lt;https://mp.weixin.qq.com/s/cx9F5lYKyxwvFpokicJ8Yw\](https://lt;https://mp.weixin.qq.com/s/cx9F5lYKyxwvFpokicJ8Yw\)gt;),项目代码也已开源在 GitHub([https://lt;https://github.com/goplus/llcppg\](https://lt;https://github.com/goplus/llcppg\)gt;),欢迎沟通交流。 |
There was a problem hiding this comment.
This markdown contains malformed links like https://lt;https://...\](https://lt;https://...\)gt;, which won’t render correctly and will likely confuse readers. Please replace them with standard markdown links (e.g., [text](https://...)) or plain URLs.
migrate_articles.py
Outdated
| """ | ||
| Migrate articles from 2025/ directory to website/blog/ with Docusaurus frontmatter | ||
| """ | ||
| import os |
There was a problem hiding this comment.
Import of 'os' is not used.
translate_to_english_slugs.py
Outdated
| """Translate Chinese article titles to English slugs and re-migrate articles""" | ||
| import re | ||
| from pathlib import Path | ||
| from typing import Dict |
There was a problem hiding this comment.
Import of 'Dict' is not used.
website/src/layouts/BaseLayout.astro
Outdated
| <div class="nav-links"> | ||
| <a href="/techcamp/">首页</a> | ||
| <a href="/techcamp/blog">博客</a> | ||
| <a href="https://github.com/qiniu/techcamp" target="_blank">GitHub</a> |
There was a problem hiding this comment.
The external GitHub link uses target="_blank" without rel="noopener noreferrer", which allows the opened page to access window.opener and potentially redirect the original tab (reverse tabnabbing). If that external site is compromised, an attacker could navigate your site’s tab to a phishing page under your domain. Add rel="noopener noreferrer" (or at least rel="noopener") to this and other external links opened in a new tab to prevent the new page from controlling window.opener.
website/src/pages/index.astro
Outdated
| </p> | ||
| <div class="cta-buttons"> | ||
| <a href="/techcamp/blog" class="btn btn-primary">浏览博客</a> | ||
| <a href="https://github.com/qiniu/techcamp" target="_blank" class="btn btn-secondary">GitHub 仓库</a> |
There was a problem hiding this comment.
This external CTA link to GitHub opens in a new tab via target="_blank" but does not include rel="noopener noreferrer", which enables reverse tabnabbing: the GitHub page can access window.opener and redirect your site’s tab to a phishing page. Add rel="noopener noreferrer" (or rel="noopener") to all external links opened with target="_blank" to block access to window.opener and harden against tab hijacking.
website/src/pages/index.astro
Outdated
| <a href="https://github.com/qiniu/techcamp/tree/main/4th" target="_blank" class="category-card"> | ||
| <h3>🎓 训练营课题</h3> | ||
| <p>实训课题、公开课视频、导师分享</p> | ||
| </a> | ||
| <a href="https://github.com/qiniu/techcamp" target="_blank" class="category-card"> | ||
| <h3>📚 学习资料</h3> | ||
| <p>规范文档、课程指导、学习资源</p> | ||
| </a> |
There was a problem hiding this comment.
These external GitHub links use target="_blank" without rel="noopener noreferrer", which exposes the page to reverse tabnabbing: the newly opened site can access window.opener and navigate your site’s tab to attacker-controlled content. Add rel="noopener noreferrer" (or rel="noopener") on all target="_blank" external links here so the new window cannot manipulate window.opener.
- Migrated all 24 articles from 2025/ directory to website/blog/ - Translated all slugs to English kebab-case format - Added comprehensive slug mapping in slug_mapping.json - Copied all article images to website/static/img/blog/ - Fixed MDX compilation issues: - Escaped YAML frontmatter quotes - Removed broken image references - Converted angle bracket URLs to markdown format - Escaped module tags - Removed duplicate Chinese-slug files - Removed conflicting Astro configuration files - Build verified successfully Slug examples: - 工程实践分享 → engineering-practice-doing-small-things-well - 许式伟聊AI时代 → xu-shiwei-on-engineer-development-in-ai-era - Code Review 不是什么 → code-review-what-is-not Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]>
- Remove /blog/2025/ prefix from all slugs - Update slugs to clean kebab-case format (e.g., 'what-makes-ai-application-complete') - Fix duplicate route issue for llgo-python articles - Delete 2025/ directory after successful migration to website/blog/ - Remove old migration scripts and temporary files - Verify Docusaurus build succeeds with updated slug format Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Nliver <[email protected]>
|
This PR is outdated, so closing it |
Requested by @Nliver (Issue #67)
Summary
This PR implements website improvements for GitHub Pages deployment by standardizing blog post slugs to clean kebab-case format without path prefixes, and cleaning up the repository structure.
Changes Made
Slug Standardization
/blog/2025/prefix from all blog post slugs/blog/2025/what-makes-ai-application-complete→what-makes-ai-application-completeDuplicate Route Resolution
llgo-python-compilation-and-runtime-integrationllgo-python-compilation-runtime-integration-dependency-to-deliveryDirectory Cleanup
2025/directory after successful migration towebsite/blog/comprehensive_migrate.py,copy_images.py, etc.)slug_mapping.json)Build Verification
Migration Status
website/blog/✅website/static/img/blog/✅Testing
Local build verified:
Breaking Changes
/blog/2025/slug-nameto/blog/slug-name. This improves SEO and URL structure for GitHub Pages deployment.Related to #67