0%

正则表达式

正则表达式 中的字符, 可以划分为 普通字符元字符, 其中, 元字符起到控制作用或者代表一个字符集等, 普通字符则表示其字面本义. 我们姑且将一个正则表达式的最小表意单元称为 "正则构造".

元字符可以分 4 个大部分进行介绍:

  1. 字符集: 用简短的正则构造来表示字符的集合
  2. 量词: 限定一个正则构造的重复次数
  3. 子表达式: 在一个表达式内部具有完整正则特性的子表达式
  4. 断言: 断定正则表达式外部情况的正则构造
阅读全文 »

C 语言的正则表达式

GNU 为 C 语言提供了 regex.h 头文件, 其目标代码已经包含在 glibc 中了.

GNUC regex 提供了两类接口, 一类属于标准的 POSIX.2 接口, 另一类则是 GNUC 的历史实现. 这两种实现都包含在一个头文件中, 当定义了 _POSIX_C_SOURCE 宏时, 将只会编译 POSIX.2 接口实现.

阅读全文 »

Docker 基本概念

Docker 和虚拟机有所相似也有所不同:

相似在于:

  • Docker 与 虚拟机 都可以将任务所用的资源隔离开, 不同的 Docker 容器或虚拟机之间的进程互不干扰.

不同在于:

  • Docker 使用的是系统内核, 而虚拟机则是使用虚拟化技术. 在运行过程中, Docker 对系统资源的占用是动态化的, 类似于一个特殊的"进程". 而虚拟机则是直接从系统中划走了额定的资源.
  • Docker 只隔离了程序的依赖关系, 没有隔离主机对程序的监控. 而虚拟机创造了一个独立的操作系统, 主机对该系统是完全隔绝的.

引用官方提供的示意图:

Docker VM
Docker Container Vitual Machine
阅读全文 »

Tmux 介绍

Tmux 是一个可在 Linux, MacOS 中运行的终端复用工具. 最直观的效果就是将终端一个屏幕划分成多个屏幕使用.

Tmux 的划分涉及到四个层次: Server, Session, Window, Pane.

其中, 一个 Linux 主机只能运行一个 Server, 其他的则是按照层次有着 一对多 的关系:

  1. 一个 Server 上可运行多个 Session
  2. 一个 Session 可包含多个 Window
  3. 一个 Window 可被划分为多个 Pane

看看下面这个示意图:

Tmux Intro

阅读全文 »

Travis CI

Travis CI 是 GitHub 上非常流行的 CI 工具.

在 Travis 中添加项目, 可以直接登录 GitHub 并添加公开仓库.
除了在 Travis 中配置项目之外, 还需要在仓库中添加 .travis.yml 配置文件.

每次 push 代码后, 就会触发 Travis 的检测, 根据 .travis.yml 文件的配置, 进行自动化的构建与发布.
构建和发布的命令行以 YAML 列表的形式写入 .travis.yml 中.

可以在 Travis 的网页上定义一些不希望公开的环境变量, 并在 .travis.yml 中以 ${varname} 的形式引用.

阅读全文 »

git loggit status 时, 如果文件与 commit message 中含有中文,
那么就可能出现乱码.

1
2
3
# git status 中的乱码

new file: "\350\247\243\345\206\263-conda-sslerror-\351\227\256\351\242\230.md"
1
2
3
# git log 中的乱码

<E4><BD><A0><E5><A5><BD><E4><B8><96><E7><95><8C>

对于 git status 中的乱码, 使用

1
git config --global core.quotepath false

来解决.

对于 git log 中的乱码, 使用

1
2
git config --global i18n.commitEncoding utf-8
git config --global i18n.logOutputEncoding utf-8

解决.

前者设置提交时, message 以什么编码保存.
后者设置查看时, message 以什么编码传递给查看器.

在 Windows 中文版系统中,
由于系统编码为 gbk (cp936).
虽然可以通过注册表修改 (最新的 Win10 将这个功能放进了 语言与区域 设置面板中)
但是很多上年纪的程序 (比如各种破解版商业软件) 可能会因此崩溃或乱码,
所以不建议更改.

对于 Windows 可以单独设置.

1
2
git config --global i18n.commitEncoding utf-8
git config --global i18n.logOutputEncoding gbk

如果对 utf-8 有特别的执念, 一定要设置 logOutputEncoding 为 utf-8 的话,
就修改查看器的编码, 定义环境变量

1
LESSCHARSET=utf-8

如果, 安装的 Git for Windows 是最小安装,
那么是不包含 less 程序的.
这样的话 LESSCHARSET 当然不起作用.
git log 会直接输出到终端.
这就必须设置为 gbk 才不会乱码了.

如果使用其他查看器,
从 less 类推, 修改相关的字符编码设置即可.

在我重装了一次系统之后,
我发现 Anaconda 用不了了.

1
2
3
4
5
6
7
8
9
> conda update conda
Solving environment: failed

CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/win-64/repodata.json>
Elapsed: -

An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
SSLError(MaxRetryError('HTTPSConnectionPool(host=\'mirrors.ustc.edu.cn\', port=443): Max retries exceeded with url: /anaconda/cloud/conda-forge/win-64/repodata.json (Caused by SSLError("Can\'t connect to HTTPS URL because the SSL module is not available."))'))
阅读全文 »

我在尝试给 Android 手机刷上 MIUI 国际版时, 在翻墙问题上遇到了一些障碍.

因为我之前尝试过的其他系统可以跳过 Google 登录, 也因此忽略了这个蛋疼的障碍. 我在刷 MIUI 之前忘记登出 Google 账号, 导致刷机后, 必须登录上一个使用此手机的 Google 账号才能进入系统.

但是, 由于网络原因, 必须翻墙才能登录 Google, 但是又必须进入系统才能安装并开启翻墙工具. 这就构成了死循环.

最终, 我使用了 Brook 的 socks5tohttp 功能, 并在 MIUI 设置页面登录 Wi-Fi 时设置了 HTTP 代理, 成功登录 Google.

阅读全文 »