LK

Results 22 issues of LK

Hi there, I'm reading multiplexing in Chapter 6, and I ran into a problem that I can't figure out. First I copied the contents of the `client.js` and `server.js` into...

When running `multi-semantic-release`, sometimes it will encounter the following errors (`main` branch) And I noticed that the `analyzeCommits` phase is missing, which caused this error. I'm using version `v2.13.0` of...

bug

前些天看有人讨论说 Object.observe (后面简称 O.o ) 将会从当前提案中移除,甚是震惊,为何大家一致叫好的特性会被废弃?要知道 O.o 之前已经到了 es7 的 stage-2,突然要被移除有点不解。经过了一番搜索,在[一个帖子](https://esdiscuss.org/topic/an-update-on-object-observe)上找到了下面这段信息 (不逐字翻译,加入个人理解): > 三年前,Rafael Weinstein, Erik Arvidsson和我着手设计并实现我们认为是 MDV ("model-driven views")本质上要有的数据绑定系统。最初我们在 V8 的分支上实现了一个原型,然后获得了 V8 团队的同意从而打造了一个真实的上线版本( a real version upstream ),同时也在努力把 O.o...

随笔

> 这篇文章并不是关于使用 nvm 或者 n 等版本工具的指南,而是探讨如何在系统中同时安装两个或多个不同版本的 Node.js。注意是 **_同时_** 存在,比如在终端输入 `node1` 跟 `node2` 时,可以分别执行两个不同版本的 Node.js,而不需要版本管理工具事先进行切换。 ## 缘由 同时在系统中安装多个不同版本的 Node.js 跟 npm 听起来像是个伪需求,毕竟当我们需要某个特定版本的 Node.js 时,使用版本工具进行安装、切换都很方便。 不过前些天公司一个运维的小伙伴刚好跟我讨论这个问题,他想在机器上已经安装了一个 Node.js 的情况下,再安装一个不同版本的 Node.js (通过 `node2`, `npm2`...

随笔

突发奇想,能不能监听点击浏览器的后退按钮事件。 1. 很明显,如果后退是跳转到另一个全新的页面,~~监听 `window.onbeforeunload` 即可~~。 > 实际上有很多事件都会触发 `onbeforeunload`,比如刷新、点击链接前往新的页面等。这里应该还是在页面加载完成比如 `window.onload` 事件里使用 `history.pushState` 推一条记录进栈,同时监听 `window.onpopstate` 事件,在这个事件监听器里处理回退。其实也就变得跟下面的两个方案差不多了。 2. 如果整个页面是一个SPA,而且使用的是 `pushState/replaceState` 来实现的导航,那么当浏览器回退的时候会触发 `window` 上的 `popstate` 事件。这时需要监听 `window.onpopstate` 事件; 3. 如果整个页面是一个SPA,使用的是基于 `hashChange` 实现的导航,那么这个时候就比较麻烦。因为页面根据 `hash` 正常变化跳转(导航)的时候也会触发...

随笔

> TLDR: “要想理解递归则要首先理解递归”,但是这篇文章并不是介绍如何使用递归。相反,更多的是通过利用递归来体验归纳证明所带来的好处。 ps. 最近在看 python 相关的一些东西,因此文章里的示例代码用 python 来实现,简单易懂,应该不会成为阅读这篇文章的障碍。 ## 从数组求和开始 数组求和是非常简单的任务,下面是一段可能顺手就可以写成的求和函数 `sum_array`: ```python def sum_loop(S): total = 0 for value in S: total += value return total z =...

随笔
思想

在我走上编程这条路之前,有个问题困扰了我很久: 为什么每次忘记某个账号的登录密码并且点击“忘记密码”试图找回原密码的时候,都永远只会让我重新填写一个新密码,而不是告诉我原来的密码是什么?很多时候我只想知道之前的密码,并不想再想出一个新的密码,为什么就是不告诉我? 直到正式开始学习编程一段时间后,突然想起这个问题才发现,原来这个问题我还是没搞明白。为了解决当初跟我有同样困惑的同学,今天我们就来仔细讨论一下这个问题。 ### 直接存储明文密码 假如某个用户在你的网站上注册了一个账号 `[email protected]`,密码为 `abc654321`, 可能有些同学会觉得存储密码最直接的方式可以采用类似这样的表结构 : | username | password | |----------|-----------| | [email protected] | abc654321 | 这种方法简单直接,而且完全可以满足用户想找回原密码的需求。但是,如果某个黑客获得了你数据库的访问权限,那么他就能知道每个用户对应的密码明文。很多用户在多个网站上注册的账号用的都是同样的邮箱和密码,这样相当于黑客轻易就知道了这个用户多个网站的的信息。所以基本上没有谁会采用这种方式存储密码。 ### 存储密码的哈希值 哈希算法是个好东西,由于它不可逆的特性,我们可以存储用户密码的哈希值,类似这样: | username | password |...

随笔

> TLDR: 这篇文章并不是关于 TypeScript 的入门教程,而是总结我在学习 TypeScript 过程中遇到的一些疑问,和整理一些并不是那么显而易见的概念。如果你在看完 TypeScript 官方文档或者写过不少项目后,还是觉得对 TypeScript 整体有些不甚清晰的点,那么这篇文章或许对你有所帮助。 ## 什么是类型 (Type)? 别误会,我并不是要介绍 TypeScript 中的一些基础语法或者基础类型,这些我相信你在学习 TypeScript 第一天的时候就已经烂熟于胸了。比如我们都知道字符串的类型是 `string`、 在该用到数字的时候应该限制类型为 `number`、`===` 运算符的返回值是 `boolean`,对类型的理解和使用似乎已经成为了一种本能,但是我还是想给什么是类型下个统一的定义:**类型就是一系列值以及你可以对这些值做的事情**。比如我们刚刚说的 `number` 类型其实就是所有的数字加上所有你能对数字做的操作,比如 `+, -, *, /`...

随笔

> TL;DR; 在 [Redux](https://github.com/reactjs/redux) 中间件的启发下,实现一个高灵活性的输入验证流。 最近突然对用户的输入验证有了一些想法。 对用户的输入验证我们应该很熟悉,毕竟在提交表单的时候尤为常见。通常来说验证用户的输入并不是问题,[表单内置的验证](https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Form_validation) 已经可以较好的完成这个功能,但是当一个应用存在很多表单组件,而且我们想定制验证的流程与界面,每个表单的验证规则又都存在交叉时,会让验证变得比较棘手,也很容易产生一些冗余的代码。 试想一下,一个页面存在三个 `input[type=text]` 的输入框,分别命名为 A, B, C。 1. A 的验证规则是:**不为空、只能是英文字母数字或者下划线、长度不限制;** 2. B 的验证规则是:**不为空、只能是英文字母数字或者下划线、长度不超过 20 个字符;** 3. C 的验证规则是:**可以为空,也可以为任意字符,但是长度不超过 30 个字符;** 为了分别验证三个表单的输入我们可能需要写三个验证函数: ```javascript //...

思想