不知不觉有长了一岁, 在不想变成庸庸碌碌的大众的情绪下逐渐融入其中, 这大概就是去岁的一个侧面吧.
前言
Alfred 是一款 MacOS 上用户基数较大的软件, 笔者主要是用它来取代原生的 聚焦搜索, 除此之外, 最近开始研究它的 工作流(workflow) 相关的功能.
本篇就是实际展示一下如何开发一个 workflow. 使用的脚本语言是 Python , 不过实际上任何脚本语言都可以完成开发工作.
Data Structure That Power Your Database
最简单的数据库是什么样子的?
#!/bin/bash
db_set () {
echo "$1,$2" >> database
}
db_get () {
grep "^$1," database | sed -e "s/^$1,//" | tail -n 1
}
如上所示, 我们完成了一个最简单的 kv 数据库. 它的工作原理是: db_set 在文件末尾追加一个 kv 对; 如果对某一个 key 进行更新, 那么新的记录会继续追加写入文件, 而非覆盖; db_get 查询到最后(即最新)一条 key , 然后返回 value.
这个数据库的写效率极高 [ $O(1)$ ], 因为它单纯的就是向文件的末尾进行 append
操作. 但是代价是它的读效率非常低 [ $O(n)$ ].
为了解决读效率低的问题, 可以使用 索引
, 索引本质上是一个依附于主体数据的额外的数据结构. 它可以作为一个整体地被添加或者删除. 但是索引又会引发一个新的问题, 索引的变化依托于 写(write) 操作, 这意味着每次写都需要额外的一部分性能来更新这个数据结构, 如果数据结构过于复杂, 则会拖慢影响写的效率.
本节主要就是围绕这些索引结构及其演进来展开.
- Hash Index
- SSTable
- …
本篇主要是讲如何从 Django Api 生成出 swagger 描述文件. 它具有如下的特性:
- 基于 inspect \ (ast) 采用静态分析的思路, 不依赖业务代码, 能够文档先于项目
- 嵌入 Django CMD
- 生成所用到的代码不会影响生产环境性能
之前接触过 drf, 一个基于 Django 的 rest 框架. 由于深渡契合 rest, 有着严格的项目结构约束, 所以能够直接从代码文件生成出对应的 swagger
描述文件. 但是这套代码是无法直接移殖到 Django 上面的, 因为后者的结构比较松散, 没有一种万金油的生成策略.
所以, 本篇所提供的生成方案具有以下约束:
- 需要封装一层装饰器, 并应用与所有需要生成文档的视图函数.
- 依赖 pydantic (或者平替 cattrs \ schema 等)
本篇是关于如何在 Pycharm 和 VSCode 中使用 Docker Compose 的. 开篇比较啰嗦, 大抵是踩过的一些坑和问题的解决过程, 实际的配置内容自 转 这一节开始.
本篇主要的内容是如何对 Docker 镜像进行优化.
优化总共分为以下几步:
- 基于项目优化
- 缩减依赖包
- 基于Docker优化
- 目录结构优化
- 构建文件优化
- 使用 dive 进行镜像分析
以及部分 Multi-stage build 的内容.