hrbrmstr's Daily Drop

Share this post

Drop #325 (2023-08-24): Terminal (Storytelling) Velocity

dailyfinds.hrbrmstr.dev

Discover more from hrbrmstr's Daily Drop

A digest of all the interesting data, packages, blogs and papers covering lots of programming languages, CLI utilities, cybersecurity, data visualization, data science, web-scraping and more!
Continue reading
Sign in

Drop #325 (2023-08-24): Terminal (Storytelling) Velocity

YouPlot; Slides; VHS

boB Rudis
Aug 24, 2023
2
Share this post

Drop #325 (2023-08-24): Terminal (Storytelling) Velocity

dailyfinds.hrbrmstr.dev
Share

We're back at the CLI today, focusing our gaze upon three tools to help you craft engaging narratives from the terminal (or just get stuff done).

TL;DR

This is an AI-generated summary of today's Drop.

I used the same prompt and service as yesterday. Zero editing required

  • YouPlot: A Ruby-based command-line tool for creating visually appealing plots, graphs, and charts directly in your terminal. It supports various types of plots and works with data from standard input or specified files. YouPlot GitHub Repository

  • Slides: A terminal-based presentation tool that allows you to define slide decks in a familiar markdown format and serve them up interactively or make them available via anonymous SSH. It supports code block execution and has full navigation controls. Slides GitHub Repository

  • VHS: A utility by Charmbracelet that enables you to record, generate, and playback terminal sessions in the form of GIFs or videos. It simplifies the process of creating visual demonstrations of command-line interactions and supports a variety of commands for controlling the recording. VHS GitHub Repository


YouPlot

YouPlot is a Ruby-based command-line tool that enables you to create visually appealing plots, graphs, and charts directly in your terminal. It is designed to work with data from standard input or specified files, supporting various types of plots, including bar, line, scatter, box plots, histograms, and density plots. It also has sane defaults, so what you create will most likely look pretty solid without further customization.

Usage is super straightforward, and there are many examples in the repo. Here's another one using yesterday's “superhero” dataset (remotely, via DuckDB) to see what the dominant “super” eye color is:

$ duckdb -column \
  -c "install httpfs;
      load httpfs; 
      select 
        eye_color 
      from 
        'https://rud.is/dl/superheroes.parquet' 
      where
        eye_color != ''" |
  uplot count -t "The Eyes Have It"

(output is in the section header)

This is very handy when you're at the CLI and need to visualize some data you're working with and do not want to switch modalities. It's also handy for creating charts to use in text-based presentations. I can't imagine why I would note that…

Share

Slides

girl in pink and brown long sleeve shirt and pink pants sitting on yellow inflatable ring
Photo by Wilbur Wong on Unsplash

If we can put charts in the terminal, why not entire slide decks?!

Slides (GH) is a terminal-based presentation tool that lets you define a deck in a familiar markdown format (it's similar to Qmd/Rmd/Reveal decks) and serve it up interactively, yourself, or make them available via anonymous SSH.

You'll see it in action in the final section's header, so we can afford to take some space to give a peek at the format (in the event some folks do not use markdown slides):

---
author: "@hrbrmstr"
date: "2023-08-24"
paging: "Slide %d / %d"
theme: "dracula.json"
---

# Welcome To The Daily Drop

_Edition: #325 (2023-08-24)_

Topics:

- YouPlot
- Slides
- VHS

---

(The dracula.json is a glamour theme.)

Full navigation controls are baked in, as is the ability to search across slides interactively.

Slides also supports code block execution, either in situ, or via pre-rendering before the deck is presented. For now, you're limited to:

  • bash

  • zsh

  • fish

  • elixir

  • go

  • javascript

  • python

  • ruby

  • perl

  • rust

  • java

  • cpp

  • swift

  • dart

  • v

for those code blocks, but the Golang code is super readable, so it should not be difficult to add support for others (I may try to do that for R, or perhaps we can do it together tomorrow?).

When you start a slideshow, Slides watches the file for changes and will re-render things on the fly, which is super-handy when you're iterating on a deck.

It's a very clever tool and pairs nicely with what's in the last section.

You can tap through the presentation I made for the video in the last section via:

$ ssh thats.hrbrmstr.dev -p53531

VHS

Charmbracelet's VHS utility is a spiffy tool that allows you to record, generate, and playback terminal sessions in the form of GIFs or videos. It simplifies the process of creating visual demonstrations of command-line interactions, which can be useful for READMEs, tutorials, or integration tests. Moreover, VHS addresses the challenge of effectively demonstrating command-line interactions in a visual and engaging manner. Traditional methods, such as static screenshots or manually recorded screencasts, can be time-consuming to create and update. VHS simplifies this process by allowing you to define the desired terminal interactions via “commands” in what the devs call a .tape file, which can be easily modified and re-recorded as needed.

There are a few basic types of VHS commands:

  • Output <path>: specify file output

  • Require <program>: specify required programs for tape file

  • Set <Setting> Value: set recording settings

  • Type "<characters>": emulate typing

  • Left Right Up Down: arrow keys

  • Backspace Enter Tab Space: special keys

  • Ctrl[+Alt][+Shift]+<char>: press control + key and/or modifier

  • Sleep <time>: wait for a certain amount of time

  • Hide: hide commands from output

  • Show: stop hiding commands from output

  • Screenshot: screenshot the current frame

The Charmbracelet folks have an extensive set of examples which will look much better on GH than they will here, but these are the first few lines of the slides.md one which produced the video in the section header:

Output slides.mp4
Output slides.gif
Set FontSize 32
Set Padding 0
Set Framerate 1
Set Width 1600
Set Height 1200

Hide
Type "./slides.md"
Enter
Show

Sleep 1s

Type@1s "n"
Sleep 1s

VHS allows you to publish your GIFs to our servers for easy sharing with your friends and colleagues. Specify which file you want to share, then use the publish sub-command to host it on vhs.charm.sh. The output will provide you with links to share your GIF via browser, HTML, and Markdown.

As if all this is not sufficiently cool, VHS also has a built-in SSH server. When you self-host VHS you can access it as though it were installed locally. VHS will have access to commands and applications on the host, so you don't need to install them on your machine.

And, they mean it when they say CI/CD, since they've provided a handy GitHub Action to add to your workflow.

The README has information on how to install VHS via a package manager. However, if you decide to embark on the go install … journey, you'll need ttyd around, first. And, as usual, the Charmbracelet folks have extensive, rendered examples in that same README.

FIN

Today’s Drop was all sorts of fun to make. ☮

2
Share this post

Drop #325 (2023-08-24): Terminal (Storytelling) Velocity

dailyfinds.hrbrmstr.dev
Share
Previous
Next
Comments
Top
New
Community

No posts

Ready for more?

© 2023 boB Rudis
Privacy ∙ Terms ∙ Collection notice
Start WritingGet the app
Substack is the home for great writing