EmacsConf infrastructure upgrades
| emacsconfWith the EmacsConf call for proposals now closed, I have a little time before EmacsConf speakers send in their pre-recorded videos come in for captioning. I decided to dust off the infrastructure to see what makes sense to upgrade.
We use Etherpad for collaborative note-taking during EmacsConf. It's straightforward to use and pretty reliable. Conference participants can use it to share notes, questions, and links. They can also use IRC to ask questions, and volunteers copy those questions into the pad for the talk. Hosts and speakers can keep an eye on the pad for questions. We send speakers a copy of their talk's pad after the conference, and we post that along with other follow-up questions on the conference wiki. Here's an example: Writing academic papers in Org-Roam.
A native Emacs solution for collaborative notes would be even better. CRDT was great for experimenting with real-time collaboration within Emacs, but I'm not sure it can handle a ton of simultaneous connections and I don't want to find out in the middle of the conference. Also, requiring Emacs would leave out the people who only have a web browser handy. It would be super cool if we had something with Emacs, web, and IRC interfaces, but for now, Etherpad will do.
We started by using Wikimedia's instance, and then we moved to hosting our own. For the past two years, we've used Etherpad 1.9.7. Etherpad is currently at version 2.5.0. There are some performance improvements, bugfixes, and security fixes, so I think it'll be worth upgrading to that. I don't know of any specific issues or upgrades, but it's a good idea to stay closer to the latest release than to get too far out of date.
I switched our
roles/pad/tasks/main.yml to use
systemli.etherpad from ansible-galaxy. I also
figured out how to set up a Vagrant virtual
machine that I could destroy and reconfigure with
vagrant destroy; vagrant up --provision
. Here's
my Vagrant file for that:
# -*- mode: ruby -*-
Vagrant.configure("2") do |config|
config.vm.box = "debian/bookworm64"
config.vm.define "pad" do |pad|
end
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
end
config.vm.network "private_network", ip: "192.168.56.2"
config.vm.provision "ansible" do |ansible|
ansible.playbook = "../../vagrant-playbook.yml"
end
end
The playbook it refers to has this:
- name: Pre-flight checks and package installation
hosts: pad
become: true
gather_facts: false
pre_tasks:
- name: Ensure ntpdate is installed for time sync
ansible.builtin.apt:
name: ntpdate
state: present
update_cache: yes
- name: Synchronize system clock
ansible.builtin.command: ntpdate pool.ntp.org
changed_when: true
- name: Ensure ACL package is installed
ansible.builtin.apt:
name: acl
state: present
- name: Load vars
hosts: pad
tags: always
tasks:
- include_vars:
file: vagrant-vars.yml
- name: Set up pad proxy
hosts: pad
tags: proxy
roles:
- pad-proxy
- name: Set up pad
hosts: pad
tags: pad
roles:
- pad
I had used Vagrant in 2013, and it felt good to
have the time to set up more testing
infrastructure. I liked being able to test my
pad
and pad-proxy
roles against a local
virtual machine. I could figure out whatever
tweaks I needed without messing up the production
instance that we use for some meetups in
between conferences.
Our production instance is on Debian 10 (Buster).
That has reached its end of life for security
updates, so apt-cache update
doesn't work on it
any more, and those steps in my Ansible playbook
fail. I'm waiting for Amin Bandali to work on
upgrading that server, since he has other stuff
running on it. By setting update_cache
variable
that I override in my inventory.yml and referring
to it with update_cache: ""
in
my task, I can conditionally disable the apt-cache
update steps. That let me run the playbook against
the production server, and now we're on Etherpad 2.x.
I recently updated our BigBlueButton instance to version 3.0.12. We've decided to stay with Icecast 2.4.4-1 for doing the livestreaming. We'll probably also keep OBS 29.1.2 and ffmpeg 6.0.1 instead of upgrading. With no must-have new features and other organizers' limited availability, it's better to keep those parts stable. This year, we'll continue using whisperx to help with the first draft of captions, but we'll probably try large-v3 instead of large-v2 by default. Some people find that large-v3's performance is better, some people find it's worse, so we'll see. Now that I know about whisperx's --initial_prompt
option, I might be able to nudge it to the vocabulary and punctuation style we like.
Since the bones seem pretty solid, I'm looking forward to refamiliarizing myself with the Emacs Lisp code I wrote to help run the conference. I saved a bunch of improvement ideas from last year, and I can't wait to turn them into code. That's probably going to be lots of fun!