Julia Evans

RSS: https://jvns.ca/atom.xml
Julia Evans 的编程博客,用清晰易懂的方式讲解系统、网络、调试与开发工具。

关于 Django 我最近喜欢的一些特性

Julia Evans 分享使用 Django 构建后端渲染网站的实战体验。她重点介绍了自定义 QuerySet 链式调用的可读性优势,以及 urlize、json_script 等模板过滤器带来的开发便利。文章对比了前端-heavy 与后端-heavy 架构的选择逻辑,并提及遇到的 Django 过滤语法痛点,适合寻找工程实践参考的开发者。
评论点赞收藏25 天前

运行 SQLite 的一些实战心得与踩坑记录

你好!我最近一直在做一个Django网站,决定用SQLite 作为数据库。 当我刚开始用SQLite作为网站数据库时,我读到一个一帮 博客文章中提到在生产环境中使用SQLite完全没问题 网站很小,我觉得完全没问题,但我没完全欣赏 SQLite仍然是数据库,数据库很复杂,我不清楚 很多关于数据库操作的内容。 以下是我最近学到的一些关于运行SQLite的小知识。就是这样 这是我用SQLite做的第...
评论点赞收藏29 天前

让工作被看见:写一份“夸耀文档”

绩效评估常因记忆偏差导致贡献被低估。作者建议维护一份“夸耀文档”(Brag Document),实时记录项目成果、技术债务清理及导师工作等“隐形贡献”,并附详细模板。这不仅是向上管理的工具,更是理清职业主线、辅助晋升谈判及帮助新经理快速了解你的有效手段。
评论点赞收藏35 天前

用 NFS 将 Git 提交记录挂载为文件夹

Julia Evans 将她对 Git 工作原理的好奇做成了一款实验性工具:每个 Git 提交都可以像普通文件夹一样被浏览和搜索。受 FUSE 在 Mac 上安装越来越困难的推动,她用 Go 实现了同时支持 NFS 和 FUSE 的 git-commit-folders。文章记录了 9 个真实工程问题:为什么放弃 WebDav(不支持符号链接)、如何用适配器模式避免三种文件系统接口的代码重复、如何用哈希前缀组织百万级 commit 避免启动卡顿、inode 编号为 0 导致 find 误报循环、NFS stale file handle 的缓存溢出困境等。每个问题都有调试过程和决策思路。工具本身可能还不够成熟,但文章通过亲身实践生动阐释了「每个 commit 就是一个目录快照」这一 Git 核心概念,兼具教育意义和工程参考价值。
评论点赞收藏89 天前

告别 Tailwind,重新学习组织我的 CSS

Julia Evans 以亲身经历讲述从 Tailwind 迁移回语义化 HTML + 原生 CSS 的过程与收获。作为知名开发者教育者,她坦诚 8 年前因不会组织 CSS 而拥抱 Tailwind,如今通过实际项目摸索出更清晰的 CSS 结构思路。这不是技术布道,而是一篇有真实困惑、具体迁移步骤和个人审美的踩坑记录。对前端开发者来说,既提供了另一种 CSS 组织方式的实践经验,也引发了"工具 vs 原理"的有趣讨论——在 Tailwind 已成为主流选择的当下,反向迁移的理由和方法本身就是很好的话题入口。
评论点赞收藏93 天前

CSS 配色方案链接合集

前段时间,我决定不再为新项目使用 Tailwind,而是改用纯 CSS 来编写。不过,我特别想念 Tailwind 的配色方案(这里以 CSS 形式呈现)。如果我想用浅蓝色,只需使用 blue-100;如果不喜欢,也可以试试 blue-200 或 blue-50。我对色彩不太在行,所以能拥有一个由比我更擅长色彩设计的人精心构思的、合理的配色方案,对我来说意义重大。不过,我也对那些 Tailwind...
评论点赞收藏104 天前

在浏览器中测试 Vue 组件

