2023–2026
1,461 posts
2026 434
October 2026
- morning coffee
- Life
- my desk
- walking
- Nature
- brainstorming the multi-lingual reading experience for artemis
- Artemis
- wonders of web weaving, episode 24
- Wonders of Web Weaving
- contours
- Seen
- autumn (essence, of) (zine)
- flow (or, thinking through) (zine)
- Zines
- Poetry
- Weeknotes W1
- Weeknotes
- Autumn
- Websites in artistic contexts
- Web
- Food Questions Challenge
- Some things that bring me joy
- Nature
- Moments of Joy
- Catch a Bird (or, Happiness)
- Meaning
- Ground
- Wonders of Web Weaving, Episode 23
- IndieWeb Fiction Carnival September 2026 Roundup
- Romantics, VI
- Wonders of Web Weaving, Episode 22
- Of Days
- Walking
- The views
- My favourite tracks on The Life of a Showgirl: Encore
- Autumn days
- Pages
- Sunflowers in the Sky
- Sunset
- Song
- Noticing
- Kindness (or, reflecting on TODOs)
- Care
- Sunrise
- Notes from the gallery
- Rainbow walk
September 2026
- ever-changing
- here, something
- The (continuing) joy of monostiches
- Autumn morning
- Wonders of Web Weaving, Episode 21
- Ensuring my posts have permalinks using bash
- First pianos
- Nights
- the age
- Morning moon
- leaves, lights
- Autumn walk
- Sunset
- Fallbacks
- Autumn
- Awe
- New music morning
- Wonders of Web Weaving, Episode 20
- Sticker memories
- The feeling of writing
- Autumn
- Autumn dreams
- Became (or, connecting notes to finished works)
- Of Day
- Moments of joy
- On (disabling) suggested filenames on macOS 27
- Beauty
- Wonders of Web Weaving, Episode 19
- Resilience
- 8-Bit Day 2026
- Loading bold and italics fonts on my website
- Autumn
- The coffee
- Arts
- Of Day
- Perspective
- the painting
- Visual; textual
- Second year
- Autumn
- Starry night
- Making memories with music
- Wonders of Web Weaving, Episode 18
- Musical dreams
- Complements: Art history, writing
- Timing events in code
- morning
- A Creative’s Guide to Personal Websites (Zine)
- autumn, winter
- six strings
- Morning impressions
- fishing
- Music Exchange: Bridge Over the Stars <> iPod Touch
- Your tiny Gallery Guide (a zine)
- There was no moonlight tonight.
- Inspirations
- this is me trying (to make a zine)
- Bear Blog Carnival September 2026: Music memories
- Hiding elements on mobile and desktop with CSS
- Impressionism
- the park
- Wonders of Web Weaving, Episode 17
- IndieWeb Fiction Carnival September 2026: Moonlight
- Marble Memories
August 2026
- Blaugust 2026 in review
- A moment
- Chinese Idioms (Guest post by Naty)
- Enjoy some art with me
- Old Picture of the Boat-Bridge at Sano, Kozuke Province by Hokusai
- Early Autumn
- Flow
- The joy of
- Music Exchange: Lost in Yesterday <> Satisfied Mind
- The instruction manual
- The holiday
- Midnight scrapbooking
- Moods, places; translations
- Reading as participation in the indie web
- Edinburgh Summer Sessions
- How I organise my bookshelf
- Wonders of Web Weaving, Episode 16
- First moments
- Links from this month
- Art, technology; change
- Things I want to remember
- Organising physical artefacts
- Saturday morning
- seasons
- Gaze
- potential
- HTML element letter count distribution
- Music; pressure
- Change; anchors
- Re: My perfect laptop
- Brainstorming site name changes in web readers
- Why I wish people a happy day of the week
- Organising my blog categories
- The Tower of Babel by Bruegel the Elder
- Wonders of Web Weaving, Episode 15
- Movement
- The Poet (Le poète) by Picasso
- The Hay Wain by John Constable
- I’m Old Fashioned by Ben Paterson
- Miniatures, reference works, and writing
- Plainsong by The Cure
- Inspiration from physical artefacts
- Morning; walking; music
- Surf by Stanley Cursiter
- Edgar
- Paper
- memories
- Autumn 2
- questions, ii
- Questions
- Breath
- Sunset 2
- Afterglow
- Impressions; museums
- Eclipse
- Wonders of Web Weaving, Episode 14
- Music; electricity
- Perspectives
- how the poem
- Morning, sunrise
- Poems as wayfinding
- Images
- Evening
- HTML Day 2026
- The sound of writing
- Auld Faithful
- Morning
- Depths
- I Thought it Was a Tire
- searching
- Museums
- Space 2
- Space (making)
- Space-making
- Wonders of Web Weaving, Episode 13
- Raindrops
- Sorting drafts with w-shingling
- Evening
- am
- The Met
- Midnight
- August
- Skies; distance
- Countryside; Blaugust
July 2026
- Of Day
- Lattes
- the writer’s mind
- New 2
- Wonders of Web Weaving, Episode 12
- Blogs, websites, and identity
- Bookshelves
- Streams
- The Royal Mile
- The Typist
- Wonders of Web Weaving, Episode 11
- Music
- Of Day
- Multi-line links on my home page
- Adding anchor links to my category pages
- Re: An IndieWeb Event for Southeast Asia / Pacific Time Zones
- Website superpowers
- Wonders of Web Weaving, Episode 10
- Sunset
- Space rhythm
- ‘Repeat that, repeat’ (Collaborative writing)
- anthology of self
- Winter
- Joys
- Reflection
- Gardens
- 75 reasons to start a personal website
- Nature walking
- Sunset; music
- Wonders of Web Weaving, Episode 9
- IndieWebCamp Nürnberg 2026
- A week in Nürnberg
- Author/reader interaction on the indie web
- Brainstorming a loginless web reader
- What does a blog post sound like?
- Star
- How do I know the system is working?
- Forest
- Small wishes, II
- Deduplicating posts after URL changes in Artemis
- Processing feed items without URLs in Artemis
June 2026
- Wonders of Web Weaving, Episode 8
- Unnatural
- Make your own web quizzes!
- Wonders of Web Weaving, Episode 7
- Stars
- Which microformat are you? [Quiz]
- Removing prefixes and suffixes in Python
- Inside; outside
- Small wishes
- Little moments of joy
- Blog posts as starting points
- Blogger Archetype Quiz
- Day
- Forward
- Open sourcing a quiz maker
- Rainbow
- Late night blogging
- The fountain
- Views
- Lovers
- Wonders of Web Weaving, Episode 6
- Clouds; colour
- Taylor Swift question challenge
- Bringing people together with the web
- Wonders of Web Weaving, Episode 5
- Morning coffee
- Aether-draft
- Moments; time
- Sunset clouds
- The story of MJ
- Hiding a list with no items in CSS
- Is there a power law of category use?
- Chat community for web writers?
- Digital minimalism
- Wonders of Web Weaving, Episode 4
- JUnited 2026
- Creative spaces
- Flagging suspicious websites in Artemis
- Distinguishing user and system content
May 2026
- The caramel log
- Milk chews
- Home
- Waiting; writing
- Mitigating floods of posts in Artemis
- First year
- Views; between
- Wonders of Web Weaving, Episode 3
- Writing a regex for adding links to time stamps
- Slack preferences I have set
- Joining the IndieWeb Zine Pop Up
- Iced coffee in Spring
- Background; foreground
- Ready
- Wonders of Web Weaving, Episode 2
- My favourite typewriter
- Growing with my website
- Evening tea
- Announcing Wonders of Web Weaving
- Walking
- Serendipity
- Writing a blog post without a screen
- Affordances of a screenless writing interface
- How I use my phone
- Artemis changelog #9
- Ideas for web readers
- Night shift
- Quotes from Tufte’s course
- Using greyscale
- Seasons
- Reorganising the Artemis settings page
- Designing software with travel in mind
- Sunset, Düsseldorf
- Of the night; a note
- Log in, sign in
- Joyful web design
- Walking
- My words, not my content
- Day; night
April 2026
- IndieWebCamp Düsseldorf 2026
- Weather
- Butterflies
- Living the indie web life
- Rainbow; moon
- Custard creams
- Artemis now supports custom domains (in beta)
- Waffles and coffee
- Blossom
- Newsletters should have web feeds
- Music, story(ies)
- Flowers; snow
- How I find links
- The joy of
- How the Artemis blog works
- Saturday morning reading
- Using my edit button shortcut
- More examples of graduating between mediums of communication
- The archive
- Museum Memories: Roundup
- Nesting social posts under blog posts in Artemis
- My favourite (unconventional) animal
- Seven hills
- How software feels
March 2026
- Warm tea
- Inventor, dreaming
- Single-file web applications
- Gardening
- Interface stability
- Brainstorming web guides
- The artist was here
- Saturday
- Tinkering
- River
- Blossom 2
- Crescent
- Colour 2
- Space
- Library memories
- Landscape by Moonlight
- The Timeless Way of Building
- Rewriting
- Starting; playing; maintaining
- Sparking joy
- Blossom
- Ideas for managing post volume in web readers
- Artemis changelog #8
- Museum memories
- Take two
- Offline mode
- Guitar; sunset
- Night time; walking
- I wish there was a (simpler) way to highlight text in inputs
- How to change the Duolingo app icon
- Girl on a Divan by Berthe Morisot
- State of the Browser 2026
- The Church at Varengeville by Monet
- IndieWeb Carnival March 2026: Museum memories
February 2026
- Dopplr colours
- Pens, sleeves, and whiteboards
- Artemis “via”
- Preserving calm in software over time
- Brainstorming search engine ranking introspection
- Graduating between mediums of communication
- Grouping threaded posts in Artemis
- Artemis dense layout
- Thinking; walking
- Scotland’s brightness levels
- A perfect day
- IndieWeb wiki pages I really like
- Rhythm
- Clear sky
- A piece of art I would love to see in person
- What I associate with my name
- Adding multiple h-feeds to the same web page
- Snowy afternoon
- A sandwich questionnaire, part two
- Proust’s questionnaire
- Notifying users of page updates
- Redesigning the Artemis account deletion back-end
- Designing for inactive users: Account check-ins and deletion
- The inverted index pattern
- Drawing and hand-written fonts
- Brainstorming source code editing for web applications
- Clouds
- Noticing
- Design and missing categories
- Why I love my favourite words
- Sandwich Questionnaire
- Redirecting YYYY-MM-DD-slug.md to /YYYY/MM/DD/slug with Nginx
- Staging banners
- Debug mode
- Build the web you want to see
- The expanse of web weaving
- Calendars and web readers
- Background technology
- Does your website run on green energy?
- Reducing Artemis’ deployment downtime with blue-green deployments
- Software Design Meetup [Feb. 11th]
- IndieWeb Book Club: The Art of Explanation
January 2026
- Kind software
- IndieWeb Carnival: Host Interview
- This week
- Share your website at events
- Designing a service with IndieAuth and email-based login
- Announcing Artemis Roll-up
- Subscribing to local news with a web reader
- Piano, vulnerability, and playing guitar
- Nature
- Getting ready for studying
- Walden
- Artful life
- Documenting design changes with screenshots
- Publishing my citation preferences
- Morning moonlight
- Designing an A-Z navigation web component
- Why Artemis is invite-only
- Software maintenance
- Personal and community web search engines
- Turn a list into a web feed
- The new year
2025 291
December 2025
- Designing for inactive users
- The indie web in 2030
- A small fix
- The nicest thing a stranger has done for me
- Coffee shop
- Grateful for the indie web
- Cleaning the Artemis database
- IndieWeb Book Club: Non-Designer’s Design Book
- Music this year
- Words and making coffee
- IndieWeb Book Club: Understanding Comics
- A Lady in Grey
- Walking
- Brainstorming visual search for the web
- Morning
- What I have been reading lately
- A concept for a two-panel web reader settings page
- A new home page
November 2025
- Experimenting with web design
- Little moments of joy
- Saturday
- Announcing Validate Everything
- Snowy morning
- Icebreakers
- Bookmarks
- Winter sunset
- Snow
- Routines
- Resonance
- Monet
- I’m going to study art history
- What’s in my inventory?
October 2025
- No work is ever wasted
- Design, in pink
- Tabs
- Ten facts about me
- Beginnings (type-written)
- Growth
- Waiting
- Typewriters and labyrinths
- When your website makes you smile
September 2025
- Saying thanks on the web
- Today
- Updating user interfaces
- Walking
- How Artemis polls web feeds
- A 255 byte web page
- Rain
- Second person birds
- Raindrop
- Walking
- Creating a searchable archive page
- Collaborative web weaving
- Designing a new button to visually show and hide alt text
- Artemis Changelog #7
- Whimsy
- 30 collaborative things you can do on the web
- Announcing rainfall.scot
August 2025
- Working on the Artemis demo video (and captions)
- Autumn
- Local Hero (IndieWeb Movie Club)
- Web remixing
- Developing an alt text button for images on my website
- Designing a mobile-first HTML editor
- An incremental migration
- Morning web weaving
- Golden
- Between
- The first star
- Dates in notebooks
- A foggy morning
- Digital, physical
- Collaborative web weaving
- What is the web equivalent?
- Worth watching, asking, knowing, doing, repeating
- Browser extensions I use
- Experimenting with Ghost
- Icon overload
- Sharing ideas on my website
- The joy of links
- Ideas and insecurity
- Coffee conversations
- We need to define best practices for Stories and links
- Delightful technology experiences
- Three quick CSS tips
- Pattern: Search aliases
- Colour
- Full bloom
- What I made for HTML Day
- Communication and understanding
- Change
- Decorating
- A wooden love heart and a pot of flowers
July 2025
- Tumblr-ing
- Reading
- Futures for the web
- Communicating the indie web
- The link router pattern
- [photo] Edinburgh
- Mashups
- Brainstorming a tool to follow new album releases with Wikipedia
- Museum of the World Wide Web
- Summer rain
- Walking
- Text representations of posts in Artemis
- Walking
- The way I think about a song
- How do you write HTML?
- Whiteboards and affirmations
- Evening walks
- The bookmark
- Notes from the world, part two
- Keyboards and mice
- It’s possible, maybe useful; but is it necessary?
- Impressions of Be Kind When You Can by Eliza Cook
- Evening
- Designing calm software with breaks in mind
- Artemis Changelog #6
- Tomorrowland (IndieWeb Movie Club)
- Ice Floes
June 2025
May 2025
- Announcing Subscribe Openly
- Today
- The things around me
- Drying my hair
- Phoenix
- Design
- The joy of making things
- Bookmarks bookmarklet
- Colour
- the joy of
- Layers
- DevTools features I like: Computed CSS
- Making things happen
- Building an edit button browser extension
- play; ground
- Setting up a Zoom account for a community with an admin and Pro user
- Co-organisers help me make events happen
- Morning
- Telemaco Signorini’s Waverley Bridge
- A spring day in the city
- The bookshop
- How I navigate my website wiki
- Brainstorming a Notion-powered static site generator
- Word of the day
- The park
- The joy of
- Rhythm
- The blank whiteboard
- Extending my edit web page bookmarklet
- Notes from the world
April 2025
- Earliest memory of coffee
- Experiments (sometimes work and sometimes don’t)
- Gardening, fruit and Nature with Sara and James
- Morning CSS
- Ordering posts by published date and time
- The joy of
- What if YouTube had slug-based URLs?
- What we see in our websites (and why I am so excited about the web)
- Painting impressions with Zachary
- Today
- A magic coffee cup that doesn’t spill
- Email attachments and forgiving design
- How audible is this URL?
- Blogrolls and coffee
- Coffee shop details
- Time
- Direction
- Pouring water for coffee from a greater height
- The HTML form to structured data pattern
- The evening coffee shop
- Out in the sunset
- Spring
- Waving
- The Barbican [photo]
- Vignettes
- The joy of finding and sharing links
- The Tesco ice cream
- Morning; blossom
- Sharing the web
- Wandering
- Sorting HTML lists with an atoz helper class
- You can use the light-dark function in your :root CSS variables
- the joy of
March 2025
- Lavender coffee
- Adding “subscribed via” to the Artemis bookmarklet
- Web readers and RSS readers
- Bookmarklet to show all rel= links on a page
- Announcing Artemis Link Graph, a new way to explore the web
- Artemis changelog #5
- Text notebooks with editable outputs
- Flowers and trees
- Flowers and plants and trees; in which I find joy and inspiration
- Adding an edit button to my static site on mobile
- The bookshop
- Tales of Debugging: The missing character
- Quotes
- Website reflections
- Pattern: Filtering over content firehoses
- Caching author previews in Artemis
- Designing code snippets in technical content
- Matcha
- Designing my blog post draft web experience
- My blog post category suggestion tool
- Repair cafes
- Designing a PWA experience for Oblique Strategies
- The joy of
- Common paths for web feeds
- People and Blogs Interview
- The philosophy of James’ Coffee Blog
- Technology design principles
- Grouping link posts in a web reader
- Noticing
- Oblique Strategies RSS Feed
- First blossom
February 2025
- Stargazing
- Run the code you need
- Pattern: Data views
- Artemis changelog #3
- Creativity
- Adding duplicate permalink warnings to my static site generator
- Coffee
- Every big idea
- Working on my confidence
- Snow
- Styling code snippets on my website
- Showing different images in light mode and dark mode with CSS media queries
- Blog background experiments
- Designing lists of inputs with HTML and CSS
- Designing a delete action in a web interface
- My static site editing bookmarklet
- Wandering
- Tell us something good
- Soon, spring
- Which HTML element are you [Quiz]?
- Sustainable living
- Learning from prior art in technology design
- Music Monday: Free
- Designing technology
- Blogs as third places
- The midnight bakery
- Read it on the web
- Web weaving
- Redesigning the structure of my blog images folder
- Joy
- Sunset
- Hand writing
- Small things I am proud of today
- The feeling of a word
- This place we call the web (should be made by and for everyone)
- The bookstore
- Translated Japanese fiction reading list
- Design experiments
January 2025
- Organising my bookshelf
- Light
- Airport pianos
- In design, craft
- Salad recipe, inspired by Sweetgreen’s Harvest Bowl
- Co-writing
- Style
- Noting
- AirPods and friction
- Moments of inspiration
- Quiet art; the tapestry of writing
- Coffee, Seinfeld and Google
- Website acknowledgements
- Designs from the last few months
- Morning coffee
- Perspective
- Intentions for 2025
- Coffee and quotations
- Third run
- Pattern: Lazy loading
- The morning sky
- Creative questions challenge
- Learning about web design
- Tools for the next decade of the web
- Second run
- Static, dynamic
- First run
- Mornings and organising
- The daytime moon
- Boolean HTML search and web development
- Horizon
- What I have been reading recently
- Refinement
- Happy New Year!
2024 436
December 2024
- Inspiration and creative modes
- Questions on my mind
- Artemis changelog #2
- Advent of Patterns Wrap-up
- Advent of Patterns: On-page search
- Designing the Artemis feed recovery tool
- Advent of Patterns: Preferences
- Artemis changelog #1
- Advent of Patterns: Status indicators
- Advent of Patterns: Persistent information on scroll
- How Artemis retrieves web feeds
- Advent of Patterns: Shareable links
- Advent of Patterns: Tables of Contents
- Making images bigger on my website
- Advent of Patterns: Timelines
- Advent of Patterns: Diffs
- Advent of Patterns: Change overview
- Advent of Patterns: Change previews
- Advent of Patterns: Offline mode
- Finding complexity when writing technical documents
- Advent of Patterns: Text fragments
- Advent of Patterns: Text shortcuts
- Advent of Patterns: Inline function trays
- Artemis, a calm web reader, is available (in beta)
- Advent of Patterns: Text readability
- Advent of Patterns: Version history
- Advent of Patterns: Information previews
- Advent of Patterns: Link qualifiers
- Thinking about personal website style galleries
- Advent of Patterns: Autosuggest
- Designing a documentation layout
- Reflections on debugging
- Spotify Wrapped 2024
- Pattern: Pre-rendering content
- Advent of Patterns: Define once, reference everywhere
- Things I have been reading lately
- Advent of Patterns: Incremental computation
- Advent of Patterns: Filter, then compute
- Advent of Patterns: Highlighted time since article publication
- Designing navigation on my personal website
- prefers-reduced-motion and search-as-you-type
November 2024
- Pattern: Link contexts
- Advent of Patterns
- Inspiration
- Designing a calm web reader
- Coffee preferences
- More on forgiving interfaces
- Front End Study Hall
- Writing on whiteboards
- The joy of bookshops
- The joy of making tiny tools
- Forgiving interfaces
- Web Writer’s Workshop on December 3rd
- What do you want for the web?
- live more & love more
- Confidence
- Adding dark mode to my website
- Designing search filters for my personal website
- Make a two-column list layout with CSS grid
- Ideas and friends
- Planting a link garden
- Ideas take time to garden
- Share a compliment with a creator you appreciate
- Adding direct answers to my website search engine
- Some things that bring me joy
- Improving search relevance with word proximity
- How to find word collocations in a document
- Let’s replace “user experience” with human experience
- Learning from human experience interviews
- Reunited through time, for a moment
- Hopes
- Organising content by theme
- Freshly made smiles
- Making, collaboratively
- the cafe
- Musical concepts and blogging
- Melody
- Watching the world go by
- Seasons
- Filter before running computationally expensive tasks
- Ideas for performance testing infrastructure
- Search filters in Slack
- Documenting user interfaces and experiences
- Showing incremental progress for longer actions
- The long view of a blog
- How to use cProfile and snakeviz to profile Python code
- Impact
- Rich content presentation on personal search engines
- Precomputation
October 2024
- Readable and memorable URLs
- URL search in the browser address bar
- How to export images from Google Docs as a folder
- Morning coffee
- Search engine shortcuts in Firefox
- Stargazing
- in design, craft: this week in my blog
- Notes on performance
- from links, adventure
- The writing equivalent of a duet
- A Monologue on Modality
- The longevity of technical documents
- Brainstorming a design for audio note transcription
- Music Monday: The Sound
- IndieWeb Movie Club October 2024
- Morning coffee
- Books set in bookshops
September 2024
- The Underground guitarist
- The basement restaurant
- Noticing
- The musical
- Fernande with a Black Mantilla
- Moments of joy: The bus ride
- An Introduction to the Personal Web with Cosy and Cali
- The lifecycle of a search query on my blog
- Improving relevance on my site search engine
- Blogging before dinner
- A quiet room at Vienna airport
August 2024
- Hope for the web
- Implementing a transaction log for JameSQL
- Clustering blog post titles with unigrams
- Writing a search query transpiler
- Adventures building a spreadsheet engine in Python
- Building a NoSQL database in Python
- Introduction to consensus modeling in Python
- How to implement a time-based LRU cache in Python
- Python pattern: Using defaultdicts to initialise dictionaries
- How to build a query language in Python
- How to implement TF-IDF in Python
- How I design my URLs
- Saturday morning reading
- Designing the content layout for my website
- Designing a fuzzer for Knowledge Graph Language
- My (CSS) style
- Moments of Joy: Inspiration and practice
- The rainbow
- The little moments
- Ask the Website Maker (Me!)
July 2024
- Tools and time
- The boarding line
- Fog
- Place
- The coffee shop
- The morning taxi ride
- reflection
- the pink sky
- Expectations in design
- Craft
- Ideas, over coffee
- Music Tuesday
- Build a search index in Python
- Taste
- The summer sunset
- Fun with Words
- Scent
- Flowers
- Four years of the personal web
- The basement book store
- Details
- The coffee shop conversation
- Avoiding anxious loops
- Notes
- Design pattern: Progress bars with tips
- The separation of writing and publishing tools
- Time
- evanescence
- infinite wonders
- IndieWeb Carnival July 2024: Tools
June 2024
- Taylor Swift Subreddit Acronym Reference
- Analysing use of Taylor Swift song name acronyms on Reddit
- The stories for me
- Redesigning James’ Coffee Blog
- Notebooks and whiteboards
- Thinking in words
- Glow
- Building technology to do the boring work for me
- Time
- the rose
- Re-casing titles with word counts
- Retrieving abstracts from the Arxiv API
- a new world
- Sketching algorithms in separate files
- sunrise
- Music
- Implementing incremental builds in Aurora
- Melody
- Sunset
- Python packages I love
- Improving my blog post publishing tool
- Announcing Aurora
- Craft
- new skies
- Style
- weaving
- Ink and Quill
- Designing software
- What makes a delightful tool?
- raindrop
- TIL: Visualising memory usage in Python
- Implementing Incremental Static Regeneration in Aurora
- My (new) website build process
- home rose
- moonlight
- Pattern: Software hooks
- The scent
- the web
- Time
- moonlight
- whisper
- Walking
- programming
- Glow
- Rest
- reminiscence
- Warmth
- the lake
- discovery
- Brainstorming a decision tree for website hosting choice
- JUnited Blogging Challenge
- Music
- The hand cusp
- The midnight pianist
- Sky
- Seasons of writing
- Pattern: Auto-extract data in a publishing tool
- Publish a h-feed, then convert to other formats
- Python pattern: Ordered list of lambda functions
- Warmth
- Website seasons
- Growth
- Polling feeds without writing feed parsing logic
- Brainstorming a new indie web search engine
- Notes on responsible web crawling
- Blogs and longevity
- Plurality of community
- Designing a reading interface for research
- Designing data loaders in Python classes
- Building an interactive tool to generate image maps
- articulate
- Music Monday: Exit Sign
- perspective
- The Train WiFi Test
- Immersed in words
- the book
- orange sky
- Wonder
- Nature’s blanket
- the idea
- The joy of the monostich
- A new path
- before the storytelling
- Sunset
May 2024
- My creative environment
- the lost poet
- Echoes
- my bookshelf
- i am
- Tabs
- Announcing nanosearch, a Python package for making small search engines
- Build a local web search engine with two commands
- Time
- Walking
- An indie web library
- Personal archives
- Designing Aurora, a new static site generator
- The insecurities and joy of writing software
- Evening
- My new publishing workflow
- Adding new features to my publishing tool
- Register to Vote
- Brainstorming how to elevate older blog posts on my site
- Hugging Face Papers RSS Feed
- Papers with Code RSS Feeds
- Blog of the Day
- (More) ideas, various and sundry
- Ideas, various and sundry: Part III
- Free Library
- The Windows 98 Manual
- The next decade of the web
- Identity and limits
- Mental Health Awareness Week
- Late Night
- How I display blockquotes
- Growth
- Ideas, various and sundry
- My plant
- What are effective ways to sift through new research?
- First cup of coffee (of the day)
- My first (ever) cup of coffee
- The joy of book stores
- Life and website gardening
- Moments of joy
- The Tortured Poets Department
- an email poem
- bookmark
April 2024
- Blossom
- Create an automated image collage with computer vision
- Imperfect programs
- The James’ Coffee Blog Mascot
- Coffee experiences
- Designing KGL: Reflections on syntax design
- Liminal
- Memories
- Post scriptum
- The joy of computing
- Philosophy musings
- Wandering pen
- Watching space in my living room
- having a website
- My wander page
- before the bus leaves
- Details
- Technical Writing Chat with Sabrina Lim
- evening travels
- heavy eyes
- Penguin coffee
- Poetry to HTML
- Radio
- web we weave
- homebrew website club
- Using random boolean networks in compression
- Weather
- my feline friend
- Technical Writing Chat with Nathan Driver
- Writing a poem in coem
- Family
- The Lady Gaga espresso
March 2024
- Sounds of making coffee
- Evening
- Perspective
- Analysis of [the] prose use of braces (curly brackets)
- How I decide what coffee to drink [Diagram]
- Conundra, indeed: Using curly braces in English
- Updating my website RSS feed
- Little moments of joy
- Rediscovering routines
- Exploring VisionScript language syntax: Part II
- Exploring VisionScript language syntax
- Why I write
- Writing, connection, and where I write
- The joy of practising a skill
- Website pride
- Behind the desk
- Designing an interpreter for Knowledge Graph Language (KGL)
- HTML’s readability, robustness, and intuitiveness
- Designing a knowledge graph query language
- Learning lower-level programming
- Eggs and coffee
- the new season
- night time
- Seven Days of New Things Day 4: Walking Without Headphones
- Evening listening
- Seven Days of New Things Day 3: Terrari(a|ums), Bon Iver
- Seven Days of New Things Day 2: Linear Algebra, Tulips
- The (My) Desk
- Seven Days of New Things Day 1: Editing Wikipedia, Sardines
- Ambassador of asterisms, &c.
- Bee Yourself
- The Garfield cup, and other Saturday evening musings
- Cataloguing my vinyl collection with computer vision
- Perception
- Designing an interactive decision tree for vision model deployments
- Spring cleaning
- Use a penguin avatar to navigate my personal website
- 100 (more) things you can do with your personal website
- IndieWebCamp Brighton 2024
- Traveling
- Comparing yourself to others in creative pursuits
- Notes on facilitating technical discussions in meetups
- Generating poetry from the Hacker News homepage
- The joy of incremental website improvements
- Internet gardening
- The heroes we don’t deserve: Those who work on web standards
- Morning routines
February 2024
- Blogging is the medium of incomplete stories
- Serving my blog posts as Linux manual pages
- Scenarios as examples in technical writing
- Technical vs. serious in writing
- Beginner’s mind and empathy in writing educational content
- (Even more) challenging programming projects you should try
- Making espresso at home
- Photograph a bookshelf, get a list of the book titles
- rhymer.day: A daily rhyming challenge
- Computer Vision Challenge: Book Colours
- Computer Vision Challenge: Find the Incorrect Annotations
- Computer Vision Challenge: Identify Missing Annotations
- Announcing Tay Tay Lyric of the Day
- The Coffee Hotline
- Computer Vision Challenge: Validate Detections in Rows and Columns
- Personal website ideas
- James’ Cooking Blog?
- Making my bookshelves clickable
- Know your model outputs while writing logic
- Super Bowl LVIII
- Little moments of joy
- Dancing
- My first experience with coffee
- The rain
January 2024
- The indie web
- Moments of joy
- Scenes from the coffee shop
- Using components to avoid repetition in technical writing
- Follow the on-screen instructions
- The what, why, how formula of technical writing
- A comprehensive guide to Python dictionary comprehensions
- Using “will” and “should” in technical writing
- My favourite data structure: The trie
- What type of cheese are you?
- Wonder
- Information coding: Encoding sorted lists of information
- You can make a time machine
- BioCLIP: A vision model for the Tree of Life
- Blogging as I learn
- Reflecting on my daily walks
- Information coding: Encoding sorted lists of information
- Contibuting text from LLMs to public domain wikis
- How (and why) to create a h-feed
- Documentation I Like: PyTorch Installation
- Edinburgh
- My Folklore ranking
- Give someone a compliment today
- What stories are on your desk?
- Why I like web components
- Anxiety
- How a blog post came to be: Behind the scenes
- Taylor Swift Quiz
- The web is yours
- Adventures in nginx caching and redirects
- What anime hair colour suits me?
- Adventures with compression: Part 4
- Nighthawks
- Software Technical Writing: A Guidebook
- Adventures with compression: Part 3
- Happy New Year!
- More adventures with compression
- The park
- Walking every day in January
2023 300
December 2023
- Midnight reflections
- Adventures with compression
- Guessthechar: A guess the missing letter game
- Small, dependable scripts
- Small towns
- The well-trodden path
- When you want to write a blog post but can’t...
- Advent of Technical Writing: Callout Boxes
- Advent of Technical Writing: Code Snippets
- Advent of Technical Writing: Effective Examples
- Advent of Technical Writing: Feature Releases
- Advent of Technical Writing: Reviewing Digital Ocean’s Documentation
- Advent of Technical Writing: Being a Technical Writer
- Happy Festivus
- Advent of Technical Writing: Publishing Contributor Blog Posts
- Donating books
- Advent of Technical Writing: Jargon
- Displaying Taylor Swift lyrics on my desk
- Advent of Technical Writing: Consistent Examples
- Advent of Technical Writing: How-To Outline
- Is writing customer-facing documentation technical writing?
- Advent of Technical Writing: Holistic Documentation Reviews
- The James’ Coffee Blog scavenger hunt
- Advent of Technical Writing: Reviewing the Wolfram Language Documentation
- My year in blogging
- Advent of Technical Writing: Outlines
- Advent of Technical Writing: Authoring Tools
- Christmas Tree
- Raccoon Ipsum
- Building a personal predictive text engine
- Advent of Technical Writing: Internal Code Documentation Requirements
- My writing setup
- The stars
- Advent of Technical Writing: Run-on Sentences
- Advent of Technical Writing: Facilitating Ideas
- Recommend Firefox (with a Web Component)
- Moments of Joy: Technical Solutions
- Advent of Technical Writing: Placeholders
- Advent of Technical Writing: Internal Dry Run
- Advent of Technical Writing: Deprecating Content
- Advent of Technical Writing: Style
- Advent of Technical Writing: Duplicate Information
- Building a lyrics recommendation bot
- The Festive Season
- Podcasts, Wrapped
- Advent of Technical Writing: Lists
- Advent of Technical Writing: Clarity
- Advent of Technical Writing: A Day in the Life
- Advent of Technical Writing: Types of Documentation
- Advent of Technical Writing: First Sentences
- Advent of Technical Writing: Navigation Structure
- Advent of Technical Writing: Navigation Links
- Winter
November 2023
- Spotify Wrapped
- My experience starting as a technical writer
- My personal website is incomplete, imperfect
- The Taxi Driver
- Time Travel
- The Bicyclist
- The Selfie
October 2023
- Self Care
- Autumn Moments
- Seasons
- Or wherever you get your podcasts
- Tips and reflections from running online meetups
- Alternative modalities of interacting with the web
- Autumn
- Click your fingers and talk to navigate a website
- The Early Bird
- Experiments with pose detection in Tensorflow.js
- The Squirrel
September 2023
- PyPi, the Cheese Shop
- London Sunrise
- Weather
- Blooming
- Continental Breakfast
- The Glint
- Growth
- The Smiley Face
- Background music
- Brainstorming Google Sheets to maps website
- Perspectives
- Noticing running gags
- Ensure all subpath layers resolve in URLs
- World Maps
- The Algorithmic Poem?
- Thoughts on teaching generative text literacy
- Writing introductions in technical tutorials
- Palm Trees in Scotland
- The Reflection
August 2023
- Lost sunglasses
- Brainstorming a syntax for a word usage query language
- The Familiar Tune
- The Guitarist
- Autumn
- Gardening
- The Python dictionary dispatch pattern
- Rainy Mornings
- The one with the Standing Desk
- Taylor Swift
- How minimal is too minimal? Brainstorming syntax for VisionScript
- Brainstorming a daily scavenger hunt game
- Blog about what you want
- Build an internal link recommendation API in 25 lines of code
- July 2023 IndieWeb Carnival Roundup
- Help Build the Social Web
- How I, Spy Works (My 60 Minute Website)
- Brainstorming Webmention post discovery
July 2023
- I am now a co-chair on the W3C Social Web Community Group
- Fun with Words: The Finale
- Be nice. Drink water. Smile.
- Brainstorming minimal, single-purpose web tools
- Build a Website in an Hour: Meetup in Review
- Coffee Preparation
- Moments
- The Airport
- Build a website in an hour event
- Starlight
- Playful programming
- Episode #4: Children’s television, static websites, all things coffee
- Neighbourhood cats
- A Visual Introduction to VisionScript
- Podcast #3: Bubbles, programming languages, use-case driven development
- Use case-driven standards development
- How to Delete a Webmention
- Podcast #2: Taylor Swift, dreams for the web, tea
- Fun with Words
- IndieWeb Carnival July 2023: Moments of Joy
June 2023
- Maintaining mf2py
- Moonlight
- James Coffee Blog Show
- Train vignettes
- Fun with Words
- Jon Batiste
- As the world goes by
- Cinnamon
- In one’s element
- Trees
- Writing and distance
- Moments of Joy: More little bites
- Exploring word surprisals and authorship verification
- Morning
- Summer
- Word surprisal for automated linking and glossaries
- Colourful shirts
- Fun with Words
- Things that make me say wow
- Fun with Words
- selfcare.tech Bot on Mastodon
- Announcing linguist.link: NLP insights for web pages
- Creating an index for my personal website using NLP
- Fun with Words
May 2023
- The weed
- CBBC and television programming for young people
- Chicago Manual of Style
- Brainstorming a coffee label reader application
- Moments of Joy
- Fun with Words
- Morning sun
- Background music
- Pavement games
- Plain language and clear communication
- Tiny vignettes
- Clouds
- How to Start a Garden
- OpenAI Blog RSS Feed
- Announcing stories.js: Create web stories on your personal website
- Announcing airportpianos.org: Help place pianos with airports
- Fun with Words
- Connection
- Heart and Soul
- Starting the Day
- The Night Sky
- Seated
- The Peace Lily
- Bring sunglasses
- Fun with Words
- Moments of joy: Little bites
- When the sun shines
- Announcing subscribable feeds for Bluesky profiles
- Fun with Words
- LLMs and Open Source Software
- Fun with Words (Second Edition Today)
- Fun with Words
April 2023
- Brainstorming an organization to place pianos in airports
- Awesome, in the traditional sense of the word
- The museum
- Midnight philosophy
- Airport delays
- Feeling all the things at once
- Message on the jumper
- Paradise
- Writing a story
- Fun with Words
- Sunglasses
- The Song: Part II
- The Song
- Announcing bsky.link, an embed link generator for Bluesky
- Space
- The Pond
- The Garlic
- Trees
- My source code root folder name
- Squirrels in a York park
- Favourite television couples
- Deep in Thought
- Fun with Words
- Fun with Words
- Reorganizing my site home page
- Activation Functions in Lisp
- In search of a mobile writing experience
- Implicitly downplaying knowledge in technical communication
- The Fog
- The Solo Singer
- Thinking Modalities
- Cs193p
- Loneliness
- Fun with Words
- Little moments of joy on the web
- Porridge Overflow
- Tea Routines in the UK
- Technical Estimations
- Write a little moment of joy
- Birds
- Exploring Personal Websites
- Friendship
- Hobonichi Journal
- Hobonichi Journal My 100
- More Fun with Words
- Taylor Swift songs to which I am listening
- The Rain
- Videoconferencing on a personal website
- Brandenburg Gate
- Fun with Words c6d480
- ‘What is the name of that song?’
- Abbreviations, acronyms, and style guides
- sudo !!
- TIL: Create HTML boilerplate code in Visual Studio Code
- Fun with Words: Computer science jargon edition
- Words of the day
- Writing moods
- Cash as a payment option
- Chiefs of Staff
- Coloured cups and teaching
- Using footnotes for link reminders while writing
- A story from visiting the Golden Gate Bridge
- Generating a PDF from a folder of Markdown files
- Possessive nouns ending in ‘s’
- Seeing your content at the top of a search results page
- Announcing Screenshots: How I generate meta images for my site
- More Little Moments of Joy
- Personal Websites and the Open Internet
- The Platform
- Wikipedia articles I have read lately
- Grayscale: A week on
- Using LLM Prompts for Source Attribution
- Throwbacks and Brainstorming Timehop for Blogs
- Writing and inspiration
- Prompt versioning with LLMs
- Source transparency in LLM information retrieval systems
- Words I have heard and read recently
March 2023
- I’m working on a new version of my printed blog
- Grayscale
- Observations designing information retrieval systems built on generative AI
- Travelling
- Travelling in a Self-Driving Car
- Send a Trackback in Two Lines of Code
- San Francisco City
- Solitude in third places
February 2023
- Where the people are sweeter than the waffles
- Sunset in San Francisco
- Blue, lavender, orange
- Ethereal
- Infrastructure dance
- IndieWeb Principles Poster
- Love and Playing Music
- For how long are you staying in San Francisco? 10 minutes.
- The taxicab
- When the moment strikes
- Stories from the piano
- Little moments of joy
- Technical content and a-ha moments
- Announcing commandk.js, a search dialog web component
- Announcing avtr.dev
- Announcing recipe syndication for Breakfast and Coffee
- Orea Brewer Recipe
- GitHub commit messages and emojis
- Words, words, and more words
- Who has the most compute?
- Happy Groundhog Day