"I just finally know what I have to do.
And I know in my heart that it’s right."
I was never much of a comic book guy growing up. I had a couple as a kid, sure, but never really got into them the way most comic book people do. I never collected them, nor did I really know too many of the characters or their backstories.
I watched just about all of the Batman movies and TV shows with my family, and thought all of the action scenes were cool, but I was really just into them to see how Batman could find ways to persevere and kick ass. The movies were just another form of entertainment to me, and I couldn’t care less about how much the they stayed true to the actual stories in the comic books (and I still don’t care to this day).
I’d say within the last decade or so, though, I’ve really gotten more into superhero movies. Now, I’m not going to sit here and debate DC vs. Marvel, because quite frankly, my dear, I just don’t give a damn, but I will say that I have taken more of an interest in Marvel’s characters — especially Iron Man.
Maybe it’s the techie in me, but I think what I love about Iron Man is all of cool gear and gadgets that Tony Stark makes.
Maybe it’s also the fact that we share the same, awesome first name?
Maybe it's that we are both sexy playboys and philanthropists? (Nailed it!)
Or, maybe it's that we're both filthy rich?
(Okay, so maybe he and I differ quite a bit on that last point, but who's counting, anyway?)
Regardless of the reasons, the biggest thing I was hooked on when I saw the first Iron Man movie back in ’08 was J.A.R.V.I.S. If you know the backstory of J.A.R.V.I.S., you’ll know that the comic books depicted him as an actual person named Edwin Jarvis, who was a butler for the Stark family (and truth be told, I dug that info up on Wikipedia). The movies took a different approach, however, and reimagined J.A.R.V.I.S. as Tony Stark’s AI assistant.
I have always found AI and robotics fascinating, so when I saw Iron Man for the first time, the thought of building my own J.A.R.V.I.S. was very appealing to me. I’ve taken couple of stabs at this project over the years, with the first one being named "Edward" (sounded like a good assistant/butler name for some reason), and the second one being named "Gizmo" (which ended up reminding me too much of the furry little bastard from Gremlins, so I scrapped that one pretty quickly).
Being a .NET developer and having only a few years of experience at the time, my earlier attempts were done solely in C# using the .NET speech recognition and synthesis libraries.
I really didn’t get too far with either attempt, primarily because I didn’t really have specific goals in mind for how it should all work. I just wanted a badass talking AI system in my home that did everything. End of story.
I ended up putting these projects on the back burner for a little while, as I felt the whole endeavor would never pan out, but decided to take another stab at it in 2015 when I did a project to create a garage door opener using a Raspberry Pi. Feeling like the first two names were pretty much garbage, I decided to name my third version T.I.T.U.S.
I’ve been a fan of the name Titus for quite a while, and for various reasons, I thought it sounded like a great name for an assistant. Of course, to make it all techie-like, I just had to turn the name into an acronym. But the problem was, I didn’t know what definition to give it.
My first take on it was, "Tony’s Intelligent and Talkative Ubiquitous System", which sounded too snooty and was quite the mouthful, so I tried rolling with something a little simpler, such as, "This Is Tony’s Ultimate System". I felt that really wasn’t much better and that it had a bit of a lameness to it, so I sought advice from my lovely bride, who came up with, "This Is The Ultimate Shiznit." And it stuck. Seriously. That’s what T.I.T.U.S. stands for.
The work has been very slow going over the last couple of years due to my inability to stay focused on large projects for extended periods of time, but I am still chipping away at it.
Here’s a diagram depicting what I’d like to build, and how all of the pieces interact (at a high level, anyway):
Yes, there are a lot of pieces, and currently, I don’t have too many of them implemented. I have the backbone created, which is the T.I.T.U.S. Message Bus that is used as the main communications system between the various components. It is running on an AWS EC2 instance, and I chose RabbitMQ as the message queueing system.
As I mentioned before, I created a garage door opener using a Raspberry Pi back in 2015, but I had just thrown something up quickly using a handful of Node packages, so I wasn’t too fond of how it turned out.
I am now in the process of revamping that project, which still utilizes Node, but it’s a much more elegant solution. I used the Johnny-Five robotics framework for triggering the relay channels and monitoring magnetic switches tied to each door, and I built out a RabbitMQ consumer component that listens for messages on the bus. All of the various pieces are rebuilt, so now I just need to wire everything up and get it running again.
The T.I.T.U.S. Controller is the main interface for any type of client application, such as a mobile app, watch app, an Alexa Skill, or even a desktop client. This piece was built using Python and Flask and provides a REST-like API for the client applications to consume. Any of the various devices can also call into this API instead of using the message bus, too.
I have also built out an SMS messaging component on the T.I.T.U.S. Communications server that calls into Twilio to send the actual messages. This component was also built using Python and has a RabbitMQ consumer component that listens for messages on the bus.
And then from there, I have some of the desktop application built and a handful of tables in the database to store configuration data. That’s about it.
My goal is to go a little more in-depth with each piece as I create it, so if you’re interested in any of the work I'm wanting to do, then keep an eye out for different posts and courses related to this monstrous project.
Being that T.I.T.U.S. is a side project of mine, things will be pretty slow going for the foreseeable future. But, I will continue chipping away at it, and will post updates and how-to's along the way.