Code Monkey home page Code Monkey logo

civs's Introduction

Version 2.27
Condorcet Internet Voting System
March 2024

Copyright 2024, Andrew C. Myers

This is a open-source release of the CIVS voting system
software. If you simply want to run an election, it may be
easier just to use the existing CIVS election server running
at Cornell University, at http://civs.cs.cornell.edu.  See
the file INSTALL for information about how to set up your
own server.

Permission to use, copy, modify, and distribute this
software and its documentation for any purpose and without
fee is hereby granted, provided that the above copyright
notice appear in all copies and that both the copyright
notice and this permission notice and warranty disclaimer
appear in supporting documentation, and that the names of
the authors or their employers not be used in advertising or
publicity pertaining to distribution of the software without
specific, written prior permission.

This is research software.  It is distributed free in the
hope that it will be useful, but without any warranty;
without even the implied warranty of merchantability or
fitness for any particular purpose.  In no account will the
authors be liable for any special, indirect, or consequential
damages or any damages whatsoever resulting from loss of
use, data or profits, whether in an action of contract,
negligence or other tortious action, arising out of or in
connection with the use or performance of this software.

civs's People

Contributors

andrewcmyers avatar chinawat avatar christtrekker avatar dunn avatar kees avatar kjetilho avatar louisliutw avatar magwas avatar nealmcb avatar tristancacqueray avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

civs's Issues

The voter's key will be resent to the voter. Sending mail to voter "xxxx"... EndMailData: [Net::SMTP] Timeout

Hey @andrewcmyers ,

I'm currently facing an issue with civs on a private poll. It seems that not all voters are able to see the poll after I added them. The error SMTP error from the title seems to be related to the voters that can't see the poll

Voter <A> is already authorized. The voter's key will be resent to the voter. Sending mail to voter "A"... EndMailData: [Net::SMTP] Timeout 
Voter <B> is already authorized. The voter's key will be resent to the voter. 
Voter <C> is already authorized. The voter's key will be resent to the voter. Sending mail to voter "C"... EndMailData: [Net::SMTP] Timeout
Skipping voter <D>: already voted.

Both voters B and D can see the poll but voters A and C can't.

mod_perl

CIVS should really be upgraded to work with mod_perl. That should significantly improve its performance because the Perl interpreter won't need to keep reparsing the scripts.

Fine-grained filtering

The current UI for blocking email blocks all email. It would be nice to let users just specify a regular expression (or multiple regexps) to be matched against the supervisor email address. A challenge will be sanitizing the regular expression, however. A globbing pattern would be good enough.

Some email addresses can be entered twice and they'll receive two voting keys

Hi, we're trying out the hosted CIVS and for some reason we can sometimes add email addresses again and that will result in them receiving multiple voting keys.

What we did was:

  1. Import bulk list of addresses (n authorized voters)
  2. Add some email addresses again, these addresses didn't appear as authorized and therefore got additional keys (now n+m authorized voters)

I'll gladly provide more input when you tell me what you need.

First time user: Unexpected error: Internal error saving opt-out information (open)

I was invited to use CIVS for a first time and I tried to confirm my email:

  1. Went to https://civs1.civs.us/cgi-bin/opt_in.pl
  2. Supplied my email address
  3. Received the confirmation code via email
  4. Entered confirmation code into the second box
  5. Got the following message:

Unexpected error: _Internal error saving opt-out information (open)_activated Email address successfully activated.

Pending poll invitations:

(two links to Jenkins election 2021 follow)

This is pretty confusing. What went wrong? Is my information stored?

feature request: prevent blank identification field.

I'm running a public poll where I don't have concerns about security, but need voters to identify themselves. Some voters are accidentally leaving the voting field blank. It would be great to have a configuration option to not let people submit until they'll filled in something there.

handle large numbers of candidates better

The number of candidates should be limited to a smaller number.

Also, detailed reports should not be printed for large numbers of candidates because they take quadratic space. At least, the tooltips should be turned off.

feature request: list-id mail header

From a user:

Some people commented to me that they use filters such as procmail to
sort the mail from different mailing lists into different folders. When
somebody sends a poll to all subscribers on a list, the poll email
doesn't go to the desired folder.

Would you consider providing an option where the List-Id header can be
set when adding a group of email addresses to a poll? All invitation
emails would then contain the header value specified by the poll admin.

