🦤第 4 期 - 学习一门新的语言
记录 22/(11/21 - 11/27)期间 值得分享的内容,每周不定期更新。
介绍
我们每天都会接收到过载的信息,然而明月与砾同囊,其中的优质信息往往会被淹没,因此需要一个信息过滤服务来提升接收的信息质量。
思考的价值由此而来,分享内容的不限,偏向于 计算机技术 与 科技人文的方向。
Newsletter 订阅:https://simon.zhubai.love/
封面
There's no cat in this picture 11-27 西海
话题
本周的话题是探讨学习一门编程语言的重要性。
编程语言是一个老生常谈的话题,经常引起各路人士的讨论(撕逼),如 什么 PHP 天下最好的语言、人生苦短 我用 python、Rustacean or Gopher 布道等。
在这些言论中 体现了一些关键点:某语言的特性、在特定领域的优越性 以及 社区的发展情况,这也说明了,当我们在选择一门语言时,也选择了 它 解决的领域 以及 社区与生态。
现在常说要成为 T 字型 人才,而 多语言的擅长者 是一个很好的案例,如 熟悉 服务端语言 与 终端语言就可做“全栈”应用开发;熟悉 移动端语言 与 前端语言就可做 hybrid 容器设计;熟悉 系统级语言 与 脚本语言就可做一些基础设施;熟悉函数式语言 与 多范式语言就会无形中提升编程能力。
可以见得 每当学习一门语言时,都会在很大程度扩张 我们的知识领域。
所以优秀的工程师应当不设边界,跳出舒适区,多去学习一门语言。
当学习的语言越多,了解到的领域知识、编程范式也会越多,碰撞出来的想法也会越多,这带来的收益是很大的。
本期主题主要来自 个人的学习经历 与 第 2 期分享的一篇文章:How Trying New Programming Languages Helped Me Grow as a Software Engineer。
文章
文章介绍了 布隆过滤器的使用场景,并给出了 JS 版的简单实现,文末给出了 布隆过滤器的最佳配置实践。
bloom filter 定义:False is always false. True is maybe true.
原理就是 空间换时间,既然一维存在冲突,那就使用多维交叉确认的方式,多维交叉确认可以有效地降低因冲突导致的误判。
李奇老师从“前置条件”方面介绍了 一个产品能不能搞。
从我的角度来看,“搞事情”是需要时间窗口的,用 王慧文的话来说,当 发现有空白的市场时,很有可能 已经在错误的地方、错误的时间被人尝试过很多次了。
Node.js 官方出品的 安全最佳实践,全文都是满满的干货。
文章梳理了常见的攻击手段 与 防御措施,解读如下:
Denial of Service of HTTP server
通用攻击手段:DDoS 攻击,解决方案:反向代理,配置限流、超时。
DNS Rebinding
通用攻击手段:DNS 重绑定攻击,解决方案:禁用 inspector protocol。
Exposure of Sensitive Information to an Unauthorized Actor
领域导致问题:泄露敏感信息,解决方案:上传时使用配置避免出现该问题。
HTTP Request Smuggling
通用攻击手段:请求走私攻击,解决方案 用 H2,细节详细可见:一篇文章带你读懂 HTTP Smuggling 攻击
Information Exposure through Timing Attacks
通用攻击手段:旁路攻击的一种,时令攻击,解决方案:减少环境信息露出。
Malicious Third-Party Modules
领域导致的问题:供应链攻击,解决方案:使用 自建 npm 源 + 固定 scope 包。
Memory Access Violation
领域导致的问题:内存探测攻击,解决方案:不要在 shared runtime 跑。
Monkey Patching
领域导致的问题:原型链修改攻击,解决方案:使用 --frozen-intrinsics 冻结原型链。
Prototype Pollution Attacks
领域导致问题:原型链污染攻击,解决方案:不要用原型链的方法。
Uncontrolled Search Path Element
领域导致问题:包路径权重攻击,解决方案:使用 -policy-integrity
明确引入的包。
React Native 官方出品的总结文,介绍了在 2022 的一些成就,其中带来了新的 render fabric 与 全新升级的 bridge 层 - Turbo native modules,Hermes 作为默认的 JS engine 也在持续升温。未来 RN 将在 SSR、a11y、动画体验上继续发力。
IP 作为品牌化的重要手段,本文介绍了其 设计趋势与类型,整体内容很全面。
文章介绍了 可观测性的定义,分别是:事件日志、链路追踪和聚合度量,并详细概括了业界内相关的一些优秀产品,看起来已是一片红海。
一篇介绍 pnpm 原理的文章,通过三层寻址,做到项目程度(第二层寻址)到 机器程度(第三层寻址)的最大复用,真正做到了 Performant NPM。
Complexity has to live somewhere. If you are lucky, it lives in well-defined places.
一篇探讨复杂度的文章,作者从复杂度的邪恶 谈到 如何尽可能“消灭”,读起来还是很有感触。
B 站 去年的事故复盘,全文脉络很清晰,非常标准的复盘文章了,事故原因竟然是 动态语言 的问题(省流:诡计多端的 0)。
项目
Cross-platform, fast, feature-rich, GPU based terminal
Kitty 是一个严重被低估的终端工具,基于 GPU 渲染,core 由 C 编写,并提供了 开放的配置、脚本定制能力,使用体验、反应速度都很棒。
我已经使用了近半年,除了无法终端复用(作者觉得 复用是 NT 设计),其他方面满分。
Treesitter based structural search and replace plugin for Neovim.
一个基于语法结构的 neovim 查找、替换 插件,看起来非常理想化。
VSCode 目前还没有该能力,不过我们可以通过其他方式 做到结构化 替换,如:editor.action.changeAll
+ vim
插件。
D2 is a modern diagram scripting language that turns text to diagrams.
一个可以生成 UML 图的 DSL,类似的产品还有挺多的,如 PlantUML、mermaid 等。
与之相反的是:draw.io 为首的 drag 类生成图的方式,不过很多模版化的图,用 DSL 生成反而会更高效。
相信未来会有 两种方式结合的形式,以 拖拽为主,但也提供 DSL 的口子。
Distributed, offline-first bug tracker embedded in git, with bridges
一个内嵌在 Git 中的 Bug 管理工具,提供 TUI 与 WebUI。
可惜 没有发现与 Git 有什么联动,更多的像 依附在 Git 上做卖点。
一个正则的在线游戏,可以锻炼自己的手撸正则能力。
Turn any program that uses STDIN/STDOUT into a WebSocket server. Like inetd, but for WebSockets.
一个可以将终端 IO 与 WebSocket 相连接的工具,感兴趣的同学可以看下源码,整体不是很复杂。
My NPM Card 😉
基于 NPX 能力 做的 个人信息展示,想法还是挺眼前一亮的。
An open-source kit to optimize your developer workflow
一个脚本管理软件,提供一些简洁的系统级 api
Share your android app with iOS users and run successful bug bashes
通过一条链接,分享 Android app。
思路是 会在云设备上安装 分享的 app,再通过 web 进行实时交互,很新颖的创意。
资源
From MRyan:推荐几个算法可视化的网站,有助于理解算法。
生活
居家办公的一周,世界杯终于来了,在经过数个夜晚 终于解放了!(虽然仍 oncall 到半夜
并且 生日愿望也算是实现了,希望 她 越来越顺利吧 :)
在周四 部门周会上 突然收到了 大家准备的惊喜与祝福,真是出乎意料,开心~
最近有一些时间了,准备继续 rust 之旅,先这样了,see you next week.
历史回顾
Last updated