#325 DNS 基础

2019-07-22

域名

Class rdataclass

RESERVED0 = 0
IN = 1
INTERNET = 1
CH = 3
CHAOS = 3
HESIOD = 4
HS = 4
NONE = 254
ANY = 255

Type rdatatype

  • A IPv4 Address
  • AAAA IPv4 Address
  • CNAME Canonical Name,“规范名称”,其实就是别名,指向另一个域名。MX 记录和 NS 记录不能指向一个 CNAME 记录。
  • NS Name Server,权威 DNS 服务器位置。
  • MX Mail Exchange,邮件服务位置。
  • SRV 通用的服务类型记录,取代 MX 这种专用记录。
_xmpp-client._tcp.example.net. 86400 IN SRV 5        0      5222 example.net.
_xmpp-server._tcp.example.net. 86400 IN SRV 5        0      5269 example.net.
#                              TTL          Priority Weight Port
  • TXT
  • SOA Start Of Authority,权威记录起始
  • PTR 反解记录

反解记录

记录名称:IP 翻转过来,加上 .in-addr.arpa 后缀
记录类型:PTR

dig -x 106.75.80.125
dig +noall +answer -tPTR 125.80.75.106.in-addr.arpa

完整的 DNS 解析过程

  1. 找到权威服务器

Windows

nslookup
ipconfig /displaydns
ipconfig /flushdns

Linux

dig markjour.com A
dig @8.8.8.8 markjour.com

dig qq.com MX
dig MX qq.com
dig -t MX qq.com
dig +noall +answer qq.com
dig +short qq.com
dig qq.com ANY

dig +trace +nssearch markjour.com

DNS 请求和响应

  • header 2Bytes
Field Bits Desc
QR 1 query 0, reply 1
OPCODE 4 QUERY 0, IQUERY 1, STATUS 2
AA 1 Authoritative Answer
TC 1 TrunCation
RD 1 Recursion Desired
RA 1 Recursion Available
Z 3 Zero 填零,保留
RCODE 4 Response Code

RCODE:

  • NOERROR (0)
  • FORMERR (1, Format error)
  • SERVFAIL (2)
  • NXDOMAIN (3, Nonexistent domain)

  • body

  • question

    Field Bits Desc
    NAME 可变 资源名称
    TYPE 2 记录类型
    CLASS 2 Class Code

    CLASS Code rdata.class

    RESERVED0 = 0
    IN = 1
    INTERNET = 1
    CH = 3
    CHAOS = 3
    HESIOD = 4
    HS = 4
    NONE = 254
    ANY = 255
    
  • answer

  • authority
  • additional space

请求

响应

参考资料与拓展阅读

#324 LaTeX

2019-07-21

TeX

/tɛx/

TeX 是计算机科学领域传奇人物高德纳教授 1978 年在完成《计算机程序设计艺术》(The Art of Computer Programming)一书时顺手开发出来,理由是当时的计算机排版技术会影响这本书的印刷质量。而且,与 TeX 一同发明出来的还有一种用于定义矢量字体的编程语言 Metafont,不过这种语言并没有被广泛使用,毕竟字体开发者多半是做美术设计的人,应该在理解编程方面有很大的障碍。

TeX 是很多领域的出版物排版领域都是事实标准,这个名字可以指相关排版系统,也可以指那套排版系统所使用的语法。

TeX 是一个共有领域项目,鼓励别个自己改进完善这个项目。而且其项目管理特别有意思,规定 3.0 做功能冻结,之后按照 π 的小数位来版本更新,只做 BUG 修复,在作者(高德纳)死之后,版本修改为 π,然后剩下的错误修复都当作是新功能来提交。

最知名的 TeX 发行版:TeX Live,它由 TeX User Group 发布,是目前大多数 Unix-like 机器上默认的 TeX 版本。Tex 引擎作为其核心(可以认为是现在的官方版本吧),另外还包含必要字体和相关工具(最重要的是 TeX 编辑器),可能还有一些重要拓展,比如 XeTeX(Unicode 和现代字体技术支持)、LuaTeX(内置 Lua 支持) 等。

