2025-09-08 Emacs news

| emacs, emacs-news

There was lots of conversation around Why Rewriting Emacs Is Hard this week, with threads on Reddit, HN, and lobste.rs. Also, if you want to present at EmacsConf 2025 (great way to meet like-minded folks), please send your proposal in by next Friday (Sept 19). Thanks!

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Mastodon #emacs, Bluesky #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

View org source for this post

Considering these monthly emoji summaries

| writing, visualization

In February, I started adding emojis to my monthly summaries. I added emojis to the lines for the text versions of my monthly sketches, then used a little bit of Emacs Lisp to convert that into HTML code with the text as a tooltip. I wondered what it might be like to represent a lot of days very densely. Would the constrained vocabulary of emojis be enough to give me a sense of the time, combined with the ability to hover over the emojis to see the keywords I wrote for that day?

Feb: 👀💃🖼️🤖🐕📱📱🛷📸🎨🏢🛷🎤☃️❄️🍪🚲📝🧁🧁⛸️❄️🌀⛸️📈🤖🔍 Mar: 🔥🎵🥧🍎✏️⛸️📰😴⏲️🍕🖨️🏝️🎮📚🎵🎮🐒🦷👥🧁🏺💭📺🐟🚲🧁🥾🌧️📝🛒 Apr: 🎭🚲👕🤔🌱🎮🩹🏘️🪓🔥🌱🔧🎭🐠✍️🥚🌱🖩🚲🐒🫧🩹☀️🎮🛴🚲🍨📚 May: 🌧️🎨📰🚴🌼🐱🐸📰🦷🧵🚂🔥🐕🐒🏰🔥💡👗♻️🎮🌧️🎣🎪🏺💻🍦🎢🍓🛝🧵 June: 🖼️💦🪴🪡🪡🙃🍦🚲🪡🍪😴🍦🚲🥔👴👰🍓🌧️🦕🌡🥧😷🌡🍓🎵🪡🏊🏺🐸🪡 July: 🎇🏊🥖🎮🏊🎮🏖️🦈🛍️🗘🧺🏊🂡🏊🏊🏊🪄🤖⚔️👕🥣🤖🚴🏊🏊😃🏺🥣🎨🫐🚴 Aug: 🌻🛍️🐠🌊🎮💦🚴🦕🛒⛏️👓🎂🌹🏠🌻🎩🤸🏺🖍️🗄️🏺🎨😷🎂👧🎡🎨⛏️🎹🦁⛏️

Not bad. I can see the campfire and s'mores days (🔥), the time we were sick (🌡️), the shift from skating and sledding to biking and swimming, the days when I focused on sewing. In contrast, here are the monthly calendar sketches:

Hmm. I'm primarily interested in episodic memory retrieval and pattern recognition. The emoji summaries might be better at showing repetition because of the constrained vocabulary and the density is neat, but they're not quite expressive enough to resonate with me. I don't like hovering to see the tooltip, but by itself, the emoji doesn't usually have enough information to trigger my memory (either on its own or as part of the episodic context). Emojis and text also open up the possibility of an "on this day" slice, but I can get that with the plain text or by adding an on-this-day.rss to my web-based journal viewer with maybe some kind of private feed in our local network.

The sketches are more fun to flip through, especially now that I'm adding more colour to them. I can show repetition through background colour or icons in my monthly sketches. If I click on these images in my blog post or in my public sketchbook (ex: monthly sketches) using either my laptop or my tablet, I can page through them quickly, like the idea of rapid serial visual presentation 1. (This is great! Now I'm tempted to figure out how to disable all animations for BiggerPicture for just that bit of extra speed, which I think is a matter of tinkering with mediaTransition…) I wonder what it would take to have an automatic "on this day" slice for my monthly calendar sketches. Maybe if I was stricter about using a template so that I can automatically extract boxes from it, or maybe if I can use recognized numbers to figure out the layout… Definitely a someday thing, but could be an interesting challenge.

Do I want to do these emoji summaries long-term? Someone summarized 5 years of diary entries as emojis, and of course there's an app to do this too. Even on a larger scale, though, I think I might just get a few "huh, how about that" moments out of it rather than "wow, that's amazing." I think that if I continue with my daily sketches, that's probably more fun for me to make and review, and it still contains enough information to allow me to map the days to emojis later on if I want to. I can probably discontinue this emoji experiment. I'm glad I explored it, though.

In case you're curious about the Emacs Lisp code for extracting the emoji summaries, here's the function. It looks for the top-level blog post, scans for lines matching "dayNum. (emoji) text summary of day", and then turns that into the appropriate span, including links if there are any.

(defun my-org-emoji-summary (&optional label)
  (let (results)
    (save-excursion
      (goto-char (org-find-property "EXPORT_ELEVENTY_PERMALINK" (org-entry-get-with-inheritance "EXPORT_ELEVENTY_PERMALINK")))
      (let ((end (save-excursion (org-end-of-subtree))))
        (while (re-search-forward "^\\([0-9]+\\)\\. \\([^A-Za-z0-9]+\\) \\(.+?\\)\\(- weekly highlight\\)?\n" end t)
          (let ((day (match-string 1))
                (icon (match-string 2))
                (text (match-string 3)))
            (push
             (if (string-match org-link-bracket-re text)
                 (format "<a href=\"%s\" title=\"%s - %s\">%s</a>"
                         (match-string 1 text)
                         (match-string 2 text)
                         day
                         icon)
               (format "<span title=\"%s - %s\">%s</span>"
                       text
                       day
                       icon))
             results)))))
    (format "<div class=\"emoji-summary\">%s%s</div>"
            (if label (concat label ": ") "")
            (string-join (nreverse results) ""))))

Footnotes

1

Bruijn, Oscar & Spence, Robert. (2000). Rapid Serial Visual Presentation: A space-timed trade-off in information presentation. 189-192. 10.1145/345513.345309. PDF accessed 2025-09-05.

View org source for this post

Monthly review: August 2025

| monthly, review
August 2025: 🌻🛍️🐠🌊🎮💦🚴🦕🛒⛏️👓🎂🌹🏠🌻🎩🤸🏺🖍️🗄️🏺🎨😷🎂👧🎡🎨⛏️🎹🦁⛏️

Text from sketch

August 2025 2025-08-31-13 summer camp experiment, lots of adventures

  1. 🌻 dolls, flowers
  2. 🛍️ shopping
  3. 🐠 aquarium
  4. 🌊 damming water
  5. 🎮 played Stardew at home
  6. 💦 water at the splash pad
  7. 🚴 bike adventure - A+ rode 13km
  8. 🦕 ROM, phone moisture
  9. 🛒 KidSpark: "I would like to buy a papaya"
  10. ⛏️ Create Hypertubes
  11. 👓 A+: -5.00 prescription
  12. 🎂 birthday, Wicked LEGO
  13. 🌹 origami rose
  14. 🏠 playdate at C-'s house
  15. 🌻 playdate at our house: Duplo, flower
  16. 🎩 magic show
  17. 🤸 handstands
  18. 🏺 pottery wheel summer camp
  19. 🖍️ colouring
  20. 🗄️ opening cabinet
  21. 🏺 trimming
  22. 🎨 marbling
  23. 😷 mask discussion
  24. 🎂 Gong-gong's birthday
  25. 👧 Science Centre at Sherway
  26. 🎡 CNE (still fun)
  27. 🎨 KidSpark Pictionary
  28. ⛏️ Minecraft Experience
  29. 🎹 A+ and piano
  30. 🦁 Walk with W- and A+, Lion Dance
  31. ⛏️ Minecraft with cousins, catching up on blog carnivals

(I added more colours thanks to writing my IndieWeb Carnival blog post about colours and my thoughts on daily sketches. Progress!)

Like I predicted last month, my days were mostly focused on A+. She enjoyed the half-day pottery wheel summer camp that we experimented with, where she got to practise trimming her pottery and glazing the pieces with a marbled pattern. Aside from the pottery camp, our days were wide open. A+ took the initiative in suggesting places to go, although sometimes I let her know about events or experiences. We went on plenty of adventures.

We went to the temporary Ontario Science Centre pop-ups at Harbourfront and Sherway Gardens. It was fun coming up with more and more things to do at the OSC KidSpark pop-up. We liked pretending to be different Star Wars characters working as supermarket cashiers. We made up a game where I'd tell her "I want to buy a papaya" while holding up something different, like a pineapple. She'd correct me and tell me what to look for ("something a little pointy at both ends"), and I'd go off and find something that matched that description while still being incorrect (like a lemon). We also played another game that involved drawing the items for the grocery list and having the other person figure out what they were. We enjoyed checking out the sensory backpacks, too. (Nice fidget toys!) At the Sherway Gardens pop-up, A+ mostly enjoyed going through the adventure zone and playing with the foam building blocks.

