Category: 技术笔记
-
编程语言二三事
本文的写作动机:作为一般程序员而非专门的编程语言研究者,收集对于 PL 的一些基础概念,作此草稿。本文较为琐碎,章节标题并列不代表这两个话题一定是并列的关系。 更新策略:直接修改本文内容 作用域、名称绑定和闭包 自由变量 (Free) 和约束 (Bound) 变量 在数理逻辑中 在表达式 Sigma_{k=1}^10 f(n,…
-
包管理工具的使用技巧
从编程语言特定的 pip, conda,到操作系统级的 apt, pacman,我们在构建工程时离不开包管理工具为我们处理依赖。本文旨在总结这些工具的使用技巧。 如果你也经常用包管理工具,可能能从本文中获得启发。然而,本文不保证全面性(不保证这是认识它们的最佳视角/使用它们的最佳实践)和准确性(以工具的文档为准)…
-
使用 Electron 开发”聊天记录管理器”桌面应用
代码仓库见 github.com/wangziao9/directory-of-dialogues,不定期维护。 动机:聊天会话的笔记管理 线性倒序列表的普遍性 多数 AI 聊天助手,不论是网页还是桌面应用,对聊天会话的管理功能大体都遵循 ChatGPT 的惯例,提供一个线性、时间倒序的会话列表。这相当于一个 LRU …
-
点查找、区间树和线段树
计算几何中的正交范围查询(Orthogonal Range Search),旨在快速响应与坐标轴对齐的“长方形/立方体”范围的对象查找。 对象为点的查找 思路:范围树 一维查找 有序向量可以解决这个问题,但它不能扩展到高维。为此,我们使用建立平衡二叉树的预处理方法,叶子节点是对象本身,内部节点存储左子树包含的对象的最大值。若已经对象已经排好序,则预处理是…
-
采样技巧和 ReSTIR 渲染算法
本文是 ReSTIR DI 算法的一些前置知识和论文阅读笔记 更新策略:直接修改本文内容 关于采样技巧 蒙特卡洛积分和重要性采样 蒙特卡洛积分是通过采样来估算积分的方法: \int_x f(x)dx = 1/N \Sigma_{i=1}^N f(x_i)/p(x_i), x_i~p(x_i) 一个性质是,当样本的分布 p 接近 f 的形状时,估计值的方差就小;当…
-
alg: 图论相关算法
重申一下,alg 系列博文(本文在内)中的伪代码部分复制或改动自清华大学数据结构课程(邓俊辉课堂的)讲义,它可以从这个链接获取。 关键词:最小支撑树 Minimum Spanning Tree:Prim 算法,Kruskal 算法,其中 Kruskal 算法用到了并查集单源最短路径树 Shortest Path Tree / …
-
alg: 单调队列和滑动窗口算法
单调队列 给定一个长度为 n 的数组,需要输出每连续 k 个数(A[i, i+k-1])中的最大值,可以在 O(n) 时间内做完吗? 一个思路就是动态地维护一个队列,在任何时刻 i 都满足 队列中的元素来自 A[i, i+k-1] A[s] 在队列中,当且仅当 A(s, i+k-1] 中的元素都小于 A[s]。特别地,A[i+k-1] 一定在队尾。…
-
alg: 字符串匹配算法
这是以 alg 作为标题前缀的数据结构与算法系列。本系列的更新策略:直接更新内容,不标出更新的年月日。 本系列的写作参考了诸多来源,一个重要来源是清华大学数据结构课程(邓俊辉课堂的)讲义和《数据结构(C++语言版)》的内容,有些段落可能 文字复制比 / 伪代码复制比 较高,但不保证相关部分与上述来源完全一致。如果你想要系统性地初学数据结构与算法,推荐从上述两个材料入手,它们可以从…
-
关于部署一个Mastodon站点
我是如何写作本文的:在应用部署平台和 VPS 上各自建立了一个测试用的 Mastodon 站点后,作技术笔记。自评可靠程度:可靠性中等,全面性中等。 本文适合谁看/怎么看:了解 Mastodon 的设计和使用,并对建立自己的 Mastodon 站点感兴趣的读者。单纯想看关于 Mastodon 的小介绍、VPS 评测、或 Nginx…
-
初识固件接口和磁盘分区:计算机是如何启动的?
前些时间为了给笔记本上的Arch Linux系统增加存储空间,折腾了一下磁盘分区,借此了解了磁盘分区、固件接口等等与计算机启动过程相关的底层结构,记录如下。 固件与固件接口 (Firmware Interface) 在操作系统之下,直接操作硬件的底层控制软件称为固件(Firmware)。顾名思义,“固”件就是固定在硬件中的软件,按照这个理解,的确有很多固件被存储于ROM、EEPROM之类的只读存储器上,很难变更。然而也有一些固件被存储在磁盘上,没有被定死,一个典型的例子就是引导程序…
-
关于非对称密码学、CA 和 TLS
最近一次更新:2024/10/1 非对称密码学 非对称密码学应用两个密钥、公钥 Pub 和私钥 Pri 。对数据应用公钥或私钥的过程是单向的,即计算上不可能通过 Pub(x) 或 Pri(x) 来反解 x。想要通过这两者获得 x,只能应用另一把钥匙,即 Pri(Pub(x)) = x = Pub(Pri(x))。 顾名思义,公钥是公开的、私钥是保密的。利用这一点和上述数学性质,可以实现加密送信和数字签名。…
-
关于部署一个网站
摘要:一些关于部署网站的技术知识的概述。 域名 域名对一个网站的作用,无需多言。澄清一点,云服务器提供商和域名提供商是分离的。虽然云服务器经常向用户兜售域名,但你使用的域名不必来自云服务器提供商。反之亦然。 域名产业的结构 所谓购买域名,实际上是租赁域名一段时间的使用权(每次续约最长十年)。域名最终是由 ICANN(International…