知名技术博主 Julia Evans 记录了一个困扰她的前端测试困境:她想在不依赖 Node.js 的前提下,直接在浏览器中测试 Vue 组件。她试过 Playwright,但觉得每次启动新浏览器进程太慢太笨重,而且还需要 Node 代码来编排测试,结果干脆放弃了前端测试。这不是一篇系统教程,而是一个真实开发者面对工具链约束时的坦诚记录——她知道自己该测试,但现有方案让她提不起劲。对于同样在探索"去 Node 化"前端工作流、或想在浏览器端做更原生测试的人,这篇短文提供了一个有共鸣的讨论入口和思路起点。
评论点赞收藏106 天前

为 tcpdump 和 dig 手册页添加实用示例

知名技术博主 Julia Evans 亲自动手,为 tcpdump 和 dig 两个常用命令行工具的手册页(man pages)添加了入门示例。她的核心理念是:手册页里的示例比长篇大论的说明文档有用得多。这次她为 dig 手册新增了示例页,并改进了 tcpdump 手册已有的示例。目标是覆盖最基础的用法,让不常使用这些工具的人也能快速上手。这是一篇简短但来自真实作者、有实际产出的技术笔记,有人味、有动手记录,没有空话套话。
评论点赞收藏159 天前

关于优化 man 手册的一些思考

作者 Julia Evans 从去年参与 Git man 页面维护的真实经验出发,反思 man 手册的可用性问题。她为 tcpdump、git、dig 等工具写过大量速查表,原因是这些工具的主要文档——man 手册——常常难以快速定位所需信息。由此提出一个具体又有趣的问题:能不能在 man 手册里直接内置一份高质量的速查表,让手册本身更好用?文章篇幅虽短,但来自真实的一手使用和贡献经历,视角独特,有明确的讨论入口,适合开发者社区延伸交流。
评论点赞收藏179 天前

Git 中 HEAD 的工作原理

Julia Evans 在 Mastodon 发起投票发现,仅 10% 的人对 Git HEAD 完全自信,39% 不太确定、15% 完全没概念。她原本以为 HEAD 很简单,但深入聊下来才意识到 HEAD 实际上包含了几个紧密相关但容易混淆的概念:.git/HEAD 文件(存分支名或 commit ID)、git show HEAD 等命令中的"修订参数"、以及各种 Git 输出中的 HEAD(detached HEAD 状态、git log 里的 (HEAD -> main)、合并冲突标记中的 <<<<<<< HEAD)。文章逐一拆解了每种场景下 HEAD 的实际含义和解析方式,还点出 Git 术语不一致的问题——有"detached HEAD"却从不提"attached HEAD",用户很难自己把"on branch main"和"HEAD detached"关联起来。基于真实用户数据和个人踩坑经验,既讲清了原理,也给出了可操作的避坑建议。
评论点赞收藏182 天前

开始使用 Django 的一些笔记

知名开发者 Julia Evans 在个人博客分享自己从零学习 Django 框架的真实一手体验。她以"老牌无聊技术"为切入点,讲述了用 Django 实际搭建网站过程中遇到的典型问题、解决思路以及对框架设计理念的切身感受。文章延续作者一贯的个人化、接地气风格——没有营销包装、没有趋势空谈,全是具体的踩坑记录和实用经验。对于想了解 Django 真实开发体验、或对成熟技术框架感兴趣的读者,这是一篇能直接获得参考价值的实战笔记。
评论点赞收藏201 天前

Ninja:一个简单易用的构建工具(2020)

Julia Evans 分享用 Ninja 构建工具的真实体验:一个极简(只有 rule 和 build 两条核心语法)的增量构建系统,解决了她的小型项目(如 SVG 转 PDF)每次等 90 秒全量转换的痛点。她比了复杂的 Bazel 和晦涩的 Make,展示如何用 Python 脚本自动生成.ninja 文件、用自己熟悉的语言管理构建逻辑。还提到 Meson 也以 Ninja 为后端。全文是个人踩坑记录加可复用的实战代码,语气亲切,不装不吹,适合想要轻量构建方案的程序员。
评论点赞收藏207 天前

如何提出好问题

