技术碎片

前天记录了《鹤老师:真正的知识是体系 - Jeff Tian的文章 - 知乎 》,分享了鹤老师的碎片是垃圾的观点,这一点让我纠结了很久……

我回顾自己写的文章,正是碎片本身。虽然,我被他的碎片是垃圾的观点说服了,但为了维持内心的秩序,我做了如下补充。

矛盾的碎片是垃圾

我在前天也说了,并不是所有的碎片都是垃圾,碎片中也有珍珠。但是互相矛盾的碎片,构不成体系,对人来说,就是垃圾。

我写的文章,偏技术细节,多是程序。程序是要跑起来的,尽管只是片段,但都是在线运行着的,它们虽然不完美,但绝对不矛盾。虽然在迭代,但每次都是在前面的基础上增强,而不是推翻原有的。

技术碎片

所以,我写的碎片,是属于技术碎片,它们绝对不是垃圾。在技术层面,什么碎片是垃圾呢?注释!我见过不少垃圾注释,互相矛盾,或者误导读者。

但是可以运行的代码,不能说垃圾,只能说可以改进。

TDD

尤其是测试驱动开发,通过可以执行的自动化测试用例,来保证代码正确工作。

测试代码的价值

很多人在直觉上认为功能实现代码更重要,测试代码不重要。但是实际上可能正好相反,最近正好有一个活生生的例子说明这一点,我最近参与了一个我非常陌生的项目,无论是领域、还是编程语言,都不熟悉。

最近做了一个功能,上到了测试环境,测试通过。但是代码审核,还在进行中。到最终得到审核通过,差不多过去了一个月的时间。我看了一下,最终的功能实现代码,和第一版,想去甚远,简直天差地别。然而,第一版写的自动化测试用例,一个没改。从这个角度上讲,第一版的实现代码,没有什么价值,已经完全不存在了,然而,第一版的测试代码坚挺地合进了主分支,并将长期存在。

image.png

碎片化学习仍然是很好的方式

尽管鹤老师对于碎片非常不屑,但我认为在技术学习方面,碎片化学习仍然非常有价值。第一是现实来讲,总是系统化学习,做不到。第二是我的个人经验,特别在技术方面,系统地学习对我来说感觉特别难,但是在碎片时间学习一小块技术碎片,不仅容易,而且持续地长期进行碎片化学习,有一种拼图的快乐。

为了坚定技术碎片是好的碎片的想法,我将自己的公众号菜单名称修改成了“技术碎片”:
image.png

今天的碎片

以上是我内心的小九九,今天要记录的细节不多,但我认为还是有价值。已经牢牢构建了整个 OAuth 2.0 与 OIDC 体系的大佬,请直接略过。

今天使用 IdentityServer 对接一个新的客户端(编号为 4),碰到了不允许使用 openid scope 的错误,导致该应用程序不能正常登录。我去 ClientScopes 数据库里查询,果然这个新加的客户端,没有配置任何允许的 scope。

这没什么,我立即加上了,令人不解的问题来了,仍然报该客户端不允许使用 openid scope!

image.png

可是我反复确认,已经给它加上了 3 个 scope: openid、email 和 profile。

解决

最后,通过去掉了该客户端的“client_credentials”授权类型,只保留了 authorization_code 授权类型,解决了这个问题,该客户端可以正常登录了。
image.png

后续

今天相当于是临时绕过了这个问题。对于这个问题的产生和解决,其实认识并不系统也不深刻,因为该客户端在登录时,指定了 authorization_code 的授权流程,不应该出现这个问题。虽然不明所以,但是现在起码它能工作了!在这个能够正常工作的前提下,后面再继续研究根因吧!

image.png