At the CNE, we got caught in a bit of a downpour, but fortunately I had an umbrella and we were wearing Crocs. A+ enjoyed the farm building, and we checked out the kiddie midway after the rain. A+ liked the spinning rides and the Ferris wheel. She also did a good job of resisting temptations. (Games! Snacks! More rides! More! More!) Thank goodness for math.

We enjoyed petting pretend chickens and throwing snowballs at blazes at the Minecraft Experience. I had fun musing about the tech behind the scenes. We made it out to Biidaasige Park a couple of times, playing with the little dams and the snowy owl stage. We went to the ROM and tried their learning worksheet. A+ biked for an hour to get there one time. We went to the Dragon Festival to watch the lion dance. Some afternoons, we did a bit of swimming, but not much as the weather was starting to cool down.

We also caught a magic show at the library. A+ is now familiar enough with lots of science demonstrations that she can figure out many of the tricks in kid-oriented magic shows, but she's good at not spoiling it for others. I think she might sometimes get a little frustrated by the urge to demonstrate what she can handle so that people can skip ahead to more interesting stuff, which works fine in one-on-one interactions but is harder in a group class. (I remember this feeling! Even now, I'm still figuring out how to drop little signals into a conversation so that people who recognize them can code-switch to higher bandwidth, while trying to avoid overwhelming people…) Maybe this growing awareness of others coupled with the ability to quietly enjoy something more complex inside her head will help her with that.

We spent time with family, and A+ enjoyed playing with her relatives. We had lots of playdates with friends, too.

Indoors, we've been having fun going through the unit lessons in the LEGO Spike Prime kit. At first, A+ just wanted to deliver parts to me. Then she took over some of the coding, and now I've been assigned to the parts department while she builds. "It's not your set anymore, it's our set," she says. Mwahahaha! My evil plan is working.

Looking at what we've enjoyed this summer, I can see that she really likes the things that give us new ways to play with each other, like KidSpark or LEGO Spike Prime. Next would be the places that give her new things to explore even on her own, like Biidaasige's water play features, the pottery camp's lessons, or the CNE's rides. As for me, I appreciate that we can spend on classes where she can take advantage of someone's expertise or specialized equipment, and I wonder what else she might want to explore. A+'s getting more adept at considering a wider palette of places we can go or things we can do, and index cards and sketches help with that. I wonder what else Toronto has along those lines. In terms of play, A+'s drawn to mimicry more than competition, chance, or strong emotion.1 I can see that not just in her role-playing, but also in the way she enters into our activities. I think that's my form of play, too. I like to share her interests, and even with the things I do in the Emacs community, I like to mimic and build on ideas.

Speaking of things I can strew in front of her to encourage mimicry… She occasionally flips through my Noteful notebooks, so it might be interesting to sneak some pedagogical documentation in there, laying out her growth in pictures and sketches so that it's easy for her to comprehend, and maybe sketching out some ideas for things to explore. This can help her see things over time, and it might also help show her the power of taking notes. Next time we go to KidSpark, it could be fun to take pictures of her at the supermarket checkout and then scribble on the images to portray the characters, or maybe we could learn how to draw the interactions as comics.

The summer camp gave me an opportunity to enjoy a lot of focused time. I used it all for consulting, finally finishing some tasks I'd been putting off for weeks. I also had some focus time in the evening. I made a few small improvements to my Emacs News publishing process, tweaking the plain text formatting based on suggestions from readers. I modified my journaling system to be able to see entries from this day across all the different years, copy all the displayed journal entries to the clipboard, and use more consistent CSS. I've been writing a bit more now that I have a Bluetooth keyboard on my bedside table. I've been drawing and doodling a little more, too, and I've been doing colouring sheets at the library.

I finished the Pre-Advanced III course in Simply Piano and started thinking about whether I want to switch to a different app, stop the subscription, or continue with it. I like how Piano Marvel has more advanced lessons, but I'm still getting the hang of timing. Then A+ started exploring the Simply Piano app again, so I guess we'll continue with that. There's still plenty for me to learn before I can fluidly play the Pre-Advanced II arrangements in the Simply Piano library without a lot of practice, so that's fine.

The cherry tomatoes in the garden are doing well. Four tomato plants (Sweet Million variety) give us more cherry tomatoes than we usually eat, so I can either increase my tomato consumption or consider growing three plants next year. Our 11 bitter melon plants are a bit slow, but W- says this is just about the right level of bitter melon production he wants.

Next month will be about settling into virtual grade 4 and figuring out our new rhythms. I'll probably do about 4 hours a week of consulting, saving the rest of the time for writing, drawing, coding, and slowly ramping up EmacsConf (coordination, infrastructure, captions). A+'s becoming more independent and more interesting, thinking about what she wants and using parent-speak to pitch her ideas to me ("We can always buy more [paint sticks]. You wanted to fuel my creativity.") I can't wait to see where this goes.

Blog posts

Sketches

Time

