MENU

Tags: c/cpp

再造企业微信机器人

Prelude

为什么叫“再造”呢?有再造,那么就一定有第一个:GitHub: Bokjan/DiaoBot

DiaoBot是主体完工于2019年9月的企业微信机器人框架,完整地实现了当时企业微信机器人所有能力的封装。但其存在一些不论是当时还是现在都会令人感觉比较奇怪的一些缺陷:

  • 回调server基于mongoose的HTTP能力,整合较奇怪且其基于select()的复用,性能低(?真的需要性能吗)
  • 固定工作线程数,但工作线程中的封装IO操作却是同步阻塞的
  • 所有定时任务均新开处理线程,且定时任务分派线程原理粗暴(每一分钟唤醒,遍历所有注册项并启动对应项)
  • 基于信号的优雅退出过程慢(定时任务线程睡眠中,须唤醒才会退出)
  • 有着一个比较奇怪的二进制模型:主可执行程序(diaobotd)、公用SDK动态链接库(libdiaobot.so)以及不定数量的用户业务逻辑动态链接库(由diaobotd读取配置文件动态挂载)
  • 回调处理的抽象设计做得不太好
  • ……

我现在惊讶地发现有一个问题其实是有解的:你可以找到一台既能够接收内网回调、又能够请求公网API的机器。如果说当你想干点什么的时候,却发现这个必要的工具其实不好用,是不是就会想去先把工具改造一下了?所以,到了差不多两年之后的今天,GitHub: Bokjan/wcbot横空出世。

Read More

数字图像处理?

GitHub: Bokjan/LabDIP的Release中可以找到生成好的二进制。

突如其来的stress

这个学期开了一门课叫数字媒体处理技术,课程内容倒是非常丰富,图像、音频、视频都讲了个遍,涉及的内容也非常广。虽说课是这么一直这么上着,但是给人的感觉是听了也就听了,不知道有什么用,怎么用。这倒是不要紧,10月13号(第六周)开始实验课了。原以为像往常的实验一样,这实验也不打紧,看到任务书倒是目瞪口呆。

修改示例程序,从一个图像显示框,改造成两个显示框,并增加一个文本参数输出框,实现类似下图的基本程序界面(可在此基础上进一步优化)。

  1. 功能区可以分tab页,按照后续功能添加;
  2. 图像显示区域需考虑图像的缩放与自适应显示;
  3. 参数输出区,用以显示过程,以及相关统计数据和调试信息,可滚动,可选择,可复制,可清除。
    阅读程序框架,继续采用Windows多线程和OpenMP两种方式,补充实现下述功能。算法需自行实现,不能直接使用OpenCV函数。
  4. 采用三阶插值的图像任意角度旋转与缩放
  5. 图像的傅立叶变换,并与功能1联动,输入图像经过旋转、缩放后的傅立叶变换结果可在右侧显示
  6. 给图像添加高斯噪声
  7. 采用采用平滑线性滤波、高斯滤波、维纳滤波三种方法过滤不同参数的高斯噪声

Read More

Radiom,来自电磁波的熵

前言

今天要介绍的是一个C语言编写的随机数库Radiom,它需要RTLSDR硬件设备支持。目前仅能在Linux平台使用,不过可以很方便地修改,使其能够在Windows和macOS上生成。其实一个月以前就在做这个工作了,毕竟那一段时间比较闲,想要找一点事情做。不过基本完工之后呢,又渐渐地忙了起来,所以这里其实是写的一个月前的事情。

两年以前,我就写过一篇《软件定义无线电导论》,简单介绍了一些廉价的 RealTeK SDR 设备的玩法。一个月前经常纠结于外卖点什么的问题,经常使用RANDOM.ORG的服务。那么也算是心血来潮,我想,为什么不可以自己做一个相似的东西呢?想到手边有一个RTL2832的电视棒,觉得可行,于是说干就干了。

Read More

使用Dev-C++构建新BravoFinder

前言

BravoFinder第一次发布已经过去了接近两年时间,这段时间里获得了不少人的支持,也发现了一些问题。为了解决许多历史遗留问题,前一段时间我将整个项目完全推翻重写了一次,编码工作已经完成了,文档工作正在慢慢补上。

我一直致力于写平台无关的代码,并且在这个项目里面确实也不会用上专有的API。考虑到大部分模拟飞行玩家都是Windows用户,Windows平台是必须支持的。但我长时间在*nix下做开发,使用的工具链与微软系还是有一定距离,比如CMake在Windows上正常运作可能就有些困难了。在Windows上构建不会太难,但是一个示范介绍是绝对必要的。

准备工作

这次展示的内容依旧使用自由软件工具链,但不运行于类似于Cygwin的模拟环境下,而是完全使用Windows原生API。选择的IDE是轻量级C/C++开发工具Dev-C++,这个软件有一段历史了,官方更是早已停更,版本号停留在4.9.9.2。这里采用的是Orwell升级版,可以在SourceForge上下载。它附带了MinGW下的GCC及相关工具,GCC版本为4.9.2,稍显老旧,但支持BravoFinder中用到的C++11特性是足够了。

当然,在开始之前我们还需要将代码仓库给克隆下来。

Read More

放出我的 C++ 大作业 Scaffold

前言

我的 C++ 大作业早就完成了,这个假期其实也没花多少精力在这个作业上,于是只准备用一篇文章来记录一下。之前担心答辩会翻车一直没发,到昨天晚上最终得分已经出来了,所以现在把这篇文章发出来。

Read More