MyNixOS website logo
Description

An interview scheduler using constraint satisfaction and Google Sheets.

Primarily a command-line tool for specifying people, their availabilities, and desired meetings, finding the best solution to this scheduling task, and a few other niceties, all directly in a Google Sheets spreadsheet so it's easy to edit collaboratively and view the results.

scheduling - interview management utility for CLSP recruitment weekend

This code base produces a command-line utility for managing the interview schedules of the CLSP recruitment weekend. This involves manipulating Google spreadsheets, and solving constraint-satisfaction problems based on faculty preferences, availability, and other considerations. Under the hood it employs the Microsoft Z3 theorem prover to find optimal solutions to problems formulated via the SBV library. The interactions with Google APIs are accomplished with the gogol-* libraries and heavy use of lenses.

Building and running the repository

After using ghcup to install and set a recent version (e.g. 9.X) of GHC and Cabal, the code can be built with:

$ cabal build

and the tool invoked with:

$ cabal exec -- scheduler OPTIONS

Preparing a spreadsheet and using the scheduler

The spreadsheet should allow "anyone with the link" to edit, and the key (the long random path component in the URL) gets passed to the scheduler tool with the --access switch. The tool has two primary modes, init and solve, that each rely on information being in particular tabs, and create (or overwrite) a handful of others: outside of these, it should not modify anything (though bugs are possible, and interactions with e.g. formulae have not been considered).

The basic workflow is to manually create a "Prospects" and "Interviewers" tab, each with "First", "Last", and "Email" columns, and interviewers with a "Zoom" column (in any order, and additional columns will be ignored), and invoke the tool with:

cabal exec -- scheduler init --access KEY

This generates the "Prospect Availability", "Interviewer Availability", and "Interviewer Preferences" tabs, which can then be filled in by the relevant parties. Note that running the command with the --force switch will overwrite the tabs, so it may be wise to edit-protect them once information has been entered. Then, invoke the tool with:

cabal exec -- scheduler solve --access KEY

The tool will attempt to satisfy the interviewer preferences using the availability of both groups, and write it's best solution to the tabs "Interviewer Schedule" and "Prospect Schedule".

Metadata

Version

0.1.0.0

Platforms (77)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows