andrewcmyers / civs Goto Github PK
View Code? Open in Web Editor NEWCondorcet Internet Voting System
Home Page: http://civs1.civs.us
License: MIT License
Condorcet Internet Voting System
Home Page: http://civs1.civs.us
License: MIT License
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?
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.
I was invited to use CIVS for a first time and I tried to confirm my email:
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?
SSL and authentication support are needed to make this more widely usable.
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.
http://civs.cs.cornell.edu/ and https://civs.cs.cornell.edu/ both fail to load.
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.
The Russian localization is pretty awful (my fault). Need a native speaker to take a pass over russian.pm
!
There should be a stress testing script that allows some evaluation of the throughput that the system is able to deliver.
As per subject and our emails.
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.
Breaking cycles by picking the candidate with the most top-ranked votes should be simple and relatively resistant to burying strategies.
The page https://civs1.civs.us/cgi-bin/opt_in.pl exists in an English version, but it's a page seen by a lot of users whose first language is not English. So it would be good to add translations for the several languages that CIVS supports.
This only makes sense for polls with more than one winner, of course.
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).
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:
I'll gladly provide more input when you tell me what you need.
It started small but there is a proliferation of files now. All language-specific files should be put somewhere else, at least.
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.
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.
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.
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:
This is not high priority but I thought I should report the issue.
---Michael
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 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.
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.
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).
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.
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.
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.
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
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
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.
Thank you for this code and service!
The README.md includes text which is nearly perfectly in line with the MIT Old Style (no advertising without permission) text, but doesn't note that, or use the words "open source". It would help people find and trust the open source nature of this code if the repository included both of those.
Best I think would be to follow the recent GitHub conventions, and include a LICENSE file.
It would be nice to be able to see how the amount of votes cast develops over time.
The German template does not show the URL to the results.
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.
There doesn't seem to be a reason to prevent this, and it would be convenient to be able to send out results to additional people.
The Condorcet Election Format (.cvotes) is a tentative to standardize election input (configuration & vote data) in a human-readable and editable format, but also a precise definition that is easy to parse for a program.
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?
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.
This would protect voters against the poll supervisor.
Sometimes results are lost by the intended recipients. There should be a way for the poll supervisor to trigger resending results.
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.
Currently it is always on.
I created a test poll with 4 options and "Enforce proportional representation" activated (2 choices would win).
The file uploaded contained these votes:
1, 4, 3, 2
4, 1, 3, 2
However, in the "Nonproportional poll" section the third choice won over the fourth.
These are the poll results: http://civs.cs.cornell.edu/cgi-bin/results.pl?num_winners=2&id=E_c8886312c2f0969f
You can see the actual votes downloading the CSV.
as many robots add weired comment,, could be good to add a capchat for the input field
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.