Well, it’s August (and has been for a while now). Wintermute has been chugging along as you can from its task-board. I’m at the point that can make or break Wintermute, its remote procedure calling system. After that, it’s off to the races by building out the plug ins needed for the system and working on language bindings for the core aspect of Wintermute.
I’ve decided to use ZeroMQ because of its protocol transparency; the ability to send the same data to both UNIX sockets and over TCP sockets with no looking back is something I’d want Wintermute to have. And since support for serial sockets is supported, it’d make it even more interesting for embedded projects. The only reason behind its “success” is its extremely opinionated approach of implementation. Maybe it’s my lack of complete understanding how sockets work, but having to do something like:
.. just looks wrong to me, but that’s C. I’m way too used to event driven programming paradigms and object
orientated ones and to do this in my C++ code scared me to no end. Since I’m using Qt, I figured
that not only that there was a C++ binding/wrapper for ZeroMQ, there might be a Qt binding.
There’s two different implementations out there that have a bit of activity behind them. The
wttw version has a bit of a licensing issue so that would pose a problem for my project, it
being under the GPLv2. The
jonnydee fork seems to be good, but after attempt to build it locally failed on my local
system. I’m pointing my finger at
qmake, it being not that reliable of a build
tool outside of Qt Creator and the likes. I might add it to a PPA of mine in the
add_library ALL THE THINGS
One thing that I noticed is vital is instant updates. Before I can explain
the importance of this, I’d have to explain how Wintermute would operate on a
machine. At the current build, Wintermute does nothing more besides creating a
[ProcessModule], send out one
[HeartBeatCall] and then hang.
Nothing much. The intended goal is to replace that hang with the
loading of a plug-in. Wintermute, by itself, can not and will not do
anything. I chose this to remove as much dependencies to the core binary as
possible so that binaries can be reloaded quickly.