https://github.com/mieuxvoter/majority-judgment-cli
CLI tool to rank proposals according to Majority Judgment, from an input CSV
https://github.com/mieuxvoter/majority-judgment-cli
cli golang golang-application majority-judgment poll
Last synced: about 1 month ago
JSON representation
CLI tool to rank proposals according to Majority Judgment, from an input CSV
- Host: GitHub
- URL: https://github.com/mieuxvoter/majority-judgment-cli
- Owner: MieuxVoter
- License: apache-2.0
- Created: 2021-10-19T06:20:21.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2023-02-16T16:38:49.000Z (about 2 years ago)
- Last Synced: 2023-03-01T17:25:40.570Z (about 2 years ago)
- Topics: cli, golang, golang-application, majority-judgment, poll
- Language: Go
- Homepage:
- Size: 176 KB
- Stars: 4
- Watchers: 6
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Majority Judgment CLI tool
[](LICENSE)
[](https://github.com/MieuxVoter/majority-judgment-cli/releases)
[](https://github.com/MieuxVoter/majority-judgment-cli/actions/workflows/go.yml)
[](https://www.codefactor.io/repository/github/mieuxvoter/majority-judgment-cli)
[](https://goreportcard.com/report/github.com/mieuxvoter/majority-judgment-cli)

[](https://discord.gg/rAAQG9S)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](https://github.com/MieuxVoter/majority-judgment-cli/releases).
> 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, 2You can run
./mj example.csv
and get

You probably want to `--sort` the proposals by their rank as well:
./mj example.csv --sort

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 --normalizeThe 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.svgAnd even format [gnuplot](http://www.gnuplot.info/) scripts that render charts:
./mj example.csv --sort --format gnuplot | gnuplot

You can specify the kind of chart you want:
./mj example.csv --format gnuplot --chart opinion | gnuplot

Available charts:
- [x] `merit` (default)
- [x] `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](https://golang.org/doc/install).
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](https://golang.org/doc/faq#virus) by antiviral software.
## Run tests
go test -v