So, I cracked open the 4 year old codebase for the pieces of IRCThulu that I can make public:
https://source.silogroup.org/ircthulu
Yeah, this is all proof of concept at best. Plus, these runtimes aren’t particularly portable for the guerrilla style campaign model I want this system to be capable of executing. It needs to scale.
So, I brushed up on my IRC and made a little proof of concept bot to get those neurons firing again:
https://github.com/cmpunches/Tentabot
It turns out, implementing down to the socket level without introducing dependencies was crazy easy compared to how it would have been 4 years ago. I’ve grown a little as a developer and an architect since then. I did some sloppy work here with field processing in the IRC_Event class that needs rewritten before anyone should use it — it’s just a POC for an event-driven IRC bot. I didn’t want to introduce regex dependencies or spend too much time on tokenizing the responses. Quick and dirty, took about a day.
I can’t believe it’s been 4 years.
The Tentabot was fun to build and I got to test it out a little with a well known hosting provider, and even gather some field data in the process for requirements gathering for the IRCThulu. Can’t quite publicize the endgame strategy just yet, but, it’ll bring some closure to alot of people who deserve that closure. The bot needs to look like a real user when it connects. It should also be very small and portable.
I think the next step from here is re-implementing in C++. Then I want to bring in a command subsystem as well as the ability to connect to new hosts, then loop in hooks for everything and release that. That way if the IRCThulu campaign ends for whatever reason I’ve still got something to show for it as a released product. I have so little time these days that I’ve gotta create layers of win with stuff like this.
I prefer a modular approach to platform design. Every component should be a standalone product that does one thing for a specific purpose and works together to create a larger platform. It not only fits in well with the Unix philosophy, but it also creates an incremental delivery for larger distributed systems, and the resultant platform is far more flexible than a bespoke system where everything is made to uniquely only talk to its sibling components.
Freenode is headed towards their endgame with this, but, I’m still in the opening credits. They have a couple of excellent developers. No real executive acumen for adversarial models, though, despite the ardent effort to create them; a clear sign of a leadership defect.
So, time to trim some fat, and losing weight takes time. When you are losing weight you don’t lose 5 pounds here and 10 pounds there after a night of rigorous exercise, or even a couple weeks of it — you develop a strategy and a routine around energy expenditure and dietary intake. You grind away at it for weeks, months, some people take years, and then you wake up one morning to find yourself more fit, and to stay that way you decide to continue your program. After a while you enjoy it.
Conflict is much the same way. Not all conflict is an argument that’s over when someone says something mean or witty. That’s a defect in our current culture, and not a reflection of any historical merit. Sometimes conflicts last for generations. People who seek out conflict are unwise, sure, but people who avoid necessary conflict at the expense of their values are the former’s prey. Sometimes it is unavoidable. That’s also something smoothed over in human history: We like to pretend every conflict in the past is a product of barbaric times instead of a hallmark feature of our species, and, perhaps categorically– of sentience.