11 Jan 2015

KyBot

First post in a while, huh. In that case, I'll just preface the main topic of this post with a quick summary of the past few months:

I am now in my 4th year of uni (integrated masters year), doing Social Applications Development as my option alongside a research project using reddit user data for game content generation and an industrial project designing part of a virtual blacksmithing experience for a local authentic blacksmith! It's been.. busy, hence the lack of posts.

However, I have been working on a few little side-projects. The main one being a VPS hosted by DigitalOcean which I use to run an IRC bouncer and self-coded bot, KyBot. I have another program which simulates an IRC server as an interface for steam chat, but it's a bit temperamental.

Anyway, on to KyBot. The daft little thing was my second attempt to create an IRC bot (the first being one called WikiWorder which scraped TvTropes, no mean feat giving the site's lack of consistent formatting). KyBot has expanded from a very simple program into a modular bot with a large number of pretty diverse functions, including:

Baka - Recites one of a number of stereotypical tsundere lines. An essential feature for any self-respecting IRC bot.

Cheesoid - Says either CHEESE or PETRIL, selected at random. Inspired by this Mitchell & Webb sketch.

DRYH - Automated dice rolls for the RPG Don't Rest Your Head, since although the game system is very simple, determining conflict results is surprisingly complex

Lightning - The latest function, calls down fiery wrath upon victims, with effect text adapted straight from the Dark Heresy rulebook.
"Kylar uses the lightning button on Someone, vapourising their left leg and forcing them to the ground, burning profusely as they meet their gruesome death. RIP in peace, Someone."
Markov - Perhaps KyBot's most amusing function. Implements a Markov Text Generator, a la King James Programming using several months of IRC logs as source material.

Reddit - Currently not functional due to difficulties with mono (since my VPS is running Ubuntu and KyBot is written in C#). Is supposed to give information on reddit users and subreddits.

Retributions - Calls down the wrath of one of Snoonet's resident bots (specifically, EDI) on anyone who uses the action ability to 'stab' someone.

Strem - Originally designed to give users information about the Yogscast Christmas livestreams, since my primary IRC hangout is Snoonet's #Yogscast. Since the livestreams are over, Strem now alerts channel members when any of the Yogscast-affiliated channels go live.

Swedish - Translates any text into perfect Swedish, as per the translation algorithm presented in this Haskell tutorial.

TIME - Uses the WolframAlpha API to give the current time a given location. Useful on an IRC channel with members from all over the world.

Trope - A much-reworked version of WikiWorder which is now pretty reliable, despite the aforementioned formatting issues.

In addition to the actual functions, KyBot also includes a few functions for enabling and disabling the various function modules at runtime, meaning I don't have to recompile and reupload it every time we need a function turned on or off. Unfortunately I still need to do so when I want to add or change a function, since loading functions from DLLs is a bit overkill for such a small program.

1 May 2014

Post Mortem: Dissertation

So, I'm pretty much done with my dissertation now.

Simultaneous Localisation and Mapping utilising Consumer Depth Camera Technology

What an absolute arse it's been. Lack of foresight and understanding on my part led to a lot of trouble, particularly in getting it working well enough to be considered real-time.

But, hey ho. It's done now and while the end result is certainly not as good as I was originally hoping, I've still gained a huge amount from this ludicrous undertaking.
Here's a quick rundown of what I've learned, in no particular order:
  • Proper research and literature-derived design is KEY. If you neglect that, you're going to pay for it later on when you really can't afford to.
  • Robotics is a bloody hard field to get anything working in.
  • Agile development can work, but only if you fully embrace its principles in not only your management but also your development.
  • Iterative Closest Point is deceptively simple in theory, but very difficult in practice.
  • Covariance matrices are really cool.
  • C# IS REALLY REALLY NOT GOOD FOR PROCESSING-INTENSIVE REAL-TIME APPLICATIONS.
  • Point clouds are cool.
  • Depth sensors are cool.
  • Modular testing is cool.
  • Hofstadter's Law applies to program run-times too.
  • Existing implementations are your friends.
  • Maths libraries are your friends.
  • Git Flow is your friend.
  • CARVER matrices are your friends.
  • If your project has severe risks that threaten its completion or suitability. RETHINK YOUR PROJECT. IT'S NOT WORTH IT.
  • Having a set of sticky notes with tasks above your computer really helps. You can see what there is left to do, and when you're done with a task you get the satisfaction of removing the note and throwing it in the bin.
So, yeah. As you can probably tell, it didn't so as well as I'd hoped, but it still went ok. Hopefully I've somewhat made up for the huge flaws in my project by identifying them and picking them apart in the evaluation.

I'm definitely glad to have this behind me so I can move onto projects new. My creativity has been stagnating as I've been stuck to this one project for so long. Hopefully next year with the stuff I've learned I can draw up a vastly superior plan and strike a much better balance between my uni and personal projects that will allow me to stay sane.

As a parting gift, have perhaps my favourite image from the project's testing: