<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Hank Elijah's Blog</title>
	<link href="https://ethauber.github.io/blog/atom.xml" rel="self"/>
	<link href="https://ethauber.github.io/blog"/>
	<updated>2026-11-14T16:19:05+00:00</updated>
	<id>https://ethauber.github.io/blog</id>
	<author>
		<name>Elijah Hauber</name>
		<email>\\0@gmail.com</email>
	</author>

	
		<entry>
			<title>Model Context Protocol Applied</title>
			<link href="https://ethauber.github.io/blog/2025/10/24/model-context-protocol-applied"/>
			<updated>2025-10-24T00:00:00+00:00</updated>
			<id>https://ethauber.github.io/blog/2025/10/24/model-context-protocol-applied</id>
			<content type="html">&lt;p class=&quot;tagline-subtle&quot;&gt;Your AI’s interface to the world.&lt;/p&gt;

&lt;h2 id=&quot;definition&quot;&gt;Definition&lt;/h2&gt;
&lt;p&gt;Model Context Protocol, or MCP, is an open standard for a large language model driven application to call tools and read resources through a consistent interface.&lt;/p&gt;

&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;
&lt;p&gt;Modern AI systems like large language models (LLMs) applications are powerful but do not natively interact with the real world in a standardized way. Out of the box an LLM’s knowledge is frozen in time and cannot perform real actions on its own like checking today’s weather, querying a database, or booking a meeting.&lt;/p&gt;

&lt;p&gt;The Model Context Protocol (MCP) introduced by Anthropic in late 2024 allows an LLM to do real actions. MCP is an open standard “language” for LLMs to communicate with external data, tools, and services. MCP is like the USB-C port for AI applications acting as a uniform interface that allows LLM running systems to connect with anything from databases to web browsers in a standard way.&lt;/p&gt;

&lt;h2 id=&quot;why-does-mcpmatter&quot;&gt;Why does MCP matter?&lt;/h2&gt;
&lt;p&gt;By providing a protocol for standardizing LLM application integrations, MCP solves the “NxM integration problem”.&lt;/p&gt;

&lt;p&gt;When N amount of AI models require a customer connector for M amount of data sources the development overhead and need for scalable interoperable AI ecosystems increases.&lt;/p&gt;

&lt;p&gt;So it empowers LLMs to access real-time data, execute actions securely, and maintain context across tools in a way that does not require nearly as much overhead and creates an interoperable system by default in a much more scalable way.&lt;/p&gt;

&lt;p&gt;For software developers, this means that building once with this standard and for end consumers it results in personalized assistants that interact seamlessly with calendars, databases, etc.&lt;/p&gt;

&lt;p&gt;Adoption is rapid for MCP. Early integrators include Block, Apollo, Replit, Zed, Codeium, and Sourcegraph. Then major providers like OpenAI (ChatGPT) and Google DeepMind (Gemini) added support in early 2025.&lt;/p&gt;

&lt;h2 id=&quot;what-exactly-ismcp&quot;&gt;What Exactly is MCP?&lt;/h2&gt;
&lt;p&gt;MCP is a client-server protocol much like an API but tailored specifically for AI model needs. An MCP server is ran to expose some functionality (tool) or data and then an MCP client connects to this server. Usually the MCP client is inside an AI application or agent. The application or agent via the MCP client can then ask the server for information or invoke the tools it provides. Everything is communicated with JSON messages in the JSON-RPC 2.0 format. The design was inspired by the Language Server Protocol (LSP) from developer tooling so the MCP messages follow a request/response pattern.&lt;/p&gt;

&lt;p&gt;There is supposrt for multiple transport layers. The local connections for running an AI and tool on the same machine MCP can use standard in out streams STDIO for speed and simplicity. For remote or network connections that typically uses HTTP with Server-Sent Events (SSE) to stream the responses in real-time. Streamin gis important because the AI tasks usually involve iterative and/or long-running processes. SSE allos ther server to send back a flow of updates like the tokens generated for the answer to a query, progress notifications, etc. This can also be done by polling, which has its own trade offs.&lt;/p&gt;

