Last year I managed to squeeze touchscreen voting software into just under 300 lines of Python. What's new in this version?
- Audio. Last year's software just has a video display. This version has synchronized speech and video.
- Hardware input. Last year's software can only be operated with the touchscreen. This version can be operated using either the touchscreen or hardware buttons.
- Straight-ticket voting. This version supports straight-ticket voting (pressing one button selects a whole slate of candidates), unlike last year's.
- Candidate rotation. Last year's design fixes the positions of the candidates on the screen; if you want to rearrange the candidates, you have to generate a whole new ballot. This version adds a layer of indirection so you can rearrange the candidates on the screen (and correspondingly in the audio sequence) just by changing a few numbers in the ballot definition. (This works even if the candidates are scattered over many pages, and it doesn't mess up the meaning of the user's selections or the operation of the straight-ticket feature.)
The point of combining visual or audio output with touchscreen or hardware button input is to try to offer as much flexibility as possible: we want you to be able to vote if you're blind, to be able to vote if you can see but can't read, to be able to vote if you're deaf and have a motor disability, and so on.
I'm excited to say that this new version fits in 400 lines of straightforward, readable Python. However, this version doesn't contain a verifier yet; included among the 300 lines of last year's software was a verifier for the ballot definition to ensure that, once the ballot is successfully loaded, the program cannot crash. After i add a verifier to the new version, it will probably weigh in somewhere between 500 and 600 lines.
Still, not bad. I was aiming for under 1000, as a reasonable limit for the number of lines one could expect to review and verify with some confidence. (For comparison, the Diebold AccuVote TS-X software is over 31000 lines of C++.)