Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
edc849b
misc: add question about proxy when init nuxt and View_Transitions_API
Linhieng Aug 26, 2024
d050c4f
misc: add note about nvm download issue
Linhieng Aug 28, 2024
b8e6139
misc: the solution about window reinstall
Linhieng Sep 4, 2024
5942396
misc: add note about cmd and powershell command
Linhieng Sep 20, 2024
9eab002
misc: add method about timing mute in win10
Linhieng Sep 26, 2024
11319a2
misc: window cmd `net user`
Linhieng Oct 9, 2024
4a72a4a
misc: add note about vscode settings
Linhieng Oct 21, 2024
c211fb0
misc: about command 'cd' in window
Linhieng Oct 21, 2024
4171fb2
misc: add note about pnpm store
Linhieng Nov 1, 2024
65db29a
misc: note about pdf2word
Linhieng Nov 3, 2024
d65a209
misc: notes about VBA of Microsoft
Linhieng Nov 14, 2024
50314a6
misc: quick start of electron
Linhieng Nov 15, 2024
0865c8f
misc: docs
Linhieng Nov 15, 2024
0419b29
misc: notes about js `import()` and __dirname
Linhieng Nov 17, 2024
0bedf17
misc: add VBA method to assign shortcut for specific command in Word
Linhieng Nov 25, 2024
afdee1f
docs(misc): add tips for Windows 11 installation and activation
Linhieng Nov 29, 2024
ea6c243
docs(misc): update README with new information and tips
Linhieng Jan 3, 2025
d00b474
docs(misc): 添加使用 Python 和 Selenium 爬取动态页面的指南
Linhieng Jan 3, 2025
9099fdc
docs(misc): add various Python tips and tricks
Linhieng Feb 18, 2025
44bc999
docs(misc): add PyInstaller packaging instructions for Flask-SocketIO
Linhieng Apr 10, 2025
04327c6
backup
Linhieng Apr 11, 2025
9056683
docs(misc): update subprocess example in README
Linhieng Apr 15, 2025
f892486
docs(misc): add information about Python subprocess and threading
Linhieng Apr 16, 2025
ba1f47a
docs(misc): 整合 PDF 命令行工具笔记
Linhieng May 14, 2025
e3a23ba
docs/misc: add example for merging multiple PDF files
Linhieng May 20, 2025
a4765aa
backup
Linhieng Aug 7, 2025
11d5b16
backup
Linhieng Aug 18, 2025
22c86fa
backup
Linhieng Oct 16, 2025
e3af3ef
backup
Linhieng Dec 2, 2025
8ffe0db
pdftk updates
Linhieng May 29, 2026
07394d9
backup
Linhieng Jun 13, 2026
7d44e22
backup
Linhieng Jun 16, 2026
e303940
backup
Linhieng Jun 17, 2026
aa917fd
backup
Linhieng Jun 17, 2026
ece609c
rename
Linhieng Jun 17, 2026
71686a9
backup
Linhieng Jun 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"cSpell.words": [
"exiftool"
]
}
1,409 changes: 1,409 additions & 0 deletions misc/README.md

Large diffs are not rendered by default.

