Rust:在 Windows 上构建并使用 OpenCV

AUTHOR: Locez
VERSION: 2
UPDATE: 2023-05-10

目标


本文目标为在 Windows 上编译 OpenCV,并且利用 opencv-rust 成功在 rust 项目中使用 OpenCV。

前置条件


  • 已经完成 rust 安装
  • 已经完成 git 安装

安装 C++ 编译工具链


此处推荐直接安装 Visual Studio, 可以省去非常多的麻烦, 勾选以下几个选项即可:

  • 使用 C++ 的桌面开发
  • 右侧勾选 C++ ATL 支持,需要注意是否与 MSVC 版本一致(编译 OpenCV 过程中需要)

如果你曾经已经安装过 Visual Studio,此处只需要打开 Installer 修改一下配置即可完成安装。

Read More

Protocol Buffers 食用方法

AUTHOR: Locez
VERSION: 1

1 Protocol Buffers 是什么?


Protocol Buffers 是 google 开发的一种开源的、跨平台的、可扩展的结构化数据序列化机制。使用 Protocol BUffers 可以定义只定义一次结构化的数据,然后通过生成的代码,在各种语言的数据流中都可以轻松高效的读取和写入定义好的结构化数据。

: 因代码仓库名称为 protobuf,以下为了行文简单, 统一使用 protobuf 指代 Protocol Buffers

1.1 Protobuf 的优势是什么?


Protobuf 是一种结构化的,序列化和反序列化的机制,那么对比最常用的 jsonxml 有什么优势呢?

  • 序列化与反序列化执行效率高
  • 序列化产物较小,在网络传输中可以更加节省带宽
  • 支持直接生成各种语言的代码,访问接口统一舒适

一个基本的 proto 文件中的结构体定义如下(proto2 语法):

1
2
3
4
5
 message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}

Read More

中国剩余定理

AUTHOR: Locez
VERSION: 1

什么是中国剩余定理?


中国剩余定理是数论中关于一元线性同余方程组的定理,说明了一元线性同于方程组有结的准则以及求解方法。《孙子算经》中有一题:

1
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

这个题目翻译过来的意思就是:

1
一个整数除以 3 余 2, 除以 5 余 3, 除以 7 余 2,求这个整数是什么?

同时这也是韩信点兵的故事的来源,韩信让士兵们依次按 3 人一排,5 人一排, 7 人一排进行排列整队,每次只数最后一排的人,便可算出总人数

而韩信点兵与上面的题目同理,数最后一排的人数,也即数余数。3, 5, 7 这种小的数可以枚举,也可以有口诀,但是当这些除数很大,要怎么求解这些一元线性同余方程组,就是中国剩余定理要解决的了。

Read More

Fuchsia 编译指南

AUTHOR: Locez
VERSION: 1

Fuchsia 简介


在进入本文正文之前,有必要简单介绍一下 Fuchsia 是个什么东西

Fuchsia 是 Google 在 2016 年 8 月推出的一个操作系统,是一个实时操作系统。它不再基于 Linux 内核,而是基于名为 Zircon 的微内核,并且它被设计为支持多种设备,手机、平板、PC,因此可以猜测其准备在三种终端设备上进行一定的统一

在官方文档中有这么一句话:

1
Pink + Purple = Fuchsia(a new Operating System)

可以作为该系统的 slogan

在本文,将介绍从源码编译该系统进行探索体验

Read More

RSA 算法

AUTHOR: Locez
VERSION: 1

RSA 是什么?


RSA 是以发明者 Ron RivestAdi ShamirLeonard Adleman 名字的首字母命名的一种非对称加密算法。在公钥密码系统中,加密密钥与解密密钥不同,由加密密钥推导出解密密钥在计算上是不可行的,系统的加密算法和加密密钥可以公开,只要保存好解密密钥即可。而 RSA 则是基于整数因子分解问题的,对极大数做因数分解的难度决定了 RSA 算法的可靠性。

Read More

Girlfriend

AUTHOR: Locez
VERSION: 1

本文并非正经博客,just a girlfriend.在本文,你将看到 go 语言是如何定义变量,类型,使用“继承”,其次还会看到如何将函数绑定到对象上,实现我们平时所说的面向对象编程中的 . 调用。当然因为不是正经博客,所以本文不会讲解语法,你看完只会收获一个女朋友(开心么?兴奋么?),没有任何讲解。

看看我们的最终结果:

1
2
3
4
5
6
7
I walk 520 steps to meet you.
I really want to tell you my name, but I have forgotten it.
it is hard to believe it?
don't say anything, just kiss me.
your arms are really warm.
event if I am a bunch of code, I have no entity, can't leave the screen.
but I will stay with you forever, I love you.

Read More

你真的很忙么?

AUTHOR: Locez
VERSION: 1

突然发现不知从何时起,我总是让自己看起来很忙的样子,这个忙也不一定是真的忙,而是指时间很容易就消失不见了。甚至不知道自己那时候到底做了什么,只是每一天就这么过去了。在曾经高中的时候,有一段时间做过时间管理,我每天会将当天要做的事情写下来,也就是 todo list,而人确实会懒会变,这种每天计划着今天怎么过的日子也是相当累的,所以到后面我就放弃了这种生活方式,后来时间渐渐地就流逝了。

Read More

加密你的磁盘

AUTHOR: Locez
VERSION: 1

数据的安全,保密性在现在的生活中显得越来越重要。随着数字化的时代的来临,越来越多的数据被数字化,特别是更多有关于我们隐私的数据在不断生成,甚至还有我们需要离线保存的密钥等。而且通常我们使用磁盘,USB 闪存,SD 卡等存储介质进行存储,即便我们已经离线存储,仍然不能保证该存储介质不会丢失,如果丢失那么对于我们来说有可能是灾难性的事件。因此对这些离线存储的重要数据,再次进行进行加密是非常有必要的,本文将告诉你如何加密你的移动存储介质。

在此之前先介绍一下 LUKS:
LUKS (Linux Unified Key Setup)是 Linux 硬盘加密的标准。 通过提供标准的磁盘格式,它不仅可以促进发行版之间的兼容性,还可以提供对多个用户密码的安全管理。 与现有解决方案相比,LUKS 将所有必要的设置信息存储在分区信息首部中,使用户能够无缝传输或迁移其数据。

Read More

diff 与 patch 的使用

AUTHOR: Locez
VERSION: 1

摘要


在 linux 的日常使用中,我们经常需要修改一些配置文件,然而在软件升级以后,经常会面临,配置更新了与原配置部分不兼容的问题(当然我们更多的可能是来制作软件升级的补丁)。在这种情况下我们通常有两种选择:

  • 对比现有配置,手动在新配置文件中改动
  • 利用 sedawk 等工具配合改动
  • 采用 diffpatch 制作增量补丁的方式改动

本文主要通过一个升级awesome 配置的例子,对第三种方法进行介绍和讲解

Read More