Glory已经很久没有更新blog了,前些天我还在曾经的群里@了他询问情况,但是没有回复。
昨天我发现blog已经打不开了,友链里的第一条已经灰了,不知道是不是出什么事了,其实我们也有很长时间没有联系过了。
我自认为BlackGlory在我学习Web前后端的阶段起到了很重要的作用,虽然不知道他是怎么想的。
我会一直把Glory的友链放在第一个。
==========2021/9/15===========
Glory回复我了,他没事,就是博客在重做,然后出了点问题
Glory已经很久没有更新blog了,前些天我还在曾经的群里@了他询问情况,但是没有回复。
昨天我发现blog已经打不开了,友链里的第一条已经灰了,不知道是不是出什么事了,其实我们也有很长时间没有联系过了。
我自认为BlackGlory在我学习Web前后端的阶段起到了很重要的作用,虽然不知道他是怎么想的。
我会一直把Glory的友链放在第一个。
==========2021/9/15===========
Glory回复我了,他没事,就是博客在重做,然后出了点问题
一个很迷惑的问题整了我一晚上,我在服务器上新加了个网站,用nginx反代到一个后端,但是因为是复制的另一个有静态文件的网站的配置来改的,忘了删nginx的root配置了,于是这个本该是单纯反代的配置就有了一个静态文件输出的功能.
在我发现问题把root选项去掉了之后,它依然保留了静态文件输出的功能,而且文件路径改到默认静态文件目录了,我甚至可以打开nginx的默认index.html,不管我怎么改,一些特定后缀的地址都会被nginx拦截下来当作静态文件去找,然后返回404,根本不pass到后端去。
在我翻了一圈配置文件看到底是哪里出问题的时候,发现了在一个expires.conf里定义了这么两个规则
location ~ .*\.(js|css|html)$ {
expires 10d;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|mp4|mp3)$ {
expires 30d;
}
所有出问题的后缀都是这里面定义的后缀,当我把这几行全都注释掉了之后重启了nginx,这个问题竟然就解决了。
但更奇怪的地方是,在这个出问题的站的配置上根本就没有include这个配置文件,我到现在还是没搞清到底是咋回事。
总之 It Works!
这是去年买的东西了,昨天翻以前拍的照片的时候才想起来这东西的开箱图一直忘了发。
这个一体式VR头显当时特别多宣传,最近几天好像又出现了一波宣传,主要是确实也不错,于是只体验过一次谷歌的辣鸡DayDream的我没管住自己的手,就下单了。我是淘宝代购的,来的是亚马逊的箱子。
这个一体式VR的好处就是既可以用里面自带的魔改quest安德猴系统直接运行安卓普通app和安卓vr app,也可以连电脑上玩电脑vr游戏,我买的时候还需要有线连接电脑,无线串流需要买第三方App,现在官方已经支持WiFi6无线串流了,延迟要求不高的话WiFi5也可以。
音画不同步多半是在vfr(可变帧率)和cfr(固定帧率)之间转换的时候视频帧时间戳没有更新导致的,不知道为啥ffmpeg会默认以这种一定会导致错误的方式工作,但我们手动加入参数后就可以修正这个问题。
如果是一个vfr视频,ffmpeg默认会转换成cfr,如果不希望它转换的话,则在前置参数的位置加一个`-vsync passthrough` ,视频帧率模式就不会被转换了,这样只要原视频音画是同步的,那转出来音画肯定也是同步的,因为时间戳完全没有变。
这是一个月前的事情了,到现在突然想起来拍的照片还没发,另外这次拆解是翻车的,外屏爆了,然后寄出去换外屏,对方又不知道弄了点啥东西在我内屏里,最后软磨硬盘俩星期才给我重换了个屏,不过他给我的屏侧面看偏光很严重,远不如我原来的屏,大概不是原装的。耳机线也被我切断了,换了一个。
以下是拆解正文。
MySQL中创建函数的时候如果出现了这个错误,表示创建语句中缺少错误中所示的3个函数行为声明,只要根据需求加在Begin前面就可以了。
如果你不确定,那就需要加`DETERMINISTIC` ,如果这个函数不会去操作数据库就写`NO SQL` (不是完全不能有SQL语句),如果需要读取数据就加`READS SQL DATA` 。
比如
CREATE DEFINER=`root`@`%` FUNCTION `poi`() RETURNS int
NO SQL
BEGIN
SELECT 1+1 into @r;
return @r;
END
每次换一个环境执行npm i都会碰到这样的问题,记录一下解决方法,
方法1:手动去报错的文件里指定编码为UTF-8,我自己第一次解决这个问题就是用的这个办法,刚刚想找找看有没有别的解决方法的时候发现别人也有去手动改源码的,放个参考链接。
简单地说就是找到报错的那行,给open函数加个`encoding=’utf-8’` 参数就可以解决问题,但这样属于改了人家文件,更新后还是会变回去的,所以现在我不这样做了。
方法2:去控制面板的区域设置里到“管理”标签页下,“更改系统区域设置”,把“Beta版:使用Unicode UTF-8提供全球语言支持(U)”勾上,然后重启一下,python就会默认用utf-8来读文件了。
这个方法会改变整个系统的默认代码页,最主要的影响是会导致使用非Unicode的程序乱码甚至崩溃,还有在gbk设置时以ansi保存的含有中文的bat脚本会乱码。如果影响不大的话倒是可以让系统一直保持在这个区域选项上,影响某些软件的正常使用的话在执行完需要的编译任务后还得改回去。在这种模式下可以使用“locale emulator”这样的软件以Chinese模式启动程序,以解决程序的乱码和崩溃问题。
方法3:我没试过,理论上应该可行,从python本体入手,把它的默认编码设置成utf-8,参考这里的方案2。这个没用
这问题折腾了我一下午,首先是mysql中没有现成的方法来寻找数组中数字的位置,然后是谷歌百度bing用中文和英文搜索都没找到可用又不烂的办法,爆栈网有一个高票答案,但是似乎并不对,JSON_SEARCH只能用来搜索字符串在json中的位置,数字不支持,不知道他是怎么得到结果的。
经过我晚上的继续摸索,翻遍了官方所有json相关的文档,终于让我拼出了一个方案,就是用`JSON_TABLE` 先把数组转成表,然后用where剔除里面不要的数字,再用`JSON_ARRAYAGG`转回json数组,以下是示例代码
“`sql
set @j='[1,2,5,8,9]’;
select JSON_ARRAYAGG(b) from JSON_TABLE(
@j,
“$[*]”
COLUMNS(
b int PATH “$”
)
) as `破mysql连个数组查找方法都没有`
where b<>5;
“`
这样就可以得到结果[1, 2, 8, 9],5被删掉了。
这个方法虽然并不优雅,但也没办法,谁叫MySQL连在数组里找数字的位置都做不到呢。
Mysql中在json字段里存放数组时,如果需要快速查找到包含某个数字或字符串的数组,则需要在这个数组上建立索引,其`multi-valued` 索引能满足这种需求。
在已有表的情况下,执行以下语句创建一个数字数组索引:
“`sql
ALTER TABLE 表名 ADD INDEX 索引名((CAST(json字段->’$.指向数组的对象名’ AS UNSIGNED ARRAY)));
“`
这个语句把json字段中的一个数组以无符号数组读出,并对每个数字进行索引,这样要寻找包含某数字的数组时,将使用索引提速。
如果数组内的成员都为字符串,可以这样创建索引(要注意,该表的排序规则需为`utf8mb4_0900_as_cs`,否则会报错):
“`sql
ALTER TABLE 表名 ADD INDEX 索引名((CAST(json字段->’$.指向数组的对象名’ AS CHAR(255) ARRAY)));
“`
接下来使用类似这样的语句查找拥有某个数字的数组所在的条目
“`sql
SELECT * FROM 表名 where 要找的数字 MEMBER OF(json字段->’$.指向数组的对象名’);
“`
或同时查找多个数字(字符串查找同理)
“`sql
SELECT * FROM 表名 where JSON_CONTAINS(json字段->’$.指向数组的对象名’, CAST(‘[1,2,3,4,5]’ AS JSON));
“`
使用了该索引后,作用在相关字段上的`JSON_OVERLAPS` 函数也会使用索引。
参考:https://dev.mysql.com/doc/refman/8.0/en/create-index.html
vscode可以作为文件比较工具直接启动,使用命令
code --diff 文件1 文件2
即可直接启动vscode并进入一个文件比较选项卡。
可以用此命令来替换winscp里极其难用的文件比较命令。
这是一个多月前开始出现的问题,我想着本来一直都好好的,会不会只是let’s encrypt服务器抽了,说不定过段时间就好了,但是一直到现在都没好,于是就来研究一下这个问题。
标题上这个错误是查询域名的CAA记录超时,我查了一圈CAA是个什么东西,大概就是说要有这么条记录,内容是允许哪个机构颁发什么样的证书。
使用Certify测试时发现在Cloudflare里面会自动添加对应的TXT记录,但是从没自动添加过CAA,既然是必须条目为啥它不添加呢。我在寻找相关问题时别人都是DNS解析服务不支持CAA记录,然后换个服务商解决的,cf又不是不支持。
我怀疑是不是软件问题,于是手动去cf添加了一个CAA记录,这下终于不会出现这个错误了。添加方法如下:

