#1199 uk-currency
金融 历史 2026-08-01英国旧货币体系
coding in a complicated world
英国旧货币体系
低成本生态住宅:普通住宅在生命周期内,通过设计减少能源、水、维护成本。
MJML(Mailjet Markup Language)是一种专门用于编写响应式 HTML 邮件的标记语言。相当于是 HTML 在电子邮件场景下的更高层的封装,由编译器生成兼容各种邮箱客户端的 HTML。主要解决邮件 HTML 的痛点:
注意:MJML 只负责 UI 不含模板功能。如果需要使用变量或者其他模板语法,可以另外选择任何一种语言进行渲染,比如 Node Handlebars,Golang 模板,Python Jinja2 等。
MJML 最初由法国邮件服务公司 Mailjet 在 2015 年开源。目前项目已经独立维护,属于开源生态:
GitHub Repository: mjmlio/mjmlio
扩展名:.mjml
<mjml>
<mj-head>
<mj-title>Welcome</mj-title>
</mj-head>
<mj-body>
<mj-section>
<mj-column>
<mj-text font-size="20px">
Hello Woody
</mj-text>
<mj-button href="https://example.com">
Click
</mj-button>
</mj-column>
</mj-section>
</mj-body>
</mjml>
通过一下方法可以直接预览效果:
安装:
npm install -g mjml
转换:
mjml template.mjml -o template.html
生成的 HTML 会包含:
传说中,编程有两大难题,一个是缓存失效,另一个是变量起名。
其中,布尔变量尤其难起名。怎样才能贴切地表达,这个变量是表示"真"(true)和"伪"(false)的布尔值呢?
我最近读到一篇文章《布尔变量起名的艺术》,提出使用四个前缀就能给布尔变量正确起名,我觉得很有启发。
is-:描述事物的状态,后面跟形容词,比如 isActive,isDeleted,isEmpty。has-:描述事物的所有权或包含关系,后面跟名词,比如 hasAccess,hasChildren,hasValidationErrors。can-:描述事物的能力或权限,比如 canEdit,canDelete,canRetry。should-:描述事物的意图或逻辑,比如 shouldRetry,shouldCacheResponse。除了这四个前缀,起名还有另一条规则:永远不在布尔变量名中使用否定词。
比如,不使用 isDisabled,而要用 isEnabled = false。
阮一峰的新闻周刊介绍了高德的位置口令,高德本月推出了一个新功能,可以位需要提供准确位置的用户生成一个 6 位编码,其他人直接搜索这个编码就能找到那个位置,而不需要知道这个位置的名称。
文章后面说:要是国家出台统一算法就好了,为每个地点生成一个固定不变的位置码,用处就大了。
我想,这倒没有必要,为所有位置提供编码的方案不就是经纬度么?
经纬度在日常表达方面确实会有一些障碍,读起来不大方便,而且我不确定有多少人知道经纬度,虽然这是初中就学了的。
我设计了一个 8 位编码方案(BASE32,只包含数字和大写英文字母):
经纬度 1 度大约偏差 111 公里,精确到小数点后 3 位小数,可以控制偏差在 100 米范围内,对于日常使用是可以接受的。
总共 360,000 x 180,000 = 648 亿个点。
二进制 36 位可以表达(687 亿),也就是 5 Bytes。
BASE32 8 位足够可以表达了(10995 亿)(7 位只有 343 亿,差一点)。
在百度地图开放平台上用坐标拾取器获取两个坐标用来测试,结果如下:
(114.420025,30.514723),精度控制到小数点后三位,换算过来就是 BRLMVBKC
(-74.044500, 40.689225),精度控制到小数点后三位,换算过来就是 ARYMQF7B
Base32 字母出现的频率较多,为了减少英文字母的使用,我改成十六进制的表达方式,只多了一位而已,可以接受。测试结果如下:
(114.420025,30.514723) 换算过来就是 0C56CA8542(-74.044500, 40.689225) 换算过来就是 0470C817E1Python 代码示例:
# woody geo codec
import base64
# encode = base64.b32encode
# decode = base64.b32decode
encode = base64.b16encode
decode = base64.b16decode
def wgc_encode(lat:float, lon:float) -> str:
lat_num = int((lat + 180) * 1000)
lon_num = int((lon + 90) * 1000)
num = lat_num * 180000 + lon_num
return encode(num.to_bytes(5, byteorder="big")).decode()
def wgc_decode(code:str) -> tuple[float, float]:
num = int.from_bytes(decode(code))
lat_num = num // 180000
lon_num = num % 180000
print(lat_num, lon_num)
lat = (lat_num - 180000) / 1000
lon = (lon_num - 90000) / 1000
return lat, lon
for lat, lon in ((114.420025, 30.514723), (-74.044500, 40.689225)):
print((lat, lon))
code = wgc_encode(lat, lon)
print(code)
print(wgc_decode(code))
看了《你需要知道的 AI 内存知识》,我才知道:
JavaScript hashing speed comparison: MD5 versus SHA-256(Daniel Lemire, 2025-01-11)通过 JavaScript 基准测试对比了 MD5 与 SHA-256 在 Node.js 23 和 Bun 运行时下的哈希性能,核心结论颠覆了“MD5 更快”的传统认知:
md5Hash 和 sha256Hash 进行基准测试,底层实际调用 OpenSSL 实现。这是采用的 JavaScript 做的基准测试,但是结论说明的是通用硬件现象:现代 CPU(ARM/x86)有 SHA-256 硬件指令加速,而 MD5 无优化,任何语言调底层实现都如此。
因此,在现代处理器上,SHA256 性能大幅优于 MD5 的结论在所有语言上都是通用的。
初审被拒,原因:
初审通过之后,备案进入 “管局审核中-短信校验中” 状态。
几分钟之后就会收到工信部短信验证码,需要进入指定链接输入验证码、手机号、身份证后六位进行核验。
短信核验之后过一会儿,备案进入 “管局审核中-人工审核中” 状态。
AI 总结了 The Git Commands I Run Before Reading Any Code,可以作为参考。
PS:其中部分命令的有效性是建立在提交规范执行良好的基础之上。我过去经手的项目全部没有提交规范。😂
Five git log commands that diagnose a new codebase before you open a single file: code churn hotspots, bus factor, bug clusters, and crisis patterns.
1. 变更热点 列出去年改动最频繁的 20 个文件,榜首常是团队"无人敢碰"的那个。高变更本身不糟,但若叠加"无人愿拥有",便是代码库拖累的最强信号——每次修改都是补丁叠补丁,小改动的影响范围不可预测。微软 2005 年研究证实,变更率指标比复杂度更能预测缺陷。
git log --format=format: --name-only --since="1 year ago" | sort | uniq -c | sort -nr | head -20
2. 总线因子 按提交数排名贡献者。一人占 60%+ 即为风险;若其已离职半年便是危机。长尾同样关键:30 位贡献者中仅 3 位近一年活跃,说明建造者已非维护者。注意 squash-merge 会压缩作者信息,下结论前需确认合并策略。
git shortlog -sn --no-merges
3. Bug 集群 形态同变更热点,但过滤含 bug 关键词的提交。同时出现在两张列表的文件风险最高:反复出错、反复修补却从未根治。此法依赖提交信息规范。
git log -i -E --grep="fix|bug|broken" --name-only --format='' | sort | uniq -c | sort -nr | head -20
4. 提交节奏 按月统计提交数。稳定节奏健康;单月减半常因有人离职;6–12 个月下滑曲线揭示团队失速;周期性尖峰后沉寂则是批量发布模式。这是团队数据,而非代码数据。
git log --format='%ad' --date=format:'%Y-%m' | sort | uniq -c
5. 回滚与热修频率 一年中偶发回滚正常;若每几周一次,说明团队不信任部署流程,背后是测试不可靠、缺预发环境或回滚困难。零结果同样值得玩味。
git log --oneline --since="1 year ago" | grep -iE 'revert|hotfix|emergency|rollback'