Clockwise is a meeting cost calculator designed to encourage more efficient meetings.

↻lockwise

Clockwise is a meeting cost calculator designed to encourage more efficient meetings.

The meetings will continue until morale improves.

Installation

go get github.com/syncfast/clockwise

Usage

Clockwise supports the ability to automatically scrape participant count from a zoom meeting by passing the invitation url through the --url / -u flag.

clockwise run --url <zoom meeting url>

Manual input

Alternatively, you can leverage manual input mode, which collects user input via the TUI to manage participant count. Just exclude the --url flag.

clockwise run

Configuration

Clockwise relies on a single configuration item: average annual salary per participant.

This can be approximate, but you can use resources like indeed.com, glassdoor.com, and levels.fyi to be methodical in your approximation.

averageSalary defaults to $150,000 and can be modified by using the set subcommand.

$ clockwise set
? Set average annual salary of meeting participants: (150000) 

Alternatively, you can edit the configuration file directly at ~/.config/clockwise/clockwise.yaml.

TUI

Clockwise outputs total cost to a terminal UI (courtesy tcell) that is refreshed every 500ms.

Displaying total cost in your Zoom meeting

In conjunction with OBS, Clockwise can print your total meeting cost as it increases in real time to a virtual camera. The virtual camera can then be consumed by Zoom to passive aggressively remind everyone precisely how much a given meeting costs. Anecdotally, this raised awareness and led to more focused and less frequent meetings for my team. To change something, track it.

OBS Configuration

OBS configuration is a bit involved, but it's something that you only need to do once. Long term, it would be nice to replace OBS with something like FFMPEG that doesn't depend on an external GUI.

  • Install OBS.
    brew install --cask obs
  • Launch OBS.
  • In the Sources window, click the + icon.
  • Select Text (FreeType 2).
  • Click OK.
  • Check Read from file.
  • Click Select Font.
  • Change the Size to 144.
  • Click OK.
  • Scroll down to the Text File (UTF-8 or UTF-16) field and click the Browse button.
  • Navigate to ~/Documents/clockwise.
  • Select clockwise.txt and click OK.
  • Feel free to modify the text font, color, and size to suit your preferences. The sky is the limit.
  • In the lower right hand corner, click Start Virtual Camera.
  • You can optionally add your webcam as a video source as well and make the cost a text overlay.
    • In the Sources window, click the + icon.
    • Select Video Capture Device.
    • Click OK.
    • In the Device dropdown, select your webcam.
    • Click OK.
    • In the Sources window, make sure that Video Capture Device is selected and either drag it under your text source or click the down arrow icon.
    • If necessary, stretch your video layer so that it fills the canvas.
    • You can toggle your webcam off at any point by clicking the eye icon to the right of Video Capture Device in the Sources window.

Zoom configuration

  • If your zoom client is open, restart it (to load the new virtual camera).
  • In Zoom, in the lower left hand corner, select the small up arrow next to the Start Video button.
  • Select OBS Virtual Camera.
  • Click the Start Video button.

That's it! Make sure to add snarky remarks when your meetings drag on for added effect.

Contributing

Contributions are welcome and appreciated. This project is in a very early stage of development and I consider myself a novice Gopher. None of the code is sacrosanct. Feel free to eviscerate it.

To do

Most of these are up for grabs. If anything interests you, feel free to open an issue expressing your intent to tackle it. I'm happy to field questions (to the best of my ability) as they surface. Needless to say, feel free to submit feature requests via issues for anything that's not on the list.

  • Unit test all the things.
  • Explore authenticated web scraping approach.
  • Explore replacing OBS with a solution that doesn't require a GUI, like ffmpeg.
  • Explore time-series based approach.
  • Explore crash recovery solutions.
  • Handle browser startup more gracefully.
  • Make the TUI prettier.
  • Explore letting the clockwork zoom participant display the meeting cost.
  • Consider making the clockwork-bot zoom participant name configurable via the config file.
  • Implement CI via GH actions.
  • Implement PMI handling (likely through a flag).

Special thanks

