I have written a thing
May. 1st, 2020 12:11 pmFruits of my labors now on GitHub: https://github.com/chhotii-alex/digital-voting
I was inspired by Arisia Corp's need to vote on stuff when we are meeting over Zoom or whatever to take another whack at cracking open Applied Cryptography by Bruce Schneier. He's dryly entertaining in a mathematically kind of way on all subjects, and I wondered what he had to say about the "right" way to do voting. The "Voting with Blind Signatures" protocol gave me a great inspiration for a project that I could do to teach myself Spring Boot and show off to potential employers.
Not that it's quite completely done. Beyond the inevitable rough edges here and there, I'm vague on how one deploys this on a web server; does it need to play nicely with Apache? It has a built-in Tomcat server, so if I start it on my home laptop it listens on port 8080 and I can connect to it from any web browser in the house. How to give the web host provider a .jar and get them to keep it running... I've never tried having that discussion. Also, it needs to actually send email, for account management purposes at least; this is just stubbed out in the code.
In particular, if Arisia were to use this for the stuff that's coming up, I'd have to implement Ranked Choice voting. It doesn't do that yet. I've tried to make design decisions that would play nicely with Ranked Choice voting, I don't think the database would have to change at all to support it, and it would be fairly trivial on the server side to implement. But a friendly user interface for ranking choices (rather than just picking one) would be a whole new JavaScript undertaking.
So, I don't know if anyone will actually ever use this. But I soldier on, imagining that someone will; doing so gets me to really look at the things that would be most important to a user, and learn all kinds of new stuff while addressing those things.
I was inspired by Arisia Corp's need to vote on stuff when we are meeting over Zoom or whatever to take another whack at cracking open Applied Cryptography by Bruce Schneier. He's dryly entertaining in a mathematically kind of way on all subjects, and I wondered what he had to say about the "right" way to do voting. The "Voting with Blind Signatures" protocol gave me a great inspiration for a project that I could do to teach myself Spring Boot and show off to potential employers.
- It's relatively unique: though there are a lot of things that pop up if you search for "blind voting" on GitHub, I haven't found any other implementations that are fully fleshed out usable software. Many people have written just the core of the algorithm— just the math part, basically— but to actually ever use this idea, you need complete account management built in, a database, and a relatively user-friendly client side. Just to do the math was only probably 10% of the effort overall.
- It's full-stack. Not only did I have to write the back end (in Java, Spring Boot, Hibernate JPA etc.) but i had to implement the client side (using Vue.js, axios.js, and every CSS and JavaScript trick I know.)
- It sounds really impressive. Like, this is not just a trivial toy thing I did in Spring Boot.
- But at the same time it's not such an impressively huge project that I couldn't get it done all by myself within a few weeks.
Not that it's quite completely done. Beyond the inevitable rough edges here and there, I'm vague on how one deploys this on a web server; does it need to play nicely with Apache? It has a built-in Tomcat server, so if I start it on my home laptop it listens on port 8080 and I can connect to it from any web browser in the house. How to give the web host provider a .jar and get them to keep it running... I've never tried having that discussion. Also, it needs to actually send email, for account management purposes at least; this is just stubbed out in the code.
In particular, if Arisia were to use this for the stuff that's coming up, I'd have to implement Ranked Choice voting. It doesn't do that yet. I've tried to make design decisions that would play nicely with Ranked Choice voting, I don't think the database would have to change at all to support it, and it would be fairly trivial on the server side to implement. But a friendly user interface for ranking choices (rather than just picking one) would be a whole new JavaScript undertaking.
So, I don't know if anyone will actually ever use this. But I soldier on, imagining that someone will; doing so gets me to really look at the things that would be most important to a user, and learn all kinds of new stuff while addressing those things.