Ping (zestyping) wrote,

ACCURATE meeting.

I'm at Johns Hopkins right now attending a meeting of ACCURATE, the NSF Center that funds my research. I've been going a little nuts over the past week or two trying to finish a design and implementation of a voting system so i can give a demo here.

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.)
Like last year's version, this one also supports write-ins in any alphabetic language. Write-ins are a really annoying feature for voting system designers: they're rarely used, but in order to support them you have to break a lot of assumptions; adding this feature seems to have a ripple effect that forces you to change all kinds of things about the system.

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++.)
  • Post a new comment


    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.