@jackyalciné

Got an app idea or need some coding done? I can help! Learn more about how you & I can work together.

Wintermute: Updates For August

A notice of changes made in Wintermute for August.

:book: wintermute :bookmark: wintermute, updates :clock7: :clock3: about 2 minutes

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.

RPC: ZeroMQ

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:

while (1) {
  // Kill the unicorn.
  // Buy a new unicorn.
  // End scope.
}

.. 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 future.

Plug-ins: 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 new [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.