&lt;p&gt;MCP servers are the providers in the ecosystem as they expose different endpoints to an MCP client consumer.
The different kinds are resources, tools, and prompts. The prompts are predefined interaction patterns or templates for the AI. It is a more advanced feature for the server to offere canned conversationsl routines or multi-step workflows that the AI can call. The tools are functions that the client can invoke to perform operations or side effects, which in a way is similar to POST endpoints in RESTful APIs. Examples are like sending an email, running a calculation, possibly controlling a robot in the near future, etc. Resources are read-only data access similar to GET endpoints in RESTful APIs that are typically used for providing context or knowledge to the model.&lt;/p&gt;

&lt;p&gt;MCP formalizes what many ad-hoc solutions tried to do with function calling or plugins, but in a tool-agnosticway. Instead of each AI vendor inventing their own plugin system, MCP provides a unified, open standard. For dvelopers, this signiciantly cuts down on integration complexity. We build a tool interface once as an MCP server and it cna work with any AI agent that “speaks” MCP. For AI applications or agents, MCP unlocks an ecosystem of capabilities that would otherwise be off-limits, making them more useful and context-aware for end users. Adn for end users, it mean AI assistants that can actually access up-to-date information and perform tasks on request, rather than hitting a dead end at the limits of their training data.&lt;/p&gt;

&lt;p&gt;To illustrate, Cloudflare’s team provides a great analogy: Imagine your AI assistant needs to make a restaurant reservation. Normally, it has no “phone” to call the restaurant but an MCP server could act like the phone line. The AI finds a “restaurant_reservation” tool from the MCP server and uses it to ask about availability to book a table. In this way, MCP is like giving the AI a phone number to get things done in the external world. It is the bridge between AI and everything else. Calendar, database, web service, or even AI agents are now communicable with this protocol.&lt;/p&gt;

&lt;h2 id=&quot;quickstart-leveraging-pythons-fastmcp-mcpserver&quot;&gt;Quickstart Leveraging python’s FastMCP (MCP Server)&lt;/h2&gt;
&lt;p&gt;Now let us actually solidify this with a practical example. We will set up a simple MCP server in Python using the FastMCP library to demonstrate the interactions with the protcol. FastMCP is the official Python framework (originally developed by Prefect) for building MCP servers and clients. It abstracts away the low-level-protocol handling so we can register Python functions as tools with minimal boilerplate.&lt;/p&gt;

&lt;h3 id=&quot;environment-and-installation&quot;&gt;Environment and Installation&lt;/h3&gt;
&lt;p&gt;First, make sure ptyhon 3.8 or newer is available. It is recommended to use a virtual environment for cleanliness. Then install fastmcp and a couple of helper libraries for HTTP and SSE interactions.
python3 -m venv venv
source venv/bin/activate
pip install fastmcp httpx uvicorn httpx-sse
FastMCP is the core library for MCP in python. HTTPX is the popular async http client and httpx-sse is an extension to help with server-sent events streaming. The uvicorn package is an ASGI web server. FastMCP will use it under the hood to run an HTTP server when we launch our MCP server.&lt;/p&gt;

&lt;h3 id=&quot;next-the-file-for-the-server-the-following-is-a-minimal-example-that-exposes-one-tool&quot;&gt;Next the file for the server. The following is a minimal example that exposes one tool.&lt;/h3&gt;
&lt;hr /&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fast&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mcp&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;FastMCP&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;mcp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FastMCP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;DemoMCP-Server&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mcp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tool&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;&quot;&quot;&quot;Add two numbers and return the result.&quot;&quot;&quot;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__name__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;__main__&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;mcp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;transport&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;port&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;8000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;