Another way to please people may be adding support for the
List-Unsubscribe header value to be provided by the poll admin.

It would be most useful if these could be set to different values for
each batch of email addresses that the admin uploads, or maybe the CSV
file could have additional columns for these values.

This would be useful for anybody who uses the service in conjunction
with mailing lists managed by Mailman and similar tools.

Condorcet-IRV tie breaking

I read this about the Condorcet-IRV rule: "If multiple candidates tie for having the smallest top count, one is randomly picked for removal".

Why is this better than counting the 2nd place count?

Unsupported (human) languages

Some languages that polls get run in pretty often but that aren't supported yet in languages.pm: Greek, Norwegian, Polish. Also, the Russian module is very poor.

Control over email language would be helpful

The language used when sending email invitations is determined by the supervisor's language, but obviously this doesn't always work well. Supervisors should be given control over the language used, which would default to their own language. Ideally, each voter's language could be selected individually (and set to the supervisor's language by default).

Redundant invites

If someone is invited more than once to a poll before they opt in, they get a list of redundant invitations when they do opt in. Not a big issue, since they can't actually vote more than once.

erase existing scores if empty does not erase scores.

Hi CMS devs,

When uploading a CSV for assignment scores, it seems that ticking the "erase existing scores if empty" box does not, in fact, erase scores. Here's how I discovered that:

  • accidentally upload a CSV of scores to the wrong assignment
  • try to fix that by uploading a new CSV with blank scores for each student
  • the HTML page showing each score crossed out is correct
  • but ticking (or even not ticking) the box leaves the original scores instead of erasing them.

This is not high priority but I thought I should report the issue.

---Michael

Incorporate ballot weighting, for when voters have unequal influence, or increase the ballot qty limitation

I am trying to use Civs to do an election for my condo association. Not everyone has a computer so ballots are done on paper but we need Civs to help us calculate the winner. Because I aggregate the ballots myself, I use a test poll with the ballots uploaded (preferably as a single file).

Need 1: We need to be able to calculate the top N winners, which Civs already handles nicely because it ranks the winners when showing the results. Awesome!

Need 2: We need to weight different ballots depending on the membership share of each voter. This could be easily solved by counting each ballot as many ballots, commesure with their weight. For example, a small condo unit might get 207 votes, which a large unit might get 851 votes.

The problem is that my test file is being rejected on account of it exceeding the ballot qty limitation of 1000 ballots. Perhaps the limitation is only per file, but if I had to upload each ballot individually, it would be too burdensome. Therefore I am requesting that the ballot limitation (for test polls) be increased from 1000, to 1 million.

Stress testing

There should be a stress testing script that allows some evaluation of the throughput that the system is able to deliver.

Fix Russian localization

The Russian localization is pretty awful (my fault). Need a native speaker to take a pass over russian.pm!

proportional representation sometimes creates very non proportional results

We where evaluating civs as a potential vote system for selecting committee members. And while testing I found some rather bad looking case(s):
For example: (all cases use a committee of 3 members, proportional representation turned on)
23x9 8 7 1 1 1 1 1 1 1 1 1
24x1 1 1 9 8 7 1 1 1 1 1 1
24x1 1 1 1 1 1 9 8 7 1 1 1
28x1 1 1 1 1 1 1 1 1 9 8 7
https://civs.cs.cornell.edu/cgi-bin/results.pl?id=E_f280dc947fde9c2c
Here the group of voters representing 28% get all 3 seats, the other groups of 24 and 23 voters get no seat.
The same occurs with smaller groups:
10x9 1 1 1 1 1 1 1 1 1 1 1
10x1 9 1 1 1 1 1 1 1 1 1 1
10x1 1 9 1 1 1 1 1 1 1 1 1
10x1 1 1 9 1 1 1 1 1 1 1 1
10x1 1 1 1 9 1 1 1 1 1 1 1
10x1 1 1 1 1 9 1 1 1 1 1 1
10x1 1 1 1 1 1 9 1 1 1 1 1
11x1 1 1 1 1 1 1 9 1 1 1 1
11x1 1 1 1 1 1 1 1 9 1 1 1
12x1 1 1 1 1 1 1 1 1 9 8 7
https://civs.cs.cornell.edu/cgi-bin/results.pl?id=E_0068ae45e0a5b08f

12% of the voters get all 3 seats here, the other 2 groups who have
11% are not receiving any seat.