点添加记录按钮添加一个CAA记录,要给哪个域名设置就在名称写哪个域名(根域名写@保存会自动变为完整域名,子域名写子域名),TTL随意,CA域名那里写证书机构地址,比如Let’s Encrypt就写letsencrypt.org,前一个“标记”表示这条记录允许的是上面名称里写的那一个域名还是那个域名通配的子域名。
保存了之后再去Certify中申请证书就可以成功了。
如果还遇到了cf返回的错误“Cloudflare DNS API :: An error occurred while sending the request.”,可以试试把设置中cf的验证方式从“邮箱+Global API Key”改成“API Token”。
一个月前买了个WF-1000XM4,当时是看到了bili上的评(guang)测(gao)视频,然后发现这耳机可能还不错,于是就开始找着买。
当时正好是618,不得不说利用信息差清库存真的可恶,到处都是在甩卖WF-1000XM3的,而且都宣传得好像XM3是最新款一样,因为4才刚出,很多人应该都不知道。
然后是使用感受
至于降噪效果我没用过别的真无线入耳,没得对比,但个人感觉效果还是不如WH-1000XM3的,特别是侧躺或手撑头时脸部受压迫变形会导致漏音。
现在这副耳机我已经用了1年多,我就目前为止的使用体验来做一些评价:
左耳在去年冬天的时候已经因为低温时触摸失灵更换过了,但更换的耳机和另一只比起来在环境音模式下明显有轻微的底噪,而且换回来的这只在包入狭小空间后(比如戴上雨衣帽子)有一点概率会产生高频噪音,类似拿着话筒在音响前面产生的那种噪音。
我会想要写这段更新,主要还是因为现在右耳又不行了,就从最近开始现在它在耳机盒里充电最多只可以充到90%,有时是80%,并且在佩戴半小时后就开始报电量低,已经出现了电池寿命严重折损的情况。有时候从耳机盒里拿出来的时候它还有点温热,我怀疑它是不是里面有地方漏电。关键保修期只有1年,现在已经过保几个月,出现这种问题已经没法免费更换了。官网上标价更换一只耳机的费用是500多元,那我还不如重新买个别的耳机。左右两只耳机接连出现问题,讲道理这个耳机的整体质量真的对不起当初发售的时候1999元的价格,如果它的使用寿命只有这么短,我就算每年都随便买个稍微便宜点音质还行的耳机,用一年就扔都比它划算。
另外我还要补充一个之前没有提到的缺点
刚刚戴着quest2发现pixel xl的距离传感器红外灯在息屏状态下一直在闪,研究了一下发现是双击亮屏功能导致的,为了防止手机在口袋里触发双击亮屏误触,所以需要搭配距离传感器使用,不知道这样会额外增加多少耗电量。
这是一篇错误处理记录,该错误出于node-mysql2模块,我找到的相关issue在此 https://github.com/sidorares/node-mysql2/issues/1239
今天把代码推上服务器跑起来直接报错,但是不管我怎么检查我写的代码都没有问题,最后只能上网找,然后搜到了这个issue。
问题就出在8.0.22以及之后的版本的Mysql Server对于使用prepared statement传输的数值类型数据表示方法不一样了,导致支持prepared statement的mysql库按照原来的规则传输数据时发生兼容性问题而报错。
在库作者按照新方法修好之前,临时的解决方案可以是覆写连接或连接池的execute方法,在其中把所有数字参数用`.toString()` 转换成字符串,这样就可以正常使用prepared statement了。
这篇博文是对于该模块https://www.npmjs.com/package/sharp的笔记,这是一个nodejs上用于处理图片的模块。
遇到的问题是该模块处理手机拍摄的照片时(带有EXIF方向信息的图片),不会自动按照该图的EXIF信息先旋转图片到正确的方向再进行处理,导致处理完的图片会转向错误的方向。
然后我翻了一下API文档里的rotate部分,光看第一行就可以知道这并不是一个bug:
rotate the output image by either an explicit angle or auto-orient based on the EXIF `Orientation` tag.
如果调用rotate时不带参数的话会根据EXIF信息的方向进行旋转,也就是说它是特意默认不自动旋转的,要解决这个问题只要在调用所有处理函数之前先调用一个没有参数的`rotate()` 即可。
比如
sharp(图片路径)
.rotate()
.resize(200, 200)
.jpeg({quality:90}).toBuffer();
我以前一直以为Windows资源管理器里按住shift右键空白地方才有特殊菜单,最近才知道按住shift右键文件和文件夹也会有特殊菜单出来