Category Previous month % This month % Diff % h/wk Diff h/wk
A+ 34.3 39.4 5.1 66.2 8.6
Business 0.5 2.5 2.0 4.1 3.3
Personal 9.4 10.3 1.0 17.4 1.6
Unpaid work 4.0 4.7 0.8 8.0 1.3
Discretionary - Family 0.0 0.2 0.2 0.3 0.3
Sleep 30.7 30.7 0.0 51.5 0.0
Discretionary - Productive 10.7 10.3 -0.4 17.4 -0.7
Discretionary - Play 10.5 1.9 -8.6 3.2 -14.4
2025-08-01 23:12 - 07:20: Sleep2025-08-01 22:53 - 23:12: Personal - Routines2025-08-01 21:59 - 22:53: A+ - Childcare2025-08-01 20:14 - 21:59: Discretionary - Play - Stardew Valley2025-08-01 20:11 - 20:14: Discretionary - Productive - Emacs2025-08-01 19:47 - 20:11: Discretionary - Productive - Emacs2025-08-01 19:34 - 19:47: Discretionary - Productive - Bike Brigade2025-08-01 19:10 - 19:34: Personal - Routines2025-08-01 18:57 - 19:10: Unpaid work - Clean the kitchen2025-08-01 18:35 - 18:57: Personal - Routines2025-08-01 18:20 - 18:35: Unpaid work - Cook2025-08-01 17:11 - 18:20: A+ - Childcare2025-08-01 17:01 - 17:11: Discretionary - Productive - Bike Brigade2025-08-01 16:52 - 17:01: A+ - Childcare2025-08-01 16:47 - 16:52: Personal - Routines2025-08-01 16:25 - 16:47: Discretionary - Productive - Gardening2025-08-01 12:11 - 16:25: A+ - Childcare2025-08-01 12:01 - 12:11: Personal - Routines2025-08-01 11:46 - 12:01: Unpaid work - Clean the kitchen2025-08-01 11:15 - 11:46: Personal - Routines2025-08-01 09:21 - 11:15: Business - Earn - Consulting - E1 - General2025-08-01 09:19 - 09:21: A+ - Childcare2025-08-01 08:59 - 09:19: Discretionary - Productive - Gardening2025-08-01 08:58 - 08:59: Discretionary - Productive - Music2025-08-01 08:22 - 08:58: A+ - Childcare2025-08-01 08:07 - 08:22: A+ - Childcare2025-08-01 07:24 - 08:07: Personal - Routines2025-07-31 23:26 - 07:24: Sleep2025-08-02 23:53 - 00:33: Discretionary - Productive - Writing2025-08-02 22:22 - 23:53: Personal - Routines2025-08-02 20:53 - 22:22: A+ - Childcare2025-08-02 20:23 - 20:53: A+ - Childcare2025-08-02 20:02 - 20:23: Personal - Routines2025-08-02 12:12 - 20:02: A+ - Childcare2025-08-02 12:02 - 12:12: Personal - Routines2025-08-02 11:32 - 12:02: Discretionary - Productive - Bike Brigade2025-08-02 11:32 - 11:32: Discretionary - Productive - Writing2025-08-02 11:28 - 11:32: Discretionary - Productive - Bike Brigade2025-08-02 11:18 - 11:28: Discretionary - Productive - Writing2025-08-02 11:18 - 11:18: Discretionary - Productive - Emacs2025-08-02 11:06 - 11:18: Discretionary - Productive - Emacs2025-08-02 10:42 - 11:06: Unpaid work - Cook2025-08-02 09:42 - 10:42: Unpaid work - Errands2025-08-02 09:24 - 09:42: Discretionary - Productive - Gardening2025-08-02 09:08 - 09:24: Personal - Routines2025-08-02 09:08 - 09:08: Personal - Routines2025-08-02 08:38 - 09:08: A+ - Childcare2025-08-02 07:38 - 08:38: Unpaid work - Cook2025-08-02 07:20 - 07:38: Personal - Routines2025-08-01 23:12 - 07:20: Sleep2025-08-03 23:57 - 07:03: Sleep2025-08-03 23:12 - 23:57: Discretionary - Productive - Drawing2025-08-03 22:44 - 23:12: Personal - Routines2025-08-03 20:59 - 22:44: A+ - Childcare2025-08-03 18:54 - 20:59: Personal - Routines2025-08-03 18:39 - 18:54: Unpaid work - Cook2025-08-03 18:38 - 18:39: Personal - Routines2025-08-03 18:14 - 18:38: Discretionary - Productive - Writing2025-08-03 18:13 - 18:14: Discretionary - Productive - Writing2025-08-03 14:05 - 18:13: A+ - Childcare2025-08-03 13:05 - 14:05: Unpaid work - Errands2025-08-03 12:32 - 13:05: Personal - Routines2025-08-03 11:27 - 12:32: Business - Earn - Consulting - E1 - General2025-08-03 11:22 - 11:27: Personal - Routines2025-08-03 10:25 - 11:22: Business - Earn - Consulting - E1 - General2025-08-03 10:06 - 10:25: A+ - Childcare2025-08-03 09:48 - 10:06: Discretionary - Productive - Writing2025-08-03 09:37 - 09:48: Discretionary - Productive - Bike Brigade2025-08-03 09:36 - 09:37: Personal - Routines2025-08-03 09:06 - 09:36: Discretionary - Productive - Music2025-08-03 09:05 - 09:06: Personal - Routines2025-08-03 08:44 - 09:05: Discretionary - Productive - Gardening2025-08-03 07:07 - 08:44: Personal - Routines2025-08-03 00:33 - 07:07: Sleep2025-08-02 23:53 - 00:33: Discretionary - Productive - Writing2025-08-04 22:56 - 01:09: Personal - Routines2025-08-04 21:36 - 22:56: Personal - Routines2025-08-04 20:33 - 21:36: Discretionary - Play - Stardew Valley2025-08-04 20:03 - 20:33: Personal - Routines2025-08-04 19:48 - 20:03: Unpaid work - Clean the kitchen2025-08-04 19:18 - 19:48: Personal - Routines2025-08-04 13:27 - 19:18: A+ - Childcare2025-08-04 12:40 - 13:27: Personal - Routines2025-08-04 11:03 - 12:40: Discretionary - Productive - Writing2025-08-04 09:36 - 11:03: Discretionary - Productive - Emacs2025-08-04 09:35 - 09:36: Personal - Routines2025-08-04 09:22 - 09:35: Discretionary - Productive - Gardening2025-08-04 08:21 - 09:22: A+ - Childcare2025-08-04 07:51 - 08:21: Discretionary - Productive - Drawing2025-08-04 07:03 - 07:51: Personal - Routines2025-08-03 23:57 - 07:03: Sleep2025-08-05 23:44 - 00:00: Personal - Routines2025-08-05 21:10 - 23:44: A+ - Childcare2025-08-05 20:20 - 21:10: Discretionary - Productive - Writing2025-08-05 20:01 - 20:20: Personal - Routines2025-08-05 19:21 - 20:01: Unpaid work - Tidy up2025-08-05 18:46 - 19:21: Unpaid work - Clean the kitchen2025-08-05 18:39 - 18:46: Personal - Routines2025-08-05 18:18 - 18:39: Unpaid work - Cook2025-08-05 18:07 - 18:18: Discretionary - Play - Stardew Valley2025-08-05 17:53 - 18:07: Unpaid work - Cook2025-08-05 17:23 - 17:53: Discretionary - Play - Stardew Valley2025-08-05 14:56 - 17:23: A+ - Childcare2025-08-05 14:26 - 14:56: Personal - Routines2025-08-05 13:56 - 14:26: Sleep2025-08-05 11:00 - 13:56: A+ - Childcare2025-08-05 10:45 - 11:00: Personal - Routines2025-08-05 10:34 - 10:45: Discretionary - Productive - Gardening2025-08-05 09:53 - 10:34: Discretionary - Productive - Music2025-08-05 09:42 - 09:53: Unpaid work - Tidy up2025-08-05 09:37 - 09:42: Discretionary - Productive - Music2025-08-05 08:07 - 09:37: Unpaid work - Errands2025-08-05 07:15 - 08:07: Personal - Routines2025-08-05 01:09 - 07:15: Sleep2025-08-04 22:56 - 01:09: Personal - Routines2025-08-06 22:50 - 00:33: Discretionary - Play - Stardew Valley2025-08-06 20:48 - 22:50: A+ - Childcare2025-08-06 20:18 - 20:48: Personal - Routines2025-08-06 19:47 - 20:18: Unpaid work - Tidy up2025-08-06 19:17 - 19:47: Discretionary - Productive - Sewing2025-08-06 19:06 - 19:17: Unpaid work - Tidy up2025-08-06 18:46 - 19:06: Personal - Routines2025-08-06 18:01 - 18:46: Discretionary - Productive - Bike Brigade2025-08-06 11:50 - 18:01: A+ - Childcare2025-08-06 11:35 - 11:50: Unpaid work - Cook2025-08-06 11:29 - 11:35: Personal - Routines2025-08-06 10:27 - 11:29: Business - Earn - Consulting - E1 - General2025-08-06 09:50 - 10:27: Discretionary - Productive - Music2025-08-06 09:33 - 09:50: Discretionary - Productive - Gardening2025-08-06 09:16 - 09:33: A+ - Childcare2025-08-06 09:16 - 09:16: Discretionary - Productive - Gardening2025-08-06 08:16 - 09:16: Discretionary - Play - Stardew Valley2025-08-06 07:43 - 08:16: A+ - Childcare2025-08-06 07:17 - 07:43: Personal - Routines2025-08-06 00:45 - 07:17: Sleep2025-08-06 00:00 - 00:45: Discretionary - Play - Stardew Valley2025-08-05 23:44 - 00:00: Personal - Routines2025-08-07 23:10 - 00:52: Discretionary - Play - Stardew Valley2025-08-07 22:41 - 23:10: Personal - Routines2025-08-07 21:38 - 22:41: A+ - Childcare2025-08-07 20:50 - 21:38: Discretionary - Play - Stardew Valley2025-08-07 20:15 - 20:50: Discretionary - Productive - Bike Brigade2025-08-07 20:02 - 20:15: Discretionary - Productive - Drawing2025-08-07 19:31 - 20:02: Personal - Routines2025-08-07 19:18 - 19:31: Unpaid work - Clean the kitchen2025-08-07 18:20 - 19:18: Personal - Routines2025-08-07 11:49 - 18:20: A+ - Childcare2025-08-07 11:39 - 11:49: A+ - Childcare2025-08-07 10:12 - 11:39: Discretionary - Productive - Writing2025-08-07 10:01 - 10:12: Discretionary - Productive - Emacs2025-08-07 09:47 - 10:01: Personal - Routines2025-08-07 09:08 - 09:47: Discretionary - Productive - Music2025-08-07 09:08 - 09:08: Discretionary - Productive - Music2025-08-07 08:45 - 09:08: Discretionary - Productive - Gardening2025-08-07 07:27 - 08:45: Personal - Routines2025-08-07 00:36 - 07:27: Sleep2025-08-07 00:33 - 00:36: Personal - Routines2025-08-06 22:50 - 00:33: Discretionary - Play - Stardew Valley2025-08-08 23:41 - 00:50: Discretionary - Play - Stardew Valley2025-08-08 23:08 - 23:41: Discretionary - Productive - Writing2025-08-08 22:33 - 23:08: Personal - Routines2025-08-08 21:33 - 22:33: A+ - Childcare2025-08-08 20:38 - 21:33: Personal - Routines2025-08-08 20:08 - 20:38: Unpaid work - Errands2025-08-08 18:38 - 20:08: Unpaid work - Errands2025-08-08 17:38 - 18:38: A+ - Childcare2025-08-08 17:08 - 17:38: A+ - Childcare2025-08-08 15:08 - 17:08: A+ - Childcare2025-08-08 11:08 - 15:08: A+ - Childcare2025-08-08 10:08 - 11:08: Discretionary - Productive - Writing2025-08-08 09:48 - 10:08: Discretionary - Productive - Emacs2025-08-08 09:34 - 09:48: Discretionary - Productive - Writing2025-08-08 09:30 - 09:34: Discretionary - Productive - Writing2025-08-08 08:56 - 09:30: Discretionary - Productive - Music2025-08-08 08:38 - 08:56: Discretionary - Productive - Gardening2025-08-08 07:28 - 08:38: A+ - Childcare2025-08-08 07:17 - 07:28: Personal - Routines2025-08-08 00:52 - 07:17: Sleep2025-08-07 23:10 - 00:52: Discretionary - Play - Stardew Valley2025-08-09 23:26 - 07:01: Sleep2025-08-09 22:53 - 23:26: Personal - Routines2025-08-09 19:56 - 22:53: A+ - Childcare2025-08-09 19:11 - 19:56: Personal - Routines2025-08-09 18:56 - 19:11: Unpaid work - Clean the kitchen2025-08-09 18:08 - 18:56: Personal - Routines2025-08-09 12:38 - 18:08: A+ - Childcare2025-08-09 11:57 - 12:38: Discretionary - Productive - Bike Brigade2025-08-09 11:56 - 11:57: Discretionary - Productive - Writing2025-08-09 11:48 - 11:56: Discretionary - Productive - Gardening2025-08-09 10:23 - 11:48: A+ - Childcare2025-08-09 10:23 - 10:23: Discretionary - Productive - Nonfiction2025-08-09 10:08 - 10:23: A+ - Childcare2025-08-09 09:53 - 10:08: Unpaid work - Laundry2025-08-09 09:14 - 09:53: Discretionary - Productive - Music2025-08-09 08:54 - 09:14: Discretionary - Productive - Gardening2025-08-09 07:54 - 08:54: Unpaid work - Cook2025-08-09 07:24 - 07:54: Personal - Routines2025-08-09 00:50 - 07:24: Sleep2025-08-08 23:41 - 00:50: Discretionary - Play - Stardew Valley2025-08-10 22:34 - 06:51: Sleep2025-08-10 22:32 - 22:34: Personal - Routines2025-08-10 20:49 - 22:32: A+ - Childcare2025-08-10 20:04 - 20:49: Discretionary - Productive - Writing2025-08-10 18:39 - 20:04: A+ - Childcare2025-08-10 17:21 - 18:39: Personal - Routines2025-08-10 17:06 - 17:21: Discretionary - Productive - Gardening2025-08-10 16:51 - 17:06: Unpaid work - Cook2025-08-10 14:27 - 16:51: A+ - Childcare2025-08-10 14:22 - 14:27: Personal - Routines2025-08-10 13:49 - 14:22: Sleep2025-08-10 13:19 - 13:49: Sleep2025-08-10 13:14 - 13:19: Personal - Routines2025-08-10 12:28 - 13:14: Sleep2025-08-10 10:22 - 12:28: A+ - Childcare2025-08-10 09:22 - 10:22: Discretionary - Productive - Writing2025-08-10 09:18 - 09:22: Personal - Routines2025-08-10 08:33 - 09:18: Discretionary - Productive - Music2025-08-10 08:07 - 08:33: Discretionary - Productive - Gardening2025-08-10 07:17 - 08:07: A+ - Childcare2025-08-10 07:01 - 07:17: Personal - Routines2025-08-09 23:26 - 07:01: Sleep2025-08-11 22:35 - 06:39: Sleep2025-08-11 22:23 - 22:35: Personal - Routines2025-08-11 21:16 - 22:23: A+ - Childcare2025-08-11 20:31 - 21:16: Discretionary - Productive - Writing2025-08-11 18:35 - 20:31: A+ - Childcare2025-08-11 18:09 - 18:35: Personal - Routines2025-08-11 17:41 - 18:09: Unpaid work - Clean the kitchen2025-08-11 17:21 - 17:41: Personal - Routines2025-08-11 17:00 - 17:21: Unpaid work - Errands2025-08-11 16:26 - 17:00: Personal - Routines2025-08-11 16:19 - 16:26: A+ - Childcare2025-08-11 16:04 - 16:19: Discretionary - Productive - Writing2025-08-11 15:59 - 16:04: Discretionary - Productive - Drawing2025-08-11 15:53 - 15:59: Personal - Routines2025-08-11 15:23 - 15:53: Sleep2025-08-11 15:13 - 15:23: Personal - Routines2025-08-11 14:54 - 15:13: Discretionary - Productive - Writing2025-08-11 14:42 - 14:54: Discretionary - Productive - Writing2025-08-11 14:15 - 14:42: Unpaid work - Tidy up2025-08-11 14:15 - 14:15: Discretionary - Productive - Writing2025-08-11 14:09 - 14:15: A+ - Childcare2025-08-11 14:09 - 14:09: Discretionary - Productive - Writing2025-08-11 12:59 - 14:09: Unpaid work - Clean the kitchen2025-08-11 12:44 - 12:59: Personal - Routines2025-08-11 08:50 - 12:44: A+ - Childcare2025-08-11 08:45 - 08:50: Discretionary - Productive - Music2025-08-11 08:30 - 08:45: Unpaid work - Tidy up2025-08-11 08:07 - 08:30: Discretionary - Productive - Gardening2025-08-11 07:37 - 08:07: A+ - Childcare2025-08-11 06:51 - 07:37: Personal - Routines2025-08-10 22:34 - 06:51: Sleep2025-08-12 22:41 - 07:00: Sleep2025-08-12 22:36 - 22:41: Personal - Routines2025-08-12 19:50 - 22:36: A+ - Childcare2025-08-12 19:20 - 19:50: Personal - Routines2025-08-12 19:05 - 19:20: Unpaid work - Clean the kitchen2025-08-12 18:15 - 19:05: A+ - Childcare2025-08-12 17:41 - 18:15: Discretionary - Productive - Bike Brigade2025-08-12 17:35 - 17:41: A+ - Childcare2025-08-12 16:59 - 17:35: A+ - Childcare2025-08-12 16:58 - 16:59: Discretionary - Productive - Bike Brigade2025-08-12 16:37 - 16:58: Discretionary - Productive - Bike Brigade2025-08-12 15:27 - 16:37: A+ - Childcare2025-08-12 15:23 - 15:27: Personal - Routines2025-08-12 14:56 - 15:23: Discretionary - Productive - Writing2025-08-12 14:47 - 14:56: Discretionary - Productive - Music2025-08-12 14:46 - 14:47: A+ - Childcare2025-08-12 14:18 - 14:46: Sleep2025-08-12 12:54 - 14:18: A+ - Childcare2025-08-12 12:24 - 12:54: Unpaid work - Clean the kitchen2025-08-12 11:54 - 12:24: Personal - Routines2025-08-12 10:59 - 11:54: Unpaid work - Cook2025-08-12 10:04 - 10:59: A+ - Childcare2025-08-12 08:29 - 10:04: Discretionary - Productive - Emacs2025-08-12 07:29 - 08:29: A+ - Childcare2025-08-12 07:24 - 07:29: A+ - Childcare2025-08-12 07:16 - 07:24: A+ - Childcare2025-08-12 06:59 - 07:16: Discretionary - Productive - Emacs2025-08-12 06:48 - 06:59: Discretionary - Productive - Emacs2025-08-12 06:39 - 06:48: Personal - Routines2025-08-11 22:35 - 06:39: Sleep2025-08-13 22:41 - 07:00: Sleep2025-08-13 21:45 - 22:41: A+ - Childcare2025-08-13 21:35 - 21:45: A+ - Childcare2025-08-13 20:56 - 21:35: Discretionary - Family2025-08-13 20:14 - 20:56: Personal - Routines2025-08-13 19:59 - 20:14: Unpaid work - Clean the kitchen2025-08-13 18:26 - 19:59: A+ - Childcare2025-08-13 18:11 - 18:26: Unpaid work - Clean the kitchen2025-08-13 17:31 - 18:11: Discretionary - Productive - Drawing2025-08-13 11:15 - 17:31: A+ - Childcare2025-08-13 11:12 - 11:15: A+ - Childcare2025-08-13 10:50 - 11:12: Business - Earn - Consulting - E1 - General2025-08-13 07:30 - 10:50: A+ - Childcare2025-08-13 07:00 - 07:30: Personal - Routines2025-08-12 22:41 - 07:00: Sleep2025-08-14 22:24 - 07:11: Sleep2025-08-14 22:17 - 22:24: Personal - Routines2025-08-14 21:16 - 22:17: A+ - Childcare2025-08-14 20:45 - 21:16: Discretionary - Productive - Coding2025-08-14 20:35 - 20:45: Discretionary - Productive - Emacs2025-08-14 20:16 - 20:35: Discretionary - Productive - Emacs2025-08-14 19:43 - 20:16: Discretionary - Productive - Bike Brigade2025-08-14 19:23 - 19:43: A+ - Childcare2025-08-14 18:25 - 19:23: Personal - Routines2025-08-14 18:11 - 18:25: Discretionary - Productive - Gardening2025-08-14 18:06 - 18:11: Personal - Routines2025-08-14 09:18 - 18:06: A+ - Childcare2025-08-14 09:01 - 09:18: Discretionary - Productive - Music2025-08-14 08:38 - 09:01: Discretionary - Productive - Gardening2025-08-14 07:38 - 08:38: A+ - Childcare2025-08-14 07:00 - 07:38: Personal - Routines2025-08-13 22:41 - 07:00: Sleep2025-08-15 23:16 - 07:05: Sleep2025-08-15 22:32 - 23:16: Personal - Routines2025-08-15 20:43 - 22:32: A+ - Childcare2025-08-15 19:43 - 20:43: Personal - Routines2025-08-15 19:23 - 19:43: Unpaid work - Clean the kitchen2025-08-15 18:38 - 19:23: Personal - Routines2025-08-15 18:01 - 18:38: Unpaid work - Tidy up2025-08-15 09:57 - 18:01: A+ - Childcare2025-08-15 09:42 - 09:57: Discretionary - Productive - Music2025-08-15 09:12 - 09:42: Discretionary - Productive - Gardening2025-08-15 08:00 - 09:12: A+ - Childcare2025-08-15 07:30 - 08:00: A+ - Childcare2025-08-15 07:11 - 07:30: Personal - Routines2025-08-14 22:24 - 07:11: Sleep2025-08-16 23:47 - 00:54: Discretionary - Play - Read - Fiction2025-08-16 23:42 - 23:47: Unpaid work - Laundry2025-08-16 23:05 - 23:42: Sleep2025-08-16 22:52 - 23:05: Personal - Routines2025-08-16 22:52 - 22:52: Personal - Routines2025-08-16 20:35 - 22:52: A+ - Childcare2025-08-16 20:05 - 20:35: Unpaid work - Clean the kitchen2025-08-16 19:02 - 20:05: Personal - Routines2025-08-16 16:48 - 19:02: A+ - Childcare2025-08-16 15:49 - 16:48: Personal - Plan2025-08-16 15:20 - 15:49: Discretionary - Productive - Bike Brigade2025-08-16 10:47 - 15:20: A+ - Childcare2025-08-16 10:14 - 10:47: Unpaid work - Tidy up2025-08-16 09:52 - 10:14: Discretionary - Productive - Bike Brigade2025-08-16 09:28 - 09:52: Discretionary - Productive - Music2025-08-16 09:03 - 09:28: Discretionary - Productive - Gardening2025-08-16 07:12 - 09:03: A+ - Childcare2025-08-16 07:05 - 07:12: Personal - Routines2025-08-15 23:16 - 07:05: Sleep2025-08-17 23:41 - 07:02: Sleep2025-08-17 23:35 - 23:41: Personal - Routines2025-08-17 22:01 - 23:35: A+ - Childcare2025-08-17 21:51 - 22:01: Personal - Routines2025-08-17 21:02 - 21:51: A+ - Childcare2025-08-17 20:47 - 21:02: Discretionary - Productive - Emacs2025-08-17 20:42 - 20:47: A+ - Childcare2025-08-17 20:30 - 20:42: Discretionary - Productive - Emacs2025-08-17 19:40 - 20:30: Personal - Routines2025-08-17 18:36 - 19:40: A+ - Childcare2025-08-17 18:01 - 18:36: A+ - Childcare2025-08-17 17:30 - 18:01: Discretionary - Productive - Drawing2025-08-17 17:13 - 17:30: Unpaid work - Laundry2025-08-17 16:54 - 17:13: Unpaid work - Clean the kitchen2025-08-17 13:18 - 16:54: A+ - Childcare2025-08-17 12:48 - 13:18: Personal - Routines2025-08-17 12:18 - 12:48: Personal - Routines2025-08-17 12:01 - 12:18: Discretionary - Productive - Coding2025-08-17 11:48 - 12:01: Discretionary - Productive - Coding2025-08-17 11:09 - 11:48: Unpaid work - Tidy up2025-08-17 09:27 - 11:09: A+ - Childcare2025-08-17 09:07 - 09:27: Discretionary - Productive - Music2025-08-17 07:21 - 09:07: A+ - Childcare2025-08-17 07:03 - 07:21: Personal - Routines2025-08-17 00:54 - 07:03: Sleep2025-08-16 23:47 - 00:54: Discretionary - Play - Read - Fiction2025-08-18 22:44 - 00:06: Discretionary - Productive - Emacs2025-08-18 22:36 - 22:44: Personal - Routines2025-08-18 21:48 - 22:36: A+ - Childcare2025-08-18 21:12 - 21:48: Discretionary - Productive - Emacs2025-08-18 20:28 - 21:12: Personal - Routines2025-08-18 19:55 - 20:28: A+ - Childcare2025-08-18 19:44 - 19:55: Discretionary - Productive - Emacs2025-08-18 18:49 - 19:44: A+ - Childcare2025-08-18 18:01 - 18:49: Discretionary - Productive - Emacs2025-08-18 17:45 - 18:01: Unpaid work - Clean the kitchen2025-08-18 17:10 - 17:45: Personal - Routines2025-08-18 15:55 - 17:10: A+ - Childcare2025-08-18 15:26 - 15:55: Personal - Routines2025-08-18 13:48 - 15:26: Business - Earn - Consulting - E1 - General2025-08-18 13:25 - 13:48: Personal - Routines2025-08-18 13:14 - 13:25: Business - Earn - Consulting - E1 - General2025-08-18 12:00 - 13:14: A+ - Childcare2025-08-18 10:12 - 12:00: Unpaid work - Errands2025-08-18 09:42 - 10:12: A+ - Childcare2025-08-18 09:12 - 09:42: Discretionary - Productive - Music2025-08-18 08:47 - 09:12: Discretionary - Productive - Gardening2025-08-18 08:46 - 08:47: Business - Earn - Consulting - E1 - General2025-08-18 07:21 - 08:46: A+ - Childcare2025-08-18 07:02 - 07:21: Personal - Routines2025-08-17 23:41 - 07:02: Sleep2025-08-19 22:59 - 07:07: Sleep2025-08-19 22:48 - 22:59: Personal - Routines2025-08-19 21:13 - 22:48: A+ - Childcare2025-08-19 21:03 - 21:13: Discretionary - Productive - Drawing2025-08-19 20:33 - 21:03: Personal - Routines2025-08-19 19:08 - 20:33: A+ - Childcare2025-08-19 19:07 - 19:08: Unpaid work - Clean the kitchen2025-08-19 18:37 - 19:07: Personal - Routines2025-08-19 18:24 - 18:37: Unpaid work - Laundry2025-08-19 17:47 - 18:24: A+ - Childcare2025-08-19 17:27 - 17:47: Discretionary - Productive - Writing2025-08-19 17:01 - 17:27: Unpaid work - Tidy up2025-08-19 16:51 - 17:01: Discretionary - Productive - Emacs2025-08-19 16:27 - 16:51: Personal - Routines2025-08-19 15:49 - 16:27: A+ - Childcare2025-08-19 15:29 - 15:49: Unpaid work - Errands2025-08-19 13:19 - 15:29: Business - Earn - Consulting - E1 - General2025-08-19 09:23 - 13:19: A+ - Childcare2025-08-19 08:51 - 09:23: Discretionary - Productive - Music2025-08-19 07:30 - 08:51: A+ - Childcare2025-08-19 07:00 - 07:30: Personal - Routines2025-08-19 00:06 - 07:00: Sleep2025-08-18 22:44 - 00:06: Discretionary - Productive - Emacs2025-08-20 23:06 - 07:00: Sleep2025-08-20 22:52 - 23:06: Personal - Routines2025-08-20 20:03 - 22:52: A+ - Childcare2025-08-20 19:33 - 20:03: Personal - Routines2025-08-20 19:20 - 19:33: Discretionary - Productive - Gardening2025-08-20 19:02 - 19:20: Unpaid work - Clean the kitchen2025-08-20 18:48 - 19:02: Personal - Routines2025-08-20 18:37 - 18:48: A+ - Childcare2025-08-20 16:37 - 18:37: Discretionary - Productive - Emacs2025-08-20 15:58 - 16:37: A+ - Childcare2025-08-20 15:28 - 15:58: Unpaid work - Errands2025-08-20 15:23 - 15:28: Personal - Routines2025-08-20 13:17 - 15:23: Business - Earn - Consulting - E1 - General2025-08-20 12:54 - 13:17: Personal - Routines2025-08-20 09:48 - 12:54: A+ - Childcare2025-08-20 09:29 - 09:48: Unpaid work - Clean the kitchen2025-08-20 08:46 - 09:29: Discretionary - Productive - Music2025-08-20 07:17 - 08:46: A+ - Childcare2025-08-20 07:07 - 07:17: Personal - Routines2025-08-19 22:59 - 07:07: Sleep2025-08-21 23:03 - 00:15: Discretionary - Play - Stardew Valley2025-08-21 22:26 - 23:03: Personal - Routines2025-08-21 21:16 - 22:26: A+ - Childcare2025-08-21 20:44 - 21:16: Discretionary - Productive - Coding2025-08-21 20:30 - 20:44: Personal - Routines2025-08-21 18:46 - 20:30: A+ - Childcare2025-08-21 18:44 - 18:46: Discretionary - Productive - Emacs2025-08-21 18:44 - 18:44: Discretionary - Productive - Emacs2025-08-21 18:03 - 18:44: Discretionary - Productive - Bike Brigade2025-08-21 17:31 - 18:03: Personal - Routines2025-08-21 17:21 - 17:31: Personal - Routines2025-08-21 16:56 - 17:21: Unpaid work - Clean the kitchen2025-08-21 16:33 - 16:56: Personal - Routines2025-08-21 16:00 - 16:33: A+ - Childcare2025-08-21 15:36 - 16:00: Unpaid work - Errands2025-08-21 13:02 - 15:36: Business - Earn - Consulting - E1 - General2025-08-21 13:00 - 13:02: Personal - Routines2025-08-21 10:03 - 13:00: A+ - Childcare2025-08-21 09:33 - 10:03: Discretionary - Productive - Music2025-08-21 09:10 - 09:33: Discretionary - Productive - Gardening2025-08-21 07:15 - 09:10: A+ - Childcare2025-08-21 07:00 - 07:15: Personal - Routines2025-08-20 23:06 - 07:00: Sleep2025-08-22 23:58 - 06:30: Sleep2025-08-22 22:45 - 23:58: Discretionary - Productive - Writing2025-08-22 22:15 - 22:45: Personal - Routines2025-08-22 21:04 - 22:15: A+ - Childcare2025-08-22 21:04 - 21:04: Personal - Routines2025-08-22 19:33 - 21:04: Discretionary - Productive - Writing2025-08-22 19:14 - 19:33: Discretionary - Productive - Coding2025-08-22 18:44 - 19:14: Personal - Routines2025-08-22 18:09 - 18:44: Unpaid work - Clean the kitchen2025-08-22 17:29 - 18:09: Personal - Routines2025-08-22 16:59 - 17:29: Discretionary - Productive - Coding2025-08-22 16:52 - 16:59: Personal - Plan2025-08-22 15:35 - 16:52: Unpaid work - Errands2025-08-22 15:29 - 15:35: Personal - Routines2025-08-22 13:24 - 15:29: Business - Earn - Consulting - E1 - General2025-08-22 13:01 - 13:24: Personal - Routines2025-08-22 12:05 - 13:01: A+ - Childcare2025-08-22 11:45 - 12:05: Unpaid work - Clean the kitchen2025-08-22 11:25 - 11:45: Personal - Routines2025-08-22 11:14 - 11:25: Discretionary - Productive - Emacs2025-08-22 10:58 - 11:14: Discretionary - Family2025-08-22 10:57 - 10:58: Discretionary - Productive - Emacs2025-08-22 10:56 - 10:57: A+ - Childcare2025-08-22 10:47 - 10:56: Discretionary - Productive - Emacs2025-08-22 10:44 - 10:47: Discretionary - Productive - Writing2025-08-22 10:43 - 10:44: Personal - Routines2025-08-22 10:27 - 10:43: Discretionary - Productive - Bike Brigade2025-08-22 10:08 - 10:27: Personal - Routines2025-08-22 10:01 - 10:08: A+ - Childcare2025-08-22 09:26 - 10:01: Discretionary - Productive - Music2025-08-22 09:03 - 09:26: Discretionary - Productive - Gardening2025-08-22 07:29 - 09:03: A+ - Childcare2025-08-22 07:02 - 07:29: Personal - Routines2025-08-22 00:21 - 07:02: Sleep2025-08-22 00:15 - 00:21: Personal - Routines2025-08-21 23:03 - 00:15: Discretionary - Play - Stardew Valley2025-08-23 23:55 - 07:00: Sleep2025-08-23 23:02 - 23:55: Discretionary - Productive - Drawing2025-08-23 22:59 - 23:02: Personal - Routines2025-08-23 21:37 - 22:59: A+ - Childcare2025-08-23 21:22 - 21:37: Discretionary - Productive - Drawing2025-08-23 18:49 - 21:22: A+ - Childcare2025-08-23 18:19 - 18:49: Personal - Routines2025-08-23 18:00 - 18:19: Discretionary - Productive - Gardening2025-08-23 17:57 - 18:00: Unpaid work - Clean the kitchen2025-08-23 17:42 - 17:57: Personal - Routines2025-08-23 17:41 - 17:42: Unpaid work - Clean the kitchen2025-08-23 17:41 - 17:41: Personal - Routines2025-08-23 10:51 - 17:41: A+ - Childcare2025-08-23 10:29 - 10:51: Personal - Routines2025-08-23 10:05 - 10:29: Discretionary - Productive - Bike Brigade2025-08-23 09:59 - 10:05: Discretionary - Productive - Bike Brigade2025-08-23 09:47 - 09:59: Unpaid work - Clean the kitchen2025-08-23 09:07 - 09:47: Unpaid work - Cook2025-08-23 09:02 - 09:07: Unpaid work - Clean the kitchen2025-08-23 07:30 - 09:02: A+ - Childcare2025-08-23 06:30 - 07:30: Personal - Routines2025-08-22 23:58 - 06:30: Sleep2025-08-24 23:10 - 06:56: Sleep2025-08-24 23:10 - 23:10: Personal - Routines2025-08-24 22:42 - 23:10: A+ - Childcare2025-08-24 22:32 - 22:42: Personal - Routines2025-08-24 12:38 - 22:32: A+ - Childcare2025-08-24 12:13 - 12:38: Discretionary - Productive - Emacs2025-08-24 07:19 - 12:13: A+ - Childcare2025-08-24 07:00 - 07:19: Personal - Routines2025-08-23 23:55 - 07:00: Sleep2025-08-25 23:27 - 06:37: Sleep2025-08-25 22:57 - 23:27: Personal - Routines2025-08-25 21:30 - 22:57: A+ - Childcare2025-08-25 19:18 - 21:30: Discretionary - Productive - Emacs2025-08-25 18:59 - 19:18: Personal - Routines2025-08-25 18:39 - 18:59: Unpaid work - Clean the kitchen2025-08-25 17:29 - 18:39: A+ - Childcare2025-08-25 17:09 - 17:29: Discretionary - Productive - Emacs2025-08-25 10:03 - 17:09: A+ - Childcare2025-08-25 09:58 - 10:03: Discretionary - Productive - Coding2025-08-25 09:33 - 09:58: Discretionary - Productive - Music2025-08-25 09:18 - 09:33: Unpaid work - Laundry2025-08-25 08:54 - 09:18: Unpaid work - Clean the kitchen2025-08-25 07:40 - 08:54: A+ - Childcare2025-08-25 07:33 - 07:40: Discretionary - Productive - Coding2025-08-25 06:56 - 07:33: Personal - Routines2025-08-24 23:10 - 06:56: Sleep2025-08-26 23:10 - 00:45: Discretionary - Productive - Writing2025-08-26 22:40 - 23:10: Personal - Routines2025-08-26 20:47 - 22:40: A+ - Childcare2025-08-26 19:21 - 20:47: Business - Earn - Consulting - E1 - General2025-08-26 19:10 - 19:21: Personal - Routines2025-08-26 18:56 - 19:10: Unpaid work - Clean the kitchen2025-08-26 18:09 - 18:56: Personal - Routines2025-08-26 12:42 - 18:09: A+ - Childcare2025-08-26 12:32 - 12:42: Unpaid work - Clean the kitchen2025-08-26 09:41 - 12:32: A+ - Childcare2025-08-26 09:11 - 09:41: Discretionary - Productive - Music2025-08-26 08:50 - 09:11: Discretionary - Productive - Gardening2025-08-26 07:12 - 08:50: A+ - Childcare2025-08-26 06:37 - 07:12: Personal - Routines2025-08-25 23:27 - 06:37: Sleep2025-08-27 23:18 - 07:03: Sleep2025-08-27 21:57 - 23:18: A+ - Childcare2025-08-27 21:31 - 21:57: Discretionary - Productive - Writing2025-08-27 21:21 - 21:31: Business - Build - Paperwork2025-08-27 20:57 - 21:21: Discretionary - Productive - Emacs2025-08-27 20:57 - 20:57: Discretionary - Productive - Emacs2025-08-27 20:56 - 20:57: Discretionary - Productive - Tracking2025-08-27 20:55 - 20:56: Discretionary - Productive - Emacs2025-08-27 19:15 - 20:55: A+ - Childcare2025-08-27 18:54 - 19:15: Personal - Routines2025-08-27 18:40 - 18:54: Unpaid work - Clean the kitchen2025-08-27 17:57 - 18:40: A+ - Childcare2025-08-27 17:03 - 17:57: Personal - Routines2025-08-27 09:30 - 17:03: A+ - Childcare2025-08-27 09:25 - 09:30: Personal - Routines2025-08-27 08:35 - 09:25: Discretionary - Productive - Music2025-08-27 08:33 - 08:35: Discretionary - Productive - Gardening2025-08-27 07:17 - 08:33: A+ - Childcare2025-08-27 07:09 - 07:17: Personal - Routines2025-08-27 00:45 - 07:09: Sleep2025-08-26 23:10 - 00:45: Discretionary - Productive - Writing2025-08-28 23:15 - 00:00: Discretionary - Productive - Writing2025-08-28 22:45 - 23:15: Personal - Routines2025-08-28 20:34 - 22:45: A+ - Childcare2025-08-28 20:04 - 20:34: Personal - Routines2025-08-28 19:34 - 20:04: Discretionary - Productive - Writing2025-08-28 18:32 - 19:34: Personal - Routines2025-08-28 18:20 - 18:32: Unpaid work - Clean the kitchen2025-08-28 17:44 - 18:20: Personal - Routines2025-08-28 17:34 - 17:44: Discretionary - Productive - Bike Brigade2025-08-28 17:13 - 17:34: Personal - Routines2025-08-28 16:43 - 17:13: Sleep2025-08-28 16:43 - 16:43: A+ - Childcare2025-08-28 09:42 - 16:43: A+ - Childcare2025-08-28 08:47 - 09:42: Discretionary - Productive - Music2025-08-28 07:45 - 08:47: A+ - Childcare2025-08-28 07:03 - 07:45: Personal - Routines2025-08-27 23:18 - 07:03: Sleep2025-08-29 23:39 - 00:26: Discretionary - Play - Stardew Valley2025-08-29 23:24 - 23:39: Discretionary - Family2025-08-29 22:58 - 23:24: Discretionary - Productive - Writing2025-08-29 22:48 - 22:58: Personal - Routines2025-08-29 19:57 - 22:48: A+ - Childcare2025-08-29 19:55 - 19:57: Personal - Routines2025-08-29 18:41 - 19:55: Discretionary - Productive - Emacs2025-08-29 18:37 - 18:41: Personal - Routines2025-08-29 18:36 - 18:37: Discretionary - Productive - Emacs2025-08-29 18:28 - 18:36: Discretionary - Productive - Bike Brigade2025-08-29 17:52 - 18:28: Personal - Routines2025-08-29 17:43 - 17:52: Discretionary - Productive - Gardening2025-08-29 17:07 - 17:43: Unpaid work - Clean the kitchen2025-08-29 16:54 - 17:07: Personal - Routines2025-08-29 09:46 - 16:54: A+ - Childcare2025-08-29 09:17 - 09:46: Discretionary - Productive - Music2025-08-29 08:31 - 09:17: A+ - Childcare2025-08-29 07:12 - 08:31: Discretionary - Productive - Drawing2025-08-29 06:57 - 07:12: Personal - Routines2025-08-29 00:55 - 06:57: Sleep2025-08-29 00:00 - 00:55: Discretionary - Productive - Drawing2025-08-28 23:15 - 00:00: Discretionary - Productive - Writing2025-08-30 23:25 - 00:06: Business - Build - Paperwork2025-08-30 23:13 - 23:25: Personal - Plan2025-08-30 23:03 - 23:13: Discretionary - Productive - Coding2025-08-30 22:49 - 23:03: Personal - Routines2025-08-30 20:24 - 22:49: A+ - Childcare2025-08-30 20:14 - 20:24: Unpaid work - Clean the kitchen2025-08-30 19:35 - 20:14: Personal - Routines2025-08-30 19:27 - 19:35: Unpaid work - Clean the kitchen2025-08-30 19:22 - 19:27: Unpaid work - Clean the kitchen2025-08-30 18:52 - 19:22: Personal - Routines2025-08-30 18:23 - 18:52: Unpaid work - Cook2025-08-30 18:18 - 18:23: Unpaid work - Cook2025-08-30 18:02 - 18:18: Unpaid work - Clean the kitchen2025-08-30 17:28 - 18:02: Personal - Routines2025-08-30 16:59 - 17:28: Discretionary - Productive - Bike Brigade2025-08-30 10:53 - 16:59: A+ - Childcare2025-08-30 10:51 - 10:53: Discretionary - Productive - Bike Brigade2025-08-30 10:50 - 10:51: Discretionary - Productive - Bike Brigade2025-08-30 10:14 - 10:50: Discretionary - Productive - Music2025-08-30 10:08 - 10:14: Personal - Routines2025-08-30 10:03 - 10:08: Unpaid work - Laundry2025-08-30 09:50 - 10:03: Discretionary - Productive - Gardening2025-08-30 09:32 - 09:50: Unpaid work - Laundry2025-08-30 09:10 - 09:32: Personal - Routines2025-08-30 08:30 - 09:10: A+ - Childcare2025-08-30 07:03 - 08:30: Personal - Routines2025-08-30 00:33 - 07:03: Sleep2025-08-30 00:26 - 00:33: Personal - Routines2025-08-29 23:39 - 00:26: Discretionary - Play - Stardew Valley2025-08-31 23:40 - 00:28: Discretionary - Play - Stardew Valley2025-08-31 23:33 - 23:40: Personal - Routines2025-08-31 22:25 - 23:33: A+ - Childcare2025-08-31 22:10 - 22:25: Personal - Routines2025-08-31 20:11 - 22:10: A+ - Childcare2025-08-31 20:01 - 20:11: Discretionary - Productive - Writing2025-08-31 19:43 - 20:01: Personal - Routines2025-08-31 19:00 - 19:43: A+ - Childcare2025-08-31 18:39 - 19:00: A+ - Childcare2025-08-31 18:25 - 18:39: Unpaid work - Clean the kitchen2025-08-31 17:12 - 18:25: Personal - Routines2025-08-31 16:27 - 17:12: Personal - Walk - Other2025-08-31 15:13 - 16:27: Discretionary - Productive - Drawing2025-08-31 15:03 - 15:13: Personal - Routines2025-08-31 14:57 - 15:03: Unpaid work - Tidy up2025-08-31 14:29 - 14:57: Discretionary - Productive - Gardening2025-08-31 14:25 - 14:29: Unpaid work - Clean the kitchen2025-08-31 12:50 - 14:25: Discretionary - Productive - Writing2025-08-31 12:36 - 12:50: Discretionary - Productive - Drawing2025-08-31 12:16 - 12:36: Unpaid work - Tidy up2025-08-31 11:53 - 12:16: Unpaid work - Clean the kitchen2025-08-31 11:33 - 11:53: Personal - Routines2025-08-31 11:00 - 11:33: Unpaid work - Cook2025-08-31 10:48 - 11:00: Unpaid work - Cook2025-08-31 10:00 - 10:48: A+ - Childcare2025-08-31 09:40 - 10:00: Discretionary - Productive - Music2025-08-31 09:18 - 09:40: A+ - Childcare2025-08-31 09:00 - 09:18: Discretionary - Productive - Gardening2025-08-31 08:07 - 09:00: A+ - Childcare2025-08-31 07:22 - 08:07: Discretionary - Productive - Drawing2025-08-31 07:00 - 07:22: Personal - Routines2025-08-31 00:24 - 07:00: Sleep2025-08-31 00:12 - 00:24: Personal - Routines2025-08-31 00:06 - 00:12: Discretionary - Productive - Emacs2025-08-31 00:06 - 00:06: Discretionary - Productive - Emacs2025-08-30 23:25 - 00:06: Business - Build - Paperwork

