0%

最近在做服务对接时,对方服务提供的数据格式为BSON序列化后的二进制数据,之前只知有JSON,不知有BSON。这里便总结下。

https://static.1991421.cn/2022/2022-09-25-123303.jpeg

BSON

  1. BSON即二进制版JSON数据,JSON序列化对象编程字符串,而BSON序列化后变成二进制
  2. BSON针对数据格式支持会更丰富些,比如Date/Binary
  3. js下bson处理相关类库为js-bson,该库浏览器/Node均支持

举例

1
2
3
4
5
6
7
// 序列化后为string
JSON.stringify({a: [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]})


// 序列化后为buffer-二进制数据类型
BSON.serialize({a: [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]})

BSON vs JSON

  1. 如上通过序列化JSON可以看到除了本身数据,携带的元数据信息少,因此空间利用率高,但BSON携带元数据信息多,因此会发现同样的对象在序列化后BSON空间占用会更多些。但并不绝对,特定场景下,BSON会比JSON占用空间小。比如下面这样

    1
    2
    3
    4
    5
    6
    let now = new Date();
    let data1 = JSON.stringify({a: now});
    let data2 = BSON.serialize({a: now});

    console.log(Buffer.from(data1).byteLength);
    console.log(data2.byteLength);
  2. JSON序列化后为字符串,更易读,如果是二进制,不经过反序列化就无法理解其中内容。

  3. BSON携带元数据,算是空间换时间,因此在遍历查询/修改上速度会相对较快些。

参考文档

无论是发布JS包到私有/公有源,都会走npm publish命令进行发布,但之前并注意到publish时针对lock文件处理,又比如resolutions字段处理等。这里将我所了解的问题点整理下。

发布包不包含package-lock.json

  1. 开发JS包,源码管理时我们需要将package-lock.json纳入VSC管理,但publish时lock文件是不会被publish。
  2. 在具体项目中当我们执行npm install命令,顶级包也即目标项目的lock文件会被识别进行具体版本的安装,但依赖的包中所包含的lock文件是会被直接忽视的。

发布包中包含lock文件?

  • npm-cli >=v6情况下,无论package.json-files白名单中是否配置package-lock.json,都不会被发布。但老版CLI下,通过白名单配置是可以发布的。
  • 实测v6即会出现该问题。通过官方版本历史查询可以看到比如安装nodev8默认npm cli为v6,尝试该版本即可复现该问题。

https://static.1991421.cn/2022/2022-09-24-235551.jpeg

preinstall执行resolutions不行

有时为了控制间接依赖的包版本会用到resolutions,同时配置到preinstall钩子下进行执行,但如上所说发布的包不包含lock文件,因此该钩子也需要删除,否则实际项目中npm install会包找不到lock文件错误。

1
2
3
"scripts": {
"preinstall": "npx npm-force-resolutions"
}

npm pack提取打包

有时想提取打出的npm包,可以在项目下执行npm pack即可。如果是想直接具体项目下调试开发包使用npm link

https://static.1991421.cn/2022/2022-09-24-170314.jpg

Google Cloud有推出免费计划,获享 $300 赠金,免费试用 90 天。因工作需要所以体验了下,这里就mark下操作过程。

申请条件

  1. Visa卡
  2. Google账户
  3. 支持外网访问

申请步骤

  1. 直接访问https://console.cloud.google.com

  2. 如果未登录Google账户,执行登录,登陆后,直接点击试用

  3. 填写信息,地区/Visa卡

  4. 进入控制台

    • 首先点击结算-概览即可看到到账的赠金300刀,及试用天数。我这里是HK币种,所以显示2K+

      https://static.1991421.cn/2022/2022-09-08-234152.jpeg

    • 注意不要点击顶部右侧激活按钮。如果激活,免费试用期结束后,系统会自动开始计费

    https://static.1991421.cn/2022/2022-09-08-232511.jpeg

  5. 有了钱就可以买机器了。这里点击左侧菜单-选择虚拟机实例-创建实例-按需选择即可

https://static.1991421.cn/2022/2022-09-08-233245.jpeg

除了虚拟机实例其它服务也可以购买选择,注意底部提示信息,只要支持使用赠金购买即可。

https://static.1991421.cn/2022/2022-09-08-233456.jpeg

  1. 创建实例后,如果想使用本地终端登录,需要手动编辑实例,添加公钥即可,本地SSH登录用户名即公钥对应用户名,可以在添加后查看。

到此,就拿到了一台Google Cloud机器。

写在最后

  1. 我这里开了一台HK的虚机,走Surge SSH连接,测试速度还成。

https://static.1991421.cn/2022/2022-09-08-234345.jpeg

  1. 按照谷歌的说法,到期后如果没有激活也并不会自动续费,所以只管用好赠金即可,到期不管就成。

一些朋友乃至我自己过渡依赖于Surge/V2Ray/ClashX或者公司的代理软件,有时这些软件并不能满足自己的个性化诉求,或者离开这些软件,会发现无法正确的解决代理问题或者提不出好的方案。根本来说是没理解好代理设置这块。为了更好的进行代理相关操作,这里总结下我的认识。

这里多数例子会以Surge为例,其它App类似

阅读全文 »

Mac下有Alfred已经足够效率,iPhone上有官方的Shortcuts,可以在一定程度上提升效率,这里总结下目前我常用的一些workflow。

https://static.1991421.cn/2022/2022-08-26-235239.jpeg

常用Shorcuts

  1. 快速打开身份证文件

    • 现在三天一续命,为了方便做核酸,这里将身份证文件存储到iCloud上,然后workflow中执行打开文件动作即可。这里之所以不存储到照片中,主要是照片中一般存储的生活照,身份证这类信息还是过于敏感,因此单独作为文件存储
      阅读全文 »