搜索技巧 海洋云增白 开源地图 AI 搜索答案 沙丘魔堡2 压缩机站 自由职业 policy 小团队 颈挂空调 Chumby 个人电脑 极端主义 团队 PostgreSQL AI工具 证券 DirectX DrawingPics 化学 KDE 披萨农场 多动症 植物学 分析化学 Three.js 大会 残疾人学校 初创 QB64 更多

Mess With DNS 中使用更少内存查找 IP 地址 (jvns.ca)

本文介绍了作者如何优化 Mess With DNS 的内存使用。作者首先尝试使用 SQLite 存储 IP 地址数据库,但发现速度太慢。接着尝试使用 trie 结构,但内存占用反而更高。最终,作者通过去重和使用 netip.Addr 结构,成功将内存占用降低了 70MB,同时将查询速度保持在可接受范围内。

Hugo 升级指南 (jvns.ca)

本文记录了作者将 Hugo 从 0.40 版本升级到 0.135 版本的过程,重点介绍了升级过程中遇到的主要变化和挑战。作者详细列举了模板语法变更、分页变量变更、Markdown 渲染器变更等问题,并分享了如何解决这些问题的经验,包括代码示例和配置说明。作者还探讨了升级 Hugo 的利弊,认为虽然过程繁琐,但新版本带来的 CommonMark 标准支持和渲染问题修复也值得一试。

终端颜色设置复杂难搞 (jvns.ca)

这篇文章探讨了终端颜色设置的复杂性和常见问题。作者首先解释了ANSI颜色和终端模拟器如何显示颜色,接着列举了用户可能遇到的问题,例如蓝色在黑色背景上难以阅读、程序使用256色导致的颜色冲突等。文章还介绍了一些解决方案,包括配置终端模拟器、运行shell脚本以及使用“最小对比度”功能。最后,作者推荐了一些有用的工具和资源,例如base16和tinted-theming,帮助读者更好地管理和定制终端颜色。

Go Web开发笔记 (jvns.ca)

本文是作者在使用Go进行Web开发时的一些心得体会,包括Go 1.22版本带来的路由改进、使用sqlc自动生成数据库查询代码、SQLite使用技巧、Go 1.19版本中引入的GC内存限制设置方法以及作者选择Go进行Web开发的原因。

使用 PowerDNS 迁移混乱的 DNS (jvns.ca)

本文介绍了作者如何使用 PowerDNS 迁移和改进 Mess With DNS 网站 DNS 功能的过程。文章详细描述了在迁移过程中遇到的八个挑战,包括如何拦截所有 DNS 查询、前端是否应该直接访问 PowerDNS API、如何处理记录 ID、如何生成清晰的错误信息、如何设置 SQLite 数据库、如何升级 Vue.js 和管理表单、如何管理前端状态以及如何对项目进行排序等。作者还分享了在解决这些挑战过程中学到的经验和教训。最终, Mess With DNS 网站成功迁移到 PowerDNS,解决了之前存在的许多 DNS 问题。

关于Go语言结构体拷贝赋值及其他容易忽视的知识点 (jvns.ca)

本文探讨了Go语言中结构体在赋值时会进行拷贝而非引用传递的特性,并解释了由此可能引发的问题,例如在使用结构体切片时,对子切片的修改可能会影响原切片。此外,文章还介绍了Go语言中方法接收器的类型以及使用建议,并列举了其他一些常见的Go语言错误和编码技巧。

终端输入文本为何如此复杂 (jvns.ca)

这篇文章探讨了在终端输入文本的复杂性。作者首先指出了不同程序处理文本输入方式的不一致性,例如有些程序不支持方向键,而另一些程序则使用readline库提供更丰富的功能。文章接着介绍了readline库及其常用快捷键,以及如何使用rlwrap为不支持readline的程序添加支持。此外,文章还讨论了libedit等其他输入库,以及一些程序使用的自定义输入系统。最后,作者总结了一个在终端输入文本时判断当前环境的流程图,并列举了一些未在本篇文章中讨论的相关问题。

Ruby的Timeout为何危险(以及Thread.raise为何可怕) (jvns.ca)

这篇文章讲解了Ruby的Timeout方法为何是危险的。Timeout方法通过在一个新线程中向主线程抛出异常来中断主线程的执行,但这可能会在代码执行的任何阶段发生,包括网络请求、清理操作、数据库操作等,从而导致难以预测的后果。文章还对比了其他语言如Java、Python、C#和C++是如何处理线程中断的,并指出Java的Thread.interrupt方法更加安全,因为它只在特定的时间点抛出InterruptedException异常,例如在Thread.sleep期间。