Thanks for watching my blog.

前言

Alfred 是一款 MacOS 上用户基数较大的软件, 笔者主要是用它来取代原生的 聚焦搜索, 除此之外, 最近开始研究它的 工作流(workflow) 相关的功能.

本篇就是实际展示一下如何开发一个 workflow. 使用的脚本语言是 Python , 不过实际上任何脚本语言都可以完成开发工作.

前言

本篇的目的是在 Python 的 Test 框架中添加一个 mock 函数使用计数器 的逻辑. 该计数器的目的是, 在调用第三方api接口时, 计算某一个流程中的调用次数是否合理. 在流程(或调用关系)比较复杂的时候实用性较高.

>
PythonTest

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 描述文件. 它具有如下的特性:

  1. 基于 inspect \ (ast) 采用静态分析的思路, 不依赖业务代码, 能够文档先于项目
  2. 嵌入 Django CMD
  3. 生成所用到的代码不会影响生产环境性能

之前接触过 drf, 一个基于 Django 的 rest 框架. 由于深渡契合 rest, 有着严格的项目结构约束, 所以能够直接从代码文件生成出对应的 swagger 描述文件. 但是这套代码是无法直接移殖到 Django 上面的, 因为后者的结构比较松散, 没有一种万金油的生成策略.

所以, 本篇所提供的生成方案具有以下约束:

  1. 需要封装一层装饰器, 并应用与所有需要生成文档的视图函数.
  2. 依赖 pydantic (或者平替 cattrs \ schema 等)
>
PythonDjango

本篇主要的内容是如何对 Docker 镜像进行优化.

优化总共分为以下几步:

  1. 基于项目优化
    • 缩减依赖包
  2. 基于Docker优化
    • 目录结构优化
    • 构建文件优化
    • 使用 dive 进行镜像分析

以及部分 Multi-stage build 的内容.

>
Dockeroptimization

本篇基于笔者本人的实际工作经验, 总结了一些API的设计思路, 并提供了对应的参考资料以供深入研究.