修复特定视频无法打开

2022年11月5日 没有评论

从网上下载回来的视频,打开时提示编码格式不对,不能播放。

实在是很遗憾。

后来经过检索,找到了一种方式,将文件以十六进制格式打开,将开头的3个 FF 删除,再拖动到文件的末尾,将最后的两个 31,修改成两个 00。

保存文件,然后我们再来试一试。

分类: 一句话, 日常 标签:

gif 生成 mp4 文件

2022年10月24日 没有评论

由于项目需要使用 mp4 视频文件,所以要将现有的gif 动画给转换一下。

网上一搜索,各种在线转换工具,随便选了一个,上传转换下载一气呵成。

但是,后面视频怎么都不显示,以为是代码的问题导致,后来无意间看到 chrome 内核下是可以正常显示的,遂怀疑是兼容性问题。

于是网上各种检索,无意间看到别人在一篇 android 手机的帖子里提及了类似的问题,说是转换的格式不对。尝试了一下,果然解决问题。

这里给出 ffmpeg 的方案,方便后来人:

ffmpeg -i gestures.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" gestures.mp4
分类: 一句话, 工具 标签:

Ubuntu 如何连接 WPA2 企业无线网络

2022年9月10日 没有评论

今天使用 Ubuntu 去连接企业级别的无线网络,按照设置填写完信息后,总是无法访问,系统会自动弹窗让重新输入用户名密码。网上搜索了下,看来很多人都有遇到类似的问题。大家都认为是 Ubuntu 本身的连接 bug。

这里给出一个最简单的方法:

在/etc/NetworkManager/system-connections/下有连接过的wifi的配置文件,找到你刚才连接的那个。在[802-1x]节点下,检查system-ca-cert的配置,添加或者修改以确保 system-ca-cert=false,保存退出,重新点击连接WIFI就可以了。

这么看起来,似乎是 UI 界面在设置的时候没有把这个值给写到配置文件里导致。

分类: 一句话, 日常 标签:

查找端口被占用的程序

2022年8月8日 没有评论

在运行程序,特别是开发阶段,有时候会碰到程序提示端口被占用的情况。有的时候,我们可以改变端口号,但是某些时候,端口号不能修改,只能去找到底是被什么程序占用的。

首先,以管理员权限运行下面的命令:

netstat -ano

可以显示所有获得网络连接活动的程序列表,如果想看特定的端口,也可以一步到位,例如查找 4200 端口,输入:

netstat -aon | findstr "4200"

界面输出的列表最后一列就是 PID 信息,这个 PID 就是使用该端口的程序进程。然后在任务管理器里根据 PID 找到具体的进程,接下来就是根据情况杀死这个进程就可以了。

但是,但是,别急。一般情况下没有问题,实际操作上会发现有的时候,查出来的 PID 是 4,也就是 System 进程,该进程无法被结束。

是不是感觉很沮丧。

在网上一番检索后,又找到了针对 System 进程进一步分析的方法。

接着在命令行里输入:

netsh http show servicestate

在输出结果里查找目标端口号,再根据上下文找到“请求队列名称”的值,这个值就是具体的进程,再根据这个队列名称,在上下文里找到进程 ID。

最后就可以在任务管理器里结束相关进程拉。

分类: 工具 标签: ,

树莓派编译安装 python

2022年7月26日 没有评论

由于我的 pi 里的 python 版本还是 3.5,一些功能无法使用,但是 arm 架构又没有现成的源,只好本地编译安装。

先安装基础的编译工具

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev   
sudo apt-get install -y libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm 
sudo apt-get install -y libncurses5-dev  libncursesw5-dev xz-utils tk-dev

到 python 的官方库里取下载源码,例如:

https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tgz

cd /tmp
 
tar zxvf Python-3.9.13.tgz
cd Python-3.9.13
 
sudo ./configure && sudo make -j4 && sudo make install

需要注意的是,在解压缩时,可能会报错,可以尝试移除 z 参数,改用 xvf 来解压缩。反正衣服自己洗是放弃了,直接在 windows 平台上用 7z 重新打包,然后上传到 pi 里解压缩来解决的。

最后,通过 python3 -V 来检查版本号是否符合预期。

分类: Banana Pi, Python, 日常 标签: ,

nvm 切换源

2022年7月19日 没有评论

昨天在 WSL 里安装 nodejs,按照官方文档,对于 WSL 系统,不能安装常规的版本,需要通过库管理工具例如 nvm 来安装。

nvm 安装完成以后,运行 nvm ls 可以获取到 nodejs 的版本列表,运行 nvm install –lts 可以安装最新长久支持版本的 nodejs,可是问题就在于这个下载速度实在太慢,一直都失败了,简直让人崩溃。

突然想起来,既然 npm 有国内源,是不是 nvm 也可以使用国内源。原本是想查找其配置文件,检索了一番,费时间,放弃了,和我没有缘分。

搜索了下,发现了一个更合适的方法,如下:

NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node nvm install 16.16.0

直接使用淘宝源来下载安装 16.16.0 的版本,临时性地修改了环境变量,很是方便。

分类: 一句话, 日常 标签:

sox 选择输出音频设备

2022年7月6日 没有评论

老实来说,这个问题困扰我的时间简直是以年为单位,在很久以前,我是用音箱直接连接的香蕉派,所以平时用来播放音频是没有问题的。

