你好!这是我全职从事《巫师杂志》的第四个年头!以下是我今年所做的一些工作。
一本杂志!
我出版了《整数和浮点数如何工作》 ,这是我和Marie一起完成的。
这本杂志一开始是“你的计算机如何在内存中表示事物”,但是一旦我们解释了整数和浮点数在内存中是如何表示的,杂志就已经足够长了,所以我们只将其保留为整数和浮点数。
这本杂志写起来很有趣:我了解了为什么有符号整数在内存中以它们的方式表示,并且我对我们最终得到的浮点解释非常满意。
游乐场:内存间谍!
当向人们解释计算机如何在内存中表示人时,我一直想打开gdb
或lldb
并显示一些示例 C 程序以及这些 C 程序中的变量如何在内存中表示。
但如果您不习惯查看 gdb,它会有点令人困惑!所以我和Marie在lldb
之上制作了一个可爱的界面,您可以在其中放入任何 C 程序,单击一行,然后查看变量的样子。它被称为内存间谍,如下所示:
游乐场:整数暴露!
我真的很着迷于Bartosz Ciechanowski的float.expose来了解浮点数在内存中的表示方式。因此,在他的许可下,我为整数制作了一个副本,称为“integer.exposed” 。
这是一个屏幕截图:
制作起来非常简单(复制别人的设计比制作自己的设计容易得多!),但我通过分析他如何实现它,学到了一些 CSS 技巧。
在周末实施 DNS
我一直在致力于一个大项目,向人们展示如何用 1400 行 Python 实现一个工作网络堆栈(TCP、TLS、DNS、UDP、HTTP),您可以使用它来使用 100% 自己的网络下载网页代码。有点像Nand 到 Tetris ,但用于计算机网络。
这一切进展得非常缓慢——编写我自己的糟糕实现相对容易(我于 2022 年 10 月完成),但编写其他人可以遵循的清晰教程则不然。
但在三月份,我发布了第一部分:在周末实现 DNS 。反响非常好——GitHub 上有几十个人的实现,人们已经用 Go、C#、C、Clojure、Python、Ruby、Kotlin、Rust、Typescript、Haskell、OCaml、Elixir、Odin 等语言实现了它也有更多语言。我希望看到更多的系统语言(例如普通 JS 和 PHP)的实现,需要考虑我可以做些什么来鼓励这一点。
我认为“在一个周末实施 IPv4”可能是我发布的下一篇文章。它还将附带实施 ICMP 和 UDP 的额外指南。
演讲:让困难的事情变得简单!
我今年在 Strange Loop 上发表了主题演讲,名为“让困难的事情变得简单”(视频 + 文字记录) ,讲述了为什么有些事情如此难学,以及我们如何让它们变得更容易。我对结果感到非常自豪。
很多关于 Git 的博客文章!
9 月,我决定制作第二本有关 Git 的杂志,更多地关注 Git 的工作原理。这是我从事过的最困难的项目之一,因为在过去 10 年的使用过程中,我完全忘记了 Git 的困难之处。
因此,我做了很多研究,试图找出 Git 为何如此困难的原因,并且我也写了很多博客文章。到目前为止我已经写过:
- 在 git 存储库中,您的文件位于哪里?
- 一些杂项 git 事实
- 令人困惑的 git 术语
- git rebase:会出现什么问题?
- gitcherry-pick 和 revert 如何使用 3 路合并
- git 分支:直觉与现实
- 使用 NFS 将 git 提交挂载为文件夹
到目前为止最令人惊讶的是,我最初认为“要理解 Git,人们只需要学习 git 的内部数据模型!”。但我越多地与人们谈论他们与 Git 的斗争,我就越不认为这是真的。我暂时就这样,但还有很多工作要做。
一些 Git 原型!
今年我开发了几个有趣的 Git 工具:
- git-commit-folders :一种使用 FUSE 或 NFS 将 Git 提交安装为(只读)文件夹的方法。这个问题的出现是因为有人提到他们认为 Git 提交是包含旧版本代码的文件夹,这让我想知道 – 为什么不能为每个提交都有一个虚拟文件夹?事实证明它可以而且效果很好。
- git-oops :git 撤消系统的实验原型。这让我想知道“为什么我们不能只进行
git undo
呢?”。我通过编写原型了解了很多关于为什么这并不容易的事情,稍后我可能会写一篇更长的博客文章。
我一直在努力减轻自己的压力,去发布令人惊叹和完美的软件——有时我有一个我认为很酷的想法,但实际上没有时间或精力来完全执行它。所以我决定将它们以某种未完成的状态放在 Github 上,这样如果我愿意的话,我可以稍后再回来查看它们。或不!
我还在开发另一个 Git 软件项目,这是与朋友合作的。
聘请了一名运营经理!
今年我为Wizard Zines聘请了一位运营经理! Lee 令人难以置信,他为简化公司运营的后勤工作做了很多工作,这样我就可以更加专注于写作和编码。我不太谈论这里经营业务的机制,但内容很多,我很感激能得到一些帮助。
李使许多事情成为可能的其中一些:
- 举办黑色星期五促销活动!
- 我们在网站上添加了评论系统! (很高兴听到人们多么喜欢在圣诞节收到杂志!)
- 商店已经重新整理,更加清晰!
- 我们在发送新漫画时事通讯方面更加一致!
- 我可以去度假而不用担心支持电子邮件!
迁移到乳齿象!
我花了 10 年的时间建立 Twitter 账号,但根据最近的事件,我在 2023 年花了很多时间建立Mastodon 帐户。我发现我可以在 Mastodon 上进行比在 Twitter 或 Bluesky 上更有趣的计算机对话,所以这就是我花时间的地方。最近我们在那里进行了很多关于 Git 的精彩讨论。
我在使用 Mastodon 时遇到了一些技术问题(我在使用单人 Mastodon 服务器的注释中写过),但总的来说,我在那里很高兴,而且我在那里花费的时间比在 Twitter 上花费的时间要多得多。
2024年的一些问题
我对 2022 年的问题之一是:
- 2022 年,开发者学习使用 Unix 命令行有什么困难?我想对此做什么?
也许我会在 2024 年致力于此!也许不会!今年我在这个问题上确实取得了一些进展(我写过 什么可以帮助人们在命令行上感到舒适? )。
我时断时续地思考的其他一些问题:
- 手册页是否可以成为一种更有用的文档形式?我想尝试对此做些什么吗?
- 我想在这个“用 Python 实现所有计算机网络”项目中使用什么格式? (这是一个网站吗?一本书?有一本杂志吗?有什么关系?)我想举办研讨会吗?
- 我需要哪些社区准则来讨论 Mastodon?
- 我可以进一步营销Mess With DNS (从 2021 年起)吗?我想怎么做呢?
慢慢移动就可以了
我已经开始接受这样一个事实:项目总是比我想象的要花更长的时间。我在 2022 年开始从事这个“实现你自己的可怕的网络堆栈”项目,我不知道我是否会在 2024 年完成它。我从 9 月份开始就在这个 Git 杂志上工作,但我仍然不完全理解为什么 Git 还很难。还有一个小秘密项目,我最初在五年前就想到了,今年取得了一些进展,但仍然没有完成。事情需要很长时间,没关系。
一如既往,感谢您的阅读并让我能够完成这项奇怪的工作。