In Let’s replace “user experience” with human experience, I posit that we should use “human experience” instead of “user experience,” the former expressing more directly the fact that we design software for people. When I make this website, I like to follow my curiosities. With that said, I care deeply about the accessibility of the content on...
I recently asked two friends to give feedback on part of the experience on my website. I invited both to calls, separately, and gave the requisite context about the feature I wanted them to try. I then watched as they navigated around the website in pursuit of a goal. I was tempted to refer to this as “user testing,” but then a hesitancy I have...
I love being the person who can make sound from a piano where there was silence. I hope that I can also be the person who inspires more people to find their own sound.
It was with the sounds of the cicadas, that Sestuna walked through the streets, looking for the rumored cafe with the ability to travel in time. She could hear the sounds of the first fireworks in the background, the children running around the streets. She passed the Obon festival, before she reached the right block. The sounds of children...
I have spent a lot of time thinking about how to organise content on my website. I want you, my readers, to be able to learn about the different types of content to write – from poetry to technical blog posts to stories – and find the posts that may be most interesting to you. There are several ways in which I organise my content: My homepage...
The hills on the horizon are becoming clearer, I think to myself. I reflect on the faint haze that remains after the heavy fog that painted the landscape white earlier in the morning. The low sun is shining, illuminating the few remaining colourful leaves on the trees in front of me. I think back to all the changes in the leaves — from the pink...
Music from Bon Iver plays in the background of a cosy cafe in the heart of Mitte, Berlin. The cafe is elevated from street level, which gave me a different perspective of the street. After a few days of cold mornings, the city had started to warm up a little bit. People will still wearing hats and gloves on the street, but the temperature was no...
I have been thinking about how musical concepts apply to blogging recently. For example, could you make “playlists” of your content that are curated by theme or the mood of the posts? For example, could I have a list of “Monday morning pick-me-ups” with heartwarming stories I have written, or a list of “Web Wednesday” posts that are all about...
A few weeks ago, I wrote a blog post with a friend in real time using Google Docs. We started with a blank page and conversed in the document to develop an idea. Then, we started writing, together. The result was a delightful story. We only spoke in Google Docs; our communication was limited to text. We decided to write a fiction story. I am less...
A supermarket in Berlin with a sign that reads ‘freshly made smiles’. Freshly made smiles at a supermarket in Berlin.
Nestled within the annals of my notes is “The long view of blogs,” followed by my wondering whether a blog could be a magnum opus. I later coalesced these ideas into the “long view” of a blog. I imagine this as thinking about the blog not as any single post, but rather as the collection of all works over time; the contents and presentation When I...
Showing feedback is an essential part of user experience design. When a user takes an action, it should be clear to the user that the action has been recognised by the system and that, as a result, something is happening. If an action is instant, feedback may mean showing the results of the task or an indicator to say the task is complete. If an...
Earlier this year, a friend told me that an essential part of learning design is to take note of what you like and don’t like. Once you notice that you like and don’t like, you can ask yourself why. From there begins the potential to analyze and build an eye that you can use to make your own designs. —- The IndieWeb has a philosophy of...
Slack uses keyword search. I can type in a keyword, like “optimization”, and find words that match the keyword. I can also add filters that refine my query. For example, I can say “optimization from:@James” to say that I only want to see messages that contain “optimization” and were authored by the user @James. Search filters are one of my...
ClickHouse is a database that aims to provide “lightning fast analytics for everyone.” They have published several resources online about how they strive toward making ClickHouse as fast as possible, including Why is ClickHouse so fast? In one post, Testing the Performance of ClickHouse, they outline a “ClickHouse comparison tool” that lets...
In “Regular Expression Matching with a Trigram Index or How Google Code Search Worked”, Russ Cox describes a system that allows for code search with regular expressions. It has taken me several reads of the article to understand roughly what is going on, and I still don’t have a full understanding. With that said, there is one pattern that stands...
The theme for this month’s IndieWeb Carnival is impact. In the announcement, Xandra, who is hosting the event this month, noted “has someone made a profound impact on you?” as a potential question to explore. While saying to a friend “I’m not sure where to start with such a big topic,” followed by a smiling face emoji to take the tension away...
Before you optimize your code, you should run a profiler to understand how your code performs. In Python, you can use cProfile to profile your code. cProfile is part of the Python standard library. With cProfile, you can find out: How long functions take to run in your code, both per call and cumulatively; How many times functions are called;...
I have noticed a pattern across my work in search and on static site generators: in both cases, the key to offering good performance for users is to precompute as much information as you can. Text search engines rely on “reverse indices,” which map words to the documents they are in. Reverse indices are structured in such a way that allows...
Search engines help us find information. Over the years, web search engines such as Google have experimented extensively with how that value proposition translates into a user experience. At first, search engines helped you find web pages that addressed queries. Google famously showed “10 blue links.” Then, search engines started to render more...
The Firefox address bar lets you search for URLs given a series of characters. You can then select a URL with your arrow keys and press enter to navigate to that URL. One use of this for me is finding files on GitHub. For example, I can type gith jam def to find the default.html file in the private jamesg.blog GitHub repository. I usually write...
The IndieWeb wiki, like Wikipedia, uses concise, descriptive URL slugs. A “slug” is the part of the URL after the domain name. For example, the following page takes you to the wiki page on coffee. https://indieweb.org/coffee I have recently been thinking about two benefits of concise URLs such as the one above: You can remember the URL so you...
When you copy images directly from a Google Document into Ghost, and potentially other rich text editors, URL references to the images in the Document are copied instead of the underlying image. This means that if the document is deleted, the images will be broken. Thus, before you use images in a Google Doc, you should export them. Google Docs...
Firefox has a feature that lets you map a character or sequence of characters typed in the Firefox address bar to a custom search engine. For example, you can map w to Wikipedia, so the query w coffee would take you to the Wikipedia search page for coffee (which auto-redirects to the Wikipedia page for coffee). I have just set up two shortcuts...
Your eyes open to see rays of the autumn sun peeking through your dark curtains. A soft alarm rings in the background. It’s time to start your day. While it’s a Sunday, you set an alarm to make sure you don’t spend your whole day in bed. Or, if you do, at least you have an alarm to prompt you to make a cup of coffee that you can drink while you...
How does one encapsulate this feeling of awe? I’m looking up at the stars and it’s beautiful. It’s beautiful. All the glimmers, from the intense to the twinkling. The moon, with a tint of red, is to my left. As I look West, I don’t see the comet for which I was looking. But it almost doesn’t matter. Because I see… wonder, and a reminder of how...
Read this article on James' Coffee Blog
At Homebrew Writing Club yesterday, someone asked “What is the writing equivalent of a duet?” I explore this concept with reference to collaborative writing, then extend the idea further of applying musical metaphors to writing. This led to thinking about the literary equivalent of playlists, remixing, and more. My thoughts are in the voice note...
html from links, adventure James' Coffee Blog mascot from links, adventure: № 1 october 9th, 2024 by James' Coffee Blog. 1. Designing for Users with Anxiety by the United Kingdom Government 2. Garfield: September 18th, 2024 by Jim Davis 3. A quote on words by Ursula K. Le Guin 4. Contronym on Wikipedia 5. Color Hunt A colour palette directory
When I am designing technology, I like to think about how fast I can make the experience. This involves making conscious engineering decisions at the beginning of a project to lay the foundation for building a fast application (i.e. choosing the right data structures). Then, as I develop, I ask questions like “is this as fast as it should be,...
This evening, I started to think about what the experience should be on audio notes. Could I offer transcriptions? What would that look like? What design elements should I have on the page? What features could I add to afford greater utility to the transcript, like search? I explore these questions in the below audio note, with additional...
I have recently been reflecting on how technical writing goes out of date, and what that means as a technical writer. In the voice note below, I explore how technical documents have relevance far beyond their immediate utility as a reference material. Your browser does not support the audio tag.
At Homebrew Writing Club this evening, we spoke about modalities of content: of writing, audio, video, and more. We also spoke about the best way to make something is to get started, and to make it as easy as possible to get started. For example, instead of worrying about how to classify content, you can write or make it, then classify it later....
The melody of The Sound by Carly Rae Jepsen plays in the background as I write the opening sentence for this blog post. When I hear a song in a playlist that I love, I often take a screenshot of the song name to remind me to listen to the song later. I often forget to go back and look at the songs. This weekend, however, I decided to look through...
Running monthly, the IndieWeb Movie Club is an invitation to watch a movie chosen by a selection of rotating hosts and, optionally, write your thoughts about the movie on your personal website. Mark started the blogging challenge with The Matrix, then Benji hosted September’s event with When Harry Met Sally. I am excited to be hosting this...
I love bookshops. I enjoy perusing the shelves in search for a new book to read, and the excitement that comes when I find a title that looks like exactly the kind of thing I might enjoy. I love seeing the new releases, searching for if there are new editions out of book series I have been following. I am inspired by how many stories are sitting...
Nine white coffee drippers rest on a wooden stand in a cosy coffee shop in the heart of London. “Can I get a cap [cappuccino] in ceramic?” says one barista as I stand and wait in line. Another barista, who is at the espresso machine making coffees, responds in a melodic tone “Cap in ceramic.” A cup is readied. The drink will soon be prepared....
The views from the Millenium Bridge in London are incredible. Opened in 2000s by Queen Elizabeth II, the bridge connects St. Paul’s Cathedral with the Tate Modern gallery. Standing there a few days ago while on holiday, I found myself gazing at the Tower Bridge. I had arrived in the early morning, as the sun was rising. I stood in a spot where...
Never give up, said the person sitting next to me in the theatre as we chatted in the interval of Hamilton. When I arrived at the theatre in London’s West End, I took my seat and looked around at the room. This was my first time going to see a musical. I was entranced by the building: the architecture, the grandeur. I was early to arrive, and sat...
It has been a busy day, characterised by delightful adventure. You have spent the day doing many of your favourite things, and trying new things, too. Night has fallen on the busy city and you find yourself in the heart of town: the place where you can find any cuisine that you seek. Your feet and legs are tired from the day. You walk one street...
Sweet Caroline, ba ba ba. Good times never been so good., sang, passionately, a group of friends who had just disembarked a London Underground train. I was at the foot of the escalator to go back to street level. As I went up, I saw people glancing, with joy, at the people singing who were down at the bottom of the escalator – the busker, with...
Every day, I look out for little things that make me smile. I sometimes take notes, knowing that those notes may bring back memories of the thing that brought me joy and the moment surrounding it. My Moments of joy series, in which I document things that made me smile, has helped me refine my storytelling skills. Since I was a child, I have loved...
I remember vividly when I first saw Picasso’s “Fernande with a Black Mantilla” painting. I was visiting the Guggenheim museum in New York. The spiral dome was under maintenance in preparation for a new exhibit (although that did not stop me from peeking through the curtain to see the vastness of it as I walked up the spiral platform through the...
“I’m just trying to think of a way to start this,” thought Cassie, as she embarked on her first blog post: an interview with two of her friends on what the web means to them. An assignment to pass her journalism class. Cassie: “Hello, everyone. Thank you for joining me today for this interview. I’m so excited! I must admit that I’m a bit nervous....
Suppose you are looking for my Aeropress recipe. To find this information, you could turn to my blog search engine. This search engine indexes all of my blog posts. The search engine is powered by JameSQL, a NoSQL document database. Turning text queries into JSON queries Let’s start with a query: aeropress recipe When you type this query into my...
The search engine on this website is powered by JameSQL, an open source, NoSQL database. The engine accepts a query and evaluates it according to any conditions specified. I strive to keep query times below 10ms, to help ensure the search experience feels and is as fast as possible. When I first released the search engine, relevance was...
On my way back from a trip to Vienna, I got breakfast at the airport. My flight was early, so I was especially looking forward to having a coffee with my meal. At the breakfast eatery I visited, there was a quiet room. The room was detached from the rest of the cafe with a glass wall, enough to significantly dull the sounds from outside. Whereas...
I was speaking with a friend yesterday about finding the time to write blog posts. I offered a tip that has worked for me recently: write before dinner. A few months ago, I had a work project and I decided to set myself a 20 minute deadline. I put my dinner in the oven, then started writing. In the time when I otherwise would be doing dishes or...
This blog post describes my thought process in implementing a transaction log for my database. My implementation may not follow best practices, as I am still learning. If this blog post sparks ideas on what I could do better, please let me know! JameSQL, my NoSQL database, was designed to be an in-memory data store. I use the tool for my blog...
The web has changed all of our lives: we are more connected than ever, knowledge is easier to access than ever. But sometimes it feels that we are subjected to that change, rather than being able to proactively participate in making the future; in crafting a web that speaks to what we want. Sometimes change feels impossible. I sometimes feel this...
Google, among other search engines, supports advanced operators for writing refined search queries. For example, you can use the site: search operator to constrain your search to a website, like: site:reddit.com aeropress coffee recipe In my How to build a query language in Python blog post, I walked through how to create the foundations of a...
I was having a conversation yesterday with a reader about clustering news headlines according to similarity. This had me reflecting on some of my past experiments with clustering and sorting, where I have used word embeddings to find similar documents. Word embeddings encode semantic similarity between documents, which allow for more nuanced...
Spreadsheets are a fascinating tool. With a spreadsheet, you can both store and structure data, and include formulas that run computations on the contents of a sheet. Every so often, I ask myself how a spreadsheet works. How do spreadsheets turn data and a list of formulas into a complete table of data? This week, I set out to build a spreadsheet...
This post is not an authority on how to make a NoSQL database, rather how I made mine. I am still actively learning this topic, but I wanted to write my thoughts to help me process what I am learning. I have used NoSQL databases for search projects in the past. A NoSQL database like Elasticsearch stores documents in (usually) a single table....
When you are working with dictionaries in Python, you may be familiar with the following process: You initialize a dictionary. You iterate over data. You check if a key is in a dictionary. If it isn’t, you add a default value. You add to the value associated with the key (i.e. to increment a counter, or add an item to a list or set). With the...
When you are building applications, you may want to add a cache to parts of your application. For example, consider a web directory that lists recipes. The directory has thousands of recipes available. You may want to add caching to database queries so that you don’t have to look up the database every time a user makes a request to the web...
Consensus algorithms allow computer scientists and data analysts to answer a question based on information from several data sources. These data sources may be independent, or data taken from the same source but at different time frames. Consider a scenario where you are building a tool that retrieves tags from Wikipedia album pages to build a...
One flat white, please. I sometimes order food, too; a warm croissant or fruit. I sit down at a table and take out my book from my backpack, the book I packed the previous day. Sometimes, I have two, if I am on the cusp of finishing one of them. I recline back in the chair in which I am sitting, open to the last page I was reading. This page is...
Websites that use well-defined URL structures are easier for me to navigate. When I use a site enough, I can remember specific paths, infer the structure of a site so I can find the page to which I want to go, and more. Some affordances of clean URL design, such as ease of navigation, can be implemented directly on the page – for example,...
In the “How to build a search index in Python” tutorial, we walked through how to build a search index in Python. This index, when queried, gives equal weights to all words that you use in your query. Thus, you can retrieve documents that contain words, but the documents are not ordered in any way. Once you have a search index, the next step is...
In this guide, I walk through how to build a query language in Python. No required knowledge of query languages is required to follow this guide. You will find this article easier to understand if you have some knowledge of trees. This guide should get you set up with all the information you need to make your own query language. With that said,...
I have been writing a test suite for Knowledge Graph Language (KGL), a concise syntax for querying knowledge graphs. My test suite ensures that, given a specific input, the language execution engine returns the correct response. Specific functionalities are tested, too, such as data imports and class methods that allow someone to manipulate a...
When I was re-designing my website, I put a lot of thought into the content section. I wanted to ensure my content was as readable as possible for as many people as possible. This meant that I wanted to design a default experience that adheres to design best practices. The design also had to be accessible, which would ensure that those using...
In response to my Ask the Website Maker blog post, a reader asked about my Moments of Joy series, curious about what moments I include, whether any moments are unpublished, and how I write the notes. That question inspired this blog post. In Februrary 2023, I blogged one of, if not the first, of my “Moments of Joy” blog posts. I ended the blog...
’Cause we never go out of style, we never go out of style… Wait… that’s a Taylor Swift lyric. This blog post is about a different kind of style: CSS styles. (Long-time readers, please disregard that this is the second blog post in which the topic is style and I referenced a Taylor Swift song.) fLaMEd fury asked a thought-provoking question on...
Would you like your scone warmed up? asked the barista as I placed my order in the bookstore cafe. I was touched by the question. I am used to cafes asking questions about the preferences of an order – “would you like that with oat milk?”, “what size of coffee would you like?” – but this time felt different. I was then asked what jam I would...
While sitting at my desk, I gazed up at the window and saw red, orange, yellow, green, blue, indigo, and violet. A rainbow. This is the second one I have seen over the last few days. Today’s rainbow looked like the bottom was close to my house. With a spontaneity that I didn’t realise I have, I walked briskly to get my shoes and keys. I was...
I am sincerely grateful for all of the knowledge people share about personal websites on the internet. From other blogs, I have found inspiration of things I can do on my website. I have learned how to do things I was previously unable to do. I have been inspired to create new things. In kind, I like to share what I am learning about personal...
Final boarding call for flight to Dublin, said the voice through the loudspeaker. I stood up and walked toward the end of the boarding line. It was one of those long, winding lines. There was a bit of awkwardness to figure out where to stand at the end of the line. As I maneuvered my way into a position in line, I smiled at someone who was, too,...
What is essential for this interface? is a question I have been thinking about in designing new digital interfaces and tools. Another way of framing this is “what do I really need?” When I went to re-design this website, those two questions were at the forefront of my mind. As I looked at the old version of my website, I realised that I could...
One of my favourite parts of San Francisco is the sun setting over the Golden Gate Bridge. I love the view from Fort Mason all the way to the marina and toward the bridge. I enjoy the array of colours and how they illuminate the horizon: the pinks, purples, reds, oranges. On my trip last week, I set out to see the sun set as much as possible. One...
It makes such a difference to someone’s day when you have a smile on your face., I said. The driver responded by saying “Exactly!”, in a tone of equal parts excitement and sincerity. I was in a taxi heading for work. I had my first coffee for the day, an iced mint mojito. A San Francisco classic made with milk, black coffee, and mint. Energised...
While walking down a street you have not yet explored, you notice a shop with tall, glass windows. On one window reads “Athena’s Coffee Shop” in traditional lettering. The kind of lettering you may associate with an old-timey store. But the interior is everything but dated. Through the clear glass, you see the vibrant, beaming sun illuminating...
I had been walking for half an hour along the Embarcadero in San Francisco, among my favourite places to walk in the morning. I can walk for miles and see beautiful sights along the way: bridges, palm trees, and people, like me, who have decided to start their morning with a walk. The time flew past. I was feeling a bit anxious – being away from...
How can search engines be so fast? While there are many parts of a search system, one of the key concepts to know is the inverted index. Suppose we have the following strings, all Taylor Swift lyrics: I made you my temple, my mural, my sky And I still talk to you when I’m screaming at the sky Started with a kiss We could manually search through...
I have been thinking about the question what makes a “good tool”? What are the characteristics that make me comfortable depending on a tool? What makes me delighted to use a tool? Expectations play a crucial role in my experience with a tool. Does this tool do what I expect? Are the controls easy to navigate? Are navigation elements grouped...
It is a warm, summer day. The sky is clear. The clouds has receded after days of rain. Over your morning coffee, you take a breath and realise the stillness of the moment. The wisps of steam coming from the side of your favourite coffee cup; the one that feels just right in your hands. While gazing out the window, a question comes to mind: What...
My favourite movie is The Map of Tiny Perfect Things, in which two characters discover they are stuck in a time loop. They use the time to make a map of all the wonderful things that happen in a small town. Toward the end of the movie, the song Frame of Reference by the Drug Store Romeos plays. Last time I heard the song, I wrote down the name,...
Lying in bed, you look through the window as the sun sets. It has been a rainy day. The sky was a blanket of clouds. As evening progressed, a soft pink hue emerged from the horizon. On a clear day, more of the sky would be pink. Today, the stokes of pink visible on the horizon are what you have. You smile as you notice that there is a break in...
After days of rain, I have been looking forward to seeing the sunset. I often note to myself that I should savour the sunset, watching as the sun recedes over the hills and changes the colour of the sky. Today, I am looking out another window through which I can see another part of the sky. Through the window, I can see candy floss clouds. I know...
I love to take notes of words. I write down words I hear that I think I could use in poetry and words that catch my eye. I sometimes take a note of a word after trying to think of how to express something and guessing what the right word may be. For example, I recently wondered if there was a word that meant arranged according to a taxonomy. I...
I am glad summer is here, I said to a friend earlier today. The sun was shining through the window after a dull, rainy spell of weather. It started to get dull throughout the day, but the sentiment with which I started my day – the joy of summer’s presence – was rooted in my mind. After dinner, I found myself going from tab to tab on the computer...