insobot update #3 — Tying things together

Alex Baines  —  2 weeks, 3 days ago [Edited 20 minutes later]
Last update I left off mentioning my intentions for improving the help system, and early last month that was implemented in the form of every command gaining a usage / description accessible via \help.

I also wrote a few user guides, the first of which explains the basics necessary for using the bot in your own channel as well as the help system.
The second explains the alias and PSA systems that are probably two of the more useful features available. At some point I'll probably write a few more guides for some of the remaining modules, I'm thinking the twitch stuff at least.

I haven't come up with many new ideas for modules that are desperately needed, so nothing particularly exciting has been added since last time, but I did add a few convenience modules in the form of mod_units and mod_calc.

mod_units allows for quick conversions between stuff, by forking out to GNU units. That includes currencies, which is probably one of the more useful conversions available — the exchange rates are updated on a daily cron job and tend to be not super accurate, but "close enough".

mod_calc is a simple integer calculator including some bitwise operations and exponentiation with "**". It uses a shunting yard parser and should give the same results as the same expression would in C (ignoring the fact that C doesn't have "**").

When thinking about adding fractional number support, I had the idea of writing my own decimal float representation (since n1312[pdf] is not widely supported). This was mainly due to printf's %f format giving numbers like "1.50000" for 3/2, and to avoid potential (binary) float rounding weirdnesses. However, after getting part way through, I found out about the %g printf format, which (at least with glibc) gives much nicer and seemingly accurate output. That kind of lessened my interest in the whole decimal float idea, but to my shame I haven't finished either of the two approaches yet... I should really get around to that.

Another thing worth mentioning is my exploring of the WordNet library for use with mod_markov. WordNet is basically a set of files where each line represents a word, along with many "pointers" to other words that are related in some way. Having a database of related words like this seemed like a possible way to improve mod_markov: probabilities could be adjusted if one of the possible next words in a chain was related to something that was recently said.

WordNet comes with a C library, and operates straight on the files instead of loading everything into memory (which is good if I intended to continue running the bot on my 256mb raspberry pi). Unfortunately their C API is not the most beautiful, for example the wn.h header defines many constants with short names like "bit", and functions with names like "findtheinfo" and "getindex" that were not the clearest... This lured me into writing my own library that parsed the WordNet database files instead.

A while later, I had written a ~400 line header lib with a subset of the original WordNet lib's functionality that I thought I would need, and spent some time messing around with it. The results of whether it would actually improve mod_markov were pretty inconclusive though, their word database does not include a lot of the technical terminology that insobot has picked up, and I wasn't able to get a concrete example of it giving more interesting sentences than just the plain markov text. Because of this my interest in it waned, but I think there is still potential there, so I might come back to it. I should probably also put the lib in the insobot repo, despite it not currently being used.

As for what is to come, well I'm not really sure. The bot is in a pretty stable state, and I think my excitement about the project has lessened a bit, so I don't have any immediate goals that I'm dying to implement. If anyone has any cool ideas I'd be happy to hear them though. For now I'll probably be concentrating more on some other projects, like minigbs, hmmlib (used in the soon-to-be ~cinera), or my IRC<->Matrix bridge (working title "imbr") which insobot could take advantage of.

Log in to comment