4.2k words

背景与需求

之前写C#的时候,解析json字符串一般使用的是开源的类库Newtonsoft.Json,方法十分简洁,比如:

1
2
3
4
5
6
7
class Project
{
public string Input { get; set; }
public string Output { get; set; }
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
Project test = serializer.Deserialize<Project>(@"{"Input":"1","Output":"2"}");

一行代码就能将json字符串转为相应的类对象。

最近写C++需要处理一下json数据,于是上github找了很多很强大的开源库,像jsoncpprapidjsonjson,基本上都满足了开发需求,但想要做成像写C#那样子就要做二次开发。于是有了自己写一个简单的json转类 | 结构体的工具的想法。

3.5k words

系统软件

卸载geek (推荐:5💖)

  • Geek是一款体免安装的,大小不到10MB的Windows软件卸载工具
  • 相比较于Windows自带的软件卸载程序,界面简洁易懂、操作简单
  • 最为重要的一点是它会帮忙清理注册表及残留的文件和文件夹

img

970 words

准备

下载ffmpeg:

1
2
3
4
5
#克隆ffmpeg工程
git clone https://gitee.com/mirrors/ffmpeg.git ffmpeg
#新建安装目录
cd ffmpeg
mkdir install

image-20221121084820000

环境配置

将交叉编译链的目录设置到环境变量中:

1
export PATH=/opt_RTU/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin:$PATH

image-20221121085040099

编译移植

编译选项配置

1
./configure --prefix=./install --enable-cross-compile --target-os=linux --cross-prefix=/opt_RTU/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/ --cc=arm-linux-gnueabihf-gcc --cxx=arm-linux-gnueabihf-g++ --nm=arm-linux-gnueabihf-nm --strip=arm-linux-gnueabihf-strip --ar=arm-linux-gnueabihf-ar --ranlib=arm-linux-gnueabihf-ranlib  --pkg-config=arm-linux-gnueabihf-pkg-config --cpu=cortex-a7 arch=arm32 --disable-yasm --disable-x86asm --disable-static --enable-shared --enable-small --enable-ffmpeg
  • –prefix:输出目录
  • –enable-cross-compile : 开启交叉编译
  • –target-os : 目录系统
  • –cross-prefix : 编译前缀,通常是指定的编译目录
  • –cc : 指编c编译程序
  • –cxx : 指定c++编译程序
  • –cpu : 指定cpu类型
  • -arch : 指定程序运行版本
  • –disable-yasm : 不启用汇编指令
  • –disable-static : 禁用静态库生成
  • –enable-shared : 启用动态库
  • –enable-small : 启用最小生成
  • –enable-ffmpeg : 生成ffmpeg可执行文件

编译安装

1
2
make -j12
make install

image-20221121085356829

895 words

准备

下载cmake

下载Download | CMake软件,并安装:

image-20221117170329077

下载Opencv

下载Opencv源码:

image-20221117170514707

编译移植

opencv源码解压

1
2
3
4
5
6
#解压
unzip opencv-4.6.0
#移动
cd opencv-4.6.0
#新建编译目录与输出目录
mkdir build install

cmake配置

设置路径

第一个选择源码路径,第二个选择编译目录

image-20221117170914152

设置交叉编译链

点击Configure之后,开始设置编译环境

image-20221117171813013

image-20221117171836307

修改配置

  1. 设置生成的模块

image-20221117171215688

image-20221117171304773

  1. 设置编译的模块

    image-20221117171416669

image-20221117171443902

image-20221117171455816

  1. 设置QT环境

    image-20221117171518437

  2. 设置输出目录

    image-20221117171556346

生成

点击Generate之后,进入build目录下,执行:

1
2
make -j12
make install

QT中使用Opencv

  1. 修改pro文件
1
2
INCLUDEPATH += ./lib/include/opencv4
LIBS += -L$$PWD/lib/lib -lopencv_world
  1. 新建工程,并在MainWindow中修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);

Mat img=imread("./4.jpg",1);
waitKey(0);
// Convert to graycsale
Mat img_gray;
cvtColor(img, img_gray, COLOR_BGR2GRAY);
// Blur the image for better edge detection
Mat img_blur;
GaussianBlur(img_gray, img_blur, Size(3,3), 0);
// Canny edge detection
Mat edges;
Canny(img_blur, edges, 75, 200, 3, false);
// Display canny edge detected image
imshow("Canny edge detection", edges);
waitKey(0);
}
291 words

简介

RustDesk是一款远程桌面软件,开箱即用,无需任何配置。可以完全掌控数据,不用担心安全问题。可以使用免费的注册/中继服务器, 也可以自己搭建中继服务器。

另外RustDesk还提供多个平台的软件,包括Windows、macOS、iOS 还有 Android 在内的多个平台。

image

下载设置

下载

image-20221104101123734

使用

点击ID旁边的按钮,设置允许IP直接访问。在右侧的控制远程桌面输入框中,可以输入对方的ID,也可以输入局域网的IP进行远程控制。

image-20221104101539780

1.3k words

背景

服务器运行一段时间之后,突然报磁盘已满了,查询了一下服务器磁盘后,发现mysql有一个文件占用了快20G

image-20221017101019387

解决方法

  1. 修改慢日志保存路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#查询慢日志保存路径
mysql> show variables like '%slow%';
+---------------------------+-----------------------------+
| Variable_name | Value |
+---------------------------+-----------------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/web-slow.log |
+---------------------------+-----------------------------+
5 rows in set (0.03 sec)

#关闭慢日志
mysql> set global slow_query_log=0;

#设置新保存路径
mysql> set global slow_query_log_file='/var/lib/mysql/web-slow-new.log';

#打开慢日志
mysql> set global slow_query_log=1;

#查询结果
mysql> show variables like '%slow%';
+---------------------------+---------------------------------+
| Variable_name | Value |
+---------------------------+---------------------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/web-slow-new.log |
+---------------------------+---------------------------------+
5 rows in set (0.04 sec)
  1. 删除原来的慢日志
1
rm /var/lib/mysql/web-slow.log

其他

1
2
#查询正在运行的sql语句
select * from information_schema.`PROCESSLIST` where info is not null;
639 words

背景

Clickhouse有很多系统表,其中包含了很多日志表,比如query_log、query_thread_log、trace_log。

默认情况下,ClickHouse不清理日志,因此随着时间推移,这些表会占用大量磁盘空间。

image-20220908100840263

可以通过以下语句查询system中的各个表大小:

1
2
3
4
5
6
7
SELECT 
sum(rows) AS `总行数`,
formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`,
formatReadableSize(sum(data_compressed_bytes)) AS `压缩大小`,
round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS `压缩率`,
`table` AS `表名`
FROM system.parts where database = 'system' group by `table`

image-20220908100549528

解决方法

从查询的结果可以看到 query_logquery_thread_log占比比较大,需要进行清理。

可以通过设置相应日志表的TTL来清理:

1
2
3
#保存一个月的数据
ALTER TABLE query_log MODIFY TTL event_date + toIntervalMonth(1);
ALTER TABLE query_thread_log MODIFY TTL event_date + toIntervalMonth(1);

image-20220908133700170