&lt;h3 id=&quot;calling-the-mcp-server-mcpclient&quot;&gt;Calling the MCP Server (MCP Client)&lt;/h3&gt;
&lt;p&gt;Now the client will call the new add tool. In a real scenario some custom AI agent or AI application would use an MCP client library. Instead head we will use HTTPX to send a raw request to show it is not magic but a simple network request. MCP is just JSON-RPC over HTTP.&lt;/p&gt;

&lt;p&gt;The MCP HTTP endpoint expects JSON-RPC 2.0 messages. For a tool call, that means sending a JSON payload that includes a method like ‘call_tool’ with a name and arguments. As well as an ID for the RPC call.&lt;/p&gt;

&lt;p&gt;The code is.&lt;/p&gt;
&lt;hr /&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;htpx&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;endpoint&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;http://localhost:8000/mcp&apos;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;request_payload&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;&quot;jsonrpc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;2.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;&quot;method&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;call_tool&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;&quot;params&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;add&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;&quot;arguments&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;response&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;https&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endpoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request_payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;timeout&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;5.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sa&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;The raw response is &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;

&lt;p&gt;That example is simple but there are scenarios where the tool might take time to continuously output like an AI streaming token by token. In MCP’s HTTP transport the responses can be sent as Server-Sent Events. If we had a tool that instead yielded partial results the server instead will keep the HTTP connecvtion open and send a stream of events. This is where the helper plugin library is useful.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;httpx_sse&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;connect_sse&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;httpx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Client&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;connect_sse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;GET&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endpoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event_source&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event_source&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;iter_sse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sa&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;Received event &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;

&lt;p&gt;This is an oversimplification since the client might initiate a call that then triggers the SSE. Regardless the idea is that iter_sse() allows iteration of the messages as they arrive allowing real-time updates.
Error Handling, Auth, etc.&lt;/p&gt;

&lt;p&gt;Our quickstart server is minimal and sutiable for a local demo but in real applications things like authentication, permission check, and error handling. MCP suports these concerns. FastMCP 2.0 includes integration with OAuth providers like GOogle GitHub, and others. Also, resource endpoints can be defined.&lt;/p&gt;

&lt;h2 id=&quot;use-case-1-agentic-systems-and-multi-agent-workflows&quot;&gt;Use Case 1: Agentic Systems and Multi-Agent Workflows&lt;/h2&gt;
</content>
		</entry>
	
		<entry>
			<title>Universals</title>
			<link href="https://ethauber.github.io/blog/2025/10/22/universals"/>
			<updated>2025-10-22T00:00:00+00:00</updated>
			<id>https://ethauber.github.io/blog/2025/10/22/universals</id>
			<content type="html">&lt;h2 id=&quot;definition&quot;&gt;Definition&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;universal&lt;/strong&gt; is a repeatable property or relation that many different things share.&lt;/p&gt;

&lt;p&gt;It is the common relation we define to group distinct items under one classification, for example &lt;strong&gt;redness&lt;/strong&gt; to a rose or a strawberry and &lt;strong&gt;triangularity&lt;/strong&gt; to a slice of pie or The Eiffel Tower.
These two examples lean more on the contrived side but nonetheless effectively explain and connect this idea to physical everyday human life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Philosophers&lt;/strong&gt; dispute what universals are.
&lt;strong&gt;Realists&lt;/strong&gt; say universals are real features that many things share.
&lt;strong&gt;Nominalists&lt;/strong&gt; and &lt;strong&gt;conceptualists&lt;/strong&gt; deny that universals exist independently of our words or ideas. Realists believe universals exist as objective features shared by objects, like redness (as mentioned above) is in all red things. The nominalists argue instead they are just names we assign to the similarities we observe.&lt;/p&gt;

&lt;p&gt;… Anyway, You do not need the digression of philosophically technical debate to use this concept.&lt;/p&gt;

