是时候进行一些年终反馈了。我通过我的联系页面收到了人们的大量评论和问题,有时这是唯一的回复方式。其他时候,回应也适合更广泛的受众。
…
伊戈尔问:
你玩过粘附吗?似乎您可能有知识来破坏它或请求开发人员通过一些有用的功能来增强它。就像假设在其中编写脚本一样?
在我读到这篇文章并去寻找之前,我什至不知道什么是粘着。它似乎是一个基于 clang/LLVM 的交互式 C++ 解释器。我想我不需要那样的东西。至于故意破坏东西,我毫不怀疑我的运气会导致很多糟糕的结果。然而,我的生活中已经受够了这样的事情,而不再只是为了打破一些东西而去寻找新的东西。
现在,如果我有充分的理由这样做,那就是另一个故事了。 (我可以用来雇佣兵,这么说吧。)
…
一位匿名读者问:
这个新的网络服务器的规格是什么?
这对我来说只是新事物。它实际上已经相当老了。我认为这大约是2014年的年份。我从一位转售旧服务器的供应商那里购买了它。我认为“这是一台服务器,而不是牙刷”,因此使用一些随机旧盒子的想法对我来说不是问题。它运行 Linux 并且速度很快,所以我很高兴。
我想这是讲述实际安装这个东西的故事的一个好点。尽管多年来我在拥有数百万台 Linux 机器的地方工作,但我从未挂过服务器。我做过路由器和拨号盒,但这些都相对较短。他们会挂在前面的柱子上,对这样的生活感到非常满意。
另一方面,闪烁是一个怪物。时间太长了,柜门几乎关不上。我不知道长度是一个可能会成为问题的维度。显然,当我下订单时,我并没有意识到我得到了什么,当它出现在一个巨大的盒子里时,我开始思考“我做了什么?”……
最初,机器几乎无法装入机柜,电源线一端被压扁,网络电缆另一端被压扁。大约一个月后,我回来并将其更换为服务器端插头内置有 90 度弯曲的新电源线。它在那一侧向后拉了大约一英寸,让整个东西向后滑动了一点,从而减轻了以太网电缆的压力。
我把现在永久压接(和损坏)的电源线切成两半,这样就没有人会发现它并尝试使用它,然后扔掉了它。
任何有经验的人都会指着这种事情说“哈,你搞砸了”,事实上,我就是这么做的。事实证明,这对于迁移到主机托管的项目来说并不是致命的,但也非常接近了。
下次我会注意这种事情的。
经验教训:在订购近三英尺长的东西之前,先看看橱柜并测量一下!
(它是一个 Ivy Bridge 风格的双路六核 Xeon,具有 128 GB 内存和几个 SSD。它的管道也比之前的盒子快得多。就我的使用方式而言,它完全是一个怪物。哦,它不是在德克萨斯州,事实证明这非常重要。)
…
关于前几天我搞砸了堆栈的“char buf[1048576]”事情,一位读者说:
您可以使用 boost::thread 代替。它允许您指定堆栈大小。
老实说,我不想指定堆栈大小。我对默认值没问题。另外,任何涉及“提升”的答案都意味着我问了错误的问题。我永远不想被这样的事情困住。在过去的几年里,我的生活中因增强依赖性而发生了太多戏剧性的事情。
对我来说,解决“问题”的明显方法是执行类似 vector<char> 的操作,将其推送到任意大小,然后让 read() 将其用作缓冲区。每当我必须处理 C++ 代码中的老式 C 库函数时,这几乎就是我最终要做的事情。
就像,好吧,mkdtemp()。它需要一个 char* 模板,例如“/tmp/test_thingy.XXXXXXXX”。它“进入”该空间并改变它,将 X 更改为一些随机的垃圾,结果证明是独一无二的 – 这就是你避免 /tmp 种族攻击的方法。这比听起来更烦人。
您可能会想“哦,我知道,我将使用一个字符串,然后将 .c_str() 指针从它传递给 mkdtemp”。但是,不,c_str() 为您提供了一个 *const* 指针,而 mkdtemp 将违反该常量性。你的编译器会阻止你这样做。然后你必须要么对其撒谎并进行一些令人讨厌的选角,要么你认为这行不通并寻找另一种方法。
这就是为什么我有一堆愚蠢的垫片来处理这些场景。只是我以前从未真正使用过 read() – 在堆栈上拥有缓冲区的老套方法从来都不是问题。
至于“为什么缓冲区这么大”,我喜欢减少吸入文件所需的系统调用数量:更大的缓冲区一次就能吃掉整个文件。一个微小的缓冲区需要不断返回,直到完成。当机器速度慢得多时,这类事情过去就显得更加重要。
此外,我讨厌垃圾邮件系统调用情况。 read() 或 write() 使用单个字节?啊!
…
来自另一位读者:
嘿,你还在 Mac 上运行 wg barebones 吗?我刚刚犯了安装错误,并出现“无法卸载”行为,并附加“双击应用程序图标时没有任何反应”。只是想比较一下笔记
是的,我仍然在我的个人计算机上以及家庭成员的计算机上执行此操作(在我作为“假日系统管理员”的职责中),不久前删除了“应用程序商店”版本。我从随机的人那里得到了反馈,他们发现三年旧帖子大约每季度发布一次,他们似乎都有同样的问题。我认为这是一个非常强烈的信号,让您不要再尝试一次。
我应该指出,如果您使用 Macports,升级到 Sonoma,然后尝试构建wireguard-tools 或其他几个软件包,它会由于各种与 Apple 相关的愚蠢行为而失败。我最终会就此发表另一篇文章。
…
最后,一群人写了一篇关于“clang + C++ + 原始armv6 Raspberry Pi = 不可用的二进制文件”的文章,说它解释了他们在自己的东西上看到的一些奇怪现象,所以我认为结果还不错。这正是我撰写这些文章的目的:了解问题,并确认您并不是唯一经历过某些事情的人。有时它是技术性的,但有时它是关于柔软的物质空间的东西。两者都有效。