English Pronunciation, Vowels
/ʌ/
This is a very relax sound.
The jaw drops, but the rest of the mouth remains very neutral
The tongue is relaxed: the back presses down just a little bit, and the lip is forward.
/ɑ/
This vowel needs a lot of jaw drop.
The tongue tip lightly touches behind the bottom front teeth,
the back part of the tongue presses down a little bit
The lips are neutral
/ɔ/
The jaw drops, the lips flare a little bit
the tongue shifts back. The tips of the tongue doesn’t touch anything.
Think of t ...
记一次 Rust 编译体积优化
最近在用 Rust 写一个 Alfred 工作流,写完后发现体积有点大,于是查找了一些减少编译体积的方法,在此记录一下。
编译器版本:
12> rustc --versionrustc 1.79.0-nightly (4d570eea0 2024-04-26)
1.使用 Release 构建
Cargo 默认使用 debug 模式编译,这个模式下没有进行任何优化,并且附加了大量的调试信息,所以程序体积比较大。如果采用 release 模式下会对程序进行优化,也不会包含调试信息,详情可以参考 cargo book 或者 rust book.
我的程序也不是很大,在 debug 模式大概有 2.7MB,使用 release 模式下能够减少到 2.1 M,大概减少了 22%. 因为我的程序原本就不大,所以 20% 的减少量还是挺可观的。如果程序比较大,这个体积的减少量会更大。
2. 修改 Profiles
2.1 调整优化等级
Cargo 中提供了 profiles 用来修改一些编译设置,其中可以使用 opt-level 来调整优化等级。下面是一些可选的值,具体可以查看 cargo b ...
CSS笔记
Place to write CSS
引入 CSS 有三种方式:
Inline CSS: 在标签内部写入 CSS 样式(不推荐)
Internal CSS:在 head 标签中写 CSS 样式
External CSS:引入外部的 CSS 文件
1234567891011121314151617181920<!-- 1. Inline CSS --><p style="color: blue">Inline CSS. Should never be used</p><!-- 2. Internal CSS --><head> <style> .internal-p { color: orange; } </style></head><body> <p class="internal-p">Internal CSS. Write in style element within h ...
HTML学习笔记
Text
Heading
使用 <h1>Heading</h1> 可以使用标题标签,同理还有 h2, h3 标签
1234<h1>Level 1 title</h1><h2>Level 2 title</h2><h3>Level 3 title</h3><h5>Level 5 title</h5>
其最终效果类似于下面这段文字:
Level 1 title
Level 2 title
Level 3 title
Level 5 title
Paragraph
使用 <p>paragraph</p> 可以表示一段文本
1<p>This is a paragraph.</p>
Style
可以使用 <strong> 或者 <b> 标签来加粗一段文字;也可以使用 <em> 或者 <i> 标签来强调(斜体)一段内容
12You can use <strong>stro ...
协变与逆变
第一次接触 covariant(协变) 和 contravariant(逆变) 是在学习 Rust 的时候,然后就因为没看懂放弃了。直到最近有一次看到了这个术语,结合了 Kotlin 中的 covariant 和 contravariant ,逐渐理解了 Rust 中的 covariant 和 contravariant。下面我们从 Kotlin 中的 covariant 和 contravariant 入手,然后将其推广到 Rust 中。
现在我们有三个 class: Person、Student、Teacher,其中 Student、Teacher 均继承自 Person
12345open class Person(var age: Int = 1) {} class Student(): Person() {} class Teacher(): Person() {}
Covariant
如果一个类型 Child 是另一个类型 Parent 的子类型,那么对于 类型 T, T<Child> 也是 T&l ...
《Efficient Query Processing with Optimistically Compressed Hash Tables & Strings in the USSR》论文笔记
在现代的查询引擎中,许多操作都会使用到 Hash Table,而且由于数据量很大,所以 Hash Table 会占用很多空间,这时 Hash Table 可能就决定了一个查询占用的内存消耗。而且由于 CPU 的缓存层次比较复杂,随机访问时间会根据工作集的大小而呈现数量级的变化。
论文提出了两种减小 Hash Table 的方法:
减少填充因子
减少 bucket/row 大小
现有的研究基本集中在第一个方法上(比如 Robin Hood Hashing、Cuckoo Hashing、Concise Hash Table),而本篇论文关注第二种方法,即如何减少 bucket/row 大小。论文提出了三种互补的方法:
Domain-Guided Prefix Suppression:一种轻量级的压缩算法
Optimistic Splitting:冷热数据分离
Unique Strings Self-aligned Region (USSR):针对字符串优化
Domain-Guided Prefix Suppression
Domain-Guided Prefix Suppressi ...
RisingLight 学习笔记-Storage
Block
block 就是一个字节数组
12/// A block is simply a [`Bytes`] array.pub type Block = Bytes;
blob block
char block
dict block
nullable block
primitive block
rle block
RisingLight 提供了一些列 Block Builder trait 来构建 block,这些 build 都需要实现 BlockBuilder trait。BlockBuilder 定义了构建一个 block 需要实现的基本操作。除了 BlockBuilder trait,还定义了 NonNullableBlockBuilder trait 为不为空的类型的 block 定义了相关操作。
classDiagram
direction LR
BlockBuilder <|.. PlainBlobBlockBuilder
BlockBuilder <|.. PlainCharBlockBuilder
BlockBuilder <| ...
《An Empirical Evaluation of In-Memory Multi-Version Concurrency Control》学习笔记
Motivation
多版本并发控制(Multi-version concurrency control,MVCC)目前是现代数据库管理系统(DBMS)中最热门的事务管理策略。在处理事务时,维护数据的多个版本以在不牺牲串行性的同时提高并行性。但是在多核和内存中扩展 MVCC 并非易事:当有大量线程并行运行时,同步带来的开销可能超过多版本带来的好处。
为了理解在现代的硬件配置下处理事务时 MVCC 如何执行,论文对 MVCC 的 4 个关键设计决策进行了大量研究:并发控制协议、版本存储、垃圾回收、和索引管理。
背景
MVCC 的基本想法是,DBMS 为数据库中的每个逻辑对象维护多个物理版本,让只读的事务访问元组的旧版本,而不会阻止读写事务在同时生成新的版本。
实现方式有多种:
Append-only
Time-travel
Delta
无论实现方式如何,MVCC DBMS 都会维护用于事务和数据库元组的通用的元数据。
事务: 当事务 TTT 首次进入 DBMS 系统时,DBMS 会为该事务分配一个唯一、单调递增的时间戳作为它的标识符(TidT_{id}Tid)。并发控制协议使用这 ...
我的 Mac 环境
最近手贱把 vim 的插件更新了,结果造成了 break changes,真的是后悔莫及。虽然进行了一定程度的修补,到了勉强能够继续用的程度,但是以为不想再经历一次 break changes,所以我把 vim 环境你迁移到了 LazyVim(虽然以前也是 Lazyvim 改造的环境),这样就不用这么折腾了。趁着这次迁移,我还把之前使用的 ohmyzsh 和 oh my tmux 给替换了。这篇文章主要是记录我的 Mac 环境和踩的坑,方便以后查看
joshuto
joshuto 是一个终端下的文件浏览器,和ranger 类似,但是使用 Rust 重写的。joshuto 的基本上能够 cover ranger 的所有功能(包括文件预览、排序、重命名、搜索、打开等),而且速度更快。B 站 CW 大佬写了一个 joshuto 的 vim 插件,可以在 vim 中打开 joshuto,目前该作者已经与 joshuto 的作者取得了联系,应该不会弃坑不顾,所以可以放心使用
下面是 joshuto 的文件结构,还是挺简洁的,我个人基本上只修改了 keymap.toml,修改为了更加贴近 vim ...
RisingLight 学习笔记-Binder
SQL 解析后,会调用 Binder::bind 方法对 AST 中的符号进行绑定,这个过程会查找 Catalog,如果 Catalog 中没有相关的信息(比如找不到相关表,或者在表中找不到相关列),这条 SQL 就不能执行。如果有相关信息,就会对这些信息进行绑定,转化为内部可以识别的形式。binder 相关代码在 src/binder/下
`select a, sum(b) from t` 经过 binder 阶段后的信息
123456789101112131415161718192021222324252627282930313233343536373839Select( BoundSelect { select_list: [ Column #BaseTableColumnRefId { database_id: 0, schema_id: 0, table_id: 18, column_id: 0 }, Sum([Column #BaseTableColumnRefId { database_id: 0, s ...