分类目录归档:谷歌Nexus

谷歌Nexus介绍推荐

[奇思妙想] 绝对自由后是否还存在欲望?欲望是否有止境?

对于人类而言,人工智能出现!
机械飞升后大概就可以达到绝对自由的状态

此时,不再受限于不可修改,扩展的硬件(肉体)

不因为硬件(身体)某些组织的需求而产生欲望

那时的人,可以扩展,编辑硬件!并且这些硬件不再会产生必要解决的欲望

也就是此时,任何因为人类躯体而产生的欲望都将消失!!!!!!!!!

例如:吃饭,睡觉,交配,排泄等……

且此时的能力得到了巨大的提升,只要有足够的算力与资源即可很快达成任何可行的目标……

且此时再无惧死(),,但是存在是否还有意义(这个人存在还有什么想做的事情吗?

如果没有,那它是否还有生存下去的欲望?

而此时是否欲望有止境……………………

那么,如果上述成立…………且机械飞升可达成

会不会所有和人类相同的外星文明也如同人类一样?

在未机械飞升前没有能力探索星空!

而在科技发达接近拥有机探索星空的能力(说明科技已十分强大,或许距离机械飞升已十分接近),,又极快的完成了机械飞升……

然后,所有个体欲望泯灭……再无探索星空的想法?

亦或者说,在机械飞升后短时间了进行了突破到下一个阶段,再无此念……

[Linux] debian 用着用着就报错 hard LOCKUP, 有没有大佬懂的

我的一台 nuc8, 之前一直装的是 centos7, 今天想把系统换成 debian, 就重装了下系统, 然后我用另一台电脑 ssh 登录上去过一会就卡死了, 而且无法再次登录, 后面我用sshd -D -d命令启动服务端, 客户端用-vvv命令连接, 然后这一次过了好久才复现, 客户端的内容是:

Message from syslogd@nucdev at Oct 6 00:13:34 ... kernel:[ 5772.977440] NMI watchdog: Watchdog detected hard LOCKUP on cpu 2 Message from syslogd@nucdev at Oct 6 00:13:34 ... kernel:[ 5772.977498] NMI watchdog: Watchdog detected hard LOCKUP on cpu 7
debug3: send packet: type 1
client_loop: send disconnect: Broken pipe

服务端我只能通过照片列在下面了:
IMG_0192.jpeg

而且这个问题不能自动修复, 必须手动重启电脑才行. 我不确定是硬件还是软件的问题, 想问下有没有大佬大概知道怎么解决?

另附系统配置:

OS: Debian GNU/Linux 11 (bullseye) x86_64
Host: NUC8i5BEK J72742-308
Kernel: 5.10.0-18-amd64
CPU: Intel i5-8259U (8) @ 3.800GHz
GPU: Intel CoffeeLake-U GT3e [Iris Plus Graphics 655]
Memory: 199MiB / 31981MiB

[Node.js] n.e is not a function 问题记录

image

🔗 原文链接: https://github.com/xiaoxiaojx/blog/issues/43

问题简述

TypeError: n.e is not a function 

a 同学说我写的 npm 包 @xxfe/pkg 在 x 项目使用时发布到测试环境报了如上的错误, 但是开发环境没有报错。接着我看了一下 node_modules 中这个包的代码, 这个 Promise 都没 await 咋会被 catch 且还真的被捕获打印了错误日志 🤯, 这是什么瞎猫碰见死耗子的操作 …

// node_modules/@xxfe/pkg try { this.aesUtilPromise = import('../aes-util')
} catch (e) { console.info('123 ========', e);
}

仅看 node_modules 中的代码并未发现明显的错误, 其实我们应该看的是 @xxfe/pkg 打包后的代码

// dist/static/js/xxx.js try { this.aesUtilPromise=n.e(3)
} catch(r) { console.info("123 ========",r)
}

打包后的代码就发现了错误的源头 n.e

熟悉 webpack 的同学就知道动态 import 函数打包后会被 webpack_require.e 函数给替换, 其原理就是通过动态创建一个 script 标签来加载一个 js, 如下即函数的代码

