I have been working on a few new features for Artemis, the calm web reader I maintain. You can read a summary of what’s new below. Organise subscriptions with folders You can now create folders in Artemis. This feature is designed to help you organise websites you follow into sep … | Continue reading
Trafalgar Square is a special place. The architecture and views are breathtaking. The National Gallery, the church of St. Martins in the Fields, Canada House, and more, all surround the Square. From the right place you can look down Whitehall and see Big Ben. In the heart of the … | Continue reading
This is my entry for this month’s IndieWeb Carnival on the topic “Museum memories”. When I was 10 or so – maybe younger; childhood can be hazy – my grandparents took me to the National Museum of Flight in Scotland for a day. My memory starts as many of my earlier museum memories … | Continue reading
i'll spend my whole life looking for the next best thing but when I finally find it, i’ll be too busy looking for the next best thing I had spent half of the day travelling and the other half looking at art. Whenever I am going anywhere, I like to arrive as early as I can and eit … | Continue reading
The days are getting longer and brighter. The bite of the winter air is being replaced by a delicate breeze. It feels like Spring is here. I have been trying to play my guitar every day, usually before I eat dinner. Over the last week, I have noticed that the time I play the gui … | Continue reading
My blog has an offline mode that lets you view articles you have previously read on my website. This mode allows you to read something on my website even if you don’t have an internet connection. If the page you want to view has not been cached, you will see a custom page that li … | Continue reading
I am writing about a few paintings to help me build my description skills. My analyses are not formal or comprehensive. If nothing else, I hope that you enjoy the painting that I feature! The warm colours in Monet’s The Church at Varengeville (1882) stood out to me the moment I … | Continue reading
State of the Browser was electric. This is how I summarised my experience at the annual State of the Browser event in London in my notes. I like to capture moments as they happen, then write about them later. The note is the essence of a blog post; the starting point. The note bl … | Continue reading
Berthe Morisot’s Girl on a Divan, displayed in the National Gallery, London, caught my eye as soon as I saw it. The painting was the last one I saw in the Impressionist room in the Gallery, but despite having been on my feet for hours before I stood for several minutes looking at … | Continue reading
I am using Duolingo to learn a bit of German. I have been using the app for a while and enjoy the exercises. With that said, I am not a fan of Duolingo’s changing application icons on iOS. I don’t like that an application can set its own home screen icon without my permission. I … | Continue reading
When I was building the search engine for my blog, one feature I wanted to implement was syntax highlighting within the search input field. I wanted special operators (i.e. has:noalt, which shows posts that contain one or more images without alt text) to have a different backgrou … | Continue reading
Museums and galleries are places we can go to learn about the past, think about the present, and consider the future. Museums are places we can connect: with times, people, and place. We can have conversations in museums. We learn in museums. We can explore. The topic I have cho … | Continue reading
When I was in high school, I used to keep a pencil or pen up my sleeve. I don’t remember anyone else doing it, or why I started. But if I had a pen up my sleeve, I would at least know I had one nearby for when I’d need one. (I may be mis-remembering whether having a pen up my sle … | Continue reading
Last year I was introduced to the idea of “Dopplr colours” in the IndieWeb community. This refers to an accent colour assigned to cities on the now-defunct travel website Dopplr. You can see examples by clicking through different Dopplr city pages in the Internet Archive and payi … | Continue reading
Search is one of my favourite disciplines in computing. In 2024 I spent a lot of time working on a NoSQL engine that I called JameSQL. This tool now powers the search engine on my website. Designing search engine ranking systems is tricky to say the least. When I use my blog sea … | Continue reading
When I announced Artemis in 2024, I titled the announcement “Artemis, a calm web reader, is available (in beta)”. So central to the philosophy of how I build the software is the principle “calm” that, when I write about Artemis, I still use the phrase “a calm web reader” to descr … | Continue reading
Recently, a feed a few users – including myself – were following with Artemis published a “bookmark”-like post. The markup in the corresponding feed was a bit different than expected, so Artemis ended up linking directly to the bookmarked post rather than to the author’s post its … | Continue reading
This evening I added an idea I have had for a while to Artemis: a "dense" layout. By default, the Artemis interface appears in a single-column layout. The dense layout creates several columns. Each column from left-to-right shows posts for a given day. You can scroll down to the … | Continue reading
Artemis lets you subscribe to ActivityPub feeds (i.e. accounts on Mastodon). To do this, you can type in an ActivityPub handle like @jamesg.blog@jamesg.blog [1] on the “Add a website” page. When you subscribe to a feed using an ActivityPub handle, Artemis can use the information … | Continue reading
The IndieWeb community chat has a feature that lets you create a wiki page from a chat interaction. You can say “what is {term}?” in the chat and, if there is a definition on the community wiki, the definition will be returned by a bot. Otherwise, the bot, Loqi, will say that you … | Continue reading
Earlier this week I started to feel something I haven’t felt in a while: I felt lost. I started to look ahead and feel disoriented. Where do I want to be in a few years? What do I want to work on? What is my dream? I have never looked too far ahead in time, as long as I have a li … | Continue reading
Jo and I are trading blog post titles. The title Jo chose for me is “A perfect day.” What would my perfect day look like? 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 m … | Continue reading
I am trading blog post titles with Joe. He gave me a few suggestions for what to write about. I chose the title “Scotland’s brightness levels”. 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 t … | Continue reading
I have been thinking about the rhythm of my writing recently. I wrote in my drafts: 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 i … | Continue reading
I visit the IndieWeb wiki almost every day. The wiki is maintained by the IndieWeb community, documenting everything from interfaces for creating posts to POSSE. I was thinking that, like all wikis, there are pages that are almost “hidden gems” in the sense that, while they are … | Continue reading
Britt 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”. 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. Tur … | Continue reading
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 … | Continue reading
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 toda … | Continue reading
I maintain a web page that lists notes from IndieWeb events. Entries are added to the page when notes from meet-ups are archived to the community wiki. This web page contains several h-feeds. h-feed is the microformats markup that says that the tagged area represents a feed. The … | Continue reading
Ava and I are trading blog post titles. The topic Ava chose for me to write about was “What I associate with my name”. 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 … | Continue reading
Zachary’s website introduced me to “Proust’s questionnaire”, a series of questions by Marcel Proust. I thought it would be fun to try and respond to them! 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 wonde … | Continue reading
Ruben, after responding to the sandwich questionnaire that Zachary blogged about, 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 “second helping” questions that Ruben … | Continue reading
In “Build a search index in Python”, I walked through how to create a search index using the “inverted index” structure. This structure is commonly used in document search. This week I was thinking about “inverting” data is more broadly applicable in software engineering than in … | Continue reading
Artemis 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 someon … | Continue reading
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 e … | Continue reading
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 da … | Continue reading
Last year, I worked on a bookmarklet for editing pages on my website. When clicked, the bookmarklet would open the page in GitHub that corresponded with the page I was viewing. I used the bookmarklet so much I turned it into a browser extension, which I still use regularly to edi … | Continue reading
I have been thinking about hand-writing and websites in the background for a little while. I made a hand-written font using Calligraphr a few months ago. I enjoyed making this font, but haven't used it for a web project yet. Here's what it looks like: While making the font, I e … | Continue reading
I love sandwiches. Earlier today I was thinking about how you can eat a sandwich at any time of the day. I have eaten sandwiches for breakfast, lunch, and dinner. When I saw Zachary’s “Sandwich Questionnaire“, I thought I have to respond to this! I have been thinking about respo … | Continue reading
Every so often, I use the word delightful in conversation. That is delightful! I try not to use “delightful” too often, but I do like to bring it into a discussion every now and again. It is one of my favourite words. The word delightful, like the word awe, makes me feel a certa … | Continue reading
Ever since I moved to using Ghost as the tool for publishing my blog posts [1], I have forgotten to add categories to some of my blog posts. My old system had a few if statements that would automatically select a category. If none of the rules triggered and I did not choose a cat … | Continue reading
Last weekend, I went to the National Gallery of Scotland. This time, I started my trip on the bottom floor where all the Scottish art is on display. A few minutes after entering the gallery, I was captivated by paintings of Nature and of Edinburgh. I noticed that one wall was ded … | Continue reading
I have been waking up with anticipation every morning recently. I say “good morning, world”, and then anxiously peek through the edge of the curtains. I hope for the blue sky. This last week has been rainy and grey. I tried to understand why but the meteorology went over my head … | Continue reading
One of the areas of the Artemis codebase that I update the most is the logic that relates to the list of posts published by authors to which a user is subscribed. Because Artemis works with so many different formats of information – web feeds like RSS or h-feed, Mastodon posts, B … | Continue reading
When I run the Artemis codebase, one of the first things it does is look for an environment variable that indicates what “environment” the application is running in. There are two modes: development and production. If no mode is specified, development mode is set by default. Whe … | Continue reading
Earlier this week a reader pointed out that posts listed on my date archive pages were linking to the wrong URLs. For example, the link for /2026/01/25/kind-software would instead be /2026-01-25-kind-software.md. This was caused by my static site generator using the markdown file … | Continue reading
Artemis, the calm web reader I maintain, runs as a systemd process. When I want to update the software, I deploy the new code to the server and then restart the systemd process. This has a significant downside: while the Artemis process is restarting, the software is unavailable … | Continue reading
A few weeks ago I did a day-long training Carbon Literacy Project training course through my university. When I was taking the course and considering ways I can reduce my carbon footprint, I started thinking about technology. I don’t know much about calculating emissions from tec … | Continue reading