每日博客阅读 2023-11
前言
之前也有看博客的习惯,不过不是周期性的,也没有任何记录。前两天看到鱼皮的视频,遂决定用这个页面记录我每天看的博客,也方便日后查询。
2023-11-24
专家社区的演变
https://lcamtuf.substack.com/p/the-evolution-of-expert-communities
这篇文章描述了社群,社区的演变历史,结合我个人在校计协的经历,感觉非常有感触。社区从开始-发展-兴旺-出问题-没落的过程,我算是走了一大半
摘抄部分周刊的内容:
第一阶段:社区成长期。
共同的兴趣爱好让一小群用户聚在一起,所有人充满热情,在网上交换意见、分享知识。新人受到热烈欢迎,并得到耐心指点。
第二阶段:社区流行期。
加入社区的新成员快速增长,总是提一些相同的初级问题。老成员不断回答同样的问题,感到疲惫不堪,也非常无趣。有些人开始离开。
第三阶段:社区规范期。
为了避免讨论质量的下降,老成员开始制定一套详细的社区规范,以及冗长的常见问题解答。
但是,新人从不认真阅读,有些人还认为这些规范令人不满或难以理解。于是,成员之间的冲突发生了,管理社区的核心成员对异议的容忍度下降,不同意见的人往往被赶走,社区发生分裂。
第四阶段:社区滑坡期。
新成员开始变少,社区逐渐冷清,大家热烈参与的话题越来越罕见,一些长期成员开始流失。
第五阶段:社区终结期。
社区陷入停滞,新成员和新内容都停止了增长,显得非常萧条,所用的软件平台也过时了。最后,只有少数彼此认识已久的成员还在,偶尔冒泡,聊一些无关的生活感想。
2023-11-26
原子化真的是现代前端 CSS 的救星吗
https://juejin.cn/post/7263049551136636983
这篇文章介绍了 2 常用的前端 CSS 原子化方案
- Tailwind CSS
<!-- 编码时在dom中直接写class名,快速实现样式 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href="/dist/output.css" rel="stylesheet" />
</head>
<body>
<h1 class="text-3xl font-bold underline">Hello world!</h1>
</body>
</html>
- UnoCSS
UnoCSS 是 Tailwind CSS 的变种,使用元素属性来定义样式,不过需要在编译时进行转换,要搭配 vite 使用
<!-- 将冗长的 calss 按类型区分,更方便阅读理解 -->
<button
class="bg-blue-400 hover:bg-blue-500 text-sm text-white font-mono font-light py-2 px-4 rounded border-2 border-blue-200 dark:bg-blue-500 dark:hover:bg-blue-600"
>
Button
</button>
<!-- 改变为 -->
<button
bg="blue-400 hover:blue-500 dark:blue-500 dark:hover:blue-600"
text="sm white"
font="mono light"
p="y-2 x-4"
border="2 rounded blue-200"
>
Button
</button>
2023-11-27
如何使用 AI 生成你自己的画像
https://www.shruggingface.com/blog/self-portraits-with-stable-diffusion-and-lora
这篇博客教你使用一些框架和技术,结合 AI 绘画模型,来生成准确度非常高的自画像。(区别与以图生图)
我会考虑使用这个技术为我生成一些自画像,不过这需要时间
什么是单元测试?为什么要做单元测试?
一直对单元测试不太懂,因为平时都是直接运行看报错的或者打 log 的。认为测试应该是在规范的大规模开发中用到的东西。
今天看到这篇文章,对单元测试有了一些了解。
单元测试是指对软件中的最小可测试单元进行检查和验证。在 Node.js 中,这些单元通常是函数、类或模块。单元测试的目的是确保代码的每个单元都按预期工作。(爱来自 Copilot)
单元测试用处:
- 在做 API 接口开发的 hi 后,可以在代码种直接模拟调用接口,而不是再去打开一个 apifox 或者 postman 来测试接口
- 可以对函数或者功能做更详细的测试,而不是简单的运行看报错,并在代码中打 log
我理解到的就这些
参考资料:
- Node.js 单元测试 -- 测试工具篇 | 掘金
- CHATGPT
在写 Node.js 代码时,使用单元测试框架或语法是非常有必要的。单元测试是提高代码质量的一个必要手段,也能够最大限度地减少对旧有功能的破坏 1。
以下是单元测试的主要作用:
验证代码的正确性:对于各种可能的输入,一旦测试覆盖,都能明确它的输出 1。 判定代码的改动是否影响已确定的结果,避免个人协作开发中修改代码的时出错 1。 对于 API 升级,可以很好地检查代码是否向下兼容 1。 简化调试过程,通过单元测试,可以快速定位问题,减少调试时间 1。 直接运行看结果虽然也能得到反馈,但是这种方式无法全面检查所有可能的情况,特别是在处理边界条件和异常处理时,单元测试的重要性就体现出来了。此外,对于大型项目和团队协作开> 发,单元测试可以确保新的改动不会影响到已有的功能,大大提高了代码的健壮性。
在 Node.js 中,有许多测试框架可以使用,如 Mocha、Jest、AVA 等 1。
Mocha 是一个功能丰富的测试框架,支持 BDD(行为驱动开发)和 TDD(测试驱动开发),对异步测试支持友好 1。下面是一个使用 Mocha 和 Node.js 内置的 assert 断言库编写的单元测试示例:
js// 从外部导入待测试的函数 const add = require("./add"); const assert = require("assert"); // describe 用于描述一组测试,可以嵌套使用 describe("加法函数测试", function () { it("1 加 1 应该等于 2", function () { // assert 用于判断结果是否与预期一致 assert.equal(add(1, 1), 2); }); });
Jest 是 Facebook 出品的一个测试框架,最大的特点是内置了常用的测试工具,如断言、测试覆盖率工具、UI 测试工具、mock 能力等,可以开箱即用 1。
AVA 则是一个轻量、高效、简单的测试框架,支持并发测试和原子测试,每个测试文件都运行在独立的环境中,支持 ES7、Promise、Generator、Async、Observable 等 1。
每种测试框架都有其优点和特性,可以根据项目需求和团队习惯选择合适的框架进行单元测试。
Node.js Reference Architecture | nodejs 参考架构
这里是一系列文章,其中介绍了 nodejs 的常用方法,流程或者模块,这对我的 nodejs 开发获取会有一些帮助,文章有十几章,我刚开始看
2023-11-28
我们对最佳 Node.js 日志记录工具的建议
系列文章,介绍在 js 中使用 pino 作为日志输出器
git 仓库清理--"保姆级"教程
https://juejin.cn/post/7024922528514572302
这篇教程教你如何清理 git 仓库,使用 BFG 工具,我成功将我博客的仓库从 130mb 清理到了 30mb,虽然我我完全不知道发生了什么
2023-11-29
比较 Adobe Firefly、Dalle-2、OpenJourney、Stable Diffusion 和 Midjourney
https://blog.usmanity.com/comparing-adobe-firefly-dalle-2-and-openjourney/
这篇博客通过几个提示词比较了几个主流 AI 绘图模型。省流:免费又好用无脑 Stable Diffusion | github
Node.js 参考体系结构简介,第 3 部分:代码一致性
系列文章,建议使用 ESLint 作为代码一致性工具
2023-11-30
GraphQL
参考资料:
- GraphQL 入门看这篇就够了
- 一文彻底弄懂 REST API | 知乎
- GraphQL 官网
- 什么是 GraphQL?
- Node.js 参考体系结构简介,第 4 部分:Node.js 中的 GraphQL
GraphQL 是一个前端查询语言规范(QL 为 query language 的缩写),是 facebook 公司提出的语言规范,希望代替 REST API
REST API 的缺点:
当进行复杂的查询时,需要多次请求,而 GraphQL 可以一次请求完成,减少了网络请求的次数
使用 REST API 时,后端一般需要对每个请求都写一个接口,而 GraphQL 只需要一个接口,前端可以自由组合查询
不会有人把 sql 语言传到后端去查询吧
GraphQL 简单描述:
前端把类似这样的查询语句传到后端,
{
hero {
name
}
}
后端返回对应的数据
{
"hero": {
"name": "Luke Skywalker"
}
}
GraphQL 目前没有大范围的应用的原因有下:
- GraphQL 是 facebook 公司提出的语言规范,具体的实现并没有开源,想要使用就需要自己造轮子,GraphQL 在实现方面有一些难点,比如数据库并发等
- 接上一条,GraphQL 方便了前端开发,但是需要后端的支持,而后端的支持需要大量的工作,比如鉴权等等