今天,我卸载了 Arc 浏览器。这是我第一次卸载一个我曾经如此喜欢的产品,而且是因为一个更新按钮。我觉得包括我自己在内的开发者都应该在设计软件更新策略时,切实地站在用户的立场上,权衡他们为了更新要付出的代价以及能够获得的价值。
今天,我卸载了 Arc 浏览器。这是我第一次卸载一个我曾经如此喜欢的产品,而且是因为一个更新按钮。我觉得包括我自己在内的开发者都应该在设计软件更新策略时,切实地站在用户的立场上,权衡他们为了更新要付出的代价以及能够获得的价值。
本系列文章将从实用角度出发,介绍 TypeScript 中的许多可能不为人所知的理论和特性,希望能够通过这种方式尽可能地抹平我们关于 TypeScript 的一些进阶知识和技巧的信息差,并启发我们使用 TypeScript 解决生产实践中的一些看似无法解决的类型问题。
在本篇文章中,我将与你一同走过一段自我发现的旅程。我会先从高中时期的挑战讲起,再到大学时期的挫败,之后我会介绍自己如何在反思中发现自己更像是一只狐狸,并以此重塑自信和改变行动模式,在这个被刺猬价值观主导的当代社会中保持自我。希望在读完这篇文章后,你也能发现自己的独特之处,不论是狐狸还是刺猬。
本文将介绍如何在以一个普通用户的权限创建使用 Linux 容器的情况下,通过 systemd 配置 cgroup v2。
在本文中,笔者探索了如何以一个普通用户的身份从镜像的准备到进程的创建,一步步地创建出一个适合运用在 OJ 评测场景的容器环境。
本文以构建可被摇树优化的库为主线,深入介绍了打包工具(bundler)执行摇树优化的原理,以及一个库适配这种优化的方法。
本文介绍了有关字符编码(Character encoding)的一些概念的含义,以及列举并介绍了如 ASCII、GBK、Unicode 这样的常见字符编码,以及近年来愈发常见的 Emoji 表情。
如何令 a === a + 1 成立?看看笔者的几个思路,以及这个看似简单的问题背后涉及的各种知识!
通过一个简单的导航栏布局问题看 CSS Grid 布局的强大作用,以及背后的 Box Alignment 规范。
本文章由本人发表于: https://www.yuque.com/matrix-blog/frontend/component-performance-case 背景 本 Matrix 团队是一个主要由中山大学计算机学院的大二、大三学生构成的小型开发团队。Matrix 课程系统是我们团队主要维护的一个项目,它是一个面...
背景 笔者最近加入了校内某在线课程平台的运维团队。此运维团队在 on-premise 的私有云上搭建了 Kubernetes 集群来管理服务,包括前后端服务以及数据库、消息队列等基础服务。 最近,由于种种原因,团队管理的供测试环境使用的 Kubernetes 集群需要支撑某研究生团队的 NLP 运算程序。他们每天都会...
问题的介绍 最近开发某反馈系统的前端,偶然发现顶部导航栏的高度在 MacOS 或 iOS 下的 Safari 中计算异常: 首页的布局以及相关的样式大体如下: < div class = " rootContainer " > < nav class = " navBar " ></ nav > < div clas...
前端之于 DDD 无论是 SSR 还是 SPA,结合上文讨论的 DDD 基础概念我们可以发现,从整个 DDD 软件的结构上看,前端主要处于 Presentation 层。也就是说,前端的主要任务是显示业务数据,并且支持用户交互动作,绝大多数的业务逻辑其实存在于服务端的 Domain 层中。当然前端有时候会存在一些业务...
DDD 简介 DDD 是英文 Domain-Driven Design 的缩写(不是 DDL Driven Development),中文译名为领域驱动设计,诞生于本世纪初。它为人们提供了战略和战术上的建模工具,帮助人们准确把握业务需求,产生精准的建模设计,进而高效率地设计、维护软件。 对于在软件开发领域中缺乏经验的...
软件开发的本质 大多数普通人在听到“软件开发”这个词语的时候,会联想到这样一幅画面:一群穿着格子衫、桌子上摆着二次元手办的又瘦又高的眼镜仔坐在电脑前,对着屏幕上各种千奇百怪的代码敲打键盘,从白天直到黑夜。 这些给程序员加上的定语我们暂且不提,但软件开发并不是仅仅意味着编写代码。无论是在公司里上班,还是大学里几个伙伴的...
此文章文字稿取自我在学校某实验室的公众号上发表的技术分享文章。 一直以来,软件建模都是一个非常热门的概念,它提供了一张将要开发的软件的蓝图,在系统需求和系统实现之间架起了一坐桥梁,而程序员实际编写出的代码能否很好地满足需求,很大程度上取决于选用的建模方法是否合理。 我们今天要介绍的 DDD(“领域驱动设计“的英文缩写...
引子 在 Node.js 的世界中,人们几乎每天都在使用着 npm install 命令。这个命令会根据 package.json 的内容,将项目所依赖的库安装到本地的 node_modules 文件中,然后产生一个新文件 package-lock.json 。 许多人都知道,后者的作用是保存 npm 按照 pack...
什么是响应式编程 在 JavaScript 还在被 Callback Hell 的阴影笼罩时,来自 ReactiveX 组织的仁人志士,为 JavaScript 世界带来了被广泛使用的响应式编程。响应式编程和我们熟悉的命令式编程有很大的不同。它和声明式编程很想象,但强调使用可观察对象构建异步数据流。下面让我们通过一个...
混乱的 Callback 正如先前所述,JS 运行环境在处理收到的任务之后,主要是通过 Callback 来通知 JS 这个“大老板”的。Callback 本质上是一个接受若干参数的函数。 在 Promise 还未出现的年代,人们只是在“要有 Callback”上达成了广泛共识,并没有在“Callback 应该需要什...
引擎与运行环境的“角逐” 我们再来看看刚才的这段代码,Node.js 在读取文件结束后将 Callback 交给 JS 引擎执行,但这其中有一个问题:运行环境交还 Callback 的时机如何确定? 如果运行环境在任务结束时立刻将 Callback 交还引擎,而此时引擎很可能正在执行一个函数的中途,那么强行插入执行的...
异步与同步 在介绍 JS 异步编程以前,我们首先得理清一下什么是异步,以及什么是并发。异步与同步是消息通信机制中两个相对的概念。 同步:发出调用后,在得到结果之前,调用不返回。 异步:发出调用后,调用直接返回,此时并没有获得结果。 让我们设想一个场景:有一天中午,我从教学楼里走出来,正想着去吃饭,突然一时兴起在图书馆...
2009 年,Ryan Dahl 正式发布服务端 JavaScript 解释器 Node.js,以其极高的性能震惊世人。在发布后的短短几年之间,Node.js 攻城略池,在 Web 服务端领域中占据了相当大的市场份额,并在之后的几年为伟大的前后端分离策略的诞生提供了物质基础。 Node.js 的成功也让 JavaSc...