月读(2023年4月)


Back to Basics in Production with Marc Grabanski - Software Unscripted
  • 注重编程基础,只用基础的语言层面的东西写自己需要的功能。而非框架等高水平的抽象工具
  • FM 官网前端用的是纯 JS、后端用的 Go
  • 思考如何用最少的代码实现需要的功能,只关注问题
  • 只使用语言本身去解决问题,即便解决不了,也更好地理解了问题。之后再选择合适的工具

AI狂飙的时代,人还有价值吗? - 不合时宜 | 小宇宙

文本:AI狂飙的时代,人还有价值吗?

  • 提升自己的灵活性

【大白话系列 #3】大白话聊 ChatGPT(Sarah & 王建硕) - Traders' Talk | 小宇宙

文本:2023/3/6 大白话聊 ChatGPT 直播逐字稿(Sarah & 王建硕) - Feishu Docs

  • Pre-training, fine tuning
  • GPT: 之前是 Generative Pre Training,后来改为 Generative Pre-trained Transformer
  • Transformer 的两大部分:encoder/decoder
  • AIGC: AI Generated Content
  • chatGPT 有没有人格?没有

The Age of AI has begun | Bill Gates

Artificial intelligence is as revolutionary as mobile phones and the Internet.

盖茨提及一些人工智能可以解决的问题:削弱全球不平等问题

  • 改善美国教育,提升数学能力
  • 全球气候变化

一、定义人工智能

AI: Artificial intelligence refers to a model created to solve a specific problem or provide a particular service.

AGI: Artificial general intelligence refers to software that’s capable of learning any task or subject.

二、提高生产力

通过完成一些简单重复的工作,提升人们的工作效率。人工智能将全方面接管个人日常琐事的处理。

生产力的提高可以将人们从琐碎的事务中释放出来,并有精力完成过去没有时间完成的事情。

三、健康

AI能帮助医疗工作者处理文书工作,节省时间。

AI还能在人类医生无法到达的地方,为当地人们提供医学指导。

四、教育

AI驱动的教学软件将改变人们的学习方式。

五、人工智能的风险和问题


涌现

涌现(续)

大语言模型(大神经网络)的两个研究方向预示着通用智能的可能性——思维链条(chain of thought, CoT);自发性地结构涌现(英文文献里的简称 emergence)。

传统的大神经网络是标注的快思考模式。而人除了有快思考模式,还有慢思考(逐步推理)模式。

只要神经网络的复杂性和训练样本的多样性都超过一个规模,就会有抽象的推理结构在神经网络里突然自发涌现出来。这个过程像所有的复杂性系统一样是非线性的。

AI 的 CoT 能力基本上就是在 GPT3 和 GPT3.5 这两个版本之间的某处诞生的。

同样在过去两年内出现的一个新的热词是 Grokking,中文可能可以翻译成「顿悟」,它描述了这样一种现象:一个高度复杂的神经网络在漫长的训练期内一直只能记住训练样本的信息,几乎没有泛化能力,但到了某一刻,它的泛化水平忽然跳了出来,而且非常完美。你可以想象成一个神经网络经历了一个「aha moment」,像是内部的某个齿轮忽然对上了一样。我的理解是 CoT 也可以看做是一种 Grokking。

在一种很粗糙的意义上说,大语言模型的外部属性(也就是用户可以直接感知和评估的属性)可以分解为「知识基础」+「推理能力」+「表达能力」这三个层面。大多数关于 ChatGPT 的讨论把目光集中在第一项和第三项,忽视了第二项的革命性进展。当人们热衷于吐槽它的知识基础(比如竟然不知道某件事或者完全弄错了某个事实)的时候,多少有点 miss the point。事实上你完全可以想象未来的 AI 被分拆成模块,知识引擎被单独拿出来处理(让一个语言模型记住大量明明可以快速检索到的知识是没有意义的),而推理与表达才是它的能力重点。这种解耦也会大大加快模型的运算效率。

说到模块解耦,甚至还有一个更有趣的例子,来自 UCSB 的 Wenhu Chen 最近的一篇论文 Program of Thoughts Prompting。他们觉得让 AI 通过 CoT 生成结果甚至都有些绕远了。应该让 AI 把原问题直接转化为程序代码,然后调用外部的代码运行模块来得出答案。这等于是把「计算」这一块也从语言模型中间剥离了出去。


