网络
看到了以前好多人在折腾 N5105,偶发的重启问题确实很烦人,最后看评论应该是更新微码可以解决。
Linux
GNOME 的发音
https://stuff.mit.edu/afs/athena/astaff/project/aui/html/pronunciation.html
看到了以前好多人在折腾 N5105,偶发的重启问题确实很烦人,最后看评论应该是更新微码可以解决。
GNOME 的发音
https://stuff.mit.edu/afs/athena/astaff/project/aui/html/pronunciation.html
在 docker-compose.yml 中的 extra_hosts
字段中加上 host.docker.internal:host-gateway
即可。是的,一个魔法字符串。
这个并非由 Docker Compose 处理,而是传给 Docker Engine 这层来处理,具体见引用链接中的源码。
https://github.com/docker/compose/issues/9768#issuecomment-1570319324
将代码仓库转移到monorepo如果直接将代码复制到大仓中就会丢失原本的代码提交记录。而大多数情况下我们希望保留提交记录以方便后期问题定位等情况。
# 移动文件
git mv -k * projects/{你的项目名}
git mv -k .* projects/{你的项目名}
# 提交仓库
git commit && git push
git remote add -f my-app {原仓库git地址}
git merge my-app/{分支名} --allow-unrelated-histories
git remote remove my-app
git push
parseInt
永远将输入解析为字符串
parseInt({toString: () => 2, valueOf: () => 1}); // -> 2
Number({toString: () => 2, valueOf: () => 1}); // -> 1
一个常见的栗子
parseInt("apple"); // -> NaN
parseInt("apple", 16); // -> 10
上面这个例子是因为parseInt
会一个个解析字符直到解析不了,所以解析十六进制中的a
为10作为结果返回。
parseInt Infinity
parseInt("Infinity", 10); // -> NaN
// ...
parseInt("Infinity", 18); // -> NaN...
parseInt("Infinity", 19); // -> 18
// ...
parseInt("Infinity", 23); // -> 18...
parseInt("Infinity", 24); // -> 151176378
// ...
parseInt("Infinity", 29); // -> 385849803
parseInt("Infinity", 30); // -> 13693557269
// ...
parseInt("Infinity", 34); // -> 28872273981
parseInt("Infinity", 35); // -> 1201203301724
parseInt("Infinity", 36); // -> 1461559270678...
parseInt("Infinity", 37); // -> NaN
parseInt null
parseInt(null, 24); // -> 23
上面的结果都是一样的解析过程,按字母表排序,每个字符对应数字是固定的。比如,I
对应18,在18进制中只能解析0-17,所以parseInt("Infinity", 18); // -> NaN
,在19进制中就能解析出结果:parseInt("Infinity", 19); // -> 18
n
对应23,在23进制中解析不了,只返回18,在24进制中就是18 * (24 ^ 5) + 23 * (24 ^ 4)+ 15 * (24 ^ 3)+ 18 * (24 ^ 2) + 23 * 24 + 18 = 151176378,其他依此类推。
八进制
parseInt("08"); // -> 8, 支持ES5
parseInt("08"); // -> 0, 不支持ES5
以0开头的数字可以被解析为10进制或8进制,ECMAScript 5规定为10进制,但不是所有浏览器都支持它。所以使用parseInt
时指定进制是好习惯,有时可以避免不必要的bug。
浮点数
parseInt(0.000001); // -> 0
parseInt(0.0000001); // -> 1
parseInt(1/1999999); // -> 5
parseInt
接受一个字符串参数并返回一个指定基数的整数。 parseInt
还会去除字符串参数中第一个非数字之后的任何内容。0.000001转换为字符串后是"0.000001",0.0000001转换后是"1e-7",所以返回1,1/1999999转换后是5.00000250000125e-7,返回结果是5。
pnpm
包管理1. 在本地npm包目录下执行
pnpm link --global
2. 如果是cli,可直接在其他项目目录下调用
3. 如果需要在其他项目中引入npm包,在其他项目目录下执行
pnpm link --global npm-package-name
npm
包管理1. 在npm包目录下执行
npm link
2. 在其他目录使用
npm link 本地npm包绝对路径
官方文档:https://docs.npmjs.com/cli/v9/commands/npm-link
背景:期望在新建类时调后台接口对类进行配置,配置成功后才可以执行其他操作。
尝试封装类的构造函数为async/await
,报错
Class constructor may not be an async method
原因:async
函数返回值为promise
,而构造函数返回值为object
,同一个函数不可能返回值同时为promise
和object
解决:参考 jQuery's
ready()
方法
1. 类实现
class myClass {
constructor () {
}
async ready (callback) {
await yourHttpRequest();
// 回调函数绑定作用域
callback.bind(this)();
}
}
2. 调用
const myObj = new myClass();
myObj.ready(function() {
// 保证配置完才能执行其他操作
});
参考:https://stackoverflow.com/questions/43431550/async-await-class-constructor
1 台 linux/amd64 的机器 A,1 台 linux/arm64 的机器 B。A 可以通过密钥对直接 SSH 连接 B。
在 A 执行命令以创建名为 multiarch 的构建实例,并将本机加入该实例:
docker buildx create --name multiarch --driver docker-container --config /etc/buildkitd.toml --node amd64 --platform=linux/amd64
在 A 执行命令以将 B 加入该构建实例:
docker buildx create --append --name multiarch --driver docker-container --config /etc/buildkitd.toml --node aarch64 --platform=linux/arm64 ssh://<user>@<ip>:<port>
启动该构建实例:
docker buildx inspect --bootstrap --builder multiarch
上述命令会在两个机器上都启动一个容器,并且输出构建节点的信息。
可以随时通过下面的命令来查看本机上的构建实例:
docker buildx ls
如果上面创建的 multiarch 构建实例不是默认被使用的,可以通过该命令进行修改:
docker buildx use --default --builder multiarch
上述命令中提及的 /etc/buildkitd.toml 可用于指定 Registry Mirrors,例如:
debug = true
[registry."docker.io"]
mirrors = ["mirror.gcr.io"]
其它具体配置项请参阅官方文档,见引用。
可以任意编写一个 Dockerfile,然后执行命令进行构建测试:
docker buildx build -t <image-tag> --platform=linux/arm64 --load .
How to Rapidly Build Multi-Architecture Images with Buildx | Docker
在某些时候,例如出于某些环境调试目的,可能需要阻止服务端响应 HSTS 头(Strict-Transport-Security),此时可以使用代理工具将该响应头移除。请注意,不正确的配置可能会影响正常访问网站的安全性,请务必在必要时启用如下功能或特性,或使用独立的开发者版本浏览器。
如果使用 Burp Suite,则可以直接使用内置规则:
如果使用 whistle,则可以增加一条规则,这里以要匹配的站点为 xie.sh.cn 进行举例:
xie.sh.cn delete://res.headers.strict-transport-security
如果浏览器已经记住了服务端下发的 HSTS 响应头,则需要先将其删除。以 Chrome 浏览器为例,可以访问 chrome://net-internals/#hsts,然后进行查询或删除。部分 HSTS 响应头会使用 includeSubDomains 来包含子域,删除无效时可以留意一下。
某些情况下,即使后端没有发送 HSTS 响应头,浏览器也可能试图同时发送 HTTP 和 HTTPS 请求来升级连接,此时可以考虑访问 chrome://flags/#https-upgrades,然后将其禁用。
直接终端执行:
sudo findmnt --verify --verbose
这个工具应该是属于 util-linux
,正常情况下都不需要额外进行安装操作。
fedora – How do you validate fstab without rebooting? – Server Fault
搜了一下tsconfig.json
文件需要配置"jsx": "preserve"
,但我的config文件原先就有这个配置。因为项目一开始是可以正常报错的,迁移到大仓后就有问题了。中间也考虑了是否是配置文件位置的问题,调整了位置也没有解决问题。
最后看到tsconfig.json
文件另一个报错“找不到node的类型定义文件”
原因是我没有安装@types/node
,装上后重新打开IDE”类型{}不存在属性“和“找不到node的类型定义文件”报错都没有了。
// npm
npm i @types/node --save-dev
// pnpm
pnpm add @types/node