Skip to content

每日博客阅读 2023-11

前言

之前也有看博客的习惯,不过不是周期性的,也没有任何记录。前两天看到鱼皮的视频,遂决定用这个页面记录我每天看的博客,也方便日后查询。

2023-11-24

专家社区的演变

https://lcamtuf.substack.com/p/the-evolution-of-expert-communities

这篇文章描述了社群,社区的演变历史,结合我个人在校计协的经历,感觉非常有感触。社区从开始-发展-兴旺-出问题-没落的过程,我算是走了一大半

摘抄部分周刊的内容:

第一阶段:社区成长期。

共同的兴趣爱好让一小群用户聚在一起,所有人充满热情,在网上交换意见、分享知识。新人受到热烈欢迎,并得到耐心指点。

第二阶段:社区流行期。

加入社区的新成员快速增长,总是提一些相同的初级问题。老成员不断回答同样的问题,感到疲惫不堪,也非常无趣。有些人开始离开。

第三阶段:社区规范期。

为了避免讨论质量的下降,老成员开始制定一套详细的社区规范,以及冗长的常见问题解答。

但是,新人从不认真阅读,有些人还认为这些规范令人不满或难以理解。于是,成员之间的冲突发生了,管理社区的核心成员对异议的容忍度下降,不同意见的人往往被赶走,社区发生分裂。

第四阶段:社区滑坡期。

新成员开始变少,社区逐渐冷清,大家热烈参与的话题越来越罕见,一些长期成员开始流失。

第五阶段:社区终结期。

社区陷入停滞,新成员和新内容都停止了增长,显得非常萧条,所用的软件平台也过时了。最后,只有少数彼此认识已久的成员还在,偶尔冒泡,聊一些无关的生活感想。

2023-11-26

原子化真的是现代前端 CSS 的救星吗

https://juejin.cn/post/7263049551136636983

转载:https://mp.weixin.qq.com/s?__biz=Mzg4MTYwMzY1Mw==&sn=4173c81a4bbc25ea472aeb2bcf312641&mid=2247509398&idx=1&

这篇文章介绍了 2 常用的前端 CSS 原子化方案

  1. Tailwind CSS
html
<!-- 编码时在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>
  1. UnoCSS

UnoCSS 是 Tailwind CSS 的变种,使用元素属性来定义样式,不过需要在编译时进行转换,要搭配 vite 使用

html
<!-- 将冗长的 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)

单元测试用处:

  1. 在做 API 接口开发的 hi 后,可以在代码种直接模拟调用接口,而不是再去打开一个 apifox 或者 postman 来测试接口
  2. 可以对函数或者功能做更详细的测试,而不是简单的运行看报错,并在代码中打 log

我理解到的就这些

参考资料:

在写 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 参考架构

https://developers.redhat.com/blog/2021/03/08/introduction-to-the-node-js-reference-architecture-part-1-overview

这里是一系列文章,其中介绍了 nodejs 的常用方法,流程或者模块,这对我的 nodejs 开发获取会有一些帮助,文章有十几章,我刚开始看

2023-11-28

我们对最佳 Node.js 日志记录工具的建议

https://developers.redhat.com/articles/2021/05/10/introduction-nodejs-reference-architecture-part-2-logging-nodejs

系列文章,介绍在 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 部分:代码一致性

https://developers.redhat.com/articles/2021/05/17/introduction-nodejs-reference-architecture-part-3-code-consistency

系列文章,建议使用 ESLint 作为代码一致性工具

2023-11-30

GraphQL

参考资料:

GraphQL 是一个前端查询语言规范(QL 为 query language 的缩写),是 facebook 公司提出的语言规范,希望代替 REST API

REST API 的缺点:

  • 当进行复杂的查询时,需要多次请求,而 GraphQL 可以一次请求完成,减少了网络请求的次数

  • 使用 REST API 时,后端一般需要对每个请求都写一个接口,而 GraphQL 只需要一个接口,前端可以自由组合查询

不会有人把 sql 语言传到后端去查询吧

GraphQL 简单描述:

前端把类似这样的查询语句传到后端,

graphql
{
  hero {
    name
  }
}

后端返回对应的数据

json
{
  "hero": {
    "name": "Luke Skywalker"
  }
}

GraphQL 目前没有大范围的应用的原因有下:

  • GraphQL 是 facebook 公司提出的语言规范,具体的实现并没有开源,想要使用就需要自己造轮子,GraphQL 在实现方面有一些难点,比如数据库并发等
  • 接上一条,GraphQL 方便了前端开发,但是需要后端的支持,而后端的支持需要大量的工作,比如鉴权等等

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1