CLI tool to rank proposals according to Majority Judgment, from an input CSV
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
Dominique Merle cdb3eb878d
chore(lint)
3 years ago
.github/workflows fix: CI do not need UPX for now 3 years ago
benchmark chore(lint) 3 years ago
cmd chore(lint) 3 years ago
example feat: detect CSV delimiter 3 years ago
formatter chore(lint) 3 years ago
reader chore(lint) 3 years ago
version feat: also display the build date in `--version` 3 years ago
.gitignore chore(git): ignore windows builds 3 years ago
LICENSE feat: basic cobra boilerplate and usage doc 3 years ago
README.md feat: detect CSV delimiter 3 years ago
build.sh test: add smoke tests on some basic calls 3 years ago
go.mod feat: detect CSV delimiter 3 years ago
main.go feat: support --version to get the version 3 years ago
main_test.go refacto: move example files around 3 years ago

README.md

Majority Judgment CLI tool

MIT Release Build Status Code Quality A+ LoC Discord Chat

Download

Hand-made builds are provided in the Assets of each Release.

Usage

Say you have a tally CSV like so:

     , reject, poor, fair, good, very good, excellent
Pizza,      3,    2,    1,    4,         4,        2
Chips,      2,    3,    0,    4,         3,        4
Pasta,      4,    5,    1,    4,         0,        2

You can run

./mj example.csv

and get

#2   Pizza 0000000000000111111111222233333333|333333334444444444444444455555555
#1   Chips 0000000001111111111111333333333333|333344444444444445555555555555555
#3   Pasta 0000000000000000011111111111111111|111222233333333333333333555555555

Legend:  0=reject  1=poor  2=fair  3=good  4=very good  5=excellent

You probably want to --sort the proposals as well:

#1   Chips 0000000001111111111111333333333333|333344444444444445555555555555555
#2   Pizza 0000000000000111111111222233333333|333333334444444444444444455555555
#3   Pasta 0000000000000000011111111111111111|111222233333333333333333555555555

Legend:  0=reject  1=poor  2=fair  3=good  4=very good  5=excellent

or use - to read from stdin:

cat example.csv | mj -

Balancing

Majority Judgment, to stay fair, requires tallies to be balanced ; all proposals must have received the same amount of judgments.

If your tally is not balanced, you may use a default judgment strategy:

mj example.csv --default 0
mj example.csv --default excellent
mj example.csv --default "très bien" --judges 42
mj example.csv --default majority
mj example.csv --normalize

The default balancing strategy is to replace missing votes with the "worst", most conservative vote, that is --default 0.

Formats

You can specify the format of the output:

./mj example.csv --format json > results.json
./mj example.csv --format csv > results.csv
./mj example.csv --format yml > results.yml
./mj example.csv --format svg > merit.svg

And even format gnuplot scripts that render charts:

./mj example.csv --format gnuplot | gnuplot

Linear merit profiles okf the proposals of a poll

You can specify the kind of chart you want:

./mj example.csv --format gnuplot --chart opinion | gnuplot

Opinion chart, the cumulative amounts of judgments per grade

Available charts:

  • merit (default)
  • opinion
  • a LOT more would be possible with more detailed data, per participant

Install

Copy the binary somewhere in your PATH.

Or don't, and use it from anywhere.

Build

You can also grab the source and build it:

git clone https://github.com/MieuxVoter/majority-judgment-cli

Install golang.

Example:

  • Ubuntu: sudo snap install go --classic

Then go into this project directory and run:

go get
go run .
go run . example/example.csv --sort
go build -o mj
./mj
./mj example/example.csv --sort

Build distributables

We have a convenience script build.sh that will handle version embedding from git, using the clever govvv.

But basically, it's:

go build -ldflags "-s -w" -o mj

Yields a mj binary of about 5 Mio.

They say we should not strip go builds.

You can run upx on the binary to reduce its size:

upx mj

For Windows

GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o mj.exe

Sometimes, Go builds for Windows are falsely detected by antiviral software.

Run tests

go test -v