2021-12-13 Emacs news

| emacs, emacs-news

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Hacker News, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, emacs-devel, and lemmy/c/emacs.

View or add comments

EmacsConf backstage: chapter markers

| emacs

Long videos are easier to navigate with chapter markers, so I've been slowly adding chapter markers to the Q&A sessions for EmacsConf 2021. I wrote an IkiWiki template and some Javascript code so that adding chapter markers to the EmacsConf wiki should be just a matter of as adding something like this:

[[!template id="chapters" vidid="mainVideo" data="""
00:00 Introduction
00:11 Upcoming Emacs 28 release
00:24 Org mode 9.5
00:57 Magit major release
01:18 Completion
01:51 Embark
02:12 tree-sitter
02:44 Collaborative editing
03:03 Graphical experiments
03:41 Community
04:00 libera.chat

That way, updating the talk pages with chapter descriptions should be less reliant on my Emacs Lisp functions for generating HTML, so it's more likely to be something other people can do.

If you happen to be interested in Emacs and you're planning to watch the talks or Q&A sessions anyway, you can help add chapter markers to videos that don't have them yet. You can either edit the wiki yourself or e-mail me chapter timestamps at . You can also help out by cross-referencing the chapter timestamps with the discussion session on the page, so that people reading the questions can see where to find the answers. If you're feeling extra-helpful, you could even write down the answers for easy reference.

Here are a few pages that have long Q&A sessions. I've linked to the autogenerated captions in the Discussion sections.

You can call dibs by editing https://etherpad.wikimedia.org/p/emacsconf-2021-volunteers .

Little steps towards making things easier to find! =)

Behind the scenes

I used the auto-generated captions from YouTube as a starting point, since I could skim them easily. I found that the .ass format was easier to speed-read than the .vtt format, so I used ffmpeg to convert them. Then I used emacsconf-subed-mark-chapter from emacsconf-subed to capture the timestamps as a .vtt file.

This is what part of the autogenerated captions looks like:

Dialogue: 0,0:01:16.11,0:01:18.11,Default,,0,0,0,,First of all, in your opinion, what is
Dialogue: 0,0:01:18.11,0:01:20.11,Default,,0,0,0,,Emacs' achilles heel? it's obviously a
Dialogue: 0,0:01:20.11,0:01:22.35,Default,,0,0,0,,powerful tool but no tool is perfect

and this is part of the chapters file I made:

00:00:26.319 --> 00:03:09.598
In your opinion, what is Emacs' Achilles heel?

00:03:09.599 --> 00:05:06.959
What is your opinion about the documentation of Emacs in other languages?

I converted the timestamps to a simple text format handy for including in video descriptions and on the wiki.

[[!template id="chapters" vidid="qanda" data="""
00:00 Thanks
00:26 In your opinion, what is Emacs' Achilles heel?
03:09 What is your opinion about the documentation of Emacs in other languages?

A number of Emacs users browse the web without Javascript, so I wanted the chapter information to be available even then. Putting all the data into a pre tag seems like the easiest way to do it with an ikiwiki template. Here's the template I used:

<pre class="chapters" data-target="<TMPL_VAR vidid>">
<TMPL_VAR data>

I also modified the IkiWiki htmlscrubber.pm plugin to allow the attributes I wanted, like data-target and data-start.

If Javascript was enabled, I wanted people to be able to click on the chapters in order to jump to the right spot in the video. I split the content into lines, parsed out the timestamps, and replaced the pre tag with the list of links. I also added the chapters as a hidden track in the video so that I could use the cuechange event to highlight the current chapter. This is what I added to the page.tmpl:

 // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
 // Copyright (c) 2021 Sacha Chua - CC0 Public Domain
 function displayChapters(elem) {
   var i;
   var chapter;
   var list = document.createElement('ol');
   list.setAttribute('class', 'chapters');
   var link;
   var target = elem.getAttribute('data-target');
   var video = document.getElementById(target);
   var track;
   if (video) {
     track = video.addTextTrack('chapters');
     track.mode = 'hidden';
   var chapters = elem.textContent.split(/[ \t]*\n+[ \t]*/).forEach(function(line) {
     var m = (line.match(/^(([0-9]+:)?[0-9]+:[0-9]+)[ \t]+(.*)/));
     if (m) {
       var start = m[1];
       var text = m[3];
       chapter = document.createElement('li');
       link = document.createElement('a');
       link.setAttribute('href', '#');
       link.setAttribute('data-video', target);
       link.setAttribute('data-start', start);
       link.setAttribute('data-start-s', parseSeconds(start));
       link.appendChild(document.createTextNode(m[1] + ' ' + text));
       link.onclick = handleSubtitleClick;
       if (track) {
         var time = parseSeconds(start);
         if (track.cues.length > 0) {
           track.cues[track.cues.length - 1].endTime = time - 1;
         track.addCue(new VTTCue(time, time, text));
   if (track && track.cues.length > 0) {
     video.addEventListener('durationchange', function() {
       track.cues[track.cues.length - 1].endTime = video.duration;
     track.addEventListener('cuechange', function() {
       if (!this.activeCues[0]) return;
       if (list.querySelector('.current')) {
         list.querySelector('.current').className = '';
       var chapter;
       if (chapter = list.querySelector('a[data-start-s="' + this.activeCues[0].startTime + '"]')) {
         chapter.parentNode.className = 'current';
   elem.parentNode.replaceChild(list, elem);

 // @license-end

handleSubtitleClick is also part of the JS on that page. It sets the current time of the video and scrolls so that the video is in view.

View or add comments

Monthly review: November 2021

| monthly, review
  • We had our first sub-60 times on the Rubik's cube. A-'s now a little faster than I am. She was proud of buying a premium cube with her savings. She loved using the timer.
  • A- was was greatly amused by the challenge I set myself to solve Rubik's cubes and stack them on top of my head. After I did three, she wanted me to do it again, so I said I would only solve it if she could balance a Rubik's cube on her head. She was able to balance it for a few seconds at a time, practising her gross motor skills and self-regulation.
  • I got the hang of swinging the jump rope for A-. A- also figured out waist hooping.
  • A- wanted to help with knitting. After a number of knit 2 purl 2 repeats, we decided to change the pattern to knit the whole row. "Sometimes I think of it as scooping the poop," she said, working the needles. We experimented with different patterns and observed the resulting textures.
  • A- loved the Hamster Princess series and the Princess in Black series.
  • A- was curious about Pirate Fluxx.
  • We made coin sorters and coin-operated candy dispensers using LEGO.
  • W- set up some home automation.

Blog posts


Category Previous month % This month % Diff % h/wk Diff h/wk
Discretionary - Productive 10.4 19.6 9.2 31.9 15.4
Personal 6.8 9.6 2.8 15.6 4.8
Business 0.3 1.0 0.6 1.6 1.1
Discretionary - Social 0.2 0.0 -0.2 0.0 -0.4
Discretionary - Family 0.6 0.2 -0.4 0.3 -0.7
Discretionary - Play 1.4 0.6 -0.8 1.0 -1.4
Unpaid work 5.9 4.2 -1.7 6.9 -2.9
Sleep 34.7 32.5 -2.2 53.0 -3.6
A- 39.5 32.3 -7.3 52.5 -12.2
View or add comments

Monthly review: October 2021

| monthly, review
  • I drafted the schedule for EmacsConf 2021, taking speaker availability into account.
  • I got the hang of solving the 3x3 cube without referring to a guide. Now to build up speed and learn more patterns…
  • A- wanted to practise the fish move on the Rubik's cube. We did it 144 times, using the rekenrek in place value mode to keep track of the sums after each round.
  • A- pretended she was Cat Ninja doing 3-point landings.
  • A- was able to hoop around her neck 12 times in a row.
  • A- tried different typing games.
  • A- was reading Astronaut Academy silently. I offered to read it to her, and she chose to read it herself instead. I asked her how many new words she was coming across. She told me she knew all of them.
  • I flipped through a book on teaching kids how to read. A- was able to read many of the sample sentences, although she stumbled over some of the more advanced phonics rules (ex: costly, costlier, costliest).
  • We tried out Teach Your Monster to Read. A- enjoyed playing for almost an hour. I skipped her ahead to the Champion Reader stage.
  • More stomach pain for A-.
  • A- went as a bat for Halloween. She wore the bat wings I made her out of sofa cover scraps, and I covered her leopard headband with the same fabric to make bat ears. She walked pretty far and did several trips, confidently walking to the houses and greeting people. She kept an eye out for the other kids we were going with, making sure the 2-year-old didn't go near the road. Afterwards, she sorted her candy and shared some with us.
  • I showed A- how to use the playing cards to exercise our memories by naming the cards in sequence. I named cards until I started forgetting (~7 cards), and we talked about working memory. Then I showed her how mnemonics could help us remember better by using silly stories. I used the cards to improvise a story using the major number system that I'd modified to use Numberblocks, which I'd taught her previously for memorizing digits of pi. (3 said, "Look at me!" But 5 was too busy laughing at 7, who was riding a kangaroo and chasing 4, who was dressed as a pirate…) She kept bringing me more cards to incorporate into the story, and she said the numbers whenever I paused and prompted her with our mnemonic cues. We got to 23 cards before she moved on to a different activity.
  • A- finished the Pre-reader Express course on code.org. We tried a few puzzles from Course C, but "turn left" and "turn right" were a little difficult for her to think about. We might revisit this once she's more comfortable with left, right, clockwise, and counterclockwise.
  • We played lots of math card games: Garbage (filling in a 10-frame), Make 10 (adding two numbers), and Gain and Loss (black cards add, red cards subtract). She was able to use number bonds to quickly add or subtract numbers on the rekenrek. For example, when she needed to add 8 to 17, she could add it as + 3 + 5 (add 3 beads on the second row, then add 5 beads on the third row) instead of counting the beads one by one.

Blog posts


Category Previous month % This month % Diff % h/wk Diff h/wk
Discretionary - Productive 3.7 10.4 6.8 18.1 11.4
Unpaid work 4.6 5.9 1.4 10.3 2.3
Discretionary - Family 0.0 0.6 0.6 1.0 1.0
Discretionary - Social 0.0 0.2 0.2 0.4 0.4
Personal 6.7 6.8 0.0 11.8 0.1
Discretionary - Play 1.7 1.4 -0.3 2.5 -0.5
Sleep 35.1 34.7 -0.4 60.2 -0.6
A- 43.5 39.5 -3.9 68.6 -6.6
Business 4.8 0.3 -4.5 0.5 -7.5
View or add comments

Monthly review: September 2021

| monthly, review
  • Lots of little improvements to the house. Switched to a round table. Sewed wedge-shaped placemats.
  • A- started virtual senior kindergarten.
  • A- had to deal with some stomach pain.
  • A- wanted to waltz. We watched a few waltzes, learned how to do the box step, and then had fun doing some regular two-steps.
  • A- was curious about gymnastics.
  • A- wanted to buy a newspaper.

Blog posts


Category Previous month % This month % Diff % h/wk Diff h/wk
A- 41.2 43.5 2.2 70.7 3.7
Sleep 33.6 35.1 1.4 57.0 2.4
Business 3.9 4.8 0.9 7.8 1.5
Discretionary - Play 1.1 1.7 0.7 2.8 1.1
Personal 7.0 6.7 -0.2 10.9 -0.4
Discretionary - Family 1.1 0.0 -1.1 0.0 -1.8
Unpaid work 6.4 4.6 -1.8 7.4 -3.1
Discretionary - Productive 5.7 3.7 -2.0 6.0 -3.4
View or add comments

Monthly review: August 2021

| monthly, review
  • I wrote a few 11ty shortcodes and Emacs commands to make sketches easier to embed into my blog posts.
  • W- finished hanging up the cabinets in the kitchen. It'll be nice to have more storage!
  • We picked lots of cherry tomatoes and jalapeno peppers from the garden.
  • The Brickloot balls arrived, so we opened a bag and started using them in our LEGO Great Ball Contraptions. I learned how to use the 9V motors, so we were able to rig up the sloped stepper, the pinwheel, the ball pump, the S-capades, and the crane module in a loop.
  • A- was able to tap the badminton shuttles 43 times in a row, starting with 7 shuttles. I was able to bounce my shuttle up in the air 20 times in a row.

Blog posts


  • [[2021-08-05 Purrmaid %23art-hub.jpg][2021-08-05 Purrmaid #art-hub.jpg]]
  • [[2021-08-05 Skeleton surprise.jpg][2021-08-05 Skeleton surprise.jpg]]
  • [[2021-08-09 37 to 38 %23yearly %23review.jpg][2021-08-09 37 to 38 #yearly #review.jpg]]
  • [[2021-08-17a Mama, I want to play with you %23parenting %23challenge %23play.jpg][2021-08-17a Mama, I want to play with you #parenting #challenge #play.jpg]]
  • [[2021-08-18a What do I want to learn %23planning %23learning.jpg][2021-08-18a What do I want to learn #planning #learning.jpg]]
  • [[2021-08-19 Brush lettering - A a %23lettering.jpg][2021-08-19 Brush lettering - A a #lettering.jpg]]
  • [[2021-08-19a Playing with lettering %23lettering %23sketchnoting %23drawing.jpg][2021-08-19a Playing with lettering #lettering #sketchnoting #drawing.jpg]]
  • [[2021-08-19b Menu of activities %23parenting %23play .jpg][2021-08-19b Menu of activities #parenting #play .jpg]]


Category Previous month % This month % Diff % h/wk Diff h/wk
A- 39.3 41.2 1.9 69.3 3.2
Discretionary - Productive 4.6 5.7 1.2 9.6 1.9
Discretionary - Family 0.5 1.1 0.6 1.8 1.0
Business 3.5 3.9 0.5 6.6 0.8
Discretionary - Play 0.6 1.1 0.5 1.8 0.8
Personal 7.1 7.0 -0.1 11.7 -0.2
Unpaid work 8.3 6.4 -1.9 10.7 -3.2
Sleep 36.1 33.6 -2.5 56.5 -4.2
View or add comments

2021-12-06 Emacs news

| emacs, emacs-news

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Hacker News, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, emacs-devel, and lemmy/c/emacs.

View or add comments