npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

lliira

v1.7.0

Published

Organize the best timeslots for a meeting based on probability scores

Downloads

5

Readme

Lliira

Organize the best timeslots for a meeting based on probability scores.

📝✨💃

Input format

Input is a tsv file (for easier copy-pasting from spreadsheets). If input file is not specified, data.tsv is used by default.

Each row stands for one participant preferences, each column stands a single timeslot.

Rows could be prefixed with names.

Default scores definition

  • 0 — Impossible, ~0%.
  • 1 — Bad, <50%, or going to be late or leave early every time.
  • 2 — Inconvenvient, ≥50%.
  • 3 — Tolerable, ≥80%.
  • 4 — Good, ~100%, perhaps with only minor inconvenience.
  • 5 — Perfect, ~100%.

Example input file

Alice	4	5	0	0	5	2
John	4	5	5	4	2	5
Maddy	3	2	5	0	4	4
Mike	1	0	3	5	5	4
Peter	5	5	3	1	2	2

Names are optional, generic names are used if only numbers are present in the input.

Output format

This tool is not ideal — it does not select one magic timeslot or a magic combination to use. Instead, it ranks each possible attempt using several metrics, and outputs a set of several optimal combinations for different utility function balances.

After that you can select the one combination you see better fit (based of metrics).

For maximum number of meetings equal to three (default), there should normally be about 10 entries in the output or less.

Timeslots are numbered from 0.

Example output

times: [ 4 ], participation: { avg: 0.7357, min: 0.479, stdev: 0.2096, fair: 0.8255 }, interaction: { avg: 0.5536, min: 0.2395, stdev: 0.2092, fair: 0.6655 }
times: [ 0 ], participation: { avg: 0.7415, min: 0.1936, stdev: 0.2792, fair: 0.5673 }, interaction: { avg: 0.5478, min: 0.1549, stdev: 0.3082, fair: 0.4745 }
times: [ 5 ], participation: { avg: 0.7317, min: 0.4776, stdev: 0.2075, fair: 0.8244 }, interaction: { avg: 0.5492, min: 0.2388, stdev: 0.2065, fair: 0.6644 }
times: [ 0, 4 ], participation: { avg: 0.7386, min: 0.5518, stdev: 0.1245, fair: 0.9678 }, interaction: { avg: 0.5507, min: 0.3185, stdev: 0.1394, fair: 0.725 }
times: [ 4, 5 ], participation: { avg: 0.7337, min: 0.4783, stdev: 0.158, fair: 0.8476 }, interaction: { avg: 0.5514, min: 0.3466, stdev: 0.1563, fair: 0.7372 }
times: [ 0, 2, 4 ], participation: { avg: 0.7103, min: 0.6128, stdev: 0.0904, fair: 0.9688 }, interaction: { avg: 0.5111, min: 0.3538, stdev: 0.1004, fair: 0.8261 }
times: [ 0, 4, 5 ], participation: { avg: 0.7363, min: 0.6254, stdev: 0.0819, fair: 0.9655 }, interaction: { avg: 0.5502, min: 0.3626, stdev: 0.09, fair: 0.7937 }
times: [ 0, 3, 4 ], participation: { avg: 0.5219, min: 0.4337, stdev: 0.0607, fair: 0.9193 }, interaction: { avg: 0.3765, min: 0.2261, stdev: 0.0817, fair: 0.6501 }
times: [ 1, 4, 5 ], participation: { avg: 0.6973, min: 0.6088, stdev: 0.0708, fair: 0.9527 }, interaction: { avg: 0.4973, min: 0.3072, stdev: 0.0845, fair: 0.7563 }
times: [ 0, 4, 4 ], participation: { avg: 0.7376, min: 0.6226, stdev: 0.122, fair: 0.9585 }, interaction: { avg: 0.5516, min: 0.364, stdev: 0.1283, fair: 0.7653 }

Of that, [ 4 ] looks like the most tolerable time for a single meeting, and [ 0, 4, 5 ] looks to be a decent choice for rotating recurrent meetings.

Metrics

Metric groups

  • participation is an analysis of participation probabilites. It is done per-person and measures the distribution of number of meetings visited by a person.

  • interaction is an analysis of interaction probabilites. It is done per each unique pair of participants and analyzes the distribution of number of times that interaction happened.

Group scores

  • avg is an average number for all entries divided by the theoretical maximum.

    • min.participation is equal to the chance for an average paricipation to happen in an average meeting.
    • min.interaction is equal to the chance for an average interaction to happen in an average meeting.
  • min is the average number for the least represented entry.

    • min.participation is equal to the chance that the least represented participant will participate in an average meeting.
    • min.interaction is equal to the chance that the least overall probable interaction will happen in an average meeting.
  • stdev is a population standard deviation over a set of average numbers for each entry. The lower stdev is, the more equal each entry is represented (i.e. all are equally good or bad).

  • fair is a non-linear metric that first tries to optimize the amount of entries that are represented at least onece, then amount of entries that are represented twice, and so on.

Scale for avg, min, and fair is 0,1, scale for stdev is 0,0.5.

Good numbers for avg, min, and fair are the higher ones, good numbers for stdev are the smaller ones.

Quorum rule

Quorum rule is enabled by default, but can be disabled in config.

Meetings not reaching the quorum (e.g. «more than 50% people present», which is the default value) are considered cancelled and have zero resulting utility.

That is taken into account automatically when metrics are computed — metrics are already corrected by the probability of reaching the quorum at the selected time slots.

Default parameters

Parameters are bundled in config.js.

Default maximum number of meeting slots that could be rotated is equal to 3 — that means that each row will present at much 3 time slots to rotate between those (for regular meetings).

Default probability values for scores are [0.02, 0.2, 0.5, 0.8, 0.94, 0.95].
That never reaches 0 and 1 on a purpose — those are not real-world probabilites. So 0 is not always 0% and 5 can not mean 100% attendance — unexpected things happen.

Default quorum size is 0.5 + 1e-6, which stands for «more than 50%».