diff --git a/apps/blog/components/editorial/DigestEntry.tsx b/apps/blog/components/editorial/DigestEntry.tsx
new file mode 100644
index 0000000..93c3a27
--- /dev/null
+++ b/apps/blog/components/editorial/DigestEntry.tsx
@@ -0,0 +1,87 @@
+'use client';
+
+import * as React from 'react';
+import { cn } from '@/lib/utils';
+
+export interface DigestEntryProps {
+ /** Article title */
+ title: string;
+ /** Source URL */
+ href: string;
+ /** Category tag */
+ category?: string;
+ /** Child content (MDX prose) */
+ children?: React.ReactNode;
+ /** Additional CSS classes */
+ className?: string;
+}
+
+/**
+ * DigestEntry - Card component for digest article entries
+ *
+ * Displays an article with:
+ * - Linked title (h3 level, but rendered as styled div to avoid TOC)
+ * - Category badge
+ * - Full prose content as children
+ */
+export function DigestEntry({
+ title,
+ href,
+ category,
+ children,
+ className,
+}: DigestEntryProps) {
+ const isExternal = href.startsWith('http');
+
+ return (
+
+ {/* Title as link */}
+
+
+ {/* Category badge */}
+ {category && (
+
+
+ {category}
+
+
+ )}
+
+ {/* Content */}
+ {children && (
+
+ {children}
+
+ )}
+
+ );
+}
diff --git a/apps/blog/components/editorial/index.ts b/apps/blog/components/editorial/index.ts
index 7c7526a..1aa8c3e 100644
--- a/apps/blog/components/editorial/index.ts
+++ b/apps/blog/components/editorial/index.ts
@@ -11,3 +11,6 @@ export type { FeaturedCardProps } from './FeaturedCard';
export { EditorialGrid } from './EditorialGrid';
export type { EditorialGridProps } from './EditorialGrid';
+
+export { DigestEntry } from './DigestEntry';
+export type { DigestEntryProps } from './DigestEntry';
diff --git a/apps/blog/components/layout/SiteHeader.tsx b/apps/blog/components/layout/SiteHeader.tsx
index 0041452..2d41a45 100644
--- a/apps/blog/components/layout/SiteHeader.tsx
+++ b/apps/blog/components/layout/SiteHeader.tsx
@@ -37,7 +37,6 @@ function useLocalizedNav() {
const links: NavLink[] = [
{ href: `${basePath}/essays`, label: translate(language, 'nav.essays') },
- { href: `${basePath}/periodics`, label: translate(language, 'nav.periodics') },
{ href: `${basePath}/series`, label: translate(language, 'nav.series') },
{ href: `${basePath}/about`, label: translate(language, 'nav.about') },
];
diff --git a/apps/blog/components/mdx/MDXComponents.tsx b/apps/blog/components/mdx/MDXComponents.tsx
index e1d1482..fd47e3b 100644
--- a/apps/blog/components/mdx/MDXComponents.tsx
+++ b/apps/blog/components/mdx/MDXComponents.tsx
@@ -24,7 +24,7 @@ import {
import { Note, Marginnote, Reference, References, WideBlock, TimelineMap } from '../content';
// Editorial components for magazine-style layouts
-import { EditorialGrid, EditorialSection, FeaturedCard, Item } from '../editorial';
+import { EditorialGrid, EditorialSection, FeaturedCard, Item, DigestEntry } from '../editorial';
// Vision100 subway map visualization
import { Vision100Map } from '../vision100';
@@ -264,6 +264,16 @@ export function getMDXComponents(): MDXComponentMap {
Figure,
FigureImage,
+ // Image component alias (for compatibility with common MDX patterns)
+ Image: ({ src, alt }: { src?: string; alt?: string }) => {
+ if (!src) return null;
+ return (
+
+
+
+ );
+ },
+
// Tabs
Tabs,
TabsList,
@@ -287,6 +297,7 @@ export function getMDXComponents(): MDXComponentMap {
EditorialSection,
FeaturedCard,
Item,
+ DigestEntry,
};
}
diff --git a/apps/blog/content/periodics/digest-001.mdx b/apps/blog/content/periodics/digest-001.mdx
index 165f50d..e41c880 100644
--- a/apps/blog/content/periodics/digest-001.mdx
+++ b/apps/blog/content/periodics/digest-001.mdx
@@ -10,24 +10,24 @@ lang: "zh"
## 文章
-
-### Birds do have a brain cortex—and think
-
+
这篇Science评论从以下两篇Science文章出发,更新了我们对于鸟类的大脑结构和认知功能的看法。
+
- [A neural correlate of sensory consciousness in a corvid bird](https://science.sciencemag.org/content/369/6511/1626)
- [A cortex-like canonical circuit in the avian forebrain](https://science.sciencemag.org/content/369/6511/eabc5534)
-我们对于哺乳动物大脑的研究已经比较丰富了,一般认为很多认知功能都是由大脑皮层实现的,而皮层下结构往往只是负责一些生理功能和比较初级的认知加工。相比之下,我们对于鸟类大脑的结构和功能的还不是很清楚。之前我们对于鸟类大脑结构的理解一直没有找到“大脑皮层”这样类似的结果,很多脑区在比较生物学上都被对应到了哺乳动物比较原始的脑区和皮层下结构。所以我们以为鸟类的认知功能也会比较简单。但是,近年越来越多的神经科学研究发现鸟类可以完成很多复杂的认知任务,所以神经科学家逐渐认为鸟类具有比较高级的认知过程。这几篇文章旨在更新我们对于鸟类大脑结构和功能的看法,让我们认识到鸟类大脑确实有与哺乳动物大脑皮层相类似的结构,而这些大脑结构为鸟类的高级认知提供了神经基础。
+我们对于哺乳动物大脑的研究已经比较丰富了,一般认为很多认知功能都是由大脑皮层实现的,而皮层下结构往往只是负责一些生理功能和比较初级的认知加工。相比之下,我们对于鸟类大脑的结构和功能的还不是很清楚。之前我们对于鸟类大脑结构的理解一直没有找到"大脑皮层"这样类似的结果,很多脑区在比较生物学上都被对应到了哺乳动物比较原始的脑区和皮层下结构。所以我们以为鸟类的认知功能也会比较简单。但是,近年越来越多的神经科学研究发现鸟类可以完成很多复杂的认知任务,所以神经科学家逐渐认为鸟类具有比较高级的认知过程。这几篇文章旨在更新我们对于鸟类大脑结构和功能的看法,让我们认识到鸟类大脑确实有与哺乳动物大脑皮层相类似的结构,而这些大脑结构为鸟类的高级认知提供了神经基础。
+
-### How I got into linguistics, and what I got out of it
+
社会语言学家William Labov讲述了他的研究生涯:他如何成为一个社会语言学家,他在过去的这些年里研究了哪些课题,这些课题是如何转变的,以及他的研究如何对社会产生影响,以及他如何看待自己的研究生涯。
William Labov在新泽西长大,他很早就注意到不同的社区(纽约和新泽西)的语言会有非常明显的特点,这个兴趣后来成为了他研究的方向。他提到了几个特别有意思的经历。
-其一,他在哥伦比亚大学期间去Harlem社群研究黑人所使用的语言系统。之前,美国社会一直认为黑人智力水平天生差,其语言系统也是土土的且缺乏逻辑。后来,William Labov写了一篇题为《The Logic of Nonstandard English》的论文,说明黑人社群自身的语言方式能够充分表达逻辑思维,也不会影响学习。所以他建议用黑人社群自己熟悉的语言系统和表达方式来教黑人学生知识,而不是套用白人的所谓“更有逻辑的语言系统”来教授知识。但是这个观点等了几十年才被黑人社群逐渐接受并应用。
+其一,他在哥伦比亚大学期间去Harlem社群研究黑人所使用的语言系统。之前,美国社会一直认为黑人智力水平天生差,其语言系统也是土土的且缺乏逻辑。后来,William Labov写了一篇题为《The Logic of Nonstandard English》的论文,说明黑人社群自身的语言方式能够充分表达逻辑思维,也不会影响学习。所以他建议用黑人社群自己熟悉的语言系统和表达方式来教黑人学生知识,而不是套用白人的所谓"更有逻辑的语言系统"来教授知识。但是这个观点等了几十年才被黑人社群逐渐接受并应用。
其二,他通过判断不同社群口音的不同来为一个嫌疑人做无罪辩护。1987年,泛美航空认为一名运货员Paul Prinzivalli多次通过电话给泛美航空制造炸弹威胁。泛美航空的证据是**这个运货员的声音听起来像电话录音里面的那个人**。结果William Labov一听录音,就知道录音里面那个人是个波士顿人,而Prinzivalli是个纽约人。William Labov向法庭提交了关于不同地区口音的各种量化标准和证据来说明这两地口音之间的差别,从而洗脱了Prinzivalli的嫌疑。
@@ -35,11 +35,12 @@ William Labov在新泽西长大,他很早就注意到不同的社区(纽约
> What is success? If you get to be 70 years old, and you can look back without feeling that you've wasted your time, you've been successful.
+
-### Why is Snowflake so Valuable?
-
+
Snowflake最近上市了,而且股价非常高。我挺好奇为什么Snowflake这么值钱的,这篇文章就分析了这个问题。基本的因素包括:
+
- 成长速度快
- 留存率高
- 用户满意度高
@@ -47,13 +48,14 @@ Snowflake最近上市了,而且股价非常高。我挺好奇为什么Snowflak
**这篇文章值得细细品味**
+
-### Six Figures in 6 days
-
+
作者分享了他的iOS图标包六天卖了10万刀的经验。作者喜欢画图标,早在多年前作者就画了一些手机APP的图标。最近iOS突然允许用户定制自己的APP的图标(虽然好像安卓系统早就可以了),于是作者第一时间把自己之前做的图标和新做的图标打包放在了网上卖,定价十几刀,然后在Twitter上发布了这个图标包。几天后,Youtube红人MKBHD在视频中推荐了了作者的图标包,结果作者这个图标包在网上大卖,6天卖了10万美元。
我的体会是:
+
- 机会是给有准备的人的。(作者之前就已经绘制了各种图标,只是没卖出去。)
- 行动要快,想到了就要去做。(作者看到iOS更新之后,第一时间更新了图标包,并放了出去。)
- 要记得分享。(作者在Twitter上发布了他的图标包,这是唯一个信息来源。所以社交网络还是挺重要的。)
@@ -61,67 +63,68 @@ Snowflake最近上市了,而且股价非常高。我挺好奇为什么Snowflak
- 要有大V带货。(作者的销售量暴增是在MKBHD推荐之后的事情。)
- 机会总是有的,要保持积累。(作者放在六年前,没有什么收获;等了六年,机会来了,一下子大卖。)
+
-### Bringing the Mona Lisa Effect to Life with TensorFlow.js
-
+
作者用Tensorflow-js写了一个让蒙娜丽莎活起来的小应用。读完了整个文章以后,我感觉这个代码难度并不是很高,值得自己去尝试!这个展示真的挺好玩的,我决定把展示图片放在这里。(作者分享了代码,代码仓库[在这里](https://github.com/emilyxxie/mona_lisa_eyes))
-
-
+
+
+
-### The Art of PNG Glitch
+
-这篇文章教你如何制造png故障。这是一篇通过制造问题来了解png编码格式的教学文章,典型的Learning by Hacking。文章前半段是介绍如何产生各种效果的png故障,然后后半段是仔细分析各种故障背后的原理。[这篇文章值得细细品味]()。
+
-## 网络学习
+这篇文章教你如何制造png故障。这是一篇通过制造问题来了解png编码格式的教学文章,典型的Learning by Hacking。文章前半段是介绍如何产生各种效果的png故障,然后后半段是仔细分析各种故障背后的原理。这篇文章值得细细品味。
+
-### What's the difference between a Future and a Promise?
+## 网络学习
+
我最近在写Javascript的时候第一次遇到了Promise这个概念,以及伴随而来的整个异步编程模型。但是我一直搞不清Future和Promise之间的差异,这个算是一个比较好的问答合集。
*题外话:问答系统的好处在于,给定同一个问题,你可以看到不同的人从不同的角度来回答这个问题,或者解释问题中的概念。这本身是有好处的。但是现在中文问答网站有一个很大的问题在于提出的问题非常模糊,然后导致下面的回答其实并不是通过不同的方面来回答同一个问题,而是在完全回答不一样的问题。*
+
-### The Frontend Developer Career Path
-
-
+
Scrimba是一个教前端编程的网站,教授的内容也基本上就是和前端开发相关的相关工具和语言。这上面大部分的课程并不长,但是这一款《The Frontend Developer Career Path》是个例外,全长72小时。HackerNews对Scrimba和这个课程的评价好像还不错。我还没有试过,不过看了一下要完成的几个编程项目,还是挺不错的。
*题外话:现在这种类型的网络教学(或者知识付费服务)还挺多的。尤其是国内,现在简直是**卖课成风**。如果课程设计精良、内容丰富,我并不反对卖课。但是我也不希望卖课成了网上唯一分享知识的方法。*
+
-### Hugo Tutorial
-
-
+
这是一个简单易懂,内容又相对比较全面的Hugo教程。一共23集,每集大概5-10分钟,2倍速看的话,大概两个小时可以对Hugo的整个系统有一个大概的了解。
Hugo网站也基本上把这个系列的视频当作了主要教学视频,在不同的文档页面上都嵌入了相应的教学视频。不得不说,这个系列讲的挺好的,看完这个视频集合以后再去看Hugo的文档或者去网上搜材料就会简单不少。
-## 多媒体
-
+
-### Hacking with Andrew and Brad: tip.golang.org
+## 多媒体
+
本来我是想找一些视频来学习Go这个语言的,结果找到了这个视频。厉害的程序员不仅仅是程序写得好,写程序相关的工具也用的非常溜啊。我看到了作为码农,跟他们的巨大差距。这个视频不仅仅是讲编程,其实还讲了不少设计方面的想法。
-## 工具、技术、展示
-
-
-### kitty - the fast, featureful, GPU based terminal emulator
+
+## 工具、技术、展示
+
基于GPU的终端模拟器,用C+Python写的。Kovid Goyal以一己之力写了Cablire和Kitty这两款软件,还是蛮厉害的。很多人说Kitty挺好用的,但是因为我连Tmux/Shell/Vim都用的不太好,还是老老实实用VS Code这种IDE算了。
+
-### Gitalk
-
+
Gitalk是一个基于Github Issue和Preact的评论组件。我花了些力气才把这个站点的Gitalk设置成功。整体看起来蛮好用的,感谢作者。
+
diff --git a/apps/blog/content/periodics/digest-002.mdx b/apps/blog/content/periodics/digest-002.mdx
index 2540ddd..b64add3 100644
--- a/apps/blog/content/periodics/digest-002.mdx
+++ b/apps/blog/content/periodics/digest-002.mdx
@@ -10,28 +10,25 @@ lang: "zh"
## 文章
-
-### Compact Nuclear Fusion Reactor Is ‘Very Likely to Work,’ Studies Suggest
-
-
+
MIT的[Sparc](https://www.psfc.mit.edu/sparc)项目信心满满地认为他们能控制核聚变,并使用核聚变,像太阳一样,制造出更多的能量。这一想法要是实现了,我们将迈向一个崭新的能源时代;同时,我们也可以更好地缓解全球气候变暖的问题。
这篇纽约时报的文章其实没有涉及到太深的技术问题,但是这篇科学报道的写作方法确实有不少值得学习的地方。至于具体的关于MIT这一系列核聚变的研究的科学讲座,还是看下面列出来的视频吧。
+
-### Writing a book: is it worth it?
-
+
花时间写一部书到底值不值?Martin Kleppmann,《设计数据密集型应用》的作者,分享了他写这本书的收获,然后反思了他觉得写一本书到底值不值。简单的说,他觉得还是值的:这本书的出版不但给作者带来了经济上的收入,也给作者带来了很多演讲和交流的机会。而且这本书帮助到了很多人,影响很大。于人于己,都是有好处的。但是写书的过程很伤,所以他一段时间之内可能也不会再写另一本书了。
-《设计数据密集型应用》真本书确实写得很好。里面的内容全面又精要,是一本不错的分布式系统的入门书籍。很多人都在推荐这本书,很多读者都给了很高的评价。所以,作者的经验分享要把这个书的成功考虑进去。毕竟,也有很多人写了书,结果没卖出去几本,花了心思和时间,结果没有什么收获。
-
+《设计数据密集型应用》真本书确实写得很好。里面的内容全面又精要,是一本不错的分布式系统的入门书籍。很多人都在推荐这本书,很多读者都给了很高的评价。所以,作者的经验分享要把这个书的成功考虑进去。毕竟,也有很多人写了书,结果没卖出去几本,花了心思和时间,结果没有什么收获。
-### When fonts fall
+
+
-这篇文章深入浅出地讲解了渲染字体的复杂性。每一个字体库都只涵盖了整个电脑可编码字符的一个子集,当一个字符在字体库里面不存在的时候,软件怎么渲染这个字符呢?有的时候你看到的是一堆框框“”, 这个是字体库的`.notdef`对应的字形(Glyph)。但是,更多的时候,软件设计或者网页设计,会提供备用(Fallback)字体。软件发现在当前字体库找不到字形的字符之后,会试图在下一个备用字体库里面找有没有可用的字形,直到最后怎么都找不到,就会看到前面所说的框框。
+这篇文章深入浅出地讲解了渲染字体的复杂性。每一个字体库都只涵盖了整个电脑可编码字符的一个子集,当一个字符在字体库里面不存在的时候,软件怎么渲染这个字符呢?有的时候你看到的是一堆框框"", 这个是字体库的`.notdef`对应的字形(Glyph)。但是,更多的时候,软件设计或者网页设计,会提供备用(Fallback)字体。软件发现在当前字体库找不到字形的字符之后,会试图在下一个备用字体库里面找有没有可用的字形,直到最后怎么都找不到,就会看到前面所说的框框。
有趣的也是麻烦的地方在于字体渲染是逐字进行的,所以你会发现整个页面里面有些字长得跟其他的字不一样,读的时候会蹦出来。这些长得不一样的字符很有可能是从备用字体库选择的字形,然后因为备用字体库和优先选择的字体库在设计风格上有很大的不同,所以这几个特别的字符就显得有点不合群。据说现在Unicode一共收了约140,000个字符,没有任何字体库是覆盖了整个字符集的,像Arial这样的著名字体库也就包括了不到40,000字符。
@@ -39,9 +36,9 @@ MIT的[Sparc](https://www.psfc.mit.edu/sparc)项目信心满满地认为他们
计算机如何呈现不同字符、字形、字体这个问题确实是个非常复杂的问题。
+
-### How to take meeting notes
-
+
这个文章虽然说的是如何做会议笔记,但是他的笔记都是会议之后做的,所以我觉得应该叫做如何事后整理会议笔记。不过最开始,他说道整理会议笔记有一些好处,比如能够记录下讨论细节,可以分享给参会人,可以作为备忘,甚至可以作为其他写作的素材。作者在HackerNews的讨论里面澄清,这里所谓的Meeting不是公司会议,而是跟自己认识的人的私人会面(personal meeting)和讨论的记录。
@@ -58,62 +55,62 @@ HackerNews关于这篇文章有很不错的[讨论](https://news.ycombinator.com
> A long time ago, my boss at the time taught me a valuable lesson: every meeting needs an official record(/log/minutes/whatever) documenting all noteworthy **decisions (D), tasks (T, with deadline and responsible person), and information communicated (I)**, with that record being sent to all participants by **end-of-day**.
+
-### PEP 3333 -- Python Web Server Gateway Interface v1.0.1
-
+
Python的网络服务器网关接口(Web Server Gateway Interface, WSGI)标准,从PEP333演化而来,定义了Python与语言下所有网络服务器框架的基础。我之前写过的Flask,底层就需要实现一个WSGI。但是这个文档我没有完全看完,而且看着不是特别了解。估计需要结合一下Flask的实现来理解一下。另外,廖雪峰写了一个[简短的介绍](https://www.liaoxuefeng.com/wiki/1016959663602400/1017805733037760),还挺好懂的。[Codepoint也写了一个相关的小教程](http://wsgi.tutorial.codepoint.net/intro#)。 网络编程还是有太多东西不熟悉了。
+
-### 斗鱼关注人数爬取 ── 字体反爬的攻与防
-
+
这篇文章五星推荐🌟🌟🌟🌟🌟
这个案例分析真的很有趣。因为我之前没有计算机安全方面的背景知识,这是我第一次看到用字体反爬的这个方法,感觉十分有创造力。整个文章结构非常清晰,最开始通过人的手工探索对问题进行了初步分析和定义,然后从攻防两个角度来讨论了这个问题。攻击方面,从寻找数据源,到分析数据协议,然后反向工程获得数据和伪字体,最后用OCR来把伪字体的数字对应关系解出来,从而把数据解密,步步为营,娓娓道来。防守方面,提到了自动产生字体,构架伪字体的映射关系。整个过程中提到了很多工具,非常值得学习。
+
-### A Short Story for Engineers
-
+
HackerNews上很多人认为这个小故事是个都市传说,我觉得这个故事更像个寓言。这个寓言想告诉大家有很多工程上的问题,在找到了问题要害的时候,往往可以有非常简单的解决办法。但是,人们有时候喜欢over-engineer整个问题,把问题搞的很复杂, 然后花费大价钱来制造一个解决方案。
工程能力并不一定表现在提供一个复杂的解决方案,而是用简单的方法来解决复杂的问题。软件工程同样如此。
-## 网络学习
-
-
-### Learn X in Y minutes: X = C++
+
+## 网络学习
+
这个系列的网络教程很有意思,基本上所有的科目(X)都是一页教程。虽然整个教程只有一页,但是教程涵盖的内容很丰富。比如这个C++教程,就提到了*与C语言的比较*, *面向对象的编程*,*C++模板*,和数个C++的语言特色。这个肯定不是面向初学者的教程,更像是一个快速总结的备忘录(Cheatsheet)
-## 多媒体
-
+
-### MIT's Pathway to Fusion Energy (IAP 2017) - Zach Hartwig
+## 多媒体
+
这个是前面提到的MIT核聚变研究的科学讲座。HackerNews的[讨论](https://yahnd.com/theater/r/youtube/L0KuAx1COEk/)里面还有更多的资料。
+
-### C++: The Good Parts
-
+
这个主要就是讲的`include`和`lambda`表达式的强大。其中顺便还提到了`concept`的定义和泛型程序设计。深入了解一下`include`和`lambda`还是蛮有必要的。
+
-### Just-in-Time Compilation - JF Bastien - CppCon 2020
-
-
+
这个Talk就是大概梳理了一下Just-in-Time Compilaton在过去60年的发展。其中列举和摘录了大概20篇文献,但是如果没有自己去读这些文献,光听他说,我感觉不太能学到什么东西。好在他把文献放在了[这个仓库里](https://github.com/jfbastien/jit-talk),有时间可以去读。这个Talk涉及到编译原理的知识,可能需要先去打点基础再回来看。
-## 工具、技术、展示
-
+
-### Flask - Code a simple web app
+## 工具、技术、展示
+
AppSeed提供了一系列使用Flask建站的模板项目,从最简单的只有一个页面的模板,到复杂的有UI设计、带数据库的模板都有。我觉得这个可以用来当做实例学习Flask整个框架和Flask的应用。不过可能直接学Flask更快一点。整体来说,Flask确实比Django要轻巧很多,一开始的设置也简单很多。但是比较大型的网站似乎还是喜欢用Django?想起来之前有一个业余项目使用Django,结果我一直没有配置成功。
+
+
diff --git a/apps/blog/content/periodics/digest-003.mdx b/apps/blog/content/periodics/digest-003.mdx
index 121cd0a..9f7694a 100644
--- a/apps/blog/content/periodics/digest-003.mdx
+++ b/apps/blog/content/periodics/digest-003.mdx
@@ -10,29 +10,27 @@ lang: "zh"
## 文章
-
-### How we built a $1m ARR SaaS startup
-
+
Canny的创始人Sarah分享了他们达到一百万美元年度经常性收入(annual recurring revenue)这个指标。ARR似乎是评价订阅业务(包括SaaS)的关键指标[^1],将定期订阅的合同经常性收入部分规范化为一年期的价值。整个团队在达到目标时一共七个人,都是远程工作。公司从零开始到达这个目标用了3年时间,而且都是用的自己的资金。Sarah将整个过程分成几个阶段,每个阶段都分享了需要解决的问题和学到的东西。而且他们一直在写博客,把他们的创业经历记录下来并分享给其他人。
这个小公司的业务就是建立了一个集中用户反馈的模块。其他的开发者可以使用这个模块来帮助整理他们的产品所遇到的用户需求,并且对需求进行归类和排序。感觉这是一个非常有意思的Niche,解决了一个小问题,但是这个问题又确实是很多开发者会面对的。然后对这个小服务进行一定的收费。感觉在互联网发展的今天,其实机会还是蛮多的,只要把问题提出的好,然后提供一个不错的解决方法。
+
-### Python 3.9 What's New
-
+
Python 3.9的更新目录。东西还挺多的!这是我第一次认真看某个语言的版本更新目录,暂时还没有时间仔细研究每个细节。新的`zoneinfo`和`graphlib.TopologicalSorter`类看起来挺有意思的。不过内容这么多,线性地跟着版本更新目录来了解可能有点难。可能还是的根据专题来了解。
+
-### 改变世界的一次代码提交
-
+
这篇文章介绍类一下Linus的第一个Git的Commit,然后分析了一下Git在设计上的一些思路。作为源码分析理解的文章还是不错的。
+
-### Salary Negotiation: Make More Money, Be More Valued
-
+
这是一篇关于工资谈判的文章。文章的主旨就是让应聘者在工资谈判上大胆一点。
@@ -50,7 +48,7 @@ Python 3.9的更新目录。东西还挺多的!这是我第一次认真看某
**你要在什么时候提出具体的工资谈判呢?**
-在面试什么都结束以后,有人可以有权威地说基本上确定要你的时候,才是提出工资谈判的具体时刻。这个时候你可以提出,“你很欣然接受这个工作,如果……”,然后提出一个互相可以接受的工资水平。也就是说,你只有在处于一个“Yes-If”的处境的时候才开始谈判。不要再一个“No-but”的时候谈判。比如,公司如果说不太想要你,你想提出说:“但是我可以少要一点薪水”。这种情况是**要不得的**。
+在面试什么都结束以后,有人可以有权威地说基本上确定要你的时候,才是提出工资谈判的具体时刻。这个时候你可以提出,"你很欣然接受这个工作,如果……",然后提出一个互相可以接受的工资水平。也就是说,你只有在处于一个"Yes-If"的处境的时候才开始谈判。不要再一个"No-but"的时候谈判。比如,公司如果说不太想要你,你想提出说:"但是我可以少要一点薪水"。这种情况是**要不得的**。
> **Note:**
>
@@ -66,19 +64,18 @@ Python 3.9的更新目录。东西还挺多的!这是我第一次认真看某
* 公司看重谁,或者看重哪些职位、头衔、群体? (Who do they value within the company? (Roles? Titles? Groups?))
* 在公司里比较成功的职业道路看起来什么样子?(What does the career path look like for successful people within the company?)
* 公司对你关心的工具和做事风格有多慷慨?(Roughly speaking, how generous are they with regard to axes that you care about?)
-* 公司有没有别的薪资酬劳相关的杠杆和途径?(Do they have any compensation levers which are anomalously easy to operate? For example, if you asked around, you might hear a few people say that a particular firm pushes back modestly on out-of-band increases in salary but they’ll give in-the-money option grants like candy.)
-* 还有很多比较“虚”的内容,比如公司文化怎么样。All the fuzzy stuff: what’s the corporate culture like?
+* 公司有没有别的薪资酬劳相关的杠杆和途径?(Do they have any compensation levers which are anomalously easy to operate? For example, if you asked around, you might hear a few people say that a particular firm pushes back modestly on out-of-band increases in salary but they'll give in-the-money option grants like candy.)
+* 还有很多比较"虚"的内容,比如公司文化怎么样。All the fuzzy stuff: what's the corporate culture like?
**不要只顾着工资**
除了工资之外,整个薪资结构还有很多其他的组成成分,比如股票,比如期权,比如福利等。这些都可以作为谈判的一部分。
+
-### Software Archaeology
+
-
-
-很多人都在讲怎么“写”代码,但是很少人讨论怎么“读”代码。实际上,工程师可能只花20%的时间写代码, 但是需要花80%的时间读代码。这篇文章讲了讲如何开始读代码。结合文章做的[Podcast](http://www.se-radio.net/2009/11/episode-148-software-archaeology-with-dave-thomas/)一起学习,效果更好。
+很多人都在讲怎么"写"代码,但是很少人讨论怎么"读"代码。实际上,工程师可能只花20%的时间写代码, 但是需要花80%的时间读代码。这篇文章讲了讲如何开始读代码。结合文章做的[Podcast](http://www.se-radio.net/2009/11/episode-148-software-archaeology-with-dave-thomas/)一起学习,效果更好。
读代码
* recreational code reading,读代码以娱乐。artist and writers read other's work. Software engineers should do that as well.
@@ -94,54 +91,55 @@ Python 3.9的更新目录。东西还挺多的!这是我第一次认真看某
6. 缩小字体,快速了解整个代码库的结构,
7. Instrumentation, tracing, and visualization一些代码片段,比如分析类之间的关系,函数之间的关系等等,
8. Documentation是最没有帮助的——总是过时,Comment经常是没有用的,
- * 这里提一句:代码的注释应该解释“为什么”,让代码自己去解释“怎么做”。不要用注释重复代码。
+ * 这里提一句:代码的注释应该解释"为什么",让代码自己去解释"怎么做"。不要用注释重复代码。
9. 单元测试非常有帮助,
10. 你需要学command line interface,比如`grep`、`awk`、`|`的程序和操作符。
-## 网络学习
+
+## 网络学习
-### Learn & practice Git
-
+
又是另一个Git教程。这年头Git教程真的是很多,但是各有各的特点,所以也挺不错的。这个教程用的是互动的方法,直接使用`git`来完成一系列的任务。我想起当年又一个用[游戏来教你Vim](https://vim-adventures.com/)的教程。大家都是在画各种心思来教大家怎么使用GIT这个工具。好的教程总是不嫌多的!
+
-### Startup Hiring 101: A Founder's Guide
-
+
这是Gem的创始人写的一些列关于初创公司如何找人的文章。算是创业经验分享吧。如果对于创业期间招人应该如何进行完全没有头绪的话,可以快速扫一遍这一系列文章。但是这种文章最多也就是仅供参考了。
-## 多媒体
-
+
-### Raycasting engine in Factorio 1.0 (unmodded) - Facto-RayO v2.0
+## 多媒体
+
这是一个用Factorio这个游戏直接实现了一个raycasting的功能。用游戏编写另一个游戏,编写另一个游戏,无限循环。只要有基本的元素、足够的耐心和巨大的规模,终究可以用任何信息载体实现另一个信息载体。
+
-### Simple Made Easy 2012 - Rich Hickey
-
+
> Simplicity is prerequisite for reliability.
> -- Edsgar Dijkstra
这个Talk听完以后没有特别多的想法,主旨就是要把整个工具和工程设计得简单(simple),不要搞得特别复杂(complex),但是这个过程并不简单(easy)。我最大的收获可能是Speaker对于Simple vs Easy之间的区分吧。很多内容都是比较抽象的思想讨论。可能是我的软件工程背景还不够,所以有些对比没有非常直观的体会。
-## 工具、技术、展示
-
+
-### ipdata
+## 工具、技术、展示
+
IP data是一个提供IP数据的服务商,可以通过IP地址得到相关的地理位置信息,比如经纬度、国家省份等。
+
-### Calibre
-
+
kitty终端的作者所写的另一个非常受欢迎的电子书管理软件。虽然用户界面比较粗糙,但是功能强大,而且广受好评。最近作者发布了[Calibra 5.0](https://calibre-ebook.com/new-in/fourteen)。
+
[^1]: 关于计算ARR:因为ARR是按年算的,所以如果客户只是按月付10块,没有包年合约,那么这个用户贡献的ARR是0。如果用户包年,然后每个月付10块,那么用户的ARR是120块。
diff --git a/apps/blog/content/periodics/digest-004.mdx b/apps/blog/content/periodics/digest-004.mdx
index e5dac7a..6ae984e 100644
--- a/apps/blog/content/periodics/digest-004.mdx
+++ b/apps/blog/content/periodics/digest-004.mdx
@@ -10,13 +10,13 @@ lang: "zh"
## 文章
-
-### Startup Cemetery
+
这个集合很有意思,整理了一系列初创公司的业务、募资额度和倒闭的原因。点开不同的创业公司会读到不同的总结,这个还蛮适合休闲的时候了解一下创业失败背后的故事的。
+
-### Startup Failure Rate: Ultimate Report + Infographic [2020]
+
这篇文章来自同一个网站,可以算是2020的创业公司失败鉴赏报告。有一些数据还挺有意思的:
@@ -37,43 +37,47 @@ lang: "zh"
* 16%是资本原因:50%被采访的创业者没有预算,70%是自己出资,但是只有16%的创业失败是由于资本原因,所以资本的问题并不是那么严重的问题。
* 剩下10%是各种各样其他的原因。
+
-### We Hacked Apple for 3 Months: Here’s What We Found
+
Sam Curry介绍了他跟同事找到55个Apple漏洞的过程,其中详细地讲了12个漏洞的机制。[HackerNews的讨论](https://news.ycombinator.com/item?id=24718078&utm_term=comment)挺激烈的,但是有好多内容我都不太能看懂。但是作为一个有趣的计算机安全的个案研究,这个博客文章值得分享。
+
-### LEARNABLE PROGRAMMING
+
-Bret Victor很早的一篇关于可探索的编程的研究。跟着文章的不同演示走就能知道他想说什么,比如“光描述是不够的,要能够展示数据”。随着他的文章的推进,可以看到他设想的编程环境是如何将程序和直观体验通过不同的方法联系起来。这样的编程环境可以是非常厉害的教学工具,也可以是非常重要的codless开发环境的补充。但是要实现这个功能,背后的开发难度看起来也挺高的。Bret Victor其他的文章展示了他的各种“魔法”,可能这个开发难度对他来说就还好吧。
+Bret Victor很早的一篇关于可探索的编程的研究。跟着文章的不同演示走就能知道他想说什么,比如"光描述是不够的,要能够展示数据"。随着他的文章的推进,可以看到他设想的编程环境是如何将程序和直观体验通过不同的方法联系起来。这样的编程环境可以是非常厉害的教学工具,也可以是非常重要的codless开发环境的补充。但是要实现这个功能,背后的开发难度看起来也挺高的。Bret Victor其他的文章展示了他的各种"魔法",可能这个开发难度对他来说就还好吧。
不管怎么说,Bret Victor的文章都很推荐!
+
-### Git scraping: track changes over time by scraping to a Git repository
+
这是一个很有意思的文章,作者介绍如何用Github Action来自动爬网上的数据,更新自己仓库的信息。比如作者最近的例子就是用Github Action来自动更新加州山火的进展。懒惰是每一个懒惰的程序员追求自动化最大的动力。
+
## 网络学习
-
-### Low Level Academy
+
一系列基于Rust的网络底层编程教学。这个网站很有意思,每一个课程都只讲一个知识点,有代码部分,也有可视化的解释,讲得挺好懂的。不过课程出得比较慢。
这个课程的背后是用Rust+WebAssembly写的,也算是将来的趋势之一了。值得学习。
+
-### A List of Post-mortems!
+
来自各个公司的一系列验尸报告(Post-morterm)。验尸报告是在公司出现事故之后的总结报告,一般包括事故的时间线,事故的原因,事故的经验教训等。好的事故报告能够让读报告的人学到很多知识,也会帮助后来人避免曾经的错误。我很推荐大家没事的时候去读一读各种事故报告。
除了这个列表,还有好几个其他的列表也能找到过往的事故报告,比如[SRE Weekly](https://sreweekly.com/)每一期最后也有过去这一周的事故报告。
+
-### The Little Book of Python Anti-Patterns
-
+
这本网络书总结了Python代码六个方面的反面教材(反面模式,Anti-Pattern),这六个方面是
* 正确性:反面教材会导致代码错误。
@@ -85,12 +89,11 @@ Bret Victor很早的一篇关于可探索的编程的研究。跟着文章的不
但是这里面有一些建议是Python2的,不再适用与Python3了。虽说如此,里面的条目还是值得根据Python3再了解和学习一下的。
-## 工具、技术、展示
-
-
-### Bret Victor - Inventing on Principle
+
+## 工具、技术、展示
+
这个talk的前半段就像看一个魔法师在你面前展示他的魔法。不是魔术,而是魔法。后半段就像布道一样,分享他的人生哲学,和他尊敬的人的人生哲学,还比较inspiring。
@@ -100,34 +103,36 @@ Bret Victor很早的一篇关于可探索的编程的研究。跟着文章的不
>
> 创作者需要跟他们创作的成果之间有直接、即时的联系。
-Bret认为写代码不仅仅只是写代码,写代码应该是一个创作的过程。但是在“写代码”这样一个创作的过程中,有一个非常大的问题,就是写的代码与代码运行的结果之间存在巨大的隔阂。程序员写完代码以后,需要经过编译或者解释才能看到程序的结果。如果想要调试程序,还需要各种复杂的步骤。他觉得这是不可接受的,而且会极大地影响创作者的创作过程。
+Bret认为写代码不仅仅只是写代码,写代码应该是一个创作的过程。但是在"写代码"这样一个创作的过程中,有一个非常大的问题,就是写的代码与代码运行的结果之间存在巨大的隔阂。程序员写完代码以后,需要经过编译或者解释才能看到程序的结果。如果想要调试程序,还需要各种复杂的步骤。他觉得这是不可接受的,而且会极大地影响创作者的创作过程。
于是,他就写了一些软件来展示,如果打破这个隔阂,如果程序员能够在写代码的同时看到自己代码的运行结果,会有什么好处。他分享了一个绘画的javascript软件,一个制作动画的iOS软件,和其他几个互动软件。他的这些展示可以在他的主页上找到。虽然每一个展示都是一个proof of concept,但是看到这些展示的是以后,我确实会觉得:如果我们有一些通用的工具也具有这些功能那该多好。
非常推荐大家去他的[网站](http://worrydream.com/)去学习和尝试他制作的一些demo。
+
-### History of the Web
-
-
+
Speaker讲了一下互联网发展的过程和浏览器之战的历史,提到了微软的IE是如何逐渐拿下90%以上的浏览器市场份额,又是如何最后走向衰落的。Speaker提到一个很有意思的点:微软忙于操作系统的安全问题,忽视了浏览器平台的发展。后来对于浏览器的开发又只是把浏览器当作一个软件,提升了软件的体验,但是依然忽略了浏览器作为一个平台给广大的用户带来的改变。后来出现的移动平台也对整个网络平台的提出了新的要求。最后Speaker回到了谷歌的价值观来讨论Chrome的发展,还挺有意思的。
+
-### Let’s BUILD a COMPUTER in CONWAY's GAME of LIFE
+
教你怎么用Conway的生命游戏来制作最基本的逻辑元件,然后用这些逻辑元件构造一个虚拟计算机,然后用这个计算机实现一个Conway的生命游戏。这个跟上一期用Factorio构建一个Ray Casting的软件一样,都是不断递归的过程。看这个让我想起了Ricky and Morty某一集。
-## 工具技术
-
+
-### Puppeteer
+## 工具技术
+
浏览器自动化工具。我看到很多人用无头浏览器都会提到这个,但是还没有完全理解这个怎么用。[这里有个简单的介绍](https://www.jianshu.com/p/085e3de8596c)可以了解一下。
+
-### Github Action
-
+
这个是前面提到的Git Scraping中所使用的工具。目前Github提供了很多可以使用的Action,其他开发者也制作了很多Action放到市场上分享。至于Git Scraping,可以通过[git-scraping](https://github.com/topics/git-scraping)找到不少git scraping的案例。
+
+
diff --git a/apps/blog/content/periodics/digest-005.mdx b/apps/blog/content/periodics/digest-005.mdx
index be47120..a542d58 100644
--- a/apps/blog/content/periodics/digest-005.mdx
+++ b/apps/blog/content/periodics/digest-005.mdx
@@ -10,9 +10,7 @@ lang: "zh"
## 文章
-
-### Up and Down the Ladder of Abstraction
-
+
这个网页是上一期提到的Bret Victor的一个展示。这个网页通过具体的例子,展现了如何讲一个问题(利用算法控制汽车在路上自动驾驶)讲得透透彻彻。
@@ -20,9 +18,9 @@ lang: "zh"
这里也不必在细说了,直接去网站学习和感受吧。
+
-### This page is a truly naked, brutalist html quine.
-
+
这个网页挺有意思的,通过特殊的CSS技术,这个网页使得网页本身的所有标签都现实出来,不仅如此,网页的内容就是网页的代码,网页的代码就是网页的内容。这个东西在编程领域叫[Quine (computing)](https://en.wikipedia.org/wiki/Quine_(computing)),说的是一段程序,运行以后,输出的是这段程序本身。怎么理解呢?如果你写一个Hello World的程序,比如
@@ -39,46 +37,45 @@ eval(variable)
运行输出的结果会跟上面的代码一模一样。[这个网站](https://cs.lmu.edu/~ray/notes/quineprograms/)列举了不同语言的Quine小程序,有兴趣的可以去了解以下。
+
-
-### Hands-Free Coding
-
+
作者写了一个系统可以通过眼动和语音来编辑文本甚至是写代码。这个项目的大致思路是通过摄像头监控眼动,然后用语音识别系统将语音转换为文字,然后通过建立一套模式规则来将语言转换为程序命令。这个工作量还是挺大的,里面用的技术也很多,有一些是模式匹配,而有一些又是自然语言。仔细听了一下规则模式,感觉有点像Vim的按键操作语音化。现在工具包越来越多,语音识别的服务也越来越成熟,构建这样的应用也相对更加容易了。非常感谢作者制作了这样一个展示。将来这种语音界面会不会成为编程界面,这个很难说。但是语音界面确实给更多的人提供了与机器交互的更多可能性。
+
-### Slow Software
+
+这是一篇很不错的从用户体验的角度分析什么样的软件是"慢软件"。这也可以算是一个人类时间感知与计算机软件工程之间的交叉研究项目。一方面,这个研究是测量用户可以察觉到的延迟长度,比如100ms以上的延迟用户就很容易感受到,而10ms以下的延迟用户就可能感受不到,从而认为软件是"立即响应"的。
-这是一篇很不错的从用户体验的角度分析什么样的软件是“慢软件”。这也可以算是一个人类时间感知与计算机软件工程之间的交叉研究项目。一方面,这个研究是测量用户可以察觉到的延迟长度,比如100ms以上的延迟用户就很容易感受到,而10ms以下的延迟用户就可能感受不到,从而认为软件是“立即响应”的。
-
-文章的第一部分分析的是各种场景下,对用户而言,什么叫做“慢”。文章分析了触屏、键盘输入、鼠标点击、应用软件加载和运行等方面,不同延迟给用户的感受。基本上的结果是70ms左右的延迟,用户就会明显感觉机器有迟钝的感觉。这个70ms跟Google研究发现的100ms的阈值是比较接近的。
+文章的第一部分分析的是各种场景下,对用户而言,什么叫做"慢"。文章分析了触屏、键盘输入、鼠标点击、应用软件加载和运行等方面,不同延迟给用户的感受。基本上的结果是70ms左右的延迟,用户就会明显感觉机器有迟钝的感觉。这个70ms跟Google研究发现的100ms的阈值是比较接近的。
文章的第二部分分析的是延时到底来自哪里,然后讨论了底层硬件计算、输入输出端口的信号扫描频率、软件程序的机制和软件设计等方面是如何产生延迟的。这个讨论提供了一个挺全面的全栈(Full Stack)延时分析,值得学习。
最后,简而言之,100ms以上的延时就已经让用户觉得软件有点慢,反应迟钝。越长的延迟给用户带来越差的体验。
+
-### APIs as infrastructure: future-proofing Stripe with versioning
-
+
Stripe的这个技术文章很有意思,讲的是作为基础设施服务的提供者面临的一个重要问题:API的版本更新和老版本兼容的问题。API更新的一个简单办法就是提供新的API,然后维护老的API,并逐渐想办法淘汰老的API。但是总会有一些用户没有办法改他们的代码来更新API,而维护老API的成本会越来越高,所以需要找个方法来提供API的兼容性。Stripe这里用了类似OT的解决方法,将API不同版本之间的改变定义为一系列的操作改变(比如`id`的类型从`string`变成了`hash`),然后用特定的语言(DSL)来编码每一项改变(比如`Change::AccountTypes`)。这样,当一个用户使用老的API与系统交互的时候,系统可以先解析老的API版本号,然后实施一系列的操作改变,将老API的数据转换为当前最新的API的数据格式,然后交给服务器处理。处理完以后,又可以进行一系列的操作,把新API的格式转换为老API的格式,让用户可以使用数据。
这个设计API和更新API版本的思路真的挺有意思的。这篇文章激发了我对Stripe这个公司的兴趣。
-## 网络学习
+
+## 网络学习
-### An Introduction to Kolmogorov Complexity and Its Applications
-
+
据说这本书是关于Kolmogorov Complexity最全面的一本教材了。另外,[A Philosophical Treatise of Universal Induction](https://www.mdpi.com/1099-4300/13/6/1076)可以作为辅助读物。
-## 多媒体
-
+
-### LEADERSHIP LAB: The Craft of Writing Effectively
+## 多媒体
+
这个视频五星推荐🌟🌟🌟🌟🌟
@@ -86,10 +83,9 @@ Stripe的这个技术文章很有意思,讲的是作为基础设施服务的
俄亥俄州立大学把这个讲座的[PDF](https://cpb-us-w2.wpmucdn.com/u.osu.edu/dist/5/7046/files/2014/10/UnivChic_WritingProg-1grt232.pdf)材料放到了网上,大家可以下载学习一下。我非常推荐大家阅读这份资料和学习这个视频。同时,这个讲座还有一个类似的后续讲座([LEADERSHIP LAB: Writing Beyond the Academy 1.23.15](https://www.youtube.com/watch?v=aFwVf5a3pZM)),内容稍有重叠,但是也有不一样的地方,值得同时享用。
+
-
-### Leslie Lamport: Thinking Above the Code
-
+
这个Talk的主题实际上是如何使用Leslie发明的TLA+语言来确定所需要实现的程序的规格说明(Specification)。
@@ -100,11 +96,11 @@ Stripe的这个技术文章很有意思,讲的是作为基础设施服务的
**如何对程序进行建模**
有很多人把程序看作是一个函数,作为一个从输入到输出的映射。但是Leslie指出这个模型有很多问题。
-1. “函数”这个模型只能说明程序做什么,不能说明程序如何做。比如冒泡排序和快速排序可以看作是同样的函数,因为他们的输入输出是相同的,但是他们实际上在算法层面有很大的差别。这个差别就是“函数”这个模型无法表达的。
+1. "函数"这个模型只能说明程序做什么,不能说明程序如何做。比如冒泡排序和快速排序可以看作是同样的函数,因为他们的输入输出是相同的,但是他们实际上在算法层面有很大的差别。这个差别就是"函数"这个模型无法表达的。
2. 有很多程序并不存在输入和输出的映射
3. 有好多程序会永远运行下去。
-Leslie认为应该把程序看作一个“行为”的集合,而每一个行为是一系列的状态的转移。这个模型就能表达“函数”模型不能表达的那些语义。如何形式化地表达和定义这些行为呢?Leslie就因此创造了TLA+这个语言用来提供程序的规格。
+Leslie认为应该把程序看作一个"行为"的集合,而每一个行为是一系列的状态的转移。这个模型就能表达"函数"模型不能表达的那些语义。如何形式化地表达和定义这些行为呢?Leslie就因此创造了TLA+这个语言用来提供程序的规格。
**Think above the code**
@@ -112,16 +108,18 @@ Leslie认为应该把程序看作一个“行为”的集合,而每一个行
最后,Leslie在讲座中提到了用TLA+表述了快速排序的算法之后,可以很自然而然地找到非递归的实现方式。有机会应该试着实现以下。
-## 工具、技术、展示
-
+
-### World
+## 工具、技术、展示
+
上面文章里面说了HTML quine的展示,这里的World是Javascript的展示,代码本身就是代码所展示的内容,一个ASCII码的地球仪在转动。ame1k的[主页](https://aem1k.com)上有好几个非常有意思的Javascript代码,都值得去观赏一下。一方面这些代码算是奇技淫巧,另一方面也确实说明了作者的创造力。ame1k这哥们还做了一个[tixy.land](https://tixy.land/),仅用四个变量和各种代数运算,你可以看到各种各样的代数关系的可视化效果。最后你还可以自己尝试一下,写一些新的小函数,很有意思。
+
-### STRML.net的自我介绍
-
+
这个页面之所以推荐是因为这是另一个quine,整个首页从加载一个动态页面开始,这个页面显示的代码正好就是这个页面所显示的内容。一边看着代码加载,一边看着页面变化,一边看着作者的信息慢慢地展现出来,感觉很生动,就像一步一步慢慢深入了解作者一样。当然,为一个问题就是要等完整个网页需要花一点时间。
+
+
diff --git a/apps/blog/content/periodics/digest-006.mdx b/apps/blog/content/periodics/digest-006.mdx
index 187004b..6deeb57 100644
--- a/apps/blog/content/periodics/digest-006.mdx
+++ b/apps/blog/content/periodics/digest-006.mdx
@@ -10,10 +10,9 @@ lang: "zh"
## 文章
+
-### Type in the exact number of machines to proceed
-
-这篇文章让我很有启发。这篇文章说到的问题是Linux系统有很多命令行的交互界面。很多时候,命令行界面要求你确认信息的时候,可能只是要你输入一个”Y/N“,或者是按任意键继续。作者从自己多年的经验出发,指出输入简单的“Y/N”进行确认有时候是非常危险的事情,因为用户的粗心没看清楚信息就确认了。作者建议,在要求用户确认信息的时候,应该要求用户完整地输入信息本身的内容。比如
+这篇文章让我很有启发。这篇文章说到的问题是Linux系统有很多命令行的交互界面。很多时候,命令行界面要求你确认信息的时候,可能只是要你输入一个"Y/N",或者是按任意键继续。作者从自己多年的经验出发,指出输入简单的"Y/N"进行确认有时候是非常危险的事情,因为用户的粗心没看清楚信息就确认了。作者建议,在要求用户确认信息的时候,应该要求用户完整地输入信息本身的内容。比如
```bash
$ Blah blah blah 123,456 machines will be affected. Proceed?
@@ -28,11 +27,11 @@ $ Enter number of machines to confirm: 123456
$ OK! Continuing.
```
+
-### How to waste your career, one comfortable year at a time
-
+
-这篇文章的标题非常震撼,有给我当头一棒的感觉。具体内容其实主要是关于“什么情况下应该改变,不要再安于现状”的思考。
+这篇文章的标题非常震撼,有给我当头一棒的感觉。具体内容其实主要是关于"什么情况下应该改变,不要再安于现状"的思考。
作者先是说不要被自我满足和所谓对公司的忠诚而耽误了自己,并且用了两个很好的子标题:**自我满足是癌症**和**错放的忠诚**。关于自我满足,作者说安逸的生活会给人一种自我满足的错觉:喜欢现在朝九晚五的生活和工作环境,但这样可能就慢慢沉沦了。关于忠诚,作者说对自己忠诚才是忠诚,公司不过是考虑他们的业务。这两点对建立一个新的思维模型还是有作用的。
@@ -45,9 +44,9 @@ $ OK! Continuing.
那么,今天你考虑跳槽吗?
+
-### I was wrong. CRDTs are the future
-
+
这篇文章主要讨论的是实时协作(Realtime Collaboration)背后的技术问题。实时协作有很多例子,比如Google Docs这种多人在线共同写文章的应用。在疫情的影响下,多人在线的应用会有越来越大的市场,腾讯文档、石墨文档等等都在做类似的应用软件,做一这篇讨论还是挺有意思的。
@@ -57,13 +56,11 @@ $ OK! Continuing.
这两个算法的选择之间主要是功能、性能、和实现难度之间的比较。OT相对比较容易实现,而且额外负担比较少,也比较容易解决协作出现的冲突。CRDT一直就不是很容易实现,就算实现了性能也不是特别好。但是作者听了Martin的讲座以后自己用Rust写了一个,发现好像CRDT可以有比较高效的实现方法,所以他还是蛮看好CRDT的前景的。而且OT最终是需要一个中央服务器来控制算法的,而CRDT并不需要一个中央机构来管理。
+
+
-### The SaaS Website Content You Need to Close Sales [Data]
-
-
-
-这篇文章有点意思。主要的方法就是分享Google搜索关键字然后来“猜测”用户在寻找Saas产品的时候最关注哪些问题。感觉他好像是根据自己的经验事先确定的关键字,然后把关键字分为“售前关注信息”和“售后关注信息”,然后统计“品牌+关键字”在Google搜索得到的结果。这个研究方法还是写得很清晰的。
+这篇文章有点意思。主要的方法就是分享Google搜索关键字然后来"猜测"用户在寻找Saas产品的时候最关注哪些问题。感觉他好像是根据自己的经验事先确定的关键字,然后把关键字分为"售前关注信息"和"售后关注信息",然后统计"品牌+关键字"在Google搜索得到的结果。这个研究方法还是写得很清晰的。
根据作者的分析,一个好的SaaS网站应该有如下的内容:
@@ -79,11 +76,11 @@ $ OK! Continuing.
如果你对你的产品网站完全没有想法,倒是可以看看这个文章来获得一些建站的思路。不过老实说,整个文章分析读下来,我觉得现在互联网卖床的网站(比如Casper,Tufts & Needle)倒是非常符合他的数据分析。所以看来这不仅仅是SaaS服务建站思路。
-## 网络学习
-
+
-### Fast load times
+## 网络学习
+
这个系列讲的是如何提高网站的性能,包括如何测量和理解网站的性能,以及各种提高性能的技术。
@@ -91,23 +88,26 @@ $ OK! Continuing.
* [Response Times: The 3 Important Limits](https://www.nngroup.com/articles/response-times-3-important-limits/)
* [Powers of 10: Time Scales in User Experience](https://www.nngroup.com/articles/powers-of-10-time-scales-in-ux/)
-## 多媒体
-
+
-### Cloud Spanner 101: Google's mission-critical relational database (Google Cloud Next '17)
+## 多媒体
+
Google Spanner数据库的技术讲座。这个讲座讲得挺好的,从背景问题到解决方案,每一个过度都讲得挺不错的。有时间的时候还是要继续看几遍。
+
-### The Chubby lock service for loosely-coupled distributed systems
-
+
一个关于Google Chubby服务的技术讲座。有时间的时候还是要继续认真再看几遍。
-## 工具、技术、展示
+
+## 工具、技术、展示
-### Microsoft TileCode
+
微软设计了一个手掌机游戏制作器。大家可以用这个小软件来制作一些规则简单的小游戏,然后在一些小的手掌机上玩。我发现这个仓库提到的手掌机真的是各种各样,还挺神奇的。他们还就这个主题写了篇[论文](https://www.microsoft.com/en-us/research/uploads/prod/2020/08/paperFinal.pdf),有时间可以读一读。
+
+
diff --git a/apps/blog/content/periodics/digest-007.mdx b/apps/blog/content/periodics/digest-007.mdx
index b896fff..2303433 100644
--- a/apps/blog/content/periodics/digest-007.mdx
+++ b/apps/blog/content/periodics/digest-007.mdx
@@ -10,17 +10,15 @@ lang: "zh"
## 文章
-
-### How Facebook is bringing QUIC to billions
-
-
+
Facebook撰文介绍他们在全面推广使用[QUIC](https://quicwg.org/)作为网络连接方式,用来取代TCP为基础的连接方式,从HTTP2迈向HTTP3。他们花了大篇幅介绍这个迁移项目的影响。我连TCP/IP都还没有完全搞明白,现在看来又要学新的东西了。
另外,Facebook也写了一个自己的QUIC实现:[mvfst](https://github.com/facebookincubator/mvfst)。
+
-### "AI pioneer Geoff Hinton: “Deep learning is going to be able to do everything”
+
这篇最近对于Geoff Hinton的采访回顾了一下Hinton复兴这次神经网络的旅程,聊了一下他走上这条路的历史,以及他对于联接主义的信念。采访中问到了几个问题,Geoff Hinton的回答挺值得思考的。
@@ -34,58 +32,61 @@ Facebook撰文介绍他们在全面推广使用[QUIC](https://quicwg.org/)作为
另外一个很有意思的回答是Geoff Hinton提到Stephen Kosslyn和Jerry Fodor/Zenon Pylyshyn之间关于visual image的辩论:
-* Kosslyn: when you manipulate visual images in your mind, what you have is an array of pixels and you’re moving them around.
-* Fodor/Pylyshyn: visual image is hierarchical, structural descriptions. You have a symbolic structure in your mind, and that’s what you’re manipulating.
+* Kosslyn: when you manipulate visual images in your mind, what you have is an array of pixels and you're moving them around.
+* Fodor/Pylyshyn: visual image is hierarchical, structural descriptions. You have a symbolic structure in your mind, and that's what you're manipulating.
然后Geoff Hinton认为这两派都是错的:
-* Kosslyn: thought we manipulated pixels because external images are made of pixels, and that’s a representation we understand.
-* Fodor/Pylyshyn: thought we manipulated symbols because we also represent things in symbols, and that’s a representation we understand.
-* Hinton认为:I think that’s equally wrong. What’s inside the brain is these big vectors of neural activity.
+* Kosslyn: thought we manipulated pixels because external images are made of pixels, and that's a representation we understand.
+* Fodor/Pylyshyn: thought we manipulated symbols because we also represent things in symbols, and that's a representation we understand.
+* Hinton认为:I think that's equally wrong. What's inside the brain is these big vectors of neural activity.
这个观点真的非常有意思。
+
-### I Hate Coordinate Systems!
-
-
+
这个网页很有意思,讲得是地理空间研究中的坐标系统有多么复杂。整个页面是以不同的问题来组织信息的,问题从浅入深,层层递进,以问答的方式介绍了地理空间系统的一些计算和矫正数据的方法。
+
-### Text layout is a loose hierarchy of segmentation
-
+
这篇文章讲了一下计算机的文字排版问题。文字排版是计算机视觉界面中最重要的一部分,这个问题真的是非常复杂。从段落分析,到段落中的文字呈现方向,到字符确认,到字体渲染,到最后呈现,每一步都可能出错,每一步都需要适应不同国家不同文化的排版需求。 文字段落的方向确认本身就是一个很有趣的问题,[W3C有一篇比较好的讲解文章](https://www.w3.org/International/articles/inline-bidi-markup/uba-basics)。另外,[这篇关于Linux文字渲染的短文](https://mrandri19.github.io/2019/07/24/modern-text-rendering-linux-overview.html)把整个渲染的步骤比较简介明了地展现了出来,对文章的阅读也很有帮助。
另外,这篇[Text Rendering Hates You](https://gankra.github.io/blah/text-hates-you/)也是一篇蛮有意思的小文章的。
-## 网络学习
-
+
-### Git from the Bottom Up
+## 网络学习
+
这是一本关于Git的短小的教程,主要就是三个大的章节,整个阅读下来可能就是2个小时左右。
+
-### Visualizing Git Concepts with D3
+
这是另外一个学习Git的小工具,利用了一些可视化/可探索化的方式来呈现了Git的各种命令背后发生的事情。我觉得这里最值得学习的应该是作者如何用D3来实现了整个教程。很棒的Explorable Explanation的例子。
+
-### Foundations of Software Engineering
+
这是一个软件工程的课程,而不是具体的某种技术、某种程序语言、或者某种研究领域的课程。里面讨论的内容有一些跟技术有关,有一些是一些软件工程项目开发实践上的问题,我觉得可以结合Google的软件工程那本书一起来看。
-## 多媒体
+
+## 多媒体
-### Juice it or lose it
+
-这是一个2012年的视频,两个主讲通过一个简单的弹球游戏,展示了如何用一些简单的效果,使得整个游戏生动起来,更加“juicy”。这是一个非常好玩的视频,花20分钟看完这个视频非常值得。每一个功能都挺简单的,但是放到一起就非常炫酷了。[另一个源](https://www.gdcvault.com/play/1016487/Juice-It-or-Lose)
+这是一个2012年的视频,两个主讲通过一个简单的弹球游戏,展示了如何用一些简单的效果,使得整个游戏生动起来,更加"juicy"。这是一个非常好玩的视频,花20分钟看完这个视频非常值得。每一个功能都挺简单的,但是放到一起就非常炫酷了。[另一个源](https://www.gdcvault.com/play/1016487/Juice-It-or-Lose)
+
-### The Unreasonable Effectiveness of Multiple Dispatch
+
[Multi-dispatch](https://en.wikipedia.org/wiki/Multiple_dispatch)会根据运行时的实参类型来选择对应的函数。这个视频讲了一下Multiple Dispatch是怎么使得下面两件事情变得容易的:
1. Define **new type** for **existing operations**.
@@ -96,14 +97,18 @@ Multiple Dispatch这个概念还挺陌生的,而且好像C++确实没有办法
Eli Bendersky的博客上有关于不同语言的Multiple Dispatch的一系列文章([1](https://eli.thegreenplace.net/2016/a-polyglots-guide-to-multiple-dispatch/), [2](https://eli.thegreenplace.net/2016/a-polyglots-guide-to-multiple-dispatch-part-2/), [3](https://eli.thegreenplace.net/2016/a-polyglots-guide-to-multiple-dispatch-part-3/), [4](https://eli.thegreenplace.net/2016/a-polyglots-guide-to-multiple-dispatch-part-4/))
-## 工具、技术、展示
+
+## 工具、技术、展示
-### Raspberry Pi 400: the $70 desktop PC
+
-树莓派400已经可以支撑起整个“台式机”形态了!主要的计算单元被放在了键盘背后,然后可以驱动鼠标键盘,还可以接外接显示器,看起来非常不错!
+树莓派400已经可以支撑起整个"台式机"形态了!主要的计算单元被放在了键盘背后,然后可以驱动鼠标键盘,还可以接外接显示器,看起来非常不错!
+
-### Screen space refraction through depth peeling in threejs
+
这是一个用[Three.js](https://threejs.org/)直接写的一个3D渲染效果,真的非常好看!在[live demo](https://domenicobrz.github.io/webgl/projects/SSRefractionDepthPeeling/)上你还可以自己手动调试各种参数来实时观察不同参数如何影响渲染的效果。其实程序也不是很长。
+
+
diff --git a/apps/blog/content/periodics/digest-008.mdx b/apps/blog/content/periodics/digest-008.mdx
index f4463a9..c8641de 100644
--- a/apps/blog/content/periodics/digest-008.mdx
+++ b/apps/blog/content/periodics/digest-008.mdx
@@ -10,28 +10,29 @@ lang: "zh"
## 文章
-
-### I sold Baremetrics
+
Josh Pigford分享了他决定卖掉Baremetrics这个公司的决定。虽然我第一次知道这个公司,但是整个文章把这个决定的过程说得很清楚,很透明。作为局外人,我还是很感谢有人把这个写出来的。整个公司10个人,1000多个用户,售价4百万美元,创始人可以拿走370万美元,剩下30万分给了9个员工,而早期投资了80万的投资人决定一分钱都不要。这个结果我感觉还是有点惊讶的。一方面是投资人竟然连本都不要了,另一方面是员工竟然拿了不到一个零头。当然,因为整个公司经营到七年都只有10个人,有可能整个业务开始的很多年都是Josh Pigford一个人在运营。
为啥要卖掉这个公司呢?因为Josh觉得自己的工作太多的是管理,而不是创造;但是他希望花时间来创造新的事物,而不是去管理。所以,他就直接卖掉这个公司,让别人去经营管理了。我觉得,如果只是想赚点小钱,想创造一点东西,并且换时间精力尽量做好,世界上还是有挺多机会的。
+
-### Readme Driven Development
+
-这篇文章很有意思,提出的观点是:开发软件之前,先写你的README文件。注意,这里不是写一大摞的设计文档,而是只写一个README文件。这是在“完全没有技术文档”和“太多技术文档”之间找个折中点。这个README文件对你要解决的问题和你的解决方案有简洁扼要的总结,然后你可以继续去做Test-Driven Development或者其他Agile Development。在你写程序的时候,README文件可以用来指导你开发的方向和划清你开发的界限。
+这篇文章很有意思,提出的观点是:开发软件之前,先写你的README文件。注意,这里不是写一大摞的设计文档,而是只写一个README文件。这是在"完全没有技术文档"和"太多技术文档"之间找个折中点。这个README文件对你要解决的问题和你的解决方案有简洁扼要的总结,然后你可以继续去做Test-Driven Development或者其他Agile Development。在你写程序的时候,README文件可以用来指导你开发的方向和划清你开发的界限。
> A perfect implementation of the wrong specification is worthless. By the same principle a beautifully crafted library with no documentation is also damn near worthless.
+
-### The Log: What every software engineer should know about real-time data's unifying abstraction
+
这是一篇2013年的技术文章,讲述了分布式系统的各个组成成分中的Log怎么处理。文章实在是太长了,没有看完,之后再找时间继续读吧。
+
-### Why Life Can’t Be Simpler
-
+
这篇文章分析了一下生活中各种设计的复杂性的来源。有两个概念非常有意思:
@@ -48,9 +49,9 @@ Josh Pigford分享了他决定卖掉Baremetrics这个公司的决定。虽然我
3. 产品和服务的好坏取决于出现问题时候的体验,而不是运行正常是的体验。
4. 设计者要想清楚可以给用户对事物在哪个层面上的操控力,以及用户如何影响事物本身。
+
-### Orange You Accessible? A Mini Case Study on Color Ratio
-
+
这篇文章讲了一下互联网无障碍设计(accessibility design)的一些问题。作者从一对例子出发,讨论到底什么对比度更容易看到:在橙色背景上的黑色字体,还是在橙色背景上的白色字体。
@@ -58,12 +59,11 @@ Josh Pigford分享了他决定卖掉Baremetrics这个公司的决定。虽然我
现在有的Web Content Accessibility Guidelines (WCAG)指南推荐了一些标准,比如AA标准规定字体和背景的对比度(contrast ratio)要在3到4.5之间,而AAA标准规定字体和背景的对比度要在4.5到7之间。如果直接根据物理计算的话,橙色背景上的黑色字体的对比度更高,所以根据标准来说更值得推荐。但是作者根据自己的体验和找来的一些被试的反馈来看,大多数都觉得橙色背景上白色更清晰可见。所以,这篇文章的问题就是到底应该以什么标准来设计?现有的规定和对比度计算方式是否合适?
-## 网络学习
+
+## 网络学习
-
-### awk: `BEGIN { ...`
-
+
这是一个关于Awk语言的简单教程,其实氛围[awk: `BEGIN { ...`](https://jemma.dev/blog/awk-part-1)和[awk: `END { ...`](https://jemma.dev/blog/awk-part-2)两个部分。这个简单的教程是受到他人的激励说人们可以花两个小时就读完[awk语言手册](https://www.gnu.org/software/gawk/manual/gawk.html),然后就完全知道awk这个小语言怎么用了。然后作者就试着花时间去学了Awk这门小语言,虽然用的时间超过了2个小时,但是确实学会了不少。通过这两篇博客的介绍,感觉awk这个小语言结构确实挺简单的,因为它是一个用来进行文本加工和数据提取的DSL(Domain-Specific Language)。虽然我看了以后还是觉得我可能会更偏向用Python写个小程序,而不是用一两行的Awk来解决。
@@ -73,17 +73,17 @@ Josh Pigford分享了他决定卖掉Baremetrics这个公司的决定。虽然我
另外,这篇[Awk in 20 Minutes](https://ferd.ca/awk-in-20-minutes.html)也是一篇很不错的关于Awk的入门讲解文章,可以结合一起来看。
+
-### Let’s build a video card!
-
+
Ben Eater的显卡教程系列,一共三个视频,每个在30分钟左右。你可以选择从他那里买组合套件,也可以自己去找相关的组合套件。Ben Eater录了好几个非常精良的项目,都非常值得看(虽然我还没有看完)。
-## 多媒体
-
+
-### Joe Armstrong & Alan Kay - Joe Armstrong interviews Alan Kay
+## 多媒体
+
这是个还不错的对话,尤其是前面30分钟Alan Kay在诉说计算的历史的时候,有很多很好的材料,推荐了很多好的论文和书籍。后面的对话就……听听就好。
@@ -91,12 +91,12 @@ Alan Kay说到过一句话,跟我几年前的体验很相似:
> In a "real" computer science the best languages of an era should serve as the "assembly code" for the next generation of expression!
+
## 工具、技术、展示
-
-### Software Library: MS-DOS Games
-
+
这个网页收录了7000多个MS-DOS时代的游戏,都可以玩!真是充满了童年的回忆!
+
diff --git a/apps/blog/content/periodics/digest-009.mdx b/apps/blog/content/periodics/digest-009.mdx
index cc06996..c8cb857 100644
--- a/apps/blog/content/periodics/digest-009.mdx
+++ b/apps/blog/content/periodics/digest-009.mdx
@@ -10,9 +10,7 @@ lang: "zh"
## 文章
-
-### End Micromanagement: 6 Signs You’re a Micromanager (And What to Do Instead)
-
+
Micromanagement就是作为经理,对员工什么鸡毛蒜皮的小事都要管一管。这篇文章讲了几个常见的micromanagement的表现:
@@ -25,54 +23,57 @@ Micromanagement就是作为经理,对员工什么鸡毛蒜皮的小事都要
这些micromanagement既不利于提高员工的能力,也不利于建立与员工之间的信任关系。好的经理应该帮助员工成长,并且逐渐放手让员工完成更重要的事情,这样可以把自己从事事躬亲的黑洞中解救出来,也可以让自己有更多的时间思考更大更广的问题。这个文章后半部分提供的解决方法,在思路上可以了解一下,但是具体的工具和实践上就不用买他们打的广告了。
+
-### Human Brain Project Mediation Report
+
+这个报告应该翻译为《人类脑计划仲裁报告》,是2015年对欧洲脑计划的一次仲裁的总结报告。欧洲脑计划从2013年开始,一开始由领导苏黎世理工的蓝脑计划(Blue Brain Project)的Henry Markram担任整个项目的主要领导。这个项目开始是以"用超级计算机模拟全脑神经元"的方向开展的,整个思路非常的自底向上,数据驱动。Henry Markram的思路是如果我们可以模拟全脑神经元的活动,我们就可以从中获得关于大脑的大量知识和数据,也可以逐渐理解从大脑中涌现出来的智能和意识是怎么回事。后来,在2014年左右,项目进展到下一阶段,结果项目领导直接把认知和系统神经科学的研究项目从整个大项目里面剔除了。这一下引来了欧洲神经科学界极大的反对。很快,由Zach Mainen牵头,近800名神经科学家签署了一封公开信,认为欧洲脑计划已经走上了歧途,呼吁欧洲挡雨对整个计划重新审核,同时呼吁广大神经科学家抵制当时的人脑计划的规划。在这一风波下,独立调查组对欧洲脑计划进行了评估,然后发布了这份《人类脑计划仲裁报告》。
-这个报告应该翻译为《人类脑计划仲裁报告》,是2015年对欧洲脑计划的一次仲裁的总结报告。欧洲脑计划从2013年开始,一开始由领导苏黎世理工的蓝脑计划(Blue Brain Project)的Henry Markram担任整个项目的主要领导。这个项目开始是以“用超级计算机模拟全脑神经元”的方向开展的,整个思路非常的自底向上,数据驱动。Henry Markram的思路是如果我们可以模拟全脑神经元的活动,我们就可以从中获得关于大脑的大量知识和数据,也可以逐渐理解从大脑中涌现出来的智能和意识是怎么回事。后来,在2014年左右,项目进展到下一阶段,结果项目领导直接把认知和系统神经科学的研究项目从整个大项目里面剔除了。这一下引来了欧洲神经科学界极大的反对。很快,由Zach Mainen牵头,近800名神经科学家签署了一封公开信,认为欧洲脑计划已经走上了歧途,呼吁欧洲挡雨对整个计划重新审核,同时呼吁广大神经科学家抵制当时的人脑计划的规划。在这一风波下,独立调查组对欧洲脑计划进行了评估,然后发布了这份《人类脑计划仲裁报告》。
-
-阅读这篇仲裁报告确实能够看到不同的人对于“大脑研究应该如何进行”这个问题有很不一样的看法。不同的人的研究背景、研究哲学、研究取向和研究方式都非常不同,数据驱动与假设驱动之间的矛盾还挺明显的。但是,作为一个为期十年,每年拨款1亿欧元的跨国研究项目,确实应该开设多元化的研究项目来吸引不同领域的人才。如果领导者主观意愿太强烈,认为脑科学就应该用某种特定的方式实现,确实不适合这样的跨国跨领域的研究项目。如果只是某个学校或者某个国家单一的研究项目,或许勉强可行。
+阅读这篇仲裁报告确实能够看到不同的人对于"大脑研究应该如何进行"这个问题有很不一样的看法。不同的人的研究背景、研究哲学、研究取向和研究方式都非常不同,数据驱动与假设驱动之间的矛盾还挺明显的。但是,作为一个为期十年,每年拨款1亿欧元的跨国研究项目,确实应该开设多元化的研究项目来吸引不同领域的人才。如果领导者主观意愿太强烈,认为脑科学就应该用某种特定的方式实现,确实不适合这样的跨国跨领域的研究项目。如果只是某个学校或者某个国家单一的研究项目,或许勉强可行。
美国在2015年也提出了美国自己的脑计划,中国也一直在说自己的脑计划。美国的脑计划报告我倒是找到了,[这份146页的报告](https://braininitiative.nih.gov/sites/default/files/pdfs/brain2025_508c.pdf)描绘了整个计划的愿景。但是中国的脑计划报告我一直没有找到具体的报告,可能还是得多做一些功课。
-## 招股书
-
-最近有好几个“独角兽”公司上交了S-1表格,为上市作准备。Hackernews上讨论了4家公司,这里也记录一下,也通过讨论好好学习一下应该怎么评价和研究一个公司。我也是第一次知道哪里可以找到招股书看。不过说起来,招股书还真的长啊,动不动就是几百页。
+
+## 招股书
-### Airbnb S-1表(招股书)
+最近有好几个"独角兽"公司上交了S-1表格,为上市作准备。Hackernews上讨论了4家公司,这里也记录一下,也通过讨论好好学习一下应该怎么评价和研究一个公司。我也是第一次知道哪里可以找到招股书看。不过说起来,招股书还真的长啊,动不动就是几百页。
+
[HackerNews的讨论](https://news.ycombinator.com/item?id=25117362&utm_term=comment)
Airbnb是我一直都很喜欢的一个公司,因为我一直在用Airbnb来安排我的旅行住处。但是,我身边也有很多人不喜欢Airbnb这种模式,因为他们更信任酒店。Covid疫情肯定是对Airbnb造成了严重的打击的,据说股价估值直接腰斩了。但是,我个人还是相信,或者说我希望,Airbnb在接下来的岁月里能够越来越好。招股书里面似乎重点提到了Airbnb的中国业务,但是Airbnb中国的业务到底能不能行,现在还是一个未知数。
+
-### DoorDash S-1表(招股书)
+
[HackerNews的讨论](https://news.ycombinator.com/item?id=25082043&utm_term=comment)
DoorDash是外卖服务。在Covid的疫情下,很多人的一日三餐都是靠外卖来解决。外卖平台在餐厅和食客之间搭建了一个重要的桥梁,帮双方的生活都提供了帮助。当然,这样的帮助也不是免费的,DoorDash在提供服务的同时,也收取相应的服务费。但是大家逐渐也发现,平台的溢价很高。从食客的角度看来,平时在餐馆5块能买到的一道菜,到了DoorDash上要卖8块。从餐馆的角度看来,外卖平台收取手续费非常高,也降低了他们到手的收入。即使如此,还是有很多的人需要使用DoorDash这样的平台,因为只有在这种很多人都是用的平台上,食客才有更多的用餐选择,而餐厅才能找到更多的食客来订餐。当然,要说外卖跑腿的业务,那还是得多学学国内。
+
-### Roblox S-1表(招股书)
+
[HackerNews的讨论](https://news.ycombinator.com/item?id=25154995&utm_term=comment)
这个公司我去年去CppCon的时候第一次听说。整个公司应该说是一个面向小孩子的游戏平台。虽然游戏看起来很幼稚,有时候制作得也很粗糙,但是当时就听说很多很多小朋友在玩上面的游戏。HackerNews的讨论也证实了这一点。有人说自己是玩Roblox长大的,这足以说明Roblox这个平台的影响。从整个讨论的数据看来,似乎是学龄前儿童和小学生为主要受众。而且很多人说他们的孩子一玩能玩一天。开发者防霾呢,据说在上面写游戏的开发者也可以挣到不少钱。平台方面,不但游戏的制作与消费之间形成了一个交易市场,制作游戏的素材的制作与消费之间也形成了一个交易市场,再加上广告收入,平台方面还是可以有不错的收益的。
+
-### Affirm S-1表(招股书)
+
[HackerNews的讨论](https://news.ycombinator.com/item?id=25143334&utm_term=comment)
Affirm向客户提供分期付款的服务。在客户向商家购买物品的时候,客户可以选择向Affirm申请分期付款,Affirm会根据客户的信用记录决定向客户提供多大额度的分期付款,以及分期付款的利息。有一些商家会帮客户把利息付了,所以客户在他们那里购物的时候就可以享受0利息的分期付款。整个业务大概就是这个样子。有趣的是,Affirm有30%的业务来自于Peloton这个公司。Peloton是一个生产健身器械的公司,他们目前最畅销的商品是室内健身单车,一个卖到2000刀以上。这款单车非常规,但是在美国卖的非常好,在Covid期间一直供不应求。一款二手的Peloton也能卖到很高的价格。Peloton的业务增长反过来又帮助了Affirm的业务增长。除了Peloton以外,Affirm还在积极地扩张业务,尤其是新兴的网络商家,有很多都在跟他们合作,为客户提供更多的支付选择。HackerNews上很多人还蛮看好这个公司的,可能是因为模式比较容易懂?
+
## 网络学习
-
-### The Rust Performance Book
+
一本关于Rust性能的总结。作者写了[一系列关于Rust性能的博客文章](https://blog.mozilla.org/nnethercote/2020/09/08/how-to-speed-up-the-rust-compiler-one-last-time/),HackerNews上网友推荐都挺值得一读的。
@@ -85,32 +86,34 @@ Affirm向客户提供分期付款的服务。在客户向商家购买物品的
* Rustonomicon: https://doc.rust-lang.org/beta/nomicon/index.html
* Cargo Book: https://doc.rust-lang.org/cargo
+
-### Digital sound processing tutorial for the braindead!
-
+
一个数字声音信号加工的小短文。里面的图都是用ASCII Art画的,也算是灵魂画手了;其实画的还挺好的。文章里面提到了声音的采样,到不同的滤波器,到各种基本的信号处理算法。
-## 多媒体
-
+
-### 2020 PHOTOMICROGRAPHY COMPETITION
+## 多媒体
+
尼康举办的光学显微镜摄影大赛,确实是科学与艺术的结合。[这个比赛](https://www.nikonsmallworld.com/galleries/photomicrography-competition)从1975年开始举办,到今年已经举办45年了。回顾往期的得奖作品,真的是既赏心悦目,又增长知识。这里贴一张小丑鱼的胚胎发育图([2020的第二名](https://www.nikonsmallworld.com/galleries/2020-photomicrography-competition/embryonic-development-of-a-clownfish-amphiprion-percula-on-days-1-3-morning-and-evening-5-and-9)),图片中是小丑鱼胚胎在第1、3(早、晚)、5、9天的发育情况。

-## 工具、技术、展示
-
+
-### Drumbit
+## 工具、技术、展示
+
这是一个可以模拟打击乐的网络玩具。真的还挺好玩的!我随便试了一些设计,当节奏起来以后,听起来还挺带感的。
+
-### quiver
-
+
varkor在[这篇文章](https://varkor.github.io/blog/2020/11/25/announcing-quiver.html)里介绍了Quiver这款工具的开发背景、使用方法、和一些实现上的考虑。这个工具看起来蛮有意思的,我直接能想到的是可以用来表示线性代数之间的转换关系。原作者似乎更多的是考虑表达范畴论(Category Theory)里面的内容。
+
+
diff --git a/apps/blog/content/periodics/digest-010.mdx b/apps/blog/content/periodics/digest-010.mdx
index 39f84bf..e5708fd 100644
--- a/apps/blog/content/periodics/digest-010.mdx
+++ b/apps/blog/content/periodics/digest-010.mdx
@@ -10,15 +10,13 @@ lang: "zh"
## 文章
-
-### Eight years at Roblox
-
+
作者介绍了他在Roblox工作八年的经历和大大小小的各种项目。从作者的项目可以看出一部分Roblox系统的演化的过程,以及Roblox一直遇到的挑战,比如外挂、性能要求、和底层引擎的改变。 HackerNews关于这篇文章的讨论也挺有意思的,其中好几个家长提到自己2-4岁的小孩都在玩Roblox,还有几个人说10岁以下的小孩几乎都知道Roblox。这个信息跟之前关于Roblox上市的讨论中提到的信息是很相似的。看起来Roblox还是蛮有前途的。
+
-### Building Your Color Palette
-
+
[Refactoring UI](https://refactoringui.com/)有一些列关于UI设计的好文章,文章讲整个配色系统分为几个部分:
1. 中性/灰色系列 (Neutral / Grey color):文字,背景等的用色,需要8-10个灰阶
@@ -27,21 +25,18 @@ lang: "zh"
现在各种CSS的框架都会有自己的基本配色系列,这些配色系列也都是基本根据上面的分类来设计的,所以这个设计方案可以当作是一个比较好的起步。当然,最终的设计还是需要根据自己的审美来调整。
+
-
-### Ontology, graphs and turtles - Part I
-
-
+
这个文章系列有三部曲,可以看作是知识图谱的一个入门文章。文章还以Wikipedia为例子说明了知识图谱是如何使用和工作的。
1. [Ontology, graphs and turtles - Part I](https://blog.owulveryck.info/2020/11/13/ontology-graphs-and-turtles-part-i.html)
2. [Ontology, graphs and turtles - Part II](https://blog.owulveryck.info/2020/11/17/ontology-graphs-and-turtles-part-ii.html)
3. [Ontology, graphs and turtles - Part III](https://blog.owulveryck.info/2020/11/20/ontology-graphs-and-turtles-part-iii.html)
+
-
-### 1.5 is the midpoint between 0 and infinity in Ruby
-
+
这篇文章挺有意思的:如果你在Ruby里面把两个端点设为0和浮点数无穷大(`Float::INFINITY`),那么你做二分查找的第一步,会找到`1.5`这个数作为二分的中点。这背后涉及到问题是计算机的浮点数的表征方式,HackerNews的讨论建议一下两篇文章必读
* [What Every Computer Scientist Should Know About Floating-Point Arithmetic](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
@@ -49,51 +44,49 @@ lang: "zh"
另外这篇[Stern-Brocot Tree](https://www.cut-the-knot.org/blue/Stern.shtml)也跟这里提到的问题相关。
+
-
-### The Code That Controls Your Money
-
+
COBOL是一门已经超过50岁的程序语言。它在信息时代的初期非常流行,也成为了美国金融体系中最重要的组成成分之一——几乎现在每一笔金融交易都涉及到一些COBOL程序段。然而,现在懂得COBOL这门程序语言的人也已经60多岁了,年轻的程序员几乎没有学过COBOL的,更别提对COBOL的代码库比较熟悉的。所以现在大量的COBOL代码库没有人维护。虽然已有的COBOL代码非常稳定,也非常快速(毕竟是经过了几十年的优化),但同时也没有人敢轻易修改这些代码,因为一修改可能就会出错,而且还不知道错在哪里,更别提往代码库里面添加新的功能。
-这篇文章详细地描述了北美COBOL代码库目前的困境,比如人才的流失、代码迁移和更新的障碍等等。如果现在学COBOL,可能会是一件能够获得铁饭碗的活,但是这个铁饭碗也可能没有任何创新,只是“无聊地”维护已经有的代码。比如文中一位程序员写了30年COBEOL,85%的工作都是在维护已有的代码。文中另外一个有趣的例子是说程序员为了修补千年虫的BUG,提前两年半开始更新代码库。最后,也还是没有真正“修复”千年虫的问题,而是设置了一个期限:如果表示年分的两位数小于45,那就认为是21世纪(比如`44`表示2044年),如果大于45,那就是20世纪(比如`85`表示1985年)。那等到2045年,看我们需要多少人来再修复这个bug吧。
+这篇文章详细地描述了北美COBOL代码库目前的困境,比如人才的流失、代码迁移和更新的障碍等等。如果现在学COBOL,可能会是一件能够获得铁饭碗的活,但是这个铁饭碗也可能没有任何创新,只是"无聊地"维护已经有的代码。比如文中一位程序员写了30年COBEOL,85%的工作都是在维护已有的代码。文中另外一个有趣的例子是说程序员为了修补千年虫的BUG,提前两年半开始更新代码库。最后,也还是没有真正"修复"千年虫的问题,而是设置了一个期限:如果表示年分的两位数小于45,那就认为是21世纪(比如`44`表示2044年),如果大于45,那就是20世纪(比如`85`表示1985年)。那等到2045年,看我们需要多少人来再修复这个bug吧。
COBOL,跟英制单位(英寸、英尺)和陈旧的基础设施一样,都是美国这个历史最悠久的现代国家的的印记。祖传代码库的维护和更新,也一直是软件工程里面一个重要的问题。今天的C++/Java代码库,也可能成为明天的COBOL。
+
-### The Purpose Of Writing
-
+
这篇文章主要的观点是:写文章是为了让自己的思维更清晰,也是为了让别人能够给你的想法提意见,从而让你的思维更完整。之前看过一个视频,说写文章是为了让读者获得更有价值的知识。不同的写作目的,写出来的文章会是很不一样的。
-## 网络学习
-
-
-### lisp公案
+
+## 网络学习
+
-设计某个程序语言的“公案(koans)”,并用这个“公案”来帮助程序语言的学习,这个想法是从Ruby Koans开始的,来源是禅宗用一段公案(一段言行或者一个小故事)来帮助参禅者开悟。我在我看到的各种语言的实现方面似乎是通过一系列短小的、精心设计好的单元测试来帮助语言学习者了解各种语言属性。这个想法和方式都还挺有趣的,而且我从自己的经历也体会到从单元测试来学习语言属性或者工具库是一个非常不错的方法。
+设计某个程序语言的"公案(koans)",并用这个"公案"来帮助程序语言的学习,这个想法是从Ruby Koans开始的,来源是禅宗用一段公案(一段言行或者一个小故事)来帮助参禅者开悟。我在我看到的各种语言的实现方面似乎是通过一系列短小的、精心设计好的单元测试来帮助语言学习者了解各种语言属性。这个想法和方式都还挺有趣的,而且我从自己的经历也体会到从单元测试来学习语言属性或者工具库是一个非常不错的方法。
-类似的“公案”有:
+类似的"公案"有:
* [python koans](https://github.com/gregmalcolm/python_koans)
* [ruby koans](http://rubykoans.com/)
* [java koans](https://github.com/matyb/java-koans)
* [go koans](https://github.com/cdarwin/go-koans)
-## 多媒体
-
+
+## 多媒体
-### David Bowie predicted in 1999 the impact of the Internet in BBC interview
+
+看David Bowie预测因特网对媒体、对娱乐、对艺术创作的影响。现在回过头来看,David Bowie确实很有远见,而主持人只是在一个劲的说:"但因特网只是个工具啊,你觉得会带来翻天覆地的变化?"
-看David Bowie预测因特网对媒体、对娱乐、对艺术创作的影响。现在回过头来看,David Bowie确实很有远见,而主持人只是在一个劲的说:“但因特网只是个工具啊,你觉得会带来翻天覆地的变化?”
+
## 工具、技术、展示
-
-### 浮点数一览无余
+
这个网站是直接解析浮点数的二进制表征,然后告诉你,根据不同的浮点数表征标准,你储存的浮点数的真实大小。这个小工具可以当作浮点数标准学习的最佳辅助工具了。
@@ -101,7 +94,10 @@ COBOL,跟英制单位(英寸、英尺)和陈旧的基础设施一样,都

+
-### xg2xg仓库
+
这个xg2xg(ex-googler to ex-googler)的仓库整理了所有Google内部工具所对应的外部版本和外部工具。这个对于想要知道Google island外面的世界现在长什么样子的人来说还是挺有帮助的。另外,这个仓库也整理了很多有用的文章。
+
+
diff --git a/apps/blog/content/periodics/digest-011.mdx b/apps/blog/content/periodics/digest-011.mdx
index edc4f55..176fecc 100644
--- a/apps/blog/content/periodics/digest-011.mdx
+++ b/apps/blog/content/periodics/digest-011.mdx
@@ -10,25 +10,27 @@ lang: "zh"
## 文章
-### This is Real. That's Not.
+
+作者写了自己从一个上层家庭出身变成一个无家可归的流浪者的过程中所体验到的世间百态。作者说自己以前以为这个世界人们都互相友爱,为人善良。结果沦为流浪者之后才发现这个世界充满了恶意,尤其是别人对于自己认为"卑贱"的人的恶意。作者经历过的最糟糕的欺辱是来自看起来受过高等教育或者家庭出身好的几个人的。这篇文章想告诉那些生活在"温室里"的人们:"你们现在认为理所当然的一切,都不是理所当然的。你们以后好的教育、好的家庭就能获得富足的生活;但是我想告诉你们,好的教育,好的家庭,也可能沦为无家可归的流浪者。"这篇文章写得挺好的,值得细细品味。
-作者写了自己从一个上层家庭出身变成一个无家可归的流浪者的过程中所体验到的世间百态。作者说自己以前以为这个世界人们都互相友爱,为人善良。结果沦为流浪者之后才发现这个世界充满了恶意,尤其是别人对于自己认为”卑贱“的人的恶意。作者经历过的最糟糕的欺辱是来自看起来受过高等教育或者家庭出身好的几个人的。这篇文章想告诉那些生活在“温室里”的人们:“你们现在认为理所当然的一切,都不是理所当然的。你们以后好的教育、好的家庭就能获得富足的生活;但是我想告诉你们,好的教育,好的家庭,也可能沦为无家可归的流浪者。”这篇文章写得挺好的,值得细细品味。
+
-
-### Peer rejection in science
+
文章讲了科学过程中33个在提出时反复拒绝,但最后证明有重大价值的科学发现和科学研究。这篇文章很长,但是每个例子可以分开来看。每个例子都提供了信息来源和事件概述。确实,在科学研究路上前行的同僚们都可以读一读这个帖子,了解一下在科学的前路是如何道阻且长。
+
-### Why scientists are turning to Rust
+
连Nature都报道Rust了,你今天还没有学Rust吗?
Rust的优点就是安全、高性能、能兼容甚至替代C/C++;而缺点就是比较难学,因为有很多语言内的概念是很新颖的,比较难理解。
+
-### Math keeps changing
+
这篇跟上一期的《1.5 is the midpoint between 0 and infinity in Ruby》相关,说到底还是计算机的浮点表征的问题。但是这一篇有意思的地方是讲到了不同版本的Javascript/NodeJS会在浮点表征和浮点运算的结果会不一样。这也就是说,如果你写的Javascript代码涉及到高精度浮点数的计算的话,那么版本的更新可能会产生很隐秘的bug。
@@ -43,17 +45,17 @@ Rust的优点就是安全、高性能、能兼容甚至替代C/C++;而缺点
2. 出现在程序语言的编译/解释阶段:不同的编译器和解释器可能会有不同的浮点计算实现的方式。很多程序语言的语言规则里面是没有直接说明数学运算应该如何实现的,所以实现方法就完全由编译器和解释器的提供者决定。
3. 出现在软件的实现阶段:不同的软件设计会使用不同的数学工具包或者工具库,而这些工具库可能会用不同的算法来实现数学计算。
+
-### Writing usable code
+
这篇将代码可用性的博客文章写的浅显易懂。他们的配图画的也非常好懂,对我很有启发。这是一篇值得学习的博客文章。[Algolia的技术博客](https://www.algolia.com/blog/?filter=engineering)有挺多优秀的技术文章的。这又是另一个通过博客让我认识并且心生喜欢的公司。
-## 网络学习
-
+
+## 网络学习
-### S.O.L.I.D: The First 5 Principles of Object Oriented Design
-
+
这帖子是Digital Ocean写的SOLID原则的介绍。
* S - Single-responsiblity principle
@@ -64,7 +66,7 @@ Rust的优点就是安全、高性能、能兼容甚至替代C/C++;而缺点
* 一个类在需要处理新的客体的时候,这个类内部应该不需要做更多的修改,而是能够通过自然的扩展来接受新的客体。文中提到`AreaCalculator`一开始可以处理`Square`和`Circle`的面积。如果这两个形状的面积计算是在`AreaCalculator`内部实现的话,那么遇到一个新的`Triangle`形状的时候,`AreaCalculator`的内部就需要改变,这样就不是一个很好的设计。如果`AreaCalculator`内部只是call属于不同形状自己的`area()`函数的话,那么任何一个新的形状可以负责实现自己的`area()`函数,而`AreaCalculator`就不需要根据各种新的情况来修改自己的内部逻辑了。
* L - Liskov substitution principle
* 子类/派生类(subclass/derived class)应该可以被基类(base class)替代。
- * 我的理解是,在相同的接口处,子类和基类应该提供同样的输入输出接口。不能基类`foo()`返回一个数组,而子类`foo()`返回一个浮点数。
+ * 我的理解是,在相同的接口处,子类和基类应该提供同样的输入输出接口。不能基类`foo()`返回一个数组,而子类`foo()`返回一个浮点数。
* I - Interface segregation principle
* 不应该强制某个类的用户实现或者依赖一个他们不需要的接口。
* 比如如果一个`ShapeInterface`要求同时实现`area()`和`volumn()`两个函数,这就不太合理。因为一个2D形状是不需要计算体积的,所以使用不应该勉强`ShapeInterface`的用户实现`volumn()`这个接口。这种情况,应该把`area()`和`volumn()`分离成两个不同的接口`ShapeInterface`和`SolidShapeInterface`,然后客户可以选择多重继承来选择性地实现不同的接口。
@@ -72,55 +74,54 @@ Rust的优点就是安全、高性能、能兼容甚至替代C/C++;而缺点
* 应该依赖抽象接口,而非依赖具体实现。
* 比如一个依赖数据库的`PasswordReminder`类,这个类的形式参数(parameter)应该依赖一个`DBConnectionInterface`抽象接口,而不是直接依赖一个具体的`MySQLConnection`具体类。这里`MySQLConnection`这个具体类可以实现`DBConnectionInterface`的所有接口,并作为传入`PasswordReminder`的实参(argument)。
-## 多媒体
-
+
-### Prisoners In Finland Live In Open Prisons Where They Learn Tech Skills
+## 多媒体
+
-这个视频非常有意思,介绍了芬兰的人性化监狱。视频有两条线,一条是以“点”切入,介绍一个杀人犯在监狱中的生活,锻炼和学习。这个犯人介绍说自己在学习人工智能和创业(entrepreneurship),然后介绍了一下监狱里面提供的生活环境和教育、就业的机会。另一条从“面”上描述,介绍芬兰过去几十年在监狱制度方面的发展和改变。新修的监狱都更加人性化、更加科技化,帮助犯人在监狱内也能跟上社会的科技发展,而老的监狱逐渐被淘汰,或成为博物馆。整个视频就是这两条线缠绕在一起推进故事的叙述。
+这个视频非常有意思,介绍了芬兰的人性化监狱。视频有两条线,一条是以"点"切入,介绍一个杀人犯在监狱中的生活,锻炼和学习。这个犯人介绍说自己在学习人工智能和创业(entrepreneurship),然后介绍了一下监狱里面提供的生活环境和教育、就业的机会。另一条从"面"上描述,介绍芬兰过去几十年在监狱制度方面的发展和改变。新修的监狱都更加人性化、更加科技化,帮助犯人在监狱内也能跟上社会的科技发展,而老的监狱逐渐被淘汰,或成为博物馆。整个视频就是这两条线缠绕在一起推进故事的叙述。
但是这种监狱制度可能并不能在其他地方推广。片中提到,美国关在监狱里面的罪犯人数是芬兰国家总人数的一半,所以就不要指望美国能实现这样的人性化的监狱了。
有很多问题,在不同的规模下,能够使用的解决方法是完全不一样的。科学工程如此,人文社科也是如此。
+
-### AlphaFold: The making of a scientific breakthrough
-
+
-这一周的大新闻之一当然就是DeepMind号称解决了困扰结构生物学50年的问题,然后“解决了”蛋白质结构的问题。人工智能是不是*解决了*这个计算问题,当然是值得怀疑的。但是有两点是肯定的:
+这一周的大新闻之一当然就是DeepMind号称解决了困扰结构生物学50年的问题,然后"解决了"蛋白质结构的问题。人工智能是不是*解决了*这个计算问题,当然是值得怀疑的。但是有两点是肯定的:
1. DeepMind确实实现了突破。
2. DeepMind真的是优秀的PR工具。
+
-### Painting a Selfie Girl, with Maths
+
-
-这个视频分享了如何用一系列的数学运算来绘制一个“在自拍的姑娘”。作者一边介绍每一步所使用的数学公式,一边展现应用某个数学公式所绘制的画面。视频从一开始的一个球到最后的一个姑娘在雪地里照自拍的整个画面,让我觉得真是一步一步见证魔法的力量。
+这个视频分享了如何用一系列的数学运算来绘制一个"在自拍的姑娘"。作者一边介绍每一步所使用的数学公式,一边展现应用某个数学公式所绘制的画面。视频从一开始的一个球到最后的一个姑娘在雪地里照自拍的整个画面,让我觉得真是一步一步见证魔法的力量。
代码和成品可以在[ShaderToy](https://www.shadertoy.com/view/WsSBzh)上看到。视频背后的数学是signed distance function(SDF),[ShaderToy](https://www.shadertoy.com/)上还有很多有意思的例子,比如[这个错觉](https://www.shadertoy.com/view/tdyfRR)。作者的[网站](https://iquilezles.org/index.html)上有更多教程和展示!
+
-
-### The Fast Fourier Transform (FFT): Most Ingenious Algorithm Ever?
-
+
从多项式乘法的角度来讲解快速傅里叶变换(FFT)的算法。我觉得这是我第一次学懂了这个O(nlogn)的多项式乘法的算法。真的非常感谢这个视频的制作者!
看完了这个视频以后,我又去找了这个制作者其他的视频。他在Youtube上有个账号,叫[Reducible](https://www.youtube.com/channel/UCK8XIGR5kRidIw2fWqwyHRA),上面发了一些关于计算机算法和数据结构的讲解视频。这一类视频风格非常类似[3Blue1Brown](https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw)讲解数学的视频风格,从动画制作和可视化的呈现,到叙述方式,都跟3B1B有类似之处。3B1B也在Twitter上推荐了他制作的这个FFT的视频。
+
## 工具、技术、展示
-
-### Flappy bird in 205 bytes
-
-
+
这是一个非常有意思的Gist:如何用最少的字符来实现Flappy Bird这个游戏。从一开始HTML的版本, 到接下来的Dataurl的版本,到最后的SVG版本,大家通过每次抠掉几个字符的方式,把一开始300+字符的实现,降到了一个195字符的实现。其中还有一个帖子帮着讲解了最精简的实现。
+
-### Quick Python
-
+
一个Quick Basic/Turbo Pascal界面的Python IDE,一秒钟回到我的中学时期,当年竞赛的记忆涌上心头。[Github仓库在此](https://github.com/timothycrosley/quickpython/),有机会可以读一读Code实现。
+
+
diff --git a/apps/blog/content/periodics/digest-012.mdx b/apps/blog/content/periodics/digest-012.mdx
index 9ee15f3..4397fbb 100644
--- a/apps/blog/content/periodics/digest-012.mdx
+++ b/apps/blog/content/periodics/digest-012.mdx
@@ -9,17 +9,17 @@ lang: "zh"
---
## 文章
+
-### Cemetery of Soviet computers
-
-这篇文章带着大家浏览了苏联70年代、80年代、90年代的几个计算机机型。很多机型可以看到美国PDP机型的影子,不过这些苏联机型的实体样子在互联网上比较少见。看完这些照片,其实感觉可以做成赛博朋克的样子。
+这篇文章带着大家浏览了苏联70年代、80年代、90年代的几个计算机机型。很多机型可以看到美国PDP机型的影子,不过这些苏联机型的实体样子在互联网上比较少见。看完这些照片,其实感觉可以做成赛博朋克的样子。
在计算机发展的初期,苏联和美国在计算机设计上有一些不同的思路。比如苏联曾经设计了三值计算机,而不是像英美一样一直使用的2进制作为最底层的数据表征,但是这种信号的计算机实体也没有多少照片记录。
+
-### The Donut King who went full circle - from rags to riches, twice
+
-BBC这篇关于“加州甜甜圈大王”的报道还挺有意思的,追溯的是为何现在LA的甜甜圈店基本由柬埔寨人掌控,以及Ted Ngoy的一生起伏的故事。
+BBC这篇关于"加州甜甜圈大王"的报道还挺有意思的,追溯的是为何现在LA的甜甜圈店基本由柬埔寨人掌控,以及Ted Ngoy的一生起伏的故事。
Ted Ngoy在上个世纪70年代末从柬埔寨逃难到美国洛杉矶,从当地叫做Winchell's的甜甜圈店学习甜甜圈的经营。之后觉得这个业务不错,于是自己跟家人出来开了自己的甜甜圈店,并且开始扩展自己的甜甜圈连锁店。这个时候,美国大量接受来自泰国和柬埔寨的难民,Ted采用了一套有效的手段来帮助他的难民同胞在LA扎根:Ted花钱开一家新店,教同胞经营甜甜圈的技能,然后把新店承包给同胞。通过这样的方式,以及通过柬埔寨同胞的勤劳,Ted带领柬埔寨难民一度开了100多个甜甜圈店,并且把Winchell's的市场份额挤了下去。1985年,Ted他们家就成了百万富翁。同时,柬埔寨人基本上就掌控了LA的甜甜圈生意。
@@ -27,74 +27,80 @@ Ted Ngoy在上个世纪70年代末从柬埔寨逃难到美国洛杉矶,从当
这个人物故事还挺生动的,有高潮,有低谷,有美国梦,也有美国腐朽的地方。
+
-### Bathroom Reading
+
这是一篇关于厕所的很有意思的文章。文章里讨论了厕所的历史,厕所的发展,以及一系列对于公共厕所的思考。文章提到了一些有趣的事情,这里分享两个:
-* 美国在1973年的时候出现过一次与最近疫情期间类似的“厕纸抢购”事件。当时有谣言称日本的厕纸产能出现了问题,然后这个谣言传到了民主党议员那里,随后有被喜剧演员Johnny Carson在节目中以笑话的形式放大。结果,美国消费者产生了强烈的“不怕一万,就怕万一”的焦虑,然后不理智地去大量购买厕纸。这个谣言导致的集体冲动花了5个月才消停。
-* 美国1880年麻省首次立法要求工作场合的厕所要男女分开。也就是说,在那之前,美国工人上厕所是男女共同厕所的。一百多年后的今天,中性厕所有重新被进入了一题,一时间性别中性的厕所成为了更加“先进”的公共卫生要求。
+* 美国在1973年的时候出现过一次与最近疫情期间类似的"厕纸抢购"事件。当时有谣言称日本的厕纸产能出现了问题,然后这个谣言传到了民主党议员那里,随后有被喜剧演员Johnny Carson在节目中以笑话的形式放大。结果,美国消费者产生了强烈的"不怕一万,就怕万一"的焦虑,然后不理智地去大量购买厕纸。这个谣言导致的集体冲动花了5个月才消停。
+* 美国1880年麻省首次立法要求工作场合的厕所要男女分开。也就是说,在那之前,美国工人上厕所是男女共同厕所的。一百多年后的今天,中性厕所有重新被进入了一题,一时间性别中性的厕所成为了更加"先进"的公共卫生要求。
这篇文章还是挺值得一读的。
+
-### FTC Sues Facebook for Illegal Monopolization
-
+
联邦贸易委员会(FTC)与非法垄断市场为由起诉Facebook。FTC认为Facebook过去几年采用了一系列策略来保护自己在社交网络领域的垄断地位,先后收购了Instagram, WhatsApp,并且对API进行了限制,导致开发者对手无法使用API开发与Facebook的业务类似的竞争产品。这一系列的策略的结果就是Facebook垄断了社交网络的市场。[具体的诉状](https://www.ftc.gov/system/files/documents/cases/1910134fbcomplaint.pdf)有53页。
-Facebook这个例子还挺有意思的。他们确实有“竞争不如购买”的策略来扩大自己的市场,而且他们的几次收购还都挺成功的。但是美国还是真的很不喜欢这种“垄断市场”的行为,从早年的AT&T,到后来的微软,然后是Google,然后是Facebook,美国出现一个又一个具有创新性的公司垄断了市场,然后一次又一次被联邦以反垄断法试图打破市场论断。但是看看国内的互联网巨头,其实分别都在不同的领域论断,但是好像没有听说有被以非法垄断的理由起诉。不过,或许国内确实一直生机勃勃,总是会有不同的新的企业站出来挑战。我随便想了一下几个领域,好像还真的都有至少两个不同的企业在竞争。
+Facebook这个例子还挺有意思的。他们确实有"竞争不如购买"的策略来扩大自己的市场,而且他们的几次收购还都挺成功的。但是美国还是真的很不喜欢这种"垄断市场"的行为,从早年的AT&T,到后来的微软,然后是Google,然后是Facebook,美国出现一个又一个具有创新性的公司垄断了市场,然后一次又一次被联邦以反垄断法试图打破市场论断。但是看看国内的互联网巨头,其实分别都在不同的领域论断,但是好像没有听说有被以非法垄断的理由起诉。不过,或许国内确实一直生机勃勃,总是会有不同的新的企业站出来挑战。我随便想了一下几个领域,好像还真的都有至少两个不同的企业在竞争。
+
-### Exotic Programming Ideas: Part 1 (Module Systems)
+
这是一系列关于程序设计语言中不那么主流的设计思路,有些部分比较抽象,我不是很能理解。不知道是不是跟自己不了解这些语言有关。也可能是因为我不太了解程序语言设计相关的知识。不过多读几遍还是能够体会到一些东西的。
-## 网络学习
-
+
+## 网络学习
-### A Distributed Systems Reading List
-
+
一个分布式系统的阅读清单,东西还挺多的。不过我觉得我还是需要通过一些课程来学习基础知识,比如[MIT 6.824: Distributed Systems](https://www.youtube.com/playlist?list=PLrw6a1wE39_tb2fErI4-WkMbsvGQk9_UB)这个视频集合就是一个广受好评的课程。分布式系统有好几本好书和材料,我需要花很多功夫好好学习一下。
+
-### CS 6120: Advanced Compilers: The Self-Guided Online Course
-
+
这是一个关于编译器和编译原理的网络课程。对我来说,最大的问题是这是一个PhD的课程,我可能需要找一些本科生的课程来打打基础。
+
-### The Modern JavaScript Tutorial
-
+
一个相当全面的Javascript的网络课程。我真的很奇怪,很多这种资源都是英文的。国内就很难看到这样的免费分享又整理得很齐全的资料。国内的资料很多都是出来卖课的样子。
-## 多媒体
+
+## 多媒体
-### Regular Languages in 4 Hours
+
一个长达4个小时的讲正则语言(Regular Language)的网络课程。
-## 工具、技术、展示
+
+## 工具、技术、展示
-### Game UI Database
+
这是一个收集了很多游戏UI的截图,用来帮助大家获得一些UI设计的灵感。HackerNews上的各位也分享了很多UI和设计相关的网站:
* [humaaans](https://www.humaaans.com/):这个免费的图片库很有意思,是设计的各种各样的人的插画。
* [Interface assets for designers and startup creatives](https://craftwork.design/):这是个面向设计师和创业公司的UI素材库,里面有插画、图标、UI设计等内容。
* [Icons8](https://icons8.com/):这个网站也有很多免费的素材,可以帮助创业公司和一些小的项目来找到很多多媒体素材,他们的[插画](https://icons8.com/illustrations)页面素材真的挺多的。我觉得我应该要从里面好好选一些素材,把我自己的这个站点搞得美观一点。
+
-### Cameras and Lenses
+
这是一篇解释相机成像和镜头曲光的博客文章,我之所以把这篇文章放在这个章节,是想高亮一下这边文章中的互动设计。现在又越来越多的人在进行类似的creative coding,并且把creative coding跟教学联系在一起。我觉得这方面的发展是非常有意义的,值得学习。
+
-### Raft: Understandable Distributed Consensus
-
+
这是一个试图用可视化的手段来讲解Raft的演示。
+
+
diff --git a/apps/blog/content/periodics/digest-013.mdx b/apps/blog/content/periodics/digest-013.mdx
index 4e0257f..0a647c2 100644
--- a/apps/blog/content/periodics/digest-013.mdx
+++ b/apps/blog/content/periodics/digest-013.mdx
@@ -10,9 +10,7 @@ lang: "zh"
## 文章
-
-### 编写一个最小的 64 位 Hello World
-
+
这是CJTing的一篇新文章,从最简单的C语言Hello World程序出发,逐层剖析,解释了这个最简单的程序从编译到运行各个阶段的底层知识。
* 什么是可执行文件,可执行文件在Linux下是什么格式。
@@ -21,10 +19,9 @@ lang: "zh"
跟之前的文章一样,这篇文章内容详细,解读深入浅出,是非常不错的技术类博客文章。
+
-### 100+ Lessons Learned for Project Managers
-
-
+
这篇文章是NASA的前副主任(Associate Director)Jerry Madden总结了122条项目经理的经验总结。里面**工程设计**、**统筹决策报告**、**管理项目人员**、**应对上级领导**、**客户关系**和**承包商关系**六个大类。这122条经验可以当作是格言短文吧,时不时拿出来看看也挺好的。这里还有一份[PDF版本](https://www.nasa.gov/pdf/293253main_62682main_jerry_madden_forum7.pdf)
@@ -39,19 +36,17 @@ lang: "zh"
> * 如果你有问题需要更多的人来解决,要像厨子加盐一样的方法招人:一次只加一点盐。(第五十四条)
> * 项目需要一个团队的努力才能成功。记住很多团队有一个教练而不是老板,但是教练仍然需要叫人参加比赛。(第七十三条)
+
-### OpenAI LP
-
-
+
OpenAI宣布成立有限公司OpenAI LP,由OpenAI Nonprofit的董事会管理。这个有限公司想设计一个回报上限(Capped Value Return),号称在投资人注资的时候就商定一个将来的回报限额,如果将来OpenAI LP赚钱了,在限额内的部分会反馈给投资者,但是在限额以外的所有盈利都收归OpenAI Nonprofit所有,用来进一步开发通用人工智能的技术。
-这个决策还挺有意思的。我们可以先看看同行的情况,Deepmind在2018年就将近[亏损了6个亿](https://www.forbes.com/sites/samshead/2019/08/07/deepmind-losses-soared-to-570-million-in-2018/?sh=3894156b3504),然后2020年有得到Google的帮助,直接把用来探索AI技术的[15个亿的贷款给一笔勾销](https://www.bloomberg.com/news/articles/2020-12-17/deepmind-says-2019-revenue-jumped-158-on-ai-research-work)了。OpenAI虽然一开始一直想做非盈利机构,但是发现技术突破需要的费用实在是太高了,但是同时他们也发现了一些可以用来盈利的技术,所以看来是放弃了一开始天真的想法,还是决定做一个有限公司来解决技术背后的经济需求。这个“带有回报上线”的有限责任公司到底会变得怎么样,我们可以拭目以待。
+这个决策还挺有意思的。我们可以先看看同行的情况,Deepmind在2018年就将近[亏损了6个亿](https://www.forbes.com/sites/samshead/2019/08/07/deepmind-losses-soared-to-570-million-in-2018/?sh=3894156b3504),然后2020年有得到Google的帮助,直接把用来探索AI技术的[15个亿的贷款给一笔勾销](https://www.bloomberg.com/news/articles/2020-12-17/deepmind-says-2019-revenue-jumped-158-on-ai-research-work)了。OpenAI虽然一开始一直想做非盈利机构,但是发现技术突破需要的费用实在是太高了,但是同时他们也发现了一些可以用来盈利的技术,所以看来是放弃了一开始天真的想法,还是决定做一个有限公司来解决技术背后的经济需求。这个"带有回报上线"的有限责任公司到底会变得怎么样,我们可以拭目以待。
+
-
-### I regret quitting astrophysics
-
+
作者2013年离开学术界,离开了天文学的研究,成为了一名数据科学家。7年之后,当他回过头来看,他觉得挺后悔的。基本上后悔的点在于:
1. 工作缺乏动力
@@ -61,72 +56,71 @@ OpenAI宣布成立有限公司OpenAI LP,由OpenAI Nonprofit的董事会管理
我感觉这几点可能确实是因为在新的工作中没有找到激情和有趣的地方。当然,工业界的工作确实是比较琐碎和平凡。我是2018年离开学术界的,不知道我7年以后会不会后悔离开学术界。
+
-### The CPUs of Spacecraft Computers in Space
-
+
-这个页面整理了截止到2012年,美国不同型号的太空飞行器所使用的CPU的型号。由于太空飞行器所处的环境极其恶劣,比如温度变化非常大,受到的辐射非常强等,太空飞行器一般都不用最新的CPU,而是使用经过长时间测试的CPU。这个页面罗列了CPU的信号和选择、设计CPU的时候的考虑。我觉得这个页面很有意思的原因是,如果我们想象将来的太空扩张,我们会发现实际上飞在天上的各种飞行器是来自“过去的文明”,而反倒是地球表面的社会处在一个“将来的文明”中。
+这个页面整理了截止到2012年,美国不同型号的太空飞行器所使用的CPU的型号。由于太空飞行器所处的环境极其恶劣,比如温度变化非常大,受到的辐射非常强等,太空飞行器一般都不用最新的CPU,而是使用经过长时间测试的CPU。这个页面罗列了CPU的信号和选择、设计CPU的时候的考虑。我觉得这个页面很有意思的原因是,如果我们想象将来的太空扩张,我们会发现实际上飞在天上的各种飞行器是来自"过去的文明",而反倒是地球表面的社会处在一个"将来的文明"中。
+
-### Stripe’s payments APIs: the first ten years
-
+
这篇Stripe的技术博客总结了Stripe的API在过去十年的变化,以及背后的原因。一开始Stripe只支持信用卡,所以在API的设计上是围绕着信用卡的使用场景来简化的(只使用了一对概念:`token`和`charges`)。后来,银行业务和比特币的业务加了进来,因为这两项业务有新的结算方式,所以API变得更加复杂。再后来(2015-2017),电子支付方式如雨后春笋,Stripe为了支持更多的支付方式,开始进一步往之前的API里面加入参数,直到最后发现最开始的API设计变得过于复杂。于是,2018年的时候,Stripe重新审视已有的各种支付方式,然后设计了全新的API(回到一对概念:`PaymentIntent`和`PaymentMethod`),将支付方式进行了新的抽象。这个新的抽象将整个API的工作流程简化了不少。但是,新的API有很大的改变,所以花了2年的时间才逐渐把新的API推广到全球的用户。
Stripe的技术博客一如既往的写得好啊。读他们的技术博客和API文档,确实感觉是一家让人喜欢的公司。Hackernews上也是好评如潮。
+
-### Equity guide for employees at fast-growing companies
-
+
这篇文章讲的是在创业公司工作,员工面临的股权行权的问题。不同的决策会有不同的收益,也有不同的税收要求。
老实说,这篇文章没有太看懂。但是如果将来想去创业公司的话,股权方面的一些问题还是要了解一下,因为这个东西对个人财政状况影响还挺大的。
+
## 网络学习
-
-### 现代 C++ 教程: 高速上手 C++ 11/14/17/20
-
+
这是一本中文写作的现代C++教程,重在介绍C++11以来的变化和改进。其中提到了[What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf)这篇文章,也同样值得花时间好好学习。
+
-### hacking C++
-
+
这个网站展示和讲述C++的方法很有新意:作者制作了很多Cheatsheet和图标来展示概念,非常清晰易懂,可以作为学习C++的很好地补充材料。
+
-### 2020年TLA+会议
-
+
之前第五期记录了Leslie Lamport关于TLA+的介绍,今天发现他们还有会议了。这个会议算是一个比较好的学习工业界如何在工作场景中实践TLA+的教程了。不过报告的内容还挺复杂的。TLA+这个东西,感觉有时间确实是可以了解一下,看起来还挺好玩的。
-## 多媒体
-
+
-### The UNIX Time-Sharing System
+## 多媒体
+
这是UNIX设计的原始论文,文章写得很清晰,但是比较长。找时间再仔细读一下。
另外,AT&T的这个纪录片档案《[The UNIX Operating System](https://www.youtube.com/watch?v=tc4ROCJYbm0&t=797s)》是一个很不错的关于Unix的介绍。这个视频也讲解了当时Unix设计上的创新,比如`|`操作符,比如重新导向输入输出的操作(`>`和`<`),以及这篇文章着重讨论的Unix的文件系统。
+
-### Hacker interview-Gummo
-
+
这个是Gummo的个人采访。Gummo分享了他整个人的发展过程,从早起的不幸家庭,到后来学会计算机并且逐步成为计算机黑客,到后来挖了8000多个比特币、进入网络安全行业,再到最后的人生感悟。整个过程就是听他娓娓道来自己的经历,听他诉说自己的挫折,谈自己的成长。
我觉得最后有一点挺可爱的,就是Gummo一只手指一直涂的是粉红色的指甲油。因为当年一个小姑娘问他为什么不当好人,而要当坏坏的黑客。他有了家庭和孩子之后,又被这个小姑娘感化,于是决定用自己所学的知识来保护更多人,然后涂上这个粉红色指甲油,作为一种宣言,也是一种对自己的提示。真是力量越大,责任越大。
+
-### Let’s go whaling: Tricks for monetising mobile game players with free-to-play
-
+
-这个视频真的值得看一看,讲的是怎么设计游戏里面的费用,让玩家愿意去大把氪金。讲得还挺有道理的,基本上就是把心理学上研究过的各种行为现象往“赚钱”的目标上优化。这里面包括扭蛋和赌博背后的行为机制,斯金纳的操作性条件反射,卡尼曼的非理性消费者行为,延迟满足与立即满足,服从与从众等等。虽然听演讲着讲起来都挺有道理的,但是我并不希望这些人性被利用,所以听完之后觉得人们好可悲。
+这个视频真的值得看一看,讲的是怎么设计游戏里面的费用,让玩家愿意去大把氪金。讲得还挺有道理的,基本上就是把心理学上研究过的各种行为现象往"赚钱"的目标上优化。这里面包括扭蛋和赌博背后的行为机制,斯金纳的操作性条件反射,卡尼曼的非理性消费者行为,延迟满足与立即满足,服从与从众等等。虽然听演讲着讲起来都挺有道理的,但是我并不希望这些人性被利用,所以听完之后觉得人们好可悲。
另外,这个演讲提到了一些我不知道的思维模型。
@@ -136,21 +130,21 @@ Stripe的技术博客一如既往的写得好啊。读他们的技术博客和AP
* Socializer(交际花):喜欢在游戏中社交,由此产生成就感。
* 对这样的玩家,可以在**游戏的定制**上提供氪金的选择,让玩家通过氪金成为社交圈中最靓的仔,满足成就感。
* Killer(杀人犯):喜欢在游戏中竞技,由此产生成就感。
- * 对这样的玩家,可以在**游戏的竞争力**上提供氪金的选择,让玩家通过氪金成为“最强”的玩家,满足成就感。
+ * 对这样的玩家,可以在**游戏的竞争力**上提供氪金的选择,让玩家通过氪金成为"最强"的玩家,满足成就感。
* 但是这里有个问题,在竞争力上提供氪金的选择,很有可能使游戏失去平衡性,导致氪金的玩家就明显的强,这让不氪金的玩家会失去兴趣。
* Explorer(探险者):喜欢探索游戏中的各种可能性,由此产生成就感。
* 对这样的玩家,可以在**游戏的内容**上提供氪金的选择,让玩家通过氪金解锁更多的游戏内容,满足成就感。
其次,在设计氪金的手段上,可以使用(钩子)Hook,(习惯)Habit,(爱好)Hobby模式:
-* 钩子:一些廉价的方式让玩家从0开始氪金。这些选择一般费用都很低,慢慢给玩家建立一种“这个游戏花点钱没有关系”的心里感受,由此吊玩家上钩。
+* 钩子:一些廉价的方式让玩家从0开始氪金。这些选择一般费用都很低,慢慢给玩家建立一种"这个游戏花点钱没有关系"的心里感受,由此吊玩家上钩。
* 习惯:一些常见的氪金方式,大量的玩家可能会偶尔氪金一下,然后立马感受氪金带来的爽快。通过设置这样的习惯性氪金的选择,让玩家稳定地在游戏上氪金。
* 爱好:面对一些爱上了氪金的感觉的玩家,要提供没有上限的氪金选择。这一部分选择要给玩家提供无限氪金的可能性,不要让玩家发现氪着氪着就没有什么进展了。
-## 工具、技术、展示
-
+
-### Tiny Projects
+## 工具、技术、展示
+
作者的目标是制作一些需要1-2周就能完成的小项目,到目前为止一共有6个小项目,其中一个小项目还[卖了5300刀](https://tinyprojects.dev/posts/selling_a_tiny_project)。在完成每个项目以后,作者都写了一个项目总结,把自己制作这个项目的整个过程记录了下来。读者也可以把这些总结看作是教程来学习怎么制作一些小的项目。读完这些项目,感觉学到了挺多东西的。
@@ -162,7 +156,7 @@ Stripe的技术博客一如既往的写得好啊。读他们的技术博客和AP
2. 托管(Hosting)
* 目测清一色用的Google Firebase,不要钱,支持静态网页托管。
* 后端功能基本上都是用的Firebase的serverless功能(比如Firebase的实时数据库)以及一些Saas的API服务(见下)。
- * 因为作者的主旨是做“小项目”,所以基本上不需要很复杂的托管服务。
+ * 因为作者的主旨是做"小项目",所以基本上不需要很复杂的托管服务。
3. 技术(Tech stack)
* 最基本的HTML,CSS和Javascript。
* 后期因为建站复杂了一些,用了Angular + NodeJs用来搭建整个网站。
@@ -179,3 +173,5 @@ Stripe的技术博客一如既往的写得好啊。读他们的技术博客和AP
* 用过Facebook Ads,但是效果不太好。
6. 时间
* 基本上每个项目是40到80小时的工作量,但是基本上都是在两到三周做出来的。
+
+
diff --git a/apps/blog/content/periodics/digest-014.mdx b/apps/blog/content/periodics/digest-014.mdx
index e901ee6..458cfa9 100644
--- a/apps/blog/content/periodics/digest-014.mdx
+++ b/apps/blog/content/periodics/digest-014.mdx
@@ -10,19 +10,17 @@ lang: "zh"
## 文章
-### Reading, That Strange and Uniquely Human Thing
-
-
+
这是一篇关于人类阅读和文字发展历史的文章。非常典型的美国式科普叙事结构——针对一个特定的人来叙述一件特定事,然后从这个个案展开来讲整个文章要探讨的问题,最后又回到这个特定的人/事上作为结尾。
整个文章还是有点意思的。我觉得的确是能学到一些关于阅读和文字发展的历史。我觉得这样的科普形式还是可以接受的,所以我也可以学着这种方式写文章吧。
+
-### The Games People Play With Cash Flow
-
+
-这篇文章是关于“现金流”的一篇蛮有深度的文章。有两句话我觉得能总结全文的主旨
+这篇文章是关于"现金流"的一篇蛮有深度的文章。有两句话我觉得能总结全文的主旨
> 对商业一知半解的人认为商业只是为了赚钱。而真正经商的人才知道经商最重要的是掌控现金流。(People with limited understanding of business think that business is all about making profits. But those who actually run businesses know that running a business is all about managing cash flows.)
>
@@ -30,25 +28,23 @@ lang: "zh"
这个文章很长,里面又说到(1)初期成本高,但是后续收入稳定的业务;(2)预付费用能降低成本的业务,比如餐饮业,还有很多其他的案例。有时间可能要再重新读一遍。确实是一篇很不错的文章。
+
-### An Engineer’s guide to Stock Options
-
+
这篇文章是一篇讲解创业公司股票期权的文章,分享了在创业公司工作时,获得股票期权之后,你将面临的不同情景。所讨论的问题包括:合适行权,入职和离开公司所需要的注意的问题,行权时的税务考虑等。如果你有去创业公司的想法,读一读这篇文章了解一下相关的知识会挺有好处的。
+
-### Artificial Intelligence — The Revolution Hasn’t Happened Yet
-
+
Jordan在这篇文章里面讲了他对现在AI研究和AI行业的看法。他觉得,目前所谓的人工智能的发展是有局限性的,还是要发展智能增强(Intelligence Augmentation,IA)和智能基建(Intelligent Infrastructure,II)。在这种倡议下,我觉得智能本身就是一个物种中立的概念了,而且智能科学的发展需要更多工程上的发展才行。
+
+
-### Generic mitigations
-
-
-
-这个文章介绍了一些在运营出现问题的时候可以使用的比较“通用”的缓解方案(mitigation plan)。这里提到的方法包括:
+这个文章介绍了一些在运营出现问题的时候可以使用的比较"通用"的缓解方案(mitigation plan)。这里提到的方法包括:
* Rollback (回滚代码):直接把运行的代码回滚到之前的好的状态。但是rollback safety是一个很大的问题,因为其他的配置文件如果不对的话,代码回滚本身也会成为新的问题。
* Data rollback (回滚数据):只有在线数据回滚。这种情况主要是数据质量和数据导致问题的时候比较有用。
* Degrade(降级服务):如果服务负载太大,可以考虑服务降级,比如考虑直接放弃low-priority的流量。
@@ -57,7 +53,7 @@ Jordan在这篇文章里面讲了他对现在AI研究和AI行业的看法。他
* Drain(排放):直接把某个问题区域服务的流量挪到别的健康的区域。这个只适用于multi-home的服务,因为这样的服务有这些冗余可以使用。
* Quarantine(隔离):隔离有问题的实例,让其他实例来提供服务。这个感觉跟Drain有一点相似,但是Drain一般是在区域(region/cell)层面上执行的——隔离整个区域内的所有服务。
-用户能见到的问题是最大的问题。一个“几乎能工作”的解决方法,如果能够让用户觉察不到问题,已经是一个不错的暂时的缓解措施。在此之外,最重要的还是提前准备:
+用户能见到的问题是最大的问题。一个"几乎能工作"的解决方法,如果能够让用户觉察不到问题,已经是一个不错的暂时的缓解措施。在此之外,最重要的还是提前准备:
1. 提前考虑你的服务需要什么样的紧急应对策略。可以考虑使用[production readiness review](https://sre.google/sre-book/evolving-sre-engagement-model/)来思考和定义你的服务所需要的最常见的应对措施。标准化应对措施会让整个紧急事件的处理有很大的帮助。
2. 训练你的oncaller,让oncaller熟悉他们可以使用的工具,包括自动测试、文档、检查清单、playbook等。
@@ -65,11 +61,11 @@ Jordan在这篇文章里面讲了他对现在AI研究和AI行业的看法。他
这一切的主旨是在问题出现的时候,任何一个oncaller都能简单、安全、有信心、无阻力地缓解燃眉之急。另外,这里说到,问题出现的第一时间不是要完全理解到底问题的根源在哪里,而是应该第一时间缓解问题,比如将代码回滚回上一次正确的操作。文章配图确实是一图顶千言:
-
+
+
-### Extremist Programming(极限编程)
-
+
这篇文章很有意思,主要想法是如果你有一个程序设计的理念,如果把这个理念极限地推广到程序设计的所有方面会变成什么样。比如,函数很棒,如果一个程序语言所有成员都是函数会怎么样?又比如,对象(object)很棒,如果一个程序语言所有成员都是对象会怎么样?
@@ -77,26 +73,25 @@ Jordan在这篇文章里面讲了他对现在AI研究和AI行业的看法。他
其实,我觉得在学术上也是这样的。有时候将一个想法/假设无限地推广出去,虽然不一定符合科学的真理,但是确实可以检验这个假设真正的解释力边界在哪。在工程上,有时候一个简单的想法,可能可以走很远。
+
## 网络学习
-
-### FullStack D3 and Data Visualization
-
+
这是一个将D3的教程,挺贵的,原价500刀,但是内容还挺多的。我觉得可以先看一下试看视频吧。我一直很犹豫到底要不要花钱来学D3,因为我也没找到网上的好的材料。
+
-### Siggraph2019 Geometric Algebra
-
+
这个课程是Siggraph2019的一个讲几何代数的视频。时间比较长,将近两个小时,但是还是值得一学的。
-## 多媒体
+
+## 多媒体
-### Dylan Beattie — The cost of code
-
+
Dylan在这个讲座里面回顾了一些有意思的程序历史,提到每一款程序本身自身是会带来成本的。随着现在技术对生活的影响越来越大,程序对生活的影响也越来越大,而程序中的小问题也会变成越来越高额的社会成本——整个社会所需要付出的成本。这些成本不仅仅只是需要付给开发者的工资,不仅仅是政府和公司要付出的金钱,还有使用者时间、隐私、甚至是生命(比如波音飞机的代码问题导致的事故)。另外,当一个技术团队使用了第三方的代码(比如Open Source的代码),那么那些第三方代码中的问题也直接成为了每一个使用该代码的团队的问题,从而成为了更多用户和开发团队的成本。
@@ -104,25 +99,24 @@ Dylan在这个讲座里面回顾了一些有意思的程序历史,提到每一
我觉得,每一个程序员应该尽量减少自己产生的代码给社会和他人带来的成本。
+
-### Puzzle Solving... or Problem Solving? | How to Design Puzzles
-
+
这个视频讨论了各种解谜游戏(Puzzle Game)的设计,提到了几个解谜游戏是没有标准解法的,完全是开放性的问题。这样的游戏比有特定解法的游戏更能激发玩家的创造力,而且有时候能够解决一些现实中真正的问题,比如作者提到了Fold It的那个蛋白质折叠的游戏。确实,游戏的设计是一门艺术。新冠疫情蔓延开的时候,很多人在讨论[瘟疫公司](https://zh.wikipedia.org/wiki/%E7%98%9F%E7%96%AB%E5%85%AC%E5%8F%B8)这个游戏,可见好的游戏不但能够给玩家带来快乐,也能帮助玩家学到很多知识。
+
## 工具、技术、展示
-
-### The Deadlock Empire
-
+
这个网页挺有意思的,是一个Learning by doing的一个网站,也可以当作是一个学习concurrency的技术展示吧。 在这个游戏中,你的任务就是把自己当作Scheduler,而你需要做的就是switch context,然后尽量让两个thread互相之间锁死(deadlock)。这个可以好好学习一下。
+
-### How I REVERSE ENGINEERED GOOGLE DOCS
-
+
这个技术展示很有意思。作者发现Google Doc的所有修改记录都保存下来了,而且是精确到秒级别的。于是,我们就可以写一个程序来replay整个文档的写作过程。这个某种程度其实也可以学习别人如何修改文档的过程。这么一想,这个说不定可以作为教学工具。不过话说回来,有多少人需要精确到秒级别的修改回放呢?
-
+
diff --git a/apps/blog/content/periodics/digest-015.mdx b/apps/blog/content/periodics/digest-015.mdx
index 3b0a738..f776073 100644
--- a/apps/blog/content/periodics/digest-015.mdx
+++ b/apps/blog/content/periodics/digest-015.mdx
@@ -12,9 +12,7 @@ lang: "zh"
这一周主要是看了一些DevOps和SRE的文章和视频。有一些是从[SRE Weekly](https://sreweekly.com/)那里看到的。平时在工作的过程中学到了很多SRE相关的知识,本来以为蛮平常的,但是后来才发现这些概念在公司以外的地方还没有扩展开来。通过公司外的人来写SRE/DevOps相关的内容可以学习其他人和公司是怎么看待和实践相关的知识的。
-
-### How to sell SLOs to Engineering Directors
-
+
这篇文章讲的是如何向公司上层介绍并引进SLO的概念和指标。如果你的公司还没有使用SLO,但是你发现SLO可能会很有好处,那么这篇文章可以提供一个案例来教你策略性地说服公司上层选择使用SLO。
@@ -33,9 +31,9 @@ lang: "zh"
整体来说,我们通过SLO,把技术开发的价值与和公司商业价值的保持一致,让整个公司业务更加稳定,风险更加可控,迭代速度更加快,但又不影响客户的使用体验。但是在向领导层兜售这个概念的时候,需要考虑很多方面的影响,包括战略上的,技术上的,运营上的,等等。同时,使用SLO是一个Culture Shift,是一个对公司文化有改变的事情,所以可能需要逐步推广。但是,SLO确实有很多好处,值得考虑。
+
-### SLO Adoption at Twitter
-
+
这篇文章讲的是Twitter内部逐渐采用SLO的过程。这篇文章提到了向stakeholder介绍和使用SLO的过程中常见的一些挑战:
1. 不知道需要测量什么指标,或者如何测量这些指标(Not knowing what (and how) to measure)。
@@ -45,14 +43,14 @@ lang: "zh"
而Twitter推广SLO的重大转机在于:**把SLO跟错误预算绑定(tying SLOs to error budgets)**。所谓错误预算,是**一段时间之内**,在特定的SLO指标下,可以允许的出错时间长度。比如如果Availability SLO是99%,那么每30天可以允许7小时11分59秒的Downtime,如果Availability SLO是99.9%,那么每30天可以允许21分54秒的Downtime。如果在30天的时间里面,服务的Availability Error在预算规定的范围内,那么可以着重开发新的功能;但是如果Availability问题超过了预算,那么开发团队就需要花时间来提高服务的Availability。因此,SLO和错误预算就可以转化为用来指导工作的指标,成为Actionable Item。
那么使用SLO的好处有哪些呢?Twitter觉得有这么一些好处:
-* 不同的服务之间建立起了一个共同的语言(From a ‘distributed service zoo’ to a shared language)
+* 不同的服务之间建立起了一个共同的语言(From a 'distributed service zoo' to a shared language)
* 明确的指标给开发团队提供了恰当的背景(The right amount of context)
* 服务之间可以提供动态的负载均衡(Dynamic load balancing and load shedding)(也就是说服务直接的Load Balancing可以通过检测其他服务的SLO来决定如何引导流量)
* 容错(Graceful degradation)
+
-### Netflix's Context, Not Control: How Does it Work?
-
+
这篇文章分享了Netflix的管理哲学,集中讨论了[Netflix的管理文化](https://jobs.netflix.com/culture)(也可以对比参见[这个Slide Deck](https://www.slideshare.net/reed2001/culture-1798664))中提到的:**管理者应该给员工提供工作合适的情景而不是控制员工应该做什么**。我觉得有几个知识点是值得学习的。
@@ -63,9 +61,9 @@ lang: "zh"
我觉得国内科技公司听起来在文化上就缺乏这些点。一方面管理层不见得相信员工能作出正确的技术决策,另一方面员工也不一定能从管理层得到恰当的背景和信息。另外,当所有人都比较年轻的时候,设计出来的结果不一定好,会进一步导致管理层对员工的能力不信任。这样是非常糟糕的环境和非常糟糕的文化。
+
-### Why I've Been Merging Microservices Back Into The Monolith At InVision
-
+
这篇文章分享了为什么作者所在的团队把单一服务拆成多个Microservice,然后又为什么把多个Microservice整合回单一的服务。背后主要的原因还是Conway's Law所描述的系统设计与组织架构之间的关系:
@@ -77,23 +75,23 @@ lang: "zh"
我觉得这个案例还是很有启发性的。公司业务到底是要用单一的服务还是要拆成各种微服务,这个是取决于公司本身的组织架构的。大公司和小公司,大部门和小部门,在设计上的决策都应该是不同的。好的架构应该是符合自己团队特点,能够被自己团队最好地控制的架构。
+
-### Knightmare: A DevOps Cautionary Tale
-
+
2012年8月1日,骑士资本因为错误的软件部署,在45分钟内损失了4亿美元,而且导致了交易市场的闪崩。这个事件直接导致骑士资本破产,也给金融界的机器交易实践者上了重要一课。这个案例值得好好学习。这篇文章梳理了一下骑士资本出问题背后的事件和过程。另外[Nanex Research的这篇文章](http://www.nanex.net/aqck2/3522.html)也分析骑士资本这次闪崩造成的各种影响。机器交易这方面的风向还挺大的。
+
-### SLO — From Nothing to… Production
-
+
在这篇文章中,作者分享了他如何学习SLO以及SRE相关的概念,然后在自己的工作中从0开始部署整个SLO的设定、测量和监控的。如果是到一个没有使用SLO相关概念的工作场合,需要通过自己的工作来给提倡SLO等概念,这篇文章可以说提供了很好的教程。文章里面不但分享了作者读过的书,还分享了作者在部署过程中所使用的软件和常见的工作流程。文章提到了[The Art of SLOs](https://docs.google.com/presentation/d/1qcQ6alG_qUg3qWf733ZsDnTggwzqe4PZICrFXZ1zQZs/edit#slide=id.g75945b48fe_0_0)这个Slide Deck。这个Slide Deck更加深入地讲解了什么事SLI,SLO,SLA,并且做了一些个案分析。这个Slide Deck挺值得学习。
-## 网络学习
+
+## 网络学习
-### 基本操作
-
+
回形针团队做的一个可视化、互动式学习的项目。这个项目可以被看作是一个有趣的尝试,也确实花了不少功夫来制作神经网络相关的交互动画。尤其是整个内容都是在视频里面进行的,让我觉得这是一个很有趣的技术挑战。
@@ -101,30 +99,32 @@ lang: "zh"
如果你问我49块钱值不值,我觉得还是值的。我相信回形针这一波应该还是能赚不少钱的。
+
-### School of SRE
-
+
LinkedIn出品的SRE相关的教程。可以简单了解一下。但是我觉得可能可以优先了解一下Google的SRE的两本书。
-## 多媒体
-
+
-### DevOps Vs. SRE: Competing Standards or Friends?
+## 多媒体
+
这个视频讲了SRE和DevOps之间的关系。`Class SRE implements DevOps`这个说法还挺有趣的。DevOps更多定义的是做事的哲学和看法,而SRE定义了更多具体的指标和可执行的步骤。
+
-### class SRE implements DevOps
-
+
这个系列一共是10个视频,讲解了SRE相关的10个重要的概念。每个视频也就5分钟左右,很快就可以看完。
-## 工具、技术、展示
-
+
-### horrifying-pdf-experiments
+## 工具、技术、展示
+
这个Repo讨论了PDF支持的各种媒体,然后谈到PDF其实是支持Javascript,但是绝大部分的PDF reader都没有去实现这个API。Adobe设计的[PDF规格](https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf)有1300页,似乎现在绝大部分的PDF reader都只实现了其中很少的一部分。有意思的是,[Chrome](https://pdfium.googlesource.com/pdfium/+/chromium/2557/fpdfsdk/src/javascript/Document.cpp#258)实现了这个规格中[关于Javascript的一部分API](https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf#page=709),所以我们在Chrome里面读PDF的时候,可以读到PDF里面的Javascript程序。作者提供了一个展示:[breakout PDF](https://cdn.jsdelivr.net/gh/osnr/horrifying-pdf-experiments@master/breakout.pdf)。这个PDF只有在Chrome下面看才能看到文件中的游戏,下载下来,或者用Safari都看不到文件中的游戏。这个演示挺有意思的。
+
+
diff --git a/apps/blog/content/periodics/digest-016.mdx b/apps/blog/content/periodics/digest-016.mdx
index 5ff5d8c..2edca30 100644
--- a/apps/blog/content/periodics/digest-016.mdx
+++ b/apps/blog/content/periodics/digest-016.mdx
@@ -10,15 +10,13 @@ lang: "zh"
## 文章
-
-### DALL·E: Creating Images from Text
-
+
OpenAI介绍了最近在语言转图像的工作。效果看起来是挺不错的,因为通过语言产生的图片看起来已经比较合理了。挺有意思的一个工作。另外,Open AI写得互动文章解释真的是做的很不错。
+
-### Distributed architecture concepts I learned while building a large payments system
-
+
这是一篇内容翔实的分布式系统设计思路的high-level view的文章。文章里面介绍了分布式系统设计需要考虑的几个重要概念:
* 分布式系统一些重要的属性和要求:
@@ -36,53 +34,53 @@ OpenAI介绍了最近在语言转图像的工作。效果看起来是挺不错
这篇文章可以当作是一个不错的系统设计的参考文献。文章中还提到了一些作者觉得写得不错的文章,以下是几篇我读完之后觉得确实还可以的。
* [Eventual vs Strong Consistency in Distributed Databases](https://hackernoon.com/eventual-vs-strong-consistency-in-distributed-databases-282fdad37cf7)
* [The actor model in 10 minutes](https://www.brianstorti.com/the-actor-model/)
- * 这篇文章比较抽象,感觉看完了以后了解了一些基本设定和原则,但是具体的Actor in Action还是不太懂。文章中提到的视频[Hewitt, Meijer and Szyperski: The Actor Model (everything you wanted to know...)](https://www.youtube.com/watch?v=7erJ1DV_Tlo)讲了更多的细节,但是还是比较抽象的层面。有可能是我的经验还不够。
+ * 这篇文章比较抽象,感觉看完了以后了解了一些基本设定和原则,但是具体的Actor in Action还是不太懂。文章中提到的视频[Hewitt, Meijer and Szyperski: The Actor Model (everything you wanted to know...)](https://www.youtube.com/watch?v=7erJ1DV_Tlo)讲了更多的细节,但是还是比较抽象的层面。有可能是我的经验还不够。
* [The Amazon Builders' Library](https://aws.amazon.com/builders-library/?cards-body.sort-by=item.additionalFields.customSort&cards-body.sort-order=asc)
+
-
-### Demystifying SEO with experiments
-
+
Pinterest在2015年的时候写得一篇关于他们怎么优化Google的SEO的技术博客,这里主要是介绍他们怎么设计他们的实验框架的。这里的实验框架是用来帮助开发者和设计者更好地了解他们的更新到底是如何影响流量的。与一般根据用户流量进行A/B的方法不同,Pinterest的实验框架是把Pinterest自己的页面进行了A/B测试。他们不使用用户流量来做A/B测试的原因似乎是因为他们对流量数据没有掌控,也没办法知道搜索引擎的数据(比如哪些页面被放到了前面,哪些页面被放到了后面)。虽然我觉得现在有可能可以用Puppet等无头浏览器来试图试图解决这个问题,但是他们的方法似乎更符合他们的框架:因为Pinterest有极多的Pin Board,他们可以改变一部分的Pin Board的设计,然后保留剩下的Pin Board的设计,来对比不同设计获得的流量。这样子,实验数据就完全在他们的掌控范围之内了。
在实验框架之外,文章还讲了测量实验结果的指标(比如,用Expt - Base的diff,而不是直接用Expt页面的净增长),一度让我觉得有点像当年分析脑电波信号——事件之前现对齐,然后对实验条件与控制条件之间做差。还有一些具体的案例,可以稍微看一下,挺有意思的。感觉这些实验,本质上就还是实验心理学+统计那一套。
-## 网络学习
-
-
-### Go 语言高性能编程
+
+## 网络学习
+
极客兔兔整理的一系列Go语言Performance Programming相关的内容。各种语言下的Performance Programming都是我应该好好学习的,因为这些内容和我的日常工作相关。公司也有一些相关的材料,但是因为我一直没有实际操作过,所以学到的知识都有一些隔靴搔痒的感觉。另外,我想着要学Go语言很久了,但是一直也没有正式开动。极客兔兔也有一个[Go语言入门的教程](https://geektutu.com/post/quick-golang.html),有时间可以参考一下。
+
-### A half-hour to learn Rust
-
+
这是一个Rust的教程,有一点像[Learn X in Y minutes](https://learnxinyminutes.com/)那个系列。我唯一想说的是,这个绝对不止半个小时。有一些语法结构还挺不好懂的。
说到Rust,这个星期的另外一个学习内容是[Rust Design Patterns](https://rust-unofficial.github.io/patterns/intro.html)。Rust的东西真的还是挺多的,尤其是这些内容基本上都是社群自己创造的。我也是挺佩服的这个充满激情的社群的。
-## 多媒体
-
+
-### Raspberry Pi Weather Station
+## 多媒体
+
这个视频讲解了如何用Raspberry Pi来做一个小的家用气象站,实时记录温度,气压,和湿度。我觉得这个东西对我可能蛮有帮助的,因为家里不同的房间里面的温度经常不一样,而且晚上有时候温度也比我的温度表设定的温度要低。现在如果晚上特别冷的话,我可能会咳嗽或者有可能会感觉气短(似乎是与过敏性哮喘有关),所以如果能够有一个更加准确的温度、湿度、气压的度数的话,更容易帮我了解我的健康状况与周围环境之间的关系。
我在家里有一个Raspberry Pi 3,但是我不确定这个机器有WI-FI。如果没有WI-FI的话,我就不能随意拿着Raspberry PI在不同的房间走动了。我看整个项目其实很容易,主要是需要买相关的元件就好了。有时间真的应该做一做这种事情。
-## 工具、技术、展示
-
+
-### JAM技术栈
+## 工具、技术、展示
+
随着各种网络服务和技术的发展,现在的网络应用开发已经有了很多新的趋势,比如Microservice, Serverless等等。JAM是Netfliy所推广的一种开发趋势,整个技术栈使用Javascript + API + Markup语言就搞定。基本思路是用静态站点生成器(Static Site Generator,比如Hugo,Next.js, Jekyll)生成主要的网页内容,并部署在CDN上,服务器端相关的功能就直接通过Javascript对接各种API服务,比如Stripe这种支付服务。现在SaaS产业的兴起以及API经济的兴起已经为这种开发趋势提供了很好的基础设施,接下来就是看人们能够通过这套东西来做什么了。这种思路,将来开发基本上就是前端开发了。剩下的后端开发,都交给了大公司。我觉得对于中小型的公司和个人来说,这个趋势还挺好的。
JAMStack这个网站就是用来分享这方面的资源和知识,并且建立一个开发社群。确实跟Netfliy自身的业务也是息息相关。
与此同时,如果你仍然对后端开发感兴趣,[Micro](https://m3o.com/)提供了一个不错的,简单的框架。整个框架用的是gRPC的那一套,看起来还挺简单,挺直观的。
+
+
diff --git a/apps/blog/content/periodics/digest-017.mdx b/apps/blog/content/periodics/digest-017.mdx
index 4ab8a73..8a6f53e 100644
--- a/apps/blog/content/periodics/digest-017.mdx
+++ b/apps/blog/content/periodics/digest-017.mdx
@@ -10,28 +10,25 @@ lang: "zh"
## 文章
-
-### EState Of Javascript 2020
-
+
这是一个关于2020年Javascript行业内的问卷调查,询问和总结了开发者的开发经验,喜爱的开发环境和工具,以及对于行业发展的开发。整个调查结果是以互动的方式展现出来的,我也学到了不是新东西。前端开发真的是越来越复杂了。
+
-### Machine Learning: The Great Stagnation
-
+
作者在这篇文章里面说了自己对机器学习这个行业近年发展的看法。文章前面一半有一点悲观的色彩,戳破了很多业界浮躁的泡沫,但是后一半还是总结了一些最近的发展。但是整体看来,这是一篇相当不错的对于行业历史和现状的一些总结。我也在里面学到了不少新的知识。这篇文章可以当作是一篇还不错的对于行业的overview。
+
-### Clang vs Other Open Source Compilers
-
+
这个文档记录了苹果为什么当年选择在Clang上投入大量的人力物力,而不是选择使用其他的编译器。虽然Clang越来越大,也越来越慢,但是有一些功能确实比GCC好不少,比如他的extensibility,包括衍生出来的一系列clang-tidy工具。当年Google也是因为Clang的很多优势选择了Clang,放弃了GCC(我记得有些优势包括:编译出的程序更小,编译更快,调试信息更友好等)。Chandler等好几个人也是因为这个巨大的迁移以下成为了公司核心语言组的重要领导。我还挺好奇这样的迁移需要多大的成本的。我知道肯定不容易。
+
-
-### How to Stop Endless Discussions
-
+
这一篇是在讲技术文化中如何找到一种方式获得技术反馈,但是又不纠缠于无止境的技术反馈。这里提到的方法就是建立Request For Comments (RFC)机制,这个机制有三个重要的特性:
1. 一个RFC过程是某人针对某个主题写一个文档而开始的。所有的讨论都是给予这个提案文档的。
@@ -40,62 +37,64 @@ lang: "zh"
作者认为这个过程很有帮助,一方面是让提案的人通过书写的方式把自己的思维有条理地表达出来,另一方面是促使和鼓励别人给文档提供反馈,并通过这种方式展开讨论。这样,对问题解决方案的讨论就会变得可以控制。由于有时间窗的要求,这样的讨论也会有一定的时间效力。RFC这个方式在Python委员会、互联网委员会等地方都在实行,感觉是个比较正式的创作和审阅Design Doc的方式。
-## 网络学习
-
+
-### Build Your Own Text Editor
+## 网络学习
+
这是一个相当详细的教程,教你怎么写一个简单的文本编辑器。虽然这个文本编辑器不是Graphic UI,但是功能还是可以的。这个项目,我觉得,是非常值得过一遍,来了解一些文本编辑器的基本组成部分的。
+
-### Real World Haskell
-
+
Haskell的一本教材,在网上已经完全开源了。我记得我还买过一本1000+页的Haskell教材,但是也一直没怎么看过。有点伤感。
+
-### Foundations of Embedded Systems
-
+
这是一个嵌入式系统的课程。有很多资料是作为视频放在了网上,但是也有很多资料是当时的直播,所以现在看不到了。
+
-### 500 + Artificial Intelligence Project List with Code
-
+
这是一个有点神奇的关于AI/机器学习的集子。这个集子的每个子项目都是一个集子,所以内容很多。比较好的一点是每一个集子本身都有代码,可以用来学习。当然,拿到这个集子本身没有什么用,最重要的还是从这个集子中的内容真正学到Coding。
-## 多媒体
+
+## 多媒体
-### The Art of Code - Dylan Beattie
+
+这是一个非常有意思,又很鼓舞人心的演讲。整个演讲没有讨论太多的技术细节,但是分享了很多演示和例子。演讲的主题既包括了"编程的艺术",也包括了"编程何以可能"这样的问题,以及"编程的边界在哪里"这样的探索。莎士比亚程序语言和摇滚明星程序语言都是非常好的例子。而那个神奇的蛋糕语言,也是很有意思的双关:一个蛋糕的菜谱,既是可以使用的菜谱,也可以被编译成Hello World。这背后所涉及的创造力,以及创造的原则,都非常有意思。看完这个视频的人,一定会觉得编程是一件很有意思的事情吧。
-这是一个非常有意思,又很鼓舞人心的演讲。整个演讲没有讨论太多的技术细节,但是分享了很多演示和例子。演讲的主题既包括了“编程的艺术”,也包括了“编程何以可能”这样的问题,以及“编程的边界在哪里”这样的探索。莎士比亚程序语言和摇滚明星程序语言都是非常好的例子。而那个神奇的蛋糕语言,也是很有意思的双关:一个蛋糕的菜谱,既是可以使用的菜谱,也可以被编译成Hello World。这背后所涉及的创造力,以及创造的原则,都非常有意思。看完这个视频的人,一定会觉得编程是一件很有意思的事情吧。
+
## 工具、技术、展示
-
-### Game of 2020
-
+
这个小游戏把2020年一年发生的大事件总结长了一个平面横版小游戏。还挺有意思的。玩完之后,确实让人感叹不容易。这个游戏的设计我觉得挺巧妙的。
+
-### Best of show - abuse of libc
-
-
-这是27届“国际C程序迷惑大赏”(The International Obfuscated C Code Contest)的获奖作品,展示了`printf`是怎么变成图灵完备的,然后整个code展示了如何用一条`printf`的语句做出来一整个tic-tac-toe的游戏。老实说,这个建构过程挺难的,尤其是解释中提到从直接建构`OR`和`NOT`两个逻辑操作开始,我觉得这个复杂性就难以捉摸了。
+
+这是27届"国际C程序迷惑大赏"(The International Obfuscated C Code Contest)的获奖作品,展示了`printf`是怎么变成图灵完备的,然后整个code展示了如何用一条`printf`的语句做出来一整个tic-tac-toe的游戏。老实说,这个建构过程挺难的,尤其是解释中提到从直接建构`OR`和`NOT`两个逻辑操作开始,我觉得这个复杂性就难以捉摸了。
-### Advent of Code 2020
+
+
Peter Norvig给出的[Advent of Code 2020](https://adventofcode.com/2020)的解。要不是被引导到了这个Notebook,我都不知道有[Advent of Code 2020](https://adventofcode.com/2020)这么个游戏。Peter Norvig的代码确实是非常值得学习的。他有很多Python的用法都让我觉得眼前一亮。我顺着这个Notebook看了一下他其他的Notebook,感觉他所有的code都值得研究学习一遍。
+
-### The Pile
-
+
这是Eleuther.ai提供的一个800G的文本数据集,可以用来做NLP方面的机器学习工作。
+
+
diff --git a/apps/blog/content/periodics/digest-018.mdx b/apps/blog/content/periodics/digest-018.mdx
index e29ad10..c95d176 100644
--- a/apps/blog/content/periodics/digest-018.mdx
+++ b/apps/blog/content/periodics/digest-018.mdx
@@ -11,36 +11,58 @@ draft: true
## 文章
+
-### Edsger Dijkstra: The Man Who Carried Computer Science on His Shoulders
+
+
+这篇文章讲述了如何制作一个简单的可探索的交互系统的教程,值得学习
-https://www.dougengelbart.org/content/view/138
-- 这篇文章讲述了如何制作一个简单的可探索的交互系统的教程,值得学习
+
+
-- https://www.zebrium.com/blog/using-gpt-3-with-zebrium-for-plain-language-incident-root-cause-from-logs
-- https://letsencrypt.org/2021/01/21/next-gen-database-servers.html
-- https://blog.cloudflare.com/soar-simulation-for-observability-reliability-and-security/
-- https://blog.coinbase.com/brief-incident-post-mortem-january-6-7-2021-441f6224da93
+
-[I wasted $40k on a fantastic startup idea](https://tjcx.me/p/i-wasted-40k-on-a-fantastic-startup-idea)
+
+
+
+
+
+
+
+
+
+
+
+
+
这篇文章讨论的是一个好主意和一个好business之间的重要差别。这篇文章最重要的就是这一段:
+
"To succeed, an offering must create value for all entities involved in the exchange—target customers, the company, and its collaborators."
- Strategic Marketing Management
All stakeholders. You can't just create value for the user: that's a charity. You also can't just create value for your company: that's a scam. Your goal is to set up some kind of positive-sum exchange, where everyone benefits, including you. A business plan, according to this textbook, starts with this simple question: how will you create value for yourself and the company?
-[Diffing](https://florian.github.io/diffing/)
+
+
+
+
这篇文章讲Diffing的算法,还做了一个网络演示,写得挺不错的。这个网络前端的展示值得学习以下。
+
+
## 网络学习
## 多媒体
-https://yahnd.com/theater/r/youtube/Xty-gzzIkBc/
+
+
这个讲了Waffle House这个连锁店是如何应对灾难的,以及他们的设计能够在哪些地方启示软件工程师。
+
+
+
## 工具、技术、展示
diff --git a/apps/blog/content/periodics/digest-019.mdx b/apps/blog/content/periodics/digest-019.mdx
index c1d7c49..5810df4 100644
--- a/apps/blog/content/periodics/digest-019.mdx
+++ b/apps/blog/content/periodics/digest-019.mdx
@@ -11,19 +11,34 @@ draft: true
## 文章
-[Now What?](https://pni.princeton.edu/john-hopfield/john-j.-hopfield-now-what)
+
John Hopfield的自述,找科学问题很重要。
-[Implementing Service Level Objectives: A Practical Guide to Slis, Slos, and Error Budgets](https://bookshop.org/books/implementing-service-level-objectives-a-practical-guide-to-slis-slos-and-error-budgets/9781492076810)
+
+
+
+
+
+
+
+
+
-[The Checklist Manifesto: How to Get Things Right](https://bookshop.org/books/the-checklist-manifesto-how-to-get-things-right/9780312430009)
## 网络学习
-[StaffEng](https://staffeng.com/)
-[Linux Command](https://linuxcommand.org/)
+
+
+
+
+
+
+
+
## 多媒体
## 工具、技术、展示
--[Bash scripting cheatsheet](https://devhints.io/bash)
+
+
+
diff --git a/apps/blog/content/periodics/digest-020.mdx b/apps/blog/content/periodics/digest-020.mdx
index bc62b14..e6e3e1a 100644
--- a/apps/blog/content/periodics/digest-020.mdx
+++ b/apps/blog/content/periodics/digest-020.mdx
@@ -11,59 +11,58 @@ draft: true
## 文章
-### A visual guide to SSH tunnels
-
+
这个所谓的Visual Guide,我看了一遍感觉还是没有完全看懂。感觉我也没有完全把指令,行为,视觉这三者之间联系起来。可能还是因为我SSH相关的知识不太了解吧。
+
-### ARCHITECTURE.md
-
-
-这篇文章是推荐在一个REPO里面(比如一些大的开源项目的REPO里面)写一个Architecture的文档,提纲挈领地描述一下整个项目的架构,给一个“一万米高空”的鸟瞰图,清晰地划分不同结构之间的边界与关系,方便其他开发者快速有效地理解项目的框架。另外,在这个Architecture文档里面,也可以写一下重要的目录结构、模块、类型、设计中的假设和不变量(invariants)。
+
+这篇文章是推荐在一个REPO里面(比如一些大的开源项目的REPO里面)写一个Architecture的文档,提纲挈领地描述一下整个项目的架构,给一个"一万米高空"的鸟瞰图,清晰地划分不同结构之间的边界与关系,方便其他开发者快速有效地理解项目的框架。另外,在这个Architecture文档里面,也可以写一下重要的目录结构、模块、类型、设计中的假设和不变量(invariants)。
-### What is Complexity Science?
+
+
-
-这是一个讲解“Complexity Science”的一个页面,这个页面主要是提到了Complexity Science这个研究领域的一些特点,一些例子和相关的重要概念,可以当作是一个非常粗浅的概述。内容的话,其实看[这个PDF](https://complexityexplained.github.io/ComplexityExplained.pdf)要快很多。
+这是一个讲解"Complexity Science"的一个页面,这个页面主要是提到了Complexity Science这个研究领域的一些特点,一些例子和相关的重要概念,可以当作是一个非常粗浅的概述。内容的话,其实看[这个PDF](https://complexityexplained.github.io/ComplexityExplained.pdf)要快很多。
这个页面配合了不少可探索的解释(Explorable Explanation),但是整体读起来信噪比比较低,而且那些可探索的解释也没有很好地区分重要的内容和细节。我翻看了一下代码,好像主体都还是用D3写的,再一次说明学习D3的重要性。更多相关的可探索解释可以在[Complexity Explorables](http://www.complexity-explorables.org/)上看到。
-## 网络学习
+
+## 网络学习
-### The Missing Semester of Your CS Education
-
+
这个课程,和它的老版本([Hacker Tools](https://hacker-tools.github.io/lectures/))是MIT开的一个讲计算机基本工具使用的短课程,内容很实用,值得刷一遍。
+
-### Great Practical Ideas in CS
-
+
这个课程可以看作是上面👆课程的CMU版本。内容有重叠的部分,也有不同的部分,也可以刷一遍。
-## 多媒体
+
+## 多媒体
-### Illuminating hyperbolic geometry
-
+
这个视频讲解了如何将球面信息投射到2D平面。比如在制作地图的时候,我们就需要把地球表面的信息投射到2D平面。现在很多地图的制作都会扭曲各个部分的实际大小([The True Size](https://thetruesize.com/)这个网站能够清晰地让你看到一个地区的面积大小在地图的不同位置会被扭曲成多大)。这个视频讨论了各种投射的方式——对应的是各种双曲线坐标系转换的方式,以及如何在现实生活中利用3D物体和光来呈现和解释这些不同的坐标转换/投射的方式。
+
-
-### The PEP 8 Song
-
+
这是一首唱出PEP 8主旨的歌,非常好听,内容也非常接地气,听完以后我觉得我可以写更好的Python了!
-## 工具、技术、展示
-
+
-### Open Street Map
+## 工具、技术、展示
+
这个是现在一个重要的开源地图项目,很多公司,比如Facebook,Lyft等等,都会使用这个开源的地图。原因之一应该是不用给Google或者Apple巨额的费用吧。作为开发者,其实可以考虑用这样的地图试一试。这个地图的质量也不见得比Google或者Apple的地图质量差。
+
+
diff --git a/apps/blog/content/periodics/digest-021.mdx b/apps/blog/content/periodics/digest-021.mdx
index 3ab77c1..06205c8 100644
--- a/apps/blog/content/periodics/digest-021.mdx
+++ b/apps/blog/content/periodics/digest-021.mdx
@@ -11,20 +11,50 @@ draft: true
## 文章
-https://willgallego.com/2021/02/15/practiced-humility-in-retrospectives/
+
-https://ably.com/blog/engineering-dependability-and-fault-tolerance-in-a-distributed-system
+关于如何在回顾会议中保持谦逊的态度。
+
+
+
+
+
+探讨如何设计能够检测和修复大规模故障的系统,特别关注分布式环境中的部分和间歇性故障。
+
+
+
+
+
+Meta的"Fix Fast"计划——一个跨职能的工作,旨在帮助工程师在开发过程中更早地检测和解决代码回归问题。
+
+
-https://engineering.fb.com/2021/02/17/developer-tools/fix-fast/
## 网络学习
-https://www.khanacademy.org/humanities/hass-storytelling/storytelling-pixar-in-a-box?utm_source=hackernewsletter&utm_medium=email&utm_term=learn
+
+
+
+Khan Academy与Pixar合作推出的免费在线课程,教授故事讲述的艺术。通过互动练习,学习者可以分析他们喜爱的电影中的情节、世界和角色,并开始培养讲故事的能力。
+
+
## 多媒体
## 工具、技术、展示
-https://github.com/dastergon/awesome-sre#culture
+
+
+精选的SRE(站点可靠性工程)资源列表,特别关注SRE文化方面的内容。
+
+
+
+
+
+收集了各大科技公司的测试实践和方法,帮助了解业界的测试策略。
+
+
+
+
-https://github.com/abhivaikar/howtheytest
+收集了各大科技公司的SRE实践和方法,展示不同组织如何实施站点可靠性工程。
-https://github.com/upgundecha/howtheysre
+
diff --git a/apps/blog/content/periodics/digest-022.mdx b/apps/blog/content/periodics/digest-022.mdx
index f79c5ac..bde8120 100644
--- a/apps/blog/content/periodics/digest-022.mdx
+++ b/apps/blog/content/periodics/digest-022.mdx
@@ -9,55 +9,102 @@ lang: "zh"
draft: true
---
+import { DigestEntry } from '@/components/editorial'
+
## 文章
-https://dropbox.tech/infrastructure/atlas--our-journey-from-a-python-monolith-to-a-managed-platform
+
+
+
+
+
+
+
+
+
+
+
+
+
-https://dropbox.tech/application/speeding-up-a-git-monorepo-at-dropbox-with--200-lines-of-code
+
-https://dropbox.tech/infrastructure/courier-dropbox-migration-to-grpc
+
-https://dropbox.tech/infrastructure/how-we-migrated-dropbox-from-nginx-to-envoy
+
-https://engineering.fb.com/2021/02/23/data-infrastructure/silent-data-corruption/
+
-https://engineering.mercari.com/en/blog/entry/20210126-retry-pattern-in-microservices/
+
-### Maganize
-https://increment.com/reliability/
+### Magazine
+
+
+
+
#### Org mode
-https://orgmode.org/quickstart.html
-https://orgmode.org/worg/
+
+
+
+
+
+
+
+
+
-https://www.orgroam.com/manual.html
-https://github.com/org-roam/org-roam
+
-#### workflow
+
-http://kieranhealy.org/files/misc/workflow-apps.pdf
+
+
+#### Workflow
+
+
+
+
## 网络学习
-https://www.coursera.org/learn/money-banking?ranMID=40328&ranEAID=4246lDpjhco&ranSiteID=4246lDpjhco-JI.AaxkEXG7e.rc3FbW7Yw&siteID=4246lDpjhco-JI.AaxkEXG7e.rc3FbW7Yw&utm_content=10&utm_medium=partners&utm_source=linkshare&utm_campaign=4246lDpjhco
+
+
+
+
+
+
+
-https://www.coursera.org/learn/learning-how-to-learn?ranMID=40328&ranEAID=4246lDpjhco&ranSiteID=4246lDpjhco-E90hMZO6RrPzE2dFVqBzvQ&siteID=4246lDpjhco-E90hMZO6RrPzE2dFVqBzvQ&utm_content=10&utm_medium=partners&utm_source=linkshare&utm_campaign=4246lDpjhco
+
-https://www.coursera.org/learn/nand2tetris2?ranMID=40328&ranEAID=4246lDpjhco&ranSiteID=4246lDpjhco-.ZJF3u.N5eKU67TUfEAqIA&siteID=4246lDpjhco-.ZJF3u.N5eKU67TUfEAqIA&utm_content=10&utm_medium=partners&utm_source=linkshare&utm_campaign=4246lDpjhco
+
-https://www.coursera.org/specializations/fpga-design?ranMID=40328&ranEAID=4246lDpjhco&ranSiteID=4246lDpjhco-L3Kboo18CH_JC7GqzQzTcw&siteID=4246lDpjhco-L3Kboo18CH_JC7GqzQzTcw&utm_content=10&utm_medium=partners&utm_source=linkshare&utm_campaign=4246lDpjhco
+
-https://www.coursera.org/learn/build-a-computer?ranMID=40328&ranEAID=4246lDpjhco&ranSiteID=4246lDpjhco-b7yD14chG3XkMlKKThVKVA&siteID=4246lDpjhco-b7yD14chG3XkMlKKThVKVA&utm_content=10&utm_medium=partners&utm_source=linkshare&utm_campaign=4246lDpjhco
+
+
+
+
+
## 多媒体
## 工具、技术、展示
-https://github.com/rougier/elegant-emacs
+
+
+
+
+
+
+
+
+
-https://github.com/emacs-tw/awesome-emacs
+
-https://github.com/hlissner/doom-emacs
+
-https://www.shortcutfoo.com/app/dojos/emacs
+
diff --git a/apps/blog/content/series/reading-digest-zh.mdx b/apps/blog/content/series/reading-digest-zh.mdx
new file mode 100644
index 0000000..3186975
--- /dev/null
+++ b/apps/blog/content/series/reading-digest-zh.mdx
@@ -0,0 +1,133 @@
+---
+title: '技术阅读笔记'
+description: '这个集合收集了我的技术阅读笔记。这些笔记记录了我在工作和学习过程中阅读的各种技术文章、教程、和多媒体内容。每一期笔记都包含了我对文章的总结和思考。'
+date: '2020-09-25'
+category: 'writing-series'
+topics: [technical]
+lang: 'zh'
+itemCount: 22
+---
+
+## 2021
+
+这一年的笔记涵盖了SRE/DevOps实践、分布式系统设计、机器学习发展现状、以及各种编程语言和工具的学习。
+
+
+
+
+
+
+
+
+
+
+
+
+## 2020
+
+从鸟类大脑认知功能到创业公司失败分析,从字体渲染复杂性到COBOL代码库困境,这一年的笔记记录了我对技术、科学、和创业的广泛阅读。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/lib/periodics.ts b/apps/blog/lib/periodics.ts
index 0b434b3..5196a10 100644
--- a/apps/blog/lib/periodics.ts
+++ b/apps/blog/lib/periodics.ts
@@ -109,8 +109,8 @@ export function getPeriodicBySlug(slug: string): Periodic | null {
try {
const frontmatter = validatePeriodicFrontmatter(data);
const stats = readingTime(content);
- // Extract table of contents from h2 and h3 headings
- const toc = extractHeadings(content, { minLevel: 2, maxLevel: 3 });
+ // Extract table of contents from h2 headings only (top-level categories)
+ const toc = extractHeadings(content, { minLevel: 2, maxLevel: 2 });
return {
slug,