写了个TCP连接状态统计小工具,代替 netstat 和 find 命令组合
作者:V君 发布于:2022-6-26 11:33 Sunday 分类:我的应用
然后是使用说明
ConnectionStat.exe 若干监听端口参数
示例
ConnectionStat.exe 80
ConnectionStat.exe 443
ConnectionStat.exe 80 443
首先会输出当前主机的连接状态统计,接着挨个参数指定的端口筛选统计
最后如果指定两个端口以上,则统计列出的端口连接状态总数
简单扯一扯
工作中有一些TCP协议的服务器用来接入各种设备,经常需要统计连接数来排查状况,经常用 netstat 和 find 命令搭配,每次使用都觉得麻烦,那就写个简单的工具来实现汇总,基于这个工具外面再套一层,从服务配置文件读取监听端口,这就更方便了。
总算是修好邮件通知功能了
作者:V君 发布于:2022-5-28 19:15 Saturday 分类:小服杂记
这次排查过程我只能用下面的两张梗图来形容。
首先不知道如何断点调试运行在 Apache 的 PHP,那就只能找到输出日志的方法,然后拼命打log。(第一张梗图)
其次打了 log 得到的错误信息莫名其妙,可能是发邮件的库和自己搭的邮件服务器存在兼容问题,调着调着莫名其妙又通了,然后去掉打 log 的代码,做出思考状。(第二张梗图)
【奇怪的工具】压缩包转换器,不产生临时文件
作者:V君 发布于:2022-5-27 23:32 Friday 分类:我的应用
TL;DR:
首先是 源代码 和作为 Release 的 Win64 DEMO
然后是 DEMO 的用法:
SevenRepacker.exe [/out-dir:d:\zips] d:\archives\1.7z d:\archives\2.7z …
- 输出路径 /out-dir: 可选参数,不指定就会输出到原始文件旁边
- 输入文件 支持动态个数
限制:输出格式被固定成 zip 压缩算法固定 Copy
限制:目前只确定输入文件是 Copy 算法的 7z 能顺利转换成 zip,其他非预期情况未处理
听简单我扯扯:
我习惯把看过的动画片打包归档,用的是 Copy 算法,视频文件重新压缩无意义。 早些时候打了一堆 7z 包,以为只要是 Copy 算法就可以轻松 mount ,用到才发现并没有支持把 7z 归档 mount 成虚拟驱动器的开源(或免费)软件,自己常用的 ImDisk、Pismo File Mount、OSFMount 全都不支持 7z (Pismo File Mount 支持 zip),那就得安排一下做转换了,把这堆 7z 转成 zip 。
手动解开再压缩是不可能手动的,还得找地方放临时文件。在昨天临睡之前古狗了一下转换压缩包的方法,查到的方法不外乎都是先解压,再重新打包,顶多就来点脚本。太没意思了。
关掉浏览器,想想能不能自己写一个小工具,反正只要能流式读取压缩包,那就能做到像管道那样直达目标。前些年我用过的 SevenZipSharp 库就提供了流式 API,稍微做点 tricks 就能搞定了,于是针对我这个使用场景的实现就出来了,作为 demo 放出来。
这个月依旧差点找不到值得发表的内容 _(:з)∠)_
使用 Web API 下载 PDF 遇到的坑
作者:V君 发布于:2022-4-28 20:13 Thursday 分类:挖坑经验
TL;DR:
- 将 XHR 的 responseType 设置为 "arraybuffer"
- 如果使用 axios 则要在参数对象加 responseType:'arraybuffer'
- 获取响应之后用 response 创建 Blob 然后交给 ObjectURL(别忘记type)
- 将创建好的 ObjectURL 交给 IFrame 直接呈现,或者交给 A 标签实现下载
听我扯扯:
前后端分离的项目中遇到需要预览(下载)PDF 的需求,而且用了基于请求头而非 Cookie 的验证方式,因此无法走 IFrame 直接把 API 的 URL 送进去。绕了一圈远路尝试解决验证问题,无果。
回过头想起可以让 XHR 下二进制数据的做法,咕狗“XHR PDF”找到爆栈上面的《XMLHttpRequest to open PDF in browser》。(其实这时候已经看到有回答在 XHR 指定 type 为 'arraybuffer' 了)然鹅把 BLOB 链接放进 IFrame 之后,文字和图片全都不见了,只剩下几页空白页(页数正确)。已经确认过后端输出的 PDF 正常,而通过 A 标签的 HRef 放入 BLOB 连接下载的文件大小跟服务器响应的不一样,体积大约翻了一倍。
在浏览器调试脚本发现 XHR 的 reponse 是字符串,在控制台用 typeof 确认过眼神,这时候只能去咕狗了,“xhr binary data”,第一条返回 MDN 上的《发送和接收二进制数据 - Web API 接口参考》,里面提到了 XHR 的 responseType 属性,设置成 "arraybuffer" 才能避免浏览器把输出内容错误地当成文本来解析。
至此问题完美解决,可喜可贺!这个月差点找不到值得发表的内容 _(:з)∠)_
标签: javascript Web技术 前端工程
别再忍受网抑云欺压了,用起外网IP来搭建自己的私有云音乐吧
作者:V君 发布于:2022-3-14 11:01 Monday 分类:我的应用
TL;DR for 立即想拿来用的人:[ 下载 | 源代码 ]
1)解压,用文本编辑器修改配置文件 config.json
◆ListenPrefix 用来配置监听的IP和端口,格式是 http://+:12345
若要指定监听的网卡,将加号改成对应网卡IP即可
◆Libraries 里面每一项作为音乐库定义,Key是显示名称,Value是物理路径
音乐库目录结构
$/专辑
cover.jpg
01.flac
02.flac
03.flac
/BK
scan1.png
scan2.png
scan3.png
/AAC_
01.m4a
02.m4a
03.m4a
◆MediaFilePattern、BkFilePattern 保持默认即可
2)然后直接双击 FNZCM.ConHost.exe 启动,启动后扫描媒体库获取元数据生成列表
在浏览器打开监听的地址就可以浏览媒体库、专辑、音轨、BK,音轨页面可以在线播放
当文件发生变化时,点击首页底部的 Reload 来刷新媒体库
接着就可以将M3U8链接甩给播放器 APP 在线播放
X)进阶:如果嫌FLAC使用流量太多,肉疼的话还可以批量生成高品质AAC(m4a)
(文件大小缩减到一半以下,音质损失可忽略不计)
只是目前配套的批量转换工具还没有发布直接可用的版本
感兴趣的小伙伴可以阅读源代码了解使用方法,自己编译一个来用)
简单扯一扯缘起
由于无法忍受网抑云肆意下架、移除歌单中的收藏项,而且自己上传一些私有音乐,相似但不同的变异版本它识别得乱七八糟,我决定丢掉它找别的方法听歌。(其实最无法忍受的是吃相太难看)
起初回到原始的下载 FLAC 放到电脑或者手机直接播放,在电脑直接播放本地(局域网共享)文件还行,只是手机端就没这么方便了,还得考虑存储空间,得想办法随时随地直接播放家里的媒体库才行。
简单扯一扯开发感想
碍于爱折腾的个性,首先不使用现成的产品,不管你免费与否、开源与否❌
私有云音乐的本质就是一个流媒体服务器,如果是局域网,直接走共享即可,但是出门在外还想用家里的音乐库,这就得想想办法了。
最开始的步伐迈开的太大,想做一个大而全的网页版,扯蛋不说一直没整出一个像样的东西来
后来想起音乐播放 APP 可以载入 M3U8 格式的列表,这样就不用自己造界面的轮子了,咱可以基于静态目录结构实现随时随地用 VLC 之类的 APP 在线播放。用播放器的好处还有兼容性高,已知一些高规格的FLAC文件无法在浏览器播放,而 VLC 能轻松播放。
于是这个简化版的私有云音乐就出来了,它还有一个接地气的内部名称:“土炮云”
blogger
Google Web Translator
热门日志
随机日志
最新日志
最新评论
- V君
@mayuu酱重症患者... - V君
@test:调试9 - V君
@test:应该修好... - test
检查邮件功能修... - V君
@mayuu酱重症患者... - mayuu酱重症患者
打破零回复惨案... - bngvzuoukj
【数据删除】 - bngvrmswfj
【数据删除】 - V君
@昆仑山伯爵:欢... - 昆仑山伯爵
关于无盘的项目...
分类
存档
- 2022年6月(1)
- 2022年5月(2)
- 2022年4月(1)
- 2022年3月(1)
- 2022年2月(1)
- 2022年1月(1)
- 2021年12月(1)
- 2021年11月(1)
- 2021年10月(1)
- 2021年9月(1)
- 2021年8月(1)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(1)
- 2021年4月(1)
- 2021年3月(1)
- 2021年2月(1)
- 2021年1月(1)
- 2020年12月(1)
- 2020年11月(1)
- 2020年10月(2)
- 2020年9月(1)
- 2020年8月(1)
- 2020年7月(1)
- 2020年6月(1)
- 2020年5月(1)
- 2020年4月(2)
- 2020年3月(3)
- 2020年2月(1)
- 2020年1月(1)
- 2019年12月(1)
- 2019年11月(1)
- 2019年10月(1)
- 2019年9月(1)
- 2019年8月(2)
- 2019年7月(1)
- 2019年6月(1)
- 2019年5月(1)
- 2019年4月(1)
- 2019年3月(1)
- 2019年2月(1)
- 2019年1月(2)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(3)
- 2018年9月(4)
- 2018年8月(6)
- 2018年7月(4)
- 2018年6月(1)
- 2018年5月(2)
- 2018年4月(2)
- 2018年3月(3)
- 2018年2月(1)
- 2018年1月(1)
- 2017年12月(1)
- 2017年10月(2)
- 2017年9月(1)
- 2017年8月(2)
- 2017年7月(1)
- 2017年6月(5)
- 2017年5月(2)
- 2017年4月(2)
- 2017年3月(3)
- 2017年2月(2)
- 2017年1月(2)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(3)
- 2016年9月(4)
- 2016年8月(2)
- 2016年7月(4)
- 2016年6月(3)
- 2016年5月(1)
- 2016年4月(4)
- 2016年3月(3)
- 2016年2月(1)
- 2016年1月(5)
- 2015年12月(4)
- 2015年11月(5)
- 2015年10月(1)
- 2015年9月(6)
- 2015年8月(4)
- 2015年7月(1)
- 2015年6月(6)
- 2015年5月(3)
- 2015年4月(3)
- 2015年3月(2)
- 2015年2月(1)
- 2015年1月(3)
- 2014年12月(1)
- 2014年11月(1)
- 2014年10月(1)
- 2014年9月(3)
- 2014年8月(1)
- 2014年7月(1)
- 2014年6月(1)
- 2014年5月(3)
- 2014年4月(1)
- 2014年3月(1)
- 2014年2月(2)
- 2014年1月(1)
- 2013年12月(2)
- 2013年11月(2)
- 2013年10月(1)
- 2013年9月(3)
- 2013年8月(14)
- 2013年7月(7)
- 2013年4月(1)
- 2013年3月(4)
- 2013年2月(6)
- 2013年1月(6)
- 2012年12月(8)
- 2012年11月(6)