不积小流,无以成江海

海纳百川,有容乃大

我们在谈到“串口”的时候,往往还会提到 RS-232 、RS-485 等等,它们之间的关系是什么?

我们可能会用到 232 串口线、或者 422 串口线连接两个设备,但使用 Qt serial port 模块写软件不用考虑使用了哪种串口线,只需要关注收发两端的波特率、校验位、停止位等一致。

硬件

RS-232 是美国电子工业联盟制定的串行数据通信的接口标准,它广泛用于计算机串行接口外设连接。

它规定连接电缆和机械、电气特性、信号功能及发送过程。其他常用电气标准还有 RS-422-A、RS-423A、RS-485。

出于节省资金和空间的考虑,25 个管脚的 DB-25 连接器已经不常见,9 个管脚的 DB-9 型连接器被广泛使用。RS-232 中 DB-9 型连接器的信号和管脚分配:2-收,3-发,5-接地。

阅读全文 »

Managing C++ libs with CMake ExternalProject and Git

CMake has a functionality called ExternalProject_add, which can use, to automatically check out a git repository, and build that as part of the normal build process.

Of course, the same functionality would be possible with git submodules, but honestly, I always found this part of git rather cumbersome, and unnecessarily complex, for what I want to do.

Git 子模块

启动外部程序

在 windows 下如何使用 C++ 语言启动外部程序?

函数 system()

使用 CMD.exe 命令行窗口解释输入的字符串命令,引用来自 system, _wsystem

The system function passes command to the command interpreter, which executes the string as an operating-system command.

system uses the COMSPEC and PATH environment variables to locate the command-interpreter file CMD.exe.

阅读全文 »

GNOME 和 MATE 都是桌面环境。

GNOME2 在 2010年9月之后,转向 GNOME3 的开发。

出现分歧,在 2011 年基于 GNOME2 派生出 MATE。

Ubuntu MATE 针对老旧桌面型、笔记型、树莓派等硬件性能等级不高的设备,或喜欢简洁、不用特效桌面环境者。

银河麒麟 V10 在做去 GNOME,去 MATE 化。

中标麒麟 V7 在系统信息中展示桌面环境使用 MATE。

阅读全文 »

互联网协议套件

OSI 七层模型和 TCP/IP 四层模型:

  • http、ftp 应用层
  • [表示层]
  • [会话层]
  • tcp/udp 传输层
  • ip、icmp 网络层
  • ethernet/以太网 数据链路层
  • [物理层]
阅读全文 »

QObject 的 d 指针,指向 QObjectPrivate;

QWidget 的 d 指针,指向 QWidgetPrivate; Qt 内部实现上使用了宏,本质上是 pImpl 手法。

要理解 QObject ,先看 QMetaObject

The QMetaObject class contains meta-information about Qt objects.

The QMetaMethod class provides meta-data about a member function.

struct QMetaObject 实际只有一个(语法上)公有的成员变量 d 但在语义上却是 private data 。为什么如此处理?

文件 moc_qobject.cpp 去哪里查看呢?

阅读全文 »

事件怎么传播的?在父子组件怎么传播,怎么消失?

重绘的逻辑是什么样子? 对自己 resize() 无效的吗?

绘图时,将逻辑代码直接调用不可以吗?为什么要重写 paintEvent() 虚函数?

pushbutton 和 toolbutton 两者区别?

QTableWidget 的 currentItem 和 selectedItem 概念有什么区别?

Qt Creator 自动创建的 .gitignore 并未包含 moc_predefs.h 文件,这个文件有什么特殊吗?

std::vector 等容器类和 qt 的容器类,区别和联系?优先使用哪个呢?

widget 页面默认隐藏不释放内存的优点?为什么不及时释放内存资源呢?

阅读全文 »

合作厂商A的代码,虽然宣称支持跨平台,早期也的确做过大量的平台适配工作。但目前看来,跨平台的工作应该是暂停了,至于后期是否重新拾起来不得而知。

除了客户端是 windows 版本之外,所有的服务(包括设备接入、流媒体服务、流媒体服务调度、存储服务、存储服务调度等等)都是使用 centos7 作为部署环境的。至于是否使用 centos7 作为开发环境,就看各位喜好了,但编译环境肯定还是 centos7 没跑了。

如果使用 centos7 作为编码环境,有两个选择:

  • 自己搭建虚拟机,借由图形界面的 IDE 进行开发,使用 git/svn 等版本控制工具时也更加直观
  • 使用 xshell 等工具远程访问开发服务器,借由 vim 进行开发

后者更具有灵活性,也更方便和同事合作开发,避免同事改动内容后(未提交 svn)手工导出到虚拟机的烦恼,后期如果权限收紧 svn 不再开放外网权限,手工导出源码存在合规问题,即便合规导入导出也是一件很繁琐的事情。但没有图形界面沟通时总是短板(组内同事水平不一)。

先尝试 vim 编码开发,如果学习曲线不够平滑,效率提升困难,后面试验使用图形界面进行开发。

阅读全文 »

Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。

kubernetes

如何理解 k8s 对象这个概念? 使用 Kubernetes 对象

k8s 可以有多个节点(Node),每个节点可以有多个 POD,pod 是一组(一个或多个)容器。

Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。 节点可以是一个虚拟机或者物理机器。

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。

每个 Pod 一个容器”模型是最常见的 Kubernetes 用例。

阅读全文 »

如何改进上网环境?如何在监控环境下相对舒适地“搬砖”,如何利用虚拟机?

整体方案很简单,将认证工具、监控工具放在虚拟机 Ubuntu 中,网络选择桥接模式,直连园区无线网完成帐号认证工作;新增网卡将网络分享给其他虚拟机。

2021年11月22日更新,Ubuntu 虚拟机已删除 。

知易行难,具体实现过程中,因为缺乏网络相关的知识体系(尤其是路由配置等)花了较多时间,绕了很多弯。

查看 IP 地址

在终端中查看 IP 地址的命令:ip a,在 Debian 10 或 Ubuntu 20 版本中已经没有 ifconfig 命令、iptables 命令。

更多请参考 如何在 Ubuntu 中检查你的 IP 地址

配置生效

最初每次更改之后都是重启系统,保证配置生效。网络不通的原因可能很多,也弄不明白,按照网上的教程操作之后还是失败就难免怀疑配置是否生效。

重启系统很笨重,但又不清楚针对网络配置的刷新(或重启)命令,后来发现图形界面网络配置项是提供了开关按钮的:重启(开关一次)网络配置生效。

阅读全文 »
0%