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 41d0e0c43a
fix: build badge semantics
1 year ago
.github/workflows fix: CI do not need UPX for now 2 years ago
benchmark chore(lint) 2 years ago
cmd docs: don't forget gnuplot 2 years ago
example feat: support files with CRLF endings 2 years ago
formatter feat: colorize 2 years ago
reader feat: support files with CRLF endings 2 years ago
version docs: explain the version package's purpose 2 years ago
.gitignore chore(git): ignore windows builds 2 years ago
LICENSE feat: basic cobra boilerplate and usage doc 2 years ago
README.md fix: build badge semantics 1 year ago
build.sh test: add smoke tests on some basic calls 2 years ago
go.mod feat: add `--no-color` and enable color in the text merit profile 2 years ago
main.go feat: support --version to get the version 2 years ago
main_test.go feat: support files with CRLF endings 2 years ago

README.md

Majority Judgment CLI tool

MIT Release Build Status Code Quality A+ LoC Discord Chat

Resolve Majority Judgment polls and compute the rank of each proposal.

Download

Hand-made builds for Windows and Linux/Mac are provided in the Assets of each Release.

Remember to enable the execution bit: chmod u+x ./mj

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

Merit profiles in ASCII art, with colors

You probably want to --sort the proposals by their rank as well:

./mj example.csv --sort

Merit profiles in ASCII art, with colors, and sorted

or use - to read from stdin:

cat example.csv | mj - --sort

You can also disable color with the flag --no-color:

./mj example.csv --no-color

#2   Pizza 000000000000011111111222233333333|333333334444444444444444455555555
#1   Chips 000000001111111111111333333333333|333344444444444445555555555555555
#3   Pasta 000000000000000001111111111111111|111122223333333333333333355555555

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

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 --sort --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 ballot 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