Special thanks to everyone who provided invaluable feedback and input, including, in no particular order:

  • @alenawang
  • @redyama
  • @DWSR
  • @beeekind
  • @peterbourgon
  • @theckman
  • @fergyfresh
  • @jcstryker
Comments
  • Implement jitsi meeting scraper

    Implement jitsi meeting scraper

    This just implements the jitsi meeting scraper, want to leave the front facing CLI implementation to the author.

    Problem with Jitsi is: It can be self-hosted on arbitrary URLs, official one being https://meet.jit.si/ - but it could be anything.

    Maybe --url parameter could be renamed to --zoom, then additional services have --jitsi / --teams etc. ? Just an idea.

  • request: support for Jitsi meetings

    request: support for Jitsi meetings

    The problem is: I wasn't able to find an API that enables you to peek at the count of participants in a meeting.

    Maybe when this task is tackled: Explore letting the clockwork zoom participant display the meeting cost., it could be solved, as the bot would already be participating in the meeting and could fetch the participants in that way.

  • Add control descriptions to TUI

    Add control descriptions to TUI

    As a user, it is confusing to not have any indication of what keys to push to interact with the TUI. Having something like this would be helpful for first time users:

    [^/v] Increase/decrease user count
    
  • Playwright does not support chromium on mac12

    Playwright does not support chromium on mac12

    When running clockwise against a Zoom URL on macOS 12.2.1, receive this error:

    Initializing playwright to scrape participant count. 2022/04/01 12:40:03 Downloading browsers... Failed to install browsers Error: Failed to download chromium, caused by Error: ERROR: Playwright does not support chromium on mac12

    Is there a way to config-switch to another supported browser?

  • Virtual webcam via FFMPEG

    Virtual webcam via FFMPEG

    As a starting point..

    Requirements

    • Linux system
    • v4l2loopback kernel module installed
    • ffmpeg

    V4l2loopback: https://github.com/umlaeute/v4l2loopback (usually your package manager should have it)

    Explaination

    FONT_FILE -> User-defined font to use TEXT_FILE -> Text file with costs stats generated by clockwise VIDEO_NUM -> To easily distinguish virtual video source from physical

    ffmpeg/v4l2loopback parameters

    devices="1" -> Only generate a single virtual webcam (verbose parameter, its the default) card_label="Clockwise Cam" -> To find the virtual webcam easily exclusive_caps=1 -> Needed by some softwares to detect the webcam

    size=1280x720 -> Essentially for Jitsi-Meet to see/use the webcam

    Script

    FONT_FILE="Arial.ttf"
    TEXT_FILE="text.txt"
    
    FONT_SIZE="40"
    FONT_COLOR="white"
    
    VIDEO_NUM="99"
    
    rmmod v4l2loopback
    modprobe v4l2loopback devices=1 video_nr=${VIDEO_NUM} card_label="Clockwise Cam" exclusive_caps=1
    
    ffmpeg \
      -f lavfi \
      -i "color=black:size=1280x720,drawtext=enable=1:fontfile=${FONT_FILE}:fontsize=${FONT_SIZE}:fontcolor=${FONT_COLOR}:textfile=${TEXT_FILE}:reload=1:x=(w-text_w)/2:y=(h-text_h)/2" \
      -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video${VIDEO_NUM}
    

    EDIT 14/08/2021: Removed max_buffers=2

  • String Configuration

    String Configuration

    It would be great if the string at https://github.com/syncfast/clockwise/blob/master/internal/tui/tui.go#L255 could be configured via the configuration file, so that other options for what is written out to file/camera could be supported.

    e.g. Writing out text in a users local currency

An experiment building a custom binary protocol for a calculator

Overview Implementation of a calculator service built on a custom protocol on top of TCP Details The server is in main.go, and the client is in client

Nov 28, 2021
INCC calculator based on monthly rates.

inccCalc INCC calculator based on monthly rates. inccCalc version 1.0. Type 'help' for help, 'stop' to end the program. -help -stop -version -calc 'ca