An Uber-like Content Delivery Network | by Anton Lakhtikov | Medium
和传统CDN的解决方案不同

Repeat yourself, do more than one thing, and... — programming is terrible
  • Repeat yourself to find abstractions
  • Gather responsibilities to simplify interactions between them
  • Modularity is more than reducing things to their smallest parts
  • Modularity is about limiting the options for growth
  • Rewrite Everything
  • null is true, everything is permitted

Reduce server response times (TTFB) - Chrome Developers

如何缩短服务器响应时间?

  • 优化服务器的应用逻辑
  • 优化服务器查询数据库的方式,或者迁移到更快的数据库系统
  • 升级服务器硬件

Learning with ChatGPT | Globant Blog
不应用ChatGPT编写复杂代码

Rendering on the Web

广泛意义上讲,作者推荐服务端渲染或静态渲染,而非完全重新生成。

为了更好地理解我们在做这个决定时要选择的架构,我们需要对每种方法有一个扎实的了解,并在谈论它们时使用一致的术语。这些方法之间的差异有助于通过性能的角度来说明网络渲染的权衡问题。

一、术语

Rendering

  • SSR: Server-Side Rendering - 在服务器上将客户端或通用应用程序渲染成HTML。
  • CSR: Client-Side Rendering - 在浏览器中渲染应用,通常使用DOM。
  • Rehydration: 在客户端启动JavaScript视图,使其重新使用服务器渲染的HTML的DOM树和数据。
  • Prerendering: 在构建时运行客户端应用,将其初始状态捕捉为静态HTML。

Performance

  • TTFB: Time to First Byte - 被视为从点击链接到显示第一bit内容的时间。
  • FP: First Paint - 任何像素第一次对用户可见。
  • FCP: First Contentful Paint - 请求的内容变得可见的时间。
  • TTI: Time To Interactive - 页面达到可交互状态需要的时间。

二、服务端渲染

服务器渲染通常能产生快速的首次绘制(FP)和首次内容绘制(FCP)。在服务器上运行页面逻辑和渲染,可以避免向客户端发送大量的JavaScript,这有助于实现快速的交互时间(TTI)。

有了服务器渲染,用户就不可能在使用你的网站之前等待占用CPU的JavaScript的处理了。即使不能避免第三方JS,使用服务器渲染来减少你自己的第一方JS成本,也可以为其他方面提供更多的 "预算"。然而,这种方法有一个主要缺点:在服务器上生成页面需要时间,这往往会导致第一字节时间(TTFB)变慢。

究竟使用服务端渲染还是客户端渲染,不能只看它们两个的区别,还要看具体的应用场景。有些时候,需要混合使用。

很多现代的框架、库和架构让同时将应用渲染在客户端和服务端成为可能。

这些技术可以用于服务器端渲染,但需要注意的是,既在服务器端又在客户端上进行渲染的架构是一类具有非常不同性能特征和权衡的解决方案。

React 用户可以用 Server React DOM APIs 或者基于 React 的 Next.js 框架实现服务端渲染。Vue 相关文档,以及基于 Vue 的 Nuxt.js 框架。

三、静态渲染

静态渲染发生在构建状态,提供快速的首次绘制(FP)、首次内容绘制(FCP)和可交互(TTI)——假设客户端 JS 是有限的。

与服务器端渲染不同,静态渲染还可以实现始终如一的快速首字节时间,因为页面的 HTML 不必实时生成。一般而言,静态渲染意味着预先为每个 URL 生成单独的 HTML 文件。由于 HTML 响应是预先生成的,静态渲染可以部署到多个 CDN 上,以利用边缘缓存的优势。

静态渲染的一个缺点是必须为每个可能的 URL 生成单独的 HTML 文件。当你无法预测这些 URL 时,或者对于具有大量唯一页面的站点而言,这可能是具有挑战性甚至不可行的。

理解静态渲染和预渲染的不同:

Static rendered pages are interactive without the need to execute much client-side JS, whereas prerendering improves the First Paint or First Contentful Paint of a Single Page Application that must be booted on the client in order for pages to be truly interactive.

一个判断网站是静态渲染还是预渲染的办法:关闭JS,如果大部分功能还在,就是静态渲染;反之则是预渲染。