&lt;h5 id=&quot;the-practical-point-is-that-naming-a-universal-helps-us-realize-it&quot;&gt;The practical point is that naming a universal helps us realize it.&lt;/h5&gt;
&lt;h5 id=&quot;we-may-do-something-with-it-or-simply-appreciate-it-for-what-it-is-with-a-more-compressed-solidified-understanding-and-often-in-a-single-defined-word&quot;&gt;We may do something with it or simply appreciate it for what it is with a more compressed solidified understanding and often in a single defined word.&lt;/h5&gt;
&lt;p&gt;In the following sections I will explain the motivation for knowing universals and illustrate other less tangible ones that I have personally noticed in my life as a human.&lt;/p&gt;

&lt;p class=&quot;text-muted small&quot;&gt;IF you prefer to continue expanding more THEN search “metaphysics branch of philosophy”, which oversimplified just means the part of philosophy that is concerned with studies into the most basic structure of reality. Like what there is and how it fits together. There are also links in the works cited below for more reading on universals from a philosophical perspective.&lt;/p&gt;
&lt;hr /&gt;

&lt;h2 id=&quot;why-care&quot;&gt;Why care?&lt;/h2&gt;
&lt;p&gt;Knowing what universals are and being able to identify them allows us to see patterns that we would not realize. Naming universals helps us communicate, reflect on, and decide how to respond to the universal we encounter. For example, if I notice a universal in my life like &lt;strong&gt;retrovive&lt;/strong&gt; (defined below), I can choose to act on it by restoring or reliving lost functions rather than no action because it is not yet realized. This realization can lead to personal growth, improved decision-making, and to comprehend/fathom our experiences.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;initial-universals&quot;&gt;Initial Universals&lt;/h2&gt;
&lt;h4 id=&quot;1-retrovive&quot;&gt;1) Retrovive&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Definition|&lt;/strong&gt; Realizing the value of something only after it is gone and then choosing to rebuild or revive it as it was or in a new form.
The thinking that went behind this was that I noticed my nostalgic feeling about college, relationships, and now decommissioned software I used to enjoy.
But, instead of just ruminating on whatever it may be, I chose to re-alive it in some form or fashion.
In the process of attempting to define this universal, I realized that it captures a common human experience of nostalgia and the desire to reclaim or recreate lost aspects of our lives.
I first started with the idea of finding a single word for the realization of how much one appreciated something until it has passed but not necessarily taken for granted nor lamented on as well as the action of bringing it back in some form. Candidates were “nostalgia”, “evanescence”, “fear of missing out (FOMO)”, “anemoia”, “saudade”, and “resurrection”.
The following list are words that I found but did not fully capture the universal I was defining:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Nostalgia&lt;/strong&gt; is defined as “affectionate and often sentimental feeling experienced when remembering past times, places, and experiences, especially those with happy personal associations.” &lt;br /&gt;
  https://www.britannica.com/science/nostalgia&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Evanescence&lt;/strong&gt; is defined as “the condition of lasting for only a short time, then disappearing quickly and being forgotten.” &lt;br /&gt;
  https://dictionary.cambridge.org/dictionary/english/evanescence&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Fear of missing out (FOMO)&lt;/strong&gt; is defined as “a feeling of anxiety or insecurity over the possibility of missing out on something, as an event or an opportunity.” &lt;br /&gt;
  https://www.dictionary.com/browse/fomo&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Anemoia&lt;/strong&gt; is defined as “Nostalgia for a time or a place one has never known.” &lt;br /&gt;
  https://en.wiktionary.org/wiki/anemoia&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Saudade&lt;/strong&gt; is defined as “wistfulness, melancholy, nostalgia, yearning, longing; the feeling of missing something or someone” and originates from Portuguese. &lt;br /&gt;
  https://en.wiktionary.org/wiki/saudade&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Resurrection&lt;/strong&gt; is defined as “the act of causing something that had ended or been forgotten or lost to exist again, to be used again, etc.” &lt;br /&gt;
  https://www.britannica.com/dictionary/resurrection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After considering these words, I thought about how some people that primarily only play retro video games call themselves “retrogamers” and how they revive old games on new hardware or emulators.
