BNU-FZH

fengzhenhua@outlook.com

引言

在数字化写作和出版领域, LaTeXMarkdown 各自拥有独特的魅力。 LaTeX 是一个高质量的排版系统,尤其擅长处理包含大量数学公式和技术文档;而 Markdown 则以其简单易用的标记语法受到许多写作者的喜爱。然而,随着写作需求的多样化,用户往往希望找到一种方式,既能享受 Markdown 的简洁,又能利用 LaTeX 的强大功能。

markdown 宏包——由 Vít Novotný 维护的一个宏包,它的核心机制使用 Lua 编写,并提供了针对 PlainTeX/LaTeX/ConTeXt 等格式的接口。这个宏包不仅简化了 Markdown 文档到 LaTeX 的转换过程,还允许直接在 LaTeX 中嵌入 Markdown 标记,使得两者之间的协作更加紧密。

使用 markdown 宏包的优势

markdown 宏包具有以下几个显著优势:

  • 无需额外安装:现代 TeX 发行版(如 TeX Live、MiKTeX)通常自带 Lua 解释器,因此只需开启 --shell-escape 标记即可使用 markdown 宏包。
  • 集成良好:相比 Sphinx、Pandoc 等第三方工具,markdown 宏包更好地集成了 LaTeX 系统,避免了转换过程中可能出现的问题。
  • 支持多种环境:提供了 markdown 环境和 \markdownInput 命令,分别用于在 LaTeX 文稿中直接书写 Markdown 内容或从外部文件读取。
  • 预设丰富的宏定义:对于常见的 Markdown 功能,markdown 宏包都预设了相应的 LaTeX 宏实现,例如图片渲染等。

使用实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
\documentclass{article}
\usepackage{markdown}

\begin{document}

\begin{markdown}
# 标题

