所有由罗佳(博主)发布的文章

【佳佳拆解】台电幻影NP900C

这是之前买的台电幻影NP900C,三年质保,现在3年过了3个月就挂了,拆出来给大家看看。

我不知道这个板型是不是什么通用板型,反正我在淘宝上看到了一模一样的,带主控卖五十多块钱。

主控是慧荣SM2263XT,好像是AD的,在我尝试加焊闪存颗粒维修的时候,因为闪存不小心移位了一下,导致下面连锡了,然后一通电主控就炸了。

继续阅读【佳佳拆解】台电幻影NP900C

把3090塞进紧凑MATX机箱

上星期,我的系统盘(台电NP900C)用着用着就炸了,刚过保几个月就炸了,用量产工具检查了一下一个闪存颗粒失联了,数据恢复无望,还好里面只有系统和安装的软件,损失不大,尝试重新开卡当缓存用,现在重新买了个1TB的三星980Pro当系统盘用。

我猜测可能是因为直连CPU的m.2那个位置吸3090尾气太多,温度过高,又没有一个很好的风道散热,于是它迫不及待地热死了。

之前为了散热问题买了一个酷冷至尊Q500L,我标题说是MATX,但它其实也能放ATX主板,只是需要舍弃一些别的配置选项,本想把新的主板和显卡装进这个更扁的机箱,结果发现电源和显卡都太长,他俩的位置冲突了一点,电源是以前发过的长城巨龙,然后就放弃了,把这个机箱给了我的旧主板和cpu。

继续阅读把3090塞进紧凑MATX机箱

[Excel]根据身份证号码计算年龄

最近被迫大量使用excel,所以我也学了点它的函数用法,做点笔记

根据身份证号码计算年龄的使用场景应该挺多的,但我在网上始终没找到一个能得到最准确结果的答案,于是东拼西凑写了个

#以下公式需要把#以及后面的内容删除才可以使用,因为excel的公式并不存在注释语法
=FLOOR(		#把计算结果向下舍入,精度为1
	DATEDIF(	#计算日期差
		TEXT(	#把生日字符串格式化为日期
			MID("身份证号",7,8),#提取身份证的生日部分
			"0-00-00"
		),
		TODAY(),#获取今天的日期
		"M"	#以月为单位计算前两个参数的差值
	)/12,		#除以12变成年
1)

网上很多方法是直接计算两个日期之间的年差,没有考虑到过了生日才长一岁的问题,所以我计算的是月差,毕竟每年的月份是固定12个,那么只要用总月数除以12再舍掉小数就是正确的周岁结果了

[BiliBili]视频右键菜单工具(油猴脚本)

地址:https://gist.github.com/JiaJiaJiang/c54abe1227917af3d3825dfa098b9473

安装:在浏览器有tampermonkey插件的情况下,点上面链接里的RAW按钮安装

功能:

  • 右键视频变速按钮:添加新版播放器中被砍掉的右键菜单视频变速按钮
  • 跳过OP、ED快捷键:ctrl+左右键可以跳过一般op和ed长度的时间(1分30秒)
  • 右键截图按钮:点击后将当前视频画面完整截图并在新窗口中打开

 

[Node.js]ES模块和CommonJS模块的导入

在使用ES导入语法的文件中想要使用require导入一个CommonJS模块的话,可以使用module.createRequire来创建一个require函数。

import { createRequire } from 'module';
const require = createRequire(import.meta.url);

 

在一般的使用CommonJS导入语法的文件中想要使用ES语法导入模块的话,可以使用import函数,要注意的是这是一个异步函数,返回一个Promise,所以需要await它或者使用then来等待返回结果,如下

