<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://example.com/</link><atom:link href="https://example.com/index.xml" rel="self" type="application/rss+xml"/><description/><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sun, 15 Feb 2026 00:00:00 +0000</lastBuildDate><image><url>https://example.com/media/icon_hu_702a800cd775dbac.png</url><title/><link>https://example.com/</link></image><item><title>Topological Data Analysis and RAG: Building an Architectural Chatbot for Large Legacy .NET Repositories</title><link>https://example.com/blog/tda-based-rag/</link><pubDate>Sat, 21 Feb 2026 00:00:00 +0000</pubDate><guid>https://example.com/blog/tda-based-rag/</guid><description>&lt;h3 id="1-the-abyss-of-legacy-systems-a-topological-perspective"&gt;1. The Abyss of Legacy Systems: A Topological Perspective&lt;/h3&gt;
&lt;p&gt;In the enterprise software industry, few engineering challenges are as risk-laden as confronting a massive legacy monolith. We frequently deal with immense .NET solutions that have accumulated years of technical debt, comprising dozens of projects and thousands of classes entangled in a coupling that defies human comprehension. In such environments, proposing a blind migration to microservices is a recipe for catastrophic regressions.&lt;/p&gt;
&lt;p&gt;Approaching this challenge as an Applied Mathematician and AI Architect, it becomes clear that traditional methods like manual code reviews are insufficient. To operate effectively and improve Developer Experience (DevEx), we must automate the discovery process. The goal is to construct a system that autonomously extracts the underlying architecture and presents it as an interactive Architectural Dependency Graph (ADG). This shifts the paradigm from reading code line-by-line to querying a mathematically mapped ecosystem.&lt;/p&gt;
&lt;h3 id="2-abstract-static-analysis-the-code-to-data-translation"&gt;2. Abstract Static Analysis: The Code-to-Data Translation&lt;/h3&gt;
&lt;p&gt;The foundational layer of this architectural retrieval pipeline requires bridging the gap between raw source code and structured topological data. Relying on simple text searches is inadequate; instead, the system must perform deep abstract static analysis.&lt;/p&gt;
&lt;p&gt;By tapping into compiler APIs like the Roslyn platform for .NET, we traverse the Abstract Syntax Trees (ASTs) of the entire solution. This extraction engine dissects the true functional coupling at a granular level, tracking how classes instantiate one another and how methods invoke cross-boundary logic.&lt;/p&gt;
&lt;p&gt;The output is a highly detailed dataset that models the software as a vast network where every namespace, class, and method is a discrete node, and every invocation is a directed edge. However, this raw topological data is overwhelmingly dense.&lt;/p&gt;
&lt;h3 id="3-topological-data-analysis-tda-and-functional-communities"&gt;3. Topological Data Analysis (TDA) and Functional Communities&lt;/h3&gt;
&lt;p&gt;When you plot a graph of a massive legacy system, the visual result is typically a chaotic, unreadable structure—often referred to as a &lt;em&gt;hairball&lt;/em&gt;. To extract actionable architectural insights, we must treat software engineering as a Topological Data Analysis (TDA) problem.&lt;/p&gt;
&lt;p&gt;To break down this hairball, we implement the &lt;strong&gt;Louvain Algorithm&lt;/strong&gt;, a greedy optimization method for community detection that maximizes the &lt;em&gt;modularity&lt;/em&gt; of a network. Rather than clustering based on arbitrary spatial distances, it identifies dense subgraphs that represent the actual functional domains hidden within the monolith.&lt;/p&gt;
&lt;p&gt;To guide the clustering, we engineered a custom heuristic affinity function to calculate the connection weight $W(u,v)$ between two specific projects ($u$ and $v$):&lt;/p&gt;
$$W(u,v) = V_{traffic} + 1.5 \cdot \delta_{layer} + 0.5 \cdot S_{jaccard}$$&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Traffic Volume ($V_{traffic}$):&lt;/strong&gt; The foundational weight, representing the raw coupling or the exact number of times project $u$ calls members in project $v$.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer Gravity ($\delta_{layer}$):&lt;/strong&gt; A multiplier applied if both projects belong to the same architectural stratum, forcing the algorithm to respect vertical stratification.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Technological DNA ($S_{jaccard}$):&lt;/strong&gt; Calculated using the Jaccard similarity coefficient of external dependencies (like shared NuGet packages) to group modules with similar infrastructure profiles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By parameterizing this affinity function, the pipeline dynamically generates multiple clustering configurations, allowing an architect to view the system through purely structural, functional, or hybrid lenses.&lt;/p&gt;
&lt;h3 id="4-semantic-enrichment-via-large-language-models"&gt;4. Semantic Enrichment via Large Language Models&lt;/h3&gt;
&lt;p&gt;Structural data alone tells us &lt;em&gt;how&lt;/em&gt; the code is connected, but not &lt;em&gt;why&lt;/em&gt;. To achieve true architectural intelligence, the pipeline integrates a semantic enrichment layer powered by Large Language Models (LLMs).&lt;/p&gt;
&lt;p&gt;Instead of dumping massive files into an LLM&amp;rsquo;s context window, the system iterates through the isolated nodes generated during static analysis. For each critical member, the LLM analyzes the localized source code and generates a structured description containing its primary purpose, sequential logic steps, and core keywords.&lt;/p&gt;
&lt;p&gt;This enrichment engine is backed by a robust caching layer to optimize token expenditure and execution time during subsequent runs.&lt;/p&gt;
&lt;h3 id="5-the-unified-knowledge-base-and-graphrag-chatbot"&gt;5. The Unified Knowledge Base and GraphRAG Chatbot&lt;/h3&gt;
&lt;p&gt;With both topological data and semantic metadata in hand, the system compiles a Unified Knowledge Base (KB). Using multilingual sentence transformers, the semantic summaries of the codebase are converted into dense vector embeddings. This perfectly aligns the physical location of the code with its structural relationships and semantic meaning.&lt;/p&gt;
&lt;p&gt;The culmination of this pipeline is an immersive frontend built with D3.js that hosts a local Retrieval-Augmented Generation (RAG) assistant directly in the browser. When an architect asks a complex question, the GraphRAG pipeline executes a precise sequence:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Vectorization:&lt;/strong&gt; The user&amp;rsquo;s query is converted into an embedding in the client using the Xenova library.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Semantic Search:&lt;/strong&gt; A cosine similarity search is performed across the vector database.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-Encoder Reranking:&lt;/strong&gt; A secondary model reranks the retrieved code candidates to discard irrelevant matches.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Fetching:&lt;/strong&gt; The system dynamically fetches the exact real-time lines of source code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Synthesis:&lt;/strong&gt; The compiled context is injected into the LLM to output a definitive architectural assessment.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="conclusion"&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;This TDA-based methodology completely redefines how we approach technical debt. By discarding manual code review in favor of abstract static analysis, sophisticated graph clustering, and AI-driven semantic retrieval, we can tame deteriorated codebases. The legacy monolith transforms from an impenetrable black box into a fully mapped and interactively queryable ecosystem.&lt;/p&gt;</description></item><item><title>Mastering Dotfiles: A Guide to GNU Stow</title><link>https://example.com/blog/stow-guide/</link><pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate><guid>https://example.com/blog/stow-guide/</guid><description>&lt;p&gt;Across all the years that I had to resintall Linux; like when i broke stuff irreparably and had to reinstall, when I tried out many distros, never deciding whether I want dual boot with Windows or straight up Linux and swithicing constantly; I have always struggled with remembering all my specific aliases, configurations and functions.&lt;/p&gt;
&lt;p&gt;After the third time of having to do this I wised up and created my first &lt;em&gt;dotfiles&lt;/em&gt; repository to track my configuration, yet I still had to clone this repository and manually replace each default configuration file for mine. This can be straightforward for a couple of files but when you reach 5+ or even if you have specific configuration set for applications like &lt;em&gt;Terminator&lt;/em&gt; or &lt;em&gt;Cursor&lt;/em&gt; this becomes a nightmare.&lt;/p&gt;
&lt;p&gt;Today, I am sharing a complete beginner’s guide on how I manage my environment using &lt;strong&gt;GNU Stow&lt;/strong&gt;, a symlink farm manager that turns a messy home directory into a version-controlled masterpiece.&lt;/p&gt;
&lt;p&gt;This guide explains everything from installing Stow to understanding directory structures and actually linking your dotfiles. No prior experience with Stow or symlinks is assumed.&lt;/p&gt;
&lt;h3 id="check-the-github-repository"&gt;&lt;em&gt;Check the github repository &amp;ndash;&amp;gt;
&lt;/em&gt;&lt;/h3&gt;
&lt;hr&gt;
&lt;h2 id="1-what-are-dotfiles-and-why-use-stow"&gt;1. What are dotfiles and why use Stow?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Dotfiles&lt;/strong&gt; are configuration files whose names usually start with a dot (e.g. &lt;code&gt;.zshrc&lt;/code&gt;, &lt;code&gt;.gitconfig&lt;/code&gt;). They live in your &lt;strong&gt;home directory&lt;/strong&gt; (&lt;code&gt;~&lt;/code&gt; or &lt;code&gt;/home/yourname&lt;/code&gt; on Linux, &lt;code&gt;/Users/yourname&lt;/code&gt; on macOS). Programs read them to customize your shell, Git, editor, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Dotfiles are scattered in &lt;code&gt;~&lt;/code&gt;. Backing them up, moving them to a new machine, or sharing them is messy if you copy files by hand.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What Stow does:&lt;/strong&gt; Stow creates &lt;strong&gt;symlinks&lt;/strong&gt; (shortcuts) in your home directory that point into a single folder. So:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your “real” config files live in &lt;strong&gt;one place&lt;/strong&gt; (e.g. &lt;code&gt;~/Stow-Guide&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;In your home directory you only see &lt;strong&gt;links&lt;/strong&gt; that point into that place.&lt;/li&gt;
&lt;li&gt;Edit the file in the repo → the link in &lt;code&gt;~&lt;/code&gt; “sees” the same file. Backup the repo (e.g. with Git) and you’ve backed up all your dotfiles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;GNU Stow&lt;/strong&gt; is the program that creates and removes those links in a consistent way (all of the grains of sand in the planet earth wouldn&amp;rsquo;t be enough to count how many times I&amp;rsquo;ve messed up a
and lost all data). You run it from a directory that contains one folder per “package” (e.g. shell, git, vim). Stow then links the &lt;em&gt;contents&lt;/em&gt; of each package into a target directory (here: your home &lt;code&gt;~&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2-what-is-a-symlink"&gt;2. What is a symlink&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;symlink&lt;/strong&gt; (symbolic link) is a special file that acts like a pointer to another file or folder. When a program opens &lt;code&gt;~/.zshrc&lt;/code&gt;, the system follows the pointer and reads the file it points to (e.g. the one inside your dotfiles repo).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;You&lt;/strong&gt; edit the file in the repo; the link in &lt;code&gt;~&lt;/code&gt; always “shows” that same file.&lt;/li&gt;
&lt;li&gt;Deleting the &lt;strong&gt;link&lt;/strong&gt; only removes the pointer, not the real file in the repo.&lt;/li&gt;
&lt;li&gt;Stow creates these links for you so the layout in &lt;code&gt;~&lt;/code&gt; matches what programs expect (e.g. &lt;code&gt;~/.zshrc&lt;/code&gt;, &lt;code&gt;~/.config/Cursor/...&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-installing-gnu-stow"&gt;3. Installing GNU Stow&lt;/h2&gt;
&lt;p&gt;You need Stow installed before you can run any &lt;code&gt;stow&lt;/code&gt; commands.&lt;/p&gt;
&lt;h3 id="linux-debian--ubuntu--similar"&gt;Linux (Debian / Ubuntu / similar)&lt;/h3&gt;
&lt;p&gt;Open a terminal and run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install stow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Enter your password when asked. When it finishes, check that it worked:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see a version number (e.g. &lt;code&gt;stow (GNU Stow) version 2.3.1&lt;/code&gt;).&lt;/p&gt;
&lt;h3 id="macos"&gt;macOS&lt;/h3&gt;
&lt;p&gt;If you use Homebrew:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install stow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="other-systems"&gt;Other systems&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fedora / RHEL:&lt;/strong&gt; &lt;code&gt;sudo dnf install stow&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arch:&lt;/strong&gt; &lt;code&gt;sudo pacman -S stow&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FreeBSD:&lt;/strong&gt; &lt;code&gt;pkg install stow&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your OS isn’t listed, search for “install GNU Stow” plus your distro name.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4-where-things-live-in-this-repo"&gt;4. Where things live in this repo&lt;/h2&gt;
&lt;p&gt;With &lt;strong&gt;Stow&lt;/strong&gt;, you can have whatever folder structure you want inside your tracked repository. This allows you to maintain several different configurations that you can quickly test out to see if you like them.&lt;/p&gt;
&lt;p&gt;As an example, I share my current configuration below.&lt;/p&gt;
&lt;p&gt;My
has a &lt;strong&gt;root directory&lt;/strong&gt; (the folder you get when you clone it). Inside that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/strong&gt; — Short overview and reference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;STOW-BEGINNER-GUIDE.md&lt;/code&gt;&lt;/strong&gt; — The original file this post is based on.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;backups/&lt;/code&gt;&lt;/strong&gt; — Contains two different things:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;backups/stow/&lt;/code&gt;&lt;/strong&gt; — This is the directory that holds all &lt;strong&gt;Stow packages&lt;/strong&gt;. You will run the &lt;code&gt;stow&lt;/code&gt; command from inside &lt;code&gt;backups/stow/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;backups/periodic-backup/&lt;/code&gt;&lt;/strong&gt; — Other backup data (e.g. crontabs). Not used by Stow for linking dotfiles.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stow packages&lt;/strong&gt; = everything that Stow will link into your home = the &lt;strong&gt;direct subfolders&lt;/strong&gt; of &lt;strong&gt;&lt;code&gt;backups/stow/&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Each of those subfolders is one &lt;strong&gt;package&lt;/strong&gt; (e.g. &lt;code&gt;shell&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;vim&lt;/code&gt;). The &lt;strong&gt;names&lt;/strong&gt; of those folders are what you pass to &lt;code&gt;stow&lt;/code&gt; (e.g. &lt;code&gt;stow -vSt ~ shell&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Folder layout (simplified):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stow-Guide/ ← repo root (e.g. ~/Stow-Guide)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── README.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── STOW-BEGINNER-GUIDE.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── backups/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── stow/ ← run &amp;#34;stow&amp;#34; from here
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── shell/ ← package &amp;#34;shell&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── git/ ← package &amp;#34;git&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── vim/ ← package &amp;#34;vim&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── ssh/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── input/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── cursor/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── terminator/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── bin/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── backups/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ └── Templates/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── periodic-backup/ ← not used by stow for ~
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="why-backupsstow"&gt;&lt;strong&gt;Why “backups/stow”?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;MY repo was set up so that the actual Stow packages live under &lt;code&gt;backups/stow/&lt;/code&gt;. The important part is: **you must run &lt;code&gt;stow&lt;/code&gt; from inside &lt;code&gt;backups/stow/**&lt;/code&gt; (or pass that path to Stow). The rest of the repo stays out of the way of Stow.&lt;/p&gt;
&lt;h2 id="5-how-the-folder-structure-becomes-your-home-directory"&gt;5. How the folder structure becomes your home directory&lt;/h2&gt;
&lt;p&gt;Stow does &lt;strong&gt;not&lt;/strong&gt; link the package folder itself. It links the &lt;strong&gt;contents&lt;/strong&gt; of each package so that the paths inside the package mirror your home directory.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rule:&lt;/strong&gt; Everything inside a package folder is placed under the &lt;strong&gt;target&lt;/strong&gt; (here: &lt;code&gt;~&lt;/code&gt;) with the same path.&lt;/p&gt;
&lt;h3 id="example-shell-package"&gt;Example: &lt;code&gt;shell&lt;/code&gt; package&lt;/h3&gt;
&lt;p&gt;This package contains configuration files for various shells (Bash, Zsh, Fish). Note how it handles both files in the root and nested directories.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Folder structure inside &lt;code&gt;backups/stow/shell/&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;shell/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .config
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── config.fish
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .oh-my-zsh/themes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── themes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── afowler.zsh-theme
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .aliases
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .bash_profile
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .bash_prompt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .functions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .functions.fish
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .git-repos-globally.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .profile
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── .zshrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To install this package, you run the following command from inside &lt;code&gt;backups/stow/&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow -vSt ~ shell
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;What happens:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Stow mirrors the structure found inside &lt;code&gt;shell/&lt;/code&gt; directly to your home directory (&lt;code&gt;~&lt;/code&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.zshrc&lt;/code&gt; → symlink to &lt;code&gt;…/backups/stow/shell/.zshrc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.bashrc&lt;/code&gt; → symlink to &lt;code&gt;…/backups/stow/shell/.bashrc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/config.fish&lt;/code&gt; → symlink to &lt;code&gt;…/backups/stow/shell/.config/config.fish&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.oh-my-zsh/themes/afowler.zsh-theme&lt;/code&gt; → symlink to &lt;code&gt;…/backups/stow/shell/.oh-my-zsh/themes/afowler.zsh-theme&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Understanding the command flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-v&lt;/code&gt; (Verbose):&lt;/strong&gt; Reports what changes are being made so you can see exactly what Stow is doing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-S&lt;/code&gt; (Stow):&lt;/strong&gt; Explicitly tells Stow to &amp;ldquo;stow&amp;rdquo; (install) the package.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-t ~&lt;/code&gt; (Target):&lt;/strong&gt; Specifies the target directory where the symlinks should be created. &lt;code&gt;~&lt;/code&gt; represents your home directory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;shell&lt;/code&gt;:&lt;/strong&gt; The name of the package (the folder name) you want to stow.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="summary-table-what-each-package-puts-in-"&gt;Summary table (what each package puts in &lt;code&gt;~&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;If we look at the other folders we can create the following table:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Package&lt;/th&gt;
&lt;th&gt;What appears in your home directory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;shell&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.zshrc&lt;/code&gt;, &lt;code&gt;.bashrc&lt;/code&gt;, &lt;code&gt;.profile&lt;/code&gt;, &lt;code&gt;.aliases&lt;/code&gt;, &lt;code&gt;.functions&lt;/code&gt;, &lt;code&gt;.oh-my-zsh/...&lt;/code&gt;, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;git&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.gitconfig&lt;/code&gt;, &lt;code&gt;.gitignore&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;vim&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.vimrc&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ssh&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.ssh/config&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;input&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.inputrc&lt;/code&gt; (readline config)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;cursor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.config/Cursor/User/settings.json&lt;/code&gt;, &lt;code&gt;keybindings.json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;terminator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.config/terminator/config&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;bin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;change-background&lt;/code&gt;, &lt;code&gt;.local/bin/env&lt;/code&gt;, &lt;code&gt;.local/bin/uv&lt;/code&gt;, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;backups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Files under &lt;code&gt;backups/&lt;/code&gt; and &lt;code&gt;.backups/&lt;/code&gt; (lists and dconf backups)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Templates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Templates/main.r&lt;/code&gt;, &lt;code&gt;Templates/main.cpp&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Understanding this “package contents mirror &lt;code&gt;~&lt;/code&gt;” idea is the key to mastering Stow.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="6-step-by-step-linking-your-dotfiles-stowing"&gt;6. Step-by-step: linking your dotfiles (stowing)&lt;/h2&gt;
&lt;h3 id="step-1-open-a-terminal"&gt;Step 1: Open a terminal&lt;/h3&gt;
&lt;p&gt;Open your usual terminal (e.g. GNOME Terminal, Konsole, iTerm, Terminal.app).&lt;/p&gt;
&lt;h3 id="step-2-install-stow"&gt;Step 2: Install Stow&lt;/h3&gt;
&lt;p&gt;Make sure it is installed (see section 3).&lt;/p&gt;
&lt;h3 id="step-3-go-to-your-home-directory"&gt;Step 3: Go to your home directory&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-4-optional-remove-an-old-clone"&gt;Step 4: (Optional) Remove an old clone&lt;/h3&gt;
&lt;p&gt;If you already have a &lt;code&gt;Stow-Guide&lt;/code&gt; folder and want to start fresh:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf Stow-Guide
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-5-clone-the-repository"&gt;Step 5: Clone the repository&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/matheth/Stow-Guide.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-6-go-into-the-stow-directory"&gt;Step 6: Go into the Stow directory&lt;/h3&gt;
&lt;p&gt;All Stow commands must be run from the directory that &lt;strong&gt;contains&lt;/strong&gt; the package folders. In this repo, that’s &lt;code&gt;backups/stow&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Stow-Guide/backups/stow
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see names like &lt;code&gt;bin&lt;/code&gt;, &lt;code&gt;cursor&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;shell&lt;/code&gt;, &lt;code&gt;vim&lt;/code&gt;, etc.&lt;/p&gt;
&lt;h3 id="step-7-preview-what-stow-will-do-dry-run"&gt;Step 7: Preview what Stow will do (dry run)&lt;/h3&gt;
&lt;p&gt;Before creating any links, do a &lt;strong&gt;dry run&lt;/strong&gt;. The &lt;code&gt;-n&lt;/code&gt; flag means “don’t change anything, only show what would happen”:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow -nvSt ~ *
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/strong&gt; = no changes (preview)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-v&lt;/code&gt;&lt;/strong&gt; = verbose (explain each action)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-S&lt;/code&gt;&lt;/strong&gt; = stow (create links)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-t ~&lt;/code&gt;&lt;/strong&gt; = target directory is your home&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;*&lt;/code&gt;&lt;/strong&gt; = every folder in the current directory (every package)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="step-8-resolve-conflicts-if-stow-reports-any"&gt;Step 8: Resolve conflicts (if Stow reports any)&lt;/h3&gt;
&lt;p&gt;If Stow says something like “existing file is in the way”, it means you already have a real file or directory at that path (e.g. a real &lt;code&gt;~/.zshrc&lt;/code&gt; instead of a symlink). Stow won’t overwrite it to prevent data loss.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Replace your current file with the repo’s version:&lt;/strong&gt;
Back up your current file if you care about it, then remove it and run Stow again.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv ~/.zshrc ~/.zshrc.bak
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow -vSt ~ shell
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stow specific packages instead of everything:&lt;/strong&gt;
If you are running into conflicts with one package (like &lt;code&gt;shell&lt;/code&gt;) but want to install others, you don&amp;rsquo;t have to use &lt;code&gt;*&lt;/code&gt; (which tries to stow everything). You can specify exactly which packages you want.&lt;/p&gt;
&lt;p&gt;For example, to stow &lt;strong&gt;only&lt;/strong&gt; the &lt;code&gt;git&lt;/code&gt; configuration:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow -vSt ~ git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To stow &lt;strong&gt;multiple&lt;/strong&gt; packages at once (e.g. &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;vim&lt;/code&gt;, and &lt;code&gt;ssh&lt;/code&gt;), just list them with spaces in between:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow -vSt ~ git vim ssh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="step-9-actually-create-the-links"&gt;Step 9: Actually create the links&lt;/h3&gt;
&lt;p&gt;When the preview looks correct, run the same command &lt;strong&gt;without&lt;/strong&gt; &lt;code&gt;-n&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow -vSt ~ *
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can check a symlink via &lt;code&gt;ls -la ~/.zshrc&lt;/code&gt; to verify it points into &lt;code&gt;~/Stow-Guide/backups/stow/shell/.zshrc&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="7-unlinking-unstowing"&gt;7. Unlinking (unstowing)&lt;/h2&gt;
&lt;p&gt;To &lt;strong&gt;remove&lt;/strong&gt; the symlinks Stow created (without deleting the real files in the repo), you &lt;strong&gt;unstow&lt;/strong&gt; with the &lt;strong&gt;&lt;code&gt;-D&lt;/code&gt;&lt;/strong&gt; flag.&lt;/p&gt;
&lt;h3 id="unstow-all-packages"&gt;Unstow all packages&lt;/h3&gt;
&lt;p&gt;From the same directory as before:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Stow-Guide/backups/stow
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow -nvDt ~ * &lt;span class="c1"&gt;# preview what would be unlinked&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow -vDt ~ * &lt;span class="c1"&gt;# actually remove the links&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="unstow-specific-packages"&gt;Unstow specific packages&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stow -vDt ~ shell git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This only removes the links that the &lt;code&gt;shell&lt;/code&gt; and &lt;code&gt;git&lt;/code&gt; packages created.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="8-common-issues-and-fixes"&gt;8. Common issues and fixes&lt;/h2&gt;
&lt;h3 id="stow-command-not-found"&gt;“stow: command not found”&lt;/h3&gt;
&lt;p&gt;Stow isn’t installed or isn’t on your PATH. Install it and try again.&lt;/p&gt;
&lt;h3 id="stow--existing-file-is-in-the-way"&gt;“stow: &amp;hellip; existing file is in the way”&lt;/h3&gt;
&lt;p&gt;You already have a file or directory at that path. Back up the existing file (&lt;code&gt;mv ~/.zshrc ~/.zshrc.bak&lt;/code&gt;) and run stow again.&lt;/p&gt;
&lt;h3 id="i-ran-stow-from-the-wrong-directory"&gt;I ran stow from the wrong directory&lt;/h3&gt;
&lt;p&gt;Stow must be run from the directory that &lt;strong&gt;contains&lt;/strong&gt; the package folders (&lt;code&gt;cd ~/Stow-Guide/backups/stow&lt;/code&gt;).&lt;/p&gt;
&lt;h3 id="i-want-to-edit-my-config"&gt;I want to edit my config&lt;/h3&gt;
&lt;p&gt;Edit the file &lt;strong&gt;inside the repo&lt;/strong&gt; (e.g. &lt;code&gt;~/Stow-Guide/backups/stow/shell/.zshrc&lt;/code&gt;). Because &lt;code&gt;~/.zshrc&lt;/code&gt; is a symlink to that file, the program will see your changes. You can also edit via the link (e.g. &lt;code&gt;nano ~/.zshrc&lt;/code&gt;); you’re still editing the same file in the repo.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="10-quick-reference"&gt;10. Quick reference&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Go to stow directory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cd ~/Stow-Guide/backups/stow&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Preview link all&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stow -nvSt ~ *&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Link all packages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stow -vSt ~ *&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Link specific packages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stow -vSt ~ shell git vim&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Preview unlink all&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stow -nvDt ~ *&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unlink all&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stow -vDt ~ *&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unlink specific&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stow -vDt ~ cursor&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Flags:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/strong&gt; — No changes (dry run). Use for preview.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-v&lt;/code&gt;&lt;/strong&gt; — Verbose output.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-S&lt;/code&gt;&lt;/strong&gt; — Stow (create links).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-D&lt;/code&gt;&lt;/strong&gt; — Unstow (remove links).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-t ~&lt;/code&gt;&lt;/strong&gt; — Target directory (your home).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Managing your environment this way ensures that whether you are on a new workstation or a remote server, your personal toolkit is only a &lt;code&gt;git clone&lt;/code&gt; and a &lt;code&gt;stow&lt;/code&gt; away.&lt;/p&gt;
&lt;p&gt;Check out the full repository here:
.&lt;/p&gt;</description></item><item><title>The Geometry of Echoes: Solving Savchenko 1.1.18</title><link>https://example.com/blog/geometry-echoes/</link><pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate><guid>https://example.com/blog/geometry-echoes/</guid><description>&lt;p&gt;Through countless hours spent solving physics exercises, I have learned that classic physics problems often hide geometric elegances that brute force straight-calculation methods tend to overlook. Today, we analyze problem &lt;strong&gt;1.1.18&lt;/strong&gt;* from the renowned O. Ya Savchenko &lt;em&gt;Problems in Physics&lt;/em&gt;, a kinematics challenge that demands precise handling of wave propagation and vector geometry.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;A car moves with speed $v$ away from a long wall, moving at an angle $\alpha$ to it. At the moment when the distance to the wall equals $l$, the driver gives a short beep. How far will the car travel before the chauffeur hears the echo? The speed of sound in the air is $c$.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="./statement.png" alt="asdfasf" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="geometric-interpretation"&gt;Geometric Interpretation&lt;/h2&gt;
&lt;p&gt;To solve this, we must identify the precise moment the sound wavefront, after reflecting off the wall, intersects the trajectory of the car. Instead of dealing with reflections directly, we can use the &lt;strong&gt;method of images&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Imagine a &amp;ldquo;virtual source&amp;rdquo; of sound located behind the wall. The distance the sound travels to the wall and back to the car is equivalent to the straight-line distance from this virtual source to the point where the car receives the echo.
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="./image_method.png" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;In the above image the soundwave is seen phasing through the wall, which doesn&amp;rsquo;t change the distance travel due to the symmetry of the reflection.&lt;/p&gt;
&lt;h3 id="1-setting-up-the-coordinate-system"&gt;1. Setting up the Coordinate System&lt;/h3&gt;
&lt;p&gt;Let the point where the beep is emitted be $P_0$. At this moment, the distance to the wall is $l$.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The car travels a distance $s$ at speed $v$.&lt;/li&gt;
&lt;li&gt;The sound travels a total distance $ct$ at speed $c$.&lt;/li&gt;
&lt;li&gt;Since the time $t$ is the same for both: $t = s/v$, meaning the sound travels a distance $D = \frac{c}{v}s$.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-applying-the-law-of-cosines"&gt;2. Applying the Law of Cosines&lt;/h3&gt;
&lt;p&gt;Let $P_1$ be the position of the car when it hears the echo. We can construct a triangle between:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The image of the initial position ($P_0'$) across the wall.&lt;/li&gt;
&lt;li&gt;The initial position $P_0$.&lt;/li&gt;
&lt;li&gt;The final position $P_1$.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The distance between $P_0$ and its image $P_0'$ is $2l$ (perpendicular to the wall). The angle $\angle P_1 P_0^{\prime} P_0$, i.e. the angle located at point $P_0^{\prime}$ is clearly $\theta = \pi - \left( \frac{\pi}{2} - \alpha \right) = \pi/2 + \alpha$.&lt;/p&gt;
&lt;p&gt;Using the Law of Cosines in the triangle $\triangle P_0' P_0 P_1$:&lt;/p&gt;
$$(ct)^2 = s^2 + (2l)^2 - 2s(2l)\cos(\pi/2 + \alpha)$$&lt;h3 id="3-solving-for-the-displacement"&gt;3. Solving for the Displacement $s$&lt;/h3&gt;
&lt;p&gt;Recalling that $\cos(\pi/2 + \alpha) = -\sin \alpha$ and substituting $t = s/v$:&lt;/p&gt;
$$\left(\frac{cs}{v}\right)^2 = s^2 + 4l^2 + 4sl \sin \alpha$$&lt;p&gt;Rearranging into a quadratic equation for $s$:&lt;/p&gt;
$$s^2 \left( \frac{c^2}{v^2} - 1 \right) - 4sl \sin \alpha - 4l^2 = 0$$&lt;p&gt;Multiplying by $v^2$ to simplify:&lt;/p&gt;
$$s^2(c^2 - v^2) - 4slv^2 \sin \alpha - 4l^2v^2 = 0$$&lt;p&gt;Using the quadratic formula $s = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$ and taking the positive root:&lt;/p&gt;
$$s = \frac{4lv^2 \sin \alpha + \sqrt{16l^2v^4 \sin^2 \alpha + 16l^2v^2(c^2 - v^2)}}{2(c^2 - v^2)}$$&lt;p&gt;Simplifying the expression inside the square root:
&lt;/p&gt;
$$\sqrt{16l^2v^2 [v^2 \sin^2 \alpha + c^2 - v^2]} = 4lv \sqrt{c^2 - v^2(1 - \sin^2 \alpha)} = 4lv \sqrt{c^2 - v^2 \cos^2 \alpha}$$&lt;h2 id="final-solution"&gt;Final Solution&lt;/h2&gt;
&lt;p&gt;Factoring out the common terms, we arrive at the final displacement:&lt;/p&gt;
$$\boxed{s = \frac{2lv(v \sin \alpha + \sqrt{c^2 - v^2 \cos^2 \alpha})}{c^2 - v^2}}$$&lt;p&gt;This result demonstrates how the car&amp;rsquo;s speed and the angle of departure relative to the wall dictate the delay of the echo.&lt;/p&gt;</description></item><item><title>Self-Healing Agentic Documentation</title><link>https://example.com/projects/selfhealing_documentation/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://example.com/projects/selfhealing_documentation/</guid><description>&lt;p&gt;A robust multi-agent orchestration system designed to automate self-healing documentation pipelines across distributed repository ecosystems.&lt;/p&gt;
&lt;h3 id="strategic-overview"&gt;Strategic Overview&lt;/h3&gt;
&lt;p&gt;Using &lt;strong&gt;LangGraph&lt;/strong&gt; and &lt;strong&gt;PydanticAI&lt;/strong&gt;, I engineered a fleet of autonomous agents that monitor and update technical documentation in real-time. This system ensures that documentation remains synchronized with code changes across &lt;strong&gt;200+ repositories&lt;/strong&gt; without manual intervention.&lt;/p&gt;
&lt;h3 id="technical-implementation"&gt;Technical Implementation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Agentic Orchestration:&lt;/strong&gt; Built using state-of-the-art multi-agent frameworks to handle complex, non-linear engineering workflows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Semantic Search:&lt;/strong&gt; Implemented semantic indexing to improve developer onboarding speed by &lt;strong&gt;10x&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stack:&lt;/strong&gt; &lt;strong&gt;LangGraph&lt;/strong&gt;, &lt;strong&gt;PydanticAI&lt;/strong&gt;, Vertex AI, and Docker for scalable deployment.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Solving a Non-Elementary Integral: The Feynman Technique</title><link>https://example.com/blog/difficult-integral/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://example.com/blog/difficult-integral/</guid><description>&lt;p&gt;I am glad to start this blog with a difficult integral. As an &lt;strong&gt;Applied Mathematician (UBA)&lt;/strong&gt; and &lt;strong&gt;AI Architect&lt;/strong&gt;, I often find that the most elegant solutions in engineering come from a deep understanding of mathematical fundamentals. Today, we explore the &lt;strong&gt;Feynman Technique&lt;/strong&gt;, a powerful method for solving &amp;ldquo;impossible&amp;rdquo; integrals through parameter differentiation.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;We aim to evaluate the following integral for $\psi \in [0, \pi]$:&lt;/p&gt;
$$I(\psi) = \int_{0}^{\frac{\pi}{2}} \ln (1+\sin x \sin \psi) dx$$&lt;p&gt;This was inspired by an AOPS post made by &lt;em&gt;Yimself&lt;/em&gt;:
&lt;/p&gt;
&lt;p&gt;He states:&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Hi, calculate for $a\in \mathrm N$:
&lt;/p&gt;
$$\int_0^\frac{\pi}{2} \ln(a+\sin x)dx$$&lt;hr&gt;
&lt;p&gt;This is equivalent to computing our original integral since we can establish a direct algebraic link between the two through a trigonometric substitution.&lt;/p&gt;
&lt;p&gt;If we let $a = \csc \psi = \frac{1}{\sin \psi}$ (where $a \ge 1$ implies $\psi \in (0, \pi)$), we can rewrite the argument of the logarithm in $J(a)$:&lt;/p&gt;
$$J(a) := \int_{0}^{\frac{\pi}{2}} \ln(a+\sin x) \, dx = \int_{0}^{\frac{\pi}{2}} \ln\left(\frac{1}{\sin \psi} + \sin x\right) dx$$&lt;p&gt;Finding a common denominator inside the logarithm yields:&lt;/p&gt;
$$J(a) = \int_{0}^{\frac{\pi}{2}} \ln\left(\frac{1 + \sin x \sin \psi}{\sin \psi}\right) \\
= \int_{0}^{\frac{\pi}{2}} \ln(1 + \sin x \sin \psi) \, dx - \frac{\pi}{2} \ln(\sin \psi)$$&lt;p&gt;So, therefore
&lt;/p&gt;
$$J(a) = I(\psi) - \frac{\pi}{2} \ln(\sin \psi)$$&lt;p&gt;Thus, solving $I(\psi)$ gives us the complete solution to $J(a)$ for any $a \ge 1$, and in particular, any $a\in \mathbb{N}$.&lt;/p&gt;
&lt;h2 id="the-approach"&gt;The Approach&lt;/h2&gt;
&lt;p&gt;We define a function $I(\psi)$ and use the Leibniz rule for differentiation under the integral sign to transform this logarithmic integral into a more manageable trigonometric form.&lt;/p&gt;
&lt;h3 id="1-justifying-the-leibniz-rule"&gt;1. Justifying the Leibniz Rule&lt;/h3&gt;
&lt;p&gt;Before blindly differentiating, we must ensure it is mathematically legal. The Leibniz Integral Rule states that we can swap the derivative and the integral if both the integrand $f(x, \psi)$ and its partial derivative $\frac{\partial f}{\partial \psi}$ are continuous over the region of integration.&lt;/p&gt;
&lt;p&gt;Let $f(x, \psi) = \ln(1+\sin x \sin \psi)$.
Since our bounds are $x \in [0, \frac{\pi}{2}]$ and we restrict $\psi \in [0, \pi]$, we know that $\sin x \ge 0$ and $\sin \psi \ge 0$. Therefore, the argument of the natural logarithm satisfies $1 + \sin x \sin \psi \ge 1 &gt; 0$.&lt;/p&gt;
&lt;p&gt;Because the argument is strictly positive, $f(x, \psi)$ is continuous. The partial derivative with respect to $\psi$ is:&lt;/p&gt;
$$\frac{\partial f}{\partial \psi} = \frac{\sin x \cos \psi}{1 + \sin x \sin \psi}$$&lt;p&gt;This derivative is a rational function where the denominator is never zero on our compact interval $[0, \frac{\pi}{2}]$. Since both continuity conditions are strictly met, we are fully justified in passing the derivative inside the integral.&lt;/p&gt;
&lt;h3 id="2-differentiating-under-the-integral-sign"&gt;2. Differentiating under the integral sign&lt;/h3&gt;
&lt;p&gt;Taking the derivative of $I(\psi)$ with respect to $\psi$ gives:&lt;/p&gt;
$$I'(\psi) = \int_{0}^{\frac{\pi}{2}} \frac{\cos \psi \sin x}{1 + \sin \psi \sin x} dx$$&lt;p&gt;To integrate this, we can perform an algebraic manipulation. We multiply and divide by $\sin \psi$ to match the denominator, pulling out a cotangent:&lt;/p&gt;
$$I'(\psi) = \frac{\cos \psi}{\sin \psi} \int_{0}^{\frac{\pi}{2}} \frac{\sin \psi \sin x}{1 + \sin \psi \sin x} dx = \cot \psi \int_{0}^{\frac{\pi}{2}} \frac{\sin \psi \sin x}{1 + \sin \psi \sin x} dx$$&lt;p&gt;From where,&lt;/p&gt;
$$I'(\psi) = \cot \psi \int_{0}^{\frac{\pi}{2}} \left( \frac{1 + \sin \psi \sin x - 1}{1 + \sin \psi \sin x} \right) dx = \cot \psi \int_{0}^{\frac{\pi}{2}} \left( 1 - \frac{1}{1 + \sin \psi \sin x} \right) dx$$&lt;p&gt;We split this into two integrals. The first is trivial: $\int_{0}^{\frac{\pi}{2}} 1 dx = \frac{\pi}{2}$. The second is a standard trigonometric integral that evaluates to $\frac{\frac{\pi}{2}-\psi}{\cos\psi}$ (typically solved via the Weierstrass tangent half-angle substitution $u = \tan(x/2)$).&lt;/p&gt;
&lt;p&gt;Substituting these back yields:&lt;/p&gt;
$$I'(\psi) = \cot \psi \left( \frac{\pi}{2} - \frac{\frac{\pi}{2} - \psi}{\cos \psi} \right) = \frac{\pi}{2} \frac{\cos \psi}{\sin \psi} + \frac{\psi - \frac{\pi}{2}}{\sin \psi}$$&lt;h3 id="3-integrating-from-the-origin"&gt;3. Integrating from the Origin&lt;/h3&gt;
&lt;p&gt;We now integrate our rewritten expression for $I'(u)$ with respect to $u$ from $0$ to $\psi$. Note that at the lower bound, $I(0) = \int_{0}^{\frac{\pi}{2}} \ln(1) \, dx = 0$.&lt;/p&gt;
$$I(\psi) - I(0) = \int_{0}^{\psi} \left( \frac{\pi}{2} \frac{\cos u}{\sin u} + \frac{u - \frac{\pi}{2}}{\sin u} \right) du$$&lt;p&gt;At first glance, integrating this directly poses a problem because both $\frac{\cos u}{\sin u}$ and $\frac{-\pi/2}{\sin u}$ diverge to infinity as $u \to 0$. To resolve this, we distribute the numerator of the second term and group the constants strategically:&lt;/p&gt;
$$I(\psi) = \int_{0}^{\psi} \left[ \frac{\pi}{2} \left( \frac{\cos u}{\sin u} - \frac{1}{\sin u} \right) + \frac{u}{\sin u} \right] du$$$$I(\psi) = \frac{\pi}{2} \int_{0}^{\psi} \left( \frac{\cos u - 1}{\sin u} \right) du + \int_{0}^{\psi} \frac{u}{\sin u} \, du$$&lt;p&gt;By grouping it this way, the singularity in the first integral is perfectly removable, since $\lim_{u \to 0} \frac{\cos u - 1}{\sin u} = 0$.&lt;/p&gt;
&lt;h3 id="4-evaluating-the-trigonometric-integral"&gt;4. Evaluating the Trigonometric Integral&lt;/h3&gt;
&lt;p&gt;For the first integral, we can apply the tangent half-angle identity:
&lt;/p&gt;
$$\frac{\cos u - 1}{\sin u} =\frac{- 2\sin^2 \frac{u}{2}}{2\sin \frac{u}{2} \cos \frac{u}{2}} = -\tan\left(\frac{u}{2}\right)$$&lt;p&gt;Integrating this produces a clean logarithmic expression:
&lt;/p&gt;
$$\frac{\pi}{2} \int_{0}^{\psi} -\tan\left(\frac{u}{2}\right) du = \frac{\pi}{2} \left[ 2\ln\left(\cos\frac{u}{2}\right) \right]_0^\psi = \pi \ln\left(\cos\frac{\psi}{2}\right)$$&lt;h3 id="5-the-inverse-tangent-integral"&gt;5. The Inverse Tangent Integral&lt;/h3&gt;
&lt;p&gt;For the second integral, $\int_{0}^{\psi} \frac{u}{\sin u} \, du$, we use the Weierstrass half-angle substitution $t = \tan(\frac{u}{2})$.
This implies $u = 2\arctan(t)$, $du = \frac{2}{1+t^2} dt$, and $\sin u = \frac{2t}{1+t^2}$.
Substituting these transforms our integral into:&lt;/p&gt;
$$\int_{0}^{\psi} \frac{u}{\sin u} \, du = \int_{0}^{\tan(\frac{\psi}{2})} \frac{2\arctan t}{\left(\frac{2t}{1+t^2}\right)} \left(\frac{2}{1+t^2}\right) dt = 2 \int_{0}^{\tan(\frac{\psi}{2})} \frac{\arctan t}{t} dt$$&lt;p&gt;By definition, the integral $\int_0^z \frac{\arctan t}{t} dt$ is the Inverse Tangent Integral, denoted as $\operatorname{Ti}_2(z)$.
Therefore, this segment evaluates strictly to $2\operatorname{Ti}_2\left(\tan\frac{\psi}{2}\right)$.&lt;/p&gt;
&lt;p&gt;Combining both parts, our function becomes:&lt;/p&gt;
$$I(\psi) = \pi \ln\left(\cos\frac{\psi}{2}\right) + 2\operatorname{Ti}_2\left(\tan\frac{\psi}{2}\right)$$&lt;h3 id="6-series-expansion-connection"&gt;6. Series Expansion Connection&lt;/h3&gt;
&lt;p&gt;To express this result explicitly without relying on the special $\operatorname{Ti}_2$ function, we can use the identity connecting the inverse tangent integral of a tangent to its Fourier series expansion:&lt;/p&gt;
$$\operatorname{Ti}_2(\tan x) = x \ln \tan x + \sum_{n \ge 1, \text{odd}} \frac{\sin 2nx}{n^2}$$&lt;p&gt;&lt;em&gt;Note: This formula will be derived in a later post&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Letting $x = \frac{\psi}{2}$, we multiply by 2 to match our term:&lt;/p&gt;
$$2\operatorname{Ti}_2\left(\tan\frac{\psi}{2}\right) = \psi \ln \tan\left(\frac{\psi}{2}\right) + 2 \sum_{n \ge 1, \text{odd}} \frac{\sin(n\psi)}{n^2}$$&lt;p&gt;Substituting this back into our equation yields our final, elegant closed-form solution:&lt;/p&gt;
$$\boxed{\int_{0}^{\frac{\pi}{2}} \ln (1+\sin x \sin \psi) dx = \psi \ln \tan\left(\frac{\psi}{2}\right) + \pi \ln \cos\left(\frac{\psi}{2}\right) + 2 \sum_{n \ge 1, \text{odd}} \frac{\sin(n\psi)}{n^2}}$$&lt;h3 id="7-evaluating-at-a-specific-phase"&gt;7. Evaluating at a Specific Phase: $\psi = \frac{\pi}{6}$&lt;/h3&gt;
&lt;p&gt;To see the true power of this closed-form expression, let&amp;rsquo;s evaluate the integral at exactly $\psi = \frac{\pi}{6}$. Substituting this into our final equation gives:&lt;/p&gt;
$$I\left(\frac{\pi}{6}\right) = \frac{\pi}{6} \ln \tan\left(\frac{\pi}{12}\right) + \pi \ln \cos\left(\frac{\pi}{12}\right) + 2 \sum_{k=0}^{\infty} \frac{\sin\left((2k+1)\frac{\pi}{6}\right)}{(2k+1)^2}$$&lt;p&gt;The infinite series here, let&amp;rsquo;s call it $S_6$, is particularly fascinating. Notice that the argument of the sine function can be rewritten as $\frac{\pi}{6} + \frac{k\pi}{3}$. To handle the periodicity of this sequence without relying on floating-point trigonometry, we can apply a discrete integer formula I recently derived:&lt;/p&gt;
$$\sin\left(\frac{\pi}{6} + \frac{k\pi}{3}\right) = \frac{(-1)^{\lfloor k/3 \rfloor}}{2^{1-(k \pmod 3) \pmod 2}}$$&lt;p&gt;This elegant formula captures both the alternating signs (via the numerator) and the magnitude switching between $1$ and $\frac{1}{2}$ (via the denominator).&lt;/p&gt;
&lt;h4 id="calculating-the-sum"&gt;Calculating the Sum $S_6$&lt;/h4&gt;
&lt;p&gt;Using this formula, we can calculate the exact value of $S_6$ by partitioning the sum into residue classes modulo 3. Let $k = 3m + r$, where $r \in \{0, 1, 2\}$.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For $r=0$: The argument is $6m+1$, the sign is $(-1)^m$, and the sine value is $\frac{1}{2}$.&lt;/li&gt;
&lt;li&gt;For $r=1$: The argument is $6m+3 = 3(2m+1)$, the sign is $(-1)^m$, and the sine value is $1$.&lt;/li&gt;
&lt;li&gt;For $r=2$: The argument is $6m+5$, the sign is $(-1)^m$, and the sine value is $\frac{1}{2}$.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We can split $S_6$ into these three components:&lt;/p&gt;
$$S_6 = \sum_{m=0}^{\infty} (-1)^m \left[ \frac{\frac{1}{2}}{(6m+1)^2} + \frac{1}{(3(2m+1))^2} + \frac{\frac{1}{2}}{(6m+5)^2} \right]$$&lt;p&gt;Extracting the middle term, we recognize Catalan&amp;rsquo;s constant ($G = \sum_{m=0}^{\infty} \frac{(-1)^m}{(2m+1)^2}$):&lt;/p&gt;
$$\sum_{m=0}^{\infty} \frac{(-1)^m}{9(2m+1)^2} = \frac{1}{9}G$$&lt;p&gt;For the outer terms ($r=0$ and $r=2$), we factor out the $\frac{1}{2}$:&lt;/p&gt;
$$\frac{1}{2} \sum_{m=0}^{\infty} (-1)^m \left[ \frac{1}{(6m+1)^2} + \frac{1}{(6m+5)^2} \right]$$&lt;p&gt;This specific combination of terms corresponds exactly to all the elements of Catalan&amp;rsquo;s constant &lt;em&gt;except&lt;/em&gt; the multiples of 3. Thus, the inner sum is equal to $G - \left(-\frac{1}{9}G\right) = \frac{10}{9}G$. Multiplying by the factored $\frac{1}{2}$ gives $\frac{5}{9}G$.&lt;/p&gt;
&lt;p&gt;Adding these back together gives our beautiful, exact result:&lt;/p&gt;
$$S_6 = \frac{5}{9}G + \frac{1}{9}G = \frac{6}{9}G = \frac{2}{3}G$$&lt;p&gt;Thus, the exact value of our integral becomes:&lt;/p&gt;
$$I\left(\frac{\pi}{6}\right) = \frac{\pi}{6} \ln \tan\left(\frac{\pi}{12}\right) + \pi \ln \cos\left(\frac{\pi}{12}\right) + \frac{4}{3}G$$&lt;h3 id="8-generalizing-to-arbitrary"&gt;8. Generalizing to Arbitrary $\psi = \frac{\pi}{n}$&lt;/h3&gt;
&lt;p&gt;We can generalize the evaluation of the series $S_n = \sum_{k=0}^{\infty} \frac{\sin\left((2k+1)\frac{\pi}{n}\right)}{(2k+1)^2}$ for any integer $n$ by connecting it to the &lt;strong&gt;Trigamma function&lt;/strong&gt;, $\psi'(z) = \sum_{m=0}^{\infty} \frac{1}{(m+z)^2}$.&lt;/p&gt;
&lt;p&gt;By grouping the sum into odd residue classes $r$ modulo $2n$, we can factor out the denominators to match the Trigamma definition. Applying symmetry to halve the summation range, we arrive at a powerful generalized closed form:&lt;/p&gt;
$$S_n = \frac{1}{4n^2} \sum_{r=1, \text{odd}}^{n-1} \sin\left(\frac{r\pi}{n}\right) \underbrace{\left[ \psi'\left(\frac{r}{2n}\right) - \psi'\left(1 - \frac{r}{2n}\right) \right]}_{\Delta(r)}$$&lt;p&gt;Using this general formula, we can rigorously prove our previous result for $n=6$. The odd integers in the range are $r \in \{1, 3, 5\}$.
By evaluating the $\Delta$ functions and applying the highly powerful &lt;strong&gt;Multiplication Theorem&lt;/strong&gt; for the Trigamma function ($m=3$), the terms perfectly collapse:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\Delta(3) = 16G$&lt;/li&gt;
&lt;li&gt;$\Delta(1) + \Delta(5) = 160G$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plugging these back yields exactly $S_6 = \frac{1}{288} [160G + 2(16G)] = \frac{2}{3}G$.&lt;/p&gt;</description></item><item><title>TDA-Based Legacy Modernization</title><link>https://example.com/projects/tda_legacy/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://example.com/projects/tda_legacy/</guid><description>&lt;p&gt;An architectural intelligence engine that utilizes Topological Data Analysis (TDA) to map and disentangle massive legacy monoliths.&lt;/p&gt;
&lt;h3 id="core-methodology"&gt;Core Methodology&lt;/h3&gt;
&lt;p&gt;This tool addresses the complexity of a &lt;strong&gt;2GB legacy monolithic codebase&lt;/strong&gt; by treating code dependencies as a high-dimensional point cloud. By applying &lt;strong&gt;Graph Theory&lt;/strong&gt; and &lt;strong&gt;TDA&lt;/strong&gt;, the engine identifies critical modularization boundaries and hidden bottlenecks that traditional static analysis tools miss.&lt;/p&gt;
&lt;h3 id="impact--performance"&gt;Impact &amp;amp; Performance&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Migration Velocity:&lt;/strong&gt; Achieved a &lt;strong&gt;10x increase&lt;/strong&gt; in migration speed through automated boundary detection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Architectural Mapping:&lt;/strong&gt; Developed a TDA-based engine to visualize complex code dependencies across thousands of files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Python, &lt;strong&gt;.NET (Roslyn API)&lt;/strong&gt;, and advanced Graph Theory algorithms.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Experience</title><link>https://example.com/experience/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://example.com/experience/</guid><description/></item></channel></rss>