👹第 3 期 - 信息技术 与 人类的相似性
记录 22/(11/14 - 11/20)期间 值得分享的内容,每周不定期更新。
介绍
我们每天都会接收到过载的信息,然而明月与砾同囊,其中的优质信息往往会被淹没,因此需要一个信息过滤服务来提升接收的信息质量。
思考的价值由此而来,分享内容的不限,偏向于 计算机技术 与 科技人文的方向。
Newsletter 订阅:https://simon.zhubai.love/
封面
小橘 10-30 15:19 北海公园
话题
本周的话题是 信息技术 与 人类的相似性,我一直觉得 人类在某种程度来说 是一种更高维的计算机,这种思维在我学计算机之后就一直存在。
由于本人对生物学知之甚少,所以以下内容有可能在胡说八道(狗头。
常言道,人有五觉:视觉、听觉、嗅觉、味觉、触觉。如果把这五觉理解为是人的外在接口,那么可以得到:
视觉:平时生活时,眼睛以 1s 60帧左右的频率不停被调用,眼睛接受到 外部的光线,并生成中间态信息,通过 神经传输到大脑。
听觉:耳朵解析周围的空气震动,生成中间态信息,通过 神经传输到大脑。
其他同理
在传输中,神经好比网络链路,不同的是 神经的带宽可达到 每秒16.625 GB的数据,比 5G 通信的最快速度,还要快几十倍。
这些信息传输到大脑后,大脑根据 一系列规则进行 解析与判断,如视觉的信息 根据对常见物品的认知、听觉的信息 根据语言的规则。
而这过程中,人脑也会对信息进行一些“存储”,类似于缓存过期策略,频率最高的信息往往不会被清除,而甚至有部分信息会上升到 “寄存器数据”,还有的信息会像 “JIT” 被优化,处理时甚至不过脑子,成了下意识。
还有一些实例能够很好地佐证 人类 与 信息技术的相似性。
脑机接口:当人类想进行输出时,往往由大脑发出指令,所以我们可以检测到指令的特征,用机器实现我们的需求。
神经网络:受到人脑启发,对处理信息进行行为分层。
错觉的图片:如明明的平行的线,看起来就像是斜的,大脑在做模式匹配吗?
除此之外,我还有一个观点是:人脑是单核的,无法真正的并行。
因为我从来没有做到过 同时思考两件事,貌似一直是在抢占式 串行运行,就比如工作..
PS:同时,指的是当前时间片 同时进行两件事情,没有任何中断发生。
嘿 这是不是有点意思?如果你觉得自己不是单核的,欢迎给我来信~
文章
一篇介绍 Sass 技术的基础知识文章。
之前只是熟悉 Sass,读完本文后 发现原有还有很多没有使用过的能力,如 变量作用域、自定义命名空间等。
多年前,我也曾写过一篇有关 css 预处理器的文章,是有关 less 的,感兴趣的同学也可以阅读下:
https://tomotoes.com/blog/learning-less-seeing-this-is-enough/
文章介绍了 一段优化 Go 程序的经历。
程序原有的写法是 copy 值 去处理,换成 copy 引用后,GC 压力大幅下降,性能也随之提高了。
那么为什么 copy 值 会导致性能差呢?原因在于 copy 引用 等价于 写入栈,只需要把值分配到栈顶即可,无需分配内存空间;而 copy 值等价于 写入堆,需要在写入之前找到大小适合的内存空间 然后再写入。
并且在读取方面,栈一般处于高速缓存中,堆往往存在内存,还栈指针来访问。
一篇介绍 Mac 常见流 与 快捷软件的文章,内容非常全面,也发现了一些之前没有用过的工具,如 kindaVim。
团队本周出品的优质文章,介绍了 Devtool 的历史 与 现在调试的最佳实践。
延伸阅读:
推荐一个 CDP 的开源实现:https://github.com/liriliri/chobitsu
如果你想实现一个类 DevTools 的跨端调试工具,完全可参考 CDP 协议做到。
一篇介绍 WebGPU 的文章,作者开始梳理了 WebGPU 的发展历史,后面介绍了一些工程实践。
从我的视角来看,WebGPU 等价于 Better WebGL。
Google 出品的 Go 编码风格最佳实践。
文章很多建议也适用于其他语言(我真的没想到 Go 的编码风格 能这么长
一篇介绍架构设计的好文。
文章 梳理了 服务端 高性能相关的最佳实践,覆盖了 编码时的一些关键、数据传输与中间件设计,内容很全面且质量很高,推荐阅读。
开始介绍了无锁化(lock-free),分为 Reactor 模式 与 原子操作,Reactor 从执行层面能保障单线程 无竞争,原子操作 从代码层面 通过硬件保障 无竞争。
单 Reactor 多线程就是传统的 事件机制 也称为 dispatcher,业界实现 如 epoll、libuv;多 Reactor 多线程则是进阶版,等价于前者的 上一层分发层,业界实现 如 Nginx、Netty。
原子操作则是在竞争场景下的比较常见的解决方案,但一般对语言而言,只支持 基础类型的原子化,如果是复杂的数据结构建议使用一些成熟的库。
第二 part 零拷贝等价于 DMA,这里推荐一篇 IBM 的文章:Efficient data transfer through zero copy
文章介绍了 Web 应用的场景下,传统的文件传输与使用零拷贝技术传输的性能差异。
第三 part 介绍了 序列化,老生常谈的话题了,业界中的佼佼者是 Google 的 Protobuf、FlatBuffer。
第四 part 梳理了池化概念的一些应用:内存池(low level pl)、线程池、连接池(db、tcp)、对象池。
并发、异步章节 较常见,跳过。
中间件设计部分,分为 4 部分:缓存、分片、存储、队列,作者介绍的都很详细,就不展开了。
最近想冲 rust 了,说来也奇怪。我一直很讨厌把底层复杂度透传到上层的语言,如存在 指针、inline、手动 gc 这些概念的语言。
但发现 工程中是绕不开,语言、框架、产品 之类的创造者是需要与 复杂度周旋的,往往完美的语言 都是找到 复杂度的平衡点,而不是一味的封装。
文章介绍了 CPU 分支预测 这一黑魔法,以及是如何 在 编码层做优化的,这谁又能想得到呢?
如题,一篇介绍 Web 编程的历史发展文章。
前端语言 从最开始的 大公司竞争到 JS 一直独秀,不得不说 拥抱标准 才是发展的正道。
而后端语言 由于网络协议、CGI 的规范性,所以 技术选择可以很多样。
文末又介绍了 浏览器的发展,感兴趣的同学可以看下。
一个介绍 Raft 分布式共识的 交互式案例,很形象生动、
项目
Reparent a running program to a new terminal
一个利用 ptrace 改变进程 IO 与 terminal 的工具。
Console.log with style.
Listen to any article in your podcast player
可以将任何文章在 padcast 进行播放的一个软件,看起来很理想形态。
Parcel 发布 2.8 版本,带来了全新高性能的 Bundle 算法,Code splitting、Tree shaking、热更新 均有很大提升。
Deno 发布 1.28 版本,开始兼容了 现有 Nodejs 生态,Express、React、Next.js 都可以在 Deno 上运行了。
但由于抛弃 package.json 的做法,使得兼容时会遇到一些困难。
List any node_modules 📦 dir in your system and how heavy they are. You can then select which ones you want to erase to free up space 🧹
一个清理 node_modules 的工具,很好用。
Happy DOM is a JavaScript implementation of a web browser without its graphical user interface. It includes many web standards from WHATWG DOM and HTML.
一个 DOM 生成库,竞品:jsdom,在处理 HTML 数据的场景很实用。
A library for encapsulating asynchronous operations and managing concurrency for Vue and Composition API
一个异步场景下的状态管理库,项目的解决的场景确实是很常见的。
An in memory queue for async processes in high concurrency code paths.
Wrap any async method in a fetcher process to create a buffer where there will only ever be a single active request for that method at any given time.
一个 NodeJS 的节流库,源文件很小,在特定场景下会很有用。
资源
个人 Newsletter
个人订阅的 newsletter 分享:Newsletter,newsletter 算是我消费最多的信息源之一了~
大家可以新建一个邮箱账号,按需关注。
Vim 的学习资源
关于vim - 掌握基本的 Vim 概念和使用方式
https://missing.csail.mit.edu/2020/editors/
一款基于 vim 键盘快捷键的在线游戏 https://vim-adventures.com/
利用 vim 玩贪吃蛇 https://vimsnake.com/
推荐 Vimgolf 刷题
生活
忙碌的一周,工作不停地在抢占我的时间片,不过都很顺利的完成了。
昨天回顾发现,自己好像很久没有学习成长了,很怀念大学无忧无虑的学习时刻,每天一个人由着性子探索计算机的世界。现在虽然工作一直在强调个人成长,但实话实话 很少有成长的机会。
并且之前学到的技能也在慢慢遗忘,举个例子:我大学时 是一个不折不扣的 gopher,持续很长时间一直在学习 golang 的体系与生态,也做过一些或大或小的项目,不过到现在已经忘得差不多了..
最近我打算学一下 Rust(一门内存安全、重 comp-time 的语言),虽然我很反感 将编译器、操作系统复杂度转移出上层的语言,但也算一种新的尝试吧。
对我而言学习一门新的语言 有诸多的好处,下期的主题可能会讲一下。
周末 Leann 当了回大厨,给大家欣赏下:
先这样,see you next week.
历史回顾
Last updated