Often causing old games to have a new life and audience.. reviving them and possibly their companies that made them.
So I decided on combining “retro” and “revive” to make “retrovive” to capture the essence of this universal.&lt;/p&gt;

&lt;p class=&quot;small&quot;&gt;Essentially it is a definition portmanteau of “retro” and “revive”. Defined and created by me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Near-miss words|&lt;/strong&gt; Nostalgia, resurrection, anemoia, saudade.&lt;br /&gt;
&lt;strong&gt;Signals to notice|&lt;/strong&gt; Feelings of nostalgia, loss, and the desire to recreate or restore something from the past.&lt;br /&gt;
&lt;strong&gt;Small step|&lt;/strong&gt; Write a single sentence that attempts to define the function you miss (not the thing but it may help to start writing this first). Then plan a 15 minute session this week to either rebuild a small part of that function or decide to relive it in a new way.&lt;/p&gt;

&lt;h4 id=&quot;2-neophobia&quot;&gt;2) Neophobia&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Definition|&lt;/strong&gt; “The fear or hatred of novelty, new things, innovation, or unfamiliar places or situations.” &lt;br /&gt;
https://en.wiktionary.org/wiki/neophobia\&lt;/p&gt;

&lt;p class=&quot;small&quot;&gt;A real cemented definition of a word that is accepted by the general population.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Near-miss words|&lt;/strong&gt; change, novelty, aversion.&lt;br /&gt;
&lt;strong&gt;Signals to notice|&lt;/strong&gt; Getting older… or more seriously feelings of anxiety, discomfort, or resistance when encountering new experiences, ideas, and/or environments.&lt;br /&gt;
&lt;strong&gt;Small step|&lt;/strong&gt; Try one new thing this week that you have not done before. It can be as simple as taking a different route to pickup groceries, trying a new food, and/or learning a new word. Really it is that easy and will help you in the long run. You, are, likely, already doing it by reading this blog!&lt;/p&gt;

&lt;h4 id=&quot;3-conterust&quot;&gt;3) Conterust&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Definition|&lt;/strong&gt; The gradual loss of context about a thing after not focusing on it for any period of time.&lt;/p&gt;

&lt;p&gt;I realized this universal after my somewhat recent post on context engineering, working with LLMs, and personal experience with switching between tasks.&lt;/p&gt;

&lt;p class=&quot;small&quot;&gt;Essentially it is a definition portmanteau of “context” and “rust”. Defined and created by me.&lt;/p&gt;
&lt;p&gt;Other close, almost as succinct descriptive pairings are “attention decay” and “context rot”.&lt;/p&gt;
&lt;ul class=&quot;small&quot;&gt;
  &lt;li&gt;&lt;strong&gt;Attention decay&lt;/strong&gt; https://en.wikipedia.org/wiki/Decay_theory&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Context Rot&lt;/strong&gt; https://research.trychroma.com/context-rot&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Near-miss words|&lt;/strong&gt; forgetfulness, detachment, desensitization.&lt;br /&gt;
&lt;strong&gt;Signals to notice|&lt;/strong&gt; Forgetting details about a person, project, task, or idea after switching away from it. Difficulty re-entering the mindset or flow state you were in when you were last with it.&lt;br /&gt;
&lt;strong&gt;Small step|&lt;/strong&gt; Leave yourself notes and ideally with a “next action” at the end of each “session”. It’ll make it better to re-enter the context next time.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;emerging-universals&quot;&gt;Emerging Universals&lt;/h2&gt;

&lt;h4 id=&quot;1-mundalchemy&quot;&gt;1) Mundalchemy&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Definition|&lt;/strong&gt; Weighted, mundane, and repetitive labor is the core necessary and transformative substance for achievement. It is not an obstacle to a larger endeavor, but the literal mechanism of transformation required to achieve it.&lt;/p&gt;

&lt;p&gt;The thinking behind this is that we often view “the mundane” as a barrier keeping us from our goals. However, true transformation requires material to work with. When you hold a signed card from an artist you admire, you are holding the final gold, but Mundalchemy is the mindset that got them through the months (and in some cases years for larger projects) of leaden, repetitive sketching to produce it. In everyday life, it’s the difference between resenting the tedious repetition of studying for a Security+ 701 exam or writing boilerplate for a side project and recognizing that continuing with those dry, yet weighted concepts is the mechanism of our professional or creative transmutation.&lt;/p&gt;

&lt;p&gt;List of words considered:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Tapas&lt;/strong&gt; is defined as “in Hinduism, ascetic practice voluntarily carried out to achieve spiritual power or purification.” It refers to the generative heat or friction of disciplined practice but carries a different metaphysical weight. It porte en soi a specific achievement, which is spiritual enlightenment, as opposed to a more encompassing universal for a generic achievement. &lt;br /&gt;
  https://www.britannica.com/topic/tapas&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Nigredo&lt;/strong&gt; Names a specific phase within a transmutation rather than encompassing the entire process or the realization that the phase itself is necessary. &lt;br /&gt;
  https://en.wikipedia.org/wiki/Nigredo&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Grit&lt;/strong&gt; courage and resolve; strength of character. &lt;br /&gt;
  https://dictionary.cambridge.org/dictionary/english/grit&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Persistence&lt;/strong&gt; firm or obstinate continuance in a course of action in spite of difficulty or opposition. &lt;br /&gt;
  https://dictionary.cambridge.org/dictionary/english/persistence&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The grind&lt;/strong&gt; Dull work. &lt;br /&gt;
  https://dictionary.cambridge.org/dictionary/english/grind&lt;/li&gt;
&lt;/ul&gt;

&lt;p class=&quot;small&quot;&gt;Essentially, it is a definition portmanteau (apparently I like portmanteaus) of “mundane” and “alchemy.” Defined and created by me. Inspired by Sam Guay’s Patreon Saturnine Oracle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Near-miss words|&lt;/strong&gt; Tapas, Nigredo, grit, persistence, the grind.&lt;br /&gt;
&lt;strong&gt;Signals to notice|&lt;/strong&gt; Feeling the “saturnine” weight of a massive to-do list, a distant deadline, or a highly repetitive task, but experiencing a sense of contemplative purpose and quiet momentum rather than resentment or burnout.&lt;br /&gt;
&lt;strong&gt;Small step|&lt;/strong&gt; Take one highly repetitive or “leaden” task you must do this week. Instead of framing it as a chore to endure, explicitly define it in a single sentence as the specific &lt;em&gt;“ingredient”&lt;/em&gt; required for the transmutation you are currently undergoing.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;changelog&quot;&gt;Changelog&lt;/h2&gt;
&lt;ul class=&quot;text-muted small&quot;&gt;
  &lt;li&gt;2026-03-15: Added Mundalchemy universal.&lt;/li&gt;
  &lt;li&gt;2025-10-22: Initial published version with definition, motivation, near-miss words, signals to notice, and small step to take.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;works-cited-mla&quot;&gt;Works Cited (MLA)&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;“Universal.” &lt;em&gt;Encyclopaedia Britannica&lt;/em&gt;. Encyclopaedia Britannica, Inc., &lt;br /&gt;
https://www.britannica.com/topic/universal &lt;br /&gt;
Accessed 22 Oct. 2025.&lt;/li&gt;
  &lt;li&gt;Mertz, D. W. “Universals.” &lt;em&gt;Internet Encyclopedia of Philosophy&lt;/em&gt;, &lt;br /&gt;