116 changes: 116 additions & 0 deletions misc/python.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
[window 命令行安装 miniconda](https://www.anaconda.com/docs/getting-started/miniconda/install/windows-cli-install),记得在命令行设置代理

### pip 镜像源

推荐安装 miniconda,从[清华镜像源](https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/)安装。

```sh
# 设置默认清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn

pip config list
# 查看配置,具体文件通常在 C:\Users\k\AppData\Roaming\pip\ 中的 pip.conf 或 pip.ini

pip config unset global.index-url
# 取消设置清华源
```

### conda 镜像源

conda 的包是按「频道」分类管理的,不同的包存在不同的频道下,必须全部配置才能保证下载完整。

```sh
conda config --set show_channel_urls yes
# 安装时显示频道源地址,方便排查

# 配置清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
# 主频道,存放 Python、conda 工具等核心包
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
# 社区维护的第三方包频道,绝大多数 Python 库都在这里,是最常用的扩展频道
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
# 存放平台的编译工具链,比如 gcc、make,部分包编译需要依赖它
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
# 存放 R 语言相关的包(如果不做数据分析也可以不配置)


conda config --show channels
# 查看源
conda config --remove-key channels
# 删除所有源,恢复默认
```

### pipdeptree

该依赖包按层级查看安装的依赖包

```sh
pipdeptree | grep -E '^\w+'
pipdeptree | findstr /B /R /C:"^[^ ]"
# linux / window 查看顶级安装包
```

### conda 管理虚拟环境

miniconda 和 anaconda 区别只在于后者预装了许多数据处理的依赖包,而且提供了GUI图形化界面,适合新手。

```sh
conda env list
conda info --envs
# 两种方式查看所有环境

conda create -n k python=3.12 numpy requests
# 创建虚拟环境,-n 指定名称,后面带预装包
# 必须指定Python版本,不然会使用默认环境中的Python版本,这样包环境就错乱了
# 如果只创建了虚拟环境,忘记安装python,可以手动安装 conda install python=3.12
conda list python
# 查看当前环境下的 Python 版本
where pip
# 查看 pip 所在位置

conda activate k
# 激活虚拟环境

conda deactivate
# 退出当前环境


# conda 没有改虚拟环境的功能,可以使用克隆实现类似效果
conda create -n newname --clone oldname
# 1. 克隆oldname环境为newname
conda remove -n oldname --all
# 2. 删除旧环境
```

- conda 的 Anaconda Prompt 本质上只是一串快捷运行方式,内容是 `%WINDIR%\System32\cmd.exe "/K" C:\Users\k\miniconda3\Scripts\activate.bat C:\Users\k\miniconda3`。
- 照猫画虎,可以自己修改为使用 pwsh 启动,内容是 `"C:\Program Files\PowerShell\7\pwsh.exe" -ExecutionPolicy ByPass -NoExit -Command "& 'C:\Users\k\miniconda3\shell\condabin\conda-hook.ps1'`
- conda 并不推荐直接把路径写死在环境变量中,而是采用脚本的方式写入环境变量

简单解释一下 conda 的脚本逻辑,以 pwsh 为例:
- 初始化时,conda 会在 pwsh 配置文件中写入一串脚本,该脚本让 conda 生成适用于 pwsh 的初始化脚本文本,
- 可以执行 `& "C:\Users\k\miniconda3\Scripts\conda.exe" "shell.powershell" "hook"` 看看生成的脚本文本是怎样的
- 简单来说就是定义了 conda 的环境变量,并注册了一个 conda 函数(命令)
- 最后执行脚本文本,伪代码就是 `conda.exe shell.powershell hook | Invoke-Expression`。

```sh
conda config --set auto_activate true
# 初始化时,允许自动激活环境,但在 cmd 中无法生效,在pwsh中可测试生效
# 原因是 conda 在 cmd 配置,只是在注册表中添加了 hook
conda config --set default_activation_env k
# 设置默认激活的虚拟环境
conda init
# 执行配置

conda init --reverse
# 恢复默认配置文件
# 其中 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun 用于设置启动 cmd 时自动执行的命令
# 修改注册表时,记得重启 explorer.exe,不然很多东西读的还是缓存(比如 win+r 运行),不过在 WT 中新建时读取的是最新信息

```

注意:在新建虚拟环境中,依旧可以调用到 base 中的命令,原因是 path 环境变量导致的。
新建虚拟环境时:
- 会把 `k\Scripts`、`k\Lib\site-packages` 加到 PATH 的最前面(优先调用虚拟环境里的工具)
- 但不会删除原来的 PATH 路径,包括 `miniconda3\Scripts`、`miniconda3\Lib\site-packages` 这些 base 环境的路径
具体可以通过 where 来查看调用的具体路径,比如 `where python`、`where pip`。
15 changes: 15 additions & 0 deletions misc/shell.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
### 查找命令路径

```sh
gcm conda
# Get-Command 的别名,用在 pwsh 中,不一定有路径,因为可能是注册的函数
where conda
# 用在 cmd 中

which <command>
# linux 命令,只查第一个找到的路径
whereis <command>
# linux 命令,比 which 查到更多
type <command> # 扩展
command -v <command> # 扩展
```
186 changes: 186 additions & 0 deletions misc/命令行工具.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
## exiftool

用于Window下用于读取、写入、编辑海量不同格式文件内的元数据。



## ImageMagick

图像处理工具
- 压缩图片
- 图片格式转换
- 图片编辑

理解图片压缩前,需要理解一下jpg和png两个格式的区别。
- png采用RGB色彩通道,三原色是平等的,这属于一种无损图,所谓的压缩只影响大小,不影响质量。而且通常压缩效果有效,因为默认的png压缩已经压的很小了
- jpg是有损图,它将RGB换算成了一个亮度分量+两个色彩差值分量,即三分量(YCbCr,Y:亮度,Cb:蓝色差分量,Cr:红色差分量)。
- 之所以采用这种方式是因为人眼视杆细胞(感知明暗)数量远超视锥细胞(感知色彩),对亮度细节极度敏感,对色彩细节很迟钝,因此 JPG 可以完整保留亮度,大胆删减色彩数据实现瘦身。
- Y(Luma 亮度分量)指不是屏幕亮度的那种亮度,而是有一套计算公式 Y = 0.299R + 0.587G + 0.114B(绿色对明暗贡献最大);
- 图像全部轮廓、文字、纹理、边缘都存在 Y 里,如果用 Y 压缩过大,整张图会发虚、文字糊块、包浆。
- Cb+Cr 合称 Chroma 色度(色彩),只负责颜色,不承载任何画面轮廓细节。

```sh
magick 1.jpg -sampling-factor 4:2:0 2.jpg
# 压缩图片,只压缩色彩,文档扫描通常将 4:4:4 压缩到 4:2:0
magick 1.jpg -quality 90 -sampling-factor 4:2:0 2.jpg
# 压缩亮度和色彩,压缩强度更大

magick scan.jpg scan.png
# jpg 转 png(无损,体积变大)
magick scan.png scan.jpg
# png 转 jpg(默认中等压缩)
magick 1.jpg 1.pdf
# 可以做图片转 PDF,但不推进,因为 magick 并不是直接将图片封装PDF,而是解码重绘,文件大小会变大。
```


## [PDFtk Server](https://www.pdflabs.com/tools/pdftk-server/)

### 拆分 / 合并
用 cat 选择想要的页面,可以对页面进行旋转。然后用 output 将选中的页面输出
```sh
pdftk 文件1 文件2 文件3 cat output 输出文件名.pdf
pdftk *.pdf cat output 全部合并.pdf
# 合并多个文件

pdftk 文件 burst output test\名称_%03d.pdf
# 拆分成单页面,%03d 表示用三位数序号

pdftk 文件1 cat [odd|even] output 结果.pdf
# 提取奇数/偶数页

pdftk A=文件1 B=文件2 cat A1-5 B1-endSouth output 结果.pdf
# 提取A文件1-5页,提取B文件所有(旋转180)

pdftk 文件 cat end-1 output 结果.pdf
# 倒序

pdftk A=odd.pdf B=even.pdf shuffle A Bend-1 output 修正顺序.pdf
# 交叉合并成一份。
# 无法双面扫描的机子,通常第二份是倒序。
```

### 旋转
```sh
pdftk 输入文件.pdf cat [页面范围][旋转参数] output 输出文件.pdf
# 基础语法
pdftk input.pdf cat 1right output rotated.pdf
# 单页旋转
pdftk input.pdf cat 1-endRight output all_rotated.pdf
# 多页旋转
pdftk input.pdf cat 1 2south 3left output mix_rotated.pdf
# 多页不同旋转:1不转,2转180,3逆转90

# north 不旋转
# south / down 旋转 180°
# east / right 顺时针旋转 90°
# west / left 逆时针旋转 90°
```

### 加密
```sh
pdftk 输入文件.pdf output 加密文件.pdf user_pw 打开密码
pdftk 输入文件.pdf output 加密文件.pdf owner_pw 权限密码 allow <权限列表>
# 基础语法

pdftk input.pdf output encrypted.pdf user_pw 123
# 设置打开密码 123
pdftk input.pdf output encrypted.pdf owner_pw 12
# 可以打开,但权限需要密码 12。
pdftk input.pdf output encrypted.pdf owner_pw 12 Allow CopyContents
# 可以打开复制内容,其他权限需密码 12
```

### 解压
```sh
pdftk 输入文件.pdf output 输出文件.pdf [compress | uncompress]
# uncompress:把 PDF 里被压缩的页面流(比如文本、图片的原始数据)解压成明文 / 可读格式,
# 方便用文本编辑器修改底层 PDF 代码。
# compress:把解压后的页面流重新压缩回去,恢复成标准 PDF 的压缩格式。
```

## [poppler-windows](https://github.com/oschwartz10612/poppler-windows/releases)

内部包括多个工具,比如
| 程序 | 核心用途 |
| ---------------------- | -------------------- |
| pdfimages | 扒 PDF 里的原图 |
| pdftocairo / pdftoppm | PDF 整页转图片(矢量/位图) |
| pdfinfo | 查看 PDF 基本信息 |
| pdftotext | 提取 PDF 文字 |
| pdfunite / pdfseparate | 合并 / 拆分 PDF 文件 |
| pdffonts | 查看 PDF 内嵌字体 |
| pdfattach / pdfdetach | 添加 / 提取 PDF 附件 |
| pdftohtml | PDF 转网页 |
| pdftops | PDF 转打印 PS 文件 |

### pdfimages

```sh
pdfimages [可选参数] 输入文件.pdf 输出文件名前缀
# 执行后自动生成:前缀-000.jpg、前缀-001.png 有序图片文件
```
| 参数 | 作用 |
| ----------- | ------------------------------------------------------------ |
| `-list` | 打印图片信息(页码、宽高、格式、尺寸),不导出文件 |
| `-j` | JPG 原图导出为 jpg;非 JPG 图转为 ppm |
| `-png` | 全部强制输出 PNG(透明图、图纸适合) |
| `-tiff` | 强制输出 TIFF(印刷、扫描稿) |
| `-all` | 等同 -png -tiff -j -jp2 -jbig2 -ccitt |
| `-raw` | 提取原始未解码图像流(专业修图 / 逆向) |
| `-f N` | 起始页码,从第 N 页开始提取 |
| `-l N` | 结束页码,提取到第 N 页为止 |
| `-p` | 文件名带上页码,如`img-p02-000.jpg`方便区分来源页面 |
| `-opw 密码` | 带所有者密码,解密加密 PDF |
| `-upw 密码` | 用户密码打开加密 PDF |
| `-q` | 安静模式,屏蔽终端日志 |


### PDF转图片

```sh
pdftoppm -progress -png -r 300 -sep "_" input.pdf output
```

- `-progress`:显示转换进度。
- `-png`:输出为PNG格式。
- `-r 300`:设置图片分辨率。
- `-sep "_"`:指定输出文件名分隔符,默认为 `-`。
- `input.pdf`:待转换文件。
- `output`:输出文件名。


```sh
pdftoppm -progress -png -r 300 -f 2 -l 4 input.pdf output
```
- `-f 2 -l 4`:指定转换的页面范围(first - last),从第2页到第4页(均包含)。


```sh
pdftoppm -png -r 300 -singlefile input.pdf output
```

- `-singlefile`:添加了该参数后,只转换首页,而且输出文件名不会添加序号后缀。

## python 工具

### img2pdf

将图片转换为 PDF

```sh
img2pdf 1.png 2.jpg -o 1.pdf
# 图片直接封装为 PDF

img2pdf *.jpg -o output.pdf
# 支持通配符

img2pdf *.png --pagesize A4 -o output.pdf
# 自适应页面大小为 A4
```

### pdf2docx

```sh
pdf2docx convert input.pdf output.docx
```
54 changes: 54 additions & 0 deletions misc/常见问题.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
### cmd/pwsh 代理

```sh
set http_proxy=http://127.0.0.1:7890 && set https_proxy=http://127.0.0.1:7890
# 配置临时代理,可对 curl 命令生效

$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
# 可对 Invoke-WebRequest 生效

```

### winget 代理

winget 默认不认 cmd 中的代理,它认自己的 --proxy

```sh
winget settings --enable ProxyCommandLineOptions
# 先开启代理功能(管理员运行)

winget install --id Microsoft.PowerShell --source winget --installer-type wix --proxy http://127.0.0.1:7890
# 使用代理安装 pwsh7 的 msi 包
```

### 查看系统环境变量

新版本 win10 打开环境变量无法看到系统环境变量,需要在管理员权限下运行才能看到。

```sh
systempropertiesadvanced
# 可以选择先进入系统属性,再进入环境变量
rundll32 sysdm.cpl,EditEnvironmentVariables
# 或者一步到位
```

### powershell 运行脚本策略

[pwsh7.6 关于脚本策略的可选值](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.6#powershell-execution-policies)。通常设置为 RemoteSigned 就行,其他不用理。

```sh
Get-ExecutionPolicy -List
# 查看对应作用域和对应执行策略,powershell 默认都是 Undefined,不允许运行。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 允许当前用户执行本地脚本
```

| 配置文件级别 | 路径(PowerShell 7) |
| ------------------- | ------------------------------------------------------------ |
| 1. 系统级所有用户 | `C:\Program Files\PowerShell\7\profile.ps1` |
| 2. 系统级主机专用 | `C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1` |
| 3. 当前用户所有主机 | `C:\Users\k\Documents\PowerShell\profile.ps1` |
| 4. 当前用户主机专用 | `C:\Users\k\Documents\PowerShell\Microsoft.PowerShell_profile.ps1` |
- 常见的 `$PROFILE` 指的就是第四级别,代表的也是最高优先级
- 对于 powershell,路径通常是以文件夹 WindowsPowerShell 命令