I have not tested it but i suspect that schulze STV and CPO STV would not have this problem. So was wondering if there are plans to implement these ?
Thanks

Invite users to vote via unique link (QR code) rather than email.

I am hosting an event where I want all attendees to vote in a rank-choice civs poll.

The contexts of this event means that I don't have an authoritative set of all attendees' email addresses. I would like to generate dozens of unique links (then encode them as QR codes) which can be passed out to attendees to anonymously allow them each to vote in the poll on their phones. There doesn't appear to be any way to do this by default.

Is this a feature for which support could be added or is there a way to currently do this?

Warn voters about useless ballots

Sometimes people leave all but one candidate as "no opinion", or variations on this that cause their ballot to have no effect. It would be good to warn them and at least make them confirm the ballot was cast as intended.

Allow poll creator to define method used

I am running a poll with a lot of non-technical people and need to allow them to see the result.

When the poll is over in a month, people will be able to select various methods when I already know that I only want to allow Schulze.

Being able to confirm and limit which method to use before the votes are tallied would be nice.

Feature requestion/Question: Github integration

First I'd like to say I think CIVS is a great piece of software and have used the email based workflow in the past. What I am curious about now is how integrated is CIVS with Github? Ideally what would be possible for us would be to set up a poll which is linked to a Github repo, so that any member of that repo could vote on the poll, signing in to CIVS through Github.

I know it's possible to get contributor emails using git log --pretty="%ae" | sort | uniq, but would prefer an option that (A) doesn't risk missing people who only contribute to wiki/issues and (B) makes it as easy as possible for people to participate in the poll.

So is this possible now and if not how hard would it be to implement? I don't think we have anyone really familiar with the CIVS codebase, but a few may be willing to spend some dev time on the feature if it could be done reasonably quickly.

Cheers

Can't recast ballot when detailed reporting + voter identities is enabled

At least on the web version if I check off "Enable detailed ballot reporting" and "In detailed ballot report, also reveal the identity of the voter with each ballot" once a user has cast a ballot it still returns a voter receipt as usual, but it doesn't seem usable.

On the landing page after casting your vote, the "revote" button just takes you back to the vote page and allows you to cast a second ballot, but the original ballot is not retracted, and you get an "already voted" error if you enter the same identity.

Beyond that, if you've left the landing page, there's no ui anywhere to enter your receipt and recast your ballot.

Protect URLs against line splitting in email

Some people apparently have mail processing/mail clients that split lines and can split the URLs that are provided to them for voting. Splitting can apparently be defeated by putting angle brackets around the link. However, it will be a bit tricky to implement because email is generated with HTML tags that are then removed based on their angle brackets.

Consider making minimax the default

Minimax is cheaper and simpler than Schulze and its results seem at least as good. So making it the default seems to make sense. Also, it seems better for proportional mode, both as the baseline nonproportional ranker and the ranker of committees.

Add plurality tie-breaker

Breaking cycles by picking the candidate with the most top-ranked votes should be simple and relatively resistant to burying strategies.

auxiliary styles

Recently made minor updates to style.css, and now noticed there is a hebrew.css that appears to be largely the same (maybe out-of-sync with recent updates) barring direction and justification for RTL script. I wanted to suggest that there is no need to entirely duplicate the base stylesheet when only minor tweaking of this type is needed. Put only the tweak rules in the auxiliary stylesheet and load it after the primary one. This requires less maintenance to keep everything updated and in sync.

minimax

CIVS should really support the minimax completion algorithm. It's even cheaper than Schulze, easy to implement, and satisfies criteria that other algorithms don't.

Add STAR Voting method

https://civs.cs.cornell.edu/rp.html
CIVS currently supports five rules for Condorcet completion: Minimax-PM (the default rule), Schulze (also known as Beatpath Winner or Cloneproof Schwartz Sequential Dropping), Maximize Affirmed Majorities (MAM), a deterministic variant of MAM called CIVS Ranked Pairs, and a runoff-based Condorcet algorithm called Condorcet-IRV.

I can help with this...
programming, or at least - I can help with testing, expected results, load files, etc.
or, whatever you may need for me to help with this, prepare documentation (technical, end user).

Control to resend results

Sometimes results are lost by the intended recipients. There should be a way for the poll supervisor to trigger resending results.

Vote weighting

Multiple users have requested the ability to weight votes. It's not clear what would be the right way to do this. In test mode there would at least be a natural way to specify vote weights.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.