All Posts
-
Improving relevance on my site search engine
-
A quiet room at Vienna airport
-
Blogging before dinner
-
Implementing a transaction log for JameSQL
-
Hope for the web
-
Writing a search query transpiler
-
Clustering blog post titles with unigrams
-
Adventures building a spreadsheet engine in Python
-
Building a NoSQL database in Python
-
How to implement a time-based LRU cache in Python
-
Python pattern: Using defaultdicts to initialise dictionaries
-
Introduction to consensus modeling in Python
-
How I design my URLs
-
How to implement TF-IDF in Python
-
Saturday morning reading
-
How to build a query language in Python
-
Designing a fuzzer for Knowledge Graph Language
-
Designing the content layout for my website
-
Moments of Joy: Inspiration and practice
-
My (CSS) style
-
The rainbow
-
The little moments
-
Ask the Website Maker (Me!)
-
Tools and time
-
The boarding line
-
The coffee shop
-
Place
-
Fog
-
reflection
-
The morning taxi ride
-
The summer sunset
-
the pink sky
-
taste
-
Music Tuesday
-
Ideas, over coffee
-
Expectations in design
-
craft
-
Build a search index in Python
-
Scent
-
Fun with Words
-
Flowers
-
Four years of the personal web
-
The basement bookstore
-
Details
-
The coffee shop conversation
-
Avoiding anxious loops
-
The separation of writing and publishing tools
-
time
-
Design pattern: Progress bars with tips
-
notes
-
infinite wonders
-
evanescence
-
IndieWeb Carnival July 2024: Tools
-
Taylor Swift Subreddit Acronym Reference
-
Analyzing use of Taylor Swift song name acronyms on Reddit
-
The stories for me
-
Re-casing titles with word counts
-
time
-
Thinking in words
-
the rose
-
Building technology to do the boring work for me
-
Notebooks and whiteboards
-
Redesigning James’ Coffee Blog
-
glow
-
Retrieving abstracts from the Arxiv API
-
a new world
-
sunrise
-
Sketching algorithms in separate files
-
music
-
melody
-
Implementing incremental builds in Aurora
-
sunset
-
Python packages I love
-
Improving my blog post publishing tool
-
weaving
-
style
-
new skies
-
Ink and Quill
-
What makes a delightful tool?
-
Designing software
-
craft
-
Announcing Aurora
-
raindrop
-
My (new) website build process
-
time
-
the web
-
The scent
-
Pattern: Software hooks
-
TIL: Visualising memory usage in Python
-
moonlight
-
home rose
-
Implementing Incremental Static Regeneration in Aurora
-
whisper
-
moonlight
-
Walking
-
programming
-
rest
-
reminiscence
-
glow
-
warmth
-
the lake
-
Brainstorming a decision tree for website hosting choice
-
The hand cusp
-
sky
-
music
-
The midnight pianist
-
JUnited Blogging Challenge
-
discovery
-
Website seasons
-
warmth
-
Seasons of writing
-
Publish a h-feed, then convert to other formats
-
Python pattern: Ordered list of lambda functions
-
Pattern: Auto-extract data in a publishing tool
-
Notes on responsible web crawling
-
Brainstorming a new indie web search engine
-
growth
-
Polling feeds without writing feed parsing logic
-
Blogs and longevity
-
Designing a reading interface for research
-
Designing data loaders in Python classes
-
Plurality of community
-
Building an interactive tool to generate image maps
-
The Train WiFi Test
-
perspective
-
Music Monday: Exit Sign
-
articulate
-
wonder
-
the idea
-
the book
-
orange sky
-
Nature’s blanket
-
Immersed in words
-
The joy of the monostich
-
Sunset
-
before the storytelling
-
A new path
-
the lost poet
-
My creative environment
-
tabs
-
i am
-
echoes
-
my bookshelf
-
time
-
Announcing nanosearch, a Python package for making small search engines
-
Build a local web search engine with two commands
-
Walking
-
Personal archives
-
An indie web library
-
The insecurities and joy of writing software
-
Evening
-
Designing Aurora, a new static site generator
-
My new publishing workflow
-
Adding new features to my publishing tool
-
Brainstorming how to elevate older blog posts on my site
-
Register to Vote
-
Hugging Face Papers RSS Feed
-
Papers with Code RSS Feeds
-
(More) ideas, various and sundry
-
Ideas, various and sundry: Part III
-
Blog of the Day
-
The Windows 98 Manual
-
The next decade of the web
-
Free Library
-
Identity and limits
-
Mental Health Awareness Week
-
Late Night
-
What are effective ways to sift through new research?
-
My plant
-
Ideas, various and sundry
-
Growth
-
How I display blockquotes
-
My first (ever) cup of coffee
-
First cup of coffee (of the day)
-
The Tortured Poets Department
-
Moments of joy
-
Life and website gardening
-
The joy of bookstores
-
an email poem
-
bookmark
-
Blossom
-
The James’ Coffee Blog Mascot
-
Imperfect programs
-
Create an automated image collage with computer vision
-
Post scriptum
-
Memories
-
Liminal
-
Designing KGL: Reflections on syntax design
-
Coffee experiences
-
Philosophy musings
-
The joy of computing
-
Watching space in my living room
-
Wandering pen
-
having a website
-
My wander page
-
Details
-
before the bus leaves
-
Technical Writing Chat with Sabrina Lim
-
web we weave
-
Radio
-
Poetry to HTML
-
Penguin coffee
-
heavy eyes
-
evening travels
-
Weather
-
Using random boolean networks in compression
-
homebrew website club
-
Technical Writing Chat with Nathan Driver
-
my feline friend
-
Technical Writing Chat with Ally Sassman
-
The Lady Gaga espresso
-
Writing a poem in coem
-
Perspective
-
Evening
-
Sounds of making coffee
-
Updating my website RSS feed
-
Conundra, indeed: Using curly braces in English
-
How I decide what coffee to drink [Diagram]
-
Analysis of [the] prose use of braces (curly brackets)
-
Writing, connection, and where I write
-
Why I write
-
Exploring VisionScript language syntax
-
Exploring VisionScript language syntax: Part II
-
Rediscovering routines
-
Little moments of joy
-
Website pride
-
The joy of practicing a skill
-
Behind the desk
-
Designing an interpreter for Knowledge Graph Language (KGL)
-
Learning lower-level programming
-
Designing a knowledge graph query language
-
HTML’s readability, robustness, and intuitiveness
-
Seven Days of New Things Day 4: Walking Without Headphones
-
night time
-
the new season
-
Eggs and coffee
-
Seven Days of New Things Day 3: Terrari(a|ums), Bon Iver
-
Evening listening
-
The (My) Desk
-
Seven Days of New Things Day 2: Linear Algebra, Tulips
-
Seven Days of New Things Day 1: Editing Wikipedia, Sardines
-
Cataloguing my vinyl collection with computer vision
-
The Garfield cup, and other Saturday evening musings
-
Bee Yourself
-
Ambassador of asterisms, &c.
-
Perception
-
Spring cleaning
-
Designing an interactive decision tree for vision model deployments
-
Use a penguin avatar to navigate my personal website
-
IndieWebCamp Brighton 2024
-
100 (more) things you can do with your personal website
-
Traveling
-
The heroes we don’t deserve: Those who work on web standards
-
Internet gardening
-
The joy of incremental website improvements
-
Generating poetry from the Hacker News homepage
-
Notes on facilitating technical discussions in meetups
-
Comparing yourself to others in creative pursuits
-
Morning routines
-
Technical vs. serious in writing
-
Scenarios as examples in technical writing
-
Serving my blog posts as Linux manual pages
-
Blogging is the medium of incomplete stories
-
(Even more) challenging programming projects you should try
-
Beginner’s mind and empathy in writing educational content
-
Making espresso at home
-
rhymer.day: A daily rhyming challenge
-
Photograph a bookshelf, get a list of the book titles
-
Announcing Tay Tay Lyric of the Day
-
Computer Vision Challenge: Identify Missing Annotations
-
Computer Vision Challenge: Find the Incorrect Annotations
-
Computer Vision Challenge: Book Colours
-
Computer Vision Challenge: Validate Detections in Rows and Columns
-
The Coffee Hotline
-
100 things you can do on your personal website
-
James’ Cooking Blog?
-
Know your model outputs while writing logic
-
Making my bookshelves clickable
-
Super Bowl LVIII
-
Little moments of joy
-
My first experience with coffee
-
Dancing
-
The rain
-
The indie web
-
Moments of joy
-
Follow the on-screen instructions
-
Using components to avoid repetition in technical writing
-
Scenes from the coffee shop
-
The what, why, how formula of technical writing
-
Using “will” and “should” in technical writing
-
A comprehensive guide to Python dictionary comprehensions
-
My favourite data structure: The trie
-
Wonder
-
What type of cheese are you?
-
You can make a time machine
-
Information coding: Encoding sorted lists of information
-
Contibuting text from LLMs to public domain wikis
-
Information coding: Encoding sorted lists of information
-
Reflecting on my daily walks
-
Blogging as I learn
-
BioCLIP: A vision model for the Tree of Life
-
Documentation I Like: PyTorch Installation
-
How (and why) to create a h-feed
-
My Folklore ranking
-
Why I like web components
-
What stories are on your desk?
-
Give someone a compliment today
-
Anxiety
-
The web is yours
-
Taylor Swift Quiz
-
How a blog post came to be: Behind the scenes
-
Adventures in nginx caching and redirects
-
Nighthawks
-
Adventures with compression: Part 4
-
What anime hair colour suits me?
-
Software Technical Writing: A Guidebook
-
Adventures with compression: Part 3
-
Walking every day in January
-
The park
-
More adventures with compression
-
Happy New Year!
-
Midnight reflections
-
The well-trodden path
-
Small towns
-
Small, dependable scripts
-
Guessthechar: A guess the missing letter game
-
Adventures with compression
-
When you want to write a blog post but can’t...
-
Advent of Technical Writing: Reviewing Digital Ocean’s Documentation
-
Advent of Technical Writing: Feature Releases
-
Advent of Technical Writing: Effective Examples
-
Advent of Technical Writing: Code Snippets
-
Advent of Technical Writing: Callout Boxes
-
Advent of Technical Writing: Being a Technical Writer
-
Advent of Technical Writing: Publishing Contributor Blog Posts
-
Happy Festivus
-
Displaying Taylor Swift lyrics on my desk
-
Advent of Technical Writing: Jargon
-
Donating books
-
Advent of Technical Writing: Consistent Examples
-
Advent of Technical Writing: How-To Outline
-
Advent of Technical Writing: Holistic Documentation Reviews
-
Is writing customer-facing documentation technical writing?
-
Advent of Technical Writing: Reviewing the Wolfram Language Documentation
-
The James’ Coffee Blog scavenger hunt
-
Advent of Technical Writing: Outlines
-
My year in blogging
-
Raccoon Ipsum
-
Christmas Tree
-
Advent of Technical Writing: Authoring Tools
-
The stars
-
My writing setup
-
Advent of Technical Writing: Internal Code Documentation Requirements
-
Building a personal predictive text engine
-
Advent of Technical Writing: Run-on Sentences
-
Advent of Technical Writing: Facilitating Ideas
-
Advent of Technical Writing: Placeholders
-
Moments of Joy: Technical Solutions
-
Recommend Firefox (with a Web Component)
-
Advent of Technical Writing: Internal Dry Run
-
Advent of Technical Writing: Deprecating Content
-
Advent of Technical Writing: Style
-
The Festive Season
-
Building a lyrics recommendation bot
-
Advent of Technical Writing: Duplicate Information
-
Advent of Technical Writing: Lists
-
Podcasts, Wrapped
-
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
-
Winter
-
Advent of Technical Writing: Navigation Links
-
Advent of Technical Writing: Navigation Structure
-
Spotify Wrapped
-
My experience starting as a technical writer
-
Time Travel
-
The Taxi Driver
-
My personal website is incomplete, imperfect
-
The Selfie
-
The Bicyclist
-
Self Care
-
Seasons
-
Autumn Moments
-
Alternative modalities of interacting with the web
-
Tips and reflections from running online meetups
-
Or wherever you get your podcasts
-
The Squirrel
-
Experiments with pose detection in Tensorflow.js
-
The Early Bird
-
Click your fingers and talk to navigate a website
-
Autumn
-
PyPi, the Cheese Shop
-
Weather
-
London Sunrise
-
Blooming
-
The Glint
-
Continental Breakfast
-
The Smiley Face
-
Growth
-
World Maps
-
Ensure all subpath layers resolve in URLs
-
Noticing running gags
-
Perspectives
-
Brainstorming Google Sheets to maps website
-
Background music
-
The Reflection
-
Palm Trees in Scotland
-
Writing introductions in technical tutorials
-
Thoughts on teaching generative text literacy
-
The Algorithmic Poem?
-
Lost sunglasses
-
Brainstorming a syntax for a word usage query language
-
The Guitarist
-
The Familiar Tune
-
Taylor Swift
-
The one with the Standing Desk
-
Rainy Mornings
-
The Python dictionary dispatch pattern
-
Gardening
-
Autumn
-
How minimal is too minimal? Brainstorming syntax for VisionScript
-
Brainstorming a daily scavenger hunt game
-
Blog about what you want
-
July 2023 IndieWeb Carnival Roundup
-
Build an internal link recommendation API in 25 lines of code
-
SWICG Email: Community Events Calendar and Website
-
Help Build the Social Web
-
Brainstorming Webmention post discovery
-
How I, Spy Works (My 60 Minute Website)
-
I am now a co-chair on the W3C Social Web Community Group
-
Build a Website in an Hour: Meetup in Review
-
Brainstorming minimal, single-purpose web tools
-
Be nice. Drink water. Smile.
-
Fun with Words: The Finale
-
Coffee Preparation
-
Moments
-
The Airport
-
Build a website in an hour event
-
Starlight
-
Episode #4: Children’s television, static websites, all things coffee
-
Playful programming
-
Neighbourhood cats
-
A Visual Introduction to VisionScript
-
Use case-driven standards development
-
Podcast #3: Bubbles, programming languages, use-case driven development
-
Podcast #2: Taylor Swift, dreams for the web, tea
-
How to Delete a Webmention
-
IndieWeb Carnival July 2023: Moments of Joy
-
Fun with Words
-
Maintaining mf2py
-
Moonlight
-
James Coffee Blog Show
-
Train vignettes
-
Jon Batiste
-
Fun with Words
-
Writing and distance
-
Trees
-
In one’s element
-
Cinnamon
-
As the world goes by
-
Moments of Joy: More little bites
-
Exploring word surprisals and authorship verification
-
Word surprisal for automated linking and glossaries
-
Summer
-
Morning
-
Things that make me say wow
-
Fun with Words
-
Colourful shirts
-
Fun with Words
-
selfcare.tech Bot on Mastodon
-
Creating an index for my personal website using NLP
-
Announcing linguist.link: NLP insights for web pages
-
Fun with Words
-
The weed
-
Tiny vignettes
-
Plain language and clear communication
-
Pavement games
-
Background music
-
Morning sun
-
Fun with Words
-
Moments of Joy
-
Brainstorming a coffee label reader application
-
Chicago Manual of Style
-
CBBC and television programming for young people
-
How to Start a Garden
-
Clouds
-
Announcing stories.js: Create web stories on your personal website
-
OpenAI Blog RSS Feed
-
Announcing airportpianos.org: Help place pianos with airports
-
Fun with Words
-
Starting the Day
-
Heart and Soul
-
Connection
-
The Peace Lily
-
Seated
-
When the sun shines
-
Moments of joy: Little bites
-
Fun with Words
-
Bring sunglasses
-
LLMs and Open Source Software
-
Fun with Words
-
Announcing subscribable feeds for Bluesky profiles
-
Fun with Words
-
Fun with Words (Second Edition Today)
-
The museum
-
Awesome, in the traditional sense of the word
-
Brainstorming an organization to place pianos in airports
-
Midnight philosophy
-
Writing a story
-
Paradise
-
Message on the jumper
-
Feeling all the things at once
-
Airport delays
-
The Song
-
The Song: Part II
-
Sunglasses
-
Fun with Words
-
The Pond
-
Space
-
Announcing bsky.link, an embed link generator for Bluesky
-
Trees
-
The Garlic
-
Favourite television couples
-
Squirrels in a York park
-
My source code root folder name
-
Thinking Modalities
-
The Solo Singer
-
The Fog
-
Implicitly downplaying knowledge in technical communication
-
In search of a mobile writing experience
-
Activation Functions in Lisp
-
Reorganizing my site home page
-
Fun with Words
-
Fun with Words
-
Deep in Thought
-
Loneliness
-
CS193p
-
Write a little moment of joy
-
Technical Estimations
-
Tea Routines in the UK
-
Porridge Overflow
-
Little moments of joy on the web
-
Fun with Words
-
The Rain
-
Taylor Swift songs to which I am listening
-
More Fun with Words
-
Hobonichi Journal My 100
-
Hobonichi Journal
-
Friendship
-
Exploring Personal Websites
-
Birds
-
Videoconferencing on a personal website
-
TIL: Create HTML boilerplate code in Visual Studio Code
-
sudo !!
-
Abbreviations, acronyms, and style guides
-
‘What is the name of that song?’
-
Fun with Words c6d480
-
Brandenburg Gate
-
Writing moods
-
Words of the day
-
Fun with Words: Computer science jargon edition
-
Seeing your content at the top of a search results page
-
Possessive nouns ending in ‘s’
-
Generating a PDF from a folder of Markdown files
-
A story from visiting the Golden Gate Bridge
-
Using footnotes for link reminders while writing
-
Coloured cups and teaching
-
Chiefs of Staff
-
Cash as a payment option
-
Wikipedia articles I have read lately
-
The Platform
-
Personal Websites and the Open Internet
-
More Little Moments of Joy
-
Announcing Screenshots: How I generate meta images for my site
-
Throwbacks and Brainstorming Timehop for Blogs
-
Using LLM Prompts for Source Attribution
-
Grayscale: A week on
-
Words I have heard and read recently
-
Source transparency in LLM information retrieval systems
-
Prompt versioning with LLMs
-
Writing and inspiration
-
I’m working on a new version of my printed blog
-
Observations designing information retrieval systems built on generative AI
-
Grayscale
-
Travelling
-
San Francisco City
-
Send a Trackback in Two Lines of Code
-
Travelling in a Self-Driving Car
-
Solitude in third places
-
Sunset in San Francisco
-
Where the people are sweeter than the waffles
-
When the moment strikes
-
The taxicab
-
For how long are you staying in San Francisco? 10 minutes.
-
Love and Playing Music
-
IndieWeb Principles Poster
-
Infrastructure dance
-
Ethereal
-
Blue, lavender, orange
-
Stories from the piano
-
Little moments of joy
-
Announcing commandk.js, a search dialog web component
-
Technical content and a-ha moments
-
Orea Brewer Recipe
-
Announcing recipe syndication for Breakfast and Coffee
-
Announcing avtr.dev
-
Words, words, and more words
-
GitHub commit messages and emojis
-
Who has the most compute?
-
Happy Groundhog Day
-
The definition of tabled
-
Acts of kindness
-
Fun with search
-
Favourite words
-
Giving my first talk
-
The (not so awkward?) shuffle
-
Taking a break from personal projects: Mental health and coding
-
100 Days of IndieWeb Challenge
-
The Guardian Article Counts
-
Happy New Year
-
Seasonal emojis for your personal website
-
Create a sparkline showing your MediaWiki contributions
-
Documentation in chat: A case study from the IndieWeb
-
Announcing highlight.js, an extension to highlight text on web pages
-
Writing code with GitHub Copilot for personal projects and expressing ideas
-
A cappuccino emoji?
-
A quote from the Beaker Browser wind-down notice
-
The comfort of rewatching 90s sitcoms
-
Decentralized Website Communication with Webmention (Talk Announcement)
-
The IndieWeb (according to ChatGPT)
-
New Orleans 2022
-
Send a Webmention in 10 (or fewer) lines of Python code
-
Announcing IndieWeb Utils v0.4.0 (with reflections on the library)
-
Adding hovercards to my website
-
Adding fragmention links to my website
-
Announcing IndieWeb Utils v0.3.1
-
Announcing getsitemap, a Python library for sitemap URL retrieval
-
Joining my first W3C Sustainability CG meeting
-
Photo: Robin
-
Adding review support to Breakfast and Coffee
-
Hosting a fun DNS server with Go and a DNS library
-
Beyond Tellerrand 2022
-
Berlin 2022 - More Photos
-
TIL: Fixing the author card on my home page h-feed
-
Building an ‘on this day’ feature for my website
-
I wrote an article for Sprudge
-
Is Firefox a search engine?
-
Subscribe to IANA Root KSK signing and Google algorithm update events
-
Building an IRC archiver bot for the IndieWeb community
-
TIL: Terminal shortcuts
-
TIL: Don’t actually display the man pages
-
TIL: Using sed to replace text in a file
-
A few things I just learned about Lisp
-
Separating I/O and logic
-
A one-liner to get root paths in my sitemap
-
Creating maps to share the coffee shops I have visited
-
Join Homebrew Website Club Today
-
Creative Voices
-
The Melodica
-
Some thoughts on walled gardens
-
Poll: How much coffee you drink in a day? [Results]
-
York Coffee Recommendations
-
Linking to GitHub repositories from my own site
-
Owning my links
-
Growing houseplants
-
Sparklines in Google Sheets
-
Learning PHP: The Beginning
-
You don’t need to be an expert to write
-
Starting sentences with conjunctions isn’t bad practice?
-
Distributed polls on your personal website
-
Poll: How much coffee you drink in a day?
-
Using Known for posting notes, likes, and bookmarks
-
Plurality and the IndieWeb
-
Using the Tricolate coffee brewer
-
First day of spring
-
Computer-generated art
-
A photo from last weekend
-
The Fellow Ode grinder: a few weeks later
-
How can I improve the typography on my site?
-
IndieWeb Utils v0.2.0 is Out
-
Union Brew Lab
-
The Milkman
-
Cairngorm Coffee
-
What could a browser be?
-
Coffee Crawl
-
Breakfast and Coffee: A wiki for sharing food and drink recommendations
-
about this wiki
-
Submit
-
Fortitude Coffee
-
Cheapshot Coffee
-
Category:Scotland
-
Category:Edinburgh
-
Integrated IndieWeb Services
-
Some things on my mind
-
How my social reader search features work
-
Improving my social reader experience on mobile
-
Annotating my website page structure
-
Using my social reader as a progressive web application
-
How I post notes on my website
-
Social readers, a new way of thinking about social web interactions
-
Programming, cooking, and making what you want to use
-
IndieWeb Search results are also feeds
-
Movies I have watched recently
-
Parse IndieWeb Search in 15 lines of Python code
-
Scaling IndieWeb Search
-
What communities are you in?
-
Brainstorming Email to RSS: Part 2
-
Microsub to Blogroll Idea
-
Brainstorming Email to RSS
-
Overcomplicating post types (and committing to more simple ones)
-
Keep It Simple, Silly
-
Music by The Beatles
-
Happy New Year
-
Drinking tea in the afternoon
-
Advent of Bloggers 2021: The Final Edition
-
Advent of Bloggers 2021: Day 23
-
Advent of Bloggers 2021: Day 22
-
Advent of Bloggers 2021: Day 21
-
Announcing indieweb-utils
-
Advent of Bloggers 2021: Day 20
-
Advent of Bloggers 2021: Day 19
-
Advent of Bloggers 2021: Day 18
-
IndieWeb New Years’ Eve Commitment: Expanding my person tags
-
Advent of Bloggers 2021: Day 17
-
Advent of Bloggers 2021: Day 16
-
Advent of Bloggers 2021: Day 15
-
Advent of Bloggers 2021: Day 14
-
Advent of Bloggers 2021: Day 13
-
Advent of Bloggers 2021: Day 12
-
Advent of Bloggers 2021: Day 11
-
Advent of Bloggers 2021: Day 10
-
Advent of Bloggers 2021: Day 9
-
Advent of Bloggers 2021: Day 8
-
Advent of Bloggers 2021: Day 7
-
My Edinburgh Field Report is in Barista Magazine
-
Advent of Bloggers 2021: Day 6
-
Advent of Bloggers 2021: Day 5
-
Advent of Bloggers 2021: Day 4
-
Advent of Bloggers 2021: Day 3
-
Advent of Bloggers 2021: Day 2
-
Advent of Bloggers 2021
-
Moving over to my own static site generator
-
Playing Scrabble
-
Discovering new music (with recommendations)
-
A quick thank you to my readers
-
Building a Feed Reader to Follow Blogs and Websites: Part I
-
Introducing the HyperText Coffee Pot
-
Adding dark mode to my static Jekyll site
-
I love my website
-
Getting back into Vinyl
-
Exploring retro web design
-
Freezing coffee beans
-
Why I publish microformats on my website
-
Adding Reacji support to my Micropub editor
-
Coffee Filtration: A Guide
-
Adding reply context to my social pages
-
Building my own IndieAuth Endpoint
-
Coffee Chat with Conor from HBW Coffee
-
How to make a plant monitor dashboard: Part III
-
Weeknotes #1: The Beginning
-
Building my own webmention receiver
-
How to make a plant monitor dashboard: Part II
-
Some things to keep in mind if you build a search engine
-
Why I am Building IndieWeb Search
-
How to Make a Cold Foam Iced Coffee at Home
-
My New Social Pages
-
How my search engine direct answers work
-
A theory on sour coffee and cheap grinders
-
Coffee Chat with Gillian from MAYZE Finnieston
-
How to make a plant monitor dashboard: Part I
-
My search engine has moved to IndieWeb Search
-
Technology I Use
-
Bookshelf
-
Sharing social interactions with Micropub
-
Starbucks’ influence on my interest in speciality coffee
-
Flavour attributes I like in coffee
-
Coffee Chat with Hannah from the Manchester Coffee Festival
-
Fixing a line width issue on this blog
-
Ordering espresso at cafes
-
Sounds of the cafe
-
Building a random Aeropress recipe generator for my search engine
-
Coffee Chat with Pete from Black Pine Coffee
-
A Future for Packaging With Manifesto Coffee (Barista Magazine)
-
Quiet Edinburgh Zine Launch
-
Coffee Chat with Darryl from Short Long Black Coffee
-
Weighing search results on my personal search engine
-
Coffee Chat with Author Lani Kingston
-
How my blog search engine works, briefly
-
Build your own web home page: Tutorial
-
Coffee Chat with Fraser from EH9 ESPRESSO
-
Edinburgh’s police box cafes (feature in Barista Magazine Online)
-
Implementing TextRank on my blog search engine
-
Building a search engine for my blog: Part II
-
Building a search engine for my blog
-
Using Keybow to build custom keyboard functions
-
Writing physical letters
-
Coffee and food pairings
-
Old photos
-
My weekday coffee routine
-
Coffee Chat with Angela from The Barista League
-
Brazilian coffees and flavour notes
-
How I store coffee at home
-
A short word on decaf coffee
-
The Aromaboy: A month (or so) on
-
Blogs I follow using RSS
-
The Thermal Printer Project: Printing hcards
-
The Thermal Printer Project: IndieWeb Wiki
-
Recycling coffee packaging
-
Coffee Chat with Mandy from Mandy’s Daily Grind
-
The Thermal Printer Project: How I Print Events
-
The Thermal Printer Project was mentioned on the Adafruit Blog
-
Edinburgh New College (Photo)
-
Coffee Chat with William from It All Started Here
-
Coffee Chat with Robert from Brew Culture Coffee and Tea
-
I was featured in Coffee People
-
The Thermal Printer Project: Part III
-
I was featured on Rubenerd’s blog
-
The Thermal Printer Project: Part II.5
-
The Thermal Printer Project: Part II
-
The Thermal Printer Project: Part I
-
What made you start James’ Coffee Blog?
-
My growing mug collection
-
Saving my blog posts in one single .docx file
-
How is my website hosted?
-
Creating my GitHub README.md
-
Blog about what you are learning
-
Guess the Scottish Cafe
-
The printed blog
-
How I built this website
-
Game: Guess the Edinburgh Cafe (Part 3)
-
How do I start brewing coffee at home?
-
Tasting pour-over coffee at different points of extraction
-
Coffee Ratio Calculator Tool
-
Game: Guess the Edinburgh Cafe (Part 2)
-
My first brew with the Aromaboy
-
Coffee Chat with The Drip in Edinburgh
-
How to Shake Up Your Aeropress Recipe
-
Game: Guess the Edinburgh Cafe
-
Brewing with the Aeropress in the park
-
Drinking coffee out of a smaller cup
-
Speciality coffee shops in Edinburgh I have visited
-
Notes from a coffee crawl
-
More testing with the Hario V60
-
Coffee documentaries I have watched
-
Coffee Chat with Tim Williams from World Aeropress Championship
-
My experience using a cloth Aeropress filter
-
How I am brewing with the Aeropress
-
Coffee Chat with Luke from Standart
-
Coffee Chat with Jordan from Grumpy Mule
-
My Hario V60 continuous pour recipe
-
Sweet Bean Paste Book Review
-
Make cold brew at home with no fancy equipment
-
Complex and not so complex coffees
-
Taking a break from home espresso
-
Coffee Chat with Kat from Coffee People
-
Coffee Chat with Dan from Machina Coffee
-
Coffee Chat with James from PuckPuck
-
My first cloth-filtered coffee
-
The Chemex: A week or two on
-
Coffee Chat with Barista and Barista Trainer Millie (@thatgirlfromthecafe)
-
The Travelling Cat Chronicles Book Review
-
The Midnight Library Book Review
-
The Housekeeper and The Professor Book Review
-
The Great Passage by Shion Miura Book Review
-
Coffee Chat with Robbie from Canary Girl Coffee Company
-
My first go at making an affogato
-
Coffee origins I have tried so far
-
My two-cup Chemex recipe
-
How to Read a Coffee Label
-
Five Ways to Make Coffee at Home
-
Coffee Chat with Giulia from The Milkman
-
Brewing one cup of coffee with the Chemex
-
A Beginner’s Introduction to Grinding Coffee at Home
-
Coffee Chat with John from Artisan Roast and Coffee Nexus
-
The Coffee Visionary By Jasper Houtman Book Review
-
Scottish Coffee Roasters I Have Tried
-
Trying a Robusta coffee
-
Home espresso and interesting resources
-
My Home Brew Bar
-
Purchasing an espresso grinder
-
On the road to better espresso shots
-
Coffee Chat with Roland from Hasbean
-
Coffee Chat with Jamie from Luckie Beans
-
Comparing the Kalita Wave and the V60
-
Espresso journaling
-
My experience making espresso at home
-
My ongoing journey with the Flair
-
Coffee Chat with Danny from Obadiah Coffee
-
Pulling more shots with the Flair NEO
-
First shots with the Flair NEO
-
Pour-Over Brewing: Pulse and Continuous Pouring
-
Coffee Chat with Jay from AeroPrecipe
-
Brewing pour-over coffee without a bloom
-
Coffee Chat with Laboratorio Espresso
-
Strange Weather in Tokyo Book Review
-
The Guest Cat by Takashi Hiraide Book Review
-
Coffee Chat with Nasko Panov from NP’s Coffee Science
-
Coffee Chat with Haydn from Filtrew
-
Coffee Chat with Jamie from Sacred Grounds Coffee Company
-
How to Make an Iced Latte at Home
-
Coffee Chat with Lisa Lawson from Dear Green
-
Coffee Chat with Christopher from Full Court Press
-
How to Make a Cappuccino at Home (without an espresso machine)
-
Coffee Chat with Eve from Argyll Coffee Roasters
-
Uncommon Grounds by Mark Pendergrast Review
-
The Monk of Mokha Book Review
-
The Coffee Dictionary Book Review
-
My Experience Cupping Coffee with Steampunk
-
What I Know About Running Coffee Shops by Colin Harmon Review
-
Pour Your Heart Into It Book Review
-
A Pour-Over Brewing Glossary
-
London Coffee by Lani Kingston Book Review
-
God in a Cup by Michaele Weissman Review
-
Coffeeography: The Coffee Producers Book Review
-
Coffee: A Global History Review
-
The Best of Jim Seven Book Review
-
Coffee: From Bean to Barista Book Review
-
Bringing Back My Website
-
Coffee Chat with Alex from Manifesto Coffee
-
Brewing two cups with the Chemex
-
Before the coffee gets cold: Tales of the cafe Book Review
-
Acaia Pearl: ongoing thoughts
-
Coffee Chat with Fiona Grant from Glen Lyon Coffee Roasters
-
Coffee Chat with Todd Johnson from Williams and Johnson
-
Coffee Chat with Davide from Papercup Coffee Roasters
-
First impressions of the Acaia Pearl scale
-
Coffee Chat with Bruce from Fortitude Coffee Roasters
-
Cupping the same coffee roasted three ways: Part two
-
Ecuador Altos De Saragullas by Redemption Roasters
-
An Aeropress glossary
-
Cupping three of the same coffees
-
Coffee Chat with Cathryn from Little Fitzroy
-
My Experience with the Aeropress
-
Coffee Chat with Tom from Manchester Coffee Archive
-
San Jose de Lourdes Peru by Neighbourhood Coffee Roasters
-
Coffee Chat with Callum and Alex from Untitled Oats
-
The V60: A week (or so) on
-
First impressions with the Chemex
-
Observations on the Hario V60
-
My first impressions with the V60
-
Cupping the same coffee roasted differently
-
Coffee Chat with Adam from Cult Espresso
-
My Current V60 Recipe
-
Why do a coffee cupping at home?
-
V60 vs The Chemex
-
Coffee Chat with Paul from Lowdown Coffee
-
Basic set up for brewing with Kalita Wave
-
Dog and Hat Subscription Box Review
-
Coffee Chat with Jonathan from Ukiyo Koffie
-
Cleaning the Aeropress rubber plunger
-
The Nakano Thrift Shop Book Review
-
Juan Vergara Full Court Press Coffee Review
-
Pushing slower on the Aeropress
-
Coffee Chat with Robi Lambie from Cairngorm Coffee
-
Experimenting with coarser grinding for the Aeropress
-
Interview for The Coffee Life Blog
-
Before the coffee gets cold Book Review
-
Coffee Chat with Mark Edwards from Unorthodox Roasters
-
Guatemala Finca La Esperanza by Steampunk Coffee Review
-
My Kalita Wave Recipe
-
Aeropress vs. Kalita Wave?
-
Going back to the Aeropress
-
Thoughts on the regular Aeropress method
-
Coffee Chat with Cheapshot
-
El Salvador Finca Bonanza by Steampunk Coffee Review
-
Lessons from a home coffee cupping
-
Coffee Chat with Coffee Snob Blog
-
Coffee Chat with The Coffee Life
-
Coffee Chat with The Pourover
-
Observations using the Kalita Wave
-
Coffee Chat with Catherine Franks from Steampunk Coffee
-
Observations on gooseneck kettles
-
Standart Magazine Review (Issue 21)
-
Melitta Gooseneck Kettle Review
-
Baratza Encore Coffee Grinder Review
-
Jamila Abakeno Ethiopia by The Good Coffee Cartel Review
-
Observations on cupping at home
-
Acids in Coffee
-
The design of the Kalita Wave
-
My first brew with the Kalita Wave
-
Adado Ethiopia by The Good Coffee Cartel
-
Using a coarser grind with the Aeropress
-
Bukonzo Dream Uganda by Steampunk Coffee Review
-
Aeropress French Press
-
Why I switched to an electric grinder
-
Blending at home
-
Coffee Books to Read This Holiday Season: Part Two
-
Online cupping classes
-
Hario Mini Mill Grinder Review
-
My Aeropress is difficult to push...
-
Sweetness in Coffee
-
Coffee Chat with Silviu Rad from The Missing Bean
-
Brewing hacks
-
Coffee Books to Read This Holiday Season: Part One
-
I cannot taste this flavour...
-
Ethiopia Bale Mountain by Steampunk Coffee Review
-
Coffee Chat with Bean Thinking
-
Bombe, Ethiopia Obadiah Coffee Review
-
Coffee Blogs To Follow This Holiday Season: Part Two
-
Coffee Chat with Double Skinny Macchiato
-
Cojones Guatemalan by Good Coffee Cartel Review
-
Coffee Blogs To Follow This Holiday Season: Part One
-
Coffee Chat with SOLO Coffee
-
Barista Documentary Review
-
Baristas Documentary Review
-
What is Turkish Coffee?
-
Coffee Chat with Edinburgh Coffee Shops
-
Kenya Kiganjo Peaberry Artisan Roast Review
-
From Seed to Cup: Sourcing, Exporting, and Roasting
-
The Journey from Seed to Cup: Planting, Harvesting, and Processing
-
Craft Coffee: A Manual Review
-
Caffeinated Documentary Review
-
Coffee Chat with Brewing Coffee Manually
-
How I Taste Coffee
-
How to Make Coffee Book Review
-
We Have No Tables
-
Steampunk Columbia El Carmen Sugarcane Decaf Review
-
Artisan Roast Finca Don Jaime Review
-
The Blue Bottle Craft of Coffee Review
-
How I Choose Coffee Beans
-
Coffee: A Modern Field Guide Review
-
The Aeropress: Inverted vs Regular Methods
-
Coffee in ’90s Sitcoms
-
The Philosophy of Coffee Book Review
-
Grinding Coffee at Home
-
My First French Press Brew
-
Brewing a Better Cup of Coffee
-
Missing Bean Peruvian Direct Trade Review
-
Why I Love the Aeropress
-
Measuring Coffee with Scales
-
My First Brew with a Scale
-
How I Learn About Speciality Coffee
-
Steampunk Coffee’s Packaging
-
Changing My Coffee Brewing Process
-
Why I Drink Speciality Coffee
-
Curse of the Pumpkin Spice
-
Building Relationships at My Local Coffee Shop
-
An Unknown Coffee Tasting
-
A Low Supply of Beans
-
Tracking the Word Count on My Blog
-
Writing an Analytics Bash Script: Part II
-
Writing an Analytics Bash Script
-
Reading Content with RSS
-
Cleaning Up the IndieWeb Webring
-
Unorthodox Roasters Wee Stoater Review
-
Coffee Cupping with Steampunk
-
Checking My Webmentions Using RSS
-
Displaying Webmentions on My Site
-
Writing a New Tab Extension: Part II
-
Aeropress Recipe
-
Writing a New Tab Extension
-
Why I IndieWeb
-
Brewing Coffee With the Aeropress
-
Writing a Colophon
-
Resisting Complexity on My Site
-
How I IndieWeb
-
The Five Factors of Coffee Tasting
-
Owning a Raspberry Pi
-
Setting Up My Raspberry Pi
-
How I Design for Accessibility
-
Building a Weather Station
-
My Website Hosting Journey
-
Self Dogfooding and Losing Steam
-
Social Interactions on the Web
-
Micropub and Publishing Content
-
A New Website Architecture
-
Archiving My Internet Presence
-
Owning My Coffee Data
-
Rethinking the Blog
-
The Philosophy of Static Websites
-
Blue Bottle Coffee Course Notes
-
Trying Not to Overengineer
-
How I Use Webmentions
-
Scratching My Itches
-
My Experience With Jekyll
-
Writing on the IndieWeb Wiki
-
Adventures on the IndieWeb
-
My First Homebrew Website Club Meeting
-
Surfing the Net
Go Back to the Top