Categories: review

RSS - Atom - Subscribe via email

Wednesday weblog: Week ending 2024-11-06

| review, weblog, weekly

I used to write weekly reviews. Nudged by Doing weeknotes, I want to get back to doing them. I'm still figuring out how I'd like to put these notes together as part of a weekly review process picking up some stuff from my blog posts, toots, Org inbox, and journal entries. That way, I can revisit fleeting notes and flesh them out a little more, notice and celebrate progress, and radiate intent.

Do I want to leave it on Wednesdays (chosen for its alliteration with weblog, with no particular deep thought about it) or go back to Fridays like before? Wednesdays might be a good idea, actually, since I might still be able to schedule some tasks for Thursday and Friday.

Anyway, over the last seven days:

  • EmacsConf:
    • Improved the Makefile we use in EmacsConf so that it detects the prefixes from the original files in the directory and builds various intermediate files (reencoded.webm, opus, vtt, normalized opus, main.webm).
    • While the kiddo was at an extracurricular activity, I listened to talks for the upcoming EmacsConf and annotated transcript PDFs so that I can edit the captions later. It was very enjoyable and something I could do with gloves on, which was great because the weather's getting pretty cool. I'm looking forward to using pdf view to flip through the exported annotations in Emacs. Yay! (toot)
    • Processed lots of talks and captions.
    • Wrote some code to skim the starts of subtitles to check the timing.
    • Got Icecast, OBS, and Emacs set up for the upcoming conference, and I disabled screenlock in our i3 config.
    • Still haven't been able to fix bbb.emacsverse.org. I've asked Corwin to look into Galene. I think meet.jit.si might not be solid enough for us (potentially throttling issues like several years ago).
  • Other Emacs stuff:
    • Wrote a function for storing a link to a blog post from the Org subtree for it. (my-org-store-blog-post-link in Linking to blog posts).
    • Experimented with moving lines around for fixing the text conversion of sketches, but I think it feels like more work than just retyping.
    • Figured out that I needed to set :comments no on the Org source block that had ;; lexical-binding: t on it. (toot)
    • Used org-html-htmlize-generate-css to export CSS from Modus Vivendi to use as my dark-mode colours
  • Other tech:
  • Life:
    • Read Tiny Habits and made sketchnotes. I also listened to a podcast on The Feel-Good Method of Productivity, which touched on some of the same points about joy and celebration. (toot)
    • A thought as things become more tangled: Here are some of the things I am working on learning as I grow up: how to navigate uncertainty with curiosity, how to use conflicts to figure out priorities, how to face regrets with acceptance, and how to transform grief into an even fiercer love.
    • Parent-teacher interview and progress report: A+ is doing well. No exemption from synchronous learning this year. Oh well. We'll just have to figure out how to work with the system for now, or decide when it's not working well enough for A+.

Links

View org source for this post

Wednesday weblog: Toots ending 2024-11-06