其他:

  1. TeX 输出设备无关的 DVI 文件,用来显示和打印都行。
  2. 老爷子还设计了 Plain TeX 对 TeX 进行一种封装,或者说一组宏集。

LaTex

/ˈlɑːtɛx/

LaTeX 算是 TeX 的派生软件,使用 TeX 作为排版引擎,当前的版本是LaTeX2e。

我的理解:LaTex 是在 TeX 上面附加了一组宏集,进一步屏蔽了 TeX 层的复杂性,简化了 TeX 的使用。

由于 TeX 可以认为是领域编程(DSL),而这个库里面有各种预订的规则,然后基于这些预设规则,我们可以很容易完成排版,比如有一个包描述了象棋棋谱相关规则,我们就可以通过简单的几句描述一个棋盘。

其内容与样式分离的设计思路有点类似 HTML + CSS,或者说 XML + XSL,通过命名空间定义一组标签,然后 XML 使用这组标签写文档,最后 XSL 上来渲染。LaTeX 完成了很多领域命名标签的定义,然后还有预定义的各种样式,基本上只需要采用相关语法写自己的文档就行。

常用语法

参考资料与拓展阅读

#323 Facebook 数字货币项目 Libra 的国会听证会

2019-07-16

背景:美国国会叫停 Facebook 数字货币项目

今天的听证会上,小扎声明:

  1. 在获批之前,不会继续推动项目;
  2. 上线之后一定会配合监管,确保不被用于洗钱和恐怖主义融资。

有意思的是,他特意提到中国,表示如果一再受阻,中国央行会抢在他们前面有所动作(可能是说推出数字货币)。

值得注意的是,Libra 项目的几个重要合作者,包括 eBay、PayPal、Stripe、Visa、MasterCard,已经退出了。

#322 美国国会叫停 Facebook 数字货币项目

2019-07-03

目前 Facebook 已经联合了万事达、Visa、PayPal、Uber、Lyft、Spotify 等在内的共 28 家公司,组建总部位于瑞士 Libra 合作组织(数字货币 Libra / 数字钱包 Calibra)。

  1. 通过去中心化的、可编程的数据库来支持小波动的加密货币(稳定币)
  2. Libra 核心代码托管在 GitHub,采用 Apache-2.0 开源许可证

美国众议院财政服务委员担忧此项目会导致新全球金融体系的建立,对美国货币政策产生干扰,甚至影响美元地位,故而向扎克伯格等 Facebook 高管致函,要求其立即停止该项目所有工作。

关联事件:2019/07/16 参议院就 Libra 项目举行听证会

#321 Gitlab 从 12.1 版本开始将不再支持 MySQL

2019-07-03

看到新闻,Gitlab 从 12.1 版本开始将不再支持 MySQL,理由是:

Gitlab 支持的另一个数据库是 PostgreSQL,意思是 PostgreSQL 不存在上面的问题。
这也可以看作是二者的部分区别吧!

值得研究研究。

#320 ImageMagick 与中文渲染问题

2019-06-22

为什么 convert 和 montage 命令中使用的汉字都没能正确渲染在图片中去呢?
或许,可以将本文中的中文替换成 non-ascii 字符,或者 Unicode 字符。
或许,也可将 ImageMagick 替换成其他不支持中文的库。

参考了实在是太多文档,都没来得及记下来,只是从 Shell 的历史纪录中翻出来这些命令,做一个记录。

结论

字体问题,必须选择包含中文字形的字体,使用完整的字体名称,比如:Noto-Sans-Mono-CJK-SC-Regular

#316 JavaScript Unicode 问题

2019-06-20
function base64EncodeUnicode(str) {
  // First we escape the string using encodeURIComponent to get the UTF-8 encoding of the characters,
  // then we convert the percent encodings into raw bytes, and finally feed it to btoa() function.
  utf8Bytes = encodeURIComponent(str).replace(
    /%([0-9A-F]{2})/g,
    function (match, p1) {
      return String.fromCharCode("0x" + p1);
    },
  );

  return btoa(utf8Bytes);
}
x.decode('utf-8').encode('raw_unicode_escape').decode('ascii')[2:].strip('0')