We only have so many summers together. Makes sense to make the most of them.

Footnotes

1

For more about this theory of play, check out the Wikipedia summary of Roger Caillois's Man, Play and Games.

View org source for this post

Considering the format of daily sketches

| drawing

Text and links from sketch

Considering the format of daily sketches 2025-09-03-06

The iPad is comfortable to draw on in landscape mode, so for the past few months, I've been drawing my daily moments as monthly calendars. Before then, I used to draw a dozen daily sketches on one page. And long before that, daily index cards.

Some people draw fancier sketches. These ones are ArneBab's.

  • How he started in Aug 2022
  • Latest one: Aug 2025

I like the varied sizes, colours

Tanny McGregor has a colourful calendar. (5 minutes a day? Hmm…)

  • but this is from 2020

Here's Winnie Lim. This one's Jan 2025.

Maybe I'll try putting more time into it. Just doodle. It's okay to slow down.

What do I want from my sketches?

  • Moments I might not have photos of: sketches don't have to be photorealistic, although it might be good to get a better sense of what we feel like, and then what we look like
  • Playfully stretching my skills
    • details
    • shading
    • colour
  • Maybe I can try Procreate? Easy layers, colour fill.
  • Stick with Noteful for now - nice to work with notebooks

Feel free to use this sketch under the Creative Commons Attribution License.

