防御式编程的经验

You Can’t Write Perfect Software

防御式编程对所有可能出现的错误进行防卫性的处理,当错误出现时,该崩溃的让程序崩溃,该记录日志的记录日志。这样才能在程序真的出现错误时更加快速的解决错误。

使用 glibmm 实现 dbus 服务端和客户端

简介

dbus 介绍: 维基百科

glibmm: glibmm 是 glib 库的 C++ 封装。它的一个子项目 giomm 实现了 dbus 协议。通过 giomm 我们可以实现 dbus 服务,也可以实现一个 dbus 客户端。

glibmm dbus 服务端

Gio::DBus::own_name

实现服务端的一个入口 API 是: Gio::DBus::own_name ,它的原型如下:

使用 C++ 创建异步 Node.js 扩展

简介

有时候 C++ 插件会执行非常耗时的任务,为了避免阻塞 Node.js 的事件循环,我们应该异步的运行耗时的任务。

对于 C++ 写的 Node.js 插件,有两种方式完成耗时的异步任务:

  1. 依赖 Node.js 的异步能力,Node.js 会起多个线程,其中一个主线程运行事件循环,其它线程为工作线程,来执行耗时任务。
  2. 在 C++ 里自己起一个线程运行耗时任务。

一般的异步任务可以用第一种方式完成,但是 Node.js 起的工作线程有限,且还需要运行其它任务,如果需要开更多的线程可以使用第二种方式。

使用 python 控制米家智能设备

协议

小米智能设备之间的通信协议早已有大佬总结出来了。详情见: https://github.com/OpenMiHome/mihome-binary-protocol

也有大佬根据协议写了一个 Python 库来控制米家智能设备,python-miio

对于每一台设备,在配对连接后,都会有一个 token, miio 库需要这个 token 和设备的 ip 地址来控制设备,所以我们需要做的就是拿到我们需要控制的智能设备的 token 和 ip。

使用 C++ 创建 Node.js 扩展

简介

Node.js 插件是一个 C++ 写的动态链接库。Node.js 中的 require() 可以直接加载插件作为一个 Node.js 模块。插件提供了 Node.js 与 C++ 库之间的接口。

实现插件有三种方式:N-API, nan 和直接用内部的 V8, libuv 以及 Node.js 库。官方推荐使用 N-API 实现插件,除非要用到 N-API 没有暴露出来的接口。