0%

配置 latex -> pdf -> png 工具链

在编辑一些文档时,可能有用 latex 编译公式,转化成位图,插入文档的需求。有这么一条工具链的话,可以将这一套流程自动化,有利于简化工作流程。

阅读全文 »

User-Script 简易爬虫

一个爬虫至少需要完成这两个任务:

  1. 获取资源
  2. 解析资源

获取资源,我们可以用 fetch API 或更旧的 XHR API,解析资源则有 DOM API、JSON API、和 RegExp 对象。但这些工具进行解析的话步骤都比较复杂,只适合简单的数据处理。

而且由于浏览器的同源政策,绝大多数网页都是不能在异源站点抓取的。

因为以上提到的这两个劣势:

  • 弱数据处理
  • 同源政策

原生 API 爬虫的适用场景其实是基于 User Script 管理器运行的 页面增强工具。例如页面不提供一些资源的便捷下载方法,于是我们自己实现一个。

我们需要搞定这些问题:

  1. 利用浏览器的开发者工具抓包,确定需要请求的资源
  2. 用 fetch 请求资源
  3. 用原生 DOM API、JSON API 或 RegExp 解析数据
  4. 对于单独的文件,可以使用 Blob API 将数据下载;如果是文件,也可以将内容显示在页面上的新建元素中,或复制到剪贴板。
  5. 如果有多个文件,且存在文件夹,可以依次下载,也构造 zip 压缩文件。只是原生 JavaScript 不支持 zipfile,得找到一个读写 zip 文件的轮子,例如 JSZip
  6. 如果希望将数据发送到特定服务器,那么需要考虑同源政策、解决跨域问题。

并且希望依赖越少越好。

本文的使用环境为:

  • 浏览器:FireFox 68.*
  • 脚本管理器:Tampermonkey
阅读全文 »

Python 发送邮件

可以使用标准库模块 smtplib, 但这个只是一个客户端, 仍然需要登录到服务器.
例如 Outlook, Gmail 等, 需要开启 POP3 或 IMAP 支持.

阅读全文 »

Node.js HTTP 客户端与 HTML 解析

和 Python 下载器相比,Node.js 下载器在获取需要运行 JavaScript 代码才能得到的数据时更加方便,
毕竟它自身就是一个 JavaScript 解释器。

要使用 Node.js 编写爬虫应用,一般可以使用 axioscheerio 两个 npm 包,前者是一个易用的 ajax 封装,
后者则是简单化的 jQuery,用来查询 DOM。

另外,由于 axios 是异步执行的,一处异步,处处异步,需要将编码的思维和一般的 Python 有显著差异。

阅读全文 »

ANSI 转义序列(ANSI Escape Sequence)

ANSI 转义序列是一种用于控制终端输出的色彩、样式、光标位置以及控制终端行为的特殊字节.
它的使用方式就是通过 stdout 在字符串、字节中向外输出**Control当终端支持此转义序列的功能时, 就会呈现出相应的效果.
此功能常常用于终端的彩色输出、构建 Text User Interface 应用等.

ANSI 转义序列在 Linux、 MacOS 的各终端下得到了广泛运用, 但是在 Windows 系统上支持不佳.
不过 Microsoft 新出的 microsoft/terminal 很好地支持了 ANSI 转义序列,
现在就有了足够的动力去学习它了.

ANSI 转义序列使用 ASCII 码为 0x1b 的字节作为转义字符, 而不是通常使用的反斜杠转义符 \(0x5c), 这个字符是非打印字符,
被称为 ESC. 它在大多数编程语言中可以使用 \x1b\e 来输入.

转义序列采用了 \x1b[<code><tail> 这样的格式.

其中 \x1b[ 被称作 Control Sequence Introducer , 简称 CSI, 它是大多数 ANSI 转义序列的开头.
而字符 <tail> 则用于标志一个转义序列的结尾, 不同的 tail 对应不同功能. 在这两个组件之间的部分 <code>, 则是转义序列的具体内容.

阅读全文 »

Asynchronous Javascript And XML

如标题所述, ajax 就是 "异步的 JavaScript 与 XML", 它的作用就是在当前页面打开的情况下, 通过异步的方式从其他地址获取数据并通过 JavaScript 运算. 常用于动态更新页面.

阅读全文 »

本文记录了 SQLite3 的命令行工具用法, 以及一些常用的 SQL 语句.

速查表

表的建立与删除:

1
2
3
4
5
CREATE TABLE /* 表名 */
(
/* 列定义 */
);
DROP TABLE /* 表名 */;

数据的增查删改:

1
2
3
4
5
6
7
8
9
10
11
INSERT INTO /* 表 */ (/* 列 */)
VALUES
(/* 值 */),
(/* 多个值 */);

SELECT /* 列 */ FROM /* 表 */
WHERE /* 限定条件 */;

DELETE FROM /* 表 */ WHERE /* 限定条件 */;

UPDATE /* 表 */ SET /* 列=值 对 */ WHERE /* 限定条件 */;
阅读全文 »

Core Dump 是什么

Core Dump 是 Linux 系统在进程出现错误而中断时会产生的一种文件,
在其中储存了进程的内存状态, 寄存器状态, 调用栈等信息.

阅读全文 »