I've been regularly drawing daily moments for a while now. Now that I have a little more time for myself, I want to think about how I can make this even better. I think I'd like to start with more colour, especially as the cooler months approach. (I used to struggle with the desaturated bleakness of winter, but now I'm beginning to realize I can add the colour myself.)

I also want to play around with more expressive faces and figures, and drawing more types of things. That probably means doing a daily drawing (or drawings) in addition to my moment of the day, so I can play with things that might not show up in our everyday life. I can start by focusing on cartoony illustrations: simple lines and curves and colours. It doesn't have to be realistic. Fancy shading can wait.

It's okay to keep things simple with a monthly grid. Maybe eventually I'll relax the grid and play with different sizes. Eventually I might start to mix in more text, like the way some people do travel journals. I tend to write a lot of text in my sketches by default, though. Starting with the grid forces me to keep text to a minimum.

Someday I'd like to be able to tell stories in comic form, like Drewscape does. I can develop an ear and an eye for stories. Much to learn.

Links for inspiration:

Who else should I add to my feed reader?

View org source for this post

2025-09-01 Emacs news

| emacs, emacs-news

People continue to share interesting Emacs elevator pitches. The Emacs Carnival September theme is "Obscure packages." Recommend a hidden gem!

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Mastodon #emacs, Bluesky #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

View org source for this post

Colours

| drawing

(View sketch)

Text and links from sketch

Colours (August IndieWeb Carnival theme) sach.ac/2025-08-31-02

I don't draw with lots of colours these days, even though I can have as many as I want. Usually:

  • black
  • highlight
  • maybe gray
  • maybe an accent colour

I've drawn with more colours before. I think it's when I feel more relaxed about time. A+ is playing Minecraft with her cousins. I could do many other things, but I want to draw.

I looked at 18 years of sketches and picked some things I like.

I came across this collection I made, too: highlighter (style I tend to use), decorations (Luigi Mengato), toned text (Kazumi Koyama), contrasting text (Timothy J. Reynolds), accent text (Eva-Lotta Lamm), spacer (Makayla Lewis), areas (Per Axbom), glow (Katharina Bluhm), background (Eva-Lotta Lamm), flood (ItsLilpeanut), text and outlines (Heather Willems), colourful outlines and fills (Liisa Sorsa), everything (Lynne Cazaly), shade (Makayla Lewis), shaded cartoon (Hamish MacDonald)

I circled the ones I want to try.

In Syllabus, Lynda Barry assigns colouring sheets. Don't rush. Students figure out that thicker colour = more fun.

The library always has crayons and sheets. I've been colouring while waiting for A+. I press hard and fill the space.

I like seeing these across the room as I draw in bed.

Someday I'll get the hang of this!

Feel free to use this sketch under the Creative Commons Attribution License.

Hmm… so many of the sketches from my post in 2014 are no longer accessible, or the sketchnoters haven't posted anything recently, or they no longer use that style, or I can't quite find an equivalent thing to link to. Time marches on, I guess.

More recent colour inspiration from active sketchnoters:

Check out the August IndieWeb Carnival for lots of other colour-related posts.

View org source for this post

Nginx maps: How I redirect sketch IDs to blog posts or sketches

| geek, tech

Assumed audience: I'm mostly writing these notes for myself, because I'd forgotten how this actually works. Maybe it might be interesting for people who also like identifying their posts or sketches and who use Nginx.

Since August 2022, I've been identifying sketches with YYYY-MM-DD-NN, where NN is a number derived from my journaling system. I used to use just YYYY-MM-DD and the title, but sometimes I renamed sketches. Then I used YYYY-MM-DDa (ex: 2022-08-01f). Sometimes optical character recognition had a hard time distinguishing my hand-drawn "d" from "a", though. Numbers were generally more reliable. And besides, that way, there's room for growth in case I have more than 26 journal entries or sketches in a day. (Not that I've gone anywhere near that volume.)

Anyway, I want to have short URLs like sachachua.com/2025-07-31-10 or sach.ac/2025-07-31-10 go to a blog post if one's available, or just the sketch if I haven't written about it yet, like sach.ac/2025-01-16-01. Here's how I do it.

To publish my site, I export HTML files from Org Mode and I use the 11ty static site generator to put them together in a blog.

One of my 11ty files is map.11ty.cjs, which has the following code:

map.11ty.cjs
module.exports = class AllPosts {
  data() {
    return {
      permalink: '/conf/nginx.map',
      eleventyExcludeFromCollections: true
    };
  }
  async render (data) {
    let list = data.collections._posts;
    let cats = data.siteCategoriesWithParents;
    let nested = cats.filter(o => o.parent);
    let hash = {};
    await list.reduce(async (prev, o) => {
      await prev;
      if (o.data?.zid) {
        hash[o.data.zid] = o.url;
      }
      let matches = (await o.template.inputContent).matchAll(/{% +sketchFull +\"([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9](-[0-9][0-9]|[a-z]))?/g);
      for (const m of matches) {
        if (m[1] && !hash[m[1]]) {
          hash[m[1]] = o.url;
        }
      }
    });
    let byZIDs = Object.entries(hash).map((o) => `/${o[0]} ${o[1]};\n`).join('');
    let byBlogID = list.filter(o => o.data.id).map((o) => `/blog/p/${o.data.id} ${o.url};`).join("\n") + "\n";
    let nestedCategories = nested.map((o) => {
      let slugPath = o.parentPath.map((p) => p.slug).join('/') + '/' + o.slug;
      let catPage = `/blog/category/${slugPath} /blog/category/${o.slug};\n`;
      let catFeed = `/blog/category/${slugPath}/feed/ /blog/category/${o.slug}/feed/;\n`;
      let catAtom = `/blog/category/${slugPath}/feed/atom/ /blog/category/${o.slug}/feed/atom/;\n`;
      return catAtom + catFeed + catPage;
    }).join('');
    const result = byBlogID + nestedCategories + byZIDs;
    return result;
  }
};

The code analyzes each of my blog posts and looks for full-sized sketches. If it finds a full-size sketch, it writes a rule that redirects that ID to that blog post. This is what part of the resulting nginx.map looks like:

/2025-07-31-10 /blog/2025/08/monthly-review-july-2025/;
/2025-08-04-01 /blog/2025/08/turning-42-life-as-a-41-year-old/;
/2025-08-03-08 /blog/2025/08/turning-42-life-as-a-41-year-old/;
/2025-08-31-01 /blog/2025/08/emacs-elevator-pitch-tinkerers-unite/;

In my Nginx web server config (nginx.conf), I have:

http {
  # ...
  include /etc/nginx/redirections.map;
  # ...
}

And that redirections.map uses the map module and looks like this:

map $request_uri $new_uri {
   default "";
   include /var/www/static-blog/conf/nginx.map;
   / /blog;
   # ...
}

Then in my Nginx site configuration, I redirect to that $new_uri if available. As a fallback, I also detect yyyy-mm-dd-nn URLs and redirect them to my sketchbook.

server {
   # ... other rules
   if ($new_uri) {
       return 302 $new_uri;
   }
   location ~ ^/([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9](a-z|-[0-9][0-9])?)$ {
      return 302 https://sketches.sachachua.com/$1;
   }
}

The Node app that runs sketches.sachachua.com searches by ID if it gets one. Here's the code in the Express router:

router.get('/:filename', controller.serveImagePageByFilename);

which calls this controller:

exports.serveImagePageByFilename = async (req, res) => {
  if (req.params.filename) {
    let f = await findImageByFilename(req.params.filename);
    if (f) {
      renderSingle(req, res, f);
    } else {
      res.sendStatus(404);
    }
  } else {
    res.sendStatus(404);
  }
};

which uses this function:

const findImageByFilename = (filename) => {
  return getSketches().then((sketches) => {
    let id = filename.match(/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]([a-z]|-[0-9][0-9])/);
    let m = filename.match(/^[^#]+/);
    let file = sketches.find((x) => path.parse(x.filename).name == filename);
    if (!file) {
      file = sketches.find((x) => x.filename.startsWith(id));
    }
    if (!file && m) {
      file = sketches.find((x) => x.filename.startsWith(m[0]));
    }
    if (!file) {
      file = sketches.find((x) => path.parse(x.filename).name.replace(' #.*') == filename);
    }
    if (!file) {
      file = sketches.find((x) => x.filename.startsWith(filename));
    }
    return file;
  });
};

(getSketches just reads the JSON I've saved.)

So my workflow for a public sketch is:

  1. Draw the sketch.
  2. In my journaling system, write the title and tags for the sketch. Get an ID.
  3. Write the ID on the sketch.
  4. Export the sketch from the iPad as a JPEG.
  5. Wait for things to sync in the background.
  6. Process the sketch. I can use my-image-rename-current-image-based-on-id to rename it manually, or I can use my-sketch-process to recognize the ID and process the text. (My Emacs configuration)
  7. Wait for things to sync in the background. In the meantime, edit the text version of the sketch.
  8. Reload my public sketches, which regenerates the sketches.json that lists all the sketches.
  9. Use my-write-about-sketch or my-insert-sketch-and-text to include the sketch and the text in a draft blog post. (My Emacs configuration) Do my usual blogging process.
View org source for this post