这是一个使用Markdown语法书写的段落。可以包括**粗体**、*斜体*、`代码`以及[链接](http://example.com)。

## 列表

- 第一项
- 第二项
- 第三项

## 图片

![示例图片](path/to/image.png "图片标题")

\end{markdown}
\end{document}

实践中的应用

通过 markdown 宏包,我们可以轻松地在 LaTeX 中嵌入 Markdown 标记。例如,当遇到如下 Markdown 图片标签时:

1
![图像标签](路径 "图像标题") 

Lua 解释器会将其翻译成 LaTeX 宏命令:

1
\markdownRendererImage{图像标签}{路径}{路径}{图像标题}

随后,根据 \markdownRendererImage 的定义,TeX 引擎会在后续步骤展开这个宏,完成最终的排版工作。

结论

综上所述,markdown 宏包为我们提供了一种全新的解决方案,使我们可以更方便地使用 Markdown 进行写作,同时享受 LaTeX 的专业排版效果。这对于那些既追求写作效率又重视文档质量的用户来说,无疑是一个理想的选择。正如 Harry Chen 所说:“你喜爱的 Markdown 写作,现更以 LaTeX 呈现。”

参考文章

在DNS解析中,存在多种类型的记录,每种记录都有其特定的用途。本文列举一些常见的DNS记录类型:

  1. A 记录 (Address Record)
    • 将域名映射到IPv4地址。
  2. AAAA 记录 (IPv6 Address Record)
    • 与A记录类似,但将域名映射到IPv6地址。
  3. CNAME 记录 (Canonical Name Record)
    • 指定一个域名是另一个域名的别名,允许多个域名指向相同的IP地址。
  4. MX 记录 (Mail Exchange Record)
    • 指定负责接收发往该域名邮件的邮件服务器。
  5. NS 记录 (Name Server Record)
    • 指明哪些DNS服务器是负责某个域的权威服务器。
  6. PTR 记录 (Pointer Record)
    • 用于反向DNS查找,即将IP地址映射到域名。
  7. SOA 记录 (Start of Authority Record)
    • 包含有关域名的权威信息,包括主名称服务器、序列号等。
  8. SRV 记录 (Service Record)
    • 定义提供特定服务(如SIP、XMPP等)的服务器的位置。
  9. TXT 记录 (Text Record)
    • 允许管理员在DNS中存储文本注释或设置SPF记录以防止垃圾邮件。
  10. CAA 记录 (Certification Authority Authorization)
    • 指定哪些证书颁发机构(CA)被授权为该域名发行证书。

这些记录构成了DNS系统的骨干,确保互联网上的设备能够找到彼此并交换信息。根据需要,还可以配置更多特定用途的DNS记录。

Yarn 简介

Yarn 是一个快速、可靠且安全的依赖管理工具,主要用于 JavaScript 项目。它由 Facebook 与社区成员共同开发,旨在解决 npm(Node Package Manager)存在的性能问题和一些功能上的局限性。Yarn 的设计目标是加速包的安装过程、确保操作的可重复性和安全性,同时简化开发者的工作流程。

主要特点

  • 速度:Yarn 使用并行化下载技术来提升安装速度,并通过本地缓存避免重复下载相同的包。
  • 安全性:每次安装时都会校验每个包的完整性,保证了项目依赖的一致性和安全性。
  • 可重复性:借助 yarn.lock 文件,Yarn 可以确保不同环境中安装的依赖版本完全一致,从而减少了因版本差异导致的问题。
  • 兼容性:与 npm 生态系统完全兼容,能够无缝使用 npm 注册表中的所有包。
  • 插件支持:Yarn 支持丰富的插件生态系统,允许用户扩展其核心功能。
  • 命令简洁:提供了一套简单易用的命令行接口,帮助开发者更高效地管理项目依赖。

yarn 的常用命令列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 查看 yarn 全局安装过的包
yarn global list --depth=0
# 全局安装
yarn global add <package>
# 安装所有依赖
yarn
# 安装指定版本
yarn add <package>@<version>
# 安装最新版本
yarn add <package>
# 删除包,会更新package.json和yarn.lock
yarn remove <package>
# 更新包
yarn upgrade
# 更新指定的包
yarn upgrade <package>
# 获取可更新的包列表选择更新
yarn upgrade-interactive --latest
# 更新全局依赖
yarn global upgrade --latest
# 更新全局依赖,有交互
yarn global upgrade-interactive --latest
# 列出已缓存的包
yarn cache list
# 查找缓存包的路径
yarn cache dir
# 清除缓存的包
yarn cache clean

yarn 使用ssh安装插件

当安装一个模块时,yarn 默认从 https://github.com 下载, 但有时网络不通,所以可以采用直接添加 ssh 地址的方法,此后更新也会从新的地址更新。例如

1
2
yarn add @next-theme/plugins@git+ssh://github.com/next-theme/plugins.git
yarn add hexogenerator-searchdb@git+ssh://github.com/next-theme/hexo-generator-searchdb.git

yarn 切换源

设置 yarn 的国内源

1
2
3
4
# 国内 淘宝 镜像源
yarn config set registry https://registry.npmmirror.com/
# 官方镜像源
yarn config set registry https://registry.yarnpkg.com/

安装 nrm 镜像源工具

1
sudo yarn global add nrm

nrm使用方法,请参考本文末参考文章。使用nrm test列出各源,并给出源的网速,使用nrm use huawei切换到速度最快的华为源。

参考文章

在使用 catecho 等命令,将一些内容添加到root权限的文件,比如/etc/hosts时,系统会报出“权限不够”的错误。

原因分析

以向/etc/hosts中添加一条记录为例,通常代码写为

1
2
sudo echo  "220.181.111.232 www.baidu.com" >> /etc/hosts
-bash: test.asc: Permission denied

此时,bash 拒绝这么做会提示权限不够,是因为重定向符号 >>> 也是 bash 的命令。由于使用 sudo 只是让 echo 命令具有了 root 权限,但是没有让 >>> 命令也具有 root 权限,所以 bash 会认为这两个命令都没有向/etc/hosts写入信息的权限。

解决方法

使用命令sh -c

sh -c 命令,可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下:

1
sudo sh -c 'echo  "220.181.111.232 www.baidu.com" >> /etc/hosts'

使用命令tee

利用管道和 tee 命令,该命令可以从标准输入中读入信息并将其写入标准输出或文件中,具体用法如下:

1
echo  "220.181.111.232 www.baidu.com" | sudo tee -a /etc/hosts

注意: tee 命令的 -a 选项的作用等同于 >> 命令。如果去除该选项,那么 tee 命令的作用就等同于 > 命令。

参考文章

今天升级 ArchLinu 后发现 sudo 命令无法接收密码,即使正确的密码它也会返回 "密码错误" 的提示。修复方法有三个:

注销并重新登录会话

重新启动 Linux 系统是修复任何临时系统故障的最流行且最简单的解决方案之一。在最好的情况下,sudo 密码不起作用错误只是 Linux 中的一个临时故障,只需快速注销登录或重新启动系统即可神奇地修复它。

修改sudo密码

  1. 打开一个新的终端。
  2. 使用命令su, 切换到 root用户。
  3. 使用 passwd 命令,更改用户的sudo密码: passwd username

多数情况下我们习惯了某一密码,所以尽量不使用本方法修改密码。

重启systemd-homed服务

systemd-homed 是一个核心 systemd 服务,负责为用户的主目录提供支持。重新启动它可能会解决该问题,因为它会重置身份验证机制并可能修复任何临时系统故障。重新启动服务的步骤:

  1. 启动一个新终端。
  2. 使用 su 命令切换到 root
  3. 使用systemctl命令启动或重新启动systemd-homed服务:
    1
    2
    systemctl start systemd-homed.service
    systemctl restart systemd-homed.service

2025年01月03日, 使用此方法解决问题,建议使用此方法。

参考文章

最近在使用校园网时,发现这有限的流量消耗的特别快,其中一项就是自己维护这个博客。经过考虑,对此博客做一些优化.

屏蔽掉不需要源备份的文件

这时遵守一个原则:网站必备的文件,包括主题、基本配置和文章MarkDown文件, 其他的内容都不必存放在私人仓库中。屏蔽掉这些内容,可以极大的减少数据传输量,提高效率的同时,也节省的仓库空间。

.gitignore
1
2
3
.deploy_git/
public/
db.json
  • .gitignore: 这是一个git的配置文件,里面定义了不列入git管理的内容设置
  • .deploy_git: 这个应该是git部署用的文件。比如你写好的博客想部署到 GitHub Pages上去的话,可以用git部署插件,那个插件会创建这个目录. 为了确保每次增删博客时能够准确执行,则每次都要重建,所以它可以不用备份。
  • public: 这应该是hero编译之后的网站的目录, 每次生成博客都是存放在此处,所以其也不用备份。
  • db.json: 搜索插件的数据库文件,由于每次增删博客后它也是会发生变化,且可以随时生成,所以也不用备份。

设置主力仓库

原本在GitHub上建立了三个仓库,以https://fungzhenhua.github.io 作为主力, 最初的一个仓库准备弃用,辅助的博客如果也要同步更新就会产生双份的流量,这在目前不合算,于是准备将辅助博客间隔较长时间更新。

参考文章

大厂运营

厂商 网址 备注
cdnjs cdnjs.com cdnjs
jsdelivr www.jsdelivr.com jsdelivr
饿了么 npm.elemecdn.com 阿里云境内 CDN;未公开发布,曾经有段时间暂停回源;仅包含 npm(unpkg)
360奇舞团 cdn.baomitu.com 北京联通+上海电信;包含 cdnjs 以及 Google Fonts;好像有段时间没有更新了
字节跳动 cdn.bytedance.com 字节自家 CDN,电信:北京电信,移动:河北廊坊移动,联通:河北廊坊联通;境外:北京(但是依然很快);仅包含 cdnjs
又拍云赞助 www.zstatic.net 又拍云 CDN;仅同步 cdnjs

 

个人运营

个人 网址 备注
7ED Services www.7ed.net 非常全的镜像站,几乎啥都有;前端文件镜像 CDN 为境内华为云,境外 Vercel
jsdelivr mirror site / China Jsdelivr cdn.jsdmirror.com blog.jsdmirror.com 境内腾讯云 EdgeOne / 百度云,境外CF;反代 jsdelivr;挺好
webcache webcache.cn fonts: HK 单节点 反代 (电信绕日NTT,线路爆炸,不可用;移动CMI->HE,勉强能用;联通绕日NTT,勉强能用);ajax 阿里云CDN/CF;cdnjs 阿里云境内CDN/HK单节点;npm 阿里云境内CDN/HK单节点;github 阿里云境内
晓白/AKASS cdn.akass.cn 境内多吉云 CDN,境外 Cloudflare;回源使用自建 CDN;npm(unpkg), cdnjs, Github Raw, jsd;自建 CDN 偶有污染,被刷绕自建 CDN
玉兔/未闻花名静态资源加速 cdnjs.snrat.com 境内白山云 CDN,境外301官方;回源南方科技大
GamerNoTitle cdn.bili33.top Vercel反代jsdelivr
烧饼 u.sb/css-cdn Cloudflare 自选,速度一般,污染比官方严重,除了被墙的Gravatar,其他基本不如使用官方原版;cdnjs, Google Fonts, Gravatar
zkeq cdn.onmicrosoft.cn 全部使用cloudflare,打赢复活赛了。

Gravatar 镜像

镜像 网址 备注
Gravatar https://cravatar.cn/ 速度快
Weavatar https://weavatar.com/ 速度快

知名院校

镜像 网址 备注
南方科技大学 https://mirrors.sustech.edu.cn/help/cdnjs.html 速度快

路由器品牌或类型 后台登录 IP 后台登录网址 品牌官网
TP-Link 路由器 192.168.1.1 tplogin.cn www.tp-link.com.cn
D-Link 路由器 192.168.0.1 www.dlink.com.cn
华为路由器 192.168.3.1 consumer.huawei.com
192.168.101.1 consumer.huawei.com
荣耀路由器 192.168.3.1 www.hihonor.com
192.168.101.1 www.hihonor.com
网件(Netgear)路由器 192.168.1.1 routerlogin.com www.netgear.com.cn
华硕(Asus)路由器 192.168.1.1 router.asus.com www.asus.com.cn
192.168.50.1 router.asus.com www.asus.com.cn
小米路由器 192.168.31.1 miwifi.com www.miwifi.com
360安全路由 192.168.0.1 luyou.360.cn luyou.360.cn
192.168.100.1 luyou.360.cn luyou.360.cn
水星(MERCURY)路由 192.168.1.1 melogin.cn www.mercurycom.com.cn
腾达(Tenda)无线路由器 192.168.0.1 tendawifi.com www.tenda.com.cn
H3C 路由器 192.168.0.1 www.h3c.com
京东云无线宝路由 192.168.68.1 jdcloudwifi.com jdbox.jdcloud.com
ZTE 中兴路由 192.168.5.1 zte.home www.zte.com.cn
极路由 192.168.199.1 官网已关闭
Newifi 智能路由器 192.168.99.1 官网已关闭
斐讯(PHICOMM)路由 192.168.2.1 p.to 官网已关闭

Firefox 是 Linux 下最流行的浏览器,但是有时候访问网站会受到 DNS 污染,特别是有时候一些不良 DNS 服务返回的 IP 会跳转到广告、挂马的恶意网站。 为了避免上述情况,本文记录针对 Firefox 的关键配置。

启用基于 HTTPS 的 DNS

设置隐私与安全“基于HTTPS的DNS”启用策略增强防护Cloudflare(默认)

选择增强防护的原因

在上一节,启用方法中如果选择默认保护,则基于HTTPS的DNS是关闭的,这可能会导致有此DNS服务器返回被污染的IP. 如果选择最大保护, 则所有的网站都会使用基于HTTPS的DNS, 这会严重降低网站的访问速度。所以选择增强防护是一个折中的选择,它只在安全 DNS出现问题时才使用默认 DNS 解析器,因此这是一个兼顾速度和安全的方案。

Git 删除本地的所有分支

在本文中,我们将介绍如何使用Git命令来删除本地的所有分支。Git是一个非常流行的版本控制工具,可以帮助我们管理代码库的变更历史和分支。有时候,在开发过程中我们可能需要删除一些不再需要的本地分支。

查看本地分支

在开始删除本地的所有分支之前,我们首先需要查看目前的所有本地分支。我们可以使用以下命令来列出所有的本地分支:

1
git branch

这将会列出所有本地分支的列表,当前分支会被标记为一个特殊符号(通常是一个星号 *)。示例输出如下:

1
2
3
4
* master
feature-branch
fix-bug-branch
dev

在这个示例中,我们有四个本地分支:master、feature-branch、fix-bug-branch和dev。

删除指定分支

如果我们只想删除特定的本地分支,可以使用以下命令:

1
git branch -d <branch-name>

其中<branch-name>是要删除的分支名称。例如,要删除名为feature-branch的分支,我们可以运行以下命令:

确认删除操作后,该分支将被彻底删除。如果分支合并到了其他分支中,但是我们要强制删除某个分支可以使用以下命令:

1
git branch -D <branch-name>

删除所有本地分支

要删除本地的所有分支,我们可以使用以下命令:

1
git branch | grep -v "master" | xargs git branch -D

这个命令首先列出所有的本地分支,然后通过grep命令过滤掉master分支(我们通常不希望删除主分支)。接下来,xargs命令将每个分支名称作为参数传递给git branch -D命令,实现逐个删除。

删除所有已合并的本地分支

如果我们只想删除已经合并的本地分支,可以使用以下命令:

1
git branch --merged | grep -v "master" | xargs git branch -d

这个命令与上一个命令类似,只是使用了--merged参数来列出已经合并的分支。

删除除主分支外的所有本地分支

有时候,我们希望保留主分支(通常是master分支),而删除其他所有本地分支。我们可以使用以下命令来实现:

1
git branch | grep -v "master" | xargs git branch -D

这个命令与删除所有本地分支的命令类似,只是没有排除任何分支。

总结

在本文中,我们介绍了如何使用Git命令删除本地的所有分支。我们可以通过查看本地分支列表、删除指定分支以及删除所有分支来完成这个过程。如果你需要删除已合并的分支或者只保留主分支,我们也有相应的命令来帮助你完成。使用Git命令删除本地分支可以帮助我们保持代码库的整洁性和可维护性。

本文原始地址