After a year of work, it's time to present G6 Feedback, an "Audience Response System". Written in Java (this was a requirement, not a free/willing choice), this system allows you to create and run polls, and have participants answer these polls using their laptops or Android smartphones.
Among other uses, this system was originally targeted for use in educational contexts, for use during lectures. However, it is equally possible to use it to conduct game-shows, quiz nights, etc.
Key Features Include:
- Anytime, anywhere - no installation or supporting backend server setup required. Just copy the self-executing binaries and go, on any common operating system.
- WYSIWYG Single Window GUI's - optimised for fluent interaction within a consistent and simple framework
- Multiple Choice, Free Form Text, and Image questions
- Automated, non-supervised natural language processing engine for performing fuzzy categorisation and clustering of text responses
- Ability for participants to send in "feedback" or questions
This system was developed as part of a year long Software Engineering Group Project course at Uni. I worked as the team leader/lead developer + UI designer on this project, with a group of five other third year Computer Science students.
Apart from becoming better versed in the "fun" areas of networking issues (TCP/UDP, Multicast...), concurrency issues, the internal structure of .JAR files, and becoming familiar with the Android platform (Java+XML based; it has quite a few quirks of its own), one of the things I've spent the most time fiddling with this year would have to have been Java Swing.
Long story short: it's an absolute dog of a toolkit which is now getting so long in the tooth, especially in some areas such as whenever it comes to trying to make a modern-looking and behaving UI, let alone one which plays with some "conventions" to try and beat out a (hopefully) better way. Part of it is just Java, but part of it is just ancient design and weird quirks. For example, some pet peeves:
- The random times where you find that you need to set up SwingWorker or SwingUtilities.invokeLater kludges to get around some concurrency-related problems. Usually you only find this out after a few hours of debugging, trying to figure out why on earth something refuses to work in the expected way.
- The fact that you can't get decent looking tabs with close buttons on them. Sure, you can roll your own panels that you stuff onto the tabs, but unfortunately, those panels will only ever get drawn with a fixed size, centered on a tab. This is particularly irritating when you start getting more tabs, as some tabs suddenly start getting larger than the rest, but their close buttons are in the middle of nowhere, or perhaps just don't get close enough to the right edge.
- The lack of built in widgets/support for gradient backgrounds for panels, rounded borders, striped backgrounds on tables and lists.
It's been fun working on a new project for a change, and leading a team towards completing a common goal.
As a bit of trivia, the image I opened this post with is a quick "glossy product shoot" imitation I cooked up for the hell of it. I probably don't need to mention how this was made, other than that this particular image took ~7 minutes to render, and that there are some known artifacts which could've been painted out if this was a serious job, but which are probably minor enough to ignore here.