| review, roundup
  • embark-org-insert-link-to - 2024-11-02T15:49:09.420Z

    Ooh, it looks like `consult-org-heading` already lets me use embark-act with the shortcut `j` to call `embark-org-insert-link-to`. It doesn't feel like a "j" shortcut, though, so I'll just bind it to `L` for "link" instead: `(keymap-set embark-org-heading-map "L" #'embark-org-insert-link-to)`

  • EmacsConf progress: intros - 2024-11-01T18:32:21.973Z

    #emacsconf progress: I've recorded intros for all the talks so that speakers can review them, and some of the talk videos have started coming in. I'll ask the speakers for feedback after the video upload target date. Still slightly stressed about the prospect of replacing or re-setting-up BigBlueButton; corwin has taken over the stressing out about it at the moment.

  • Planet Emacslife CSS tweaks - 2024-11-01T13:14:52.582Z

    More tweaks to https://planet.emacslife.com: now using flex layout, so it should be a bit more responsive to screen size; sticky headers on large screens so that you can see which post it is when you scroll down. Does it make sense to do sticky headers on small screens? I don't want long titles taking up too much screen space on phones…

  • Emacs commits in Planet Emacslife? - 2024-11-01T11:14:53.651Z

    How do people feel about automatically including #Emacs commits affecting etc/NEWS and Org Mode's ORG-NEWS in https://planet.emacslife.com ? Handy for staying up to date? Too much, since it's easy to subscribe separately?

  • Thinking about navigating a large archive - 2024-10-30T14:48:16.127Z

    I use the 11ty static site generator to publish my blog as plain HTML pages. I have a lot of posts in some categories, like Emacs. I want to generate some of the pages for easier browsing, but I'm not sure it makes sense to generate all of them. Right now I generate 5 pages of posts and then a page that links to all of them. (Ex: https://sachachua.com/blog/category/emacs). It occurred to me that it might not be obvious that there are more than 5 pages of posts (since we're more used to dynamic systems that paginate as much as needed). I wonder how I can make that clearer - oh, maybe I can add the number of posts.

    There's probably stuff I can do to make the All Posts easier to explore, too. I've started making topic pages. I'm also curious about implementing the stacked-cards navigation you see in digital gardens like https://notes.andymatuschak.org/ .

    Ideas? Pointers to other statically generated blogs with large categories who've figured some of this out?

  • Living in the shallows - 2024-10-30T00:24:48.668Z

    Juxtaposing "The Shallows: What the Internet Is Doing to Our Brains" (Nicholas Carr), "Deep Work" (Cal Newport), and "Four Thousand Weeks: Time Management for Mortals" (Oliver Burkeman), I find myself leaning more towards Burkeman's acceptance of limits and lack of control. I'd rather figure out how to embrace these shallows than to write off large portions of my life: parenting a young child with all the attendant interruptions (which I am learning to welcome) and preparing for eventual old age.

    One of the things I've learned while doing Emacs News is that even things I can do in the shallows can be useful. Organizing information and passing it along does not require deep reflection or a quiet mind.

    I can read in short bursts here and there, take notes, and share them.

    Most of my Emacs tweaks are short, but they accumulate.

    Now I am learning to write small thoughts. They are not amazing insights, but they are enough for me, and sometimes they resonate with other people.

    Besides, even when I had full autonomy during my experiment with semi-retirement, it's not like I did amazingly deep stuff either. So that's all cool and I don't have to kid myself or feel like I'm missing out. Instead, I can enjoy this time in the shallows, when doing the dishes or tidying up is pretty much on the same level as many other things on my list of things I could do (probably more useful than most things, even). I can let myself be interruptible, and I can play with the fragments of my attention.

    Follow-up post: Embracing the shallows

  • The Imagination Muscle - 2024-11-02T21:22:36.486Z

    AoM podcast on The Imagination Muscle:

    My notes:

    • Observation is the start of imagination.
    • Commonplace book, sketches
    • Observational closure
    • Reading many books at the same time, connecting commonplace books - this makes me think of dancer curiosity
    • History of coffee shops in London, clusters

    I wonder how I can use sketches and/or microblog posts and my Org files as commonplace books…

  • Doodling in blog posts - 2024-11-04T21:17:03.208Z

    I had fun breaking up the monotony of text with doodles: https://sachachua.com/blog/2024/11/a-year-with-my-cargo-bike/ Also, yay #biking!

View org source for this post

A year with my cargo bike

| decision, life

Summary: Life with a cargo bike has been working out really well for our family.

Stroller

I used to walk for an hour to get to some of A+'s playdates, pushing her in the Thule bike trailer / stroller that she still fit into. I liked bringing popsicles during the summer so that A+ could share them with her friends, so I often balanced a small cooler on top of the stroller and walked as briskly as I could. The popsicles were usually still reasonably cold by the time I got to the park. We'd spend a few hours playing there, and then there would be another hour's walk back. A+ usually napped on the way, so it was a chance for me to listen to podcasts.

Car

Sometimes we biked to the playdate instead. That was much faster in terms of getting there, even with a popsicle break halfway through. Those popsicles were only for us, since I couldn't bring a cooler on my bike. Also, A+ was usually too tired to bike back, or it was too dark for her to be safe biking on the busy streets between the park and our house, so we often waited in the mall parking lot for W- to pick up A+ and her bike in his car. Then I biked back by myself.

Dumped

