未央花博客

周报 #1 - Google 是如何防止别人冒充 Google 的; 简约而不简单,复杂未必高明;你不知道的 tsconfig;

周报 #1 - Google 是如何防止别人冒充 Google 的; 简约而不简单,复杂未必高明;你不知道的 tsconfig

本系列文章的初心是记录我阅读英文文章的过程,同时也是为了更好的监督自己学习,最终打算采用这类似周报形式来分享出来,关于内容我会尽量挑选一些有价值的文章来分享。

希望这些内容能为你们带来一些收获。

有关 TLS/SSL 证书的一切

All I Know About Certificates -- Certificate Authority | PixelsTech

All I Know About Certificates -- Clients | PixelsTech

All I Know About Certificates -- Websites | PixelsTech

在建立网站连接时,证书的作用常被忽略。

当我们访问一个网站时,最熟悉的过程可能就是「三次握手,四次挥手」。个人觉得出现这个现象的原因有:一方面是大学教材比较旧没有这些内容,另一方面可能是证书虽然很重要,但在这个过程中只是起验证作用,其创建证书的流程并没有包含在里面。

上述系列文章帮助理解 CA、客户端、网站三者在 TLS/SSL 连接中扮演着怎样的角色,以及证书是如何解决一些问题的:Google 是如何防止别人冒充 Google 的,证书为什么会频繁出问题等等。

提示:这系列的文章难度很低,不涉及数学内容,最多就是几个 openssl 命令,篇幅较长,读者可以打开一瓶啤酒,慢慢阅读。想更不动脑的,更有中文 原文 支持阅读。

另外,如果想对从零开始创建证书以及想详细探索证书内容的读者,可以阅读这篇文章: Exploring TLS certificates and their limits - 0x00,作者在探索过程中总想着做一些「疯狂、有趣」的事情,这可能也就是「苦中作乐」来保持自己的活力吧。

简约是优点,但复杂化更被追崇?

Simplicity is An Advantage but Sadly Complexity Sells Better

The More Features You Add...

有时我们听到过论文投稿因为过于简单被拒,职位晋升因为工作缺乏复杂性而被否决。我认为可以引用下面这段话解释:

“Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better.” — Edsger Dijkstra

「复杂」常被认为是努力、工作量和功能多的象征,很多人因此追求复杂化,但正是由于这种想法让我们陷入了另一种处境:复杂可以更能体现自己优势。最终这让我们陷入了一种「复杂性偏见」中。

简单与复杂之间,人们总是倾向于选择复杂,因为复杂总给人感觉更高级,或者让人误以为更高级。

通常人们在未使用一个软件之前,往往根据功能数量来判断软件质量。

简约并不意味着工作量少,往往需要付出更多的努力。其实很多时候我们想要表达的是我们为了解决问题付出多少努力,但你应该追寻用合适的方式表达出解决问题的工作量,而不是盲目的追求复杂化。

尝试将复杂的问题简单化,复杂的系统更应该用简单的模块系统。

我们更应该关注问题的复杂性,而不是关注解决方案的复杂性。

tsconfig 中你不知道的 include 和 references

One Thing Nobody Explained To You About TypeScript - kettanaito.com

这篇文章讲的案例并不是你从来没听说过,也很可能永远用不上的臆想出来的角落案例。恰恰正相反,这是每个 Ts 开发者会经常直接与它交流的案例。

includereferences 都涉及到 Typescript 编译器对「源文件」(开发者编写的 ts 文件)的可见性,但他们是用不同的方式做到这一点。

include

  • include, controls which files are _affected_ by this configuration;

如果 test 目录没有单独的配置文件,而像下面的 include 包含了 test 目录,这样测试框架的 vitest 的类型定义就会泄漏到 src 目录下,对于 src 来说这是一些「幽灵类型定义」。

// tsconfig.json

{
  "compilerOptions": {
    "types": ["vitest/globals"]
  },
  "include": ["src", "test"]
}

所以,正确的操作是需要多个 configuration。

# The source files configuration.
- tsconfig.src.json

# The build configuration.
- tsconfig.build.json

# Configuratin for integration tests.
- tsconfig.test.json

references

  • references, controls which files are _visible_ to this configuration but not affected by it.

有时候我们需要再 test 下引用 src 下的文件用于更好的测试,同时需要 test configuratin 又不会影响 src 的源文件,这个时候就需要 references 属性了.

// tsconfig.test.json
{

  "extends": "./tsconfig.json",
  "include": ["./tests"],
  "references": [{ "path": "./tsconfig.src.json" }],
  "compilerOptions": {
    "composite": true,
    "target": "esnext",
    "module": "esnext",
    // Include test-specific types.
    "types": ["@types/node", "vitest/globals"]
  }
}

具体的实践项目,Vite 就可以作为一个很好的案例。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »