~hedy's blogroll - BlogFlock The blogroll listed on my website. https://home.hedy.dev/blogroll/ https://blogflock.com/list/yq60j 2026-11-02T00:00:00.000Z BlogFlock hedy Anticipation - James' Coffee Blog https://jamesg.blog/2026/11/02/anticipation 2026-11-02T00:00:00.000Z James' Coffee Blog <p>Does the tree anticipate the sunrise, or nonchalantly receive its growing light?</p> <p>Is the sun why leaves turn yellow in autumn, the colour coming from months of light, and, anticipating darker nights, the tree becomes the sun for as long as it can, before shedding into the new silver season?</p> <p>The hope-filled tree grows into where it is.</p> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a542df8cdc6dffc4',t:'MTc5MzYxOTcxOQ=='};var l=window.parent.location,o;try{o=new URL(l.origin).origin}catch(e){try{o=new URL(new URL(l.href).origin).origin}catch(e){o=''}}var u='/cdn-cgi/challenge-platform/scripts/jsd/main.js?ray=a542df8cdc6dffc4',a=document.createElement('script');a.src=o?new URL(u,o).href:u;document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script> Aristotle Nicomachean Ethics: society of spirit and “Prot’s glasses’s” - Protesilaos Stavrou: Master feed with all updates https://protesilaos.com/books/2026-11-01-nicomachean-ethics-society-spriti-prot-glasses/ 2026-11-01T00:00:00.000Z Protesilaos Stavrou: Master feed with all updates <p>In this 1-hour video I talk at length about ethics, wellness, goals, rationality, and interpersonal affairs. This is a comprehensive commentary on two previous videos I have done on the topic of Aristotle’s book titled “Nicomachean Ethics”, though what I say goes far beyond what Aristotle talks about.</p> <p>The previous two videos, for context:</p> <ul> <li><a href="https://protesilaos.com/books/2026-10-25-nichomachean-ethics-ends-institutions-sin/">Aristotle Nicomachean Ethics: on goals, institutions, sin of exaggeration</a> (2026-10-25).</li> <li><a href="https://protesilaos.com/books/2026-10-26-nicomachean-ethics-criticism-happiness-good-spirit-ness/">Aristotle Nicomachean Ethics: criticism, happiness, good-spirit-ness</a> (2026-10-26).</li> </ul><hr> <p> 🔷 Consider <a href="https://protesilaos.com/donations/">making a donation</a>. </p> Weeknotes W3 - James' Coffee Blog https://jamesg.blog/2026/11/01/weeknotes-w3 2026-11-01T00:00:00.000Z James' Coffee Blog <p>Today I got to see one of my favourite places in the world – a park I really like – in its full autumn colours. The paths were lined with autumn trees and scattered with yellows and oranges and reds. I heard crisp sounds with almost every step on certain straights of the walk. <em>I forgot how beautiful the trees get here.</em> The colours get more beautiful by the day, even though the trees are more sparse.</p> <p>For the first time this autumn, I thought to myself that it will only be a few weeks before the oranges and reds will be mostly gone. I will have to make the most of the next few weeks and soak myself in the colours of the season for as long as I can.</p> <h2 id="the-highlights">The highlights</h2> <p>After last weekend’s storm had me inside for the weekend, I was especially excited to get out this weekend. I went for a long walk – one of my longest this year – and enjoyed the weather. I was surprised by how warm it was, though; I was expecting a chillier air. I went to places I haven’t visited in weeks, visited a new bookshop (where I bought a poetry zine with a layout that caught my eye), and generally appreciated all the time outside, breathing in the fresh air of day.</p> <p>Today – Sunday – I spent the whole day away from the computer. When I sat down this evening to check in with notifications and prepare to write this weeknote, I realised that the day passed by quickly and I seldom thought of my computer. So too was true of yesterday: I spent many hours walking, checking my phone occasionally. I love being outside.</p> <p>I spent some time in a coffee shop and started journaling. I am still not in the mood for reading on the weekends, but I was in the mood for writing. I let my stream of consciousness flood onto the pages, writing about all that came to mind while I looked around and watched the world go by. I haven’t written as much prose by hand in quite some time, even though the sum of my writing was less than a page in my writing journal. I wonder if I will write more on paper in the coming weeks. I did enjoy the experience.</p> <p>In terms of studying, I got back my final grades for last year. I am pleased with how I did. Admittedly I am a bit nervous for my first art history assignment this year, but I am sure I will get through it. This is the first time I have felt nervous about an assignment weeks before it is due, and before we have even been fully introduced to it. I have a lecture about the topic of the assignment tomorrow, on Monday, in which I expect to take many notes. I am already feeling more confident by the day.</p> <p>In the creative writing section of my studies. I submitted my assignment for the first block last week, marking the end of our block on defining ideas. I am already in love with the next module, fiction writing. Next week I will be starting to study character building, for which I am excited. I have found my confidence in fiction writing has come on leaps and bounds this year, owing, I think, in large part to my studies. We also had a lecture on poetry that I really enjoyed, studying Hayden’s <a href="https://www.afropoets.net/roberthayden2.html">Full Moon</a>.</p> <p>On that note, this is <a href="https://writingmonth.org/">Writing Month</a>. I am not sure whether I will participate, but this morning I had a burst of creative inspiration and ended up writing a few paragraphs toward a story. I am unsure whether what I wrote has a strong enough foundation to be a longer work – and whether the plot went in the way I want – but it did give me more confidence. I will make a decision about Writing Month by the end of the day. I like that you can set your own goal rather than committing to a longer project such as the 50,000 word total that NaNoWriMo formerly set.</p> <h2 id="music-corner">Music corner</h2> <p>On Saturday I picked out a few songs from Bandcamp at random to listen to. I can’t remember any in particular, but I did enjoy many of the songs I heard. With that said, there are a few other songs I remember listening to this week.</p> <ul> <li>This acoustic recording of <a href="https://www.youtube.com/watch?v=2P-uLAQ9FCI">Soon You’ll Get Better</a> by Taylor Swift.</li> <li>Little Feat’s <a href="https://www.youtube.com/watch?v=UaQ3VGeQ8Uw">Long Distance Love</a>.</li> <li>A cover of <a href="https://www.youtube.com/watch?v=rTVQkeARBFw">Bon Iver’s Perth, performed by the Coastal Sound Youth Choir: Indiekör 2016</a>.</li> <li><a href="https://www.youtube.com/watch?v=P8sj_MrjXl4">This cover of Bon Iver’s 715 Creeks.</a></li> <li>Maisie Peters’ “It's Your Bed Babe, It's Your Funeral” EP from 2019.</li> <li>The album “we’re all feeling the same” by lovelytheband.</li> <li>I am enjoying music by Alice Kristiansen.</li> </ul> <h2 id="thoughts,-wandering">Thoughts, wandering</h2> <ul> <li>After a Homebrew Website Club meetup this week, I worked on a feature in <a href="https://artemis.jamesg.blog">Artemis</a> that lets users opt in to see boosts from an ActivityPub account. Previously Artemis only showed posts originally authored by the ActivityPub user, but now there is a checkbox to opt in to see boosts in the settings for a subscription. My implementation shows the title of a post to be “Shared a post by @accountname”, rather than showing the actual post. This was inspired by <a href="https://pointinthecloud.com/">Colin</a> who has a similar implementation in their web reader. I much prefer this minimal approach to showing materials from an account I do not directly follow in my reader.</li> <li>A little snippet from this morning: <em>“The joy of the first sip of coffee — of how that may beget words, words that beget more words for there is rhythm to be found after starting. I am listening to electronic music. Despite having few words I am starting to appreciate the music for its own qualities — for the repetition, for the moments of change, for the pitches that I seldom hear. There is joy to be found in so much music. I started my morning thinking about ambitions and potential adventures — where I want to go, what I want to try.”</em></li> <li>I opened a box of chocolates that I received as a gift a while ago. I love chocolate. Especially the ones in the box that is open now.</li> <li>I am hoping to “lock in” to my fiction writing next week. I am really excited to see what I learn. I have a feeling that I am going to go through the phase of writing stories that aren’t <em>great</em> while I find my feet, fiction being so new. With that said, yesterday I did a writing exercise and I ended up writing way more than I expected. I found something of a flow state that I feel with other kinds of writing that I enjoy. That was a real delight to feel.</li> <li>I am starting to get used to the darker nights again. It was nice to see the stars so early last night. There was a forecast that indicated the Northern Lights might be visible later in the night, but I didn’t see them. One of my dreams is to see the Northern Lights. I really hope to see them one day.</li> <li>I have had this idea of “building bridges” in my mind related to the indie web for several weeks now. I don’t really know what I want to say, but I think the message is how I wish the indie web was more interconnected with other interest groups. My zine “<a href="https://jamesg.blog/2026/09/05/creative-web-guide-zine">A Creative’s Guide to Personal Websites</a>” is an experiment in communicating the value of websites to creative people (artists, photographers, painters – anyone who thinks of themselves as creative) and how to get one set up while trying to avoid as much technical language as possible. If the words “building bridges” mean anything to you as it relates to the indie web, do let me know. I am still trying to piece this idea together.</li> <li>I want to make another zine in the next few weeks!</li> <li>I had a note that is almost a year old nearby with three questions I thought I’d put here: “How did Michelangelo feel when he painted the Sistine Chapel?”, “Has anyone painted HTML code?”, and “Is reading a creative art?”. I don’t plan to actively search for answers to these questions, but I thought I’d give them space here both for future reference and in case they are interesting to you, dear reader.</li> </ul> <h2 id="miscellanea">Miscellanea</h2> <ul> <li>I read <a href="https://www.gutenberg.org/files/29433/29433-h/29433-h.htm">Ralph Waldo Emerson’s <em>Nature</em></a> for the first time. I think I will have to re-read the work before I would feel comfortable sharing any thoughts, but I certainly thought this was worth reading. I have known Emerson’s name for a long while as he was friends with Thoreau, so it was good to finally read something written by him.</li> <li>I love Frances’ link-roundups, and was overjoyed when I saw a few of my recent posts linked in the <a href="https://francescrossley.com/links-fun-projects-joy-hope-community-and-more/">last edition</a>.</li> <li>I love the idea of showing a count of how many images have alt text as detailed in the article “<a href="https://medienbaecker.com/articles/number-go-up">Number go up</a>”. This is one case where I am in firm support of “number go up.”</li> <li>I was listening to the episode of the <em>In Our Time</em> podcast on Logic earlier this week. I think it was in that podcast I heard the term “<a href="https://en.wikipedia.org/wiki/Syncategorematic_term">syncategorematic term</a>”. The term was so full of character I knew I had to bookmark it.</li> <li>I love the <a href="https://breadandpuppet.org/cheap-art/why-cheap-art-manifesto">Why Cheap Art manifesto</a> by Bread and Puppet.</li> <li>The 3D virtual museum linked in “<a href="https://dostoynikov.bearblog.dev/virtual-museum-for-my-wifes-artworks/">Virtual museum for my wife's artworks</a>” is <em>unbelievable.</em> I have never experienced a museum on the web like I have that one.</li> <li>The “<a href="https://www.w3.org/blog/2026/historical-www-talk-archives-made-complete/">Historical www-talk archives made complete</a>” publication by the W3C is worth perusing. The “<a href="https://lists.w3.org/Archives/Public/www-talk/1993Apr/0035.html">Guido van Rossum writes a web robot that "tries to map out the entire web", distributed along with python 0.9.8</a>” link caught my attention in particular.</li> <li>I haven’t read this piece in full, but I bookmarked “<a href="https://www.bbc.co.uk/future/article/20261023-how-solar-became-bigger-than-nuclear">'It's offensively cheap': How solar power is quietly becoming bigger than nuclear</a>” so I could link to it. Quoting from the piece: “By 2030, the IEA thinks solar power generation will have reached double that of 2025's levels, with solar overtaking hydro to become the world's third-largest electricity source.”</li> </ul> <p><em>Thank you for reading! <a href="https://jamesg.blog/email">My inbox is open</a> if you have any recommendations or ideas that follow from this weeknote.</em></p> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a53daa675859e811',t:'MTc5MzU2NTExMw=='};var l=window.parent.location,o;try{o=new URL(l.origin).origin}catch(e){try{o=new URL(new URL(l.href).origin).origin}catch(e){o=''}}var u='/cdn-cgi/challenge-platform/scripts/jsd/main.js?ray=a53daa675859e811',a=document.createElement('script');a.src=o?new URL(u,o).href:u;document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://artemis.jamesg.blog">Artemis</a> <a class="tag" href="https://breadandpuppet.org/cheap-art/why-cheap-art-manifesto">Why Cheap Art manifesto</a> <a class="tag" href="https://dostoynikov.bearblog.dev/virtual-museum-for-my-wifes-artworks/">Virtual museum for my wife's artworks</a> <a class="tag" href="https://en.wikipedia.org/wiki/Syncategorematic_term">syncategorematic term</a> <a class="tag" href="https://francescrossley.com/links-fun-projects-joy-hope-community-and-more/">last edition</a> <a class="tag" href="https://jamesg.blog/2026/09/05/creative-web-guide-zine">A Creative’s Guide to Personal Websites</a> <a class="tag" href="https://jamesg.blog/email">My inbox is open</a> <a class="tag" href="https://lists.w3.org/Archives/Public/www-talk/1993Apr/0035.html">Guido van Rossum writes a web robot that "tries to map out the entire web", distributed along with python 0.9.8</a> <a class="tag" href="https://medienbaecker.com/articles/number-go-up">Number go up</a> <a class="tag" href="https://pointinthecloud.com/">Colin</a> <a class="tag" href="https://writingmonth.org/">Writing Month</a> <a class="tag" href="https://www.afropoets.net/roberthayden2.html">Full Moon</a> <a class="tag" href="https://www.bbc.co.uk/future/article/20261023-how-solar-became-bigger-than-nuclear">'It's offensively cheap': How solar power is quietly becoming bigger than nuclear</a> <a class="tag" href="https://www.gutenberg.org/files/29433/29433-h/29433-h.htm">Ralph Waldo Emerson’s Nature</a> <a class="tag" href="https://www.w3.org/blog/2026/historical-www-talk-archives-made-complete/">Historical www-talk archives made complete</a> <a class="tag" href="https://www.youtube.com/watch?v=2P-uLAQ9FCI">Soon You’ll Get Better</a> <a class="tag" href="https://www.youtube.com/watch?v=P8sj_MrjXl4">This cover of Bon Iver’s 715 Creeks.</a> <a class="tag" href="https://www.youtube.com/watch?v=UaQ3VGeQ8Uw">Long Distance Love</a> <a class="tag" href="https://www.youtube.com/watch?v=rTVQkeARBFw">Bon Iver’s Perth, performed by the Coastal Sound Youth Choir: Indiekör 2016</a> in their season - James' Coffee Blog https://jamesg.blog/2026/11/01/in-their-season 2026-11-01T00:00:00.000Z James' Coffee Blog <p>The leaves are in their “flying season".<br/> Coating the skies in colour, brilliantly.</p> <p>The trees are in their “wintering season".<br/> Branches bearing and silvering, beautifully.</p> <p>The sunrises are in their “November season".<br/> Pink comes later in the day, unpredictably.</p> <p>Leaves, trees, sunrises and all, perpetually<br/> Delighting day, cyclically.</p> Emacs live new Halloween theme for ‘ef-themes’ at 2026-10-31 14:00 Europe/Athens - Protesilaos Stavrou: Master feed with all updates https://protesilaos.com/codelog/2026-10-31-emacs-live-ef-themes-halloween/ 2026-10-31T00:00:00.000Z Protesilaos Stavrou: Master feed with all updates <p>[ The stream will be recorded. You can watch it later. ]</p> <p>This is a spontaneous live stream. I plan to develop at least one new theme for my ‘ef-themes’ package which will be in the spirit of Halloween. Depending on my progress, I will do two themes, actually.</p> <p>I will keep the chat open, in case there are any questions related to this or anything else—I always answer everything.</p> <h2>About the <code class="language-plaintext highlighter-rouge">ef-themes</code></h2> <p>The <code class="language-plaintext highlighter-rouge">ef-themes</code> are a collection of light and dark themes for GNU Emacs that provide colourful (“pretty”) yet legible options for users who want something with a bit more flair than the <code class="language-plaintext highlighter-rouge">modus-themes</code> (also designed by me).</p> <p>Starting with version <code class="language-plaintext highlighter-rouge">2.0.0</code>, the <code class="language-plaintext highlighter-rouge">ef-themes</code> are built on top of the <code class="language-plaintext highlighter-rouge">modus-themes</code>. This means that all customisation options of the Modus themes apply to the Ef themes. Same for all Modus commands that load a theme. Enable <code class="language-plaintext highlighter-rouge">ef-themes-take-over-modus-themes-mode</code> to set up this arrangement (or enable <code class="language-plaintext highlighter-rouge">modus-themes-include-derivatives-mode</code> instead to blend Ef and Modus into one collection).</p> <ul> <li>Package name (GNU ELPA): <code class="language-plaintext highlighter-rouge">ef-themes</code></li> <li>Official manual: <a href="https://protesilaos.com/emacs/ef-themes">https://protesilaos.com/emacs/ef-themes</a></li> <li>Change log: <a href="https://protesilaos.com/emacs/ef-themes-changelog">https://protesilaos.com/emacs/ef-themes-changelog</a></li> <li>Sample pictures: <a href="https://protesilaos.com/emacs/ef-themes-pictures">https://protesilaos.com/emacs/ef-themes-pictures</a></li> <li>Git repositories: <ul> <li>GitHub: <a href="https://github.com/protesilaos/ef-themes">https://github.com/protesilaos/ef-themes</a></li> <li>GitLab: <a href="https://gitlab.com/protesilaos/ef-themes">https://gitlab.com/protesilaos/ef-themes</a></li> </ul> </li> <li>Backronym: Eclectic Fashion in Themes Hides Exaggerated Markings, Embellishments, and Sparkles.</li> </ul><hr> <p> 🔷 Consider <a href="https://protesilaos.com/donations/">making a donation</a>. </p> Morning - James' Coffee Blog https://jamesg.blog/2026/10/31/morning 2026-10-31T00:00:00.000Z James' Coffee Blog <p>A golden glow peeked through the edges of the curtains. <em>What colour is the sky this morning?</em>, I wondered, knowing in the back of my mind that the colours may only be there for a few more minutes – such is the pace of the sunrise. No moment can be taken for granted. I opened the curtains and saw a salmon-esque glow in the sky: not quite pink, but not quite orange: a mix of both colours. The sun was rising in the opposite direction, at the stage where the whole landscape seems transformed by ephemeral colours.</p> <p>I later thought about how the landscape is always changing with the day – the sunrise on a relatively clear day like this morning’s, where the sky was only dotted with clouds, brought forth the aforementioned pink-ish colour, and golden colours, too. Trees not yet touched by the sunlight had a faint patina, as if they were in a Renaissance painting that had long since aged. But these trees were real, right in front of me, bathing in the rhythms of the day.</p> <p><em>If only I could describe the trees with the same precision of a painting.</em></p> <p>Was that an eagle, soaring through the field? I haven’t seen one as long as I could remember. The interlaying golden light rises from the distance; the streams in the valley were woken on their own accord, always flowing, for the sparkling sunlight has not shone on them yet. I watched the landscape with wonder, as I always do.</p> <p style="text-align: center;">⁂ ⁂ ⁂</p> <p>I went on a long walk today, to make up for the time lost from last weekend where I stayed mostly indoors to weather the storm. The last week has been one of missed routines and reminding myself that <em>this too shall pass.</em> While last night I sat by my piano playing sad songs, later resting my tired head between my arms on top of the keys, this morning I woke up with newfound energy and vigour. I can never remember exactly how I get better when I feel down, but going out for a walk surely helped.</p> <p><em>The morning sky ushered forth darkness’ bye.</em></p> <p>In the park, I walked on wood chips sprinkled with yellow trees under relatively low canopies. The path on which I walked was only meters away from the concrete one with which I was more familiar, but I wanted to feel something new under my feet – to get closer to the ground; to feel whether the wood chips would be softer than the concrete. Although I was so close to the concrete path, what was ahead was different, the sounds and sensations of the ground were different; the view of the sky, intermediated by low hanging yellow and orange and green leaves, is new.</p> <p>I walked for miles, finding a rhythm that meant I was walking up the hilly streets faster than I expected. At one point, I stopped at a gallery window to admire an artist whose works depicted landscapes over the sea. The pink and orange and blue colours were breathtaking, the kind of works that stop you in their tracks. The gallery was one where works were for sale. It makes me think about how much I love that there are still new artists making works. I don’t know if the works I saw today were new, but they did feel more contemporary, capturing the world in a different way to pieces I have seen in museums.</p> <p><em>A man walking down the street wore a shirt that caught my eye. “Creatives are the new athletes.”</em></p> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a5339f26abb490cb',t:'MTc5MzQ1OTc5NA=='};var l=window.parent.location,o;try{o=new URL(l.origin).origin}catch(e){try{o=new URL(new URL(l.href).origin).origin}catch(e){o=''}}var u='/cdn-cgi/challenge-platform/scripts/jsd/main.js?ray=a5339f26abb490cb',a=document.createElement('script');a.src=o?new URL(u,o).href:u;document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script> Rudimentary Lathe comes out of retirement for the 3rd time - Baty.net https://baty.net/posts/2026/10/rudimentary-lathe-comes-out-of-retirement-for-the-3rd-time/ 2026-10-30T14:57:31.000Z Baty.net <p>I miss when a bunch of us weirdos overshared on our TiddlyWikis nearly every day. Most are gone or unmaintained now. Can we bring them back? I'll start: <a href="https://rudimentarylathe.org/">rudimentarylathe.org</a></p> <!-- more --> <p>Nearly 5,000 notes going back to 2018, and man oh man, at least 4,800 of them are an embarrassment. I should keep this stuff to myself, but that horse left the barn long ago.</p> <p>We used to write "TiddlyMails" to each other (I don't think we actually called them that). I'd write a note that simply mentioned someone with their own wiki. They'd read it, and write a note on their wiki with a link back and a title something like: "Re: That thing you wrote". It was completely manual and done without pings or notifications of any kind. So fun!</p> <p>If you have a similar wiki, let me know. I'd love to visit!</p> <p><a href="https://tiddlywiki.com/">TiddlyWiki</a> is more than 20 years old and still a miracle to me.</p> <p><a href="mailto:jack@baty.net?subject=[Baty.net] Re: Rudimentary%20Lathe%20comes%20out%20of%20retirement%20for%20the%203rd%20time">✍️ Reply by email</a></p> Emacs live refinements for Denote at 2026-10-30 14:45 Europe/Athens - Protesilaos Stavrou: Master feed with all updates https://protesilaos.com/codelog/2026-10-30-emacs-live-denote-refinements/ 2026-10-30T00:00:00.000Z Protesilaos Stavrou: Master feed with all updates <p>[ The stream will be recorded. You can watch it later. ]</p> <p>This is a spontaneous live stream that will start in ~35 minutes. I am going to work on my <code class="language-plaintext highlighter-rouge">denote</code> package for Emacs. The plan is to review some functionality and improve certain edge cases where things can go wrong. This is the sort of work that improves the quality of a package: it does not introduce anything with a “wow” factor, but it contributes to a nicer day-to-day experience.</p> <p>I will keep the chat open, in case there are any questions related to this or anything else—I always answer everything.</p> <h2>About Denote</h2> <p>Denote is a simple note-taking tool for Emacs. It is based on the idea that notes should follow a predictable and descriptive file-naming scheme. The file name must offer a clear indication of what the note is about, without reference to any other metadata. Denote basically streamlines the creation of such files while providing facilities to link between them.</p> <p>Denote’s file-naming scheme is not limited to “notes”. It can be used for all types of file, including those that are not editable in Emacs, such as videos. Naming files in a consistent way makes their filtering and retrieval considerably easier. Denote provides relevant facilities to rename files, regardless of file type.</p> <p>[ Further down on this list I include more of my Denote-related packages. ]</p> <ul> <li>Package name (GNU ELPA): <code class="language-plaintext highlighter-rouge">denote</code></li> <li>Official manual: <a href="https://protesilaos.com/emacs/denote">https://protesilaos.com/emacs/denote</a></li> <li>Change log: <a href="https://protesilaos.com/emacs/denote-changelog">https://protesilaos.com/emacs/denote-changelog</a></li> <li>Git repositories: <ul> <li>GitHub: <a href="https://github.com/protesilaos/denote">https://github.com/protesilaos/denote</a></li> <li>GitLab: <a href="https://gitlab.com/protesilaos/denote">https://gitlab.com/protesilaos/denote</a></li> </ul> </li> <li>Video demo: <a href="https://protesilaos.com/codelog/2022-06-18-denote-demo/">https://protesilaos.com/codelog/2022-06-18-denote-demo/</a></li> <li>Backronyms: Denote Everything Neatly; Omit The Excesses. Don’t Ever Note Only The Epiphenomenal.</li> </ul><hr> <p> 🔷 Consider <a href="https://protesilaos.com/donations/">making a donation</a>. </p> Thursday, October 29, 2026 - Baty.net https://baty.net/journal/29Oct26/ 2026-10-29T11:16:49.000Z Baty.net <figure><img src="https://baty.net/img/2026/20261029-R0004495.webp" alt="Macro of Corona typewriter shift and shift lock keys"><figcaption>Springs!</figcaption></figure><p>When it comes to note-taking software, I prioritize usefulness over longevity. I prefer plain text (e.g. .org and .md files), I prefer having both, but I'm not going to reject an app that makes my notes useful today, due to some kind of functional "lock-in".</p> <hr /> <p>I think I need to teach Claude about TiddlyWiki...and Tinderbox.</p> <hr /> <p><a href="https://www.technologyreview.com/2026/10/20/1145399/emacs-turns-50/">EMACS turns 50 | MIT Technology Review</a></p> <p>Wow, that's a long time.</p> <hr /> <p><a href="mailto:jack@baty.net?subject=[Baty.net] Re: Thursday%2C%20October%2029%2C%202026">✍️ Reply by email</a></p> A whimsical CSS :target design for headings - James' Coffee Blog https://jamesg.blog/2026/10/29/whimsical-css-target-design-headings 2026-10-29T00:00:00.000Z James' Coffee Blog <style media="(prefers-color-scheme: dark)">pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #49483e } .highlight { background: #272822; color: #F8F8F2 } .highlight .c { color: #959077 } /* Comment */ .highlight .err { color: #ED007E; background-color: #1E0010 } /* Error */ .highlight .esc { color: #F8F8F2 } /* Escape */ .highlight .g { color: #F8F8F2 } /* Generic */ .highlight .k { color: #66D9EF } /* Keyword */ .highlight .l { color: #AE81FF } /* Literal */ .highlight .n { color: #F8F8F2 } /* Name */ .highlight .o { color: #FF4689 } /* Operator */ .highlight .x { color: #F8F8F2 } /* Other */ .highlight .p { color: #F8F8F2 } /* Punctuation */ .highlight .ch { color: #959077 } /* Comment.Hashbang */ .highlight .cm { color: #959077 } /* Comment.Multiline */ .highlight .cp { color: #959077 } /* Comment.Preproc */ .highlight .cpf { color: #959077 } /* Comment.PreprocFile */ .highlight .c1 { color: #959077 } /* Comment.Single */ .highlight .cs { color: #959077 } /* Comment.Special */ .highlight .gd { color: #FF4689 } /* Generic.Deleted */ .highlight .ge { color: #F8F8F2; font-style: italic } /* Generic.Emph */ .highlight .ges { color: #F8F8F2; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #F8F8F2 } /* Generic.Error */ .highlight .gh { color: #F8F8F2 } /* Generic.Heading */ .highlight .gi { color: #A6E22E } /* Generic.Inserted */ .highlight .go { color: #66D9EF } /* Generic.Output */ .highlight .gp { color: #FF4689; font-weight: bold } /* Generic.Prompt */ .highlight .gs { color: #F8F8F2; font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #959077 } /* Generic.Subheading */ .highlight .gt { color: #F8F8F2 } /* Generic.Traceback */ .highlight .kc { color: #66D9EF } /* Keyword.Constant */ .highlight .kd { color: #66D9EF } /* Keyword.Declaration */ .highlight .kn { color: #FF4689 } /* Keyword.Namespace */ .highlight .kp { color: #66D9EF } /* Keyword.Pseudo */ .highlight .kr { color: #66D9EF } /* Keyword.Reserved */ .highlight .kt { color: #66D9EF } /* Keyword.Type */ .highlight .ld { color: #E6DB74 } /* Literal.Date */ .highlight .m { color: #AE81FF } /* Literal.Number */ .highlight .s { color: #E6DB74 } /* Literal.String */ .highlight .na { color: #A6E22E } /* Name.Attribute */ .highlight .nb { color: #F8F8F2 } /* Name.Builtin */ .highlight .nc { color: #A6E22E } /* Name.Class */ .highlight .no { color: #66D9EF } /* Name.Constant */ .highlight .nd { color: #A6E22E } /* Name.Decorator */ .highlight .ni { color: #F8F8F2 } /* Name.Entity */ .highlight .ne { color: #A6E22E } /* Name.Exception */ .highlight .nf { color: #A6E22E } /* Name.Function */ .highlight .nl { color: #F8F8F2 } /* Name.Label */ .highlight .nn { color: #F8F8F2 } /* Name.Namespace */ .highlight .nx { color: #A6E22E } /* Name.Other */ .highlight .py { color: #F8F8F2 } /* Name.Property */ .highlight .nt { color: #FF4689 } /* Name.Tag */ .highlight .nv { color: #F8F8F2 } /* Name.Variable */ .highlight .ow { color: #FF4689 } /* Operator.Word */ .highlight .pm { color: #F8F8F2 } /* Punctuation.Marker */ .highlight .w { color: #F8F8F2 } /* Text.Whitespace */ .highlight .mb { color: #AE81FF } /* Literal.Number.Bin */ .highlight .mf { color: #AE81FF } /* Literal.Number.Float */ .highlight .mh { color: #AE81FF } /* Literal.Number.Hex */ .highlight .mi { color: #AE81FF } /* Literal.Number.Integer */ .highlight .mo { color: #AE81FF } /* Literal.Number.Oct */ .highlight .sa { color: #E6DB74 } /* Literal.String.Affix */ .highlight .sb { color: #E6DB74 } /* Literal.String.Backtick */ .highlight .sc { color: #E6DB74 } /* Literal.String.Char */ .highlight .dl { color: #E6DB74 } /* Literal.String.Delimiter */ .highlight .sd { color: #E6DB74 } /* Literal.String.Doc */ .highlight .s2 { color: #E6DB74 } /* Literal.String.Double */ .highlight .se { color: #AE81FF } /* Literal.String.Escape */ .highlight .sh { color: #E6DB74 } /* Literal.String.Heredoc */ .highlight .si { color: #E6DB74 } /* Literal.String.Interpol */ .highlight .sx { color: #E6DB74 } /* Literal.String.Other */ .highlight .sr { color: #E6DB74 } /* Literal.String.Regex */ .highlight .s1 { color: #E6DB74 } /* Literal.String.Single */ .highlight .ss { color: #E6DB74 } /* Literal.String.Symbol */ .highlight .bp { color: #F8F8F2 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #A6E22E } /* Name.Function.Magic */ .highlight .vc { color: #F8F8F2 } /* Name.Variable.Class */ .highlight .vg { color: #F8F8F2 } /* Name.Variable.Global */ .highlight .vi { color: #F8F8F2 } /* Name.Variable.Instance */ .highlight .vm { color: #F8F8F2 } /* Name.Variable.Magic */ .highlight .il { color: #AE81FF } /* Literal.Number.Integer.Long */ .highlight .nn, .highlight .n{color: light-dark(black, var(--dark-foreground-color)) }</style><style media="(prefers-color-scheme: light)">pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight { background: #f8f8f8; } .highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ .highlight .err { border: 1px solid #F00 } /* Error */ .highlight .k { color: #008000; font-weight: bold } /* Keyword */ .highlight .o { color: #666 } /* Operator */ .highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ .highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ .highlight .cp { color: #9C6500 } /* Comment.Preproc */ .highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ .highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ .highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ .highlight .gd { color: #A00000 } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #E40000 } /* Generic.Error */ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #008400 } /* Generic.Inserted */ .highlight .go { color: #717171 } /* Generic.Output */ .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .highlight .gt { color: #04D } /* Generic.Traceback */ .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008000 } /* Keyword.Pseudo */ .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #B00040 } /* Keyword.Type */ .highlight .m { color: #666 } /* Literal.Number */ .highlight .s { color: #BA2121 } /* Literal.String */ .highlight .na { color: #687822 } /* Name.Attribute */ .highlight .nb { color: #008000 } /* Name.Builtin */ .highlight .nc { color: #00F; font-weight: bold } /* Name.Class */ .highlight .no { color: #800 } /* Name.Constant */ .highlight .nd { color: #A2F } /* Name.Decorator */ .highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ .highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #00F } /* Name.Function */ .highlight .nl { color: #767600 } /* Name.Label */ .highlight .nn { color: #00F; font-weight: bold } /* Name.Namespace */ .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #19177C } /* Name.Variable */ .highlight .ow { color: #A2F; font-weight: bold } /* Operator.Word */ .highlight .w { color: #BBB } /* Text.Whitespace */ .highlight .mb { color: #666 } /* Literal.Number.Bin */ .highlight .mf { color: #666 } /* Literal.Number.Float */ .highlight .mh { color: #666 } /* Literal.Number.Hex */ .highlight .mi { color: #666 } /* Literal.Number.Integer */ .highlight .mo { color: #666 } /* Literal.Number.Oct */ .highlight .sa { color: #BA2121 } /* Literal.String.Affix */ .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ .highlight .sc { color: #BA2121 } /* Literal.String.Char */ .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ .highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ .highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ .highlight .sx { color: #008000 } /* Literal.String.Other */ .highlight .sr { color: #A45A77 } /* Literal.String.Regex */ .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ .highlight .ss { color: #19177C } /* Literal.String.Symbol */ .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #00F } /* Name.Function.Magic */ .highlight .vc { color: #19177C } /* Name.Variable.Class */ .highlight .vg { color: #19177C } /* Name.Variable.Global */ .highlight .vi { color: #19177C } /* Name.Variable.Instance */ .highlight .vm { color: #19177C } /* Name.Variable.Magic */ .highlight .il { color: #666 } /* Literal.Number.Integer.Long */</style> <style> @font-face { font-family: 'MonaspaceArgon'; src: url('/assets/fonts/MonaspaceArgon-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; } pre, code { font-family: 'MonaspaceArgon', ui-monospace, monospace; } </style> <p>The headings in my blog posts, and some pages, have HTML fragments so that each heading can be linked to. I seldom use this feature, most likely because, at present, I don't have a visual affordance to create such links. Occasionally, though, I find myself wanting to link directly to a heading, so I will make sure there is an anchor.</p> <p>One such occasion was yesterday, when I was adding a new section to my categories page that lists all of my “Advent” series of posts. I placed the Advent heading at the bottom of the page and added an ID so I could target it with a fragment link. <a href="https://jamesg.blog/categories#advent">See the Advent section</a>.</p> <p>By default, unless you see the <code>#advent</code> part in the URL, it was not immediately clear to the viewer to what part of the page I was linking, because the Advent section is at the bottom and the browser doesn't highlight the specific linked section. This encouraged me to make a more explicit highlight for headings. My site mascot now appears, rotated 15 degrees, next to a linked heading, to draw attention to that heading.</p> <p>Here is a screenshot of the feature:</p> <p><img alt='A subheading with the text "Advent" before which my mascot appears, rotated at a 15 degree angle toward the heading' src="https://jamesg.blog/assets/images/whimsicaldesigntarget.png?1"/></p> <p>And here is the code I used to implement the feature:</p> <div class="highlight"><pre><span></span><span class="nt">h2</span><span class="p">:</span><span class="nd">not</span><span class="o">(</span><span class="nt">a</span><span class="o">)</span><span class="p">:</span><span class="nd">target</span><span class="p">::</span><span class="nd">before</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">content</span><span class="p">:</span><span class="w"> </span><span class="nb">url</span><span class="p">(</span><span class="s2">"https://jamesg.blog/assets/mascot/mascot.svg"</span><span class="p">);</span> <span class="w"> </span><span class="k">height</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="kt">rem</span><span class="p">;</span> <span class="w"> </span><span class="k">width</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="kt">rem</span><span class="p">;</span> <span class="w"> </span><span class="k">display</span><span class="p">:</span><span class="w"> </span><span class="kc">inline-block</span><span class="p">;</span> <span class="w"> </span><span class="k">margin-right</span><span class="p">:</span><span class="w"> </span><span class="mf">0.5</span><span class="kt">rem</span><span class="p">;</span> <span class="w"> </span><span class="k">rotate</span><span class="p">:</span><span class="w"> </span><span class="mi">15</span><span class="kt">deg</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>The CSS selector applies to any <code>h2</code> that does not contain an <code>a</code> tag and where the <code>h2</code> is targeted using a HTML fragment. The selector uses the <code>::before</code> pseudo-element to add my site mascot.</p> <p>I got the idea at <a href="https://events.indieweb.org/2026/10/front-end-study-hall-061-saxhIC7ay0IT">Front End Study Hall today</a>. I had an earlier design where the heading would turn yellow and have a black background, but this, while drawing attention to the heading, was more explicit than required. Someone said the word “playful” and I immediately thought “maybe my site mascot could be used here!”</p> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a52461f72957a6b6',t:'MTc5MzMwMDAwMg=='};var l=window.parent.location,o;try{o=new URL(l.origin).origin}catch(e){try{o=new URL(new URL(l.href).origin).origin}catch(e){o=''}}var u='/cdn-cgi/challenge-platform/scripts/jsd/main.js?ray=a52461f72957a6b6',a=document.createElement('script');a.src=o?new URL(u,o).href:u;document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://events.indieweb.org/2026/10/front-end-study-hall-061-saxhIC7ay0IT">Front End Study Hall today</a> <a class="tag" href="https://jamesg.blog/categories#advent">See the Advent section</a> Emacs live refining ‘ef-themes’ Diff/Magit colours at 2026-10-29 18:00 Europe/Athens - Protesilaos Stavrou: Master feed with all updates https://protesilaos.com/codelog/2026-10-29-emacs-live-ef-themes-diff-magit-colors/ 2026-10-29T00:00:00.000Z Protesilaos Stavrou: Master feed with all updates <p>[ The stream will be recorded. You can watch it later. ]</p> <p>This is a spontaneous live stream that starts in ~10 minutes. I will do some work on my <code class="language-plaintext highlighter-rouge">ef-themes</code> package for Emacs. I want to tweak the color values of all themes in order to achieve inter-theme consistency as I noticed some cases that are problematic.</p> <p>I will keep the chat open, in case there are any questions related to this or anything else—I always answer everything.</p> <h2>About the <code class="language-plaintext highlighter-rouge">ef-themes</code></h2> <p>The <code class="language-plaintext highlighter-rouge">ef-themes</code> are a collection of light and dark themes for GNU Emacs that provide colourful (“pretty”) yet legible options for users who want something with a bit more flair than the <code class="language-plaintext highlighter-rouge">modus-themes</code> (also designed by me).</p> <p>Starting with version <code class="language-plaintext highlighter-rouge">2.0.0</code>, the <code class="language-plaintext highlighter-rouge">ef-themes</code> are built on top of the <code class="language-plaintext highlighter-rouge">modus-themes</code>. This means that all customisation options of the Modus themes apply to the Ef themes. Same for all Modus commands that load a theme. Enable <code class="language-plaintext highlighter-rouge">ef-themes-take-over-modus-themes-mode</code> to set up this arrangement (or enable <code class="language-plaintext highlighter-rouge">modus-themes-include-derivatives-mode</code> instead to blend Ef and Modus into one collection).</p> <ul> <li>Package name (GNU ELPA): <code class="language-plaintext highlighter-rouge">ef-themes</code></li> <li>Official manual: <a href="https://protesilaos.com/emacs/ef-themes">https://protesilaos.com/emacs/ef-themes</a></li> <li>Change log: <a href="https://protesilaos.com/emacs/ef-themes-changelog">https://protesilaos.com/emacs/ef-themes-changelog</a></li> <li>Sample pictures: <a href="https://protesilaos.com/emacs/ef-themes-pictures">https://protesilaos.com/emacs/ef-themes-pictures</a></li> <li>Git repositories: <ul> <li>GitHub: <a href="https://github.com/protesilaos/ef-themes">https://github.com/protesilaos/ef-themes</a></li> <li>GitLab: <a href="https://gitlab.com/protesilaos/ef-themes">https://gitlab.com/protesilaos/ef-themes</a></li> </ul> </li> <li>Backronym: Eclectic Fashion in Themes Hides Exaggerated Markings, Embellishments, and Sparkles.</li> </ul><hr> <p> 🔷 Consider <a href="https://protesilaos.com/donations/">making a donation</a>. </p> Wednesday, October 28, 2026 - Baty.net https://baty.net/journal/28Oct26/ 2026-10-28T11:20:47.000Z Baty.net <figure><img src="https://baty.net/img/2026/20261028-art-pens.webp" alt="A couple dozen different pens and markers on my desk"><figcaption>All art supplies...no artist</figcaption></figure><p>I hate to admit this, but I kind of miss Lightroom Classic. It was nice having a very good RAW processor and capable catalog with a large ecosystem and all of my photos in one big library. I've spent so much time trying to concoct a non-Adobe workflow that I've forgotten why I bother. :). Plus, Negative Lab Pro.</p> <hr /> <p><a href="https://orgo.krz.sh/">orgo · orgo</a></p> <blockquote> <p>Org is the source language, not an inconvenient input to be normalised into markdown.</p> </blockquote> <p>I'm pretty content with 11ty right now, but how am I not going to at least <em>try</em> this?l</p> <p><a href="mailto:jack@baty.net?subject=[Baty.net] Re: Wednesday%2C%20October%2028%2C%202026">✍️ Reply by email</a></p> Westenberg on Generative Overload - Baty.net https://baty.net/notes/2026/10/westenberg-on-generative-overload/ 2026-10-28T09:00:49.000Z Baty.net <p><a href="https://www.joanwestenberg.com/p/generative-overload-is-killing-your">Generative Overload Is Killing Your Productivity</a></p> <p>Westenberg:</p> <blockquote> <p>Your AI tools can produce a research brief in 45 seconds. A 1,500-word competitor analysis with tags and backlinks, filed in the right folder before you finish your coffee. A full knowledge graph connecting everything you’ve read this month to everything you saved last quarter.</p> <p>The problem is - you’re not reading any of it.</p> </blockquote> <p><a href="mailto:jack@baty.net?subject=[Baty.net] Re: Westenberg%20on%20Generative%20Overload">✍️ Reply by email</a></p> About the first criticisms - Protesilaos Stavrou: Master feed with all updates https://protesilaos.com/commentary/2026-10-28-first-criticisms/ 2026-10-28T00:00:00.000Z Protesilaos Stavrou: Master feed with all updates <p>This is an entry from my journal. I comment on some important instances of criticism that made me a better person.</p> <hr /> <p>I had no interest in school. In hindsight, I think it is because I never felt that teachers had an interest in me, minus a couple of exceptions. They are there doing a profession that is streamlined and systematised to snuff out the je ne sais quoi that makes us human. Here is a standardised test, followed by another of the same kind, and behold your homework which you should parrot without ever thinking about anything, and so on for years. Then they complain that AI is making us less human when our public education has been breeding robotoids since its inception.</p> <p>With football it was different. The coaches cared about me and all my teammates. Most local clubs were free of charge. Those involved were not getting paid for their efforts. They were effectively doing a community service. The few clubs that charged exorbitant fees for membership were reserved for rich kids. Too bad for them that pay-to-win does not make you a good athlete and too bad for us that pay-to-win is the ethos of our society.</p> <p>One day I decided to show up to a training session of a club that was not too far from my house. They were wearing yellow and green, which I thought was fancy. I took my bicycle and within 30 minutes I was at the pitch were they trained. I only knew two boys from the team, but was not friends with them. The rest were new faces. All pitches I played in during that time were made out of gravel. No grass at all, apart from whatever wild vegetation would grow on the sides.</p> <p>I went there because I had a hunch that sport would suit me well. I did not do it to make friends, even though that happened as a welcome side-effect. I left my bicycle on the side. It was a BMX bike that I got second-hand as a reward for my first paid job. I fixed it myself and was happy to have it.</p> <p>I walked up to the coach. He was a locksmith in his 60s. I was in my early teens. “Hello, can I play?”. By that time, my only involvement with football was through the neighbourhood games I partook in together with the other kids. Those events typically did not have a ball. We would put small stones in a plastic bottle and kick it around, with pieces of clothing functioning as goal posts. Such is the reality of poor people, but also of children making more with less. The coach looked at me and said “start running”.</p> <p>I thought the instructions were unclear. Where should I be running towards? Should I go at maximum speed or not? How does one even run properly? There were no footballs in sight either. Was I at the wrong place? I had so many questions! “Why are you still here?” he said “run until you catch up with the others”. His hand was pointing to the nearby grove. I then learnt that we were supposed to do laps around the wider area. The training session had already started and I was in for a gruelling experience.</p> <p>Catching up with the others was the easy part. I could already keep up with them. Though I soon realised that their technique and knowledge of the game were vastly superior to mine. Boys being boys, the first comments you get are likely to be snarky and aggressive. This is a test of your mettle which already establishes your relationship with the group. A decent percentage of boys socialise with each other through aggression, including violence, something that the polite society which controls public education can neither comprehend nor accept.</p> <p>One of them did the welcoming and others joined in with their laughter: “the nerdling was late from all the studying”. He did not know that my neighbourhood had prepared me for this baptism of fire: “I had to take care of your mum, you little whore” with exclamations from the others. We kept running. That guy ended up becoming one of my best friends. There are many such stories of bromance built on what outsiders will mistake as anti-social behaviour.</p> <p>A society that does not provide males with a controlled outlet for their natural aggression and attendant competitiveness, sport being among the most effective, is a society that creates insecure men and impostors. Already from day one I learnt important lessons for life. My coach effectively told me, through his instructions and remarks, that I cannot afford to overthink things. He compelled me into action. This was followed-up by the test of character that the group of athletic boys had in store for me. What I was already aware of and then understood fully is that if you cannot take harsh words, then you are not prepared for the much harsher realities.</p> <p>The next criticism came in the form of the game itself. I was woefully incompetent. While I could still outrun people, I had no notion of what to do. I lacked situational awareness. My ball control was terrible and the execution was clumsy. I was a liability on the field. Before anyone told me anything, I understood through the activity itself that I was doing it wrong. Then, of course, came the words of the coach who likened me to a goat because I was leaning my head down and charging instead of looking around and acting thoughtfully. He also called me a “mattock” to suggest that I had no grace in my touch.</p> <p>I did not need the coach to tell me anything, though his critique was immensely helpful. The very fact that I acted brought forth the consequences and those established the feedback loop for my subsequent learning. This is the same lesson of not overthinking, as the brain is a lousy instrument for recognising stimuli. Act and let the body show you what it understands very well: friction, fatigue, inaccuracy, ineffectiveness. The limits are right there.</p> <p>My coaches were not sages nor were the lads any more sophisticated than the average boy. We all were, in a sense, dumb. Though we all knew that even in the tiny world of amateur football, there were truths to be had. As such, we were working towards our betterment in one area, whose principles could then be extended to all other walks of life.</p> <p>I was learning quickly because I was doing it wholeheartedly. I do not fool around. Within a few months I was so much better than everyone that my transfer to a stronger team was inevitable. I went to play with the big boys and the young adults, now wearing red and cyan. There I learnt that my achievements were not actually significant. To keep playing, I had to become a monster of competitiveness, to carry a dagger between my teeth, and to sleep with one eye open. “Coach, my spleen hurts” I said on the first training session. “The spleen needs running” he said nonchalantly while I was gasping for breath. I barely made it. This too was criticism that went partly unsaid: you show and so you do not need to tell. The situation alone was informing me what the path forward was and that to proceed I had to work hard. Having someone point out what is otherwise subject to reason is always helpful.</p> <p>Boys can be nasty, though they are children, so their capacity for harm is underdeveloped. But young adult athletes will happily eat you alive if you are a pushover. One of them told me not to enter the pitch because he would cut me down. And, true to his word, he tried to tackle me in a dangerous way as soon as I got the ball. I responded in kind at the next turn of play, flattening him with a crunching challenge, showing him that he being a man and me being a boy was not going to be easy for him. He was still stronger than me, though my attitude was just as unyielding.</p> <p>I knew that failure to cope with this challenge would be the same as asking “why am I even here?”. This is how life is. It speaks the truth and you become a better version of yourself only if you are prepared to accept it and act accordingly. Crisis, else judgement, consists in the understanding of the situation and thus of the appreciation of the conduits to success. To avoid criticism is to not wish to develop situational awareness, to not recognise natural limits, to pretend that you are someone else, and to lead an unfulfilling life under the tyranny of falsehoods.</p> <p>That guy also became a good friend. We already hugged each other after the game. I did not need a guardian, though I got one anyway. Demanding men turn into babies as soon as they find their equal. They only respect what they see, not what you claim. They need other men in their life to keep them honest, to hold them accountable, and to remind them not to engage in bullshit. Men who only have their mother/girlfriend/wife around are missing a vital part of the wider accountability structure. Men need the phalanx, to feel each other’s shoulders, to know that the team is there for them, and to be at all times aware of their own duty to hold the ranks and to keep it real.</p> <p>Fundamentally, criticism is about taking responsibility. If you do not accept criticism, then you essentially are unreliable: you do not recognise your own situation, so you lack the basic training and concomitant intuitions to discern anything out there in a manner that is thorough. You build up the capacity by being honest. You act exactly because this is how you elicit feedback. In effect, you attract the critic, either in the form of a person who understand the field of endeavour better than you, or as a situation that already shows you your weaknesses.</p> <p>One of my coaches was a bus driver, among other handyman jobs. I remember him, on multiple occasions, waiting for us on a rainy day to go to some faraway village for a match. He was a working class fellow who was not getting any money for his efforts. And he was a cartoon character in many ways, due to how funny his sayings and mannerisms were. But we all respected him. I was always inspired by his willingness to show up even in terrible weather conditions. He did not say anything about it, though he was effectively telling us, through his deeds, that we stick to our duty no matter what. This is the unflinching commitment I admire the most. If I say it, I do it. If I am doing it, I keep it that way through thick and thin until its natural completion.</p> <p>There comes a point in life where you outgrow criticism in the area you are involved in. If you generalise it, you eventually escape from criticism altogether. Not because you do not want it anymore, but simply as a function of you not having superiors. Once you climb high enough, the exact altitude becomes irrelevant as you still are way above your baseline and that of the average person. The other mountaineers will see you as their equal, at least in terms of your attitude. They understand that you can figure out the rest without their input.</p><hr> <p> 🔷 Consider <a href="https://protesilaos.com/donations/">making a donation</a>. </p> Trade zines with me! - James' Coffee Blog https://jamesg.blog/2026/10/28/trade-zines-with-me 2026-10-28T00:00:00.000Z James' Coffee Blog <p>Over the last few weeks I have been experimenting with making more zines. I have been having so much fun!</p> <p>If you make zines and would like to trade, please <a href="https://jamesg.blog/email">send me an email</a>! You can also see a few of my downloadable zines in the <a href="https://jamesg.blog/zines">Zines category of my website</a>.</p> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a51ab1682880e88f',t:'MTc5MzE5ODM5OA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://jamesg.blog/email">send me an email</a> <a class="tag" href="https://jamesg.blog/zines">Zines category of my website</a> Tuesday, October 27, 2026 - Baty.net https://baty.net/journal/27Oct26/ 2026-10-27T12:05:17.000Z Baty.net <figure><img src="https://baty.net/img/2026/20261027-levitating-potatoes.webp" alt="Self-portrait while juggling potatoes for some reason."><figcaption>Levitating potatoes, maybe? (2013)</figcaption></figure><p>I need to do something about how or if I continue to participate on Mastodon. The unrelenting flood of discourse around LLM use, although often ethically relevant, is more often intellectually dishonest and exaggerated to the point of silliness. I'm bored by it. Y'all have fun.</p> <hr /> <p>I'd buy an iPhone Duo just to run <a href="https://www.fountaininteractive.com/TinyComputers/">this</a> (via Daring Fireball)</p> <hr /> <p><a href="https://marco.org/2026/10/24/community">Community – Marco.org</a></p> <blockquote> <p>And as I grow, I’m learning to declare fewer absolutes in a complex, imperfect, and constantly changing world.</p> </blockquote> <hr /> <p><a href="mailto:jack@baty.net?subject=[Baty.net] Re: Tuesday%2C%20October%2027%2C%202026">✍️ Reply by email</a></p> Wonders of Web Weaving, Behind the Scenes - James' Coffee Blog https://jamesg.blog/2026/10/27/www-bts 2026-10-27T00:00:00.000Z James' Coffee Blog <p>After twenty-five wonderful conversations, <a href="https://web-weaving.jamesg.blog/">Wonders of Web Weaving</a> is, at least for now, complete. To everyone who has been listening over the last few months: thank you! It has been the greatest pleasure to not have terrific conversations with thoughtful web weavers, and to bring those to you every week.</p> <p>When I started the project, I had a goal in mind: I wanted a show that would be fun to listen to on a train ride. A few weeks ago, when listening to the edited version of the second-to-last episode on a train, I thought to myself <em>I did it!</em></p> <h2 id="behind-the-scenes">Behind the scenes</h2> <p>In terms of how the project came to be, I emailed a mixture of people who I knew and people I didn’t, aiming to invite guests that would, together, represent a wide range of subjects related to the web. It was, and still is, important to me that the project was not a “tech podcast.” The web is about more than technology.</p> <p>Before each conversation, I spent time with the guest’s personal website, scanning pages, looking at blog posts, and deciding on an “anchor” that would be the theme of the episode around which my questions would be oriented. For instance, I spoke about <a href="https://web-weaving.jamesg.blog/16">accessibility with Nic</a>, as Nic has experience with accessibility. I also asked a few standard questions. Over time, I realised all my questions fit an arc: history, present, and future.</p> <p>Through the course of the show, I had discussions on everything from <a href="https://web-weaving.jamesg.blog/22">writing on the web</a> to the “<a href="https://web-weaving.jamesg.blog/19">web revival</a>” to <a href="https://web-weaving.jamesg.blog/13">mathematics</a> to accessibility (ep. <a href="https://web-weaving.jamesg.blog/16">16</a> and <a href="https://web-weaving.jamesg.blog/20">20</a>) to <a href="https://web-weaving.jamesg.blog/2">magazines</a> to <a href="https://web-weaving.jamesg.blog/10">books</a> and more. And, in so doing, I was conscious to ensure that the podcast was not all men talking about technology. There were and are more voices to be heard who have stories I wanted to hear. To that end, I hope I played a tiny part in introducing you to some voices you may not have encountered on the web before.</p> <p>In terms of the actual discussions, in every conversation, I started with five or so minutes of chatting with the guest and introducing them to the recording process, then we recorded for ~40-50 minutes – sometimes for less time, sometimes for more – and, in the remaining time, did wrap up and I communicated the logistics of transcriptions and releases. While I invited guests with the email subject “Podcast interview?”, I was conscious to communicate upfront and early on that I liked the episodes to be “conversations” or “discussions”, not interviews. After all, this project is all about celebrating the web.</p> <p>At the end of every episode, I asked two questions, one on the theme of the future, and the other a “fun question.” As a result of the question about the future – which was some variant on “where do you hope the indie web will be in five years?” – we have a collection of potential futures. Indeed, especially now, I think it is important to imagine what we want the web to be. At this point I will invite you to be a part of the show and ask you: where do you hope the indie web will be in five years?</p> <p>The fun questions went through phases, but eventually coalesced on a roughly-standard question where I asked the guest to share a fun fact about where they are in the world. I thought this was a nice way to end the show: with a smile, with something interesting.</p> <h2 id="concluding-the-show">Concluding the show</h2> <p>At the beginning of the show, I promised myself I would do 10 episodes. Because I was so excited about the project, the number of episodes planned became 15, and then 20, and then at least 25. With that said, I always wanted the show to be limited in its number of episodes because I know that it is challenging to keep something going on for a long time. Having an end number of episodes made it easier to commit to the project.</p> <p>This autumn, I had began a new run of recording, but it was starting to get a bit much in addition to the other priorities I had. There were other episodes lined up, but I thought it best to pause on a high note than try to rush.</p> <p>There may be another season one day, but, at least for now, the project is complete.</p> <h2 id="thank-you">Thank you</h2> <p>To all the people who agreed to spend an hour chatting with me about the web, thank you so much for sharing your thoughts. I want to extend a special thanks to <a href="https://zacharykai.net">Zachary</a> from <a href="https://lunaseeker.com">Lunaseeker Press</a> for transcribing the episodes. I decided I wanted a transcript for every episode from day one, so that people who prefer to read, or for people who cannot listen to a podcast, had a transcript available to them.</p> <p>To everyone listening, thank you for spending time with me and the guests. This project has been a real pleasure to work on. And, if you haven’t listened before, good news: you have <a href="https://web-weaving.jamesg.blog">25 hours of all things indie web</a> to which you can listen!</p> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a510974fae4c8f4d',t:'MTc5MzA5MjQ3Mg=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://lunaseeker.com">Lunaseeker Press</a> <a class="tag" href="https://web-weaving.jamesg.blog">25 hours of all things indie web</a> <a class="tag" href="https://web-weaving.jamesg.blog/10">books</a> <a class="tag" href="https://web-weaving.jamesg.blog/13">mathematics</a> <a class="tag" href="https://web-weaving.jamesg.blog/16">16</a> <a class="tag" href="https://web-weaving.jamesg.blog/16">accessibility with Nic</a> <a class="tag" href="https://web-weaving.jamesg.blog/19">web revival</a> <a class="tag" href="https://web-weaving.jamesg.blog/2">magazines</a> <a class="tag" href="https://web-weaving.jamesg.blog/20">20</a> <a class="tag" href="https://web-weaving.jamesg.blog/22">writing on the web</a> <a class="tag" href="https://zacharykai.net">Zachary</a> Wonders of Web Weaving, Episode 25 - James' Coffee Blog https://jamesg.blog/2026/10/27/www-25 2026-10-27T00:00:00.000Z James' Coffee Blog <p><a href="https://web-weaving.jamesg.blog/25">The twenty-fifth episode of Wonders of Web Weaving is out</a>:</p> <blockquote> <p>In Episode 25, the final episode of Wonders of Web Weaving (at least for now!), I chat with <a href="https://emgoto.com">Emma</a>, the author of <a href="https://emgoto.com">emgoto.com</a> about, among other things, blogging about coffee and hiking, the idea of a "hobby blog", projecting posts onto a map, and more.</p> </blockquote> <p>I hope you enjoy the episode!</p> <p><a href="https://web-weaving.jamesg.blog/subscribe/" rel="noreferrer"><em>Wonders of Web Weaving also has an RSS feed</em></a><em> you can use to follow along from wherever you get your podcasts.</em></p> <a class="tag" href="https://emgoto.com">Emma</a> <a class="tag" href="https://emgoto.com">emgoto.com</a> <a class="tag" href="https://web-weaving.jamesg.blog/25">The twenty-fifth episode of Wonders of Web Weaving is out</a> <a class="tag" href="https://web-weaving.jamesg.blog/subscribe/">Wonders of Web Weaving also has an RSS feed</a> Poem: As robins do - Protesilaos Stavrou: Master feed with all updates https://protesilaos.com/poems/2026-10-27-as-robins-do/ 2026-10-27T00:00:00.000Z Protesilaos Stavrou: Master feed with all updates <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Proximate though unreachable against the Troodos green stark reminder you gave beautifully as robins do of autumn halfway gone </code></pre></div></div><hr> <p> 🔷 Consider <a href="https://protesilaos.com/donations/">making a donation</a>. </p> Monday, October 26, 2026 - Baty.net https://baty.net/journal/26Oct26/ 2026-10-26T18:44:19.000Z Baty.net <figure><img src="https://baty.net/img/2026/20261026-weed-bin.webp" alt="Overflowing weed bin in early morning"><figcaption>That time of year.</figcaption></figure><p>Someone on <a href="https://quxnet.net/">quxnet</a> had their <a href="https://geminiprotocol.net/">Gemini</a> capsule listed, so I opened <a href="https://gmi.skyjake.fi/lagrange/">Lagrange</a> for the first time in a while. Gemini space is so calm and consistent! On a whim, I set up my own server. It's at <strong><a href="gemini://gemini.baty.net">gemini://gemini.baty.net</a></strong>. I'm not going to do any sort of HTML-proxying. Everything there is gemtext only.</p> <hr /> <p><a href="mailto:jack@baty.net?subject=[Baty.net] Re: Monday%2C%20October%2026%2C%202026">✍️ Reply by email</a></p>