tzfpy Rust 重写🎉

书接上文: 在 Go 中将经纬度转时区 经过一个周末的各种折腾,终于用 Rust 实现了 tzf 的功能,代码在 ringsaturn/tzf-rs。 又用了晚上跑了多次 CI 将 Python 移植也重写出来了 ringsaturn/tzfpy。 tzfpy 只要安装 >= 0.11.0 版本的就是用纯 Rust 实现的,在这个版本号之前都是 Python+CGO 实现的。 API 参数和之前一样,没有变化,但是索引命中的时候只需要 3~4 微妙,之前 Python+Go 需要 16 微妙。 最慢的单次查询 300 多微妙,timezonefinder(用 C 实现的多边形算法版本) 最慢的时候会有 1000 多微妙。 ...

 · 1 min · 471 words · ringsaturn

tzf 预览图制作

上周花了点时间学习下 mbtiles 文件格式,顺手给 tzf 项目制作了一个 social preview media: 制作流程很简单: 安装 https://github.com/mapbox/tippecanoe 安装 https://github.com/mapbox/mbview 下载时区的 GeoJSON 文件 1 2 3 # 根据 GeoJSON 制作 .mbtiles 文件 tippecanoe -o timezone.mbtiles -l Timezons -z7 combined-with-oceans.fmt.json mbview ./timezone.mbtiles 网页里调整合适的角度,截图,调整下图片的分辨率即可。 ...

 · 1 min · 99 words · ringsaturn

用 Go 编写 Python 扩展

tzfpy 是 tzf 的 Python binding。 如果只是本地可用,Go 代码加上 CGO 扩展编译成 .so 文件就能用了。 不过要做成发布到 PyPI 上在其他地方能直接安装的 wheel 是有些曲折的,看 CI 失败的记录就挺明显的。 ...

 · 1 min · 494 words

Python 中经纬度转时区新的选择

上回 说到在 Go 里弄出了一个 tzf 的库,可以非常快速得到经纬度所在的时区信息。 当时的想法是用 Rust 实现出来然后用 maturin 制作 Python 扩展。 经过一段时间的摸索发现 Rust 的坑有点大,于是 2022-07-23 转换了方向,在 Python 里调用 Go 编译出来的 .so 文件。 验证 demo 还算简单 ringsaturn/tzf#11。 ...

 · 1 min · 229 words · ringsaturn

在 Go 中将经纬度转时区

2022-05-29 01:04 +0800 立了个年度 Flag:在 Go 里用多边形搜索实现经纬度转时区 2022-05-29 20:47 +0800 搞出来了 https://github.com/ringsaturn/tzf 基本数据处理流程: 挺想用 Rust 实现一遍,然后用 pyo3 封装下,看看能不能比 Numba 加速的 timezonefinder 更快。 ...

 · 1 min · 78 words · ringsaturn

Go 中更符合直觉的 Apollo 配置加载

在 Go 里定义 struct 及其序列化&反序列化的方式都是通过 Tag 的方式做的, 但是在我开始使用 Apollo 的时候没有找到社区的解决方案,所以翻了下 BSON/JSON/YAML 的反序列化实现方式, 觉得用反射机制好像是可以做的,于是就开搞了,项目在 https://github.com/caiyunapp/oap。 ...

 · 1 min · 424 words · ringsaturn

在 Go 里计算 AQI

简而言之,写了个工具包

 · 1 min · 175 words · ringsaturn
彩云天气命令行版

彩云天气命令行版

2019 年的时候想学 Go 的动力来自看到了这个仓库 schachmat/wego 可以在命令行里看天气。 2021 年用了点业余时间终于搞出来了 caiyunapp/wego。 到 dashboard.caiyunapp.com 注册账号申请一个 Token, 然后按照提示配置下 ~/.wegorc 里的 API Token 和经纬度即可。 ...

 · 1 min · 99 words · ringsaturn