diff --git a/content/blog/Git-Speedrun-Guide-Part-1-Basics/index.zh-cn.md b/content/blog/Git-Speedrun-Guide-Part-1-Basics/index.zh-cn.md
index 7bc6c1b..e2e68f1 100644
--- a/content/blog/Git-Speedrun-Guide-Part-1-Basics/index.zh-cn.md
+++ b/content/blog/Git-Speedrun-Guide-Part-1-Basics/index.zh-cn.md
@@ -4,7 +4,7 @@ title: "Git 速通指南 | Part 1: 基础"
## 1. 安装 Git
-请参考文章: [安装 Git](Install-Git_zh.md) .
+参考文章: [安装 Git](https://shusct.github.io/wiki/blog/install-git/) .
> 📌 **注意**
> 如果你是 Windows 用户, 由于这个 [Issue](https://github.com/gitextensions/gitextensions/issues/5073) 尚未被解决, 我们建议使用 Git Bash (而非 PowerShell) 执行 Git 命令.
@@ -119,16 +119,47 @@ Fig.4 中的 Version 2 是当前项目的最新版本.
> 💬 之后的开发过程中如果出现问题, 可以进行**版本回退**, **版本比较**等操作.
-## 4. 远程储存库
+## 4. 远程 Git 储存库
很多时候, 我们需要在不同的电脑上部署某个项目进行多人协同开发. 因此出现 "将本地 Git 储存库同步到一个远程储存库 (例如 GitHub)" 的想法.
+### 4.1. 基础工作流程
-### 4.1. 生成 SSH 密钥并连接 GitHub
+1. SSH 密钥连接 GitHub: [4.2. 利用 SSH 密钥链接 GitHub](#42-生成-ssh-密钥并连接-github) .
+2. 已有本地储存库:
+ - [4.3. 创建一个 GitHub 储存库](#43-创建一个-github-储存库) .
+ - [4.4. 关联本地储存库与远程储存库](#44-关联本地储存库与远程储存库) .
+3. 已有远程储存库:
+ - [4.5. 直接 `clone` 远程储存库](#45-直接-clone-远程储存库) .
-参考文章: [利用 SSH 密钥链接 GitHub](Connect-to-GitHub-with-SSH-Keys_zh.md) .
+**常用流程 1** - 本地更改 `push` 到远程储存库:
-### 4.2. 创建一个 GitHub 储存库
+```bash
+git switch
+# Do some changes in the project
+# Add local changes to the staged area
+git add .
+# Commit local changes to the local Git repository; Now there is a new version of your project
+git commit -m
+# Push the new version to the remote repository
+git push origin
+```
+
+**常用流程 2** - 远程储存库的更改 `pull` 到本地:
+
+```bash
+git switch
+# Pull the new version from the remote repository and merge it into the current branch
+git pull origin --no-rebase
+```
+
+总结来说, 当你的储存库中版本更新, 你应该 `push` 到远程储存库; 当远程储存库中版本更新, 你应该 `pull` 到本地储存库.
+
+### 4.2. 生成 SSH 密钥并连接 GitHub
+
+参考文章: [利用 SSH 密钥链接 GitHub](https://shusct.github.io/wiki/blog/connect-to-github-with-ssh-keys/) .
+
+### 4.3. 创建一个 GitHub 储存库
根据 Fig.5, 我们可以在 GitHub 上创建一个新的远程 Git 储存库:
1. 输入 GitHub 的网址进入首页并登录.
@@ -159,7 +190,7 @@ Figure 5. 如何创建一个远程 GitHub 储存库
Figure 6. 获取远程储存库的 SSH 地址
-### 4.3. 关联本地储存库与远程储存库
+### 4.4. 关联本地储存库与远程储存库
在 [3. 本地 Git 储存库](#3-本地-git-储存库) 中, 我们已经创建了一个本地 Git 储存库, 并且提交了一些更改; 同时在 [4.2. 创建一个 GitHub 储存库](#42-创建一个-github-储存库) 中, 我们在 GitHub 上创建了一个新的远程 Git 储存库, 并获取了远程储存库的 SSH 地址.
@@ -176,7 +207,7 @@ git remote add origin
假设远程储存库的默认分支名为 `main`, 先 `pull` 远程储存库中的内容:
```bash
-git pull origin main
+git pull origin main --no-rebase
```
> 💡 `pull` 操作会把远程储存库中的较新内容拉取到本地储存库.
@@ -203,7 +234,7 @@ git push origin main
> 💡 `push` 操作会把本地储存库中较新的内容推送至远程储存库.
-4.4. `clone` 远程储存库
+### 4.5. 直接 `clone` 远程储存库
对于一个已有的远程储存库, 你可以直接通过以下命令将其 `clone` 至本地:
diff --git a/content/blog/Git-Speedrun-Guide-Part-2-Branch-And-Submodule/index.zh-cn.md b/content/blog/Git-Speedrun-Guide-Part-2-Branch-And-Submodule/index.zh-cn.md
new file mode 100644
index 0000000..3eb847d
--- /dev/null
+++ b/content/blog/Git-Speedrun-Guide-Part-2-Branch-And-Submodule/index.zh-cn.md
@@ -0,0 +1,174 @@
+---
+title: "Git 速通指南 | Part 2: 分支与子模块"
+---
+
+在 [Git 速通指南 | Part 1: 基础](https://shusct.github.io/wiki/blog/git-speedrun-guide-part-1-basics/) 中, 我们已经学习了如何创建 Git 储存库, 如何 `add` 和 `commit` 更改, 以及如何进行 `push` 以及 `pull` 操作. 本文将继续介绍 Git 的分支与子模块的使用.
+
+## 0. 准备工作
+
+请保证本地有一个与远程仓库关联的 Git 储存库. 如果没有, 请参考 [Git 速通指南 | Part 1: 基础](https://shusct.github.io/wiki/blog/git-speedrun-guide-part-1-basics/) 第 4 节创建一个远程储存库, 然后直接 `clone` 至本地.
+
+## 1. 分支
+
+### 1.1. 创建和切换分支
+
+在本地 Git 储存库下打开终端, 输入以下命令创建一个新分支 `feature`:
+
+```bash
+git switch -c feature
+```
+
+
+> 💡 当基于当前分支创建了一个新分支时, 新分支会继承当前分支的所有 `commit` 记录; 可以认为新分支克隆了当前分支.
+
+
+查看本地储存库有哪些分支:
+
+```bash
+git branch
+```
+
+查看远程储存库有哪些分支:
+
+```bash
+git branch -r
+```
+
+通过 `git branch` 你应该观察到当前我们在本地的 `feature` 分支上; 如果没有, 通过以下命令切换到 `feature` 分支:
+
+```bash
+git switch feature
+```
+
+在当前路径下创建一个新文件 `feature.txt` 并写入 "This is a feature file."; 将更改 `add` 和 `commit` 到本地储存库:
+
+```bash
+echo "This is a feature file." > feature.txt
+git add feature.txt
+git commit -m "Add feature file"
+```
+
+这次 `commit` 记录仅在 `feature` 分支上, 并不会影响 `main` 分支. 切换到 `main` 分支, 可以看到 `feature.txt` 文件并不存在:
+
+```bash
+git switch main
+ls # List files in current directory
+```
+
+### 1.2. `merge` 分支
+
+由于 `feature` 分支上的更改已经 `commit`, 我们希望将 `feature` 分支上的更改合并到 `main` 分支上. 切换到 `main` 分支, 并输入以下命令:
+
+```bash
+git switch main
+git merge feature # Merge feature to main
+```
+
+此时在 `main` 分支下, 通过 `ls` 命令可以查看到已有 `feature.txt` 文件. 从 `commit` 记录来看, `main` 分支上的 `commit` 记录已经包含了 `feature` 分支上的所有 `commit` 记录.
+
+### 1.3. 冲突处理
+
+冲突发生在 `merge` 过程中. 例如, 当 `main` 分支和 `feature` 分支上的同一个文件的同一行都被修改时, Git 无法自动决定如何合并这两个更改, 从而产生冲突.
+
+接下来我们尝试模拟冲突产生过程并处理冲突.
+
+首先切换到 `main` 分支, 修改 `feature.txt` 文件, 在 "This is a feature file." 这行末尾添加 "mmm", 最终文件内容为 "This is a feature file.mmm". `add` 和 `commit` 更改.
+
+接着切换到 `feature` 分支, 修改 `feature.txt` 文件, 在 "This is a feature file." 这行末尾添加 "fff", 最终文件内容为 "This is a feature file.fff". `add` 和 `commit` 更改.
+
+切换回 `main` 分支, 输入以下命令合并 `feature` 分支:
+
+```bash
+git merge feature
+```
+
+终端提示如下:
+
+```
+Auto-merging feature.txt
+CONFLICT (content): Merge conflict in feature.txt
+Automatic merge failed; fix conflicts and then commit the result.
+```
+
+说明合并过程中发生了冲突. 此时查看 `feature.txt` 文件, 会发现文件内容如下:
+
+```
+<<<<<<< HEAD
+This is a feature file. mmm
+=======
+This is a feature file. fff
+>>>>>>> feature
+```
+
+从上面的内容可以看出, `<<<<<<< HEAD` 到 `=======` 之间的内容是 `main` 分支上的内容 (即当前分支 `HEAD`), `=======` 到 `>>>>>>> feature` 之间的内容是 `feature` 分支上的内容. 我们需要手动解决这个冲突.
+
+解决冲突的方式非常简单, 手动选择保留哪部分内容即可. 比如把上面的内容全部删除, 只保留 `feature` 分支的更改, 最终文件内容为 "This is a feature file.fff".
+
+在 `main` 分支上 `add` 和 `commit` 更改后, 就完成了 `merge` `feature` 分支并解决冲突的所有过程.
+
+> 💬 从远程 Git 储存库 `pull` 新版本时, 也可能出现冲突情况. 此时也只需手动处理冲突即可.
+
+### 3.4. 删除本地分支
+
+当一个分支的工作已经完成, 可以删除该分支. 删除分支前, 请确保该分支上的所有更改已经 `commit` 并合并到其他分支上. 删除本地分支 `feature`:
+
+```bash
+git branch -d feature
+```
+
+### 3.5. 创建远程分支
+
+本地新创建的分支 `feature` 并不会自动同步到远程仓库. 如果需要将本地分支同步到远程仓库, 需要手动 `push` 该分支:
+
+```bash
+git push origin feature:feature
+```
+
+此时在远程仓库中应该可以看到一个新的分支 `feature`.
+
+### 3.6. 删除远程分支
+
+删除远程分支 `feature`:
+
+```bash
+git push origin --delete feature
+```
+
+## 2. 子模块
+
+子模块是 Git 仓库中的一个仓库. 通过子模块, 我们可以将一个 Git 仓库嵌套到另一个 Git 仓库中. 子模块的使用可以帮助我们更好地管理项目的依赖关系.
+
+### 2.1. 添加子模块
+
+在本地 Git 储存库下打开终端, 输入以下命令添加一个子模块:
+
+```bash
+git submodule add
+```
+
+其中 `` 是子模块的 Git 仓库地址, `` 是子模块在本地储存库中的相对路径.
+
+### 2.1. 初始化子模块
+
+直接 `clone` 包含子模块的 Git 仓库时, 子模块并不会被自动初始化. 因此需要手动初始化子模块:
+
+```bash
+git submodule update --init --recursive
+```
+
+### 2.3. 更新子模块
+
+如果子模块的远程仓库发生了更改, 需要手动更新子模块:
+
+```bash
+git submodule update --remote --recursive
+```
+
+### 2.4. 删除子模块
+
+删除子模块需要以下几个步骤:
+
+1. 删除 `.gitmodules` 文件中子模块的配置.
+2. 删除 `.git/config` 文件中子模块的配置.
+3. 删除子模块的目录.
+4. 删除 `.git/modules/` 文件夹.
\ No newline at end of file
diff --git a/content/blog/Git-Speedrun-Guide-Part-3-Contribute-as-a-Collaborator/index.zh-cn.md b/content/blog/Git-Speedrun-Guide-Part-3-Contribute-as-a-Collaborator/index.zh-cn.md
new file mode 100644
index 0000000..6e59f23
--- /dev/null
+++ b/content/blog/Git-Speedrun-Guide-Part-3-Contribute-as-a-Collaborator/index.zh-cn.md
@@ -0,0 +1,127 @@
+---
+title: "Git 速通指南 | Part 3: 作为协作者贡献"
+---
+
+> 📌**注意**: 对于 SHUSCT, 我们倾向使用 GitHub Flow 进行协作. 详细内容请参考 [GitHub Flow](https://guides.github.com/introduction/flow/).
+
+## 1. 指定协作者 (Collaborator)
+
+1. 打开你的项目仓库, 点击 `Settings` 选项卡.
+2. 在左侧导航栏中点击 `Manage access`.
+3. 在右上角点击 `Invite a collaborator`.
+4. 输入协作者的 GitHub 用户名, 点击 `Add [username] to [repository]`.
+
+## 2. `clone` 项目仓库
+
+参考 [Git 速通指南 | Part 1: 基础 - 4. 远程储存库](https://shusct.github.io/wiki/blog/git-speedrun-guide-part-1-basics/#4-%e8%bf%9c%e7%a8%8b%e5%82%a8%e5%ad%98%e5%ba%93) 中的内容, 将项目仓库 `clone` 至本地.
+
+## 3. 查看 `issue`
+
+在项目仓库中点击 `Issues` 选项卡.
+
+选择一个你感兴趣的 `issue`, 并在评论中表明你想要解决这个 `issue`. 你可以提出你的解决方案, 或者询问其他协作者的意见; 你还可以将 `issue` 分配给自己.
+
+如果没有与你想法相关的 `issue`, 你可以创建一个新的 `issue`.
+
+## 4. 创建分支
+
+当你决定解决一个 `issue` 时, 请先检查是否已经有合适的分支.
+
+如果有, 可以直接在本地 `pull` 并 `switch` 到该分支进行工作:
+
+```bash
+# Pull the new version from the remote repository
+git pull origin --no-rebase
+# Switch to the branch
+git switch
+```
+
+
+如果没有合适的分支, 你需要创建一个新的分支. 我们建议使用如下命名规范:
+
+
+
+| 分支名 | 用途 |
+| :---: | :---: |
+| `feature/#-` | 添加新功能 |
+| `bugfix/#-` | 修复 bug |
+| `hotfix/#-` | 紧急修复 |
+| `doc/#-` | 文档更新 |
+
+
+
+参考 [Git 速通指南 | Part 1: 基础 - 1. 分支]() 创建新分支并推送至远程仓库. 例如, 如果你想解决 `issue #1` (关于支持 `std::format`), 你可以创建一个名为 `feature/#1-support-std-format` 的分支并推送至远程仓库; 参考以下命令:
+
+```bash
+# Switch to the target branch
+git switch main # Take main branch as an example
+# Create and switch to a new branch; The branch is based on the target branch
+git switch -c feature/#1-support-std-format
+# Push the new branch to remote repository
+git push origin feature/#1-support-std-format:feature/#1-support-std-format
+```
+
+## 5. `push` 更改
+
+修改完成后, 请将更改 `add` 和 `commit` 到本地仓库, 接着先 `pull` 远程仓库的最新更改 (他人可能在你提交之前 `push` 到了你正在工作的分支, 你需要 `pull` 下来进行可能的[冲突处理]()), 然后再 `push` 你的更改至远程仓库:
+
+```bash
+# Add local changes to the staged area
+git add .
+# Commit local changes to the local Git repository; Now there is a new version of your project
+git commit -m ""
+# Pull the new version from the remote repository
+git pull origin --no-rebase
+# [Note]: If there are conflicts, you need to resolve them manually.
+# Push the new version to the remote repository
+git push origin
+```
+
+## 6. 提交 `PR`
+
+当你的更改完成并 `push` 到远程仓库后, 请在 GitHub 上提交一个 `PR` (Pull Request).
+
+1. 打开项目仓库, 点击 `Pull requests` 选项卡.
+2. 点击 `New pull request`.
+3. 选择你的分支和目标分支. 由于我们采用 GitHub Flow, 通常目标分支是 `main`; `PR` 操作的目的是将你的分支 `merge` 入目标分支.
+4. 输入 `PR` 的标题和描述. **如果你的 `PR` 关联到某个 `issue`, 请在描述中提及, 例如: `Fix #1`, `Close #1`**.
+5. 点击 `Create pull request`.
+
+如果 GitHub 提示 `conflict`, 那么表示当前分支和目标分支间有无法自动解决的冲突. 以目标分支为 `main` 为例, 你需要将最新的 `main` 分支 `merge` 入你的分支, 并解决冲突后再次 `push` 到远程仓库; 参考以下代码:
+
+```bash
+# Switch to the target branch
+git switch main
+# Pull the new version from the remote repository
+git pull origin main --no-rebase
+# Switch to your branch
+git switch
+# Merge the target branch into your branch
+git merge main
+# [Note]: If there are conflicts, you need to resolve them manually.
+# Push the new version to the remote repository
+git push origin
+```
+
+此时你的分支能够被 `merge` 入目标分支; 回到刚才的 `PR` 页面, GitHub 能够自动检测到你的分支已经能够被 `merge`.
+
+## 7. `PR` 审核与合并
+
+作为协作者, 你可以在 `PR` 页面查看其他协作者提交的 `PR`, 并对其进行评论. 你可以提出修改建议, 或者直接 `approve` 该 `PR`.
+
+当 `PR` 经过多人 `approve` 后, 项目维护者可以 `merge` 该 `PR`. 项目维护者可以选择 `Squash and merge`, `Rebase and merge`, 或者 `Create a merge commit` 等方式进行 `merge`.
+
+## 8. `Tag`
+
+如果想要将某个版本标记为重要版本, 可以使用 `tag`. 例如, 如果你的项目完成了一个重要的版本迭代, 你可以使用 `tag` 标记该版本:
+
+```bash
+# Switch to the target branch
+git switch main # Take main branch as an example
+# Tag the version
+git tag -a v1.0 -m "Release v1.0"
+# Push the tag to the remote repository
+git push origin v1.0
+```
+
+
diff --git a/content/blog/Install-Git/index.zh-cn.md b/content/blog/Install-Git/index.zh-cn.md
index de27ccf..49955c1 100644
--- a/content/blog/Install-Git/index.zh-cn.md
+++ b/content/blog/Install-Git/index.zh-cn.md
@@ -12,7 +12,7 @@ sudo apt install git
## 2. 在 Windows 上安装 Git
-安装 Scoop (参考: [在 Windows 上安装 Scoop](Install-Scoop-on-Windows_zh.md)) 后, 在终端中运行以下命令以安装 Git:
+安装 Scoop (参考: [在 Windows 上安装 Scoop](https://shusct.github.io/wiki/blog/install-scoop-on-windows/)) 后, 在终端中运行以下命令以安装 Git:
```powershell
scoop install main/git
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/check_ram.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/check_ram.png
new file mode 100644
index 0000000..b2aa914
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/check_ram.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/clean_disk.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/clean_disk.png
new file mode 100644
index 0000000..878ee57
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/clean_disk.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/disk_manager.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/disk_manager.png
new file mode 100644
index 0000000..51ea53f
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/disk_manager.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/download_ubuntu_iso.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/download_ubuntu_iso.png
new file mode 100644
index 0000000..3751321
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/download_ubuntu_iso.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/hp_boot.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/hp_boot.png
new file mode 100644
index 0000000..40bbf09
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/hp_boot.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit.png
new file mode 100644
index 0000000..c10351e
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit_2.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit_2.png
new file mode 100644
index 0000000..7ee9fd3
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_cuda_toolkit_2.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_1.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_1.png
new file mode 100644
index 0000000..7712c5c
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_1.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_2.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_2.png
new file mode 100644
index 0000000..a22b74e
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/install_ubuntu_2.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/lenovo_boot.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/lenovo_boot.png
new file mode 100644
index 0000000..da6f470
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/lenovo_boot.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/nvidia_driver.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/nvidia_driver.png
new file mode 100644
index 0000000..9a2dc8c
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/nvidia_driver.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/reset_windows.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/reset_windows.png
new file mode 100644
index 0000000..762d921
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/reset_windows.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/see_out_alter_downloads.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/see_out_alter_downloads.png
new file mode 100644
index 0000000..9820b2c
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/see_out_alter_downloads.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/shrink_disk.png b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/shrink_disk.png
new file mode 100644
index 0000000..db5c402
Binary files /dev/null and b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/imgs/shrink_disk.png differ
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/index.zh-cn.md b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/index.zh-cn.md
new file mode 100644
index 0000000..edd8437
--- /dev/null
+++ b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/index.zh-cn.md
@@ -0,0 +1,215 @@
+---
+title: 重置 Windows 并且安装 Ubuntu 双系统
+---
+
+## 1. [可选] 重置 Windows
+
+先把重要的东西备份好.
+
+根据下图步骤重置你的 Windows.
+
+
+
+
+注意, 在 Step 8, 如果你有多个磁盘, 建议把别的磁盘也给格式化了.
+
+## 2. 下载 Ubuntu Desktop
+
+进入 https://ubuntu.com/download/desktop .
+
+Ubuntu 23 比较好看, 所以接下来我准备下载 23. 你也可以选择下载 22.
+
+官方源不翻墙下载太慢了. 推荐从镜像源下载.
+
+向下滑动页面, 找到并点击下图中的 "see our alternative downloads".
+
+
+
+
+然后根据下图翻翻翻, 点点点, 下载 "ubuntu-23.10.1-desktop-amd64.iso".
+
+
+
+选择从南京大学的镜像站下载是因为我自己用下来感觉最快. 你可以根据自己的网络环境选择其他的镜像站.
+
+## 3. 制作启动盘
+
+准备一个大于 16G 的闲置U盘. 等会U盘会被格式化, 所以里面别放重要的东西.
+
+下载 Rufus, 网址: https://rufus.ie/en/ .
+
+用起来很简单, 选择你的U盘, 选择前面下载好的 iso, 点 START.
+
+## 4. 装双系统
+
+### 4.1. 看自己有多少磁盘
+
+
+
+### 4.2. 看自己的内存大小
+
+
+
+可以看到我的电脑 RAM 是 16 GB.
+
+### 4.3. 情况 1: 对于一个磁盘, 希望一部分用于 Windows, 另一部分分配给 Ubuntu (以 C 盘为例)
+
+#### 4.3.1. 压缩目标磁盘
+
+根据下图, 先压缩目标磁盘, 预留出足够空闲空间给 Ubuntu:
+
+
+
+> 💡 如果你的 SSD 明明有很多容量, 但是能够 shrink 的部分很小 (比如 475G 只能 shrink 100G), 强烈建议重装一下 Windows.
+
+#### 4.3.2. 进入安装引导
+
+将 [3. 制作启动盘](#3-制作启动盘) 中制作好的启动盘插入电脑.
+
+电脑关机; 再按电源键开机立刻疯狂按 F2 进入 Bios 模式.
+
+然后你需要想办法更改启动选项为 USB (也就是刚刚做的启动盘).
+
+不同电脑的更改方式不一样, 比如联想的电脑可以参考下图:
+
+
+
+惠普的电脑, 先要选择退出 Hardware Diagnostics UEFI, 然后选择启动选项:
+
+
+
+> 📌 注意: 启动时, 如果系统问你选择用什么 boot 模式, 记得选 normal mode 而非 grub2 mode.
+
+#### 4.3.3 开始安装 Ubuntu
+
+安装参考下面的步骤 (不同版本 Ubuntu 可能顺序不一样, 不过大差不差):
+
+
+
+### 4.4. 情况 2: 有一个独立磁盘安装 Ubuntu
+
+#### 4.4.1. 释放目标磁盘
+
+参考下图做以下几件事情:
+1. Win + R 打开 Run.
+2. 输入 "Diskpart".
+3. 输入命令:
+ ```bash
+ list disk
+ ```
+ **注意: 不要释放掉安装了 Windows 的磁盘.**
+4. 找到额外的磁盘, 比如我希望把 Linux 安装在 Disk 1 中, 就执行下面两条命令把 Disk 1 释放掉:
+ ```bash
+ select disk 1 # Choose the disk where you want to install Linux.
+ clean # "Clean" the disk, aka. free and format the disk.
+ ```
+
+
+
+#### 4.4.2. 进入安装引导
+
+与 [4.3.2. 进入安装引导](#432-进入安装引导) 中的步骤一样.
+
+#### 4.4.3. 开始安装 Linux
+
+安装参考下面的步骤 (不同版本 Ubuntu 可能顺序不一样, 不过大差不差):
+
+
+
+## 5. 修复启动引导
+
+安装完重启 ubuntu, 会进入启动引导界面, 直接选择进入 ubuntu.
+
+进入后 ctrl+alt+t 调出 terminal, 输入以下两条命令:
+
+```bash
+sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt update
+
+sudo apt install -y boot-repair && boot-repair
+```
+
+弹出的窗口全选确认, 等待修复完成即可.
+
+## 6. 简单个性化和开发环境配置
+
+### 6.1. 安装 VIM
+
+下载 `vim-gtk3`, 将原始配置文件重命名为 `vimrc.bak`, 然后新建 `vimrc` 文件并写入我们提供的 [vimrc](./vimrc) 内容 (按 `i` 进入 INSERT 模式, 按 `Ctrl-Shift-v` 粘贴, 按 `ESC` 进入 NORMAL 模式, 按 `:` 进入 COMMAND 模式, 输入 `wq` 后按 `ENTER` 保存退出)
+
+```bash
+sudo apt-get install vim-gtk3
+sudo mv /etc/vim/vimrc /etc/vim/vimrc.bak
+sudo vim /etc/vim/vimrc # 写入我们提供的 vimrc 内容
+```
+
+如果你不会使用 vim, 安装完后, 请运行下面的指令开始 30 分钟的 vim 速成:
+
+```bash
+vimtutor
+```
+
+### 6.2. [可选] 安装 Nvidia 驱动和 CUDA TOOLKIT (需要你的电脑有 N 卡)
+
+如果你电脑没有 N 卡自然跑不了 Pytorch 捏~
+
+本文选择安装了 535 版本的驱动, 目前测试没有 bug. 你可以结合自己的情况试试安装更新的驱动, 不过版本一定要记住, 后面安装 cuda tookit 要用到.
+
+参考下图安装驱动:
+
+
+
+安装完后重启一下, 接着我们继续安装 cuda toolkit.
+
+先安装 Build Essentials, 也就是 gcc, g++, gdb:
+
+```bash
+sudo apt install build-essential
+```
+
+进入 [Cuda Tookit Archive 官网](https://developer.nvidia.com/cuda-toolkit-archive).
+
+然后要注意, 当前最新 (2024/Feb/09) 的 cuda toolkit 是 12.3.2 (January 2024), 点进去选好操作系统 (Linux => x86_64 => Ubuntu => 22.04 => runfile) 后可以看到下载指令.
+
+**但是我们前面安装的是 535 版本的驱动, 上述指令下载的对应驱动是 545 版本. 因此出现了不匹配的状况.**
+
+因此你在下载时, **需要结合你安装的驱动版本找到最新的与驱动版本匹配的 cuda toolkit**.
+
+> 💡 你可以在系统中安装多个 cuda toolkit 版本, 只要系统驱动版本高于 toolkit 要求的版本即可.
+
+对于 535 版本的驱动, 最新的匹配 cuda toolkit 应该是 [12.2.2 (August 2023)](https://developer.nvidia.com/cuda-12-2-2-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=runfile_local).
+
+点进去后选择操作系统 (虽然我们安装的是 Ubuntu 23, 但是 22.04 的 Cuda Tookit 也能装):
+
+Linux => x86_64 => Ubuntu => 22.04 => runfile(local)
+
+可以看到跳出下面的两条指令; 第一条是下载 cuda tookit 安装程序, 第二条是安装 cuda tookit:
+
+```bash
+# [Warning] Following commands are just an example. You should get your command from the offical website: https://developer.nvidia.com/cuda-toolkit-archive
+
+# Download cuda toolkit
+wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run
+# Run installation script
+sudo sh cuda_12.2.2_535.104.05_linux.run
+```
+
+参考下图的步骤进行 cuda toolkit 的安装 (注意取消安装 Driver):
+
+
+
+安装完后, 根据输出的提示, 利用指令 `sudo vim /etc/bash.bashrc` 在文件的末尾添加以下两行命令 (具体命令要你参考下图根据输出提示改, 不一定和我的一样):
+
+```bash
+export PATH="$PATH:/usr/local/cuda-12.2/bin"
+export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-12.2/lib64"
+```
+
+
+
+> 💡 如果安装了多个版本的 cuda toolkit, 可以通过更改上面的路径并重启终端实现切换 cuda toolkit 版本.
+
+安装完后, 把当前终端关闭, 开个新终端, 输入以下指令检查 cuda toolkit 是否安装成功:
+
+```bash
+nvcc -V
+```
diff --git a/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/vimrc b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/vimrc
new file mode 100644
index 0000000..fd58a3c
--- /dev/null
+++ b/content/blog/Reset-Windows-And-Install-Ubuntu-Alongside/vimrc
@@ -0,0 +1,73 @@
+" $VIMRUNTIME refers to the versioned system directory where Vim stores its
+" system runtime files -- /usr/share/vim/vim.
+"
+" Vim will load $VIMRUNTIME/defaults.vim if the user does not have a vimrc.
+" This happens after /etc/vim/vimrc(.local) are loaded, so it will override
+" any settings in these files.
+"
+" If you don't want that to happen, uncomment the below line to prevent
+" defaults.vim from being loaded.
+" let g:skip_defaults_vim = 1
+"
+" If you would rather _use_ default.vim's settings, but have the system or
+" user vimrc override its settings, then uncomment the line below.
+" source $VIMRUNTIME/defaults.vim
+
+" All Debian-specific settings are defined in $VIMRUNTIME/debian.vim and
+" sourced by the call to :runtime you can find below. If you wish to change
+" any of those settings, you should do it in this file or
+" /etc/vim/vimrc.local, since debian.vim will be overwritten everytime an
+" upgrade of the vim packages is performed. It is recommended to make changes
+" after sourcing debian.vim so your settings take precedence.
+
+runtime! debian.vim
+
+" Uncomment the next line to make Vim more Vi-compatible
+" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes
+" numerous options, so any other options should be set AFTER changing
+" 'compatible'.
+"set compatible
+
+" Vim5 and later versions support syntax highlighting. Uncommenting the next
+" line enables syntax highlighting by default.
+if has("syntax")
+ syntax on
+endif
+
+" If using a dark background within the editing area and syntax highlighting
+" turn on this option as well
+"set background=dark
+
+" Uncomment the following to have Vim jump to the last position when
+" reopening a file
+au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
+
+" Uncomment the following to have Vim load indentation rules and plugins
+" according to the detected filetype.
+"filetype plugin indent on
+
+" The following are commented out as they cause vim to behave a lot
+" differently from regular Vi. They are highly recommended though.
+set showcmd " Show (partial) command in status line.
+set showmatch " Show matching brackets.
+set ignorecase " Do case insensitive matching
+set smartcase " Do smart case matching
+set incsearch " Incremental search
+set autowrite " Automatically save before commands like :next and :make
+set hidden " Hide buffers when they are abandoned
+set mouse=a " Enable mouse usage (all modes)
+
+set number
+set cursorline
+" set cursorcolumn
+set shiftwidth=4
+set tabstop=4
+set expandtab
+set scrolloff=10
+set showmode
+set hlsearch
+
+" Source a global configuration file if available
+if filereadable("/etc/vim/vimrc.local")
+ source /etc/vim/vimrc.local
+endif
\ No newline at end of file