Dennis Ritchie病逝
C语言和 UNIX 之父、K&R 的"R",Dennis Ritchie,于2011年10月12日在家中病逝。
Dennis Ritchie 在 Bell 实验室对 Ken Thompson 设计的 B 语言进行了扩展,并以此为基础设计了 C 语言。 C 语言与当时设计操作系统常用的汇编语言相比,提供了更好的可移植性,并成为了 UNIX 系统高可移植性的基础。Dennis Ritchie 做的这些工作是开创性的。这些工作使得我们能够使用包括数据结构、函数等高级语言特性的语言书写程序,并可以很容易地移植到不同类型的硬件上,同时又保持与为不同的硬件手工书写的汇编代码接近的性能。C++ 之父 Bjarne Stroustrup 对于 Ritchie 的工作如此评价:“They said it couldn’t be done, and he did it."。即使在 40 多年后的今天, C 仍然在从嵌入式设备到超级计算机在内的各种计算环境中广泛使用。
阅读全文…配合sudo使用 Google Authenticator
📜 历史文件已不具备现实意义
基于 TOTP 的做法不易备份,此外无法防止钓鱼。新部署时应考虑 FIDO 2 等更为现代化的解决方案。
Google Authenticator 是一个 TOTP(基于时间的一次性口令)实现,它采用了 RFC 4226 算法。
阅读全文…"Stay Hungry. Stay Foolish." It was the farewell message.
Steven Paul “Steve” Jobs (1955 - 2011) passed away peacefully today. There aren’t enough words to express all he contributed to this world.
Today, a shocking news have shaken the industry. Steve Jobs, a pioneer of our industry, after several years of struggling with cancer, passed away at 56. This marks a loss not only to Apple computer, but the whole industry, even Apple’s business rivals.
I want to quote his 2005 Commencement at Stanford:
阅读全文…跨ISP冗余实在是太重要了
鸡蛋不能放在同一个篮子里,特别是 DNS 服务器这样的鸡蛋……在没拿到AS之前,至少也应该做到跨ISP冗余才好。
参与评论W^X (可写与可执行互斥)
Von Neumann体系结构的计算机系统的一项特点是使用内存来保存程序和数据。这种设计减少了制造计算机的成本,但是也带来了一个弱点:因为事实上程序也是一种数据,如果这些"数据"在运行时可写,程序便有可能修改其本身,而如果这一特性被误用,例如由于程序本身的设计缺陷,攻击者便可以利用它来执行攻击者希望的任何事情。
阅读全文…乔帮主
在与癌症斗争了 7 年之后,Steve Jobs 今天正式向 Apple 董事会辞去了 CEO 职务。
阅读全文…netmap
今天 BAFUG 活动, Luigi Rizzo (十年前提出DEVICE_POLLING概念的那哥们) 带来了他在 FreeBSD 上新实作的 netmap。
简单来说 netmap 实际上是提供了一种让用户程序以一致的接口直接访问网卡(收发包且zero copy)的方法。Luigi Rizzo 的测试中,用以 1050MHz 的单核,在很普通的万兆网卡上就可以轻松达到 14.8 Mpps 了,每个包的开销大约是90个时钟周期。
阅读全文…SMB协议 vs TCP的延迟ACK特性
之前一直没什么概念,今天看了微软的 KB 321169 的解释,大致如此:
- 客户端 (SMB Redirector) 如果启用了 security signature,则必须等待命令处理完成才会发出下一条SMB;
- 服务器端如果启用了延迟ACK,则可能需要过200ms (Windows 2000)才会给出ACK回应
不过感觉这个解释依然不是很有说服力—-文档上说,SMB服务器端是需要对 NT_TRANSACT_NOTIFY_CHANGE 给出回应的,那么这种情况下ACK不就回应回来了吗?或者说,只要收到了 ACK 就说明服务器端已经处理了这条 SMB?哪位帮忙理解一下?
参与评论Ruby用实际行动向GPLv3吐槽,Ruby 1.9.3将改用 BSD 许可证发布
Ruby 从下一个版本,也就是 1.9.3 开始,从原先的 GPLv2 许可证换成了 2-clause BSD 许可证(大体上相当于 MIT 许可证)。
早期 Ruby 采用的是自由软件基金会推荐的 GPLv2 or later 许可证方式。在实际操作中这种许可方式十分常见,这种许可证方式包含两层意思:
阅读全文…备忘:OpenSSL valgrind报"Conditional jump or move depends on uninitialised value(s)"的解决
最近改一个用到 OpenSSL 的程序,顺手用 valgrind 抓了一下,发现很多「Conditional jump or move depends on uninitialised value(s)」的错误。发现 OpenSSL 的 FAQ 提到,在生成随机数时会将输入缓冲区(未初始化)的内容直接混入 entropy pool,使用 valgrind 时便会导致警告。
