[{"content":"近来我的博客迁移到了hugo框架下，并使用blowfish作为主题，以下是我探索的过程。\n创建站点\nhugo new site mywebsite 使用主题（共有三种方法）\ngit submodule：\ngit init git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish 并解注释（或手动添加）config/_default/hugo.toml里的theme = blowfish\nhugo mod（使用go 下载包）\n# If you\u0026#39;re managing your project on GitHub hugo mod init github.com/\u0026lt;username\u0026gt;/\u0026lt;repo-name\u0026gt; # If you\u0026#39;re managing your project locally hugo mod init my-project 并编辑config/_default/module.toml\n[[imports]] disable = false path = \u0026#34;github.com/nunocoracao/blowfish/v2\u0026#34; 随后hugo server就可以自动下载包了\n手动复制主题到对应文件夹下\nhugo mod的好处 # 由于国内网络不太好，使用git submodule update --init --recursive比较吃亏。另外由于go mod国内有源可以换，所以更快？（存疑）\n","date":"2026年4月5日","externalUrl":null,"permalink":"/blogs/posts/init-blog-with-hugo-mod/","section":"Posts","summary":"","title":"Init Blog With Hugo Mod","type":"posts"},{"content":"","date":"2026年4月5日","externalUrl":null,"permalink":"/blogs/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"2026年4月5日","externalUrl":null,"permalink":"/blogs/","section":"Yjdyamv Blog","summary":"","title":"Yjdyamv Blog","type":"page"},{"content":"","date":"2026年4月2日","externalUrl":null,"permalink":"/blogs/tags/git/","section":"Tags","summary":"","title":"Git","type":"tags"},{"content":"","date":"2026年4月2日","externalUrl":null,"permalink":"/blogs/tags/svm/","section":"Tags","summary":"","title":"Svm","type":"tags"},{"content":"","date":"2026年4月2日","externalUrl":null,"permalink":"/blogs/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"今天想谈谈版本管理， 水水\n早在2000年甚至更早，在有成熟工业软件开发的时代，版本管理就被充分的认识到了。企业里的程序员可以通过控制版本号来控制软件的发行，营销可以通过一个版本号的变化显示出新产品相对于旧产品的“nb”，文字工作者可以用版本控制来减小订正错误的精力。版本控制发生在社会生活的方方面面，在我们程序员这一行更不必说了，git大家天天用。\n近来想要运行别人发来的源码才发现版本控制的必要性，对操作系统、工具链、库的层层控制，保证了我们必定能复现问题、追溯问题、解决问题。\n对于操作系统的控制集中在操作系统的版本号、内核版本，典型工具是docker。我们可以定义基础镜像如Ubuntu:2404、Debian13，定义docker的运行逻辑，每一步都被我们控制的很好：基础镜像-\u0026gt;下载依赖-\u0026gt;构建软件/运行服务。\n对于工具链的控制也即中在工具链的版本号上，如clang21、gcc15、VisualStudio2026、java25、nodejs:24等。CMake提供了cmake_minimum_required来控制CMake的行为，编译器提供了传递的参数来控制编译链接的行为。\n对于库的控制也是集中在版本号上。库有可能引入了breaking change，它可能会用大版本号的提升来提示这点。只要能控制我们使用的库的版本，我们就能保证库依赖的行为。\n现代软件开发也由此开发了不少工具，如包管理、虚拟环境、docker等。唯一的圣人linus在2005年开发了git的基础，现在git为无数人所用，产出了GitHub、GitLab等百亿级别的公司，大家也都依赖于它。其重要性是显而易见的。\n","date":"2026年4月2日","externalUrl":null,"permalink":"/blogs/posts/version-control/","section":"Posts","summary":"","title":"Version Control","type":"posts"},{"content":"","date":"2026年4月2日","externalUrl":null,"permalink":"/blogs/tags/astral.sh/","section":"Tags","summary":"","title":"Astral.sh","type":"tags"},{"content":"","date":"2026年4月2日","externalUrl":null,"permalink":"/blogs/tags/python/","section":"Tags","summary":"","title":"Python","type":"tags"},{"content":"","date":"2026年4月2日","externalUrl":null,"permalink":"/blogs/tags/uv/","section":"Tags","summary":"","title":"Uv","type":"tags"},{"content":"uv的使用，官方文档：https://docs.astral.sh/uv/\nuv 下载 # Windows： winget install astral-sh.uv 类Unix： curl -LsSf https://astral.sh/uv/install.sh | sh 版本更新：uv self update\nuv使用 # 创建工程 uv init hello：这会在当前目录下创建hello文件夹，里面有着示例文件与代码 uv init --name hello：这回在当前目录下建立hello工程 项目依赖管理 uv venv创建虚拟环境 uv python pin 3.12固定python版本 uv pip install numpy下载包到虚拟环境中，但不会计入uv.lock uv add numpy下载包到虚拟环境，并计入uv.lock锁定 项目运行 uv sync即可恢复一个uv工程的环境 uv run main.py使用当前的项目环境运行main.py 其他注意 # 提示 uv的pypi换源：\nWindows：在 %AppData%\\uv\\uv.toml 或者 %ProgramData%\\uv\\uv.toml 类Unix：在 ~/.config/uv/uv.toml 或者 /etc/uv/uv.toml [[index]] url = \u0026#34;https://mirrors.ustc.edu.cn/pypi/web/simple/\u0026#34; default = true","date":"2026年4月2日","externalUrl":null,"permalink":"/blogs/posts/uv-for-python-develop/","section":"Posts","summary":"","title":"uv for Python develop","type":"posts"},{"content":"","date":"2026年3月25日","externalUrl":null,"permalink":"/blogs/tags/c++/","section":"Tags","summary":"","title":"C++","type":"tags"},{"content":"","date":"2026年3月25日","externalUrl":null,"permalink":"/blogs/tags/gcc/","section":"Tags","summary":"","title":"GCC","type":"tags"},{"content":"近来使用gcc和cmake时遇到gcc无法处理中文路径的问题。报错如下。\n[build] Starting build [proc] Executing command: /usr/bin/cmake --build /home/dony/桌面/testc/build --config Debug --target all -- [build] [2/8 12% :: 0.102] Scanning \u0026#39;/home/dony/桌面/testc/main.cpp\u0026#39; for CXX dependencies [build] FAILED: [code=1] CMakeFiles/testc.dir/Debug/main.cpp.o.ddi [build] /usr/bin/g++ -DCMAKE_INTDIR=\\\u0026#34;Debug\\\u0026#34; -fstack-protector-strong -D_FORTIFY_SOURCE=2 -fstack-clash-protection -Wall -Wextra -Wpedantic -g -O1 -gdwarf-5 -fdiagnostics-color=always -fno-omit-frame-pointer -std=gnu++23 -fPIE -fdiagnostics-color=always -E -x c++ \u0026#39;/home/dony/桌面/testc/main.cpp\u0026#39; -MT CMakeFiles/testc.dir/Debug/main.cpp.o.ddi -MD -MF CMakeFiles/testc.dir/Debug/main.cpp.o.ddi.d -fmodules-ts -fdeps-file=CMakeFiles/testc.dir/Debug/main.cpp.o.ddi -fdeps-target=CMakeFiles/testc.dir/Debug/main.cpp.o -fdeps-format=p1689r5 -o CMakeFiles/testc.dir/Debug/main.cpp.o.ddi.i [build] /home/dony/桌面/testc/main.cpp:3:10: error: cannot determine ‘#include’ translation of /home/dony/桌面/testc/hello.hpp: malformed string \u0026#39;ERROR \u0026#39;unrecognized \\\u0026#39;INCLUDE-TRANSLATE \\\u0026#39;/home/dony/桌面/testc/hello.hpp\\\u0026#39;\\\u0026#39;\u0026#39;\u0026#39; [build] 3 | #include \u0026#34;hello.hpp\u0026#34; [build] | ^~~~~~~~~~~ [build] [2/8 25% :: 0.222] Scanning \u0026#39;/home/dony/桌面/testc/hello.cpp\u0026#39; for CXX dependencies [build] ninja: build stopped: subcommand failed. [proc] The command: /usr/bin/cmake --build /home/dony/桌面/testc/build --config Debug --target all -- exited with code: 1 [driver] Build completed: 00:00:00.294 [build] Build finished with exit code 1 经过试验，设置cmake_minimum_required为3.27以上并将CMAKE_CXX_STANDARD设置为20以上会开启对module的支持，这就是错误的原因，gcc scan module deps有问题：处理带中文路径失败。以下方法均可解决问题。\n设置cmake_minimum_required为3.27及以下 设置CMAKE_CXX_SCAN_FOR_MODULES为OFF 使用MSVC或clang 其中前两种方法都是关闭cmake对module的支持，第三种方法是MSVC或clang没有这个问题。\n另外的，近来GCC已经有人针对这个问题提了个issue，并有patch了，只能期待在版本号到16时会到release上。\n","date":"2026年3月25日","externalUrl":null,"permalink":"/blogs/posts/gcc-chinese-module/","section":"Posts","summary":"","title":"GCC中文模块","type":"posts"},{"content":"以下是所有以分类的文章\n","date":"2026年3月25日","externalUrl":null,"permalink":"/blogs/categories/","section":"分类","summary":"","title":"分类","type":"categories"},{"content":"","date":"2026年3月25日","externalUrl":null,"permalink":"/blogs/categories/%E9%97%AE%E9%A2%98%E8%BF%BD%E8%B8%AA/","section":"分类","summary":"","title":"问题追踪","type":"categories"},{"content":"","date":"2026年3月25日","externalUrl":null,"permalink":"/blogs/tags/%E4%B8%AD%E6%96%87/","section":"Tags","summary":"","title":"中文","type":"tags"},{"content":"","date":"2026年3月10日","externalUrl":null,"permalink":"/blogs/tags/keepass/","section":"Tags","summary":"","title":"KeePass","type":"tags"},{"content":"近来尝试了下keepass，有以下体验。\n软件生态多，不统一 离线为主，无官方server端 密码库可选项多 生态多 # 以下仅列举知名keepass软件\n桌面端： keepassXC：桌面端最好的keepass，支持win/mac/linux，并有浏览器插件，支持密钥 keepass：官方的keepass，仅支持win 移动端 安卓： keepassDX：完全离线，需配合其他软件/服务同步 keepass2android：自带webdav等云同步服务 等等 ios：我不用ios，我无法评价 strongbox keepassium em，近来keyguard也开始beta支持keepass了，值得期待\n离线 # 有的是不带云同步（纯离线）、有的是带webdav等其他方式同步。\n密码库可选项多 # 对于keepass密码库有很多可选项\n密码库加密算法： AES Twofish ChaCha20 主密钥KDF算法： AES-KDF Argon2d Argon2id 数据库凭证： 密码 密钥文件 质询响应 对于密码库版本主流有KDBX3和KDBX4两版本，无脑选后者即可。对于数据库加密算法没什么可说的，都很好。KDF算法选Argon2id即可。对于数据库凭证，三者都可以添加以保证安全性，其中密钥文件是任意一个文件即可，或者由keepassXC生成也行，必须保证内容不变，对于质询响应就是插入yubikey等物理密钥。\n","date":"2026年3月10日","externalUrl":null,"permalink":"/blogs/posts/try-keepass-exprience/","section":"Posts","summary":"","title":"尝试KeePass的体验","type":"posts"},{"content":"","date":"2026年3月10日","externalUrl":null,"permalink":"/blogs/tags/%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86%E5%99%A8/","section":"Tags","summary":"","title":"密码管理器","type":"tags"},{"content":"keyguard是一个bitwarden的兼容客户端，旨在提供更好的使用体验。我在我的安卓手机上使用这个软件，但我也知道这个软件是由个人维护的，安全性肯定比不上bitwarden官方的客户端，心里有点防备。使用一段时间后，也陆陆续续在仓库里提了些issue（bug和feature request相关），对这个项目渐渐熟悉了。\n对于bitwarden，相比于1password有一点不同的是，在近年来引入了argon2id的kdf算法，用户可以在bitwarden后台选择kdf算法及其参数，而1password只有pbkdf2，话不偏题了，继续说。在bw的文档里说kdf算法参数过高可能会等待较长时间乃至卡死。kdf（key derivative function）密钥派生函数是指对主密钥进行一系列运算得到一个很长很长的类似随机的字符串替代我们的主密码来加密密码库的函数。由于我们的主密码一般较短，熵值较低，无法满足加密需求，所以要派生出熵值大的密钥进行加密。恰巧，kdf还有个特点就是会消耗“大量资源”，参数越大，时间越长，这也一定程度上预防了攻击者获得加密vault后暴力破解的时间（比如一次kdf消耗100ms，那暴力破解就几乎不可能了）。\n知道了这点，我就去我的bw后台调节了kdf算法为argon2id 参数试着拉高，来看看会不会出现文档里描述的情况。默认参数是内存64MB 3迭代 4并行度，拉到了128MB、144MB、196MB（移动端bw官方client解锁密码库开始有点卡了，等待时间在1秒这个量级）。因此我选用了144MB 6迭代 4并行的参数。然而我在使用keyguard客户端时解锁密码库根本不卡，猜到可能是keyguard的本地密码库的kdf选用的是个固定参数（比如pbkdf2 600000次迭代），而bw客户端的本地密码库的kdf参数是和bw后台设定一样的。\n因此我就去keyguard代码里搜索pbkdf2或argon2，找到对应的代码片段看，这一看吓一跳选用了pbkdf2 迭代次数是10 000次。要知道OWASP建议的迭代次数是600 000次以上（bw和1p均选用了大于此迭代次数的参数）。选用参数次数参的来源是2018年的nist的一个建议（来自注释的链接）。10 000次相对于最新的OWASP的建议600 000次还是太低了，就萌生了给作者提这件事的想法。反复确认这件事是真的后，在项目里找到了SECURITY.md，按照里面的要求和作者发邮件后很快得到了\u0026quot;Thanks, will fix very soon\u0026quot;的回复。最终在当前的最新版本2.4.1修复，使用argon2id的64MB 3次迭代 4并行度的参数配置。\n事件告一段落，也忍不住开始胡思乱想。nist是美国的部门，它这标准（2018年版本）不会是故意埋坑吧。又看了看nist 2025年版本的建议，关于这个pbkdf2迭代次数的建议的话已然消失不见。还是社区维护的OWASP好啊。\n另1：argon2id虽是当前最好的选择，但参数里的内存占用标太大的话可能就会被系统kill掉导致卡死（比如256MB，在桌面端可能还行，但在移动端就不太行了），而pbkdf2几乎不会被kill。 另2：在bw后台更改kdf及其参数有风险，因为更改后会登出所有联网设备。\n","date":"2026年3月4日","externalUrl":null,"permalink":"/blogs/posts/keyguard-kdf-para-security-problemsolved/","section":"Posts","summary":"","title":"Keyguard KDF参数安全问题（已解决）","type":"posts"},{"content":"","date":"2026年3月4日","externalUrl":null,"permalink":"/blogs/categories/%E5%AE%89%E5%85%A8/","section":"分类","summary":"","title":"安全","type":"categories"},{"content":"","date":"2026年1月1日","externalUrl":null,"permalink":"/blogs/tags/clang-format/","section":"Tags","summary":"","title":"Clang-Format","type":"tags"},{"content":"","date":"2026年1月1日","externalUrl":null,"permalink":"/blogs/tags/clangd/","section":"Tags","summary":"","title":"Clangd","type":"tags"},{"content":"我们使用clangd插件来替代Microsoft C/C++插件，那么我们应当学会如何配置其来符合我们的使用。我的clangd插件配置如下。\n// clangd 及 微软C/C++扩展设置 \u0026#34;C_Cpp.intelliSenseEngine\u0026#34;: \u0026#34;disabled\u0026#34;, // 禁用微软的IntelliSense \u0026#34;C_Cpp.errorSquiggles\u0026#34;: \u0026#34;disabled\u0026#34;, \u0026#34;clangd.enable\u0026#34;: true, \u0026#34;clangd.detectExtensionConflicts\u0026#34;: false, \u0026#34;clangd.checkUpdates\u0026#34;: false, \u0026#34;clangd.onConfigChanged\u0026#34;: \u0026#34;prompt\u0026#34;, \u0026#34;clangd.arguments\u0026#34;: [ // 让 Clangd 生成精简的日志 详细是verbose \u0026#34;--log=info\u0026#34;, // 输出的 JSON 文件更美观 \u0026#34;--pretty\u0026#34;, // 全局补全 \u0026#34;--all-scopes-completion\u0026#34;, // 建议风格：打包(重载函数只会给出一个建议） // 相反可以设置为detailed \u0026#34;--completion-style=bundled\u0026#34;, // 跨文件重命名变量 \u0026#34;--cross-file-rename\u0026#34;, // 允许补充头文件 \u0026#34;--header-insertion=iwyu\u0026#34;, // 输入建议中，已包含头文件的项与还未包含头文件的项会以圆点加以区分 \u0026#34;--header-insertion-decorators\u0026#34;, // 在后台自动分析文件(基于 complie_commands，我们用CMake生成) \u0026#34;--background-index\u0026#34;, // 启用 Clang-Tidy 以提供「静态检查」 \u0026#34;--clang-tidy\u0026#34;, // Clang-Tidy 静态检查的参数，指出按照哪些规则进行静态检查 // 参数后部分的*表示通配符 // 在参数前加入-，如-modernize-use-trailing-return-type，将会禁用某一规则 \u0026#34;--clang-tidy-checks=cppcoreguidelines-*,performance-*,bugprone-*,portability-*,modernize-*,google-*\u0026#34;, // 同时开启的任务数量 \u0026#34;-j=8\u0026#34;, // pch优化的位置(memory 或 disk，选择memory会增加内存开销，但会提升性能) 推荐在板子上使用disk \u0026#34;--pch-storage=disk\u0026#34;, // 启用这项时，补全函数时，将会给参数提供占位符，键入后按 Tab 可以切换到下一占位符，乃至函数末 // 我选择禁用 \u0026#34;--function-arg-placeholders=false\u0026#34;, // compelie_commands.json 文件的目录位置 \u0026#34;--compile-commands-dir=${workspaceRoot}/build\u0026#34;, // 启用.clangd配置文件 \u0026#34;--enable-config\u0026#34;, // 设置格式化style \u0026#34;--fallback-style=google\u0026#34;, \u0026#34;--pch-storage=memory\u0026#34;, \u0026#34;--ranking-model=heuristics\u0026#34;, \u0026#34;--suggest-missing-includes\u0026#34; ], 其中有点坑人的是format不起作用，除非设置.clang-format文件来描述格式化的样式。但这个在clangd插件里是设置不了的。虽说我们可以每个文件夹下设置.clang-format，这对于工程来说也是良好实践，但我想全局设置来降低工作量（对于无须和别人合作的项目之类的）。**解决方案是：在家目录下放置一个.clang-format文件，即可作为全局。**对于.clangd也是一样的，有项目设置和全局设置。在vscode的设置里是完成不了全局clang-format的设置的\n# ~/.clang-format BasedOnStyle: Webkit # 设置 tab 长度和缩进 IndentWidth: 4 TabWidth: 4 UseTab: Never # 或者 Always, ForIndentation, ForContinuationAndIndentation # 大括号换行设置 BreakBeforeBraces: Custom BraceWrapping: AfterClass: true AfterControlStatement: Always # if, for, while 等后的大括号换行 AfterEnum: true AfterFunction: true AfterNamespace: true AfterStruct: true AfterUnion: true BeforeCatch: true BeforeElse: true BeforeLambdaBody: true BeforeWhile: false SplitEmptyFunction: false SplitEmptyRecord: false SplitEmptyNamespace: false 以下是在win上的设置，设置了这个后就能正确提示msys2 ucrt 的gcc的头文件了，如其专有的\u0026lt;bits/stdc++.h\u0026gt;等，对应的把x86_64-pc-windows-gnu换成x86_64-pc-windows-msvc即可提示MSVC的头文件\n# ~/.clangd CompileFlags: Add: - --target=x86_64-pc-windows-gnu ","date":"2026年1月1日","externalUrl":null,"permalink":"/blogs/posts/clangd-clang-format-global/","section":"Posts","summary":"","title":"Clangd和Clang-Format的全局配置","type":"posts"},{"content":"","date":"2026年1月1日","externalUrl":null,"permalink":"/blogs/tags/cmake/","section":"Tags","summary":"","title":"CMake","type":"tags"},{"content":"","date":"2026年1月1日","externalUrl":null,"permalink":"/blogs/tags/vscode/","section":"Tags","summary":"","title":"VSCode","type":"tags"},{"content":"cmake是一个C/C++的跨平台的构建工具，也是现在的事实标准，QT6、KDE、ROS2及其他知名库均开始采用cmake构建。\ncmake是构建工具的构建工具。cmake可以生成 VS工程文件、makefile、ninja及其他构建工具。而这些构建工具又会将它们自己的配置文件转换成编译器和链接器的参数供其调用。而cmake本身是没有什么预配置的，我们最好做些cmake构建的预配置才能让我们使用的方便，比如针对特定编译器的编译选项和调试选项等。\n{ // // 1. CMake设置 主要适用于[GCC/CLang](linux+win(ucrt64)) Clang(msvc)有点诡异 clang-cl可以接受以下的部分参数（ \u0026#34;cmake.configureSettings\u0026#34;: { // 定义Ninja Multi-Config列表 效果和传`-DCMAKE_CONFIGURATION_TYPES=Debug;Release;RelWithDebInfo;MinSizeRel`一样 \u0026#34;CMAKE_CONFIGURATION_TYPES\u0026#34;: [ \u0026#34;Debug\u0026#34;, \u0026#34;Release\u0026#34;, \u0026#34;RelWithDebInfo\u0026#34;, \u0026#34;MinSizeRel\u0026#34;, ], // 不指定构建模式，在插件界面选择 // 库默认生成静态库，除非指定为`add_library(mylib SHARED test.c)` 或以下的选项打开 // \u0026#34;BUILD_SHARED_LIBS\u0026#34;: \u0026#34;ON\u0026#34;, // 生成编译命令数据库，供clangd使用 \u0026#34;CMAKE_EXPORT_COMPILE_COMMANDS\u0026#34;: \u0026#34;ON\u0026#34;, // 1. Debug版本 // 为C/C++调试版本添加调试信息，使用DWARF-5格式 // -g: 生成调试信息 // -O0: 禁用优化（以后不许更改） // -gdwarf-5是最新的 // -fdiagnostics-color=always: 编译器输出彩色诊断信息 // -fno-omit-frame-pointer: 保留帧指针，便于堆栈跟踪和性能分析工具（如perf）获取完整的调用栈 \u0026#34;CMAKE_CXX_FLAGS_DEBUG\u0026#34;: \u0026#34;-g -O0 -gdwarf-5 -fdiagnostics-color=always -fno-omit-frame-pointer\u0026#34;, \u0026#34;CMAKE_C_FLAGS_DEBUG\u0026#34;: \u0026#34;-g -O0 -gdwarf-5 -fdiagnostics-color=always -fno-omit-frame-pointer\u0026#34;, // 2. Release版本优化 // -O3: 启用最高级别的优化（内联、循环展开、向量化等），显著提升性能但编译时间增长 // -DNDEBUG: 禁用assert宏，减少运行时开销（assert在Release版本应该被禁用） // 安全选项（可选） // -fstack-protector-strong: 强化的栈溢出保护 // -D_FORTIFY_SOURCE=2: 编译时检测缓冲区溢出和其他常见的内存安全问题， // -fstack-clash-protection: 防止栈冲突攻击 \u0026#34;CMAKE_CXX_FLAGS_RELEASE\u0026#34;: \u0026#34;-O3 -DNDEBUG -fstack-protector-strong -D_FORTIFY_SOURCE=2 -fstack-clash-protection\u0026#34;, \u0026#34;CMAKE_C_FLAGS_RELEASE\u0026#34;: \u0026#34;-O3 -DNDEBUG -fstack-protector-strong -D_FORTIFY_SOURCE=2 -fstack-clash-protection\u0026#34;, // 3. RelWithDebInfo版本（推荐用于性能分析） \u0026#34;CMAKE_CXX_FLAGS_RELWITHDEBINFO\u0026#34;: \u0026#34;-O2 -g -gdwarf-5\u0026#34;, \u0026#34;CMAKE_C_FLAGS_RELWITHDEBINFO\u0026#34;: \u0026#34;-O2 -g -gdwarf-5\u0026#34;, // 4. MinSizeRel版本（最小大小优化，适用于嵌入式或存储受限环境） // -Os: 针对可执行文件大小优化，比-O2更激进地减小代码尺寸 // -DNDEBUG: 禁用assert宏，减少代码大小 // -ffunction-sections: 将每个函数放在独立的section中，便于链接器删除未使用代码 // -fdata-sections: 将数据放在独立的section中 // -Wl,--gc-sections: 链接时删除未使用的sections（需要-ffunction-sections和-fdata-sections） // -s: 删除符号表，进一步减小文件大小 \u0026#34;CMAKE_CXX_FLAGS_MINSIZEREL\u0026#34;: \u0026#34;-Os -DNDEBUG -ffunction-sections -fdata-sections\u0026#34;, \u0026#34;CMAKE_C_FLAGS_MINSIZEREL\u0026#34;: \u0026#34;-Os -DNDEBUG -ffunction-sections -fdata-sections\u0026#34;, \u0026#34;CMAKE_EXE_LINKER_FLAGS_MINSIZEREL\u0026#34;: \u0026#34;-Wl,--gc-sections -s\u0026#34;, \u0026#34;CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL\u0026#34;: \u0026#34;-Wl,--gc-sections -s\u0026#34;, // 编译器警告设置 - 启用全面的代码质量检查 // -Wall：常见警告 -Wextra：额外警告 -Wpedantic：严格标准合规警告 -Wconversion：隐式转换警告 -Wshadow：变量遮蔽警告 // 另：-Werror：将warning视作error \u0026#34;CMAKE_CXX_FLAGS\u0026#34;: \u0026#34;-Wall -Wextra -Wpedantic\u0026#34;, \u0026#34;CMAKE_C_FLAGS\u0026#34;: \u0026#34;-Wall -Wextra -Wpedantic\u0026#34;, // C/C++标准设置 \u0026#34;CMAKE_CXX_STANDARD\u0026#34;: \u0026#34;23\u0026#34;, // 98 11 14 17 20 23 26 \u0026#34;CMAKE_C_STANDARD\u0026#34;: \u0026#34;23\u0026#34;, // 90 99 11 17 23 \u0026#34;CMAKE_CXX_STANDARD_REQUIRED\u0026#34;: \u0026#34;ON\u0026#34;, // 强制要求指定的C++标准，如果不支持则编译失败 \u0026#34;CMAKE_C_STANDARD_REQUIRED\u0026#34;: \u0026#34;ON\u0026#34;, // 同上 // 显示详细的编译信息 - 用于调试构建过程 \u0026#34;CMAKE_VERBOSE_MAKEFILE\u0026#34;: \u0026#34;OFF\u0026#34;, // 设为ON可以看到完整的编译命令，用于调试构建问题，一般设置为OFF即可 // 着色输出设置 - 让编译错误和警告信息更易读 \u0026#34;CMAKE_COLOR_MAKEFILE\u0026#34;: \u0026#34;ON\u0026#34;, // 在Makefile生成器中启用彩色输出 \u0026#34;CMAKE_COLOR_DIAGNOSTICS\u0026#34;: \u0026#34;ON\u0026#34;, // 在支持的编译器中启用彩色诊断信息 // 生成位置无关代码 - 对于共享库和现代安全特性很重要 \u0026#34;CMAKE_POSITION_INDEPENDENT_CODE\u0026#34;: \u0026#34;ON\u0026#34;, // 并行编译设置 - 提高编译速度 \u0026#34;CMAKE_BUILD_PARALLEL_LEVEL\u0026#34;: \u0026#34;0\u0026#34;, // 0表示使用所有可用CPU核心进行并行编译 // IPO/LTO似乎有点问题就不启用了 // 关于windows上的动态库符号导出还是设置下好... \u0026#34;CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS\u0026#34;: \u0026#34;ON\u0026#34;, // RPATH(RUNTIME PATH)设置 - 确保运行时能找到共享库 // 在win上无用 \u0026#34;CMAKE_MACOSX_RPATH\u0026#34;: \u0026#34;ON\u0026#34;, // macOS RPATH设置 \u0026#34;CMAKE_SKIP_BUILD_RPATH\u0026#34;: \u0026#34;OFF\u0026#34;, // 构建时保留RPATH \u0026#34;CMAKE_BUILD_WITH_INSTALL_RPATH\u0026#34;: \u0026#34;OFF\u0026#34;, // 构建时不使用安装RPATH \u0026#34;CMAKE_INSTALL_RPATH_USE_LINK_PATH\u0026#34;: \u0026#34;ON\u0026#34;, // 安装时使用链接路径 // 由于我的RPATH设置为lib，所以`LIBRARY DESTINATION`也得设置为`lib`，否则找不到.so / .dynlib \u0026#34;CMAKE_INSTALL_RPATH\u0026#34;: \u0026#34;$ORIGIN/../lib\u0026#34;, // 安装时的RPATH设置，$ORIGIN表示可执行文件所在目录 // 不启用模块的功能 // 这对编译器有要求，然而GCC对含有中文字符的模块/头文件的路径处理不好，故禁用 \u0026#34;CMAKE_CXX_SCAN_FOR_MODULES\u0026#34;: \u0026#34;OFF\u0026#34;, }, // // 2. CMake设置 适用于MSVC/clang-cl(msvc) clang-cl可以接受大部分MSVC选项，及部分gcc/clang选项 // // cl选项以\u0026#34;/\u0026#34;或\u0026#34;-\u0026#34;开头，都可以 // \u0026#34;cmake.configureSettings\u0026#34;: { // // 定义Ninja Multi-Config列表 效果和传`-DCMAKE_CONFIGURATION_TYPES=Debug;Release;RelWithDebInfo;MinSizeRel`一样 // \u0026#34;CMAKE_CONFIGURATION_TYPES\u0026#34;: [ // \u0026#34;Debug\u0026#34;, // \u0026#34;Release\u0026#34;, // \u0026#34;RelWithDebInfo\u0026#34;, // \u0026#34;MinSizeRel\u0026#34;, // ], // // 不指定构建模式，在插件界面选择 // // 生成编译命令数据库，供clangd使用 // \u0026#34;CMAKE_EXPORT_COMPILE_COMMANDS\u0026#34;: \u0026#34;ON\u0026#34;, // // 1. Debug 调试信息 // // /Z7: 生成的对象文件还包含完整符号化调试信息（链接器传递 /Debug 可以把调试信息放到PDB（程序数据库）里） // // /Zi: 生成.pdb文件（对象文件不包含调试信息），推荐使用，最终的库和可执行文件更小 // // /Od: 禁用优化，确保代码按原始逻辑执行 // // /MDd: 使用多线程调试版DLL运行时库 // // /RTC1: 运行时错误检查（栈帧和未初始化变量） // // /D_DEBUG: 定义_DEBUG宏 // // /fp:precise: 精确浮点模型，确保调试时浮点运算一致性 // // /Oy-: 禁用帧指针省略，保证完整的调用栈信息 // // /DEBUG:FULL: 生成完整的调试信息 // // /INCREMENTAL: 启用增量链接，加快链接速度 // \u0026#34;CMAKE_CXX_FLAGS_DEBUG\u0026#34;: \u0026#34;-Zi -Od -MDd -RTC1 -D_DEBUG -fp:precise -Oy-\u0026#34;, // \u0026#34;CMAKE_C_FLAGS_DEBUG\u0026#34;: \u0026#34;-Zi -Od -MDd -RTC1 -D_DEBUG -fp:precise -Oy-\u0026#34;, // \u0026#34;CMAKE_EXE_LINKER_FLAGS_DEBUG\u0026#34;: \u0026#34;-DEBUG:FULL -INCREMENTAL\u0026#34;, // // 2. Release版本优化 // // /Ox: 最大速度优化（等同于 /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy） // // /DNDEBUG: 禁用assert宏，移除调试代码 // // /MD: 使用多线程发布版DLL运行时库 // // /GL: 启用全程序优化（需要配合链接时代码生成）,这个和/LTCG配合使用会有问题。关掉了 // // /Gw: 优化全局数据，移除未引用的全局数据 // // /LTCG: 启用链接时代码生成，允许跨模块优化 // // /INCREMENTAL:NO: 禁用增量链接，生成优化的可执行文件 // // /OPT:REF: 移除未引用的函数和数据 // // /OPT:ICF: 启用相同代码折叠，减少可执行文件大小 // \u0026#34;CMAKE_CXX_FLAGS_RELEASE\u0026#34;: \u0026#34;-Ox -DNDEBUG -MD -Gw\u0026#34;, // \u0026#34;CMAKE_C_FLAGS_RELEASE\u0026#34;: \u0026#34;-Ox -DNDEBUG -MD -Gw\u0026#34;, // \u0026#34;CMAKE_EXE_LINKER_FLAGS_RELEASE\u0026#34;: \u0026#34;-INCREMENTAL:NO -OPT:REF -OPT:ICF -LTCG\u0026#34;, // // 3. RelWithDebInfo版本（推荐用于性能分析） // \u0026#34;CMAKE_CXX_FLAGS_RELWITHDEBINFO\u0026#34;: \u0026#34;-O2 -Zi -DNDEBUG -MD -Oy- -fp:precise\u0026#34;, // \u0026#34;CMAKE_C_FLAGS_RELWITHDEBINFO\u0026#34;: \u0026#34;-O2 -Zi -DNDEBUG -MD -Oy- -fp:precise\u0026#34;, // \u0026#34;CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO\u0026#34;: \u0026#34;-DEBUG:FULL -INCREMENTAL:NO -OPT:REF\u0026#34;, // // 4. MinSizeRel版本 // // /O1: 最小化大小优化（等同于 /Og /Os /Oy /Ob2 /GF /Gy） // // /Os: 优化代码大小，优先选择较小的代码 // \u0026#34;CMAKE_CXX_FLAGS_MINSIZEREL\u0026#34;: \u0026#34;-O1 -Os -DNDEBUG -MD -Gw\u0026#34;, // \u0026#34;CMAKE_C_FLAGS_MINSIZEREL\u0026#34;: \u0026#34;-O1 -Os -DNDEBUG -MD -Gw\u0026#34;, // \u0026#34;CMAKE_EXE_LINKER_FLAGS_MINSIZEREL\u0026#34;: \u0026#34;-INCREMENTAL:NO -OPT:REF -OPT:ICF -LTCG\u0026#34;, // // C/C++标准设置 // \u0026#34;CMAKE_CXX_STANDARD\u0026#34;: \u0026#34;23\u0026#34;, // 98 11 14 17 20 23 26 // \u0026#34;CMAKE_C_STANDARD\u0026#34;: \u0026#34;23\u0026#34;, // 90 99 11 17 23 // \u0026#34;CMAKE_CXX_STANDARD_REQUIRED\u0026#34;: \u0026#34;ON\u0026#34;, // \u0026#34;CMAKE_C_STANDARD_REQUIRED\u0026#34;: \u0026#34;ON\u0026#34;, // // 各构建类型均有的安全及其他设置 // // /W4: 启用4级警告（高级警告，推荐用于代码质量检查） // // /Wall: 启用所有警告（包括一些冗长的警告，一般不推荐开启） // // /WX-: 警告不视为错误（设为/WX则警告当错误处理） // // /permissive-: 严格C++标准合规模式，禁用Microsoft扩展 // // /EHsc: C++异常处理模型（同步异常，extern \u0026#34;C\u0026#34;函数不抛异常） // // /utf-8: 源代码和执行字符集都使用UTF-8编码 // // /Zc:__cplusplus: 正确设置__cplusplus宏值 // // /Zc:__STDC__: 在C模式下正确定义__STDC__宏 // // /Gs: 启用堆栈保护，防止栈溢出攻击 // // /guard:cf: 启用控制流保护，防止代码执行被篡改 // // /NXCOMPAT /DYNAMICBASE /GUARD:CF: 链接器选项，启用数据执行保护和地址空间布局随机化等安全特性 // \u0026#34;CMAKE_CXX_FLAGS\u0026#34;: \u0026#34;-W4 -WX- -permissive- -EHsc -utf-8 -GS -guard:cf\u0026#34;, // W4高级警告，permissive-严格标准 // \u0026#34;CMAKE_C_FLAGS\u0026#34;: \u0026#34;-W4 -WX- -utf-8 -GS -guard:cf\u0026#34;, // \u0026#34;CMAKE_EXE_LINKER_FLAGS\u0026#34;: \u0026#34;-NXCOMPAT -DYNAMICBASE -GUARD:CF\u0026#34;, // // 生成位置无关代码 // \u0026#34;CMAKE_POSITION_INDEPENDENT_CODE\u0026#34;: \u0026#34;ON\u0026#34;, // // 调试和开发相关设置 // \u0026#34;CMAKE_VERBOSE_MAKEFILE\u0026#34;: \u0026#34;OFF\u0026#34;, // 设为ON可以看到完整的编译命令，用于调试构建问题，一般设置为OFF即可 // \u0026#34;CMAKE_COLOR_DIAGNOSTICS\u0026#34;: \u0026#34;ON\u0026#34;, // // LTO/IPO这个优化在MSVC下有问题，关掉 // // MSVC 特定 // \u0026#34;CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD\u0026#34;: \u0026#34;ON\u0026#34;, // 在Visual Studio中包含安装目标 // // 并行编译 // \u0026#34;CMAKE_BUILD_PARALLEL_LEVEL\u0026#34;: \u0026#34;0\u0026#34;, // // Windows 动态库导出全部符号（.dll, .lib等）对于使用动态库来说必不可少 // \u0026#34;CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS\u0026#34;: \u0026#34;ON\u0026#34;, // // 防止找不到dll，所以把dll也放在bin目录下，即设置 `LIBRARY DESTINATION`为`bin` // // win上RPath无效，不设置了 // }, // // cmake install 示例 // // ``` // // install(TARGETS \u0026#34;testc\u0026#34; \u0026#34;hello_lib\u0026#34; // // RUNTIME DESTINATION bin # 可执行文件和DLL // // LIBRARY DESTINATION lib # 非Windows系统的共享库（如.so），Windows上DLL属于RUNTIME // // ARCHIVE DESTINATION lib # 静态库和导入库 // // ) // // ``` \u0026#34;cmake.buildDirectory\u0026#34;: \u0026#34;${workspaceFolder}/build\u0026#34;, \u0026#34;cmake.generator\u0026#34;: \u0026#34;Ninja Multi-Config\u0026#34;, // cmake的生成器为Ninja Multi-Config \u0026#34;cmake.preferredGenerators\u0026#34;: [ \u0026#34;Ninja Multi-Config\u0026#34;, // 优先使用Ninja Multi-Config/Ninja 快且跨平台 \u0026#34;Ninja\u0026#34;, // Ninja单配置 // \u0026#34;Unix Makefiles\u0026#34;, // 类Unix makefile // \u0026#34;NMake Makefiles\u0026#34;, // Windows NMake // \u0026#34;MinGW Makefiles\u0026#34;, // Windows MinGW make // \u0026#34;Visual Studio 18 2026\u0026#34; // 生成vs工程文件，版本有点多（ ], \u0026#34;cmake.configureOnOpen\u0026#34;: false, // 打开文件夹不自动构建 \u0026#34;cmake.buildBeforeRun\u0026#34;: true, // 运行前自动构建 \u0026#34;cmake.clearOutputBeforeBuild\u0026#34;: true, // 构建前清除输出 \u0026#34;cmake.launchBehavior\u0026#34;: \u0026#34;reuseTerminal\u0026#34;, \u0026#34;cmake.installPrefix\u0026#34;: \u0026#34;install\u0026#34;, // // 1.适用于GCC/Clang的调试 // // 1.1.1 使用GDB(MS C/C++ Extension) // \u0026#34;cmake.debugConfig\u0026#34;: { // \u0026#34;stopAtEntry\u0026#34;: true, // 在代码开头设置断点 // \u0026#34;type\u0026#34;: \u0026#34;cppdbg\u0026#34;, // \u0026#34;MIMode\u0026#34;: \u0026#34;gdb\u0026#34;, // 据说可以用lldb，但还没找到配置 // \u0026#34;cwd\u0026#34;: \u0026#34;${workspaceFolder}\u0026#34;, // \u0026#34;setupCommands\u0026#34;: [ // { // \u0026#34;description\u0026#34;: \u0026#34;Enable pretty printing for better data structure display\u0026#34;, // \u0026#34;text\u0026#34;: \u0026#34;-enable-pretty-printing\u0026#34;, // \u0026#34;ignoreFailures\u0026#34;: true, // }, // { // \u0026#34;description\u0026#34;: \u0026#34;Set assembly code display to Intel syntax format\u0026#34;, // \u0026#34;text\u0026#34;: \u0026#34;-gdb-set disassembly-flavor intel\u0026#34;, // \u0026#34;ignoreFailures\u0026#34;: true, // }, // { // \u0026#34;description\u0026#34;: \u0026#34;Set maximum string display length to 512 characters\u0026#34;, // \u0026#34;text\u0026#34;: \u0026#34;set print elements 512\u0026#34;, // \u0026#34;ignoreFailures\u0026#34;: true, // }, // { // \u0026#34;description\u0026#34;: \u0026#34;Enable printing of object\u0026#39;s actual type (for polymorphic objects)\u0026#34;, // \u0026#34;text\u0026#34;: \u0026#34;set print object on\u0026#34;, // \u0026#34;ignoreFailures\u0026#34;: true, // }, // { // \u0026#34;description\u0026#34;: \u0026#34;Enable pretty printing of arrays\u0026#34;, // \u0026#34;text\u0026#34;: \u0026#34;set print array on\u0026#34;, // \u0026#34;ignoreFailures\u0026#34;: true, // }, // { // \u0026#34;description\u0026#34;: \u0026#34;Disable pagination for continuous output\u0026#34;, // \u0026#34;text\u0026#34;: \u0026#34;set pagination off\u0026#34;, // \u0026#34;ignoreFailures\u0026#34;: true, // }, // ], // }, // 1.1.2 GDB(Native Debug) // \u0026#34;cmake.debugConfig\u0026#34;: { // \u0026#34;type\u0026#34;: \u0026#34;gdb\u0026#34;, // \u0026#34;request\u0026#34;: \u0026#34;launch\u0026#34;, // \u0026#34;cwd\u0026#34;: \u0026#34;${workspaceRoot}\u0026#34;, // \u0026#34;target\u0026#34;: \u0026#34;${command:cmake.launchTargetPath}\u0026#34;, // 可执行文件路径。对于codelldb和MS C/C++则无须设置，会自动传到\u0026#34;program\u0026#34;里。 // \u0026#34;valuesFormatting\u0026#34;: \u0026#34;prettyPrinters\u0026#34;, // \u0026#34;stopAtEntry\u0026#34;: true, // }, // // 1.2 使用LLDB \u0026#34;cmake.debugConfig\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;lldb\u0026#34;, \u0026#34;MIMode\u0026#34;: \u0026#34;lldb\u0026#34;, // 不然默认是gdb(~~呜呜，有点玄幻)，这个本来不是codelldb的，可恶的ms \u0026#34;cwd\u0026#34;: \u0026#34;${workspaceFolder}\u0026#34;, \u0026#34;environment\u0026#34;: [], \u0026#34;console\u0026#34;: \u0026#34;integratedTerminal\u0026#34;, \u0026#34;stopAtEntry\u0026#34;: true, // 在代码开头设置断点 \u0026#34;setupCommands\u0026#34;: [ { \u0026#34;description\u0026#34;: \u0026#34;Set assembly code display to Intel syntax format\u0026#34;, \u0026#34;text\u0026#34;: \u0026#34;settings set target.x86-disassembly-flavor intel\u0026#34;, \u0026#34;ignoreFailures\u0026#34;: true, }, { \u0026#34;description\u0026#34;: \u0026#34;Customize stack frame format to include function name, arguments, and file location\u0026#34;, \u0026#34;text\u0026#34;: \u0026#34;settings set frame-format \\\u0026#34;frame #${frame.index}: ${frame.pc}{ ${module.file.basename}{`${function.name-with-args}{${frame.no-debug}${function.pc-offset}}}}{ at ${line.file.basename}:${line.number}}{${function.is-optimized} [opt]}\\\\n\\\u0026#34;\u0026#34;, \u0026#34;ignoreFailures\u0026#34;: true, }, { \u0026#34;description\u0026#34;: \u0026#34;Set thread format to display thread ID, name, and current execution position\u0026#34;, \u0026#34;text\u0026#34;: \u0026#34;settings set thread-format \\\u0026#34;thread #${thread.index}: tid = ${thread.id%tid}{, ${frame.pc}}{ ${module.file.basename}{`${function.name-with-args}{${frame.no-debug}${function.pc-offset}}}}{ at ${line.file.basename}:${line.number}}{, name = \u0026#39;${thread.name}\u0026#39;}\\\\n\\\u0026#34;\u0026#34;, \u0026#34;ignoreFailures\u0026#34;: true, }, { \u0026#34;description\u0026#34;: \u0026#34;Enable detailed type information display for dynamic objects\u0026#34;, \u0026#34;text\u0026#34;: \u0026#34;settings set target.prefer-dynamic-value run-target\u0026#34;, \u0026#34;ignoreFailures\u0026#34;: true, }, { \u0026#34;description\u0026#34;: \u0026#34;Set maximum string display length to 512 characters\u0026#34;, \u0026#34;text\u0026#34;: \u0026#34;settings set target.max-string-summary-length 512\u0026#34;, \u0026#34;ignoreFailures\u0026#34;: true, }, ], }, // // 2. 适用于MSVC的调试 // // 调试MSVC编译的项目相比于lldb体验更好（毕竟是亲儿子 // \u0026#34;cmake.debugConfig\u0026#34;: { // \u0026#34;type\u0026#34;: \u0026#34;cppvsdbg\u0026#34;, // 使用VS的调试器 // \u0026#34;cwd\u0026#34;: \u0026#34;${workspaceFolder}\u0026#34;, // \u0026#34;environment\u0026#34;: [], // \u0026#34;console\u0026#34;: \u0026#34;integratedTerminal\u0026#34;, // \u0026#34;stopAtEntry\u0026#34;: true // }, // lldb插件相关设置 // 启动时执行的初始化命令（在目标程序启动前执行） \u0026#34;lldb.launch.initCommands\u0026#34;: [], // 运行前执行的命令（在目标程序启动后、断点命中前执行） \u0026#34;lldb.launch.preRunCommands\u0026#34;: [], // 自动解引用指针，显示指针指向的实际值而不是地址 \u0026#34;lldb.dereferencePointers\u0026#34;: true, // 抑制缺失源文件的警告信息，避免调试时的干扰 \u0026#34;lldb.suppressMissingSourceFiles\u0026#34;: true, // 反汇编显示模式：never=从不显示，auto=自动，always=总是显示 \u0026#34;lldb.showDisassembly\u0026#34;: \u0026#34;never\u0026#34;, // 启用详细日志记录，便于调试LLDB本身的问题 \u0026#34;lldb.verboseLogging\u0026#34;: true, // 启用命令自动补全功能，提高调试效率 \u0026#34;lldb.commandCompletions\u0026#34;: true, // 控制台模式：split=分割模式，可以直接在Debug Console中输入变量名查看值 // 其他选项：commands=仅命令模式，evaluate=仅求值模式 \u0026#34;lldb.consoleMode\u0026#34;: \u0026#34;split\u0026#34;, \u0026#34;lldb.displayFormat\u0026#34;: \u0026#34;auto\u0026#34;, // 变量显示格式 \u0026#34;lldb.launch.expressions\u0026#34;: \u0026#34;native\u0026#34;, // 表达式求值模式 \u0026#34;lldb.useNativePDBReader\u0026#34;: true, } 如上是对cmake的编译选项及调试的设置\n","date":"2026年1月1日","externalUrl":null,"permalink":"/blogs/posts/vscode-cmake-settings/","section":"Posts","summary":"","title":"VSCode CMake设置","type":"posts"},{"content":"","date":"2026年1月1日","externalUrl":null,"permalink":"/blogs/categories/%E6%97%A5%E5%B8%B8%E9%85%8D%E7%BD%AE/","section":"分类","summary":"","title":"日常配置","type":"categories"},{"content":"","date":"2025年12月27日","externalUrl":null,"permalink":"/blogs/tags/gis/","section":"Tags","summary":"","title":"GIS","type":"tags"},{"content":"","date":"2025年12月27日","externalUrl":null,"permalink":"/blogs/tags/qgis/","section":"Tags","summary":"","title":"QGis","type":"tags"},{"content":"qgis是一个开源的GIS工具（也是最主流的），近来在做课程作业的使用用到了，功能很完善，插件很多。果真做项目是学的最快的。\n下载安装 # 可以去官网下载，但下载的比较慢，可以去南大镜像的qgis下载(嘿嘿，是我提得issue哦，南大镜像站nb)\n推荐插件 # 天地图: 可以方便的导入地图底图，包括天地图、esri、谷歌地图、高德地图等地图。其中天地图需要api key，自行去天地图控制台获取。 Semi-Automatic Classification Plugin: 这个插件可以进行遥感影像的预处理和分类的操作。下载提供Landsat, Sentinel-2等。 嘿嘿，其他的后续再写吧 其实是我主要也就用这俩\n常见使用 # 哎，常见使用也挺多的，要根据项目要求来做，比如分级设色图、土地分类图、表转shape、栅格裁剪等。具体操作可以自行搜索或问ai。暂时先写到这了。\n","date":"2025年12月27日","externalUrl":null,"permalink":"/blogs/posts/qgis-a-awesome-opensource-gis-tool/","section":"Posts","summary":"","title":"QGIS：一个优秀的开源GIS工具","type":"posts"},{"content":"","date":"2025年11月8日","externalUrl":null,"permalink":"/blogs/tags/powershell/","section":"Tags","summary":"","title":"PowerShell","type":"tags"},{"content":"对于Win上的powershell有关配置值得说明一下\n现在推荐使用微软维护的最新版Powershell。win自带的powershell是个老旧版本。也可使用winget下载 winget install Microsoft.PowerShell。 且终端推荐使用WindowsTerminal 使用ohmyposh 安装 winget install JanDeDobbeleer.OhMyPosh --source winget # 没有winget 就手动下载 # Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString(\u0026#39;https://ohmyposh.dev/install.ps1\u0026#39;)) 设置powershell的配置文件 # ohmyposh 以某一主题启动 oh-my-posh init pwsh --config \u0026#34;powerlevel10k_classic\u0026#34; | Invoke-Expression 设置Powershell的终端字体，比如为Maple Momo CN NF，并将Windows Terminal的默认终端设置为之前下载的pwsh ","date":"2025年11月8日","externalUrl":null,"permalink":"/blogs/posts/powershell-config/","section":"Posts","summary":"","title":"PowerShell配置","type":"posts"},{"content":"","date":"2025年11月8日","externalUrl":null,"permalink":"/blogs/tags/windows/","section":"Tags","summary":"","title":"Windows","type":"tags"},{"content":" 使用cmake --build .而非make 尽量使用包的文档推荐的方式安装，减少手动用cmake编译的次数，因为cmake本身不具备包管理的能力，所以可能会污染环境，使用包管理（apt、vcpkg等）或者更现代的工具xmake ","date":"2025年10月7日","externalUrl":null,"permalink":"/blogs/posts/cmake-some-caution/","section":"Posts","summary":"","title":"CMake的一些注意事项","type":"posts"},{"content":"","date":"2025年9月23日","externalUrl":null,"permalink":"/blogs/tags/android/","section":"Tags","summary":"","title":"Android","type":"tags"},{"content":"","date":"2025年9月23日","externalUrl":null,"permalink":"/blogs/tags/%E6%B5%8F%E8%A7%88%E5%99%A8/","section":"Tags","summary":"","title":"浏览器","type":"tags"},{"content":" firefox 官方ftp：https://ftp.mozilla.org/pub/ 。注意子目录下的fenix是安卓版本的，那个firefox子目录是桌面版的 chromium 官方ftp：chromium 选择所需的平台和版本号 当前平台最新chromium下载 https://download-chromium.appspot.com/ 安卓端 firefox edge chrome 容易下载程度 较容易 容易 难 能否使用扩展 部分扩展可以 部分扩展可以 不行 对Bitwarden的支持 支持系统和扩展 支持扩展 不支持 网页适应性 较强 强 强 故此，在安卓端推荐使用firefox或者edge。至于桌面端相差不大。\n","date":"2025年9月23日","externalUrl":null,"permalink":"/blogs/posts/install-firefox-and-chromium/","section":"Posts","summary":"","title":"下载安装Firefox和Chromium","type":"posts"},{"content":"","date":"2025年9月23日","externalUrl":null,"permalink":"/blogs/categories/%E9%9A%90%E7%A7%81/","section":"分类","summary":"","title":"隐私","type":"categories"},{"content":"","date":"2025年9月1日","externalUrl":null,"permalink":"/blogs/tags/1password/","section":"Tags","summary":"","title":"1Password","type":"tags"},{"content":"如题，在我的机器debain13上，1password客户端的数据导出有个问题：导出的时候没有发生任何事情，连保存文件在哪都没有显示。经过向1password support团队的求助得出以下解决方案\n# 临时 sudo sysctl -w kernel.yama.ptrace_scope=1 # 然后重启1password客户端 # 永久设置 # echo \u0026#34;kernel.yama.ptrace_scope=1\u0026#34; | sudo tee -a /etc/sysctl.d/99-ptrace-scope.conf # sudo sysctl --system # 然后重启1password客户端 邮件原文如下图\n","date":"2025年9月1日","externalUrl":null,"permalink":"/blogs/posts/1password-export-data-on-linux-issue-and-solution/","section":"Posts","summary":"","title":"1Password在Linux上导出数据的问题","type":"posts"},{"content":"","date":"2025年9月1日","externalUrl":null,"permalink":"/blogs/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":"","date":"2025年9月1日","externalUrl":null,"permalink":"/blogs/tags/%E5%AF%BC%E5%87%BA/","section":"Tags","summary":"","title":"导出","type":"tags"},{"content":"","date":"2025年9月1日","externalUrl":null,"permalink":"/blogs/categories/%E9%9A%8F%E6%84%8F%E6%9D%82%E8%B0%88/","section":"分类","summary":"","title":"随意杂谈","type":"categories"},{"content":" 1password开源回馈team账户申请 # 开源项目作者可以白嫖1password~~\n条件 # 是一个持续更新1个月以上的开源项目的所有者或核心开发者 项目性质：非商业 申请地址: https://github.com/1Password/for-open-source\n申请流程 # 检查是否符合申请条件 拥有一个team版的1password账户：先去创建一个team账户(14天内免费试用)，保存好emergency kit 邀请第二人：为了防止team账户被封，邀请你自己的备用邮箱作为第二人加入你的team。 填写申请信息： https://github.com/1Password/1password-teams-open-source/issues/new?labels=application\u0026amp;template=application.yml\u0026amp;title=Application+for+[project+name] 注意哈 # 这个申请是for a team还是for an event还是都是，在项目介绍里同时介绍一下team和event 由于申请的审核会比较慢，可能会10天左右才会同意，若是team账户试用期快到了，但还没审核，请直接去Twitter(X)上PM 1password ，他们会尽快处理的。 ","date":"2025年8月25日","externalUrl":null,"permalink":"/blogs/posts/1password-opensource-feedback-team-account-application/","section":"Posts","summary":"","title":"1Password开源反馈团队账户申请","type":"posts"},{"content":"","date":"2025年8月25日","externalUrl":null,"permalink":"/blogs/tags/%E5%BC%80%E6%BA%90/","section":"Tags","summary":"","title":"开源","type":"tags"},{"content":"","date":"2025年8月20日","externalUrl":null,"permalink":"/blogs/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":" Docker的安装与配置 # 安装 # # Add Docker\u0026#39;s official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \\ \u0026#34;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \\ $(. /etc/os-release \u0026amp;\u0026amp; echo \u0026#34;$VERSION_CODENAME\u0026#34;) stable\u0026#34; | \\ sudo tee /etc/apt/sources.list.d/docker.list \u0026gt; /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 去掉sudo权限 # 添加用户到docker组 sudo gpasswd -a ${USER} docker 增加读写权限 sudo chmod a+rw /var/run/docker.sock 重启docker sudo systemctl restart docker 配置代理 # docker已经安装好了\nhttps://docs.docker.com/engine/daemon/proxy/#environment-variables\n编辑/etc/systemd/system/docker.service.d/http-proxy.conf和~/.config/systemd/user/docker.service.d/http-proxy.conf文件\nsudo mkdir -p /etc/systemd/system/docker.service.d touch /etc/systemd/system/docker.service.d/http-proxy.conf mkdir -p ~/.config/systemd/user/docker.service.d touch ~/.config/systemd/user/docker.service.d/http-proxy.conf 并往这些文件中输入以下相同的内容\n# ~/.config/systemd/user/docker.service.d/http-proxy.conf [Service] Environment=\u0026#34;HTTP_PROXY=http://127.0.0.1:7897\u0026#34; Environment=\u0026#34;HTTPS_PROXY=http://127.0.0.1:7897\u0026#34; Environment=\u0026#34;NO_PROXY=localhost,127.0.0.1\u0026#34; # /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment=\u0026#34;HTTP_PROXY=http://127.0.0.1:7897\u0026#34; Environment=\u0026#34;HTTPS_PROXY=http://127.0.0.1:7897\u0026#34; Environment=\u0026#34;NO_PROXY=localhost,127.0.0.1\u0026#34; 致谢 # 本文整合了docker文档与知乎的一个文章\n安装：https://docs.docker.com/engine/install/debian/ 去sudo权限：https://zhuanlan.zhihu.com/p/484171630 配置代理：https://docs.docker.com/engine/daemon/proxy/#environment-variables 感谢Linux do 社区佬友们的帮助！！！\n","date":"2025年8月20日","externalUrl":null,"permalink":"/blogs/posts/docker-install-and-config/","section":"Posts","summary":"","title":"Docker安装与配置","type":"posts"},{"content":"","date":"2025年8月20日","externalUrl":null,"permalink":"/blogs/tags/%E9%85%8D%E7%BD%AE/","section":"Tags","summary":"","title":"配置","type":"tags"},{"content":"","date":"2025年8月16日","externalUrl":null,"permalink":"/blogs/categories/%E5%AD%A6%E4%B9%A0/","section":"分类","summary":"","title":"学习","type":"categories"},{"content":"","date":"2025年8月16日","externalUrl":null,"permalink":"/blogs/tags/%E5%AD%A6%E4%B9%A0/","section":"Tags","summary":"","title":"学习","type":"tags"},{"content":"","date":"2025年8月16日","externalUrl":null,"permalink":"/blogs/tags/%E8%8B%B1%E8%AF%AD/","section":"Tags","summary":"","title":"英语","type":"tags"},{"content":"英语考试需要“常考”、“常学”、“针对性训练”，这对于我们的考试成绩提升是有很大用处的。\n","date":"2025年8月16日","externalUrl":null,"permalink":"/blogs/posts/english-test-training/","section":"Posts","summary":"","title":"英语测试训练","type":"posts"},{"content":"Rime是一个跨平台的开源输入法框架，我使用雾凇拼音。\n首先下载并安装小企鹅输入法、小企鹅输入法中州韵插件和剪贴板插件 （不错，他们都在fcitx5-android的release里，建议从F-Droid/GitHub下载）\n以下操作需要数据线与电脑，用电脑完成。\n下载并解压雾凇拼音release的full.zip ，随后将此文件夹里的内容复制进\\Android\\data\\org.fcitx.fcitx5.android\\files\\data\\rime即可。\n本文参考此博文，感谢前人整理。\n","date":"2025年8月14日","externalUrl":null,"permalink":"/blogs/posts/rime-on-android/","section":"Posts","summary":"","title":"Android上的Rime","type":"posts"},{"content":"","date":"2025年8月14日","externalUrl":null,"permalink":"/blogs/tags/rime/","section":"Tags","summary":"","title":"Rime","type":"tags"},{"content":"","date":"2025年8月14日","externalUrl":null,"permalink":"/blogs/tags/%E8%BE%93%E5%85%A5%E6%B3%95/","section":"Tags","summary":"","title":"输入法","type":"tags"},{"content":"","date":"2025年8月1日","externalUrl":null,"permalink":"/blogs/tags/nodejs/","section":"Tags","summary":"","title":"Nodejs","type":"tags"},{"content":"","date":"2025年8月1日","externalUrl":null,"permalink":"/blogs/tags/rust/","section":"Tags","summary":"","title":"Rust","type":"tags"},{"content":" windows安装及配置 # 咳咳，为了方便我配置win上的环境与重装系统。故此写这篇博客。\nwin重装系统 # 准备U盘，用Ventoy制作成可启动U盘\n下载纯净的操作系统iso: 去微软官网下载（推荐）/MSDN下载。并将iso文件放入U盘。（对于Debian的安装也差不多，将iso放入U盘即可）少用第三方魔改的系统\n以防万一，准备PE系统（优启通、微pe）的iso文件，放入U盘。这里放一个我的分享下载链接提取码:hAkO。\n重启电脑，不断按下你电脑的bios键，选择使用U盘启动，进入ventoy启动界面即可看到你U盘内的iso文件，点击win的iso，“normal boot”。\n到选择系统语言的界面后，shift + F10打开命令界面，使用以下命令断网安装（第一个不行就换第二个）\n# 第一个 oobe\\bypassnro # 第二个 start ms-cxh:localonly 再不行就网络换成飞行模式\n随后可能会经历多次重启，直到安装完成。\n笔记 激活win：HEU_KMS_Activator\n解压缩用7zip吧（不知道为啥win11的文件管理器解压不了rar文件 你还能有微软聪明.jpg）\n记得关闭windows安全中心\n环境配置 # 在win上配置环境是件不太优雅的事情，若是有包管理器多好。嘿嘿，还真有，scoop\n注意以下的命令最好在管理员的powershell下进行，虽然不一定要\nSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # 1. 设置 Scoop 的安装目录环境变量 $env:SCOOP=\u0026#39;D:\\Apps\\Scoop\u0026#39; # 2. 将这个环境变量永久写入用户配置 (下次打开 PowerShell 依然有效) [Environment]::SetEnvironmentVariable(\u0026#39;SCOOP\u0026#39;, $env:SCOOP, \u0026#39;User\u0026#39;) # 3. (可选) 设置全局安装路径 (如果需要全局安装软件) $env:SCOOP_GLOBAL=\u0026#39;D:\\GlobalApps\u0026#39; [Environment]::SetEnvironmentVariable(\u0026#39;SCOOP_GLOBAL\u0026#39;, $env:SCOOP_GLOBAL, \u0026#39;Machine\u0026#39;) # Machine 级别需要管理员权限 安装scoop\nInvoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression scoop install git # 哈哈，scoop 依赖git管理bucket，得先安装这个 需要使用代理\n# setup-my-env.ps1 # 添加需要的 Buckets scoop bucket add extras scoop bucket add java scoop bucket add nerd-fonts # 安装常用工具 scoop install git python nodejs openjdk maven vscode 7zip everything powertoys curl wget grep sed bandizip # ... 添加你需要的其他软件 # 清理旧版本 scoop cleanup * Write-Host \u0026#34;环境配置完成！\u0026#34; 参考了此篇帖子。\n常用软件下载 # 截图贴图工具：snipaste / flameshot 局域网文件传输：localsend 有些玩意比较私密，不想走微信 火绒：官网 作用是关闭windows defender 文本编辑器：vscode 一个code写天下 pdf阅读器： Okular 中州输入法：小狼毫 rime词库：雾凇拼音 代理软件：Clash-verge-rev 文件搜索工具：Everything 媒体播放器：VLC 剪切板管理器：Ditto 密码管理器：Bitwarden 浏览器插件 KeepassXC 浏览器：Firefox企业版 Chrome企业版 Chrome国内 有时候那些下载的破解软件的补丁软件可能会被windows defender删去，关闭它，防止它乱删软件\n编程环境 # python # 哦，对了对于python请安装miniforge,并用conda init powershell来初始化，换源参考debian-configuration\nc/c++ # MSVC # 安装vs，安装勾选c/c++开发即可下载MSVC。\n笔记 我也不想下载MSVC，但rust依赖c的工具链。毕竟是win的地盘\n当然也可以使用windows-gnu的工具链，这样rust工具链也要使用gnu工具链\nMSYS2 # 可以获得类似linux上的库安装体验，以及最新版的gcc等工具 官网是msys2.org，可以在这下载，也可以去镜像站下载 换源 sed -i \u0026#34;s#https\\?://mirror.msys2.org/#https://mirror.nju.edu.cn/msys2/#g\u0026#34; /etc/pacman.d/mirrorlist* 安装GCC等 pacman -Sy pacman -S mingw-w64-ucrt-x86_64-toolchain mingw-w64-cmake Rust # pacman -Sy mingw-w64-ucrt-x86_64-rustup rustup install stable-x86_64-pc-windows-gnu Node.js # 使用mise管理\nwinget install jdx.mise 换源与全局设置等详见 Debian配置的Nodejs一节\n尾声 # windows相比于linux的环境配置还是麻烦些的，在win上奇妙小问题可能很多，不过却是最常见的系统，拥有最广泛的支持。\n","date":"2025年8月1日","externalUrl":null,"permalink":"/blogs/posts/win-install-and-configuration/","section":"Posts","summary":"","title":"Windows安装与配置","type":"posts"},{"content":"隐私泄露一直以来都是个大问题，有些甚至是我们所不能防止的。但我们还可以做些预防措施来降低信息泄露的概率。\n微信中的允许陌生人查看十条朋友圈和支付宝中的向好友公开我的真实姓名是默认开启的，强烈建议关闭，尤其在这两个账号都可以被手机号搜索到的情况下。（当然也可以在添加我的方式中把手机号等途径取消掉）。还有取消qq的手机号添加好友，并将QQ空间设为仅好友可查看。\n密码使用强密码，并开启2FA，能用密钥登陆就用密钥登陆（说人话：使用密码管理器，推荐bitwarden，2FA推荐Ente Auth）。不同账户使用不同的用户名，防止账户信息收集被关联起来。注意在公开社群不要发出个人敏感信息。密码管理器记得也要开2FA哦。\n防止钓鱼，识别域名真伪，包括网址与电子邮件。\n使用代理（Proxy）。代理是流量的中转，可以隐藏使用者的ip地址，也可以隐藏服务器的ip。值得一提的是VPN（Virtual Private Network），通过一个集群服务器进行流量的跳转，一般认为5次跳转后就无法追踪源ip了。虽然使用了加密协议，但由于中间者的存在，依旧有着隐私泄露的风险。tor网络也值得一提，详情可见wiki。\ninfo 介绍一下2FA,常见的是使用短信验证码验证，但存在风险（日常下比较安全）。还有电子邮件验证码等。另一种是TTOP（Time-based One-Time Passwords）使用密钥加上时间再hash得到一串字符作为密码（常见的是6位数字）。以及安全密钥验证等。\n附上我个人密码及2FA备份的策略，如下图\n致谢 # 感谢LCPU Getting Started 第八节的内容做参考。 感谢LINUX DO论坛对我在安全意识与安全密钥制作选择上的帮助，感谢每一位建设社区的佬友。\n","date":"2025年7月21日","externalUrl":null,"permalink":"/blogs/posts/privacy-protect/","section":"Posts","summary":"","title":"隐私保护","type":"posts"},{"content":"","date":"2025年7月20日","externalUrl":null,"permalink":"/blogs/tags/latex/","section":"Tags","summary":"","title":"LaTeX","type":"tags"},{"content":"","date":"2025年7月20日","externalUrl":null,"permalink":"/blogs/tags/typst/","section":"Tags","summary":"","title":"Typst","type":"tags"},{"content":"","date":"2025年7月20日","externalUrl":null,"permalink":"/blogs/tags/%E6%8E%92%E7%89%88/","section":"Tags","summary":"","title":"排版","type":"tags"},{"content":"宋体、黑体、楷体、等宽、仿宋，主要是这些类型，并且将中英文分开。\n宋体(有衬线) en：Times New Roman zh: Source Han Serif SC/Noto Serif CJK SC(思源宋体：开源免费)、SimSun(中易宋体：使用广泛。平时在word/wps里见到的宋体就是它。)、FZShuSong-Z01S(方正书宋：个人商业均可免费使用) 黑体(无衬线) en: Arial zh: Source Han Sans SC/Noto Sans CJK SC(思源黑体：开源免费)、SimHei(中易黑体：使用广泛)、FZHei-B01S(方正黑体：个人商业均可免费使用) 楷体 em: Times New Roman zh: KaiTi(adobe家的，个人商业均免费)、SimKai(中易楷体：使用广泛)、FZKai-Z03S(方正楷体:个人商业均免费) 等宽(常用于代码) en：IBM Plex Mono(开源)、JetBrains Mono(好看，纯英，开源) zh: Source Han Sans HW SC(思源等宽,开源免费)、Maple Mono(中英文完美2:1对齐～～，推荐使用，开源免费) 仿宋 en：Times New Roman zh: FangSong(adobe家的，个人商业均免费)、FZFangSong-Z02S(方正仿宋：个人商业均免费) \u0026ldquo;Source Han\u0026quot;是adobe家的，Noto是google家的，Sim开头的是中易家的。前两者可以说是一个字体两个名字，后者因为自带于word和wps等排版软件中所以常用，甚至于在行距段距等方面均成为事实标准，写毕业论文要求的“宋体”就是它（无奈）。\n笔记 还有一点，就是有些字体没有加粗，只能用伪粗体，中易说的就是你。实际上word/wps、latex和typst遇上了这玩意的加粗用的都是伪粗体，而思源则可以正常加粗。至于英文里的斜体，中文里常用楷体或仿宋来表示强调。楷体和仿宋是中文所特有的。\n思源/Noto系列字体可以在镜像站里下载。开源字体均可以在github上下载，如思源/noto、IBM Plex、Maple Mono、JetBrains Mono。而至于那些对个人和商业免费的字体可以去官网或第三方网站下载。\n对了还有一个icon字体值得推荐Nerd fonts，常用于终端。\n之后也可以说说数学字体这个事。\n数学字体：New Computer Modern Math:(开源免费，TexFont，由CTAN开源)、Libertinus Math(开源免费，https://github.com/alerque/libertinus)、Cambria Math:(微软开发，默认搭载上)\n笔记 有时候我们想安装一个文件夹下的所有字体\nDebian 把该字体文件夹放在~/.local/share/fonts文件夹下（如果没有就创建），随后执行fc-cache -f -r -v更新字体缓存。 ","date":"2025年7月20日","externalUrl":null,"permalink":"/blogs/posts/typesetting-font-suggestion/","section":"Posts","summary":"","title":"排版字体建议","type":"posts"},{"content":"","date":"2025年7月20日","externalUrl":null,"permalink":"/blogs/tags/%E5%AD%97%E4%BD%93/","section":"Tags","summary":"","title":"字体","type":"tags"},{"content":" 我曾经学习过的网络资料 # 计算机 # 北京大学计算机基础科学与开发手册：仓库地址 LCPU GETTING STARTED: 网站,北大LCPU做的很好的课程。我也曾贡献过此仓库 清华暑培资料等：基础技能培训,24年暑培 USTC Linux 101：网址 翁恺c语言mooc 408王道考研书 数学 # 普林斯顿微积分 基本分析讲义(东南大学 李逸) 物理系的允文君的数学基础笔记，百度网盘 英语 # 四六级听力，哈哈 ","date":"2025年7月14日","externalUrl":null,"permalink":"/blogs/posts/my-learn-resources/","section":"Posts","summary":"","title":"我的学习资源","type":"posts"},{"content":"","date":"2025年7月14日","externalUrl":null,"permalink":"/blogs/tags/%E8%B5%84%E6%BA%90/","section":"Tags","summary":"","title":"资源","type":"tags"},{"content":" 初始 # 大约一年前，我看着同学的报告如此美观，标题、参考文献、关键词，这一切都是这么赏心悦目（正式），“这格式是真的漂亮啊”，随后想到了之前大计老师提过一嘴的LaTex，正巧图书馆培训也有关于科研写作的培训，就去学了下，之后也在后一学期的课程报告的文档上也用上了，就是那个最经典的article类，别说还怪正式的。\n这对我的信心有着极大的增强，可是正当我想要为我校做一个本科生毕业论文模板的时候，傻眼了：\n各种包、宏，不知道哪个宏是哪个包里面的 “\\”乱飞，眼花缭乱 看其他高校（THU）的代码，没有注释 本地环境难以配置，极其的重（texlive.iso 5个GB的安装包啊） 不知道包的文档在哪 没有好的社群指导自己 bib有好几个宏包 面对如此困境，险些绝望：我还能把模板做出来吗？前人也不是没写过本校的本科论文模板，但那个模板解耦性过低，而研究生论文模板的解耦性就很好，但看不懂，哈哈。\n直到NJU-LUG(NJU LINUX USER GROUP)群里看到了typst才看到了希望\n初识typst # LUG群里有位大佬——OrangeX4 (之后就知道他为啥是大佬了)，我在搜索typst后看到了方橙大大写的知乎文章,其中对typst的使用体验进行了描述，其中对typst进行了客观详实的描述，尤其是这几点很吸引我：\ntypst编译快，基本相当实时预览 typst本地开发无需下载所有包（说的就是你，texlive） typst报错可读性好，latex的报错可读性差 现代的编程语言，latex是宏语言 制作模板的能力强 随后迫不及待地投入typst的学习中，又看了方橙大大写的typst-talk，“哇，原来他还是touying和pinit包的作者，也是modern-nju-thesis的作者，大佬啊”。后来我的modern-szu-thesis的框架就是按照modern-nju-thesis来的。后来还去加了“typst中文非官方群聊”和typst官方的discord。群里面的大佬都很热情，问问题都有人解答，“在这个群即便不说话也能学到很多”，有些自己不会实现的问问群友基本都能解决。官方文档和群内大佬建设的faq是很好的参考资料。“群友科技”造福大家，像纸夜姐姐的tinymist，群主的typst_preview (现已经合并至tinymist里)，方橙大大的touying和modern-nju-thesis。如同扎猛子一样学习了起来。\n进步、欢喜 # 搓了一个寒假，终于争取在开学前把我的包modern-szu-thesis的发布了，第一次在github上做pr还是很激动的。\n肝了几周又把研究生部分的完成了，爽。\n平时有些科目要交报告，上面会有数学公式要写，用typst写数学公式，爽。\n期末要做poster，在universe里选了peace-of-poster做模板，迅速完成了，爽，还有另一门课要交实验报告，诶恰好，universe上有，爽。\n期末完了，迅速用touying的自带主题改了一个本校的slides模板，爽。\n在LCPU Getting Started里的第十二节的关于latex的安装和typst部分的资料由我推荐，由LCPU成员完成撰写，我参与code review,激动！还帮忙在typst-talk里修了些过时内容，爽。\n不止于此，不限于此！\n","date":"2025年7月13日","externalUrl":null,"permalink":"/blogs/posts/my-typst-experience/","section":"Posts","summary":"","title":"我的Typst体验","type":"posts"},{"content":"","date":"2025年7月11日","externalUrl":null,"permalink":"/blogs/tags/debian/","section":"Tags","summary":"","title":"Debian","type":"tags"},{"content":"debian是一个自由操作系统，又被称做Debian GNU/linux，官网是https://debian.org。本贴持续更新哈。\n有时简直想告诉读者，快点使用搜索引擎吧，这不比我的破教程香\n换源 # DEB882格式：适用于debian12及以上。目前稳定版是Debian13（Trixie）\n# /etc/apt/sources.list.d/debian.sources Types: deb URIs: http://mirror.nju.edu.cn/debian/ Suites: trixie trixie-updates Components: main contrib non-free non-free-firmware Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg # Types: deb # URIs: http://security.debian.org/debian-security # Suites: trixie-security # Components: main contrib non-free non-free-firmware # Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg 笔记 换源后记得升级包哦\nsudo apt update \u0026amp;\u0026amp; sudo apt upgrade升级包\n笔记 升级系统版本到测试版的方法\n换源至测试版 最小更新 sudo apt upgrade --without-new-pkgs 重启 中等更新 sudo apt upgrade 重启 全面更新 sudo apt full-upgrade 重启， sudo apt update \u0026amp;\u0026amp; sudo apt upgrade 常用下载 # sudo apt install wget curl vim htop font-manager tlp tlp-rdw # tlp 电池优化 # ThinkPad 需要一些附加软件包。 # sudo apt install tp-smapi-dkms acpi-call-dkms 下载截图工具:snipaste，不过KDE自带的spectacle功能也挺好用的\nChrome浏览器：(速度竟然还挺快)\n# 获取GPG验证密钥 curl -fSsL https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor | sudo tee /usr/share/keyrings/google-chrome.gpg \u0026gt;\u0026gt; /dev/null # 添加google-chrome仓库 echo \u0026#34;deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main\u0026#34; | sudo tee /etc/apt/sources.list.d/google-chrome.list # 安装 sudo apt update \u0026amp;\u0026amp; sudo apt install -y google-chrome-stable 输入法 # sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-rime 词库使用雾凇拼音，下载仓库解压到~/.local/share/fcitx5/rime下，即可使用，或使用git。\ncd ~/.local/share/fcitx5 # 这里我用的是我自己的仓库 git clone git@github.com:yjdyamv/rime-ice.git rime --depth 1 # 这个是原仓库 # git clone https://github.com/iDvel/rime-ice.git rime --depth 1 # 更新 cd rime git pull 笔记 防止在vscode里用不了中文\n环境设置,在位置/etc/environment输入以下内容，参考了此博客帖子\n# # This file is parsed by pam_env module # # Syntax: simple \u0026#34;KEY=VAL\u0026#34; pairs on separate lines # XIM=fcitx5 XIM_PROGRAM=fcitx5 GTK_IM_MODULE=fcitx5 QT_IM_MODULE=fcitx5 XMODIFIERS=@im=fcitx5 SDL_IM_MODULE=fcitx5 GLFW_IM_MODULE=fcitx5 flatpak # 安装： # 安装Flatpak sudo apt install -y flatpak # 安装Flatpak的KDE plasma扩展 sudo apt install -y plasma-discover-backend-flatpak # 添加官方仓库 flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo 换源： sudo flatpak remote-modify flathub --url=https://mirrors.ustc.edu.cn/flathub 下载所需软件 # 下载Firefox flatpak install flathub org.mozilla.firefox # 下载matrix客户端 flatpak install flathub im.fluffychat.Fluffychat # 下载localsend flatpak install flathub org.localsend.localsend_app 其他的就不列举了\n代理 # 咳咳，就放个clash verge rev的官网在这吧 https://www.clashverge.dev/，GitHub仓库地址是https://github.com/clash-verge-rev/clash-verge-rev。订阅链接就自己去找吧 （狡黠）\n终端美化 # zsh: sudo apt install zsh 安装oh-my-zsh sh -c \u0026#34;$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)\u0026#34; 安装zsh主题powerlevel10k git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k ~/.zshrc里ZSH_THEME=\u0026quot;...\u0026quot;修改为：ZSH_THEME=\u0026quot;powerlevel10k/powerlevel10k\u0026quot;\n安装插件zsh-autosuggestions和zsh-syntax-highlighting git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting 在~/.zshrc里将plugins项改为如下以启用扩展。z、extract、web-search均为内置插件。\nplugins=(git zsh-autosuggestions zsh-syntax-highlighting z extract web-search) 注：\nextract：x asdf.tar.gz可以方便解压，无需了解后缀。 z：z dir即可到达曾经去过的dir文件夹下 web-search：bing zsh是什么可在终端中直接搜索 开发环境 # 下载 vscode\n不要添加vscode仓库到/etc/apt/sources.list.d/vscode.list，国内网络用此仓库更新下载会很慢。\n下载插件: clangd, ms-python, pylance, xmake，rust-analyzer，remote-ssh(code)/open remote-ssh(codium)等。\n笔记 可以登陆github账户以同步setting.json及插件。\nc/cpp # gcc、clang工具链及clangd语法分析与代码提示工具 sudo apt install build-essential clang clangd 构建工具 sudo apt install xmake cmake meson 信息 xmake在trixie（debian13）及以后可以直接sudo apt install xmake安装\npython # 下载并安装miniforge\nnote 注意此处不要手快回车了，输入yes来进行conda init。目的是将设置环境变量及conda环境激活脚本终端在打开时执行。 要是回车了也有补救办法：\n~/miniforge3/bin/conda init zsh $$ ~/miniforge3/bin/mamba shell init conda换源： conda config --set show_channel_urls yes来生成.condarc,其内容修改为如下。\n# ~/.condarc channels: - defaults show_channel_urls: true default_channels: - https://mirror.nju.edu.cn/anaconda/pkgs/main - https://mirror.nju.edu.cn/anaconda/pkgs/r - https://mirror.nju.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirror.nju.edu.cn/anaconda/cloud pytorch: https://mirror.nju.edu.cn/anaconda/cloud pypi换源：\npython -m pip install -i https://mirror.nju.edu.cn/pypi/web/simple --upgrade pip pip config set global.index-url https://mirror.nju.edu.cn/pypi/web/simple rust # 将以下内容加入.zshrc，随后自行执行source ~/.zshrc\nexport RUSTUP_DIST_SERVER=https://mirror.nju.edu.cn/rustup export RUSTUP_UPDATE_ROOT=https://mirror.nju.edu.cn/rustup/rustup 使用官方脚本下载安装Rust\ncurl --proto \u0026#39;=https\u0026#39; --tlsv1.2 -sSf https://sh.rustup.rs | sh 信息 debian13以上可以直接sudo apt install rustup，然后使用rustup install stable来下载工具链\nnodejs # 使用mise(推荐,速度快)： 安装mise curl https://mise.run | sh volta换源：修改~/.config/mise/config.toml 或者执行以下命令 mise settings node.mirror_url=https://mirrors.ustc.edu.cn/node/ # ~/.config/mise/config.toml [settings] [settings.node] mirror_url = \u0026#34;https://mirrors.ustc.edu.cn/node/\u0026#34; [tools] node = \u0026#34;24\u0026#34; 安装node mise install node@24 并设置全局node为24版 mise use -g node@24 npm换源：使用淘宝源 npm config set registry https://registry.npmmirror.com git global # ssh密钥 # 我保存在Bitwarden里了哈。直接复制到~/.ssh/id_25519和~/.ssh/id_25519.pub就行。\n笔记 提一嘴哈，也可以使用ssh-keygen -t ed25519命令。ed25519的好处是公钥短，计算快，强度也不低，大致相当于rsa3072位的强度，并且大多的git仓库服务基本都支持此算法，如github、gitea、gitlab等。如果想换用RSA算法可以使用此命令ssh-keygen -t rsa加上-b 4096可以指定4096位数，ed25519就不用指定位数了（其实也指定不了，因为定死了）。\ned25519算法在OpenSSH 6.5 时引入，在 9.5 时成为默认算法，此前RSA为默认算法。有些机器系统可能很老，OpenSSH版本低则可能不支持ed25519，这时就得用RSA密钥了。RSA可以调整密钥位数，ed25519不能。RSA已经有对应的量子算法破解（不过这得等待量子计算机建设的发展了，现在的量子计算机还没有多少量子比特）。RSA的好处是兼容性好、灵活性好，但安全性有所降低。\nusername \u0026amp; email # git config --global user.name \u0026#34;your-username\u0026#34; git config --global user.email \u0026#34;your-email-address\u0026#34; 代理(ssh) # sudo apt install corkscrew\n编辑此文件~/.ssh/config\n# ~/.ssh/config Host github.com User git ProxyCommand corkscrew 127.0.0.1 7897 %h %p IdentityFile ~/.ssh/id_ed25519-github 此方式来自于stackoverflow的一个问答\n感谢 # 感谢ustc源的帮助文档及校园网联合镜像站的帮助文档\n感谢ustc mirror、nju mirror及校园网联合镜像站对于中国开源社区的贡献。\n感谢LCPU的公开课程——LCPU Getting Started,此课程对我帮助很大，使我受益良多。\n","date":"2025年7月11日","externalUrl":null,"permalink":"/blogs/posts/debian-desktop-configuration/","section":"Posts","summary":"","title":"Debian桌面配置","type":"posts"},{"content":" 前言 # vscode是一个著名的文本编辑器，深受程序员喜爱。\n优点：\n轻量化尤其相对于是VS,Pycharm这种重器 插件众多，主流选择 主要由微软维护 不怕跑路 跨平台（win,mac,linux）上均可使用 本篇文章主要讲述vscode在c++和python开发上的配置。供记录自己的思路和为他人做参考。那么我们开始吧。由于作者主要使用debian和win系统，所以对mac少有提及。\nvscode下载 # 没想到这个也得教，因为xhs上总是有人进入了vscode的冒牌网站，然后说39.9元永久解锁\nvscode是免费的，官网是https://code.visualstudio.com/ 然后根据你的系统选择你的下载格式，win就是.exe/msi，ubuntu/debian就是.deb，centos/rocky/fedora就是.rpm\nmac我真没用过，原谅我。\n提示 vsc的全局设置setting.json可以这样打开 c/c++环境配置 # c/c++编译器 # c++主流编译器/工具链有三家，MSVC、GCC和Clang。其中MSVC是由微软维护，GCC由GNU维护，Clang由LLVM维护。（在这里不区分GCC和gcc的区别，有想了解的可自行查阅）\n其实c语言也是个老登了，直到近几月，c语言官网才出来，c语言发明时是1978年\n使用MSVC就不多做讲解，因为VS就是一个完善的IDE且内置MSVC，你只用选择下载c++环境就可以了，无需更多配置\n如果你想在win上使用GCC/Clang那么你就要使用mingw64啦。\n信息 mingw64是有人将GCC 工具链的代码迁移到win上的工具链，现在似乎推荐使用UCRT64了\n配置 # win: 去github上下载别人预编译好的版本。如果网络不好，那么可以下载南大镜像版 记得将/mingw/bin目录添加到系统环境变量哦 （推荐） 使用msys2的ucrt64环境 去下载msys2安装包，安装\n换源:\nsed -i \u0026#34;s#https\\?://mirror.msys2.org/#https://mirror.nju.edu.cn/msys2/#g\u0026#34; /etc/pacman.d/mirrorlist* 更新并安装\npacman -Sy pacman -S mingw-w64-ucrt-x86_64-toolchain mingw-w64-cmake 然后添加D:/msys2/ucrt64/bin到环境变量（假设安装在D:/msys2了）\nubuntu/debian: 直接sudo apt install build-essential就可以了。linux还是这么容易配置开发环境 语法高亮 # 因为vscode是一个文本编辑器，所以它无法为众多编程语言提供文本高亮以及文本补全等IDE必备功能，而是使用了LSP协议为这一功能进行了封装，使得其他人可以很方便的为vscode编写插件，让它拥有这样的功能。可以查看此网站来进一步了解LSP\n你可以选用的高亮插件有两个，一个是ms开发的C/C++插件，另一个是clangd,你均可以在vscode插件商店里下载这两个插件。其中前者由微软维护，后者由LLVM组织维护。\n提示 你当然可以去下载CodeRunner或codelldb这样的插件，以让你的vscode更像一个IDE\n构建工具/包管理 # 构建工具在多文件、依赖管理等方面起着重要作用。\n因为c++缺少官方的包管理，也就意味着你不能像python里直接pip install package_name或者rust里cargo add来添加和下载依赖项。现代的语言都有包管理。但存在着vcpkg,conan,还有pacman、apt、yum、dnf这样的包管理器。使用包管理器你可以很方便的下载依赖包，如常用的opengl和boost库等。\n虽然C++20引入了module,但目前主流编译器（MSVC,GCC,Clang）支持不完善，MSVC的支持相对完善些。但这个特性不太常用\n提示 （举手）诶，等一下，要是包管理的仓库里没有我要的包怎么办呢？\n这里就要引入构建工具了。你将会手动下载所需的库、设置查找库的目录和设置链接库的名字。 为这个库打包并上传至官方包管理仓库，以后你就可以很轻松的install此库了。 在c++里，你将会自己下载第三方的库（静态库、动态库和头文件等），熟悉可执行文件生成的过程（预处理、编译、链接）。\n提示 其实编译器做的就是将源代码翻译成汇编或机器码。\n常见的构建工具有make,cmake,xmake等。make相当古老且且仅适用于linux平台。cmake应该被叫做构建工具的“构建工具”，因为使用cmake可以生成多种工具链的配置，而你只需编写一遍cmake的配置文件，就可以生成出适用于MSVC+vcpkg或GCC/Clang+make/ninja的配置，之后你就可以使用VS打开生成的工程文件或者在命令行上make就可以编译运行了。\n不过我这里主要谈xmake配置、使用，哈哈。xmake既可以当包管理来用，也可以当构建工具用。\nxmake # 为什么是xmake呢？xmake相比于cmake有什么优势呢？语法较简洁，目前较为先进的构建系统，对于小项目开发很友好。xmake是国人一位大牛制作的，已经在github上斩获上万star。\n安装xmake：官网安装教程,其中主要是用官方脚本或包管理器安装。\n官网中有着命令行教程来创建工程、编译程序、运行程序、调试程序的教程，可以跟着做做。\n安装xmake的vscode的插件：去vscode插件商店下载哦。\n新建一个空文件夹，然后用vscode打开此文件夹，在vscode的命令面板里输入\u0026gt; xmake: create project，然后你就可以选择使用的语言及工程类型了\n之后你就能看到哇，可以用点点点来选择你的编译工具链、目标架构平台等详细信息了。\nxmake的相关语法可以在官网查询 我就不教了（狡黠）\n提示 在vscode里会出现高亮不对（找不到头文件在哪的报错），请查看xmake configuration intellsence来配置vscode\npython环境配置 # python最好的就是它包多，科学计算的人在用，数据分析的人在用，后端框架也有。并且也有方便的包管理工具，如pip和conda。\n提示 由于python是解释性语言，无需编译即可运行，也就意味着只要把编写的程序发布就相当于发放了源代码。有些程序不开源，但部分组件是python写的，我们就可以改动。 没错没错，c/cpp和rust就是编译性语言\n下载python # 在官网下载python 下载anaconda/miniconda等商业发行版或者是miniforge这样的社区领导的发行版（推荐） 管理python环境包的方法主要有两种\n虚拟环境(venv) conda 虚拟环境是python官方提供的一个管理依赖项目的工具，详情可查看官方文档。\n你可以选择anaconda、miniconda、miniforge等来配置你的conda环境。这里推荐使用miniforge，如果下载过慢可以去南大镜像站下载\n信息 anaconda 由于包含了许多常用包，导致很重，约1GB，而miniforge和miniconda则较小，约100MB。而miniforge所携带的mamba则比conda性能更高，且你同样也可以使用conda的命令。\n如果要在win上使用anaconda最好把环境变量配置一下，不然在终端里敲击conda，win是找不到conda在哪的，详情可参照此配置。然后在anaconda propmt里输入conda init即可完成配置。\n在linux的终端里，根据你所使用的终端的不同，你要执行如下命令完成配置：~/miniforge3/bin/conda init zsh (我的终端是zsh,你应该将此处替换为你所使用的终端，如fish bash等)\n重要 我们在完成上述配置后一定要对pypi和conda进行换源，因为python在你在你命令pip install package后，会向某服务器下载你要的包，默认是python官方的服务器（国外），为了高速下载包请自己换源至国内高校镜像站\n插件配置 # 请下载ms-python,之后你的python代码就有高亮和代码提示了，好诶。\n信息 注：其实高亮是pylance带来的。这个插件名义上是开源的，但在codium上已经不能使用了，能使用的最高版本是2023.6.40，详情可以观看这个讨论\n提示 清华大学镜像站,中国科学技术大学镜像站,南京大学镜像站，这些镜像站可以方便国外常用软件的下载和换源，以及linux的下载和换源。\n结语 # vscode号称一个code写天下，你基本只用配置插件即可。对我来说，因为我的主系统是debian+win，我有跨平台的要求，所以选择了vscode。如果只在win上开发，你当然可以选择“宇宙第一IDE”VS。至于其他的文本编辑器如vim,emacs等就靠读者自己探索吧。因为我主力是code，vim主要用于在命令行里编辑文件（linux自带vi和nano），emacs用的少\n信息 微软开源的文本编辑器 code oss，而vscode是基于此项目的微软独有软件。如果你在win上安装vscode的时候就会注意到其软件许可证是MICROSOFT SOFTWARE LICENSE，而不是code-oss的MIT协议.\n由上述开源仓库编译的产物被称作codium，vscode被称作code。codium的官网是https://vscodium.com/。\n","date":"2025年7月8日","externalUrl":null,"permalink":"/blogs/posts/vscode-configuration-for-programming/","section":"Posts","summary":"","title":"VSCode配置","type":"posts"},{"content":"","externalUrl":null,"permalink":"/blogs/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/blogs/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"欢迎来到我的友链页。下面这些友链会以卡片形式展示。\n","externalUrl":null,"permalink":"/blogs/%E5%8F%8B%E9%93%BE/","section":"友链","summary":"","title":"友链","type":"friends"}]