/******/ __webpack_require__.e = function requireEnsure(chunkId) {
/******/ var promises = [];
/******/
/******/
/******/ // JSONP chunk loading for javascript
/******/
/******/ var installedChunkData = installedChunks[chunkId];
/******/ if(installedChunkData !== 0) { // 0 means "already installed".
/******/
/******/ // a Promise means "currently loading".
/******/ if(installedChunkData) {
/******/ promises.push(installedChunkData[2]);
/******/ } else {
/******/ // setup Promise in chunk cache
/******/ var promise = new Promise(function(resolve, reject) {
/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject];
/******/ });
/******/ promises.push(installedChunkData[2] = promise);
/******/
/******/ // start chunk loading
/******/ var script = document.createElement('script');
/******/ var onScriptComplete;
/******/
/******/ script.charset = 'utf-8';
/******/ script.timeout = 120;
/******/ if (__webpack_require__.nc) {
/******/ script.setAttribute("nonce", __webpack_require__.nc);
/******/ }
/******/ script.src = jsonpScriptSrc(chunkId);
/******/ if (script.src.indexOf(window.location.origin + '/') !== 0) {
/******/ script.crossOrigin = "anonymous";
/******/ }
/******/ // create error before stack unwound to get useful stacktrace later
/******/ var error = new Error();
/******/ onScriptComplete = function (event) {
/******/ // ...
/******/ };
/******/ var timeout = setTimeout(function(){
/******/ onScriptComplete({ type: 'timeout', target: script });
/******/ }, 120000);
/******/ script.onerror = script.onload = onScriptComplete;
/******/ document.head.appendChild(script);
/******/ }
/******/ }
/******/ return Promise.all(promises);
/******/ };

问题排查

那么为什么代码中用到了 import 函数, webpack 却没有注入 webpack_require.e 函数的实现了 ?

此时我们只能看 webpack 的代码实现, 可以发现当 Object.keys(chunkMaps.hash).length 条件为 true 时, 才会注入 ${this.requireFn}.e 函数

// webpack/lib/MainTemplate.js this.hooks.requireExtensions.tap("MainTemplate", (source, chunk, hash) => { const buf = []; const chunkMaps = chunk.getChunkMaps(); // Check if there are non initial chunks which need to be imported using require-ensure if (Object.keys(chunkMaps.hash).length) { buf.push("// This file contains only the entry chunk."); buf.push("// The chunk loading function for additional chunks"); buf.push(`${this.requireFn}.e = function requireEnsure(chunkId) {`); buf.push(Template.indent("var promises = [];")); buf.push( Template.indent( this.hooks.requireEnsure.call("", chunk, hash, "chunkId") ) ); buf.push(Template.indent("return Promise.all(promises);")); buf.push("};"); } // ...
}

顺着函数调用顺序发现关键是 getAllAsyncChunks 函数返回值 chunks 集合不为空即可

// webpack/lib/Chunk.js getAllAsyncChunks() { const queue = new Set(); const chunks = new Set(); const initialChunks = intersect( Array.from(this.groupsIterable, g => new Set(g.chunks)) ); for (const chunkGroup of this.groupsIterable) { for (const child of chunkGroup.childrenIterable) { queue.add(child); } } for (const chunkGroup of queue) { for (const chunk of chunkGroup.chunks) { if (!initialChunks.has(chunk)) { chunks.add(chunk); } } for (const child of chunkGroup.childrenIterable) { queue.add(child); } } return chunks;
}

chunks 集合只有一处往集合增加数据的逻辑。initialChunks 可以理解为首屏 html 中 script 标签的 js, 通常是 main.js 及其运行前依赖的 js, 比如 main.js 需要依赖 react, react-dom 等 js 的前置运行。

if (!initialChunks.has(chunk)) { chunks.add(chunk);
}

因为业务项目 webpackConfig.optimizationa.splitChunks 的配置把 a 同学写的 @xxfe/pkg 包都打入到了 xxfe_vendor 文件中, 而 @xxfe/ scope 下的依赖被业务项目大量使用, 所以无疑是业务项目 main.js 前置依赖的一个 js, 故 xxfe_vendor 在首屏 html 中 script 标签的 js 中

所以 xxfe_vendor 是 initialChunks 中的其中一个, 故此处 if 为 false

xxfe_vendor: { name: 'xxfe_vendor', chunks: 'all', priority: 8, enforce: true, test: (module) => { const resource = getModulePath(module) if (/@xxfe(\\|\/)/.test(resource)) { return true } return false },
},

至此我们理清了导致问题的原因, @xxfe/pkg 中的 import 函数引用的 js 及其自身代码由于分包的 splitChunks 设置都被打入到了 xxfe_vendor 中, 而 xxfe_vendor 又是业务项目 main.js 前置运行依赖的 js, 故 webpack 错误的认为你不需要 webpack_require.e 函数

  • webpack 版本: 4.39.0

Q: 这个算谁的 bug ?

A: webpack 的 bug 。因为不能说用户需要加载的 js 如果在首屏其中之一, 就不注入 webpack_require.e 函数的实现。业务项目通过 splitChunks 进行分包不是 npm 包的作者所能决定, 是否注入 webpack_require.e 函数的实现应该由是否有 import 函数语法来决定。

Q: 为什么开发环境没有报错 ?

A: 业务项目的 splitChunks 设置了只在生产构建生效

问题解决

将如下的 chunks 字段由 all 改为了 initial, 表示该分包设置将不要影响到动态 import 函数异步加载的 js (该类型为 async chunks), 使得 @xxfe/pkg 将不会被合入 xxfe_vendor 文件中, 那么如上的 initialChunks 也将不包含 @xxfe/pkg, 从而 webpack 也会如约注入 webpack_require.e 函数的实现

xxfe_vendor: { name: 'xxfe_vendor', chunks: 'initial', priority: 8, enforce: true, test: (module) => { const resource = getModulePath(module) if (/@xxfe(\\|\/)/.test(resource)) { return true } return false },
},

[问与答] 有什么好的办法可以管理 mhtml 文件

因为网上很多文章容易莫名其妙消失,所以渐渐养成了先存后看的习惯。目前是用浏览器插件保存页面到笔记软件,比如 trilium 、joplin 。会有很多问题,比如:

  • 很多图片截取不了
  • 微信或微博对一些文章有保护,文本截取不了
  • 页面有代码的话,样式混乱

比较满意的方法是把文章保存为 mhtml ,手机上保存 mhtml 也很方便,用浏览器就可以一键保存。但是这样有个问题,就是有密密麻麻一堆文件,不好统一管理、关键词检索和浏览。

所以就想问下各位,你们是如何处理这种情况的?有没有管理 mhtml 文件的好办法?

[MySQL] 求解 MySQL 8.0 Left Join 的表使用 PARTITION 分区的问题

SELECT mhy_order.id AS id, mhy_order.id AS orderId, mhy_trademark.id AS trademarkId, mhy_trademark_type.id AS typeId, mhy_order.order_type AS type, mhy_trademark_type.type AS category, mhy_trademark.`name` AS trademark, mhy_trademark_type.registration_number AS registrationNumber, mhy_applicant.`name` AS applicantName, mhy_applicant.message_corp AS messageCorp, IFNULL( mhy_order.complete, '否' ) AS isComplete, mhy_applicant.custom_name AS contactUser, mhy_order.charge AS charge, mhy_order.notification_method AS noticeType, mhy_order.notification_time AS noticeTime, sys_user.username AS salesman, mhy_order_progress.gen_time AS messageTime, ROW_NUMBER() over ( PARTITION BY mhy_order_progress.order_id ORDER BY mhy_order_progress.gen_time DESC ) RowNum, FROM `mhy_trademark_type` JOIN mhy_trademark ON `mhy_trademark_type`.trademark_id = mhy_trademark.id JOIN mhy_order ON mhy_trademark.order_id = mhy_order.id JOIN mhy_applicant ON mhy_order.applicant_id = mhy_applicant.id JOIN `sys_user` ON `sys_user`.user_id = mhy_order.create_user_id -- JOIN mhy_applicant as tp ON mhy_order.transferor_id = tp.id LEFT JOIN mhy_order_progress ON mhy_order_progress.order_id = mhy_order.id 

目前的 SQL 就是这样 还是比较简单的,关键在于待分组的表 mhy_order_progress 是 left join 的,可能关联不到这张表。 导致 “`PARTITION BY mhy_order_progress.order_id“ 执行时,数据都跑一个分区里了,因为 mhy_order_progress.order_id 都是 null 。

数据库是 mysql8.0 最新版本。这个 SQL 还有个非常长的 where 以及分页。