https://iep.utm.edu/universa/ &lt;br /&gt;
Accessed 22 Oct. 2025.&lt;/li&gt;
  &lt;li&gt;Klima, Gyula. “The Medieval Problem of Universals.” &lt;em&gt;The Stanford Encyclopedia of Philosophy&lt;/em&gt;, substantive revision 27 Feb. 2022, &lt;br /&gt;
https://plato.stanford.edu/entries/universals-medieval/ &lt;br /&gt;
Accessed 22 Oct. 2025.&lt;/li&gt;
  &lt;li&gt;Orilia, Francesco. “Properties.” &lt;em&gt;The Stanford Encyclopedia of Philosophy&lt;/em&gt;, substantive revision 19 Feb. 2025,&lt;br /&gt;
https://plato.stanford.edu/entries/properties/ &lt;br /&gt;
Accessed 22 Oct. 2025.&lt;/li&gt;
  &lt;li&gt;“Metaphysics.” &lt;em&gt;Britannica Dictionary&lt;/em&gt;,&lt;br /&gt;
https://www.britannica.com/dictionary/metaphysics &lt;br /&gt;
Accessed 22 Oct. 2025.&lt;/li&gt;
  &lt;li&gt;Guay, Sam. “The Saturnine Oracle.” &lt;em&gt;Patreon&lt;/em&gt;, 1 Apr. 2025,&lt;br /&gt;
https://www.patreon.com/posts/33215616 &lt;br /&gt;
https://www.patreon.com/collection/347624 &lt;br /&gt;
Accessed 14 Mar. 2026.&lt;/li&gt;
  &lt;li&gt;“Tapas.” &lt;em&gt;Encyclopaedia Britannica&lt;/em&gt;. Encyclopaedia Britannica, Inc.,&lt;br /&gt;
https://www.britannica.com/topic/tapas &lt;br /&gt;
Accessed 15 Mar. 2026.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;supplementary-reading&quot;&gt;Supplementary Reading&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Roob, Alexander. &lt;em&gt;Alchemy &amp;amp; Mysticism&lt;/em&gt;. Taschen, 1997.&lt;br /&gt;
https://archive.org/details/alchemy-and-mysticism/page/10/mode/2up&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;this-is-a-living-document&quot;&gt;This is a living document&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;I will add more universals over time and refine names and examples as I reflect further.&lt;/li&gt;
  &lt;li&gt;Each entry includes a name, a one-line definition, near-miss words, signals to notice, and a smallest next step.&lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>
	
		<entry>
			<title>Useful Links for Devs</title>
			<link href="https://ethauber.github.io/blog/2020/09/14/dev-links"/>
			<updated>2020-09-14T00:00:00+00:00</updated>
			<id>https://ethauber.github.io/blog/2020/09/14/dev-links</id>
			<content type="html">&lt;h2 id=&quot;apis&quot;&gt;APIS&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://case.law/api/&quot;&gt;Case Law&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.twilio.com/docs/api&quot;&gt;Twilio&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://developer.hootsuite.com/docs/api-overview&quot;&gt;Hootsuite&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.usa.gov/developer#item-211492&quot;&gt;USA.gov&lt;/a&gt;&lt;br /&gt;
Other popular APIs by rapidapi.com&lt;br /&gt;
https://rapidapi.com/blog/most-popular-api/&lt;/p&gt;

