CMake项目结构模板
整体结构
1 | . |
1 | . |
由于网内网络环境的问题,ubuntu不换源的话基本没法用,我们首先参考普通 ubuntu 系统如何换源,然后将其转换成命令形式,便于应用于 Dockerfile 中。
随便在网上搜 "ubuntu换源",可以搜出一大堆教程,这里我们直接参考阿里云开源镜像站的官方教程,官方教程中给出了操作办法,就是手动将所有的源地址替换为阿里云的镜像地址:

首先我们使用 docker 跑一个 ubuntu 的镜像看下基本情况:
1 | docker run -it --rm ubuntu:20.04 /bin/bash |
注:后面也会写一个笔记记录常用的 docker 命令。
在 ubuntu 下使用 sudo apt-get install xxx 安装软件,所有
apt 相关的配置项存储在 /etc/apt
文件夹下,其内容如下

最近需要在服务器上跑模型,需要长时间运行,但是服务器是通过 ssh
连接的,如果我们中途断开连接,正在跑的代码也会自动关闭。实在是有点整蛊,要想
ssh 断开连接后代码还可以继续执行,需要使用 nohup 命令。
使用 nohup --help,我们可以得到帮助信息
1 | (base) ➜ ~ nohup --help |
其中第三行解释了 nohup 命令的作用
Run COMMAND, ignoring hangup signals.
从描述中我们可以看到,其作用其实很简单,就是忽略 hup
信号。那么现在问题来了,hup 信号是什么?有什么作用?
zerotier 可以将不同局域网下的主机连接到同一个虚拟局域网内(即内网穿透),使用之前需要注册一个 zerotier账号,所有对虚拟网络的操作(设备管理、ip设置等)都需要在 web 端进行。官方网址:https://www.zerotier.com/
注:zerotier 服务器在国外,访问的时候可能需要挂梯子。
进入官网

点击右上角的 Sign Up 按钮就可以进入注册页面
在 Windows 下跑 Python 深度学习代码时,需要编译 C++ 库(点名 Pytorch3d),但是使用最新版本的 MSVC 进行编译的时候会报错,去 Github 看 Issue 时有提到降级可能有效,我们可以通过添加组件的方式直接下载指定版本的 MSVC 编译器。然后手动修改进行切换。为了怕后面遇到类似问题时忘记怎么搞,还是简单记录一下吧,具体操作如下:
首先打开 Visual Studio Installer,点击 修改 按钮

刷牛客时经常能刷到面向对象相关的题目。多态作为面向对象中的重要特性(封装、继承和多态),在八股中经常考察其实现原理。为了方便理解,先给出一个简单的多态样例:
1 | class A { |
接下来是一个经典示例:调用不同性质的函数并打印输出:
1 | int main(int argc, char **argv) { |
Encodings should be known, not divined.
在前一篇我们使用 pandoc 的 lua filter 解决了 markdown 转 html 中链接问题,但是在调试代码的过程中发现了一个问题,在不同的 shell 中执行 lua 脚本时,输出中文有时会乱码,有时又不会乱码,搞得有点烦,本篇就针对字符串问题做一个探究,搞清楚乱码的源头以及解决方案。
首先看一个简单的示例,下面是一段简单的 C 语言 hello world
1 | #include <stdio.h> |
文件保存格式为:UTF-8(注意看 vscode 的右下角,写着
UTF-8)

参考官方文档,我们有两种创建插件方式
对于一般的插件而言,如果代码并不复杂且依赖较少,可以直接写成脚本形式,放在
hexo 根目录下的 scripts
文件夹即可(不存在直接创建一个即可),在介绍插件具体写法之前,先看一个简单的例子:
文件:scripts/test.js
1 | hexo.extend.filter.register('before_post_render', (data) => { |
然后执行下列命令查看效果
1 | hexo clean && hexo generate --debug |
这一条命令包含两个子命令,hexo clean
清除之前的生成文件,之后的 hexo generate
用来生成静态页面文件。
(--debug 标志会使 hexo 在终端显示调试信息,在所有的
hexo-cli 命令中都可以使用)
之前我们已经配置好了 hexo 对 LaTeX 公式的支持(在 markdown 的 Front
Matter 中添加 mathjax: true 开启 LaTeX
公式渲染支持),支持两种形式的公式输入
内联公式(inline),通过 $...$
进行包裹(必须在同一行)
例:markdown 代码 $\phi = 30$ 对应内联公式渲染结果 \(\phi = 30\)
在 $
和公式之间不能存在空格,也就是说,对于$ \phi = 30 $
并不能得到正确的渲染结果
块公式(block),通过 $$...$$
进行包裹(两个$$必须在不同行)
例:markdown 代码
1 | $$ |
对应块渲染结果 \[ \int _0 ^ \pi \sin x = 2 \]
现在我们可以在 markdown 文档中添加并渲染公式了,那么下一步就是如何正确书写公式,以及一些常用公式符号。
之前都是在知乎上写博客,这样看的人也多,方便讨论,但是知乎的 markdown 编辑器不是很好用,本地写完后还需要一张一张上传图片,太麻烦了,就自己搭一个博客,又不想进行域名备案啥的,服务器也要出钱 :( 。最后搜到 Github 有提供免费的静态页面部署功能,这样写完 markdown 笔记可以直接上传到 Github,还可以通过网页访问,nice!(白嫖的感觉真好)
通过 Github Pages,我们可以将
markdown
撰写的笔记转换成静态网页,并进行部署。其创建流程也十分简单,只需要创建一个名为
<username>.github.io 的仓库,如下图所示

此处我们选择的是 Private 仓库,只有我们能进行修改,但是主页是公开访问的,这样可以保证笔记源文件安全 :) 。