后来切换到 Firefly 后,木有多的音箱了,但是好消息是显示器自带的有音频输出,所以就想着是否可以直接拿过来用,同时又不改变其默认的输出设备,也就是说默认还是使用电路板上的音频设备,以规避设备切换或者移动带来的问题。

一直以来,都是使用 sox 来播放音频文件,占用资源少,命令行运行,非常完美。

就是这个选择默认音频输出设备,简直要崩溃,查看了其帮助文档,也没有说清楚具体是要如何操作。

直到有一天,无意间发现了命令,简直不要太好用。说起来也很简单,就是环境变量的设置。放在这里,方便像我一样的小白。

AUDIODEV=hw:0 play test.wav

这里的 0 就是音频设备编号,想要查看具体有哪些音频设备,以及其编号,可以输入:

aplay -l

大家请一定要根据自己机器的实际情况来设置上面的数字顺序哈。

分类: Firefly, 日常 标签: ,

升级 MongoDB

2022年6月11日 没有评论

一直以来,衣服自己洗都意味升级 MongoDB 的升级,就是从官网下载最新的 zip 包,然后解压缩覆盖同名文件即可。

这次发现官网上已经有 5.x 的版本了,替换后报错,检查日志发现了下面的提示信息:

Invalid value for featureCompatibilityVersiondocument in admin.system.version, found 4.2, expected ‘4.4’ or ‘4.9’ or ‘5.0

经过搜索发现了官网的帮助文档,还需要修改配置。

在升级前,先连接和访问 admin 数据库,在 shell 里运行下面的命令

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

检查其返回值里是否包含和 MongoDB 实际版本号一致,我这里当前的版本是 4.4,如果不一致,那么需要运行下面的命令修改

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

接下来,再用最新的版本来覆盖。等待 MongoDB 启动后,再次运行上面的设置命令为实际版本号,本次最新的版本号是5.0,所以就需要设置为 “5.0”,方便下一次升级。

需要注意的是:

1、尽量逐版本升级上来,不要跨越太大的版本区间。

2、操作前请及时备份数据。

分类: 日常 标签:

如何让 WSL 支持多个独立的 Ubuntu 实例

2022年5月11日 没有评论

在 win10/win11 系统中,微软已经支持了 WSL,用户可以先安装 sub system for Linux 组件,然后通过 Store 来下载自己感兴趣的 Linux 镜像来安装享用。

但是,这么做有一个问题就是对于同一个类型,例如 Ubuntu 20.04,就只有一个实例,对于普通用户来说,不能添加多个实例。

那为什么会有多实例的需求?很简单,场景需求不同。例如,有时候想临时折腾下某个功能,然后完事了再还原回去,也就是类似快照的功能。还比如说,针对 .Net 和 Java 设置不同的环境,各自编译各自的,互不影响,系统也简洁,有点docker的味道。

微软的答案就是使用 wsl 命令,可以轻松导出或者导入发行版的副本。

首先,可以使用 wsl –list 命令,获取到当前系统上可用的实例。
wsl –export Ubuntu ubuntu.tar // 导出 Ubuntu 实例,并保持为 ubuntu.tar 文件
wsl –import Ubuntu-java .\Ubuntu-java ubuntu.tar // 导入 ubuntu.tar 文件,生成新的实例,新名称为 Ubuntu-java,新实例的文件夹为当前目录
wsl -d Ubuntu-java //启动新的实例

当然,wsl 还有 WSL 1 和 WSL 2的区别,大家可以根据自己的偏好使用即可。

像作者“衣服自己洗”这么懒的人,怎么可能用命令行呢,不方便不说,参数什么不好记。经过一番搜索,最后锁定了 “WSL Manager”这么一个开源工具,可视化操作,还是比较爽的。

经过试用,发现使用这个工具进行导出导入操作时,时间比使用命令行的方式要长些,都快要放弃的时候,界面显示操作成功。所以大家可以结合起来使用,日常的启动停止等操作就用 GUI工具,偶尔的导出导入操作就用命令行。

有个事情需要提一句,WSL 和虚拟机之类的有冲突导致蓝屏,这个是和 Hyper-V 有关,目前来看只能二选一,无解。

分类: 工具 标签:

.Net 6 使用 Winform API

2022年4月6日 没有评论

最近的项目在计划切换到使用 .net6 来编译,虽然微软官网有提供转换工具,但是作为强迫症人群,还是选择了从0开始创建项目,在创建后,再拷贝相关代码。

很显然的,有一些函数或者命名空间在 .net6里并无法找到对应的,官方也提及,可以先试一试 Microsoft.Windows.Compatibility 这个 NuGet 包。VS2022 的右键菜单里还提供了一个很实用的功能,就是移除未使用的引用,所以大家可以放心地先引用。

如果你的项目使用了注册表,那么就需要添加 Microsoft.Win32.Registry 这个 NuGet 包。

很可惜,我的代码里使用了 System.Windows.Forms 的API去判断电源是 DC 还是 AC 模式,上述都没有很好地解决问题。

经过一番搜索,发现下面的解决方式,
1、右键卸载项目
2、编辑项目的 csproj 文件,在 PropertyGroup 节点下添加 true和true 这两个配置。
3、设置 .net6.0属性,替换为 .net6.0-windows,如果有其它的编译需求,例如 net461也可以加进去,以英文分号分割。
4、重新加载项目

当然,这么做也意味着编译后的二进制文件并不能在 Linux 平台上运行,仅仅意味着使用 .net6编译而已,不过这个对于衣服自己洗来说已经足够了,本身项目就是跑在 windows 平台上的。

分类: 日常 标签: