Skip to content

Commit 116b689

Browse files
committed
update
1 parent c95672c commit 116b689

File tree

6 files changed

+158
-24
lines changed

6 files changed

+158
-24
lines changed

design/color-space.md

+1
Original file line numberDiff line numberDiff line change
@@ -209,3 +209,4 @@ Sketch 不支持 CMYK,所以不能用于设计印刷品。
209209
## 参考文章
210210

211211
- [色彩空间基础](https://zhuanlan.zhihu.com/p/24214731)
212+
- [JIMMY CHEUNG - 色彩管理](https://www.zhangxiaochun.com/color-space-3/):这篇文章记录了如何选择合适的色彩空间

linux/sed.md

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# sed
22

3-
BSD sed 和 GNU sed 的异同,参考 https://riptutorial.com/sed/topic/9436/bsd-macos-sed-vs--gnu-sed-vs--the-posix-sed-specification
3+
BSD sed 和 GNU sed 的异同,参考 [BSD/macOS Sed vs. GNU Sed vs. the POSIX Sed specification](https://riptutorial.com/sed/topic/9436/bsd-macos-sed-vs--gnu-sed-vs--the-posix-sed-specification) ([链接备份](https://web.archive.org/web/20221013094813/https://riptutorial.com/sed/topic/9436/bsd-macos-sed-vs--gnu-sed-vs--the-posix-sed-specification))
44

55
## -i 参数不一致
66

@@ -69,13 +69,12 @@ fi
6969
- `<<<"red green" sed -E 's/(.+) (.+)/\\033[31m\1\\033[32m \2\\033[0m/'`
7070
- `<<<"red green" sed -E 's/(.+) (.+)/\e[31m\1\e[32m \2\e[0m/'`
7171

72-
颜色字符是通过 [ASCII Escape 字符](../others/ascii.md) 来控制终端的字符颜色显示的。
72+
颜色字符是通过 [ASCII 转义序列](../others/ascii-and-ansi.md) 来控制终端的字符颜色显示的。
7373

74-
`\033` 是八进制的,`\e` 是一个转义序列的前缀,用于表示 ASCII Escape 字符。
75-
而这些前缀不是所有编程语言和环境中都支持的转义序列,在使用时需要查看相关的文档或资料。
76-
77-
sed 就不识别 `\033``\e`,但是 sed 自 [GNU sed v3.02.80 起](https://stackoverflow.com/a/7760752/4622308)就支持十六进制,因此可以用十六进制的 `\x1b` 来表示八进制的 `\033`
74+
转义序列是由 `ESC` + `[` + 其他字符组成的序列。其中 `ESC` 的表示方法有很多,详见[这篇文章](../others/ascii-and-ansi.md#ascii-escape-字符)
75+
进制表示法和转换见[这篇文章](../math/positional-notation.md)
7876

77+
sed 就不识别 `\033``\e`。但是 sed 自 [GNU sed v3.02.80 起](https://stackoverflow.com/a/7760752/4622308)就支持十六进制,因此可以用十六进制的 `\x1b`
7978
所以有效写法是 `<<<"red green" sed -E 's/(.+) (.+)/\x1b[31m\1\x1b[32m \2\x1b[0m/'`
8079

8180
另外比如 `\0` (expect NUL) 在 sed 里也不支持,需要用十六进制的 `\x0``\x00` 表示。

math/positional-notation.md

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# 进制表示法
2+
3+
| 进制 | 下标表示法 | 前缀表示法 | 后缀表示法 |
4+
|------------------------|--------------|----------------------|--------------------|
5+
| 二进制 (binary) | (1001)<sub>2 | `0b1001``0B1001` | `1001b``1001B` |
6+
| 八进制 (octal) | (17)<sub>8 | `017` | `17o``17O` |
7+
| 十进制 (decimal) | (10)<sub>10 | 无前缀 | `10d``10D` |
8+
| 十六进制 (hexadecimal) | (1F)<sub>16 | `0x1F``0X1F` | `1fh``1FH` |
9+
10+
八进制的前缀法跟数字 0 过于相似,因此比较少使用。
11+
八进制的后缀法跟十进制的过于相似,因此比较少使用。
12+
13+
## 进制转换
14+
15+
### printf 命令转进制。
16+
17+
- `%d``%i` 转换成有符号的十进制
18+
- `%u` 转换成无符号的十进制
19+
- `%o` 转换成无符号的八进制
20+
- `%x` 转换成无符号的十六进制(小写字母)
21+
- `%X` 转换成无符号的十六进制(大写字母)
22+
23+
### bc 命令转换任意进制。
24+
25+
- 转成四进制 `echo "obase=4; 100" | bc`
26+
- 转成八进制 `echo "obase=8; 100" | bc`
27+
- 转成十二进制 `echo "obase=12; 100" | bc`
28+
- 转成十六进制 `echo "obase=16; 100" | bc`
29+
- 八进制转十进制 `echo "ibase=8; 100" | bc`
30+
- 二进制转十六进制 `echo "ibase=2; obase=16; 11000000" | bc`

others/archive-webpage.md

+31-18
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,43 @@
1-
## 永久链接
1+
# 永久链接
22

3-
互联网没有永久存在的资源,终有一天你会发现原来的资源内容改变,甚至消失。
4-
最可以信赖的只有 archived 服务。这类服务在自身存活的时间内,永久保存网页当时的内容快照。
3+
互联网没有永久存在的资源,终有一天你会发现原来的域名过期了,网页内容布局修改了,资源搬迁甚至直接消失。
54

6-
### 使用场景
5+
相对可以信赖的只有 archived 服务。这类服务在自身存活的时间内,永久保存网页当时的内容快照。
6+
7+
## 使用场景
78

89
1. 当你打开某网络资源,发现它已经失效了。可以到 archived 服务查看是否有备份。
910
2. 当你引用某网络资源,担心有一天它会失效。可以备份到 archived 服务,从而引用备份链接。
1011

11-
### 推荐服务
12+
网络资源包括网页、图像、声音、电子书等一切数字资源。
13+
14+
## 推荐服务
1215

13-
#### https://archive.org/
16+
## Internet Archive
1417

15-
保存的页面来自用户提交的和自动抓取的。
18+
https://archive.org/
1619

1720
优点:
1821

1922
1. 资金稳定,所以该服务的存活时间最稳定
23+
2. 支持自动抓取。
24+
3. 支持保存网页的同时备份页面截图。
2025

2126
缺点:
2227

2328
1. 生成的链接长度很长
2429
2. 阅读体验不够好
2530

26-
#### https://archive.today/
31+
推荐使用浏览器插件,查询和保存都很方便。
2732

28-
曾经的 [archive.is](https://www.wikiwand.com/zh/Archive.is),现在的 Archive.today。
33+
- [Chrome](https://chrome.google.com/webstore/detail/wayback-machine/fpnmgdkabkmnadcjpehmlllkndpkmiak)
34+
- [Firefox](https://addons.mozilla.org/en-US/firefox/addon/wayback-machine_new/)
35+
- [Safari](https://apps.apple.com/us/app/wayback-machine/id1472432422)
36+
- [Edge](https://microsoftedge.microsoft.com/addons/detail/wayback-machine/kjmickeoogghaimmomagaghnogelpcpn)
2937

30-
保存的页面只来自用户提交的,不自动抓取。
38+
## Archive Today
39+
40+
曾经的 [archive.is](https://www.wikiwand.com/zh/Archive.is),现在的 Archive.today。
3141

3242
优点:
3343

@@ -38,19 +48,18 @@
3848

3949
缺点:
4050

41-
1. 私人资助,服务器在法国,因此可能不稳定
51+
1. 私人资助,服务器在法国,因此可能不稳定。
52+
2. 域名会动态变。
53+
3. 每次使用都要验证校验码,很麻烦。
54+
4. 保存的页面只来自用户提交的,不自动抓取。
4255

4356
它还有其他几个域名,都指向同一个服务。
4457

4558
- https://archive.ph/
4659
- https://archive.is/
4760
- https://archive.md/
4861

49-
#### https://perma.cc/
50-
51-
一个比较新的 archived 服务。界面很友好。只是不知道稳不稳定
52-
53-
### 快捷使用
62+
### 浏览器书签
5463

5564
不需要安装浏览器插件,只需要创建浏览器书签。
5665

@@ -66,7 +75,11 @@
6675

6776
点击书签即可将当前页面保存到 Archive.today。
6877

69-
### 参考文章
78+
## https://perma.cc/
79+
80+
一个比较新的 archived 服务。界面很友好。只是不知道稳不稳定
81+
82+
## 参考文章
7083

7184
- [留下证据:如何存档开源材料?](https://archive.ph/yuVm7)
72-
- [个人博客存入互联网博物馆Archive.org](https://archive.ph/9fgTy)
85+
- [个人博客存入互联网博物馆 Archive.org](https://archive.ph/9fgTy)

others/ascii-and-ansi.md

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# ASCII 与 ANSI
2+
3+
## ASCII 与 ANSI Code
4+
5+
| | ANSI Code | ASCII |
6+
|----------|----------------------|-------------------------------|
7+
| 管理组织 | 美国国家标准协会 | 美国信息交换标准代码 |
8+
| 字符集 | 256 | 128 |
9+
| Bit | 8-bit | 7-bit |
10+
| 一致性 | 根据系统上下文有区别 | 每个系统都用同一套 ASCII 码点 |
11+
| 标准化 | No | Yes |
12+
13+
- ANSI 编码 (ANSI Code)
14+
- ANSI 编码是由美国国家标准协会 ((ANSI: American National Standards Institute) 制定的标准化的数字或字母标识符。
15+
- 美国国家标准协会是负责制定美国国家标准的非营利组织。
16+
- ANSI 编码是 ASCII 的超集。包含了 ASCII 字符,使用 8 位二进制,扩展到 256 个字符。
17+
- ANSI 编码在 1991 年被 Unicode 代替了。
18+
- ASCII
19+
- 这套编码共有 128 个字符,由 7 位二进制进行编号。
20+
- 其中 0~31 号,加上最后的 127 号 Delete 字符是 33 个不被显示的控制字符。其余 95 个字符正好与标准键盘符合。
21+
22+
参考文章
23+
24+
- [Difference between ANSI and ASCII](https://www.tutorialspoint.com/difference-between-ansi-and-ascii) ([链接备份](https://web.archive.org/web/20230226201600/https://www.tutorialspoint.com/difference-between-ansi-and-ascii))
25+
26+
## ANSI 转义序列
27+
28+
虽然 ANSI 编码已成历史,但是 ANSI 转义序列保留至今。现在绝大多数终端都依然支持转义序列。
29+
30+
ANSI 转义序列 (ANSI Escape Sequences) 是一种带内信号 ([In-band signaling][]) 的转义序列标准,用于控制视频文本终端上的光标位置、颜色和其他选项。
31+
32+
控制序列 (Control Sequence)
33+
34+
- ESC - sequence starting with ESC (\x1B)
35+
- CSI - Control Sequence Introducer: sequence starting with ESC [ or CSI (\x9B)
36+
- DCS - Device Control String: sequence starting with ESC P or DCS (\x90)
37+
- OSC - Operating System Command: sequence starting with ESC ] or OSC (\x9D)
38+
39+
- Ctrl-Key 字符 `^[`
40+
41+
## ASCII Escape 字符
42+
43+
Escape (ESC) 字符的表示方法有很多:
44+
45+
- 十六进制的 `0x1b``0x1B`
46+
- 八进制的 `\033` 表示。
47+
- Unicode 字符 `\u001b`
48+
- 十进制 `27`
49+
- 固定字符 `\e`
50+
51+
注意这些字符表示法并不是所有程序或设备都支持,需要看情况使用。
52+
53+
54+
[In-band signaling]: https://www.wikiwand.com/en/In-band_signaling

others/makefile.md

+37
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
<!-- MarkdownTOC GFM -->
77

8+
- [参考资料](#参考资料)
89
- [命令回显](#命令回显)
910
- [变量赋值](#变量赋值)
1011
- [target 作用域的变量定义](#target-作用域的变量定义)
@@ -16,9 +17,16 @@
1617
- [$shell 变量为何是空?](#shell-变量为何是空)
1718
- [在 target 内部使用条件判断](#在-target-内部使用条件判断)
1819
- [在 target 内部赋值变量](#在-target-内部赋值变量)
20+
- [注意 &&](#注意-)
1921

2022
<!-- /MarkdownTOC -->
2123

24+
## 参考资料
25+
26+
- https://www.cnblogs.com/peterYong/p/15030385.html
27+
- https://makefiletutorial.com/
28+
- [陈皓 - 跟我一起写Makefile](https://seisman.github.io/how-to-write-makefile/)
29+
2230
## 命令回显
2331

2432
默认情况下会把每个执行命令(包括注释)都回显到终端。可以在开头加一个 `@` 来阻止回显。
@@ -191,3 +199,32 @@ endif
191199

192200
**但这种方法存在问题!**,不要使用 `$(eval)` **在 target 内部**赋值变量!你应该使用 shell 语法来操作变量。
193201
原因见[珍爱生命,远离 ifeq](#珍爱生命远离-ifeq)
202+
203+
204+
## 注意 &&
205+
206+
```make
207+
.PHONY: a
208+
a:
209+
@[[ -n '' ]] && echo 1
210+
```
211+
212+
`make a` 会报错。因为 `[[ -n '' ]]` 的退出码是非 0 的,于是 `[[ -n '' ]] && echo 1` 整行的退出码也是非 0 的。即报错。
213+
214+
解决方案:
215+
216+
要么这么写
217+
218+
```make
219+
.PHONY: a
220+
a:
221+
@[[ -n '' ]] && echo 1 || true
222+
```
223+
224+
要么这么写
225+
226+
```make
227+
.PHONY: a
228+
a:
229+
@if [[ -n '' ]]; then echo 1; fi
230+
```

0 commit comments

Comments
 (0)