本文来自知名技术博主 Julia Evans,分享了她在软件工程领域多年积累的提问技巧。核心观点:提问不是示弱,而是一项值得刻意练习的技能。作者提出了多种实用方法——先陈述自己已有的理解再确认是否正确、把模糊问题拆解为具体事实性问题、勇于承认听不懂的术语、根据不同对象和时间选择提问策略。值得一提的是,作者对经典文章《How to Ask Questions the Smart Way》提出了温和但有力的批评,认为它给提问者施加了过多负担。文章还有独特视角:好的提问本身就是对社区的贡献,而回答别人的问题也是巩固自己知识的好方法。全文有大量真实场景例子,人味十足,是一篇既有温度又有干货的技术沟通指南。
评论点赞收藏213 天前

Git 的数据模型(及其他文档更新)

Julia Evans 记录了她主动花时间改进 Git 官方文档的经历——不同于以往写博客或 zine 来吐槽文档问题,这次她直接向 Git 官方仓库提交了修改。她与 Marie 合作,围绕 Git 的数据模型对官方文档做了实质改进。文章从亲历者视角展现了参与大型开源项目文档维护的真实过程:如何理解 Git 内部数据模型、发现文档缺失与表述问题、并推动改进落地。不仅有关于 Git 数据模型的技术解析,还包含了开源贡献的幕后故事和协作经验,适合对 Git 原理或开源贡献感兴趣的读者。
评论点赞收藏220 天前

最受欢迎的 Git 配置选项

作者在 Mastodon 上发起调查,询问大家最爱的 Git 配置选项,收到大量回复后按人气整理了这份清单:最热门的是 pull.ff only 和 pull.rebase true(避免意外创建 merge commit),其次是 merge.conflictstyle zdiff3(让合并冲突更可读)、rebase.autosquash true(自动合并 fixup 提交)、rebase.autostash true(rebase 前自动 stash)、push.autoSetupRemote true(自动跟踪远程分支)等。每个选项都有实际场景解释和代码对比示例,比如 diff3 冲突格式增加了原始版本信息、diff.algorithm histogram 让函数重排后的 diff 更清晰。作者也坦诚分享了自己的体验:曾用 delta 但搞坏了配色方案、对 autostash 有点害怕、最后自己加上了 histogram、branch.sort 和 zdiff3 三条新配置。最后附如何设置、以及所有建议的完整列表,对 Git 用户来说是一份极为实用的社区配置参考。
评论点赞收藏263 天前

在终端里按下一个键时,实际发生了什么?(2022)

终端里每按一个键,实际发送了什么字节?作者用 xterm.js 搭建实验环境,亲自抓包记录了一次按键到字节流的完整映射——从普通字母('l'→0x6c)到 Ctrl+C(0x03)、Ctrl+D(0x04),从方向键到 Home/End/Delete 的转义序列,再到 Alt+字母的编码规则。文章还演示了 nano 编辑器的 ANSI 转义序列传输过程,解释了 ASCII 控制字符的规律(Ctrl+A=0x01,逐字母递增)、Alt 与 Escape 的关系、ioctl 调整终端窗口大小的系统调用,以及为何这套设计虽显"奇怪"却因兼容性沿用至今。一篇有实验、有数据、有人味的底层终端原理探秘。
评论点赞收藏274 天前

关于 Nix Flakes 的一些笔记

Nix Flakes 真实踩坑记录。作者用了九个月 Nix 但一直回避 Flakes,最终决定一试,记录了大量具体问题:Git 未追踪文件导致 nix 完全忽略 flake.nix、相对路径依赖让 flake.lock 坏掉只能手动删除、构建钩子报错需杀掉 nix-daemon 进程、zulu 包本身损坏等。用 Docker 类比帮助理解 Flakes(自包含、可共享开发环境),但指出差异巨大。最终用 buildEnv 做了个统一 PATH 目录的笨办法,并附上完整 nix-symlink 脚本。全文亮点是全程坦诚自己"仍然不太懂 Flakes",分享的都是真实碰壁经历和实用对策,不是照本宣科的教程。适合真正在用 Nix、想尝试 Flakes 的开发者,讨论价值高。
评论点赞收藏296 天前

