DSM 使用 Python 脚本整理备份的照片
使用群晖DSM系统来备份我们的照片和视频是非常方便的一件事情,但是有些时候,个人的电子设备越来越多,备份后的照片目录也越来越多,有些时候手动导入一些资源后也使得后面整理起来比较麻烦。到一定时间后再去整理和归档相关备份的资料就是一个重复和机械的操作。
群晖DSM系统对于照片和视频的归档方式是按照时间年份以及月份去归档备份资料的,对于这种方式个人觉得比较简单好用,最近正好在整理自己的照片与视频备份,于是写了一个 python 脚本来处理这个重复的工作。
基本逻辑:
读取一个目录下的所有文件,解析图片和视频中的拍摄信息,按照年月进行从命名以及归档操作,值得说明一点的是苹果特有的HEIC图片格式需要单独的处理。
Python脚本:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 ...
Python 脚本整理DSM备份的照片
使用群晖DSM系统来备份我们的照片和视频是非常方便的一件事情,但是有些时候,个人的电子设备越来越多,备份后的照片目录也越来越多,有些时候手动导入一些资源后也使得后面整理起来比较麻烦。到一定时间后再去整理和归档相关备份的资料就是一个重复和机械的操作。
群晖DSM系统对于照片和视频的归档方式是按照时间年份以及月份去归档备份资料的,对于这种方式个人觉得比较简单好用,最近正好在整理自己的照片与视频备份,于是写了一个 python 脚本来处理这个重复的工作。
基本逻辑:
读取一个目录下的所有文件,解析图片和视频中的拍摄信息,按照年月进行从命名以及归档操作,值得说明一点的是苹果特有的HEIC图片格式需要单独的处理。
Python脚本:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 ...
Mac Development Env Setup
Install HomeBrew1/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Install some software123456789101112curl -L https://get.rvm.io | bash -s stablebrew install nvmbrew install nodebrew install pythonbrew install [email protected] install mackupbrew install ansiblebrew install cocoapodsbrew install automakebrew install libtoolbrew install protobufbrew install maven
Install iTerm2安装后快捷键 command + d 新增一个窗口。基于当前窗口路径打开新的窗口,一个配置记得修改 iTerm2 => Pre ...
See the world
机场登录 - 飞毯加速
FreeCloud
国外服务账号奈飞小铺 - 智能账号合租平台
软件
相关教程google 搜索 软件名+使用
iOS
苹果商店
https://apps.apple.com/us/app/shadowrocket/id932747118
https://apps.apple.com/app/stash/id1596063349
https://apps.apple.com/us/app/quantumult-x/id1443988620
Mac
https://github.com/yichengchen/clashX/releases
https://github.com/yanue/V2rayU/releases
https://github.com/shadowsocks/ShadowsocksX-NG/releases
Windows
https://github.com/2dust/v2rayN/releases
https://github.com/Fndroid/clash_for_windows_pkg/releases
An ...
Flutter 使用ffi来提高通信效率
背景开眼项目是一个纯Flutter开发的项目,并且使用Flutter开发了MV模版视频以及通用视频的编辑的功能。为了实现这些功能是怎样与音视频SDK去做通信的呢?
开眼项目前期接入编辑SDK是通过 Channel 调用编辑SDK提供的 Android与iOS 层接口的实现来与底层音视频SDK进行通信的,如图所示:
Flutter 通过使用 grpc 分别传递到信息给到原生层 Android与iOS,然后再使用编辑SDK内部提供的两端中间层去与底层C层去通信的。但是使用这种 Channel 方案会存在两个问题,一个就是在获取缩略图的场景下,Android端的图片需要先在jvm层拷贝一次,然后在传输到Flutter层这样jvm就会申请多余的内存,而且这个过程中也会消耗额外的像素拷贝时间。另一点就是在项目中业务这边需要写大量的Channel代码,基本上编辑SDK的每个接口都需要对应的写个Channel接口。
优化那么如何解决以上提到的这种问题呢?
了解到 Flutter 在1.10版本以后,官方支持了 dart:ffi 功能,使得 dart 可以调用 c/c++ 代码成为了可能。 ...
C++ 基础总结
C++发展历史
1998 年定义第一个 C++ 标准为 C++98
2003 年定义第二个 C++ 标准为 C++03
2011 年定义第三个 C++ 标准为 C++11
2014 年定义第四个 C++ 标准为 C++14
2017 年定义第五个 C++ 标准为 C++17
2020 年定义第六个 C++ 标准为 C++20
iOS项目中选择C++版本
语法须知C++的源文件扩展名是:cpp cc, 头文件:hpp hC++程序的入口是main函数C++完全兼容C语言的语法,其实就是C的扩充
#1. cin、coutC++中常使用cin、cout进行控制台的输入、输出
cin用的右移运算符>>,cout用的是左移运算符<<
endl是换行的意思
#2. 函数重载(Overload)
函数名相同
参数个数不同, 参数类型不同, 参数顺序不同
如下面这样
下面这样写法可以吗?
本质上:采用了name mangling的技术,其实就是就是对函数名进行改编,修饰生成不同的函数名字,不同编译器生成规则不一样
#3.默认参数
C++允许函数设置默认参数,在调 ...
音视频-添加水印如何做到三端统一
背景公司许多项目大多都有音视频生产的功能,一般视频生产添加水印的功能,水印尺寸比较固定基本上都是业务方来自己编写和计算展示水印的尺寸。但是遇到水印不断变化以及前后端同时生成水印视频,且要确保不同分辨率与不同宽高比例在添加水印后,在不同分辨率的手机上呈现出相同比例的水印视频就是一件比较麻烦的一件事了。
首先如何解决这个问题,得需要了解一下水印视频生成的原理。
原理视频添加水印功能一般包含图像部分和文字部分,图像部分又分为图片或者是视频,文字部分是通过外部传入的文字内部进行转换成图片进行处理的。
目前编辑SDK内部的使用的坐标系,初始点为左上角(0,0),终点是右下角(100,100),而这边计算水印的位置是通过水印本身的中心点来做计算的。
水印图像的分辨率的宽和高的1/2分别与屏幕的宽高相除,得到的数值就是这个图像在屏幕的位置比例信息,然后根据水印在四个角的位置属性来计算具体的位置点,然后转换为编辑SDK的坐标系就完成了位置计算。
在水印视频的分辨率不变的情况下,把一个200*200的水印图片合成到原始视频上时,如果我们不做任何的处理,在转吗后得到的水印视频分别在576p, ...
Jenkins fir平台配置
Android1234567891011121314151617181920212223#!/bin/bash# 编译rm -rf Gemfile.lockcd fastlanebundle installVAR1="${BUILD_TYPE}"VAR2="debug"if [ "$VAR1" = "$VAR2" ]; then method="build"else method="release"fibundle exec fastlane android $method# 上传到APP管理平台result=$(curl -k -F "file=@$WORKSPACE/dist/android/kidea_android_${BUILD_TYPE}.apk" <https://nas.vvusu.com:1020/app/upload>)code_url=$(echo $result ...
PVE DDNS外网访问家中服务
本篇记录一下在 PVE 虚拟机下执行自己编写的脚本来实现DDNS外网访问功能
首先需要自行购买域名,有许多的域名提供商,个人比较推荐国外的域名提供商,下面列了几个比较常见的域名提供商。
Godaddy
Google Domains
NameCheap
NameSilo
因为我目前使用的是Godaddy 域名提供商,以下教程是对应的解决方法和教程,
当我们购买了域名,首先要做的是需要创建一个 API Key, 通过这个网址进行注册,https://developer.godaddy.com/keys
点击创建API Key , 输入一个名字,以及Environment 需要选择 Production,点击Next
生成成功,记录一下你自己的 Key 以及 Secret 信息
然后在我的产品里面创建一条 DNS A记录
域名操作的部分已经完成,下面就开始在PVE虚拟机下进行操作,或者其他Linux系统都行
下面是一个需要自动执行的一个检测和更新DNS的一个脚本,需要替换的值,就是上面创建的Key ,Secret,A记录名字以及根域名。
123456789101112131415 ...
Rancher 安装与设置
installrancher 安装 dockerhttps://rancher.com/docs/rancher/v2.5/en/installation/requirements/installing-docker/
12curl <https://releases.rancher.com/install-docker/20.10.sh> | sh
dockerd-rootless-setuptool.sh
install查看docker版本docker version
登陆docker 账号sudo docker login
安装单个Nodehttps://rancher.com/docs/rancher/v2.5/en/installation/other-installation-methods/single-node-docker/
1234567sudo docker run -d --restart=unless-stopped \\ -p 80:80 \\ -p 443:443 \\ -v /opt/rancher:/var/lib/rancher ...