We'd been considering cargo bikes for a while, and eventually things lined up to make it possible. It was a carefully-considered decision. I did a bunch of test rides using different models of cargo bikes. My height (or lack of it) ruled out many of the models designed for taller people. A+ was quite vocal about her preference for the suspension on the R&M Load cargo bikes, and she liked the view from the front-loaders more than the longtails. I rented the Load 75 and the Load 60 to try them out, accidentally tipping over onto the side an embarrassing number of times; A+ was safely buckled in but very grumpy about it.

When we confirmed that a cargo bike fit into our life, I bought a Riese & Müller Load 75 from Curbside Cycle. We picked the Load 75 over the Load 60 because the rain cover was nicer and the extra room could give us more years of use as A+ grows.

Loaded up

I love it. Biking is my favourite way to get around. There's just something so cheerful about it. A+ and I sing as we go around town. We smile at dogs in sweaters. She takes pictures of trees. Sometimes there are cargo bikes in front of us as we wait at the traffic light, and we wave and nod.

We got the Bakkie bag, too. It's designed to tow a kid's bike. That way, A+ can bike wherever she wants. When she gets tired, she can hop into the cargo bike and I can buckle her bike into the Bakkie bag, towing it all the way home. We've been able to go on more bike adventures by ourselves and together with W- because we don't have to worry about exceeding A+'s range.

Hot chocolate

Since we could get to the playground in 15 minutes instead of 60, it was a lot easier to bring snacks to share. We pretty much kept the playground kids well-supplied with free popsicles (and the occasional much-coveted ice cream treat) all summer, and the ice packs came in handy for treating the occasional bumps too. We even brought disposable cups and insulated bottles of hot water for making hot chocolate and instant apple cider in the colder months.

Potting mix

Aside from taking A+ to a wider range of places, we've also used it to bring several bags of potting mix or a propane tank home from the hardware store, carry other bulky items, and take lots of stuff to the community environment days for recycling/donation.

We are very lucky to have cargo biking as an option. When people ask me how much it is, I ruefully tell them, "Well, it's less than a second car." We weren't actually choosing between this and a second car; even though W- rarely uses his car these days, I'm too anxious to drive. My brain gets a little squirrelly and is prone to attentional hiccups. I don't want a moment of distraction to result in someone's death or serious injury. I'm still on alert when I bike, but it feels a lot more like something I can handle. And biking is so fast and convenient. I don't have to nudge A+ out of a playdate so that we can make it out before the subway gets packed like sardines, or shepherd A+ back home from the subway station ("I'm tiiiired.").

I got the bike in November 2023. Here's how much I biked over the past year:

Month KM
Nov 208
Dec 157
Jan 69
Feb 78
Mar 176
Apr 82
May 106
Jun 143
Jul 135
Aug 96
Sep 212
Oct 120
2024-11-04T14:04:00.159647 image/svg+xml Matplotlib v3.6.3, https://matplotlib.org/
Figure 1: Graph of kilometres by month

I was pleasantly surprised that even during the cold months (and A+'s reluctance to go outside if it was very cold or slushy), and even during the schoolweek, we still managed to get out on the bike.

2024-11-04T13:43:31.432403 image/svg+xml Matplotlib v3.6.3, https://matplotlib.org/
Figure 2: Kilometres by date

I got data from the ebike-connect site using Spookfox using the code below.

Javascript code for extracting distances and times
[...document.querySelectorAll('.activities__ride-menu')].map((o) => {
  return {
    date: o.querySelector('.activities__menu-details > span').textContent,
    distance: o.querySelector('.activities__menu-distance-text').textContent.trim(),
    time: o.querySelector('.activities__menu-details > span:nth-child(2) > span:nth-child(2)').textContent,
  }
});
Emacs Lisp to group distance by month
(let ((by-month (seq-group-by
  (lambda (row)
    (let ((date (plist-get row :date)))
      (when (string-match "[0-9][0-9]\\.\\([0-9][0-9]\\)\\.\\([0-9][0-9]\\) [0-9][0-9]:[0-9][0-9]"
                          date)
        (format "20%s-%s-01"
                (match-string 2 date)
                (match-string 1 date)))))
  trips)))
  (append
   '(("Month" "Distance")
     hline)
   (mapcar
    (lambda (row)
      (list (format-time-string "%b" (date-to-time (car row)))
            (format
             "%d"
             (round (apply '+
                           (mapcar (lambda (entry) (string-to-number (plist-get entry :distance)))
                                   (cdr row)))))))
    (reverse (seq-filter (lambda (o) (string< (car o) "2024-11")) by-month)))))
Emacs Lisp to group distance by date
(let ((by-day (seq-group-by
  (lambda (row)
    (let ((date (plist-get row :date)))
      (when (string-match "\\([0-9][0-9]\\)\\.\\([0-9][0-9]\\)\\.\\([0-9][0-9]\\) [0-9][0-9]:[0-9][0-9]"
                          date)
        (format "20%s-%s-%s"
                (match-string 3 date)
                (match-string 2 date)
                (match-string 1 date)))))
  trips)))
  (json-encode (mapcar
   (lambda (row)
     (cons (car row)
           (format
            "%d"
            (round (apply '+
                          (mapcar (lambda (entry) (string-to-number (plist-get entry :distance)))
                                  (cdr row)))))))
   (reverse (seq-filter (lambda (o) (string< (car o) "2024-11")) by-day)))))
Python code for making a bar graph of distance by month
import pandas as pd
import datetime
import matplotlib.pyplot as plt
import seaborn as sns
import json

data = trips
df = pd.DataFrame(data, columns=["Month", "Distance"])
df.set_index('Month')
df['Distance'] = df['Distance'].astype(float)
plt.figure(figsize=(8, 6), dpi=100)
sns.barplot(data=df, y='Distance', x='Month')
plt.savefig('biking-distance-by-month.svg')
Python code for making a heatmap
import pandas as pd
import datetime
import matplotlib.pyplot as plt
import seaborn as sns
import json

start_date = datetime.datetime(2023, 11, 1)
end_date = datetime.datetime(2024, 11, 1)
dates = pd.date_range(start=start_date, end=end_date, freq='D')
data = json.loads(trips)
df = pd.DataFrame.from_dict(data, orient='index')
df.index = pd.to_datetime(df.index)
df[0] = df[0].astype(float)
# Create calendar heatmap
plt.figure(figsize=(16, 3), dpi=100)
pivoted = df.pivot_table(index=df.index.day_name(), columns=df.index.strftime('%Y-%W'))
all_days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
pivoted.index = pd.Categorical(pivoted.index, all_days, ordered=True)
pivoted = pivoted.sort_index()
heatmap = sns.heatmap(
    pivoted,
    cmap="crest",
    linewidths=0.5,
    linecolor='white'
)

# Set the x-axis tick labels to show only the months
month_labels = df.index.strftime('%b').unique()
month_ticks = [i * 4 for i in range(len(month_labels))]
plt.xticks(
    month_ticks,
    month_labels,
    rotation=90
)
tick_positions = [i + 0.5 for i in range(len(all_days))]
plt.yticks(tick_positions, all_days)
plt.title('Distance on dates')
plt.xlabel('November 2023 - November 2024')
plt.ylabel('')
plt.xticks(rotation=90)
plt.savefig('biking-by-day.svg')

I like our cargo bike a lot. I hope to ride it for many years to come.

View org source for this post

Wednesday weblog: Toots ending 2024-10-23

| review, weblog
View org source for this post

Wednesday weblog: Toots ending 2024-10-16: EmacsConf, Emacs, PKM

| review, weblog
  • Personal knowledge management
    • thought management - 2024-10-13T21:24:39.185Z

      I think I don't have a task management or even a knowledge management challenge, I have a thought management challenge. I want to think more thoughts through to a reasonable level of completion (blog post, commit, sketch, even a toot) while still honouring the kiddo's desire for snuggles and playtime. My brain gets cranky about unfinished thoughts because of the Ovsiankina effect[1]. Sometimes I can get away with just adding a note to myself, and sometimes I end up telling the kiddo, "Let me just finish this thought..." My brain also gets cranky if I don't get time to focus on my own stuff, so it's a bit of a balance.

      I like sketchnotes[2] because I can use non-computer time to think nonlinearly and make a thing I can refer to, a chunk I can use to build up other thoughts. I'm working on getting used to even smaller chunks so I can feel like a thought is complete without needing to fill up the page.[3]

      Audio braindumps[4] let me explore thoughts, which is nice. WhisperX gets me reasonable transcripts. The transcripts are unfinished chunks, though, so they often go back into my inbox and feel like an open loop[5]. I'm experimenting with LLMs to help me neaten them up, but I haven't figured out a prompt that I'm happy with yet.

      So here I am: picking up a thought, putting it down, picking it up, putting it down, capturing a bunch of other thoughts that come up along the way. It'll do for now. This is a temporary phase. Just gotta keep sane!

      - [1] Ovsiankina effect https://en.wikipedia.org/wiki/Ovsiankina_effect
      - [2] sketchnotes https://sketches.sachachua.com
      - [3] cropping https://sachachua.com/blog/2024/09/org-attaching-the-latest-image-from-my-supernote-via-browse-and-access/
      - [4] audio braindumps https://sachachua.com/blog/2023/12/audio-braindump-workflow-tweaks-adding-org-mode-hyperlinks-to-recordings-based-on-keywords/
      - [5] open loops https://gettingthingsdone.com/2011/10/gtd-best-practices-collect-part-1-of-5/

      (... Hmm, does my brain like inline links or footnotes when it comes to stuff like this? What does your brain like? I think inline links might be slightly easier when it comes to grabbing segments and using them in other chunks like a blog post, but it might be worth trying different ways.)

    • my personal knowledge management workflow - 2024-10-13T03:35:27.740Z

      I have an inbox via Orgzly Revived (thanks, GTD). On good days, I distinguish between TODO and SOMEDAY; other times, everything starts off as SOMEDAY. I try to have very few commitments or deadlines. I tag some tasks with keywords (consulting, emacsconf, writing, need) to make them easy to refile automatically so that I can see what's left. I don't really worry about tagging by context (computer, errands, phone) because I still don't have enough focused time to batch things. (Sorry, GTD.) My main Org file is roughly organized along the lines of PARA - projects, areas of responsibility/interest, resources, archive. I have yyyy-mm-dd-nn IDs for my sketches and journal entries (thanks, Zettelkasten) and some support for linking between things, but I haven't gotten around to implementing backlinks or spending more time linking concepts.

      I move ideas between sketches and audio braindumps and outlines and notes and toots and blog posts depending on what I can use at the time. Some of them even get turned into audio recordings and videos. Other times, I refile things to rough locations in other parts of my outline; maybe someday I'll get to use them. I tend to use org-refile or ripgrep or Google to try to find things again.

      I'm usually skewed by recency/availability bias, focusing on stuff in my note inbox or scheduled tasks. Sometimes I pick a project and focus on it. I use Org Mode's clocking and capture features to help me manage interruptions from life, other ideas, or other tasks.

      It's a mish-mash of #PIM approaches, nothing particularly elegant or sophisticated, but it helps me get by and I'm looking forward to tweaking it further.

    • evolution of my personal information/knowledge management systems - 2024-10-13T03:00:21.459Z

      I started thinking about the evolution of my personal information management systems from 2001 to now. Rough timeline:

      - 2001: university: assignments, class notes, projects; Planner Mode in Emacs (daily tasks/notes, category notes, blog with RSS feed)
      - 2003: teaching: lesson plans, notes; Planner Mode
      - 2004: internship in Japan: language learning; Planner Mode, flashcard.el
      - 2005: master's degree: research, class notes, finances; Planner Mode, Ledger
      - 2007: sketchnotes, working at IBM: internal vs. external notes, publishing to internal blog, moving my public blog to WordPress; Org Mode, org2blog, WordPress
      - 2012: self-directed learning - what do I want to spend my time and energy on?; time tracker
      - 2015: Emacs News; categorizing Org Mode list items
      - 2016: parenting - sleep deprivation, interruptions, limited computer time; MobileOrg
      - 2017: web-based journal so that I can easily update it when traveling without my computer
      - 2018: switched from MobileOrg to Orgzly
      - 2019: EmacsConf; Org Mode for scheduling and automation
      - 2021: switched from WordPress to the Eleventy static site generator to reduce security things to worry about
      - 2023: SuperNote A5X - easier black/white/gray sketches
      - 2024: starting to have more predictable focus time, can revisit my Org Mode notes and projecrs; WhisperX for audio braindumps

  • EmacsConf
    • Started processing videos for EmacsConf - 2024-10-14T23:03:02.187Z

      It took a bit of figuring out, but I managed to spin up our #emacsconf video processing pipeline and got the first uploaded video through the process and into our backstage area, complete with edited captions. I experimented with using the word-level timestamps from WhisperX, but merging them was a little tedious. I might go back to using the text output and then using either Aeneas to align or splitting based on the word data from the WhisperX JSON. Could try finding some other subtitle segmentation thing - maybe give lachesis another try, or check out recent research, or just go with something based on length+punctuation+gap...

    • Got stuck with Etherpad 2.x, staying with 1.9.7 for now - 2024-10-14T16:11:27.704Z

      Got stuck trying to figure out how to install Etherpad 2.x, so I'm going to leave Etherpad at 1.9.7 for #EmacsConf until I have more brainspace.

  • Emacs
  • Other
    • small ideas - 2024-10-13T15:18:05.139Z

      I was thinking about my visual book notes [1] , my stack of unread books from the library, and my general feeling of time scarcity that makes it difficult for me to sit down with a book (or even a video). I think for this phase of my life, I'd rather reflect on people's personal blog posts and toots about what they're learning, and that's okay. Small (manageable, hold-in-your-head-able) ideas can be much easier to deal with than something that's trying to be a big enough idea to justify the costs of physical book distribution.

      [1] https://sachachua.com/blog/category/visual-book-notes/