Lima:在 Mac 上运行 Linux 虚拟机的便捷选择

Julia Evans 以亲身经历推荐在 Mac 上通过 Lima 快速运行 Linux 虚拟机:只需三步(安装 → limactl start default → lima 进入 shell),默认挂载 home 目录为只读并自动下载 Ubuntu 镜像。作者坦诚记录了实际使用中遇到的两个坑——子目录无法单独设为可读写、tun/tap 网络设备在 Lima 中表现异常且 ping 出现诡异的时间回退警告——并尝试了 OrbStack 作为替代发现网络正常。作者也给出了选择 VM 而非容器的理由(生产环境是 VM、涉及 Linux namespace、Mac 上跑容器仍需要 VM)。本文不是通稿也不是教程,而是真实用户的选型参考和踩坑记录,适合在 Mac 上需要 Linux 环境的开发者阅读。
评论点赞收藏304 天前

从 Vim 切换到 Helix 的使用笔记

知名程序员 Julia Evans 分享了她从 Vim 切换到 Helix 编辑器 3 个月的真实体会。核心动机:Helix 内置了开箱即用的 LSP(语言服务器协议)支持,无需像 Vim 那样费劲配置就能实现「跳转到定义」等现代 IDE 功能。她提到自己很喜欢 Fish shell 那种「不用折腾配置」的体验,而 Helix 给了她同样的感受。文章以个人日志形式记录了切换过程中的发现、习惯变化和真实感受,有具体的操作对比和踩坑细节,不是泛泛之谈。Julia 一贯的风格是真诚、接地气、有个人立场,这让文章读起来像朋友之间的技术推荐,而非教程或软文。
评论点赞收藏310 天前

Firecracker:不到一秒启动一台虚拟机(2021)

Julia Evans因制作一款给每个玩家分配独立虚拟机的CLI教学游戏,发现QEMU启动需20秒、DigitalOcean实例需1分钟,用户体验不可接受。她尝试了AWS开源的Firecracker——一个号称125ms内启动Linux用户空间的轻量虚拟机管理器,并记录了完整的DIY实操过程。文章包含可直接运行的hello world shell脚本、将VM挂到Docker网桥的配置方法、用Docker容器构建ext4文件系统镜像的步骤、用Go SDK编写HTTP管理服务启动/停止VM的代码思路,以及DigitalOcean支持嵌套虚拟化的实测结论。作者保持了一贯的透明诚实风格:坦承自己花了一天理解Linux网桥、对Firecracker为何快于QEMU仍有疑问、代码目前还"非常混乱且满是bug"。全文信息密度高、可复现性强,是有真实项目背景、有个人经验、有明确实用价值的技术好文。
评论点赞收藏370 天前

使用 make 编译 C 程序(面向非 C 程序员)

Julia Evans 从自身真实痛点出发,写给非 C 程序员的一篇实用编译指南。很多人(包括作者自己)长期靠"装依赖→跑 make→不行就放弃"的碰运气方式来编译 C/C++ 源码,尤其在 Mac 上问题更突出。文章不是复制粘贴教程,而是带着"我也 struggle 过"的人味,一步步讲清楚 make 的基本用法和背后的逻辑,让不写 C 但偶尔需要编译的人真正理解该做什么、为什么这么做。有个人经验、有明确场景、有实操价值,没有废话和模板套话。
评论点赞收藏432 天前

没有等号的环境变量

环境变量在 Linux 底层本质是 "NAME=value" 字符串,但技术上也可以放入不含等号的任意内容——该冷知识来自作者与同事 Kamal 的闲聊启发。作者用一段 C 程序调用 execve 将 "banana" 这样的裸字符串注入环境并执行 env 命令,验证了 OS 层面并不要求环境变量必须有等号。不过结论也明确:shell 如 bash 会直接忽略这些无效变量,没有实际攻击面或实用价值,纯粹是一个有趣的系统底层细节。有代码、有实验、有结论,短小但有信息密度。
评论点赞收藏450 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。