show table status from `库名` where name='表名'
然后从中读取
Data_length
字段就是该表占用的字节数。
我查的时候看到一堆答案都是遍历表里每个字段然后sum加起来计算,就没搞懂这是为啥。
show table status from `库名` where name='表名'
Data_length
字段就是该表占用的字节数。
我查的时候看到一堆答案都是遍历表里每个字段然后sum加起来计算,就没搞懂这是为啥。
25岁啦。
这一年没做什么值得瞩目的项目,多数时间还是用在处理公司一大堆繁杂小事上了,同时也在做公司的在线系统和平台。
由于每天都公司和家两点一线的原因,周末也不高兴出去玩,所以到现在还是单生狗,现在是大龄单生狗了。
按照惯例,我应该要画一张琪露诺作为新的头像,但目前还没开始画,等画完了贴上来。
写了个用于修改http、https请求和响应的node服务,它会启动一个socks5服务端,然后把你的代理设置成这个服务端口,在代码里写上你的修改逻辑即可。
名字取自Man-In-The-Middle,把人改成了socks。
NPM : https://www.npmjs.com/package/socksinthemiddle
Github : https://github.com/JiaJiaJiang/node-socksInTheMiddle
node.js 做的socks5服务端,支持socks5/4/4a,支持无验证和用户名密码验证模式,支持tcp和udp模式,bind模式暂时还没做
碰到一个需要给图表上数据打颜色的场景,我希望对于同一个名字的数据每次出来的颜色都是一样的,于是想了半分钟,搞出了这么个方案
function strToRGB(name){ let sum=0; for(let s of name)sum+=s.codePointAt(0); return [sum%128,sum%126,sum%124]; }
除数选1到256都可以,选多少取决于希望结果出现在哪个范围,我这里为了让结果颜色偏暗,所以选了128左右的除数。
刚刚mysql启动不起来了,翻了翻docker日志,里面全是mbind: Operation not permitted
,然后netstat看了看也没别的程序占用端口,怎么就没权限监听端口了呢。
咕咕查了查,都是说和docker-compose有关的答案,但是我没用它,只好再研究是什么原因。
直到我编辑了一个文件然后保存的时候终于知道是什么问题了,它报了个硬盘空间不足,估计又是什么log把硬盘撑爆了,然后就du命令一路找,找到了一个9个多G的docker容器log,删掉它之后重启docker,mysql也可以启动起来了。
为了防止问题再发生,给docker容器设置了个log大小限制。
首先容我说一句,搞出自动唤醒电脑更新系统这个策略的人是烧饼,搞出更新后无视用户任务自动重启电脑的人也是烧饼,说不定还是同一个人。
从Win10开始就有不少人遇到了这个问题,最后发现是系统更新半夜唤醒了电脑,关闭方法是在“任务计划程序”里找到”\Microsoft\Windows\UpdateOrchestrator\Schedule Wake To Work”这一项,把它禁用,如果提示权限不够无法操作,可以搜索一下如何禁用这个任务计划。
这篇文章我要说的是另一个问题,自从升级到Win11之后,之前在10里面已经改过的设置又被改回来了,又开始每天晚上自动开机跑更新,而且即使再改,它依然会被恢复到默认状态,晚上还是会自动开机,真实烧饼行为。于是只能换个办法来解决这个问题,我找到的一个办法是,既然任务计划唤醒电脑靠的是唤醒定时器,那么只要把唤醒定时器整个禁用掉应该就好了。
关闭方法是在当前的电源计划设置里找到“睡眠”→”允许使用唤醒定时器“,把启用改成禁用即可。现在几个晚上下来都没有再出现自动启动的情况了。
不管是使用a标签还是HTTP Header指定文件名下载文件的方法都可以使用,其实就是直接把路径分隔符放进文件名里就可以了,但是要注意不能直接把/
放进去,要放的是encodeURIComponent('/')
之后的结果%2f
,否则浏览器会把斜杠转换成别的字符,比如下划线。其实也可以直接把子目录/文件名
拼起来之后一起进行encodeURIComponent
。
例:
<a href="文件地址" download="子目录1%2f文件.pdf">点击下载</a>
子目录1
里,文件名为文件.pdf
今天做一个自用小图库的时候发现保存的tag_id没一会就已经上万了,但是实际的tag数量才只有600个左右,找了一会儿发现是ON DUPLICATE KEY UPDATE
导致的。
简单来说就是由于mysql在执行语句之前不知道它会进入insert还是update模式,为了一致性只能先取一个自增id,不然如果进了insert模式就没有id用了,就是这样导致即使该语句实际上进入的是update模式也会导致自增id+1。
网上有找到修改innodb_autoinc_lock_mode
来解决的方法,但是我改成0了之后依然会导致进入update模式后自增+1,不知道为什么。
还有的说在程序里先select,再决定是insert还是update,但这样并发会导致问题,如果select和后续步骤之间有别的请求插入了满足条件的条目,就会导致错误。
我用暂时了这样一个笨办法,关掉自增,然后手动设置id为最大值+1,其中tag_id
和name
都是unique
字段
INSERT INTO {{EJS16}} ( {{EJS17}}, {{EJS18}}, {{EJS19}} ) VALUES (( SELECT id FROM ( SELECT max( tag_id )+ 1 AS id FROM tags ) AS tmp), 'valueA', 'valueB') ON DUPLICATE KEY UPDATE {{EJS20}}=VALUES({{EJS21}})
但这样做也有一个很明显的缺陷,因为用的不是数据库自带的自增,于是自然也就没有LAST_INSERT_ID
,所以如果需要获取刚刚插入数据的id的话,就得再进行一次查询。
好在可以根据affectedRows判断此语句发生了更新还是插入,如果影响的行数是2的话那就是更新,如果是1就是插入了一条新数据。
注意,这个方法只适用于单个事务依次执行,如果是并发会造成死锁!
这个问题只在InnoDB会出现,所以如果对并发要求不高的话可以直接改成MyISAM引擎解决问题。
如果有什么别的好办法希望可以给我留言,谢谢。
第一次做破解软件
今天是国庆假期最后一天,我本来打算今天装个win11然后补完赛马娘第一季的,结果还没睡醒就被公司的人打电话来叫醒说一个软件显示注册过期了,这软件还特别重要,必须要可用。
关键是前任网管并没有给我交接这个软件安装人员的相关信息,软件里关于界面也没留联系方式,软件说明书文档里写着注册码要问物业或机器销售方要,我就是物业,机器不知道是谁装的,于是我只能远程把软件拉回自己电脑上开始尝试破解。
一个上午没有任何进展,一直被ida稀烂的文字编码拖着后退,字符串列表完全找不到关键词。你说它同样是UTF-16的字符,有的就能显示有的就是乱码,再加上这软件有的中文是GB系编码,有的是UTF-16LE编码,光是找注册相关代码的地址就找了一下午,IDA都换了4个版本。
最后编码问题还是靠vscode解决的,在vscode里直接用UTF-16LE编码打开程序文件,找到里面需要的中文字符串,再新建一个文档保存成UTF-16LE,再用hexeditor插件打开来,再用字节码搜索字符串在程序里的地址,再找引用这个地址的代码段,再改汇编测试。
IDA这东西往程序里patch还不能连续patch,连着改会把程序改坏,坏了好几次我才发现不是我改的汇编有问题,于是又写了个bat每次patch前一键把程序复原,再patch测试。
一直折腾到现在现学现做用了15个小时终于破解好了,写这篇日志的时候已经是第二天1:30了,有计划的一天完全浪费了,头发也没来得及理,番也没看,win11也没装,自己的事啥也没做,淦。
之前写过一个情况,是由于程序权限不足而导致无法监听小端口号,但是今天我又遇到一个奇怪的情况。
调试node.js后端的时候需要监听3000端口,前几天都是好的,但是刚才启动的时候报了bind EACCES
错误,查看端口并没有被使用,程序在别的电脑上就正常。整来整去还是不行,于是开始在网上找有没有类似的情况,竟然让我找到了。
在一个搜索结果里出现列Hyper-V字样立刻吸引了我的注意,因为我昨天由于一些软件无法启动,排查问题的时候打开了Windows Sandbox,这是微软基于Hyper-V做的windows沙盒。
看了看内容应该大差不差找到原因了,启用Hyper-V会导致系统保留一些端口,这些端口不能被别的程序使用,而我用的3000正好在里面,于是就出现了今天这种端口明明没有被别的程序使用,但就是不能监听的情况。
解决方法原文在这里
简单描述一下就是在启用Hyper-V之前要用netsh设置一下你需要的端口列表,确保启用Hyper-V之后这些端口不会被保留。
netsh int ipv4 add excludedportrange protocol=tcp startport=3000 numberofports=1
要注意的是在Hyper-V或者Sandbox启用的情况下进行设置不会直接生效,必须先禁用再启用才行。
相关资料:
2022/3/1 更新
今天发现一个更方便的方法,不需要先关闭hyper-v服务再开,方案在这里
首先重新分配一个端口段,只要我们需要监听的端口不在里面即可
netsh int ipv4 set dynamicport tcp start=49152 num=16384
然后编辑注册表禁用端口排除(但是使用netsh int ipv4 show excludedportrange protocol=tcp
可以看到还是有排除的端口,只不过变成了前一条命令设置的范围)
reg add HKLM\SYSTEM\CurrentControlSet\Services\hns\State /v EnableExcludedPortRange /d 0 /f
然后重启
重要提示:设置排除端口时你必须设置足够多的端口(几千到几万个)才能保证需要对外发起连接的程序能正常工作,因为发起连接需要占用一个端口,如果你设置的排除端口不够多,那么端口资源很快就会被耗尽,之后发起的连接就会出现addr in use之类的报错。
MDN翻译
https://developer.mozilla.org/zh-CN/docs/Web/API/Location/ancestorOrigins
拿手机从望远镜里拍的
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; }
但更奇怪的地方是,在这个出问题的站的配置上根本就没有include这个配置文件,我到现在还是没搞清到底是咋回事。
总之 It Works!
这是去年买的东西了,昨天翻以前拍的照片的时候才想起来这东西的开箱图一直忘了发。
这个一体式VR头显当时特别多宣传,最近几天好像又出现了一波宣传,主要是确实也不错,于是只体验过一次谷歌的辣鸡DayDream的我没管住自己的手,就下单了。我是淘宝代购的,来的是亚马逊的箱子。
这个一体式VR的好处就是既可以用里面自带的魔改quest安德猴系统直接运行安卓普通app和安卓vr app,也可以连电脑上玩电脑vr游戏,我买的时候还需要有线连接电脑,无线串流需要买第三方App,现在官方已经支持WiFi6无线串流了,延迟要求不高的话WiFi5也可以。