&lt;h2 id=&quot;dev-docs&quot;&gt;DEV Docs&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.google.com/&quot;&gt;Google&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://developers.apple.com/&quot;&gt;Apple&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://developers.facebook.com/&quot;&gt;Facebook&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://developer.microsoft.com/&quot;&gt;Microsoft&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://developer.amazon.com/&quot;&gt;Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;cheatsheets&quot;&gt;Cheatsheets&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet&quot;&gt;Markdown&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://perso.limsi.fr/pointal/_media/python:cours:mementopython3-english.pdf&quot;&gt;Python&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://lzone.de/cheat-sheet/Jinja&quot;&gt;Jinja Template&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://hackerthemes.com/bootstrap-cheatsheet/&quot;&gt;Bootstrap&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://oscarotero.com/jquery/&quot;&gt;jQuery&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://adam-marsden.co.uk/css-cheat-sheet&quot;&gt;CSS&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.simplehtmlguide.com/cheatsheet.php&quot;&gt;HTML&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;colors&quot;&gt;Colors&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://encycolorpedia.com/search?q=sun&quot;&gt;https://encycolorpedia.com/search?q=sun&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.w3schools.com/colors/colors_hsl.asp&quot;&gt;https://www.w3schools.com/colors/colors_hsl.asp&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://color.adobe.com/create/color-wheel&quot;&gt;https://color.adobe.com/create/color-wheel&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;bootstrap&quot;&gt;Bootstrap&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://hackerthemes.com/bootstrap-cheatsheet/&quot;&gt;https://hackerthemes.com/bootstrap-cheatsheet/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://shoelace.io/&quot;&gt;http://shoelace.io/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;jekyll&quot;&gt;Jekyll&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://jekyllrb.com/docs/&quot;&gt;https://jekyllrb.com/docs/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://michaelsoolee.com/jekyll-existing-folder/&quot;&gt;https://michaelsoolee.com/jekyll-existing-folder/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://stackoverflow.com/questions/26314435/jekyll-not-generating-index-html&quot;&gt;https://stackoverflow.com/jekyll-not-generating-index-html&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;js&quot;&gt;JS&lt;/h2&gt;
&lt;p&gt;On events for javascript are discouraged.&lt;br /&gt;
Instead use addeventlistener for events.&lt;br /&gt;
&lt;a href=&quot;https://stackoverflow.com/questions/47243537/javascript-uncaught-referenceerror-object-is-not-defined-at-htmlinputelement&quot;&gt;stackoverflow.com/object-not-defined-at-htmlinputelement&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;cool-websites&quot;&gt;Cool Websites&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.adamhartwig.co.uk/skills&quot;&gt;https://www.adamhartwig.co.uk/skills&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://jimramsden.com/&quot;&gt;https://jimramsden.com/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.narrowdesign.com/#&quot;&gt;http://www.narrowdesign.com/#&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;chats&quot;&gt;Chats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://freenode.net&quot;&gt;freenode.net&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;digital-footprint&quot;&gt;Digital Footprint&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://192.com&quot;&gt;192.com&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://whostalkin.com&quot;&gt;whostalkin.com&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://whois.com&quot;&gt;whois.com&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://alexa.com&quot;&gt;alexa.com&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://tineye.com&quot;&gt;tineye.com&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://pipl.com&quot;&gt;pipl.com&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://google.com/blogsearch&quot;&gt;google.com/blogsearch&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://google.com/groups&quot;&gt;google.com/groups&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://google.com/images&quot;&gt;google.com/images&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;learning-websites&quot;&gt;Learning websites&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://acloud.guru&quot;&gt;acloud.guru&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://udemy.com&quot;&gt;udemy.com&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://stackskills.com/courses&quot;&gt;https://stackskills.com/courses&lt;/a&gt;&lt;/p&gt;
</content>
		</entry>
	
		<entry>
			<title>Elijah Hauber, Launches Site</title>
			<link href="https://ethauber.github.io/blog/2017/06/07/Elijah-Hauber-site-launched"/>
			<updated>2017-06-07T00:00:00+00:00</updated>
			<id>https://ethauber.github.io/blog/2017/06/07/Elijah-Hauber-site-launched</id>
			<content type="html">&lt;p&gt;Put a website together.
It is powered by &lt;a href=&quot;http://jekyllrb.com&quot; target=&quot;_blank&quot;&gt;Jekyll&lt;/a&gt;.&lt;br /&gt;
Markdown is used to author posts.&lt;/p&gt;
</content>
		</entry>
	

</feed>
