~hedy's blogroll - BlogFlockThe blogroll listed on my website.
https://home.hedy.dev/blogroll/2026-02-19T23:58:34.544ZBlogFlockProtesilaos Stavrou: Master feed with all updates, Seirdy, ~hedy, erock, James' Coffee Blog, Manuel Moreale RSS Feed, Sloum, Ploum.net, Baty.netAn incomplete list of things I don’t have - Manuel Moreale RSS Feedhttps://manuelmoreale.com/@/page/qbpefme5ogqszdkp2026-02-19T18:15:00.000Z
<p>Hair. A nice beard. Savings. Debt. A house. Subscriptions to video streaming services. A piece of forest. Kids. A wife. A husband. Hands without scars. Arms without scars. Legs without scars. A face without scars. A monthly salary. Paid vacations. Happiness. Things I’m proud of. A normal dog. Social media profiles. Investments. Plans for the future. Plans for the present. Plans for the past. A camera. Concrete goals. Wisdom. Ai bots. Ai companions. Ai slaves. Fancy clothes. Colognes. Fame (although I am quite hungry). Faith. Horses in the back. 99 problems. Enlightenment. A daily routine. Willingness to write long posts.</p> <hr>
<p>Thank you for keeping RSS alive. You're awesome.</p>
<p><a href="mailto:hello@manuelmoreale.com">Email me</a> ::
<a href="https://manuelmoreale.com/guestbook">Sign my guestbook</a> ::
<a href="https://ko-fi.com/manuelmoreale">Support for 1$/month</a> ::
<a href="https://manuelmoreale.com/supporters">See my generous supporters</a> ::
<a href="https://buttondown.email/peopleandblogs">Subscribe to People and Blogs</a></p>
A perfect day - James' Coffee Bloghttps://jamesg.blog/2026/02/19/a-perfect-day/2026-02-19T17:42:39.000Z
<p><a href="https://dead.garden"><em>Jo</em></a><em> and I are trading blog post titles. The title Jo chose for me is “A perfect day.”</em></p><p><em>What would my perfect day look like?</em> Reflecting on this question, I started to think about the days that have brought me the most joy in the past. I realised that the days that stick out in my memory as being really good were all unique. I had <em>so much fun</em> at the Eras tour. I have loved my days spent in art galleries (and the memories of wishing for just one more hour).</p><p>This made me think about how I'm not sure there could ever be a perfect day. No day could fit all the things I love in, nor would this be desirable. All my days fuel all my other days: my days in galleries fuel one part of me, my days talking about technology fuel another part.</p><p>With that said, I want to try and write something about what a perfect day would look like.</p><p>I first need to share a little bit about how I like to move through the days. I like to plan a few things that I want to do in a day, but I don’t tie myself to the plan. My plan may be as simple as <em>I need to write that essay today</em> or, especially in the case when I am on holiday, a list of things I want to do. I like to have breathing room in a day to make room for the unexpected: the things I couldn’t have planned for but that transform the day.</p><p>My perfect day would begin with breakfast. Breakfast is the most important meal of the day. If I could choose an ideal breakfast, it would be waffles and diner coffee at a diner. I’d love to have a conversation with someone sitting nearby; to hear a story to start my day. After breakfast I would want to do something with friends. A morning spent making web pages with friends and chatting about how we can make the web better would be a great time. I love hearing and talking through ideas.</p><p>For the afternoon, I think I’d want to go to an art gallery that I have never been to before. I’d prefer to do this by myself because I like to wander and go at my own pace. When I enter an art gallery I usually look at the exhibits closest to the entrance first and then keep exploring; I occasionally use maps, but I much prefer seeing what stands out by going from room to room. I would especially appreciate an art tour at some point in the afternoon. I enjoy art tours.</p><p>I would want to fit in walks throughout my day. It could be walking with friends, walking to get from lunch to the art gallery – whatever kind of walking I can fit in the day.</p><p>After leaving the art gallery – which would probably be at about 5pm or 6pm – I’d have dinner, either Italian food if I want something I know I’ll enjoy, or, if I’m feeling more adventurous, a cuisine I have never tried before. For the rest of the evening, I’d appreciate wandering, ideally with a friend but I’d also be happy to be by myself. I would want to watch the sunset from wherever I could, maybe by the river. I haven’t said where my perfect day would be up until now, but it would probably be in a city to allow for both the diner and the art gallery.</p><p>I would want to keep walking and spend time with a friend until we were tired and then I’d get some sleep.</p><p>Remembering my affinity for serendipity, my perfect day might be completely transformed half-way through by something I didn’t expect: meeting someone new, finding a place I have never been before that piques my interest while walking, feeling eager to relax and so spending the afternoon reading a book. I couldn’t plan a perfect day because my perfect day would have to have a degree of serendipity. But, what I have said above is a blueprint. If anything, writing this brought me a bit of warmth on a chilly winter day.</p>
Scotland’s brightness levels - James' Coffee Bloghttps://jamesg.blog/2026/02/19/scotlands-brightness-levels/2026-02-19T17:21:45.000Z
<p><em>I am trading blog post titles with </em><a href="https://artlung.com"><em>Joe</em></a><em>. He gave me a few suggestions for what to write about. I chose the title “Scotland’s brightness levels”.</em></p><p>Place is a recurring theme when I am writing. Where am I? What do I see? What I write about Nature is what I see here in Scotland. In the back of my mind, I occasionally think: how is the climate in other places? How is the weather in Australia right now? What are the seasons like in different places? <em>I wonder.</em></p><p>As I write it is a cloudy day. We have had persistent cloudy weather for the last few weeks here, with the occasional interval of two or so days of sunshine. It is in those intervals that I realise how beautiful the weather can be and is here: the clear skies are wonderful, the warm colour of sunsets bring me a lot of joy, the snow-covered hills are magical.</p><p>It gets dark in winter. The sun might rise after 8am and set before 5pm. Two years ago I learned we get a sufficiently low amount of sunlight in winter that our health service recommends vitamin D supplements. I started taking them and they helped take away some of the low feelings that come at this time of year.</p><p>It might get dark in winter, but I always think about how I can see the sunset earlier, and how beautiful a clear winter sky is. While I don’t like the cold, there is something special about being out on a winter morning where there are almost no clouds in the sky, you can see your breath, and the world feels still for just a little moment. Indeed, winter, like all seasons, has its beauties.</p><p>We had a break from the clouds earlier this week, which was most delightful. The natural light was once again shining through the windows, casting a glow on the inside of the room. <em>The days will get brighter from here.</em> I think I wrote that hope was my favourite virtue in my <a href="https://jamesg.blog/2026/02/12/prousts-questionnaire">Proust’s Questionnaire</a> response because, at this time of year, a little bit of hope goes a long way. I hope for clear weather.</p><p>The shortest day passed in December. Since then, we get more daylight by the day. I have noticed it when I wake up. The daylight makes me excited to open the curtains. The especially cloudy weather of late has me particularly aware of the beauty of opening the curtains in the morning and seeing the yellow glow of the sun on the horizon.</p><p><em>The days will get brighter from here.</em></p><p>When I thought about Scotland’s brightness levels, two things came to mind: first, the current weather (winter); second: the so-many days I have spent enjoying the sunshine. Scotland is bright in my mind even on the dull days.</p><p>While Scotland may have a reputation for being rainy, the sunny days are truly special (and, to be honest, I don’t think Scotland is especially rainy, despite writing this after a period of persistent rain). I remember vividly the sunny days that allowed for wonderful walks in the park, the days sitting outside with family, the days where the cool breeze puts a spring in my step as I go on a longer walk that is possible in the sunnier weather. </p><p>I am writing on a cold and cloudy day, fuelled by memories of the moments when the bright sunlight casts through the windows and makes everything more radiant. In the back of my mind, I have a feeling of excitement: the brighter days of Spring are only a few weeks away. Oh! how much I love the Spring.</p>
Rhythm - James' Coffee Bloghttps://jamesg.blog/2026/02/18/rhythm/2026-02-18T15:44:35.000Z
<p>I have been thinking about the rhythm of my writing recently. I wrote in my drafts:</p><blockquote>I have spent much of this evening writing. I started by working on a draft of a post about clouds that I wrote on my phone using Apple Notes while waiting for the bus. I then explored a few more ideas that were in my notes. This has me thinking about how when I take more notes I usually end up writing more prose too. Also, I continually observe that when I start writing I love to keep going. As with many things, getting started is the hurdle.</blockquote><p>I often write in “bursts” – a few posts in one day, then no posts for a little while. Sometimes I am more consistent than others. I have had preferred times for writing in the past – like trying to write a blog post before dinner, or writing late in the evening – but I don’t have a schedule in mind. I write when I feel like I have something to write. Things seem to come easier when I have already started writing.</p><p>This has me thinking about the rhythm between posts, too. I wrote <a href="https://jamesg.blog/2026/02/13/snowy-afternoon">Snow</a> the day before <a href="https://jamesg.blog/2026/02/14/clear-sky/">Clear sky</a>. Between those two moments I saw snow falling with an intensity I hadn’t seen in over a year then, the next day, a clear sky. Each post documents a moment; together, they document a time.</p><p>There was a time when I felt like I “should” write on particular cadences, but I don’t like to force things. It is also for this reason I have several posts in my head that I would one day like to write – what “private posts” could look like on an open web, for example – but haven’t written yet. I need time to <a href="https://www.nplusonemag.com/online-only/online-only/not-writing/">not write</a>.</p><p>I don’t know why I can write more when I have gotten started. Perhaps it’s a mix of the joy of putting words on the page and the flow I enter when I write. Or maybe writing about one thing does help my brain figure out how to write about other things. I’m not sure! With that said, there is one thing I can say for sure: I feel that <a href="https://jamesg.blog/2025/05/14/rhythm">writing has a rhythm</a>.</p>
IndieWeb wiki pages I really like - James' Coffee Bloghttps://jamesg.blog/2026/02/18/indieweb-wiki-pages-i-really-like/2026-02-18T15:14:41.000Z
<p>I visit the <a href="https://indieweb.org">IndieWeb wiki</a> almost every day. The wiki is maintained by the IndieWeb community, documenting everything from <a href="https://indieweb.org/create">interfaces for creating posts</a> to <a href="https://indieweb.org/POSSE">POSSE</a>.</p><p>I was thinking that, like all wikis, there are pages that are almost “hidden gems” in the sense that, while they are on the web, they may not be the first thing you look for, or may be interesting to an audience greater than that of the wiki. I then thought: I should make a page that lists some of the wiki pages I really like so I can share the links I have found particularly valuable to a greater audience.</p><p>Some of the links below I have included because they are great links that I think should have broader recognition outwith the community (i.e. the community code of conduct); others are included because they are a bit more obscure than the well-known pages like <a href="https://indieweb.org/Webmention">Webmention</a> but equally interesting.</p><ul><li><a href="https://indieweb.org/publics">Publics</a>: “publics are the combined set of people who make up the readership or audience of a <a href="https://indieweb.org/post">post</a>.”</li><li><a href="https://indieweb.org/life_happens">Life happens</a>: This was the first context in which I had heard the term “life happens.” Now it is part of my vocabulary.</li><li><a href="https://indieweb.org/code-of-conduct">Code of Conduct</a>: A thoughtfully maintained, “living” page outlining how the community works. </li><li><a href="https://indieweb.org/digital_garden">Digital garden</a>: A fun page with so many links on digital gardening.</li><li><a href="https://indieweb.org/URL_design">URL design</a>: Notes on how to design URLs.</li><li><a href="https://indieweb.org/discovery">Discovery</a>: A list of resources for finding personal sites on the web.</li><li><a href="https://indieweb.org/How_to_set_up_web_sign-in_on_your_own_domain">How to set up web sign in</a>: This link describes what you need to do to sign into the wiki. The sign in process is different from many other sites since you sign in <em>with your domain name</em> (using <a href="https://indieweb.org/IndieAuth">IndieAuth</a>).</li><li><a href="https://indieweb.org/Loqi">Loqi</a>: How the community bot works. Loqi is used extensively to create wiki pages and add links to existing ones. </li><li><a href="https://indieweb.org/IndieWeb_Carnival">IndieWeb Carnival</a>: The hosting schedule is coordinated on this page, a fun example of using wiki to coordinate a community event.</li><li><a href="https://indieweb.org/webactions">webactions</a>: An interesting idea that I want to come back to in the future, not necessarily in the context of like/repost (I don’t like “like” buttons), etc. buttons but more collaborative buttons like editing.</li><li><a href="https://indieweb.org/Front_End_Study_Hall" rel="noreferrer">Front End Study Hall</a>: A wide range of HTML/CSS/JS links are listed on this page which is used as a key point of reference for the Front End Study Hall event.</li><li><a href="https://indieweb.org/ai;dr" rel="noreferrer">ai;dr</a>: Artificial Intelligence; Didn't Read</li></ul><p>Of course, the above list is by no means exhaustive: I have consulted likely hundreds of pages over the course of my web weaving and coding. Many of the pages are quite technical but I have found I have learned a lot by focusing on the places that interest me most.</p><p>The IndieWeb wiki is by no means a complete record of all things indie web – far from it. If anything, the most complete record of all things indie web is the indie web itself – that’s the beauty of the web. With that said, the IndieWeb wiki is a terrific resource with so many links to explore, definitions and explorations of concepts related to the indie web, and screenshots of software designs to peruse, all licensed openly under <a href="https://indieweb.org/IndieWeb:Copyrights">CC0</a>.</p><p>If you are in a community wiki, I’d encourage you to think: what are pages you have found really useful that may be less easy to find? How could you help people find those pages?</p>
<!--kg-card-begin: html-->
<p><a class="u-syndication" href="https://news.indieweb.org/en">Also posted on IndieNews</a></p>
<!--kg-card-end: html-->
Test post - James' Coffee Bloghttps://jamesg.blog/2026/02/17/test-post/2026-02-17T19:45:41.000Z
<p>This is a test post.</p>
Step aside, phone: week 1 - Manuel Moreale RSS Feedhttps://manuelmoreale.com/@/page/ltbpt8aatbhtgq1w2026-02-15T07:05:00.000Z
<p>First weekly recap for this fun life experiment. <a href="https://manuelmoreale.com/thoughts/step-aside-phone">To remind you what this is all about</a>: in order to help Kevin get back to a more sane use of his time in front of his phone, we decided to publicly share 4 weeks of screen time statistics from our phones and write roundups every Sunday. Yes, we’re essentially trying to shame ourselves into being more mindful about our phone usage. Let me tell you, it definitely works.</p>
<hr />
<figure class="media-container" data-template="with"><div class="media-content"><img class="media-img" loading="lazy" src="https://manuelmoreale.com/media/pages/thoughts/step-aside-phone-week-1/93ebf8c75d-1771139138/overview.jpg" style="aspect-ratio:614 / 1333"></div></figure>
<p>Every time I do one of these experiments, I use the first week to prove to myself that this whole phone usage situation is mostly a matter of being mindful about it, and that if I decide that I don’t want to use the phone, well, I will not use it. And it’s not very hard. Monday to Wednesday, I basically almost never picked up my phone from my desk. It was fully charged on Sunday afternoon, and I didn’t plug it in again till Thursday.</p>
<p>I did use it when I was outside for a couple of minor things, but as you can see from the image below, screen time is reporting 9 minutes of total usage for the first 3 days of the week.</p>
<figure class="media-container" data-template="with"><div class="media-content"><img class="media-img" loading="lazy" src="https://manuelmoreale.com/media/pages/thoughts/step-aside-phone-week-1/a24891cb25-1771139137/1-3.jpg" style="aspect-ratio:1000 / 724"></div></figure>
<p>Thursday and Friday, I logged a bit more screen time (had to do a few things that required the use of apps), but also because I started listening to a few podcasts while I was driving. I said I started because one thing I did this week was delete any app that’s related to content consumption from the phone. I think my personal goal for this month-long experiment is going to be to get back to a use of my phone that’s utility-driven and not consumption-focused. The phone should be a tool to do things and not a passive consumption device.</p>
<p>Friday usage spiked, and that’s because I was out on a date, so most of the time spent with the screen on was Google Maps being open while I was in the car. I still tried to be mindful of that, though. I drove about 5 hours back and forth, but I only used Google Maps for a bit more than 1 hour. I also used the browser for the first time this week to purchase a couple of tickets for a museum, and I took a few pictures.</p>
<figure class="media-container" data-template="with"><div class="media-content"><img class="media-img" loading="lazy" src="https://manuelmoreale.com/media/pages/thoughts/step-aside-phone-week-1/e607690ec3-1771139138/4-6.jpg" style="aspect-ratio:1000 / 724"></div></figure>
<p>So this is how the first week went. Not included here is last Sunday—I told Kevin we were going to start this experiment on Monday—but I clocked 11 minutes on that day. Not bad.</p>
<p>Now, one consideration about this first week: in order to push my phone usage this low, I had to move some of my normal phone usage over to my Mac, which is how I managed to basically never touch chat apps on my phone. I know this is pretty much cheating, but it was intentional and something I was planning to do only in this first week, and I will move that screen time back on my phone starting next week.</p>
<p>The goal is to find the right balance after all, and I like the process of pushing it all the way down to the extreme and then bringing it back up to some more sane levels.</p>
<hr />
<p>If you have decided to take part in this experiment, email me a link to your post, and I’ll include it below.</p> <hr>
<p>Thank you for keeping RSS alive. You're awesome.</p>
<p><a href="mailto:hello@manuelmoreale.com">Email me</a> ::
<a href="https://manuelmoreale.com/guestbook">Sign my guestbook</a> ::
<a href="https://ko-fi.com/manuelmoreale">Support for 1$/month</a> ::
<a href="https://manuelmoreale.com/supporters">See my generous supporters</a> ::
<a href="https://buttondown.email/peopleandblogs">Subscribe to People and Blogs</a></p>
A piece of art I would love to see in person - James' Coffee Bloghttps://jamesg.blog/2026/02/14/art-in-person/2026-02-14T14:40:17.000Z
<p><a href="https://britthub.co.uk"><em>Britt</em></a><em> and I are trading blog post titles. The topic Britt chose for me is “A piece of art you would like to see in person”.</em></p><p>One of the many joys of art galleries is that you never know what you might see. A few weeks ago, I was surprised and delighted to encounter the J.M.W. Turner exhibit at the National Gallery of Scotland. I had likely seen Turner’s paintings before, but I didn’t know enough about him to characterise his style. After waiting in line for half an hour or so and starting to glimpse at the paintings, I felt like I was entering a new world. <em>This was painted with watercolour? Turner painted a little bit near where I grew up?</em></p><p>I have fallen in love with many kinds of art because of how easy it is to move from one room to another in an art gallery: to explore the space next to the one you are in to see if there is anything that interests you. I can’t remember why I started going to more art galleries, but I do remember having a preference for Impressionism before thinking <em>I may as well explore another room. I’m already here.</em></p><p>Going to the next room – exploring the periphery – has taken me from medieval art to religious art to landscapes, and led to many areas of interest. My interest sprawled to the extent that now I have to make a commitment to go to the Impressionist section in a gallery if there is one otherwise there is a non-zero chance I will not make it there before the gallery closes. Oh how time flies!</p><p>I don’t have a list of artworks that I would like to see in person. I much prefer to go to a gallery and see what I can find. I suppose, again, the same is true of my experience with the web: I like to explore and see what I can find, starting from the places that I know.</p><p>With that said, there are places I want to go to see art. I especially love Italian art and would love to go to Florence and Venice. I would love to see some of the places I have only seen painted. In Florence, I would especially like to visit the Cathedral and see the famous Baptistry doors by Lorenzo Ghiberti. I studied the doors last year in the part-time art history course I took with the V&A. I’d love to study them up close in person.</p><p>I would also like to see if I can find another painting that evokes the same feelings for me as <a href="https://jamesg.blog/2024/09/23/fernande-with-a-black-mantilla">Fernande with Black Mantilla</a> by Picasso. I don’t know what it is about that painting that has made me spent hours studying it. I suspect, as I write, that the painting, like all works of art, is one of a kind.</p><p>Part of the joy of going to art galleries and artistic places is that I never know what is going to stand out. This, I think, is what makes me lose a day in an art gallery.</p><p><em>Addendum: I would love to see more works by </em><a href="https://en.wikipedia.org/wiki/Berthe_Morisot"><em>Berthe Morisot</em></a><em>, an incredibly skilled painter from the Impressionist era. I would also love to see some of </em><a href="https://www.famsf.org/exhibitions/monet-venice"><em>Monet’s Venice paintings</em></a><em>.</em></p>
Clear sky - James' Coffee Bloghttps://jamesg.blog/2026/02/14/clear-sky/2026-02-14T08:14:25.000Z
<p>I love winter mornings when the sky is clear. Looking out the window, the sky is a clear blue, interspersed with the occasional white cloud so faint that it is almost invisible. The snowy hills look like they are absorbing some of the blue, their hue a mixture of the snow and the sky. The low light casts far across the tops of the silvery trees.</p><p>Before I put my glasses on this morning I looked out the window with excitement. <em>The sky is blue!</em> Since it’s the weekend I lay in a bit, but I knew I wanted to get up soon so that I could see what the horizon was like. The colours in the sky were back: the yellows and pinks of morning horizons, the blue of the sky.</p><p>I have seen the landscape a thousand times, yet, this morning it felt like I was seeing the outdoors with the same degree of excitement as I would have if I were looking out to the trees for the first time. The morning felt brighter. <em>I have to write this down!</em></p><p>Wintry weather is forecast for the coming days: snow and rain and clouds. But today there is a clear sky – one that goes as far as the eye can see. My plans are to stay cosy inside for now and enjoy the sky through the windows. I have a university tutorial later this morning. Maybe I’ll go for a walk later too.</p>
Snow - James' Coffee Bloghttps://jamesg.blog/2026/02/13/snowy-afternoon/2026-02-13T14:15:25.000Z
<p>I wondered if it would snow again this season. The weather has been persistently cloudy, but there has been little snow. Today, the weather changed. Just as I was about to go out for a walk, it started snowing heavily. It has been months since I have seen the snow like I did today: flowing down from the blank white and grey clouds with full intensity. I looked up out the window and revelled in being able to see the icy snowflakes fall from the sky.</p><p>The weather gave me pause about going out for a walk. <em>Should I go out? It will be cold and the ground will be wet.</em> But what if it doesn’t snow again? What if this is my last moment to be out in the snow? I don't have many recent memories out in the snow – winters have tended toward being colder and rainier.</p><p>With various sources of encouragement – reading a message that made me think how lucky I am for snow to be falling at this moment, seeing two people going out for a run in the snow, and being surprised by how cute snow falling on moss looks like up close and eager to be outdoors – I put on my shoes and ventured out. I could always come back if it got too cold.</p><p>Shortly after going outside, memories of childhood came back. Specifically, that moment of excitement of leaving the house to go outside after snow had fallen. I remember during one winter making something of an under-snow igloo. I say “under-snow” because the snow was so high that I was digging under the snow to make a little house. I loved going outside in winter. It turns out that same child-like excitement is still in me. The snow is wonderful.</p><p>As I walked the cold snow blew onto my nose. I started to get colder as the residual warmth from being indoors started to fade away. All of this made me feel alive. <em>I am here, in the snow.</em> I took a selfie to document the moment. <em>On this day, it snowed.</em></p><p>When I got back indoors, I noticed my breath was different to when I left: slower, more relaxed. When I feel awe – especially when looking at paintings – I notice my breath slows a bit and I tend toward deeper breaths, as if I want to use every sense to capture the moment. I don’t know if awe is the right word for how I was feeling in the snow, though. I think I was feeling joy and a connection with Nature, as well as a bit of the cold. I came indoors feeling refreshed, and glad I was able to feel the snow fall.</p>
Adding multiple h-feeds to the same web page - James' Coffee Bloghttps://jamesg.blog/2026/02/13/multiple-h-feeds-same-page/2026-02-13T13:12:03.000Z
<p>I maintain a web page that <a href="https://jamesg.blog/hwc-notes">lists notes from IndieWeb events</a>. Entries are added to the page when notes from meet-ups are archived to the community wiki.</p><p>This web page contains several <code>h-feed</code>s. <code>h-feed</code> is the <a href="https://jamesg.blog/2024/01/10/h-card-how-to">microformats markup that says that the tagged area represents a feed</a>. There is a h-feed for each of several event categories: writing meet-ups, meet-ups in different locations, Front-End Study Hall, and more.</p><p>Every h-feed has a HTML ID that uniquely identifies it. For example, <code>/hwc-notes#hwc-pacific</code> identifies the HWC Pacific notes <code>h-feed</code> on the <code>/hwc-notes</code> web page. <a href="https://granary.io">Granary</a>, the tool I use to convert <code>h-feed</code> into RSS, can recognise the ID fragment and limit its conversion logic to the chosen fragment.</p><p>This means that I can have multiple feeds on the same page, and each feed can have its own URL that people can follow in their web reader. With this approach, I can generate a single HTML document, rather than an RSS feed for each individual document.</p><p>Here is how the <code>/hwc-notes#all</code> feed looks in Artemis, reading from the RSS that Granary generates:</p><img alt='Artemis shows a preview of the "all" feed on the /hwc-notes page.' class="kg-image" loading="lazy" src="https://editor.jamesg.blog/content/images/2026/02/hwcall.png"/><p>And here is how the <code>/hwc-notes#hwc-europe</code> feed looks:</p><img alt='Artemis shows a preview of the "Europe" feed on the /hwc-notes page.' class="kg-image" loading="lazy" src="https://editor.jamesg.blog/content/images/2026/02/hwceurope.png"/><p>Because Granary uses only the entries in the identified h-feed (<code>#all</code>, <code>#hwc-europe</code>) to generate the RSS, the feeds are both different.</p><p>I wanted to document this pattern in case it is useful for anyone. I much prefer the maintenance overhead of generating one HTML document rather than several RSS feeds. I also like being able to offer specific feeds such that anyone who needs the page can request to be updated only when notes from an event they are interested in are added.</p><h2 id="addendum-#1:-url-encoding">Addendum #1: URL Encoding</h2><p>One technical note: it is essential that the source URL is encoded when used with the Granary web application, like:</p><pre><code>https://granary.io/url?input=html&output=rss&url=https%3A%2F%2Fjamesg.blog%2Fhwc-notes%2F%23hwc-europe</code></pre><p>This is important because otherwise the fragment is not picked up.</p><h2 id="addendum-#2:-microformats-parsing">Addendum #2: Microformats parsing</h2><p>If you are using <code>mf2py</code> to parse the microformats on a page, you can use the following code to retrieve only the <code>h-feed</code> for a given fragment:</p><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">mf2py</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">urllib.parse</span><span class="w"> </span><span class="kn">import</span> <span class="n">urlparse</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">"https://jamesg.blog/hwc-notes#writing"</span>
<span class="n">fragment</span> <span class="o">=</span> <span class="n">urlparse</span><span class="p">(</span><span class="n">url</span><span class="p">)</span><span class="o">.</span><span class="n">fragment</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">mf2py</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">url</span><span class="o">=</span><span class="n">url</span><span class="p">)</span>
<span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"items"</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span><span class="p">[</span><span class="s2">"id"</span><span class="p">]</span> <span class="o">==</span> <span class="n">fragment</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="n">items</span><span class="p">)</span>
</pre></div>
<h2 id="syndication">Syndication</h2>
<!--kg-card-begin: html-->
<p><a class="u-syndication" href="https://news.indieweb.org/en">Also posted on IndieNews</a></p><style>.e-content img { width: 100% !important; }</style>
<!--kg-card-end: html-->
Blog management fatigue - Baty.nethttps://baty.net/posts/2026/02/blog-management-fatigue/2026-02-13T11:07:19.000Z<p>D’ya ever grow weary of thinking about blogging and blogging software and blogging workflows and blogging culture? No? Me neither. Not normally, anyway, but it’s happening now.</p>
<p>I’ve been having a blast testing <a href="https://kevquirk.com/">Kev Quirk’s</a> new blogging platform, <a href="https://pureblog.org">Pure Blog</a>. He’s done a great job of nailing the basics. It’s easy and fun to use. So fun, in fact, that I’ve been teetering on using it for this blog at baty.net.</p>
<p>Sometimes I just want a CMS.</p>
<p>Static blogs using Markdown files are great, but I like to post a lot of images, and SSGs make that more difficult. I’ve scripted a few things to help, but nothing beats a nice drag-and-drop UI.</p>
<p>It’s been a relief using Pure Blog for a few days. Here’s the thing, though, once I start considering going back to using a CMS, why not go all the way and use WordPress or Ghost (probably Ghost)? That’s what I’ve been spiraling about for a few days. Am I going to be satisfied with something as simple as Pure Blog, when Ghost has analytics, comments, fediverse integration, etc.? I don’t know, maybe?</p>
<p>If I do decide to change platforms, again, I need to deal with migrating thousands of posts. This is made more difficult by having changed platforms a dozen times, already. My Markdown files have all kinds of slightly different front matter; some YAML, some TOML. Some have “featured” images, some don’t. It’s a mess.</p>
<p>I was considering archiving the baty.net <a href="https://archive.baty.net">again</a> and starting fresh. That feels like crazy talk, but I can’t help thinking about it. Wouldn’t it be nice not lugging all this legacy cruft around? Except, it would break a lot of links. It’s not like my posts are linked to that often, but they <em>are</em> linked to. Seems rude.</p>
<p>Another option is to use one of my other domains. Baty.blog is a good candidate. That’s currently running on <a href="https://blot.im">Blot</a> but I’d <a href="https://blot.baty.net">archived that blog</a> before. There’s always copingmechanism.com.</p>
<p>Thing is, if I don’t continue using baty.net for my primary blog, I’ll lose a ton of readers. Baty.net is my blog, and not many folks are likely to update their RSS feeds just to follow me around. Part of me doesn’t mind, but I don’t love the idea.</p>
<p>You see how it is? I have a love/hate relationship with blogging workflows. My mood changes too often and it ruins each carefully crafted setup. It’s a good thing there’s a love portion of the equation.</p>
<p>Sooo, anyhoo, that’s where my head is, this morning. I’m going to be out for a while today, and when I return I would like to make the call. Stay tuned.</p>
<div id="reply-by-email">
<a
class="reply-by-email"
href="mailto:jack@baty.net?subject=[baty.net] Re: Blog%20management%20fatigue"
data-meta="46736254466c76526e706a664549624e455d711469636e4c406c4f51464972146e706a634717724d4549724e4067715e76626e486e706a666e706d5377777262694d7110696771116b735c576e706d537d497148694e6617457c764b7e6c6e4c401648517e5d715d69637e5d46161448694e665e46166a547d735348694e66507e7376547d77715d755d715d69637e52474d715d69636148694e6617456348577e77715d755d715d69677262694d7110696772666a431919"
>✍️ Reply by email</a
>
</div>What I associate with my name - James' Coffee Bloghttps://jamesg.blog/2026/02/13/what-i-associate-with-my-name/2026-02-13T09:06:43.000Z
<p><a href="https://blog.avas.space" rel="noreferrer"><em>Ava</em></a><em> and I are trading blog post titles. The topic Ava chose for me to write about was “What I associate with my name”.</em></p><p>When I was young, I remember distinctly looking through a kids’ encyclopaedia and finding “James” written in there a few times [1]. I don’t know why that memory is so vivid in my mind, but it is. I think it was surprising to see my first name in a book. I must have been about seven or eight when I was skimming through the encyclopaedia. I would think of the feeling as similar to if you were in the background of a picture someone took. <em>Look, it’s (a part of) me!</em></p><p>Of my full name, I think of my Scottish and Irish roots. I think of generations past and present. An uncle did a genealogy project and found that one side of my family has lived in Scotland for pretty much as far back as he could trace. Maybe there is something there about why I love where I am so much: it has been home not just for me, but for my family for generations. I have never thought about what it means to have roots that run so deep in a place – the serendipity of trading blog post titles is why I am so intrigued by the idea.</p><p>I mainly hear my name said when I am speaking with friends, so hearing “James” usually means I am about to chat with someone or already in conversation – among two of my favourite things. When you’re on a computer, reading my name alongside a message bubble has a different feeling. But hearing your name? “Hi James!” – that is nice. When I hear my name said, I feel present.</p><p>I have also been thinking about my blog name: James’ Coffee Blog. I decided to name my blog <em>James’ Coffee Blog</em> because I liked coffee [2]. Specifically, I have been thinking about what, in hindsight, it means for my blog to be called <em>James’ Coffee Blog.</em> For me it almost implies a degree of separation between my self and my blog. My blog is one part of me. This blog is written by me, but is not all of me.</p><p>My blog, like my name, is a home I am building and discovering, day by day.</p><p>[1]: Admittedly, reading parts of a kids’ encyclopaedia was not enough qualification for me to be able to spell “encyclopaedia” today without spell-check!</p><p>[2]:<strong><em> </em></strong>My nickname, too, <code>capjamesg</code>, has coffee connotations: cap = cappuccino.</p>
Proust’s questionnaire - James' Coffee Bloghttps://jamesg.blog/2026/02/12/prousts-questionnaire/2026-02-12T16:04:52.000Z
<p><a href="https://zacharykai.net/notes/proust">Zachary’s website</a> introduced me to “<a href="https://en.wikipedia.org/wiki/Proust_Questionnaire">Proust’s questionnaire</a>”, a series of questions by Marcel Proust. I thought it would be fun to try and respond to them!</p><p>I am writing this blog post as the snow falls outside. I wasn’t expecting snow today, but here it is. Some of the most wonderful things happen seemingly at random.</p><h2 id="your-favourite-virtue">Your favourite virtue</h2><p>Hope.</p><h2 id="your-favourite-qualities-in-a-person">Your favourite qualities in a person</h2><p>Kindness, the ability to make people laugh, and passion for something (whether it be hedgehogs, coffee, democracy, sketching, or something else).</p><h2 id="your-favourite-occupation">Your favourite occupation</h2><p>Writing and playing music.</p><h2 id="your-chief-characteristic">Your chief characteristic</h2><p>I try my best to be hopeful, and a bit whimsical.</p><h2 id="your-idea-of-happiness">Your idea of happiness</h2><p>I love to learn new things. I especially love that moment when I learn something that makes me think differently about something. I find paintings make me think and ask lots of questions.</p><p>Some other things that make me happy:</p><ul><li>Seeing people smile</li><li>Making people smile</li><li>Cats</li><li>Sunrises and sunsets</li><li>Writing</li></ul><h2 id="your-idea-of-misery">Your idea of misery</h2><p>Feeling like I don’t have a purpose.</p><h2 id="your-favourite-colour-and-flower">Your favourite colour and flower</h2><p>My favourite colour is orange. I also love blue, which I think of as the colour of peace.</p><p>I love all flowers.</p><h2 id="if-not-yourself,-who-would-you-be?">If not yourself, who would you be?</h2><p>I’m happy being myself. It’s tiring to try and be someone else, or even to think about who I would be.</p><h2 id="where-would-you-like-to-live?">Where would you like to live?</h2><p>I am happy where I am right now: around Nature. I do wish I lived in a community with lots of web weavers though! I would definitely schedule web weaving sessions in the park.</p><h2 id="your-favourite-prose-authors">Your favourite prose authors</h2><p>I love Toshikazu Kawaguchi’s “Before the coffee gets cold” series. I really enjoy reading Henry David Thoreau. Really, though, there are too many to list. It is hard for me to answer because I could look at my bookshelves and tell a story about all of the books on there – where and why I bought it, whether I have read it, what I thought of the book.</p><p>I like reading books that are a bit different from what I am used to, but my go-to books are Japanese translated fiction.</p><h2 id="your-favourite-poets">Your favourite poets</h2><p>I haven’t read a single poet enough to say they are my favourite, but I have been attending a few lunchtime poetry learning sessions at university and have discovered a few new poems I like. Most recently: “<a href="https://www.poetryfoundation.org/poems/50573/a-nocturnal-reverie">A nocturnal reverie</a>”, by Anne Finch. I also enjoyed the poetry collection “Cosy Poems” curated by Gaby Morgan.</p><h2 id="your-favourite-painters-and-composers">Your favourite painters and composers</h2><p>I love Monet’s paintings. The colours always bring me joy. One of the most amazing experiences I have had was when I visited the <a href="https://jamesg.blog/2025/11/13/monet">Monet exhibit at the Musee de l’Orangerie in Paris</a>, in which I was immersed in colour.</p><p>Regarding composers, does Taylor Swift count?</p><h2 id="your-favourite-heroes-in-real-life">Your favourite heroes in real life</h2><p>I think everyone is a hero in their own way, even if only for a moment, and even if we will never know it. The world is made immeasurably better by the actions and kindness of strangers.</p><h2 id="your-favourite-heroes/heroines-in-fiction">Your favourite heroes/heroines in fiction</h2><p>Casey Newton in Tomorrowland.</p><h2 id="your-favourite-food-and-drink">Your favourite food and drink</h2><p>My favourite food… I’m not used to answering so many questions about favourites. I’ll answer sandwiches because they are so flexible and can be enjoyed at any time of the day, with many different fillings. As for my favourite drink, I would ordinarily say coffee but I am taking a break from coffee. So I’ll say tea! Sometimes the things you think will never change end up changing.</p><h2 id="your-favourite-names">Your favourite names</h2><p>Cali, Rachel, Amber, George.</p><h2 id="your-pet-aversion">Your pet aversion</h2><p>The sound of bristles on a wooden floor.</p><h2 id="what-characters-in-history-do-you-most-dislike?">What characters in history do you most dislike?</h2><p>I’d prefer to talk about characters in history that I do like, of which there are so many. Let’s shine light on the people who make the world better.</p><h2 id="what-is-your-present-state-of-mind?">What is your present state of mind?</h2><p>I am relaxed from seeing the aforementioned snowfall but slightly anxious about the quality of my answers to these questions. I’m trying my best. <em>Update: I read them over and feel much better! Sometimes it takes a moment to build confidence.</em></p><h2 id="for-what-fault-have-you-the-most-toleration?">For what fault have you the most toleration?</h2><p>I don’t think I can say I am more tolerant of one fault than another. I try my best to be tolerant.</p><h2 id="your-favourite-motto">Your favourite motto</h2>
<!--kg-card-begin: html-->
<br/>
<!--kg-card-end: html-->
<blockquote>I get things are bad, but what are we doing to fix it? - Casey Newton, Tomorrowland</blockquote>
A sandwich questionnaire, part two - James' Coffee Bloghttps://jamesg.blog/2026/02/12/a-sandwich-questionnaire-part-two/2026-02-12T15:16:59.000Z
<p><a href="https://rubenerd.com">Ruben</a>, after responding to the <a href="https://zacharykai.net/notes/sandwiches" rel="noreferrer">sandwich questionnaire that Zachary blogged about</a>, added a few more questions. When I saw the blog post, I thought: these questions are exactly what I need today. Below I have responded to the delightfully-named “<a href="https://rubenerd.com/sandwich-questionnaire-second-helping/" rel="noreferrer">second helping</a>” questions that Ruben wrote.</p><h2 id="do-you-remember-the-best-sandwich-you’ve-ever-had?">Do you remember the best sandwich you’ve ever had?</h2><p>When I was a kid visiting my grandparents, I used to especially enjoy lunch. We would all spend time laying out a table and have a meal. We’d put all of the things we might need for lunch: plates, cutlery, cheese, (home-made!) jam, and more. We all had a sandwich, unless there were rolls in the freezer.</p><p>I loved the sandwiches, but I think the memories stick out to me more because they were enjoyed with people I love. The best things are so often shared.</p><h2 id="salt,-pepper,-or-other-seasoning?">Salt, pepper, or other seasoning?</h2><p>I don’t really like salt. I love pepper. For a while I put pepper on my cheese sandwiches. I don’t do that any more. In fact, I don’t really have many cheese sandwiches now; almost all of my cheese sandwiches are made at home and toasted. As for other seasoning, I can’t think of any that I’d like to add to a sandwich, although maybe one day I’ll be delighted by how a seasoning of which I have never heard adds to a new flavour of sandwich.</p><h2 id="do-you-enjoy-sandwich-adjacent-food-as-well?">Do you enjoy sandwich-adjacent food as well?</h2><p>I do! Ruben mentioned bagels here, so I will follow his precedent and talk a bit about bagels. I have a bagel every morning for breakfast, usually with avocado but sometimes with cheese. I have been thinking a lot lately about how… interesting it is that we have so many avocados here in the UK. I once had a mango closer to where they are grown and it was unlike any other mango I have ever tasted. I wonder if the same would be true of avocado too.</p><p>I like baguettes, but only when the bread is relatively soft. I tend to avoid wraps; I prefer bread.</p><h2 id="open-sandwiches-or-closed?">Open sandwiches or closed?</h2><p>I prefer closed sandwiches. I only really have an open sandwich when I am at a cafe that has one. Such sandwiches usually involve eggs or salmon or avocado.</p><h2 id="is-a-hot-dog-a-sandwich?">Is a hot dog a sandwich?</h2><p>I will leave this question as an exercise to the reader.</p><h2 id="is-there-a-sandwich-you’re-not-fond-of?">Is there a sandwich you’re not fond of?</h2><p>I don’t like mayonnaise, and so I tend to avoid sandwiches that have mayonnaise in them (with the exception of egg and cress sandwiches which I do enjoy!). I avoid meat so no meat sandwiches for me.</p><h2 id="do-you-have-any-vegetarian-or-vegan-favourites?">Do you have any vegetarian or vegan favourites?</h2><p>I remember I once had a vegan cheese baguette from Greggs that was really good. I had a really nice vegan sandwich from a supermarket a few months ago. I can’t remember the filling but I remember just thinking <em>this is nice!</em> I like sandwiches that have avocado on them, and I really wouldn’t say no to a vegetarian or vegan sandwich that had been well prepared.</p><p>I have a story about vegetarian sandwiches from this week. I bought a sandwich from the train station that contained olives. I really don’t like olives, but for some reason that evening I had a craving for them. Does anyone else have a food that they know they don’t like but sometimes try again anyway? It’s almost as if I want to check that my opinion hasn’t changed. In any case, it was not the best sandwich I have had, but it was exactly what I wanted in the moment (I have no idea why!).</p><h2 id="did-your-parents-cut-off-the-crusts?">Did your parents cut off the crusts?</h2><p>I <em>think</em> so. Now I really like crusts.</p><h2 id="what-are-your-favourite-sides-for-a-sandwich?">What are your favourite sides for a sandwich?</h2><p>I don’t usually have a side to a sandwich, but I do like to follow up lunch with a biscuit (in the British sense) or something else that is sweet if there is anything nearby.</p><h2 id="what’s-the-one-thing-you’d-like-to-change-about-people’s-perceptions-of-sandwiches?">What’s the one thing you’d like to change about people’s perceptions of sandwiches?</h2><p>I’m not sure if I know of any opinion of sandwiches that I would like to change, so I will defer to Ruben’s wisdom on this one:</p><blockquote>Sandwiches aren’t boring! Or at least, they don’t need to be. They can be simple, complicated, familiar, exotic, or whatever you want. They’re all wonderful.</blockquote>
The inverted index pattern - James' Coffee Bloghttps://jamesg.blog/2026/02/11/the-inverted-index-pattern/2026-02-11T13:39:00.000Z
<p>In “<a href="https://jamesg.blog/2024/07/16/build-a-search-index">Build a search index in Python</a>”, I walked through how to create a search index using the “inverted index” structure. This structure is commonly used in document search.</p><p>This week I was thinking about “inverting” data is more broadly applicable in software engineering than in search. I wanted to write the concept down on its own because it is so useful. Let me share an example from this week where I used the “inverting” idea.</p><p>I was working on improvements to my website edit button logic. As part of the code, I have a data structure that maps web page paths to their corresponding internal IDs. The structure looks like this:</p><div class="highlight"><pre><span></span><span class="n">path2id</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"/about"</span><span class="p">:</span> <span class="s2">"bb960cd9-dc2e-423a-8a0f-01774e143d06"</span>
<span class="p">}</span>
</pre></div>
<p>I am using a dictionary to allow for fast lookups (O(1)).</p><p>I was working on a task where I wanted to go from the post ID to its corresponding web page path. My current data structure, <code>path2id</code>, doesn’t let me look up entries by post ID. This meant I needed a new data structure so I could efficiently find the path associated with a post ID.</p><p>To create my new data structure, I “inverted” the data structure I already had, like so:</p><div class="highlight"><pre><span></span><span class="n">id2path</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"bb960cd9-dc2e-423a-8a0f-01774e143d06"</span><span class="p">:</span> <span class="s2">"/about"</span>
<span class="p">}</span>
</pre></div>
<p>Now I have two data structures: one that lets me look up post IDs by path (<code>path2id</code>) and another that lets me look up paths by post ID (<code>id2path</code>).</p><p>In my project, I created a new <code>id2path</code> dictionary by reversing the keys and values in <code>path2id</code>. This worked because the index was being recalculated with every web request. In many cases, however, you will build these two indices incrementally: when you add an entry to <code>path2id</code>, for example, you would also add the corresponding, reversed entry to <code>id2path</code>. This will ensure both dictionaries stay in sync.</p><p>While the code above is Python, the concept applies whenever you are working with a language that has a "map" or "dictionary" (i.e. in JavaScript when working with JSON objects).</p>
Designing for inactive users: Account check-ins and deletion - James' Coffee Bloghttps://jamesg.blog/2026/02/11/account-check-ins-deletion/2026-02-11T11:51:42.000Z
<p><a href="https://artemis.jamesg.blog" rel="noreferrer">Artemis</a> has been open for registration with an invite code for over a year. In that time, many people have signed up. With that said, not everyone who signs up will end up using their account. This is par for the course with software. Signing up for an account doesn’t mean someone is going to keep using it.</p><p>In January I started to design what I am thinking of as an “account check-in.” This involves an email that will go out to users who haven’t been active for several months. The way Artemis computes when a user last signed in is detailed in “<a href="https://jamesg.blog/2025/12/20/designing-for-inactive-users">Designing for inactive users</a>”. The system is deliberately designed to only save to the database the last month in which a user opened their reader feed.</p><p>The check-in email that is sent reads as follows:</p><blockquote>Hello there,<br/><br/>You have a registered account with <a href="https://artemis.jamesg.blog">Artemis</a>, a calm web reader.<br/><br/>We noticed you haven't logged into your account in a while, so we wanted to check whether you still need or want your account.<br/><br/>If you want to keep your account, no action is needed.<br/><br/>If you no longer need your Artemis account, you can export your data and/or delete your account at any time from your <a href="https://artemis.jamesg.blog/account">Account Settings</a>.<br/><br/>If you have any questions or run into any issues, please send an email to <a href="mailto:artemis@jamesg.blog">artemis@jamesg.blog</a>.</blockquote><p>This email acts as a reminder to registered users that they have an account. If a user no longer needs their account, they can follow the instructions to delete their account.</p><p>As a service operator, I don’t want to keep storing data for years-old accounts that the owner may have forgotten they created because they didn’t end up using the service. I hope this email encourages people to assess whether they still need their account so that Artemis can avoid storing data it doesn’t need.</p><p>I plan to send these emails out no more than once a year, and in batches. The service I use for sending transactional emails has a reasonable free plan, but I can’t send all the emails out at once without having to upgrade. I plan to eventually make this a background service that automatically sends emails when accounts have been unused for over a year. </p><p>The first batch of these emails went out to a small portion of users today. If you use Artemis and haven’t logged in for several months or a year, one of these emails should be sent in the coming weeks and months.</p>
Redesigning the Artemis account deletion back-end - James' Coffee Bloghttps://jamesg.blog/2026/02/11/artemis-account-deletion-back-end/2026-02-11T11:26:17.000Z
<p>As I have been building Artemis, I have learned that the account deletion flow requires constant review. For example, whenever I add a new database table, I need to make sure that table is in the account deletion flow. I may also need to create an index in the database so I can efficiently delete columns in a new database table. In addition, as the service has grown, I have realised that a synchronous account deletion process no longer works in many cases.</p><p>When I first designed the account deletion flow, I made all of the deletion steps happen as soon as the user submitted the form to delete their account. This worked for a time, but then growing pains set in. A user may be subscribed to over a hundred feeds. Each feed may have hundreds of posts that all need to be deleted. The more data there is to delete, the more time the deletion process takes.</p><p>This presents a potential problem: if it takes too long to delete a user’s data, the request they made to delete their data will time-out. This is both frustrating for the user, and adds a support burden for me when I receive an email saying the process failed.</p><p>I have now redesigned the account deletion flow. When the user submits the form to delete their account, a check happens to see how many posts are associated with the user’s account. If there are less than 1,000 posts, the deletion process happens immediately. This is because I estimate that the request should be processable in a timely manner. This exact number is an estimate: it prove to be too high. But for now I think it will be fine.</p><p>If there are more posts associated with a user’s account, a flag is set on their account scheduling it for deletion, rather than immediately deleting the account. Then, the user is signed out. The user will no longer be able to sign into their account. A cron-job runs every hour to delete accounts that have been scheduled for deletion. When a user’s account has been deleted, they will receive an email to indicate the process is complete.</p><p>By running the deletion step asynchronously, it doesn’t matter if it takes 30 seconds or a minute or longer to delete a user’s account. Longer deletion times would be expected especially for users that have created their account a long time ago and have more data associated with their account.</p><p>This new flow took a lot of work to implement, but it was necessary: moving the account deletion task to the background ensures accounts can be deleted without the risk of the deletion request timing out, and that users aren’t waiting too long for their account to delete.</p><p>I also need to implement asynchronous account data export for the same reason as above: account data export requests can time out. With that said, there are several additional design and engineering considerations for account export that I need to think about first.</p>
Notifying users of page updates - James' Coffee Bloghttps://jamesg.blog/2026/02/11/notifying-users-of-page-updates/2026-02-11T08:58:40.000Z
<p>Some time in January, I was going through my browser tabs and came across an Artemis tab that had been opened a while ago. But it took me a moment to realise that the tab might be out of date. My eyes went first to the posts from authors to which I have subscribed, then to the dates associated with those posts. When I read the date at the top of the page, I thought: oh, the page is showing posts from a previous day. I need to refresh to see the latest posts.</p><p>This experience was a bit jarring: the page looked like what I expected in form, but was out of date.</p><p>This made me think: how can I notify users that their tab may be out of date without creating something that is likely to distract? I have seen variants of “this page has updated” on other websites before and have often found them distracting. The two reasons for this I surmise are: (i) the banner appears too often, and; (ii) the banner appears when there is not a material change in the page.</p><p>I decided to implement a banner that appears ten minutes after midnight in a user’s timezone. This banner tells the user that there may be new posts to see:</p><img alt='A blue banner at the top of Artemis that reads "Your reader may have updated since you last refreshed this page." with a link that says "Refresh" that, when clicked, refreshes the page.' class="kg-image" loading="lazy" sizes="(min-width: 720px) 720px" src="https://editor.jamesg.blog/content/images/2026/02/artemis_refresh_banner.png" srcset="https://editor.jamesg.blog/content/images/size/w600/2026/02/artemis_refresh_banner.png 600w, https://editor.jamesg.blog/content/images/size/w1000/2026/02/artemis_refresh_banner.png 1000w, https://editor.jamesg.blog/content/images/2026/02/artemis_refresh_banner.png 1154w"/><p>This banner is necessary because Artemis doesn’t update in real-time. A user must refresh the page to see updates.</p><p>The banner is implemented entirely with client-side logic. In the current implementation, Artemis does not check if there are actually new posts. Instead, it shows the banner ten minutes after midnight in a user’s timezone, when it is likely new posts would be available if any new posts were found. </p><p>Here is the code, verbatim, as it is in Artemis right now:</p><div class="highlight"><pre><span></span><span class="c1">// this code shows the #inactive message when midnight elapses in a user's timezone</span>
<span class="c1">// this feature is to ensure people who leave Artemis open overnight know that there may</span>
<span class="c1">// be new posts available.</span>
<span class="c1">// this message relies exclusively on client-side logic, which you can read below.</span>
<span class="err"></span>
<span class="kd">var</span><span class="w"> </span><span class="nx">page_opened_time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Date</span><span class="p">();</span>
<span class="err"></span>
<span class="nx">setInterval</span><span class="p">(</span><span class="kd">function</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">page_opened_timestamp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sb">`</span><span class="si">${</span><span class="nx">page_opened_time</span><span class="p">.</span><span class="nx">getFullYear</span><span class="p">()</span><span class="si">}</span><span class="sb">-</span><span class="si">${</span><span class="nx">page_opened_time</span><span class="p">.</span><span class="nx">getMonth</span><span class="p">()</span><span class="si">}</span><span class="sb">-</span><span class="si">${</span><span class="nx">page_opened_time</span><span class="p">.</span><span class="nx">getDate</span><span class="p">()</span><span class="si">}</span><span class="sb">`</span><span class="p">;</span>
<span class="err"></span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">current_time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Date</span><span class="p">();</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">current_timestamp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sb">`</span><span class="si">${</span><span class="nx">current_time</span><span class="p">.</span><span class="nx">getFullYear</span><span class="p">()</span><span class="si">}</span><span class="sb">-</span><span class="si">${</span><span class="nx">current_time</span><span class="p">.</span><span class="nx">getMonth</span><span class="p">()</span><span class="si">}</span><span class="sb">-</span><span class="si">${</span><span class="nx">current_time</span><span class="p">.</span><span class="nx">getDate</span><span class="p">()</span><span class="si">}</span><span class="sb">`</span><span class="p">;</span>
<span class="err"></span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">minutes_since_midnight</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="mf">60</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nx">current_time</span><span class="p">.</span><span class="nx">getHours</span><span class="p">())</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">current_time</span><span class="p">.</span><span class="nx">getMinutes</span><span class="p">();</span>
<span class="err"></span>
<span class="w"> </span><span class="c1">// only show 10 mins after midnight, because some feed polling jobs may take a few minutes</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">current_timestamp</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="nx">page_opened_timestamp</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nx">minutes_since_midnight</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mf">10</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">"inactive"</span><span class="p">).</span><span class="nx">style</span><span class="p">.</span><span class="nx">display</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"block"</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">},</span><span class="w"> </span><span class="mf">5000</span><span class="p">);</span>
</pre></div>
<p>Every five seconds, this code checks to see how many minutes have elapsed since midnight in the user’s timezone. If it is ten minutes past midnight and the current day is greater than the day the user opened the page (calculated by comparing <code>YYYY-MM-DD</code> of the day the page was opened to the <code>YYYY-MM-DD</code> at the time when the check runs), the banner appears.</p><p>I added comments to this feature because, on first inspection, a reader may ask why Artemis cares about the user’s time. Importantly, Artemis is not constantly checking for new posts, and the site back-end doesn’t know for how long the page has been open. Indeed, the back-end doesn’t need to know how long a user has been looking at any page.</p><p>In a future version, I may update my code to make a web request to check if there actually are new posts before showing the banner. This would involve one web request. Doing a check to see if there are actually new posts would prevent any confusion that may arise from a user refreshing the page after being encouraged to and seeing no updates. With that said, I thought I’d start with a more simple implementation first; I can always add to it later.</p>
A random list of silly things I hate - Manuel Moreale RSS Feedhttps://manuelmoreale.com/@/page/tad2yrh5v57dbabe2026-02-11T08:30:00.000Z
<p><a href="https://contino.com/blog/a-random-list-of-silly-things-i-hate">«Not sure if this can turn into a blogger's challenge»</a>, he said. Well, we can certainly try:</p>
<ol>
<li>Blogs that don’t have a contact email.</li>
<li>The smell of cauliflowers when they’re cooking.</li>
<li>Drivers who do not respect safety distances.</li>
<li>Loud people in public places.</li>
<li>Loud people in general.</li>
<li>All the bros: crypto-bros, ai-bros, gym-bros.</li>
<li>When you go buy something online, and only your size is sold out.</li>
<li>People with no spatial awareness at the supermarket.</li>
<li><a href="https://en.wikipedia.org/wiki/Green_shield_bug">Green shield bugs</a>.</li>
</ol> <hr>
<p>Thank you for keeping RSS alive. You're awesome.</p>
<p><a href="mailto:hello@manuelmoreale.com">Email me</a> ::
<a href="https://manuelmoreale.com/guestbook">Sign my guestbook</a> ::
<a href="https://ko-fi.com/manuelmoreale">Support for 1$/month</a> ::
<a href="https://manuelmoreale.com/supporters">See my generous supporters</a> ::
<a href="https://buttondown.email/peopleandblogs">Subscribe to People and Blogs</a></p>