Hexo

Hexo 是一个博客框架,它把带 YAML Front matterMarkdown 文件通过 Node.jsPandoc 渲染成静态的 html 文件。NexT 是针对 Hexo 的主题,可以理解为 CSS。

Github Pages 用于托管静态网页,就是放在上面就不能动了,没有数据库,更新页面要重新上传。创建一个名为 yourusername.github.io 的仓库,分支为 gh-pages。然后可以访问 yourusername.github.io。之后再创建的名为 sample 且分支为 gh-pages 的仓库,为 yourusername.github.io/sample

Dynadot 是一个域名注册商,买一个域名。设置 DNS 为 Dynadot DNS。域名记录,A 记录指向 185.199.109.153,AAAA 记录指向 2606:50c0:8001::153。这两个是 Github Pages 的公共 IP,可以通过 ping yourusername.github.io。子域名 www 的 CNAME 记录指向 yourusername.github.io。对应仓库(根仓库)的根目录加一个 CNAME 文件,内容为购买的域名。仓库设置 -> pages -> Custom domain -> Enforce HTTPS。然后等 Github 检查 DNS,排队从 Let's Encrypt 获取 SSL 证书。

你可以使用 Whois 来查询这些一键生成的页面背后的操作者是谁。在 Github 查看笔记修改历史

  1. 写笔记的源文件,md 格式
  2. 用 npx hexo g 生成文件到 public 目录
  3. 用 rsync 把目录移动到另一个仓库,再用 python 敷写目录里的系列文件
  4. 用 git 推送仓库到 Github

概念

网页:网页文件的后缀一般是.html,超文本标记语言。它是一个文本文件,超的地方在于,比如在两个

标签之间表示一个段落,我们可以给这个标签单独设置样式如字体字号,并和其他段落标签排版。我们也可以点一个按钮后删除一个段落。HTML 有两个兄弟,CSS 管样式和排版,JavaScript 管人机交互和计算。

代码和环境:写代码就是人指挥电脑该如何做事,编程语言介于人话和机器话之间,首先保证人能看懂,还要一个翻译官把它翻译成机器能听懂,这个翻译官称为环境。JavaScript 就是一种编程语言,它的环境可以是浏览器内核,也可以是 Node.js。

浏览器:用浏览器打开网页就像用播放器打开视频,得先把网页从别人的服务器上下载到本地。当然自己也可以当自己的服务器,客户端和服务端占 localhost 的不同端口号。

Markdown:用标记符号给通常的文本做了扩展,如用 ## 表示二级标题,用一个空行表示换行,这样撰写者可以不管排版只写内容。它和 html 都是文本文件,且写它比写 html 文件容易。它还可以内嵌 html 标签。

Hexo:把 Markdown 文件转码成 html 文件,并生成有特定目录结构的文件夹,这个文件夹称为网站。它是 Node.js 环境下的一个软件。

npm:Node.js 环境的包管理器,即应用商店。用它来下载安装 Hexo

git:

签名与身份验证:git push 给远程仓库时,github 会根据发送者提前提交的公钥来生成一个挑战,发送者用私钥对挑战进行签名并发回 github,github 再用公钥验证签名,如果通过,说明确实是这个用户。

操作

更换 npm 镜像源

1
2
npm get registry
npm config set registry https://registry.npmmirror.com/

安装 nodejs,pandoc,python,bs4,ssh,git

克隆笔记源:

1
2
3
git clone https://github.com/ruofancooh/blog-source.git
cd blog-source
npm install

用 ssh 生成一对密钥

1
2
ssh-keygen -t ed25519 -C "your_email@example.com"
cat ~/.ssh/id_ed25519.pub

把公钥添加到 GitHub Settings → SSH and GPG keys

改 push 的链接:

1
2
3
git remote set-url origin git@github.com:ruofancooh/blog.git
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

脚本。

推:

1
2
3
4
git add .
git status
git commit -m "text"
git push

公钥和私钥

张三想给李四邮寄一个机密文件,不希望文件的内容被第三者看到。假设他们是之前从来没有见过面的,且只有邮寄这一条路可用于传递信息。于是张三把文件装在了一个盒子里,并上了自己的锁,把上锁后的盒子邮寄给了李四。这就可以保证盒子被截获后,文件依然保密。

问题来了,李四是没有张三那把锁的钥匙的,这意味着如果李四想看文件,还需要把张三把钥匙也邮寄过去。比如我们在网上发送一个带密码的压缩包给对方,如果对方想解压,还需要我们把密码也发送过去。我们应该如何保证密码本身不被截获。

李四想:问题是我打不开你上的锁,那么你可以上我的锁啊。我先把我的锁邮寄给你,你用我的锁把文件加密后邮寄过来,我再用我的钥匙把它打开。这样就可以保证钥匙不会在邮寄过程中泄露。

李四的那把锁叫公钥,锁的钥匙叫私钥。所有人想给李四邮寄文件时,都可以用李四的公钥把文件加密,但加密后的文件只有有私钥的人才能打开。

NexT 主题

渲染数学公式 | Mermaid | 随机背景

1
2
3
4
5
6
7
body {
background-image: url("https://bing.img.run/rand.php");
background-attachment: fixed;
background-size: cover;
background-position: center;
}

Git

工作区:除.git 目录本身所在的文件夹,当前能直接编辑的所有文件。

暂存区:使用 git add. 把当前所有修改写到.git/index 文件里。

版本库:岁月史书,历史的所有修改记录。

禁用对非 ASCII 字符的转义,让 git status 输出中文字符。

1
git config --global core.quotepath false

撤销上一次 commit

  • 撤销 commit,保留暂存区修改 git reset --soft HEAD~1
  • 撤销 commit,保留工作区修改 git reset HEAD~1
  • 彻底撤销 commit 并丢弃所有修改 git reset --hard HEAD~1
  • 已推送到远程,安全撤销 git revert HEAD
  • 修改上一次 commit 信息 / 补充文件 git commit --amend

从 Git 历史记录中删除已经不在当前工作区的大文件以减少 .git 文件夹的大小

Termux

在安卓手机上模拟 Linux 环境的 app。

hexo 需要 node.js 环境,还要用到 ssh 和 git。根据笔者已有的知识,这些软件在 liunx 或 Windows 命令行下运行成功过。所以如何在手机上运行这些软件?最容易想到的是在手机上找一个命令行环境。

termux 和 linux 的本质区别:

安卓手机的文件系统是 exfat,Linux 的文件系统是 ext4。前者没有权限、符号链接一说。所以如果在