Oct 29, 2021
Antlr go bool calculator

antlr-go-bool-calculator lib used : github.com/antlr/antlr4/runtime/Go/antlr generated parser code: antlr4 -Dlanguage=Go MyGrammar.g4 basic grammar AN

May 26, 2022
Pokt-calculator - A reward explorer for Pocket Network nodes
Pokt-calculator - A reward explorer for Pocket Network nodes

POKT Calculator A reward explorer for Pocket Network nodes. Quick start You can

Oct 23, 2022
Epochalypse - Simple TUI Epoch Calculator with golang
Epochalypse - Simple TUI Epoch Calculator with golang

epochalypse Simple TUI Epoch Calculator Screenshot

Feb 22, 2022
An efficient Go Rapid Product Assembly system used within the Bhojpur.NET Platform ecosystem.

Bhojpur GoRPA - Builder, Packager, Assembler An efficient Go-based Rapid Product Assembly software tool used within the Bhojpur.NET Platform ecosystem

Apr 28, 2022
CapMonsterTool is a set of Go tools designed to simply make requests to the CapMonster Cloud API.

✨ CapMonsterTool ✨ About this module What is ✨ CapMonsterTool ✨ ? CapMonsterTool is a set of Go tools designed to simply make requests to the CapMonst

Dec 1, 2022
TLDR Page Creator is a program designed to help users make TLDR pages

TLDR Page Creator is a program designed to help users make TLDR pages, while avoiding syntax errors from TLDR-style markdown.

Dec 3, 2022
A simple tool to send binary data over a serial port. Designed for use with my retro computer systems.

Colin's Transfer Tool This is a really basic tool to transfer firmware files to my retro computer systems over a serial port. This removes the need fo

Dec 21, 2021
Quickly clone an entire org/users repositories into one directory - Supports GitHub, GitLab, Bitbucket, and more
Quickly clone an entire org/users repositories into one directory - Supports GitHub, GitLab, Bitbucket, and more

ghorg ghorg allows you to quickly clone all of an orgs, or users repos into a single directory. This can be useful in many situations including Search

Jan 1, 2023
Yet another Go REPL that works nicely. Featured with line editing, code completion, and more.
  Yet another Go REPL that works nicely. Featured with line editing, code completion, and more.

gore Yet another Go REPL that works nicely. Featured with line editing, code completion, and more. (Screencast taken with cho45/KeyCast) Usage gore Af

Jan 7, 2023
jacobin - A more than minimal JVM written in Go and capable of running Java 11 bytecode.

This overview gives the background on this project, including its aspirations and the features that it supports. The remaining pages discuss the basics of JVM operation and, where applicable, how Jacobin implements the various steps, noting any items that would be of particular interest to JVM cognoscenti.

Dec 29, 2022
Heat, heat and more heat!
Heat, heat and more heat!

Load Operator The intention of this project is to escape from the bad weather during the winter season. ;) Instead of getting wet and cold, it is used

Nov 15, 2021
A patcher for the MS-DOS version of Fallout 1 including Crafty's sFall1 patches and maybe more

A patcher for the MS-DOS version of Fallout 1 including Crafty's sFall1 patches and maybe more

Oct 13, 2022
Ghdl - A much more convenient way to download GitHub release binaries on the command line, works on Win & Unix-like systems

ghdl Memorize ghdl as github download ghdl is a fast and simple program (and als

Oct 12, 2022
A zoom meeting scanner made in go and it will show the meeting information

zoom-scanner A zoom meeting scanner made in go and it will show the meeting information Installation: git clone https://github.com/krishpranav/zoom-sc

Aug 31, 2022
Calculator-with-Fyne - A Fyne calculator with a GUI
Calculator-with-Fyne - A Fyne calculator with a GUI

Calculator Basic calculator for learning Fyne and honing Go skills. Installation

Apr 26, 2022
API used to help people schedule meetings, by getting their mutual timeslots.

1. Description API used to help people schedule meetings, by getting their mutual timeslots. 2. Documentation The API documentation can be found here.

Apr 17, 2022