(async()=>{
	const fs=await import('fs);
})();

 

[Browserify]异步插件导致write after end错误

写了个Browserify插件,之前一直没问题,但今天我改了点打包流程,结果一直报write after end错误,找了半个晚上,发现是因为我的插件函数写的是异步的,里面有个await异步读文件。

之前一直没出问题是因为后面的打包流程时间够长,能让这个插件正常执行完,但今天改了流程之后部分情况下很快就执行完了,于是当插件异步流程执行完后继续就出错了,修正方法是把异步文件读取改成同步的。

[Node.js]进程异常退出,错误码 3221226505

不是我想水一篇博文,在解决完前一篇博文的问题之后,立刻就又碰上另一个奇葩问题,进程直接跑着跑着没了,留下一个错误码3221226505。

在我左思右想把代码改来改去,包换来换去之后依然不能解决问题,然后发现是canvas包的问题,之所以一直没有发现是它,是因为出问题的代码里并没有用到这个包,它是在别的地方被引用到的,可能它的二进制模块破坏了node的环境,导致别的代码执行的时候触发了异常导致程序崩溃。

这个问题其实也不是第一次出现了,而且每次都是因为项目中同时有canvas和sharp两个模块才出现问题,在某些版本下不会出问题,某些版本下又会出现不一样的错误,这次就是和上次不一样所以才没能快速发现。

就这点破事,又浪费了我一个晚上,这时候我真想给搞出这bug的人屁股上来一脚。

IIS反向代理站点跳转域名被替换

今天一个破问题浪费我一下午的时间,我一直在找自己代码是不是有什么问题,或者是不是express有什么bug,结果到最后发现原来是iis的问题。

如果是在win上用iis反代站点的话,通常都会用iis的requestRouter插件,在他的设置页面Application Request Routing里网上的教程通常都勾着Reverse rewrite host in response headers这一项,就是因为这个设置导致后端返回的http头中location指定的跳转地址被替换为了此站点的地址,不知道这是个什么智障操作。

TrueNAS启用pkg包管理器

这是一篇小笔记,truenas默认没法使用pkg install来安装包,会出现以下报错

pkg: file:///usr/ports/packages/meta.txz: No such file or directory
.....
pkg: file:///usr/ports/packages/packagesite.txz: No such file or directory
Unable to update repository local

解决方案是进入/usr/local/etc/pkg/repos/ ,把local.confenabled后的yes改成no,把FreeBSD.confenabled后的no改成yes即可。

 

方案来源 : https://www.justinsilver.com/random/fix-pkg-on-freenas-11-2/

[MySQL]在普通字符串字段中存放json数组并索引

之前有一篇文章写的是在mysql中使用json字段时为其中的数组创建索引,它有个问题就是当该字段本身存放的就是一个数组时(不放在对象下的属性中),这样创建的索引不生效,原因不明。因此要使索引生效需要把数组放在对象下的一个属性里。

现在我发现,如果想要在mysql中存放一个可以索引的json数组,其实根本不需要使用json字段,即使是普通的字符串字段存放的json数组也可以用同样的方法进行索引。

比如现在有一个字段tags,类型为mediumtext,在其中一行存放了以下字符串:

[1,2,3,4,5,6,7,8,9,10]

然后将其解析为json来创建多值索引:

ALTER TABLE 表 ADD INDEX tag_idx((cast(JSON_EXTRACT(tags, '$') as unsigned array)))

接着在查询数据时也把该字段解析为json进行使用:

SELECT *
FROM 表
WHERE JSON_OVERLAPS('[1,2]',JSON_EXTRACT(tags, '$'))

在这样的查询中,mysql就会使用到这个json数组的索引,因此如果一个数据仅仅是为了作为数组使用的话就没必要套个对象放进json字段了,使用普通字符串字段即可。

[MySQL]member of 不走索引

刚刚发现程序里有一个语句,是一个unique主键 member of(返回json数组的子查询),但它就是不走主键索引,接着我把子查询换成了一个手写的json串,像这样

SELECT
    tag_id
FROM
    tags FORCE INDEX ( tag_id_unique ) 
WHERE
    tag_id member of (JSON_EXTRACT( '[1,2,3]', '$' ))

发现即使是指定了索引也还是不走索引,可能member of就是这样的机制? 目前原因还不清楚,于是我先用了另一个办法。

继续阅读[MySQL]member of 不走索引