还有种办法:通过开发者工具里的选项,降低网速,预渲染需要加载更多的 JS 使得网站变得具备可交互性。

四、客户端渲染

客户端渲染(CSR)是指直接使用 JS 在浏览器端渲染页面。全部逻辑、数据获取、模板和路由都在客户端处理,而不是在服务端处理。

各种渲染方式对比列表 ◎ 各种渲染方式对比列表

图片版权归 Web.Dev 编者团队,本人仅学习使用


Priority Hints and optimizing LCP
优先级提示用于指示浏览器资源的相对优先级。您可以通过将 fetchpriority 属性添加到 <img>、<link>、<script> 和 <iframe> 元素或通过 Fetch API 上的 priority 属性来设置优先级提示。

Rendering untrusted HTML email, safely | The Making of Close
<iframe srcdoc="UNTRUSTED_HTML_HERE">
<html><head>
<meta http-equiv="Content-Security-Policy" content="script-src 'none'">
<base target="_blank">
<style>
  body { margin:0; font: 13px -apple-system, system-ui, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; overflow-y: hidden;}
  html:not(.x),body:not(.x){height:auto!important}
  p:first-child{margin-top:0;}
  p:last-child{margin-bottom:0;}
  a[href]{color: #3781B8;text-decoration:none;}
  a[href]:hover{text-decoration:underline;}
  blockquote[type=cite] {margin:0 0 0 .8ex;border-left: 1px #ccc solid;padding-left: 1ex;}
  img { max-width: 100%; }
  ul, ol { padding: 0; margin: 0 0 10px 25px; }
  ul { list-style-type: disc; }
</style>
</head>
<body>${bodyHtml}</body>
</html>
<iframe
  srcdoc="{{UNTRUSTED_HTML_HERE}}"
  sandbox="allow-popups allow-popups-to-escape-sandbox allow-same-origin"
  csp="script-src 'none'"
/>

Shebang Shenanigans :: Linus Karlsson

在不同的系统下,shebang 行添加参数的作用不同。

#!/usr/local/bin/args -a -b --something

hello i'm a line that doesn't matter
chmod +x file.txt
./file.txt
## Linux
# argv[0]: /usr/local/bin/args
# argv[1]: -a -b --something
# argv[2]: ./file.txt
## macOS
# argv[0]: /Users/linus/args
# argv[1]: -a
# argv[2]: -b
# argv[3]: --something
# argv[4]: ./file.txt

The 18 biggest unsolved mysteries in physics | Live Science

物理学的18大未解之谜:

  • What is dark energy
  • What is dark matter
  • Why is there an arrow of time
  • Are there parallel universes
  • Why is there more matter than antimatter
  • What is the fate of the universe
  • How do measurements collapse quantum wavefunctions
  • Is string theory correct
  • Is there order in chaos
  • Do the universe's forces merge into one
  • What happens inside a black hole
  • Do naked singularities exist
  • Violating charge-parity symmetry
  • When sound waves make light
  • What lies beyond the Standard Model
  • Fundamental constants
  • What the heck is gravity, anyway
  • Do we live in a false vacuum

中国的防火长城是如何检测和封锁完全加密流量的

How the Great Firewall of China Detects and Blocks Fully Encrypted Traffic 英文版

2021年11月初,中国的防火长城(GFW)部署了一种新的审查技术——被动识别并阻断全加密流量。

论文主要内容:通过测量描述GFW用于审查完全加密流量的新系统,发现:审查者是通过一种启发式规则来 豁免 那些不太可能是完全加密的流量,然后阻止其余未被豁免的流量。

这些启发式规则基于常见协议的指纹、1比特的占比以及可打印的ASCII字符的数量、比例和位置

完全加密的翻墙协议是翻墙生态系统中的一块基石,不像 TLS 协议是以明文握手开始,完全加密(随机化)的协议——如 VMess、Shadowsocks 和 Obfs4——被设计成连接中的 每个字节 都与随机数据没有区别。这些“看起来什么都不像”的协议的设计理念是,它们 应该 很难被审查者抓住特征,因此阻断的成本很高。

VMess:

VMess协议是一种用于网络通信的加密协议,它采用了类似于TLS的方式进行加密和传输,可以在不安全的网络中提供安全的传输通道。VMess协议由V2Ray项目开发,是一种用于隧道传输的协议,通常用于科学上网和网络代理。

VMess协议提供了多种加密方式和传输协议,包括TCP、mKCP、WebSocket等。它可以通过伪装成其他协议的方式来避免网络封锁和侦测,从而提高网络安全性和不可检测性。同时,它还支持多种身份验证方式,包括TLS证书和Token验证等,确保通信的安全性和可靠性。

总之,VMess协议是一种安全、高效、灵活的加密协议,能够在不安全的网络中提供可靠的传输通道,被广泛应用于科学上网、网络代理等领域。

——ChatGPT

https://www.v2fly.org/en_US/developer/protocols/vmess.html

Shadowsocks:

Shadowsocks协议是一种用于网络通信的加密协议,它通过Socks5代理实现了对网络流量的加密传输。Shadowsocks协议由Clowwindy于2012年发明,是一种用于科学上网和网络代理的协议。

Shadowsocks协议采用了类似于VPN的方式进行加密和传输,可以在不安全的网络中提供安全的传输通道。与传统VPN不同的是,Shadowsocks协议可以自由选择代理服务器,从而避免了被封锁的风险。

Shadowsocks协议基于Socks5协议,支持多种加密方式,包括AES、ChaCha20、RC4等。同时,它还支持多种身份验证方式,包括用户名密码和TLS证书等,确保通信的安全性和可靠性。

总之,Shadowsocks协议是一种安全、高效、灵活的加密协议,能够在不安全的网络中提供可靠的传输通道,被广泛应用于科学上网、网络代理等领域。

——ChatGPT

https://shadowsocks.org/guide/aead.html

Obfs4:

Obfs4是一种用于混淆网络流量的协议,它可以帮助用户绕过网络审查和防火墙。它是由Tor项目开发的,用于保护Tor网络的流量,以免被网络审查和防火墙阻止。Obfs4可以将网络流量与正常的网络流量混淆在一起,使其更难被检测和识别。它具有自适应的特点,可以根据网络环境和流量特征进行调整,以提高混淆效果。Obfs4协议已经被广泛用于加密通信和网络代理,特别是在需要绕过网络审查和防火墙的场合。

——ChatGPT

https://gitlab.com/yawning/obfs4/blob/master/doc/obfs4-spec.txt

流量混淆策略:隐写与多态(steganograpic and polymorphic)。

完全加密的流量,看起来是随机的。

基于常见协议的豁免规则,这些常见协议有:TLS、HTTP。

不被豁免的协议。 我们测试了其他常见的协议:SSH、SMTP和FTP将被豁免,因为它们都以至少6个字节的可打印的ASCII开头(规则Ex2)。DNS-over-TCP由于包含很大一部分的零,使得它被Ex1规则豁免。然而,如果在DNS-over-TCP消息后附加足够多的随机数据,它将被阻止。

GFW如何阻断连接:丢弃从客户端到服务器的数据包;UDP流量不受影响;所有端口的流量都可能被阻断。


王川: 从 chatGPT 看人工智能的投资机会和风险

以 ChatGPT 为代表的人工智能大语言模型 (LLM) 的涌现,对世界的冲击力将大于蒸汽机,大于印刷术,大于文字,大于火。其进化速度和传播速度前所未有。终日沉浸其中才能理解其威力。世界结构和运作方式将彻底改变,而且已无法逆转。

涌现:一个系统的某种能力,在参数值突破到某个数值后,突然出现的能力。

AI 技术突破的一个重要原因:大规模并行计算能力的提升。

AI 技术的核心是神经网络,神经网络的核心算法是调网络参数时的前向传播和反向传播计算,这本质就是矩阵乘法。而矩阵乘法计算,每个元素的计算可以单独平行展开,与其他元素的计算互不干扰,所以特别适合用 GPU 的大规模并行计算能力来实现。

人脑的初级视觉皮质层(primary visual cortex),有过亿神经元,这些神经元能够进行复杂的并行计算和信息传递,使得人脑能快速感知视觉世界。从底层看,这和 GPU 的并行计算获得图像识别能力是类似的。

但在视觉和其他文字处理任务上,人脑的并行计算处理能力不如 OpenAI 的 GPT-4。所以, 一定要努力学习这种工具,它能帮助我提升对世界的理解力

要明白,GPT-4 之类的工具,以自然语言作为界面,可以容忍输入信息的模糊性。

效率高的工具,演化到一定程度,会把各种元素连接综合起来,成为一个前所未有的效率越来越高的实体, 甚至从一个遥远的观察者来看,像一个有明确目标的生命体 。要注意观察 GPT 的连接,会造就出怎么样的全新的,结构完全不同的实体。

大语言模型将成为智能组合叠加的超级胶水。本质上是语言理解能力强,降低了接口的精确性要求,提高了接口的通用性,降低了各子领域技术组合的门槛。将这个思路延伸一下,在分配时间和注意力的时候,最重要的不是掌握某个具体的技术的能力,而是保持始终和智能最高的大语言模型生态连接而不被切断的能力。

超级个体和公司的区别会越来越模糊。人与人沟通的阻碍,在作者看来,大于人与 LLM 之间沟通的阻碍。换句话说,你与人沟通不清楚,LLM 却能理解你的想法。

类 GPT 的大语言模型属于一种元工具(meta tool)。它的典型特征是,可以自我纠错。

GPT 的技术,相当于让极少数人具有“超大规模处理非结构化数据信息”的能力,层层叠加这种能力,看不到上限。

AI 会最终把现在所有人能干的活。慢慢全部自动化,边际成本无限接近于0。整个社会结构会有现在无法想象的变化。很多传统概念要么消失,要么彻底重构,而这个变化已无法逆转。

技术进步很快,以至于现在 对普通人而言最佳的策略,恐怕默认是以“躺平,养好身体,等待”为主。否则你拼死拼活积攒的那点资源,很可能过几年,就因为技术因素而一钱不值,但你的健康则是切切实实损失掉了

大语言模型的应用要比互联网的应用要快一些,预计一两年内就能看到影响。

从投资角度来看,唯一值得长期投资的是能够控制生态的,强垄断的,具有征税能力的公司。

什么是“收税的生态位”?

  1. 就是说某个公司的产品和服务,生态内的其他大部分玩家不得不用;
  2. 用了之后就无法离开,无法换别的公司的产品(因为使用习惯和功能持续深度整合,产业链群体惯性,或其他原因),而且时间越久越难离开;
  3. 因为很难有竞争者替代,此类产品服务的价格相对整个生态经济占比,不会下降,甚至可能持续上升。

面对泡沫,普通人很难独善其身。一是没有资源长时间坚持一种看上去相对平庸的策略,二是无法承受看上去比自己蠢的人居然暂时大幅度超过自己的巨大精神压力,三是认为自己可以择时提前退场,四是认为自己可以择时而选择主动做空,等等.

即使知道大概演化的框架,实际上无法改变什么。企业资金因为竞争的恐惧而入场,机构资金因为错过的恐惧而入场,散户因为恐惧隔壁老王赚钱比自己多很多而入场,所有入场的资金争先抬高价格,互相强化。这种恐惧驱动的策略相当长一段时间确实有效,大家对此策略的信念也不断强化,难以改变。


Write Better CSS By Borrowing Ideas From JavaScript Functions — Smashing Magazine

一、避免 不想要的 副作用

比如一个箭头+圆,想让箭头变窄一些,但是圆跟着变窄,变成了椭圆!

此时就产生了副作用。通过开发者工具发现:圆的大小取决于内部图标+图标与圆之间的间隙(padding)。

理想情况下,圆的形状不随内部图标的变化而改变。一种修复方法:Flexbox

这种方法的两个好处:

  • 容器的形状被隔离,不受内部内容的影响。
  • 容器的大小也与内部内容无关。

二、书写方便的代码

JavaScript 中的函数参数提供了一种方便的方式,来定义你想要控制的输入。写 JavaScript 函数可能遇到的问题:

  • 太多参数。
  • 参数不够。

三、书写弹性风格

当页面发生变化时,我应该如何应对?

  1. Avoid unwanted side effects.
  2. Use the right parameters.
  3. Consider how inputs change outputs.

使用Cloudflare Zero Trust连接被墙的服务器 | 土豆不好吃

Setting up Github Copilot in Emacs | Robert Krahn

欢迎通过「邮件」或者点击「这里」告诉我你的想法
Welcome to tell me your thoughts via "email" or click "here"