MENU

Category: 程序

C语言项目不规范函数声明的隐患及其检测

一个线上问题

一服务进行现网版本发布。服务更新后,收到 core dump 告警。查看 core file,从函数调用栈帧、地址、行号等信息来看,已经有部分内存遭到污染。栈帧出现了重复,gdb 显示的行号也显然不可能发生问题。好在通过 core file 函数名进行代码分析后,比较及时地找到了问题原因。

Read More

再造企业微信机器人

Prelude

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

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

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

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

Read More

Leap Motion 的一个简单应用

新年好

大家好。己亥年到了,这意味着什么呢?这意味着我又拖更几个月了。

年前,数字媒体处理技术这门课作为最后出分的科目,有点惊到我。我都不知道为什么要给我rank 1。所以今天就接着写这门课的内容吧。

做了啥

要求

第四次实验围绕体感交互展开。发到大家手里的设备有Kinect(或Xtion)和Leap Motion两种,具体做什么自己来决定。Kinect就是XBOX上的那玩意儿大家都知道;Leap Motion是在比较近的距离做手势识别的。按道理来说,一个小组做什么东西还是要brainstorm一下搞个技术选型,但是我们没有。只因组长太优秀,在大家还在 () 习软件工程四大金刚的时候,东西都做完了。

制品

Demo
这个东西的功能就是给小人画衣服(大雾),我们组长老早就做好了的,应该说基本只差接入Leap Motion的控制就完工了。虽然这个东西感觉好像没有什么用的样子(小声),但是作为这次大作业还是可以的。之后不知道怎么回事搞Leap Motion的活就到了我身上。我们做的东西too simple,本来有点不好意思写来着演示视频请看文末。


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