View org source for this post

Wednesday weblog: Toots ending 2024-10-09

| review, weblog

Here's what I've been posting on @sacha@social.sachachua.com:

View org source for this post

Wednesday weblog: Toots ending 2024-10-02

| review, weblog
Tech
  • Server upgrade 2024-10-01T19:34:35.535Z

    Okay, my VPS should now be on Ubuntu 24.04 LTS. Things I bumped into along the way:
    - Had to reinstall MySQL for some reason. Fortunately kept all the data, although I did need to recreate directories for logs and sockets.
    - Reinstalled my Docker images. Fortunately kept all the data on disk, so that was fine. Along the way, upgraded my mongo DB from 4.2 to 4.4 to 5 to 6 to 7.
    - Panicked when gotosocial was taking a while to start up, interrupted it and tried again, ended up with a partially-migrated database and worse problems. Fortunately had a backup of the db, so I restored and patiently waited.

  • Eleventy upgrade 2024-09-30T17:35:26.858Z

    I managed to get my blog upgraded from Eleventy 2 to Eleventy 3.0.0-alpha.20. find-dired and wdired were useful for finding all the .js files and turning them into .cjs.

  • Supernote colour template 2024-09-27T03:05:15.033Z

    I finally got around to checking if the #Supernote can handle colour templates despite only letting me draw in black, white, and two shades of gray. It keeps the colour in the export! That means I can make a template that uses a specific color to make a grid, which is then easy to strip out of it with Python. That saves me 3-6 taps and reduces friction even further. Looking forward to experimenting with that at the next opportunity.

  • Blog tweaks and other code - 2024-09-26T17:02:17.804Z

    A couple of little tweaks:

    - I re-added a "Random" link to my blog header, nudged by https://news.ycombinator.com/item?id=41647654
    - I added a sitemap.xml , so let's see if search engines pick stuff up
    - I wrote some code to move Org properties from a subtree to a parent
    - I changed my code for inserting the latest file from my Supernote A5X e-ink device into Org Mode to also recolor, recognize text, rename, and archive the file

  • Setting up hibernate 2024-09-26T00:08:50.365Z

    I followed the directions at https://ubuntuhandbook.org/index.php/2021/08/enable-hibernate-ubuntu-21-10/ to set up a swap partition and enable hibernate. Now I can pause whatever I'm doing in Linux in order to switch to Windows to play Minecraft Bedrock with the kiddo, and then switch back to Linux afterwards.

Life
View org source for this post