<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[BareMetalBridge]]></title><description><![CDATA[Where My Mind Comes To Do Other Things]]></description><link>https://baremetalbridge.com/</link><image><url>https://baremetalbridge.com/favicon.png</url><title>BareMetalBridge</title><link>https://baremetalbridge.com/</link></image><generator>Ghost 5.85</generator><lastBuildDate>Thu, 12 Nov 2026 11:43:30 GMT</lastBuildDate><atom:link href="https://baremetalbridge.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[I Didn't Build an AI Agent. I Built the Infrastructure Behind It]]></title><description><![CDATA[<p></p><p>A friend recently suggested I build an AI agent loaded with vendor documentation, troubleshooting guides, and technical information. He also asked what kind of hardware I use to run local language models.</p><p>Well, I&apos;ve actually been building something along those lines for quite some time. Except I approached</p>]]></description><link>https://baremetalbridge.com/i-didnt-build-an-ai-agent-i-built-the-infrastructure-behind-it/</link><guid isPermaLink="false">6ad01e5fa2e6810347f9c1bd</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Thu, 15 Oct 2026 00:37:00 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2026/10/Helix_-The-Greybeard-Data-War-Room.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2026/10/Helix_-The-Greybeard-Data-War-Room.png" alt="I Didn&apos;t Build an AI Agent. I Built the Infrastructure Behind It"><p></p><p>A friend recently suggested I build an AI agent loaded with vendor documentation, troubleshooting guides, and technical information. He also asked what kind of hardware I use to run local language models.</p><p>Well, I&apos;ve actually been building something along those lines for quite some time. Except I approached it a little differently.</p><p><strong>I built the data infrastructure first. AI came later.</strong></p><p>The result is Helix, an on-premises operational intelligence platform I developed for our telecommunications network.</p><p>And although AI has become an important part of it, the real machinery underneath is traditional database and software engineering.</p><h2 id="helix-the-architecture">Helix: The Architecture</h2><p>At its core, Helix is a hybrid database environment built around <strong>MariaDB, OpenSearch, Redis, and a substantial amount of Go code.</strong></p><p>Each component serves a different purpose.</p><p><strong>MariaDB is the relational foundation.</strong></p><p>The current system contains roughly 98 tables maintaining relationships among customers, equipment, services, addresses, network infrastructure, and other operational information.</p><p>Data comes from provisioning systems, customer management platforms, equipment APIs, and various network databases.</p><p>MariaDB maintains the structured relationships and operational state that connect all these otherwise independent systems.</p><p><strong>OpenSearch is the analytical and knowledge platform.</strong></p><p>It contains billions of operational records collected from network equipment, cable modems, optical networks, telephone switches, SIP trunks, system logs, alarms, and call detail records.</p><p>It also holds our entire TSC knowledge base, historical trouble tickets, and practically every piece of technical documentation I&apos;ve been able to locate from our equipment vendors.</p><p>That information is indexed for traditional searches, full-text searches, and vector-based semantic retrieval.</p><p>This is an important distinction. I don&apos;t depend exclusively on vector searches.</p><p>Sometimes I want to find a specific telephone number, MAC address, equipment identifier, or error message. Other times I&apos;m looking for a concept buried somewhere in hundreds of pages of documentation.</p><p>OpenSearch handles both, along with the time-series analytics needed to understand network behavior.</p><p><strong>Go is the glue holding everything together.</strong></p><p>I&apos;ve written numerous Go services that communicate with equipment APIs, poll network devices, synchronize databases, parse enormous log files, and correlate records from systems that were never designed to communicate with one another.</p><p>These services continuously enrich the data using authoritative information from MariaDB and analytical information from OpenSearch.</p><p>Much of the real intelligence in Helix comes from this correlation.</p><p>Instead of forcing someone to manually connect customer records, equipment information, network statistics, and historical events, the software establishes those relationships ahead of time.</p><p>Redis provides fast temporary state and caching where needed.</p><p>The result is a continuously updated operational environment rather than a collection of disconnected dashboards.</p><h2 id="where-ai-fits-in">Where AI Fits In</h2><p><strong>Codex sits on top of this infrastructure.</strong></p><p>It can search the technical knowledge base, examine operational history, query the databases, inspect code, and investigate problems using information collected directly from our network.</p><p>It isn&apos;t simply answering questions based on documents.</p><p>It has access to structured relationships, historical telemetry, equipment information, and operational tools.</p><p>The important part is that the AI doesn&apos;t have to maintain all that knowledge internally.</p><p>The information lives in the databases.</p><p>The model retrieves what it needs, interprets the results, and helps with the investigation.</p><p>I use OpenAI&apos;s models extensively, but Helix isn&apos;t dependent on any particular language model.</p><p>I can change models without rebuilding the underlying data infrastructure.</p><p><strong>The databases hold the knowledge. Go maintains the relationships. AI provides another way to interact with it.</strong></p><h2 id="the-hardware-running-helix">The Hardware Running Helix</h2><p>One misconception about systems like this is that they require an enormous GPU cluster.</p><p>Helix doesn&apos;t.</p><p>The core infrastructure runs on three refurbished Xeon servers under Proxmox.</p><p>Each server has:</p><ul><li>28 CPU cores</li><li>512 GB RAM</li><li>16 TB NVMe storage</li><li>16 TB additional disk storage</li></ul><p>The servers communicate over 10-gigabit networking, with a 10-gigabit fiber uplink.</p><p>The hardware investment was approximately <strong>$15,000</strong>.</p><p>That cluster handles the OpenSearch indexes, MariaDB environment, Redis, Go services, and other supporting applications.</p><p>We&apos;re processing billions of records, polling thousands of network devices, and continuously ingesting operational information.</p><p>Most of that work requires no AI whatsoever.</p><p>A database query doesn&apos;t need a language model. Neither does parsing a log file or polling a modem.</p><p>Conventional software handles those jobs faster and more efficiently.</p><p>AI comes into play when we need flexible investigation, interpretation, or natural-language interaction.</p><h2 id="my-home-lab-a-separate-environment">My Home Lab: A Separate Environment</h2><p>My home laboratory uses a similar philosophy, but it is completely independent of Helix and contains no TSC proprietary information.</p><p>I&apos;ve built a personal technical knowledge environment containing approximately <strong>800 technical books</strong>, along with a large collection of documentation and reference material gathered from the internet.</p><p>That knowledge is searchable using OpenSearch, including full-text indexing and vector embeddings.</p><p>I use Codex and OpenAI models to help develop and expand the environment, but I also experiment with locally hosted language models.</p><p>My main workstation is a fairly substantial Linux machine.</p>
<!--kg-card-begin: html-->
<table><thead><tr><th>Component</th><th>Hardware</th></tr></thead><tbody><tr><td>Processor</td><td>AMD Threadripper, 32 cores</td></tr><tr><td>Memory</td><td>256 GB RAM</td></tr><tr><td>Graphics</td><td>AMD Radeon GPU, 12 GB VRAM</td></tr><tr><td>NVMe storage</td><td>Approximately 6 TB</td></tr><tr><td>Additional storage</td><td>Approximately 21 TB ZFS</td></tr><tr><td>Operating system</td><td>Linux Mint</td></tr><tr><td>Local AI</td><td>Ollama, Mistral Nemo, Qwen, and other models</td></tr></tbody></table>
<!--kg-card-end: html-->
<p>The 256 GB of system RAM allows me to experiment with larger quantized models that don&apos;t fit entirely in GPU memory, although inference speed depends heavily on how much can be accelerated.</p><p>I&apos;ve tested several model families, but Mistral Nemo 12B has been one of my regular choices.</p><p>Like Helix, the home environment keeps its knowledge separate from the language model itself.</p><p>I&apos;m not retraining foundation models every time I add another technical book or document.</p><p>I index the material, generate embeddings, and retrieve the relevant information when needed.</p><p>OpenAI and Codex help me build and refine the software, while local models can use the same underlying knowledge without requiring every request to go through a hosted service.</p><h2 id="the-point-of-all-this">The Point of All This</h2><p>I didn&apos;t set out to build a chatbot that happened to know a few things about telecommunications.</p><p>I wanted an infrastructure capable of collecting information, maintaining relationships, and making that information useful.</p><p>MariaDB handles the structured facts.</p><p>OpenSearch handles the analytical history, full-text knowledge, and vector searches.</p><p>Go keeps the information flowing and connects the pieces.</p><p>Redis handles fast state and caching.</p><p>And AI sits above it all, using the information those systems provide.</p><p>The same philosophy applies to my home laboratory, just with different data and considerably different hardware.</p><p><strong>The most important part of an AI system isn&apos;t necessarily the model. It&apos;s the quality, accessibility, and organization of the information the model can use.</strong></p><p>Models will continue improving. Some will disappear, and better ones will replace them.</p><p>But the databases, documentation, relationships, and software I&apos;ve built will still be there.</p><p>That&apos;s why I built the infrastructure first.</p><p><em>Bryan</em></p>]]></content:encoded></item><item><title><![CDATA[Processing the BroadSoft XS Logset]]></title><description><![CDATA[<p>That most told us could not be done.</p><p>For years, the BroadSoft XS logs occupied an awkward place in our network.</p><p>They contained some of the most valuable diagnostic information available from the platform, but they were so large, complex, and difficult to manage that nobody treated them as a</p>]]></description><link>https://baremetalbridge.com/untitled-5/</link><guid isPermaLink="false">6a60cac6454c8b6808a6c459</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Wed, 22 Jul 2026 13:59:19 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2026/07/BS-XSFlow.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2026/07/BS-XSFlow.png" alt="Processing the BroadSoft XS Logset"><p>That most told us could not be done.</p><p>For years, the BroadSoft XS logs occupied an awkward place in our network.</p><p>They contained some of the most valuable diagnostic information available from the platform, but they were so large, complex, and difficult to manage that nobody treated them as a practical operational data source.</p><p>The logs were there.</p><p>The information was there.</p><p>Actually turning the entire logset into something continuously searchable was another matter.</p><p>Even our vendor told us that processing the full XS logset was not realistically possible.</p><p>With the help of Codex, we did it anyway.</p><p>That does not mean the underlying problem was beyond my ability to solve without AI. At its core, parsing these files is not radically different from handling any other large multiline log format. The real difficulty was the scale, the number of distinct record types, the correlation between different log sets, and the amount of supporting pipeline work required to make the process continuous, reliable, and resumable.</p><p>I could have built this without Codex. The difference is that it likely would have taken weeks of development, testing, and refactoring instead of a handful of focused hours spread across a few days. Codex did not replace the engineering judgment. It accelerated the path from design decisions to working code.</p><p>Today, Helix continuously retrieves BroadSoft XS files, verifies that they are safe to process, parses their multiline records, extracts structured operational data, writes the results into multiple OpenSearch index families, updates endpoint state in MariaDB, compresses the original logs for retention, and remembers exactly where it left off.</p><p>The pipeline is not technically real time because it does not tail the active XS files while BroadSoft is still writing them.</p><p>Operationally, however, it is just-in-time.</p><p>Under normal conditions, data becomes searchable in Helix approximately one to two minutes after BroadSoft finishes writing the source file.</p><p>That is close enough to real time for active troubleshooting, without taking the risk of parsing incomplete records from a file that is still changing.</p><h2 id="why-broadsoft-xs-logs-are-so-difficult">Why BroadSoft XS Logs Are So Difficult</h2><p>The first problem is scale.</p><p>BroadSoft XS logs are large rolling text files containing a mixture of:</p><ul><li>SIP requests and responses</li><li>Registration traffic</li><li>Subscription activity</li><li>XSI and EventNotification data</li><li>Internal BroadSoft subsystem events</li><li>XML payloads</li><li>Session and call-leg identifiers</li><li>Endpoint and enterprise information</li><li>Diagnostic messages generated by different platform components</li></ul><p>A single file may contain an enormous number of records, and those records do not all share one simple format.</p><p>Calling them &#x201C;text logs&#x201D; understates the problem.</p><p>They are closer to a serialized stream of loosely related protocol events, application events, XML fragments, SIP messages, internal state changes, and diagnostic context. All of that is interleaved inside rolling files that were designed primarily for vendor support and forensic inspection, not modern structured analytics.</p><p>The second problem is that the records are multiline.</p><p>You cannot reliably process an XS file by treating each line as an independent event.</p><p>A record begins with a recognizable header containing a timestamp and pipe-delimited fields. The lines that follow may include SIP headers, SDP, XML, BroadSoft-specific diagnostic data, or other payload content. That body continues until the next valid record header appears.</p><p>The parser therefore has to maintain state.</p><p>It must:</p><ol><li>Read the file line by line.</li><li>Recognize the beginning of a legitimate XS record.</li><li>Accumulate every following line into the current record body.</li><li>Detect the next record boundary.</li><li>Flush the completed record.</li><li>Parse and classify the assembled content.</li><li>Repeat that process without losing offsets or corrupting multiline payloads.</li></ol><p>A simple regular expression over individual lines is not enough.</p><p>A conventional log shipper configured around newline-delimited events is not enough.</p><p>Even after a record has been assembled correctly, the system still has to determine what that record represents.</p><p>Is it a SIP <code>REGISTER</code>?</p><p>A successful <code>200 OK</code> response to a registration?</p><p>A <code>SUBSCRIBE</code> request?</p><p>An XSI EventNotification snapshot?</p><p>A call-processing event?</p><p>An internal BroadSoft message?</p><p>A SIP dialog fragment that must be correlated with another record through a shared callhalf, call leg, session identifier, or endpoint context?</p><p>The parser has to extract enough structure to make the data useful without destroying the original forensic payload.</p><p>That balance is important.</p><p>If we only stored the raw record, we would have a searchable pile of text but limited analytical value.</p><p>If we extracted only a handful of normalized fields, we could lose the obscure diagnostic detail needed during the worst incidents.</p><p>Helix keeps both.</p><p>Each parsed record can include:</p><ul><li>The event timestamp</li><li>Source host</li><li>Source path</li><li>Source byte offset</li><li>Parsed XS header fields</li><li>Body classification</li><li>SIP method</li><li>SIP response status</li><li>Event class</li><li>Callhalf or call-leg identifiers</li><li>Session keys</li><li>Endpoint data</li><li>Enterprise information</li><li>XML content</li><li>SIP forensic payloads</li><li>BroadSoft internal payloads</li><li>Search tokens derived from the record</li></ul><p>The result is structured enough for analytics but detailed enough for forensic reconstruction.</p><h2 id="the-logs-are-rolling-files-not-a-message-stream">The Logs Are Rolling Files, Not a Message Stream</h2><p>Another major complication is how the files are produced.</p><p>BroadSoft writes rolling XS text files into a remote directory. The files are accessed over SFTP. They are not delivered through a streaming interface, message queue, Kafka topic, or API designed for incremental consumption.</p><p>That means the ingestion system has to infer when a file is complete.</p><p>Downloading a file simply because it exists is dangerous. BroadSoft may still be writing to it.</p><p>If the streamer grabs a file too early, several things can happen:</p><ul><li>The final record may be incomplete.</li><li>A SIP message may be truncated.</li><li>An XML payload may be cut in half.</li><li>The same file may later appear with a different size.</li><li>The system may incorrectly mark partial data as processed.</li><li>Reprocessing logic may become much more complicated.</li></ul><p>We deliberately chose not to tail the active remote file in place.</p><p>Instead, the streamer waits for a file to settle.</p><p>A file is considered stable only when:</p><ol><li>It is older than the configured minimum age.</li><li>Its size matches what was observed during a previous poll.</li><li>Its modification time also matches the previous observation.</li></ol><p>If either the size or modification time changes, the file remains unstable.</p><p>This introduces a small delay, but it protects the integrity of the data.</p><p>In practice, the delay is usually only about one to two minutes. Once BroadSoft closes or stops updating a file, the streamer confirms that it has stabilized, downloads it, and begins processing.</p><p>That is why I describe the system as just-in-time rather than real time.</p><p>It does not inspect bytes while BroadSoft is still writing them. It processes the completed file almost immediately afterward.</p><p>For actual troubleshooting, that distinction rarely matters. By the time an engineer begins investigating a failed call, the relevant events are generally already searchable in Helix.</p><h2 id="the-original-workflow-was-not-sustainable">The Original Workflow Was Not Sustainable</h2><p>Before the streamer, processing XS logs was a manual workflow.</p><p>Someone had to:</p><ol><li>Locate the relevant XS files.</li><li>Download them.</li><li>Run a separate processor.</li><li>Compress or archive the source files.</li><li>Track what had already been processed.</li><li>Avoid accidentally processing the same history again.</li></ol><p>That could work for a targeted investigation, but it could not create a continuously available operational dataset.</p><p>The full pipeline needed to be automatic, resumable, and safe to leave running unattended.</p><p>It also needed to survive restarts.</p><p>A daemon that forgets its position every time it restarts is not an ingestion pipeline. It is a recurring data incident.</p><h2 id="giving-the-streamer-durable-memory">Giving the Streamer Durable Memory</h2><p>The streamer uses a MariaDB table named <code>broadsoft_xs_sftp_files</code> as durable pipeline state.</p><p>For each remote file, it can track:</p><ul><li>Remote filename</li><li>Remote path</li><li>Remote size</li><li>Remote modification time</li><li>Fingerprint identity</li><li>Whether it was selected as the startup anchor</li><li>Stability state</li><li>Download status</li><li>Archive status</li><li>Processing status</li><li>Local incoming path</li><li>Local archive path</li><li>First-seen timestamp</li><li>Last-seen timestamp</li><li>Download timestamp</li><li>Archive timestamp</li><li>Processing timestamp</li><li>Failure stage</li><li>Last error</li></ul><p>This table is the memory of the pipeline.</p><p>It allows the daemon to restart without guessing which files were completed, which files were only downloaded, which archives were successfully written, or which processing stage failed.</p><p>The streamer also maintains a watermark.</p><p>The watermark represents the newest remote file that the system has accepted as part of its processed history. A file can qualify if it has been marked either <code>processed</code> or intentionally <code>skipped</code>.</p><p>That distinction matters during the first deployment.</p><p>If the remote BroadSoft directory contains months or years of XS history, starting the daemon should not automatically unleash a historical ingestion avalanche.</p><p>On its first run, when no watermark exists, the streamer finds the newest stable remote file, marks it as the startup anchor, marks it as skipped, and begins processing files that arrive after that point.</p><p>Historical backfill can still be performed deliberately, but the production daemon starts at the current edge.</p><h2 id="following-the-frontier-instead-of-rewalking-history">Following the Frontier Instead of Rewalking History</h2><p>The remote XS directory may contain a large number of old files.</p><p>The streamer still has to perform an SFTP directory listing so it can discover new arrivals. That operation remains one of the unavoidable costs in the design.</p><p>The initial version of the streamer also synchronized every matching remote file into MariaDB during every polling cycle.</p><p>That worked, but it was wasteful.</p><p>Every cycle repeatedly touched files that were already far behind the watermark. The system performed SQL lookups and updates for history that could no longer affect the next processing decision.</p><p>The optimized design works on a frontier.</p><p>After listing and sorting the remote files, the daemon focuses only on:</p><ul><li>Files newer than the current watermark</li><li>Or, during first-run initialization, a small slice of the newest remote files</li></ul><p>This changes the problem from &#x201C;reconcile the entire directory every twenty seconds&#x201D; to &#x201C;inspect the moving edge of the stream.&#x201D;</p><p>That is a much smaller and more stable workload.</p><p>The database access pattern was also reduced.</p><p>The older behavior effectively performed:</p><ol><li>A <code>SELECT</code> for one fingerprint.</li><li>An <code>INSERT</code> or <code>UPDATE</code>.</li><li>Another <code>SELECT</code>.</li></ol><p>That sequence happened for each file during each synchronization pass.</p><p>The revised approach performs one batched read of the existing tracking rows for the active frontier and then one upsert for each relevant file.</p><p>The difference may sound small when looking at one file.</p><p>Across a large remote directory and a continuously running daemon, it is substantial.</p><h2 id="parse-once-archive-once">Parse Once, Archive Once</h2><p>One of the largest performance improvements came from changing how downloaded files were parsed and archived.</p><p>The old processing path looked roughly like this:</p><ol><li>Download the plain-text XS file.</li><li>Compress the file into a <code>.zst</code> archive.</li><li>Open the compressed archive.</li><li>Decompress it.</li><li>Parse the decompressed content.</li></ol><p>That meant the same data was being read and transformed multiple times immediately after download.</p><p>The new streamer opens the downloaded text file once.</p><p>That single byte stream is simultaneously:</p><ul><li>Fed into the XS parser</li><li>Written through a Zstandard compression writer</li><li>Stored as the retained <code>.zst</code> archive</li></ul><p>The file is parsed and archived in one pass.</p><p>After successful parsing, indexing, database updates, and archive finalization, the temporary uncompressed download is deleted.</p><p>This eliminates an entire compress, reopen, decompress, and parse cycle.</p><p>It also aligns the archive with the exact byte stream that was processed.</p><h2 id="routing-the-full-logset-into-opensearch">Routing the Full Logset Into OpenSearch</h2><p>Running the streamer with <code>--fullprocess</code> enables complete raw XS ingestion.</p><p>Each assembled record is classified and routed into one of several OpenSearch index families:</p><ul><li><code>helix-broadsoft-xs-registrations-*</code> for SIP <code>REGISTER</code></li><li><code>helix-broadsoft-xs-subscriptions-*</code> for SIP <code>SUBSCRIBE</code></li><li><code>helix-broadsoft-xs-sip-traffic-*</code> for other SIP messages</li><li><code>helix-broadsoft-xs-broadsoft-internal-*</code> for internal or non-SIP records</li></ul><p>This separation is important.</p><p>Dumping everything into one enormous index would simplify the first hour of development and complicate nearly everything afterward.</p><p>Different record families have different fields, query patterns, retention requirements, and operational purposes.</p><p>Registration analysis is not the same workload as reconstructing a SIP call.</p><p>Subscription-state research is not the same workload as searching internal BroadSoft events.</p><p>Routing records into purpose-built index families creates cleaner mappings and makes it easier to manage growth over time.</p><p>OpenSearch writes are performed through a bulk writer.</p><p>The default batch size was increased to 1,500 documents, reducing the number of HTTP requests and lowering per-document indexing overhead.</p><p>That value still has to be watched alongside cluster health, node pressure, shard behavior, and indexing latency. There is no universally perfect bulk size.</p><p>For our environment, however, the larger batch significantly improves throughput compared with the earlier smaller default.</p><h2 id="deterministic-ids-prevent-duplicate-history">Deterministic IDs Prevent Duplicate History</h2><p>Every raw OpenSearch document receives a deterministic ID based on the remote source path and record offset.</p><p>That means a specific record in a specific XS file always resolves to the same document ID.</p><p>If a file is reprocessed, Helix overwrites the same logical documents instead of generating a second copy of every event.</p><p>This is a critical property for a resumable pipeline.</p><p>Without deterministic IDs, retrying a failed or uncertain ingestion could duplicate millions of records.</p><p>Deduplication after the fact would be expensive, unreliable, and unpleasant in all the ways only distributed data cleanup can be unpleasant.</p><p>With deterministic IDs, reprocessing becomes idempotent at the document level.</p><h2 id="extracting-more-than-raw-sip-traffic">Extracting More Than Raw SIP Traffic</h2><p>The streamer does not stop at indexing raw records.</p><p>It also creates higher-level operational state.</p><h3 id="subscription-state-snapshots">Subscription-State Snapshots</h3><p>Records generated by the BroadSoft <code>EventNotification</code> subsystem may contain XSI subscription-state information.</p><p>The streamer normalizes these records and writes snapshots into:</p><p><code>helix-broadsoft-subscription-state</code></p><p>Snapshots are deduplicated using a hash derived from the subscription key and normalized payload.</p><p>If BroadSoft emits the same logical state repeatedly, Helix does not need to create a new document every time.</p><p>That makes the index useful as a state history rather than a warehouse of identical repeats.</p><h3 id="endpoint-registration-state">Endpoint Registration State</h3><p>The parser also correlates BroadSoft registration context with successful SIP registration responses.</p><p>It ties together:</p><ul><li>Registration candidate records</li><li>Successful SIP <code>200 REGISTER</code> responses</li><li>Shared callhalf or session relationships</li><li>Enterprise context</li><li>Normalized endpoint identity</li></ul><p>The resulting state is upserted into the MariaDB table:</p><p><code>bs_enterprise_endpoints</code></p><p>This gives Helix a durable SQL view of endpoint registration activity by enterprise and endpoint.</p><p>The XS logs are therefore serving two purposes at once.</p><p>They remain available as deep forensic evidence in OpenSearch, while also feeding normalized operational state into SQL.</p><h2 id="failure-handling-is-part-of-the-architecture">Failure Handling Is Part of the Architecture</h2><p>A pipeline that only works when everything succeeds is a demo.</p><p>The streamer tracks the major stages of each file independently:</p><ul><li>Download</li><li>Archive</li><li>Process</li></ul><p>If a stage fails, the system records where it failed and stores the latest error.</p><p>That makes failures inspectable and recoverable.</p><p>An SFTP problem is different from a compression problem.</p><p>A malformed record is different from an OpenSearch bulk failure.</p><p>A MariaDB error is different from a local filesystem issue.</p><p>Keeping stage-specific state prevents every problem from collapsing into a generic &#x201C;file failed&#x201D; status.</p><p>It also allows us to resume work without losing the identity and history of the affected file.</p><h2 id="what-codex-actually-contributed">What Codex Actually Contributed</h2><p>It would be easy to summarize this project by saying that AI wrote a parser.</p><p>That would be inaccurate, and it would undersell both the engineering problem and the value of the tool.</p><p>Codex did not arrive with an understanding of our BroadSoft environment, Helix, our operational needs, our OpenSearch architecture, or the failure modes we had already encountered.</p><p>It did not make the architectural decisions on its own.</p><p>What it provided was leverage.</p><p>It helped us:</p><ul><li>Explore parser designs</li><li>Refactor working but inefficient approaches</li><li>Compare data-flow options</li><li>Identify repeated I/O</li><li>Move full processing into the streamer</li><li>Develop the tracking and watermark logic</li><li>Tighten SQL access patterns</li><li>Build deterministic indexing behavior</li><li>Iterate on failure handling</li><li>Turn operational observations into code changes quickly</li></ul><p>The expertise still mattered.</p><p>Someone had to understand why partial remote files were dangerous.</p><p>Someone had to recognize which BroadSoft records were related.</p><p>Someone had to decide what should live in OpenSearch, what should live in MariaDB, and what needed to remain in the forensic payload.</p><p>Someone had to evaluate whether the output was operationally correct.</p><p>AI did not replace that judgment.</p><p>It allowed that judgment to be applied across a much larger amount of code and a much faster sequence of experiments.</p><p>That is the part of AI-assisted engineering that is often missed.</p><p>The real advantage is not asking a model to build a mysterious black box.</p><p>It is using the model to shorten the distance between an engineering observation and a testable implementation.</p><h2 id="the-result">The Result</h2><p>The simplest mental model for the final system is this:</p><p>It watches the moving edge of the BroadSoft XS files, waits until a new file settles, downloads it once, parses it once, archives it once, writes the Helix outputs, and remembers where it left off.</p><p>The production service normally runs with options equivalent to:</p><pre><code class="language-bash">/opt/helix/bin/xs-logs-streamer \
  --config /opt/helix/config/config.yml \
  --incoming-dir /opt/helix/bw-xs-logs/incoming \
  --archive-dir /opt/helix/bw-xs-logs/archive \
  --log-file /opt/helix/logs/xs-logs-streamer.log \
  --poll-interval 20s \
  --stable-min-age 2m \
  --fullprocess \
  --write
</code></pre><p>The logs are not processed byte-for-byte in real time.</p><p>They are processed as soon as they can be safely treated as complete.</p><p>In practice, that means Helix is usually only one or two minutes behind BroadSoft.</p><p>For us, that is the right tradeoff.</p><p>We gain the integrity of processing stable files while still having the data available quickly enough to investigate current incidents.</p><p>What was previously considered an unmanageable collection of enormous rolling text files is now a continuously updated operational data source.</p><p>We can search raw SIP exchanges.</p><p>We can reconstruct call flows.</p><p>We can inspect internal BroadSoft events.</p><p>We can analyze registrations and subscriptions.</p><p>We can track endpoint state.</p><p>We can preserve the original logs in compressed form.</p><p>We can restart the service without losing our place.</p><p>And we can do all of it without repeatedly grinding through the entire history of the remote directory.</p><p>Everyone said the full BroadSoft XS logset could not be processed.</p><p>The real answer was that it could not be processed effectively using the old assumptions.</p><p>Once we stopped treating it as a pile of files and started treating it as a stateful, moving ingestion frontier, the problem changed.</p><p>Codex helped us move through that change much faster.</p><p>But the breakthrough was not magic.</p><p>It was architecture.</p>]]></content:encoded></item><item><title><![CDATA[Modern Expert Systems, Not AI, Are What Most Orgs Actually Need]]></title><description><![CDATA[<p>Though my IT career I have worked everything from SS7 and SIP to DSL, GPON, CMTS, Linux, databases, and large scale distributed systems. I am currently building an internal platform we have named Helix. It is a system designed to correlate operational data across an entire telecom network, from signaling</p>]]></description><link>https://baremetalbridge.com/modern-expert-systems-not-ai-are-what-most-orgs-actually-need/</link><guid isPermaLink="false">6947fc961637b502f6260f00</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Sun, 21 Dec 2025 14:16:30 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/12/AIorExpertSystem.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2025/12/AIorExpertSystem.png" alt="Modern Expert Systems, Not AI, Are What Most Orgs Actually Need"><p>Though my IT career I have worked everything from SS7 and SIP to DSL, GPON, CMTS, Linux, databases, and large scale distributed systems. I am currently building an internal platform we have named Helix. It is a system designed to correlate operational data across an entire telecom network, from signaling edges to physical access layers.</p><p>I am saying that up front for one reason. This perspective did not come from reading marketing decks or experimenting with chatbots. It came from years of being the person who can dig into the internals of any system and extract truth from the data, no matter how fractured it is.</p><p>Right now, everyone thinks they need AI.</p><p>They do not. At least not in the generalized, large language model sense that dominates headlines.</p><p>What most organizations actually need is a modern expert system.</p><p>And those are very different things.</p><h3 id="a-short-history-of-expert-systems-and-why-they-failed">A short history of expert systems and why they failed</h3><p>Expert systems are not new. They peaked in popularity in the 1980s and early 1990s. The idea was simple and ambitious. Capture the knowledge of human experts as rules and let computers reason over them.</p><p>If condition A and condition B are true, then conclusion C follows.</p><p>In theory, this would preserve expertise, reduce dependency on a few senior people, and allow faster decisions. In practice, most expert systems failed.</p><p>Not because the idea was wrong, but because the assumptions were.</p><p>They assumed experts could fully explain how they think. They cannot. Most real expertise is situational and contextual. It emerges while solving the problem, not beforehand.</p><p>They assumed rules would remain stable. They do not. Networks change, software changes, vendors change, humans make mistakes, and edge cases become the norm.</p><p>They assumed reasoning could happen without deep, rich context. It cannot. The systems had thin inputs and brittle logic, so when reality deviated even slightly, the system collapsed.</p><p>As a result, expert systems became rigid, expensive, and fragile. They froze knowledge in time and failed to keep up with the environments they were meant to support.</p><p>If this all sounds familiar, it should. Expert systems were taken seriously enough in the 1980s to warrant mainstream coverage. There is a Computer Chronicles episode that walks through the promise and limitations of early expert systems, and it is worth watching with modern eyes. The ideas were not naive. The tooling and data simply were.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="150" src="https://www.youtube.com/embed/IzjTZQIpGVU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="The Computer Chronicles - Decision Support Systems (1984)"></iframe></figure><p>So the industry moved on.</p><h3 id="what-changed-and-why-the-idea-deserves-resurrection">What changed, and why the idea deserves resurrection</h3><p>What we have now would have been unimaginable when those systems were built.</p><p>We have cheap storage, fast search, and massive compute. We can retain raw operational exhaust instead of summaries. Logs, events, metrics, state changes, and historical traces can all live side by side.</p><p>We also understand systems better now. We know that truth in complex environments is rarely found in a single signal. It emerges from correlation across layers.</p><p>Most importantly, we no longer need to pretend the computer is the expert.</p><p>That is the key shift.</p><p>A modern expert system does not try to replace human judgment. It preserves context, memory, and causality so that human experts can do what they do best.</p><p>Think less rule engine, more institutional memory.</p><h3 id="what-a-modern-expert-system-actually-is">What a modern expert system actually is</h3><p>A modern expert system is not a chatbot. It does not guess. It does not hallucinate. It does not generate answers because answers are rarely the problem.</p><p>The problem is that the evidence is scattered.</p><p>A modern expert system collects, retains, and correlates evidence across domains. It understands time. It understands sequence. It understands that SS7 signaling, SIP dialogs, application server logic, access network behavior, and physical infrastructure failures are all part of the same story.</p><p>In the system I am building, Redis functions like short term memory. Relational databases store structured facts. Search engines preserve long term narrative history. That architecture is not accidental. It mirrors how humans actually think under pressure.</p><p>The system does not say, here is the answer.</p><p>It says, here is everything that happened, in order, across layers, with enough fidelity that the answer becomes obvious to someone who understands the domain.</p><p>That is an expert system.</p><h3 id="why-most-organizations-think-they-want-ai">Why most organizations think they want AI</h3><p>AI sounds powerful. It sounds modern. It sounds like progress.</p><p>But when you look closely at most enterprise use cases, what people are really asking for is not intelligence. They are asking for visibility, correlation, and memory.</p><p>They want to know why something broke.<br>They want to know what changed.<br>They want to know whether this has happened before.<br>They want to know the blast radius.<br>They want to know what matters and what does not.</p><p>Those are not language problems. They are context problems.</p><p>Dropping a generalized LLM on top of fragmented, low quality, uncorrelated data does not solve that. It just adds another opaque layer between the operator and reality.</p><p>In many cases, AI is being used because it sounds cooler than expert system.</p><h3 id="the-uncomfortable-truth">The uncomfortable truth</h3><p>If you tune an expert system deeply to your environment, your network, your workflows, and your failure modes, it will outperform a generalized AI every time for operational decision making.</p><p>Not because it is smarter.</p><p>Because it is grounded.</p><p>It understands your topology, your vendors, your history, your weird edge cases, and your human processes. It does not need to reason abstractly about the world. It needs to remember what actually happened last Tuesday at 3:17 AM.</p><p>That is where expertise lives.</p><h3 id="so-what-is-helix-really">So what is Helix, really</h3><p>Helix is a modern expert system for telecom operations.</p><p>It does not automate decisions. It removes fog.</p><p>It does not predict. It reconstructs.</p><p>It does not replace humans. It keeps them sane.</p><p>And this is the part that matters most to me personally. It reduces the need for heroics. It turns hard won experience into durable infrastructure instead of tribal knowledge locked inside a few burned out people.</p><h3 id="final-thought">Final thought</h3><p>AI is not evil. Large language models are impressive tools when used for the right problems.</p><p>But most organizations chasing AI are skipping a step.</p><p>Before you ask a machine to think for you, you should make sure it can remember for you.</p><p>For many real world systems, especially infrastructure, networks, and operations, the future is not artificial intelligence.</p><p>It is modern expert systems, rebuilt with humility, context, and the power we finally have to make them work.</p><p><em>--Sometimes Thinking Ahead of the Curve Means Looking Behind the Curve</em><br><strong>-Bryan</strong></p>]]></content:encoded></item><item><title><![CDATA[BroadWorks XS Logs: Why “Index Everything” Is the Wrong Answer]]></title><description><![CDATA[<p><strong>Note:</strong> This post is being migrated as part of consolidating Baremetal Bridge into Dangerous Metrics. The updated version now lives here:<br><a href="https://dangerousmetrics.com/noise/broadworks-xs-logs-why-index-everything-is-the-wrong-answer?ref=baremetalbridge.com">https://dangerousmetrics.com/noise/broadworks-xs-logs-why-index-everything-is-the-wrong-answer</a></p>]]></description><link>https://baremetalbridge.com/broadworks-xs-logs-yes-you-can-process-them/</link><guid isPermaLink="false">69408eb91637b502f6260ec6</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Mon, 15 Dec 2025 23:15:47 GMT</pubDate><content:encoded><![CDATA[<p><strong>Note:</strong> This post is being migrated as part of consolidating Baremetal Bridge into Dangerous Metrics. The updated version now lives here:<br><a href="https://dangerousmetrics.com/noise/broadworks-xs-logs-why-index-everything-is-the-wrong-answer?ref=baremetalbridge.com">https://dangerousmetrics.com/noise/broadworks-xs-logs-why-index-everything-is-the-wrong-answer</a></p>]]></content:encoded></item><item><title><![CDATA[Cloud Is Time Share, But So Fast It's Invisible]]></title><description><![CDATA[<p>I just installed the Facebook app on a freshly reinstalled Windows 11 laptop. A 17 inch 2019 HP Omen, i7, 16GB of RAM, NVMe boot drive, GTX 1070M. It ran Linux for a long time after I finally got tired of Windows 10. But when Windows 11 came out and</p>]]></description><link>https://baremetalbridge.com/cloud-is-time-share-but-so-fast-its-invisible/</link><guid isPermaLink="false">693eed7d1637b502f6260e7f</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Sun, 14 Dec 2025 17:23:53 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/12/ChatGPT-Image-Dec-14--2025--12_03_52-PM.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2025/12/ChatGPT-Image-Dec-14--2025--12_03_52-PM.png" alt="Cloud Is Time Share, But So Fast It&apos;s Invisible"><p>I just installed the Facebook app on a freshly reinstalled Windows 11 laptop. A 17 inch 2019 HP Omen, i7, 16GB of RAM, NVMe boot drive, GTX 1070M. It ran Linux for a long time after I finally got tired of Windows 10. But when Windows 11 came out and everyone else was loudly declaring they were done with Windows, I jumped back on. This machine has a permanent license, so there was no purchase, no friction, no ceremony. Everything snapped into place instantly. Then I installed the ChatGPT client. Same experience. Immediate. Responsive. It feels local, personal, owned.</p><p>And yet none of it is. These days this machine spends more time acting as a terminal than actually processing anything itself. Maybe an Excel spreadsheet here or there, though even that likely came from OneDrive. Mostly, it is just a fast window into responses generated somewhere else. Still a terminal.</p><p>Every bit of this is running somewhere else. In data centers most of us will never see, slicing millions of processing threads across networks that routinely move ten gigabits per second. Compared to what we grew up with, this is absurdly fast. Compared to the old days of time share, it barely resembles the same idea.</p><p>Back then, time share announced itself. You could feel it in your bones. Jobs went into queues. You waited. The machine reminded you that you were not alone. Downloading a one gigabyte file over a 128k connection was not just slow, it was a commitment. You planned around it. You hoped nothing failed. You knew other people were competing for the same limited resources.</p><p>The friction was the point. The slowness made the system visible.</p><p>Today, that same file crosses the wire in seconds. Often you do not even notice it happening. The wait is gone, and with it the cues that reminded you of the bargain you were making.</p><p>That is the real shift.</p><p>Cloud is time share, but it is fast enough to feel like ownership.</p><p>We are all sharing compute now, just at a scale that breaks intuition. Instead of a few users dividing a mainframe, we share planetary infrastructure. Millions of cores. Vast memory pools. Storage deep enough to feel endless. Latency low enough that your brain stops asking where things live.</p><p>Speed changes psychology.</p><p>When time share was slow, you understood the deal. You traded control for access. You accepted limits. You learned patience, or you learned how to work around the system. Either way, you knew where you stood.</p><p>Now the bargain hides itself. The interface is smooth. The response is instant. The abstraction is nearly perfect. It feels like the machine is yours even when it very clearly is not.</p><p>Facebook. ChatGPT. Streaming music. Cloud storage. AI copilots. All of it lives in someone else&#x2019;s data center, running on someone else&#x2019;s schedule, governed by someone else&#x2019;s rules. You are no longer waiting for CPU cycles. You are sharing them so efficiently that the sharing disappears.</p><p>That is why this is harder to resist.</p><p>You can argue philosophy all day, but the practical reality is simple. The performance gap is too wide. The convenience is too real. The economics are too compelling. Nobody wants to go back to overnight downloads or waiting weeks for hardware to arrive.</p><p>So the question is not whether we can stop this. We cannot.</p><p>The real question is what we lose when speed erases awareness.</p><p>In the old time share world, you knew you were renting. In the personal computer era, you knew you owned the machine. Today the line is deliberately blurred. Ownership feels emotional instead of technical. Control feels implied instead of actual.</p><p>Into that blur step certifications, platforms, consoles, roles, and managed services. Knowledge gets re siloed under corporate umbrellas. You know your dashboard. You know your permissions. You know your slice. You do not know the whole.</p><p>That model scales. It is efficient. It also reshapes how engineers think.</p><p>When everything is abstracted and fast, understanding starts to feel optional. Curiosity becomes friction. Deep system knowledge gives way to interfaces that promise you do not need to know what is underneath.</p><p>Gen X sits in an odd place here. We remember slow networks and screaming modems. We remember when downloading a file was a decision with consequences. We also live comfortably in a world where gigabytes move without thought and AI responds in real time.</p><p>This is not an anti cloud argument. It is not anti progress. It is memory.</p><p>We remember when the machine showed its seams.</p><p>Cloud is time share perfected. Smoothed. Accelerated until resistance disappears. The cage is still there, but you do not feel the bars because everything moves at the speed of expectation.</p><p>So can we fight it. No, not really.</p><p>But we can remember what it means to understand systems instead of just using them. We can teach curiosity alongside convenience. We can remind people that behind every instant response is a real machine, burning power, moving data, and obeying physics.</p><p>Because the danger is not that we are sharing compute.</p><p>The danger is forgetting that we are sharing at all.<br><br><em>--Deep Thoughts Always</em><br><strong>-Bryan</strong></p>]]></content:encoded></item><item><title><![CDATA[Local AI]]></title><description><![CDATA[<p>There is a strange idea that keeps threading itself through modern tech. If you want intelligence, you must go big. Big models, big GPUs, big training budgets, big vendors. The assumption is that complexity requires scale, and scale requires the cloud.</p><p>The truth is quieter. Intelligence is not about size.</p>]]></description><link>https://baremetalbridge.com/local-ai/</link><guid isPermaLink="false">6936ac961637b502f6260e70</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Mon, 08 Dec 2025 10:49:24 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/12/Local-AI-Blog-Post.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2025/12/Local-AI-Blog-Post.png" alt="Local AI"><p>There is a strange idea that keeps threading itself through modern tech. If you want intelligence, you must go big. Big models, big GPUs, big training budgets, big vendors. The assumption is that complexity requires scale, and scale requires the cloud.</p><p>The truth is quieter. Intelligence is not about size. It is about structure. It is about how information is shaped, aligned, cross-referenced, and made coherent.</p><p>The more I work with operational data, the more obvious it becomes that the future is not in shipping every question to a giant generalized mind in the sky. The future lives in smaller systems that actually understand the environment they live in. Intelligence that is local, specialized, and built on top of everything your own infrastructure already knows.</p><p>The challenge is not training a model. The challenge is giving your data a nervous system.</p><p>The data itself already exists. Call logs, signaling traces, device telemetry, SNMP counters, tickets, weather spikes, human behavior patterns that repeat so consistently they might as well be physics. Every system emits signals. What is missing is a single place where those signals land, synchronize, and form a picture.</p><p>My view is that you get there by stacking three layers.</p><p>At the bottom sits the immutable record. Every log line, every heartbeat, every state change. Not cleaned, not simplified, not modeled. Raw fact. Time is the only structure. This is the layer that never lies.</p><p>Above it sits the structured layer. The place where raw sequences become meaningful objects. A storm of BroadSoft logs becomes a single callflow. A thousand modem telemetry packets become a behavioral window on a neighborhood. A loose heap of metrics becomes a timeline. This layer speaks the language of the domain.</p><p>Then above that sits the intelligence layer. Not AI in the marketing sense. AI in the literal sense. Local inference systems that understand your own infrastructure because they were built out of your own infrastructure. A knowledge graph that sees patterns across every subsystem. A rules engine that adapts because it has history. A set of micro models that are not trying to answer the entire world, only the piece of the world they sit inside.</p><p>When all three layers align, the system starts acting alive. You do not ask it what happened. It tells you. You do not dig for root cause. It hands you a timeline. You do not correlate weather, calls, power stability, ticket spikes, and fiber alarms. It already sees the relationships.</p><p>And none of this requires a trillion-parameter model. It requires coherence.</p><p>The large models will always be good at language, summarization, generic creativity. They are universal tools. But universality is not insight. Insight comes from context. Insight comes from systems that are shaped by their environment, not from systems that try to model every environment at once.</p><p>Local intelligence is not a smaller version of cloud AI. It is a different species entirely. One that listens more than it predicts. One that adapts locally instead of statistically. One that grows directly out of the signals your own network produces.</p><p>If the last decade was about scale, the next one will be about precision. Not giant models, but finely tuned minds built out of the data you already own. Minds small enough to run anywhere, smart enough to be useful, and structured enough to see reality instead of hallucinating patterns that are not there.</p><p>You do not need a thinking machine. You need a system that understands the story your infrastructure is already telling.</p><p>That is what real operational intelligence will become. Not magic. Not hype. Just coherence built at the right place in the stack.<br><br><em>-Think Bold</em><br><strong>--Bryan</strong></p>]]></content:encoded></item><item><title><![CDATA[Linux - The Real Foundation]]></title><description><![CDATA[<p>Before there were dashboards, pollers, or clusters, there was Linux. Not the polished, GUI-heavy version you get now with auto-updates and a software store. I am talking about the kind that barely booted, came on a stack of CDs, and expected you to know what you were doing.</p><p>My first</p>]]></description><link>https://baremetalbridge.com/linux-the-real-foundation/</link><guid isPermaLink="false">68fe23bbd9988c0338615ac1</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Sun, 26 Oct 2025 13:44:33 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/10/LinuxTheFoundationBlogPost-2.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2025/10/LinuxTheFoundationBlogPost-2.png" alt="Linux - The Real Foundation"><p>Before there were dashboards, pollers, or clusters, there was Linux. Not the polished, GUI-heavy version you get now with auto-updates and a software store. I am talking about the kind that barely booted, came on a stack of CDs, and expected you to know what you were doing.</p><p>My first Linux install was <strong>Red Hat 5 Manhattan</strong>, somewhere around 1998. I did it because I wanted to run my own CircleMUD server. That was before apt, before <code>yum</code>, before <code>dnf</code>, before anything held your hand. I think I broke that system a dozen times installing the wrong RPM versions, and it took about 200 recompiles (give or take) to finally get CircleMUD running. But I did it. And it ran for a couple of months, which at the time felt like eternity.</p><p>Then life moved on. For a few years, I did not touch Linux much. I was still working at a mom-and-pop computer shop, fixing Windows 98 machines and building beige towers with jumpers and ribbon cables. It was a good start, but it was small.</p><p>When I finally moved from that world into the world of ISPs around 2001, Linux came back with a vengeance. It was everywhere &#x2014; on servers, routers, mail systems, DNS, everything that actually mattered. And it just worked. Once you got your hands around it, you realized it was the only layer that did not lie to you.</p><hr><h3 id="why-linux-still-matters"><strong>Why Linux Still Matters</strong></h3><p>Linux is the bedrock of everything I do. It is not about open source for ideology&#x2019;s sake. It is about control. When I run a system, I want to know what it is doing, why it is doing it, and how to stop it when it should not be. Linux gives me that.</p><p>It is stable, predictable, and transparent. It does not reboot itself in the middle of your night to &#x201C;apply important updates.&#x201D; It does not phone home. It does not hide processes. It simply runs what you tell it to run, and when something breaks, you can trace the logic all the way down to the kernel if you have to.</p><p>That kind of honesty is rare. And once you learn it, it becomes part of how you think. You stop trusting black boxes. You stop accepting mystery as an answer. You start building systems that earn your trust instead of demanding it.</p><hr><h3 id="the-foundation-of-everything-else"><strong>The Foundation of Everything Else</strong></h3><p>Every tool in my stack &#x2014; OpenSearch, Grafana, Logstash, Go pollers, MariaDB &#x2014; depends on Linux. It is the platform that makes all of them possible.</p><p>When I say I build systems that tell the truth, that truth starts here. Linux gives me the freedom to build from the ground up without waiting on a vendor. I can deploy, automate, containerize, or run bare metal depending on what the job needs. It adapts to my intent instead of the other way around.</p><p>The filesystem is clean. The process tree is honest. The logs are readable. And when I put it all together, I know that every event I track and every metric I visualize starts from a stable, trusted base.</p><hr><h3 id="what-it-taught-me"><strong>What It Taught Me</strong></h3><p>Running Linux teaches patience and consequence. You learn to think before you type. You learn to read before you reboot. You learn that every fix comes with a trade-off.</p><p>I learned those lessons the hard way back on Red Hat 5, staring into the depths of dependency hell because I wanted to host a text-based game for a handful of friends. But those same lessons are what make me good at what I do now. Whether it is a network outage, a routing loop, or a corrupted index, the logic is the same &#x2014; find the cause, fix the cause, and understand the cause.</p><p>Linux taught me to respect the cause.</p><hr><h3 id="where-it-stands-now"><strong>Where It Stands Now</strong></h3><p>Today, I run Linux everywhere &#x2014; on my workstation, my lab systems, my data pipelines, and my servers. I trust it because it has earned that trust over decades.</p><p>When people ask me why I still build everything on Linux instead of some polished proprietary system, the answer is simple: because I can see it. I can touch it. I can fix it.</p><p>It is the real foundation of the intelligence layer, the quiet constant that keeps the rest of the system honest.</p><hr><p>Stay tuned for the next article, <strong>&#x201C;Grafana &#x2013; The EKG of the System,&#x201D;</strong> where I will talk about how visualization becomes intuition when the data finally starts speaking in color and motion.</p><p><strong>--Bryan</strong></p>]]></content:encoded></item><item><title><![CDATA[OpenSearch - The Core of My Tool Belt]]></title><description><![CDATA[<p>When I talk about OpenSearch, I am talking about the part of my system that remembers. It is not just a database. It is the memory engine that holds everything I have ever taught the system to see.</p><p>I started using Elastic long before OpenSearch existed, back when the interface</p>]]></description><link>https://baremetalbridge.com/opensearch-the-core-of-my-tool-belt/</link><guid isPermaLink="false">68fe1f96d9988c0338615a9a</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Sun, 26 Oct 2025 13:27:53 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/10/OpensearchTheCoreBlogPost.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2025/10/OpensearchTheCoreBlogPost.png" alt="OpenSearch - The Core of My Tool Belt"><p>When I talk about OpenSearch, I am talking about the part of my system that remembers. It is not just a database. It is the memory engine that holds everything I have ever taught the system to see.</p><p>I started using Elastic long before OpenSearch existed, back when the interface still looked like a science experiment and every upgrade felt like walking across a moving bridge. I stuck with it because it gave me something most systems could not: a way to search and reason about data in near real time. When Amazon forked Elastic into OpenSearch, I followed that path, not because of branding, but because it preserved what I valued most &#x2014; open access, transparency, and control.</p><hr><h3 id="why-i-use-it"><strong>Why I Use It</strong></h3><p>OpenSearch gives me a way to view my world over time. Every log line, every metric, every CDR, and every device event lands there, timestamped, structured, and searchable. When something goes wrong in the network, I can replay the story exactly as it happened.</p><p>It is the core of my tool belt because everything else in the stack orbits around it. Logstash feeds it. The Go pollers enrich and shape what they receive. Grafana visualizes its heartbeat. But OpenSearch is the one holding the truth.</p><p>It scales the way I think. I can work at the level of a single ONT or zoom out to see a month of network behavior in a single query. I can run ten indexes for ten different data types and still cross-correlate them in milliseconds. It is both a microscope and a telescope.</p><hr><h3 id="my-history-with-it"><strong>My History With It</strong></h3><p>I have been indexing telecom data since before most people in this industry knew what JSON was. I started with early modem telemetry, DSL metrics, and provisioning logs, all flattened into Perl scripts and dumped into MySQL tables.</p><p>Then I met Elasticsearch, and suddenly all of that could be searched, graphed, and cross-referenced. I could take a MAC address, trace it through a dozen systems, and find its full life story in seconds. Over the years, I built dashboards that told real stories: who was down, when it started, what triggered it, and what changed just before it happened.</p><p>Of course, it does help that I worked at Elastic as a support engineer for nearly 3 years right at the IPO threshold.</p><p>When Elasticsearch turned into a closed ecosystem, I moved to OpenSearch and never looked back. It was like getting my keys back to the engine room. Now I can build exactly what I need, how I need it, and at a scale that fits my environment, not someone else&#x2019;s licensing model.</p><hr><h3 id="what-i-have-already-pulled-off"><strong>What I Have Already Pulled Off</strong></h3><p>With OpenSearch as the backbone, I have ingested and correlated data from systems that were never meant to speak to each other.</p><p>I have it tying together ONT logs, SS7 CDRs, DHCP churn, provisioning changes, and ticketing data. I can tell when a customer&#x2019;s line went down, how long it stayed down, which optical path it followed, and what the DSLAM or PON port saw in the same moment.</p><p>I built the RFPhantom poller in Go to feed it DOCSIS metrics from thousands of modems in under half a minute. I built the ONT log enricher that cross-checks events against CMS and enriches them in real time without bringing the system to its knees. I built the indexes that let me track trends, not just incidents.</p><p>This means I can see the living network, not just snapshots. OpenSearch turned raw logs into a time-aware narrative engine.</p><hr><h3 id="why-it-works-for-me"><strong>Why It Works For Me</strong></h3><p>I like systems that can grow without collapsing. OpenSearch is built for that. It shatters into shards, distributes across nodes, merges segments, and keeps pace with whatever you throw at it. You can start with one node and grow to ten without rewriting a thing.</p><p>For me, that is critical. I do not have a hyperscale data center. I have commodity hardware, solid engineering, and a need to make every core count. OpenSearch lets me expand horizontally and tune performance as I go.</p><p>When I optimize mappings, set shard counts, and tune refresh intervals, I am not chasing benchmarks. I am making sure the data can breathe, merge cleanly, and scale into tomorrow&#x2019;s load without stalling today&#x2019;s queries. That is the kind of scalability that matters in the real world &#x2014; the kind that keeps working while you are still building.</p><hr><h3 id="k-nn-will-it-help"><strong>k-NN Will It Help?</strong></h3><p>The next frontier for me is <strong>k-NN search</strong> inside OpenSearch. It is one of the few features that actually moves the needle for what I am building.</p><p>Right now, I can find patterns by logic and by correlation. With k-NN, I can add similarity &#x2014; the ability for the system to recognize shapes in the data that look like problems it has seen before.</p><p>It is not <strong>a </strong>prediction in the AI sense. It is memory at scale. When a certain combination of optical drift, temperature swing, or call failure cluster appears, k-NN can say, &#x201C;I have seen this before,&#x201D; and point me toward the last time it happened and what fixed it.</p><p>That is where this is heading. From correlation to recognition. From storytelling to intuition. From data that describes to data that remembers.</p><hr><h3 id="closing-thoughts"><strong>Closing Thoughts</strong></h3><p>OpenSearch is not just a tool I use<strong>; it&apos;s a way of life</strong>. It is the center of gravity for everything I have built. It gives shape to noise and history to signal.</p><p>When people ask what powers my systems, they expect to hear a long list of microservices or some glossy AI framework. What they get instead is OpenSearch &#x2014; open, honest, and powerful enough to hold the mind of an entire network.</p><p>This is the foundation. Everything else I build, from middleware to the eventual interface, starts and ends here.</p><h3 id="up-next">Up Next</h3><p>Linux &#x2013; The Real Foundation</p><p><br><em>--Stay tuned</em><br><strong>-Bryan</strong></p>]]></content:encoded></item><item><title><![CDATA[My Toolbox]]></title><description><![CDATA[<p>I have spent most of my life surrounded by tools. Physical ones, digital ones, some I built myself, some I borrowed, and a few that should have been retired a decade ago but still work because I know exactly how to hit them with the right command. What I have</p>]]></description><link>https://baremetalbridge.com/my-toolbox/</link><guid isPermaLink="false">68fe1ccad9988c0338615a8a</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Sun, 26 Oct 2025 13:17:59 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/10/MyTooboxBlogPostImage.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2025/10/MyTooboxBlogPostImage.png" alt="My Toolbox"><p>I have spent most of my life surrounded by tools. Physical ones, digital ones, some I built myself, some I borrowed, and a few that should have been retired a decade ago but still work because I know exactly how to hit them with the right command. What I have learned over twenty-four years in telecom is that the right tools are not just utilities. They are extensions of how you think.</p><p>The stack I use today did not come from a vendor roadmap or a course syllabus. It came from years of building things that had to work, survive, and make sense under pressure. Every piece of it has a reason to exist. It is not about trends. It is about trust.</p><hr><h3 id="linux-%E2%80%93-the-ground-beneath-everything"><strong>Linux &#x2013; The Ground Beneath Everything</strong></h3><p>I run Linux because it does not lie to me. It does not hide what it is doing. It does not reboot itself for &#x201C;my convenience.&#x201D; It simply runs. You can pull it apart, see the logic, and understand the sequence of events that led to any state.</p><p>In a field where uptime is currency and mystery is failure, I cannot afford to run something that treats me like a guest in my own machine. Linux lets me work close to the metal, to feel the heartbeat of the system, not just the interface on top of it. It is the quiet hum that everything else in my world stands on.</p><hr><h3 id="opensearch-%E2%80%93-the-core-of-memory"><strong>OpenSearch &#x2013; The Core of Memory</strong></h3><p>OpenSearch is not just my database or dashboard engine. It is the memory of my entire operation. I have worked with Elastic and OpenSearch since around 2016, and what I learned is that speed, scale, and clarity mean nothing if you cannot trust the shape of your data.</p><p>I use OpenSearch because I can. Because it is open, predictable, and does not decide what I am allowed to see. It indexes everything, speaks fluently in time, and does not forget. When I look at a dataset from months ago, it should look the same as it did then, with every field still connected to its lineage. That kind of honesty in data is rare.</p><p>I do not run it because it is trendy. I run it because I know it will still be telling the truth long after the marketing slides have faded.</p><hr><h3 id="mariadb-%E2%80%93-the-anchor"><strong>MariaDB &#x2013; The Anchor</strong></h3><p>Every system needs an anchor, a place for data that does not drift. OpenSearch may be my dynamic memory, but MariaDB holds the static truths. Customer records, service addresses, topology maps, and reference tables that do not change unless I change them.</p><p>There is comfort in SQL. You can reason about it, trace it, and know exactly what a query is doing before you run it. It is the calm voice in a storm of JSON. I use it when I need reliability, precision, and something that will never pretend to be smarter than it is.</p><hr><h3 id="logstash-%E2%80%93-the-old-workhorse"><strong>Logstash &#x2013; The Old Workhorse</strong></h3><p>Logstash is not the fastest tool in the shed, but it is still one of the most dependable. It takes chaos and turns it into structure. It can take the weirdest logs from the weirdest devices and make sense of them. I can write Grok filters in my sleep, and sometimes I do.</p><p>People have told me there are newer, sleeker options. Maybe. But I know how this one behaves under load, how it fails, and how to make it recover. It has been around long enough to earn its place. When I drop a new feed into the pipeline, I know exactly what will happen. There is something to be said for an old tool that still gets the job done.</p><hr><h3 id="grafana-%E2%80%93-the-ekg"><strong>Grafana &#x2013; The EKG</strong></h3><p>Grafana is where the data breathes. It is the pulse monitor of the system. When something drifts, spikes, or simply feels off, Grafana is the first place I look.</p><p>I do not use it because of pretty graphs or corporate dashboards. I use it because it shows me the rhythm of the network in real time. It is how I see when a problem is just noise, or when the heartbeat is skipping for a reason.</p><p>Grafana does not reason. It reflects. It is not the mind of the system, it is its vital signs. And when I have built a good dashboard, I can see the health of the entire operation in a single glance.</p><hr><h3 id="go-%E2%80%93-the-precision-tool"><strong>Go &#x2013; The Precision Tool</strong></h3><p>Go is where my logic lives. It is fast, clean, and predictable. It does not hide behind abstraction or surprise me with behavior I did not ask for. When I write pollers, enrichers, or middleware in Go, I know exactly what is happening down to the byte.</p><p>It gives me confidence. It compiles into small, self-contained binaries that I can drop anywhere. It is elegant in its simplicity. Go is not the flashiest language, but it is one of the most honest. It rewards thoughtfulness and punishes chaos, just like networks do.</p><hr><h3 id="perl-%E2%80%93-the-swiss-army-chainsaw"><strong>Perl &#x2013; The Swiss Army Chainsaw</strong></h3><p>Ah, Perl. The language that refuses to die, and honestly, I hope it never does. Perl is like that stubborn old technician who knows every backdoor, every undocumented command, and exactly which piece of equipment needs a kick instead of a reboot.</p><p>When a piece of logic refuses to pin down, I pull out Perl. Sometimes I just need to grab a text file by the throat and make it talk. Perl does that. It might not be pretty, but it is fast, effective, and completely loyal to the person wielding it.</p><p>I have built systems in it, scraped data from places it was never meant to leave, and stitched entire processes together with nothing more than a few regular expressions and a bad sense of humor. It is the tool I keep in the back of the drawer for emergencies, and it still saves the day more often than I would like to admit.</p><hr><h3 id="zfs-%E2%80%93-the-memory-that-does-not-forget"><strong>ZFS &#x2013; The Memory That Does Not Forget</strong></h3><p>When you work with as much data as I do, backups are not optional, and corruption is not an acceptable risk. ZFS gives me the peace of mind that everything I have built can be rolled back, cloned, or snapshotted in seconds.</p><p>It is not just storage, it is assurance. Every bit of the intelligence layer depends on being able to trust that yesterday&#x2019;s data is still valid today. ZFS gives me that trust. It is the kind of technology that quietly makes everything else possible.</p><hr><h3 id="react-tailwind-%E2%80%93-the-face-of-the-machine-coming-soon"><strong>React + Tailwind &#x2013; The Face of the Machine (Coming Soon)</strong></h3><p>On the roadmap is a new interface built with React, Tailwind, and Vite. It is not running yet, but it will be built step by step through this series as the system grows.</p><p>The goal is not flash or animation. It is clarity and speed. The people who use my tools are operators, and they need information, not decoration. React will handle the interaction, Tailwind will keep the design uniform, and together they will give the intelligence layer a clean, fast face that can keep up with the human behind the keyboard.</p><hr><h3 id="why-these-tools-matter"><strong>Why These Tools Matter</strong></h3><p>Every tool in this kit earned its place the hard way. Not because it was fashionable, but because it worked when it mattered. They are not pieces of a tech stack; they are a philosophy of control, transparency, and resilience.</p><p>These are the core components I rely on most, but they are not all the tools I use. If I find something that does a job better, I will use it. If I need to write a new tool that fits my data more precisely, I will do that too. The point is not loyalty to any single language or platform. The point is using the right tool for the problem, and understanding why it works.</p><p>The real intelligence in operations does not come from machine learning or vendor dashboards. It comes from humans who understand how their tools think, who can trace a problem down to its root without being distracted by noise.</p><p>My toolbox is built for that kind of work. Each piece is a lens that helps me see the system more clearly. Together, they form the foundation of what I call <em>The Intelligence Layer</em>, a way of making sense of modern networks without surrendering to them.</p><hr><p>Stay tuned for the next article, <strong>&#x201C;OpenSearch &#x2013; The Core of My Tool Belt,&#x201D;</strong> where I will explore how this engine became the heart of everything I build, and why I trust it to hold the memory of my systems.</p><p><em>--If You&apos;re Not First, You&apos;re Last (Maybe)</em><br><strong>-Bryan</strong></p>]]></content:encoded></item><item><title><![CDATA[The Work Never Ends: This Is The Beginning]]></title><description><![CDATA[<h3 id="what-i-do"><strong>What I Do</strong></h3><p>I build systems that tell the truth. I pull signal from noise. From network logs and call records, to service data, optics, metrics, and all the other pieces that generally live in separate silos with separate logins, I bind them into one pane of glass. I write</p>]]></description><link>https://baremetalbridge.com/the-work-never-ends-this-is-the-beginning/</link><guid isPermaLink="false">68fc00cad9988c0338615a5e</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Fri, 24 Oct 2025 22:56:14 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/10/ChatGPT-Image-Oct-24--2025--06_55_16-PM.png" medium="image"/><content:encoded><![CDATA[<h3 id="what-i-do"><strong>What I Do</strong></h3><img src="https://baremetalbridge.com/content/images/2025/10/ChatGPT-Image-Oct-24--2025--06_55_16-PM.png" alt="The Work Never Ends: This Is The Beginning"><p>I build systems that tell the truth. I pull signal from noise. From network logs and call records, to service data, optics, metrics, and all the other pieces that generally live in separate silos with separate logins, I bind them into one pane of glass. I write pollers, enrichers, and dashboards that translate the chaos of rural telecom into something you can reason about.</p><p>My work cuts across the full telecom stack... SS7, SIP, PON, DSL, DOCSIS, provisioning, and everything that ties them together. Operations do not live inside a single protocol, and neither do I. If it speaks, I can listen. Once I can listen, I can teach the system to listen too.</p><h3 id="why-i%E2%80%99m-doing-this"><strong>Why I&#x2019;m Doing This</strong></h3><p>Because I got tired of seeing MBs and GBs of useful data just get stored static on a forgotten drive somewhere. Because I could see the stories in the data. I could see how to connect them together. I believe the real intelligence in our networks does not come from AI models or vendor dashboards, it comes from engineers who actually <em>understand</em> what they are looking at.</p><p>This blog is where I show how that understanding is built &#x2014; through systems, through code, through iteration. It is where I document how I think, not just what I make.</p><h3 id="the-lineage-from-codexmcp-to-now"><strong>The Lineage: From CodexMCP to Now</strong></h3><p>If you browse back through this blog or my LinkedIn posts, you will see a lot of time went into a project called <strong>CodexMCP</strong>. That project started as an experiment to emulate user churn inside a VM. It was going to be a way to simulate a living network ecosystem. But like most experiments, it grew into something more. Once I proved the mappings I created for the data and the tuning of OpenSearch were tight, the project started to shift a little.</p><p>Over time, CodexMCP stopped being a specific tool and became a way of <em>thinking</em> &#x2014; about systems as living entities, about feedback loops, about understanding data as an organism that evolves when you observe it the right way.</p><p>What you are reading now is the evolution of that thinking. This is no longer about simulation. It is about working directly with real, live network data and using it to build operational intelligence at scale. The idea remains the same... learn, listen, adapt.</p><h3 id="the-moving-target"><strong>The Moving Target</strong></h3><p>There is no &#x201C;end result.&#x201D; Every time you think you have caught up, the landscape shifts. In this field, you do not just maintain, you chase. Step away for a few months, and you will spend a year catching up.</p><p>So this is not a static documentation project. It is a record of motion &#x2014; of staying sharp, staying curious, and turning daily operations into a continuous feedback loop of learning.</p><h3 id="where-it%E2%80%99s-going"><strong>Where It&#x2019;s Going</strong></h3><p>Over time this space will evolve into a full technical atlas:</p><ul><li>How dashboards become decision systems</li><li>How clean data enables intelligence</li><li>How small even small networks can operate with the precision of hyperscalers</li><li>How to think about your own data as a living system</li></ul><p>There is no finish line. The work never ends, and that is exactly the point.</p><p>Stay tuned for the next article, <em>My Toolbox</em>, where I will discuss the open source tools I use to build these systems, and how I create specialized views to troubleshoot specific problems.</p><p><em>--Here We Go</em><br><strong>-Bryan</strong></p>]]></content:encoded></item><item><title><![CDATA[Take Back Your Data: Build Intelligence, Don’t Rent It]]></title><description><![CDATA[Once your metrics, logs, and telemetry live in a vendor’s cloud, the balance of power shifts. You stop being the operator and become the consumer of your own infrastructure. You end up renting insight from the very systems you built.]]></description><link>https://baremetalbridge.com/takebackyourdata/</link><guid isPermaLink="false">68fb400cd9988c0338615a39</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Fri, 24 Oct 2025 09:11:03 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/10/ChatGPT-Image-Oct-24--2025--05_07_13-AM.png" medium="image"/><content:encoded><![CDATA[<h2 id></h2><img src="https://baremetalbridge.com/content/images/2025/10/ChatGPT-Image-Oct-24--2025--05_07_13-AM.png" alt="Take Back Your Data: Build Intelligence, Don&#x2019;t Rent It"><p>I keep seeing a wave of new commercials lately. Cisco. GitLab. Dell. IBM. Each one promising &#x201C;AI-powered insight,&#x201D; each one showing the same thing &#x2014; a human dashboard with all kinds of nifty visuals and tools on it. Somewhere along timeline you might see an LLM chat window.</p><p>But look closely and you&#x2019;ll see what&#x2019;s really going on. None of them are selling artificial intelligence. They&#x2019;re selling augmented intelligence, the illusion that you can buy understanding as a service.</p><p>You can&#x2019;t.</p><p>Understanding still comes from people. The machine only amplifies it.</p><p>The truth is, you can build everything they&#x2019;re showing on one commodity server. Ten thousand dollars of hardware. No contracts. No GPU cloud bills. No vendor markup on your own data.</p><p>All it takes is time, cooperation, and a few people who actually understand what the data is saying.</p><h3 id="the-mirage-of-turnkey-intelligence">The Mirage of Turnkey Intelligence</h3><p>Every marketing campaign tells the same story: plug in our product, and your data will finally &#x201C;talk&#x201D; to you. But that story skips the part where your data leaves your house.</p><p>Once your metrics, logs, and telemetry live in a vendor&#x2019;s cloud, the balance of power shifts. You stop being the operator and become the consumer of your own infrastructure. You end up renting insight from the very systems you built.</p><p>You do not need to do that.</p><p>Open source has already given us the full toolkit.<br>OpenSearch, Grafana, React, Go, Python, and local models like Mistral or Llama run perfectly well on a standard multi-core system. If you want a bit of a boost add even a consumer grade GPU card, python will use it. You can poll your devices, enrich the results, and visualize them in real time.</p><p>That&#x2019;s not science fiction. That&#x2019;s Tuesday afternoon if you&#x2019;re given the freedom to work.</p><h3 id="build-locally-think-globally">Build Locally, Think Globally</h3><p>When you own your pipelines, you control the story your data tells. You can experiment without asking permission. You can enrich a dataset three different ways and see which one correlates to the truth on the ground.</p><p>This is how the next generation of NOC engineers needs to be trained. Not as ticket closers. Not as vendor whisperers. As listeners.</p><p>Teach them to listen to the data. Teach them to question why a value spiked, what it means, and what system whispered that change into being. That is how you grow a NOC that can outthink its vendors instead of waiting on them.</p><h3 id="the-edge-cases-still-matter">The Edge Cases Still Matter</h3><p>You can automate 99% of the work. I encourage it. Let the systems handle repetition. But that last one percent , that&#x2019;s where the real story hides.</p><p>A model can summarize thousands of modem metrics, but it still takes a human to know that a BIP counter rising on an ONT might mean water in a splice tray two miles away. The model doesn&#x2019;t have intuition. It doesn&#x2019;t know what Ohio humidity does to fiber. It doesn&#x2019;t smell burnt dust on a card slot. You do.</p><p>That&#x2019;s why we&#x2019;re not replaceable. We&#x2019;re the validation layer between data and reality.</p><h3 id="don%E2%80%99t-sell-your-soul-for-convenience">Don&#x2019;t Sell Your Soul for Convenience</h3><p>This isn&#x2019;t a call to boycott vendors. Use them. Learn from them. But don&#x2019;t surrender your autonomy for ease. The moment someone tells you that you have to &#x201C;buy your data back,&#x201D; the game is over.</p><p>Keep your raw data. Keep your enrichment logic. Build your own indexes. If you don&#x2019;t have the time, fight for it. If you don&#x2019;t have the cooperation, demand it. Because every bit of data you own outright is one more step toward independence.</p><h3 id="where-we%E2%80%99re-going">Where We&#x2019;re Going</h3><p>The future of operations isn&#x2019;t vendor dashboards or pre-trained models. It&#x2019;s a generation of engineers who treat data as story of the system, not as a wall of text.</p><p>The smartest systems will not replace the human. They will serve as instruments we learn to play. The ones who master that harmony, human intuition backed by open tools, will run circles around those who rented their understanding.</p><p>Take back your data. Build your own intelligence.<br>Because the real revolution isn&#x2019;t artificial. It&#x2019;s human.</p><p><em>--Is It Live or Is It Memorex</em><br><strong>-Bryan</strong></p>]]></content:encoded></item><item><title><![CDATA[The Fourth Dimension of Data]]></title><description><![CDATA[<p>Most people look at a dashboard and see a collection of panels. A few charts, some graphs, maybe a live table or a map. Two dimensions. Something you look at.</p><p>But that is not how I see it.</p><p>When I am deep inside a network, watching ONT logs, SS7 call</p>]]></description><link>https://baremetalbridge.com/untitled-10/</link><guid isPermaLink="false">68fab8cbd9988c0338615a2c</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Thu, 23 Oct 2025 23:27:46 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/10/ChatGPT-Image-Oct-23--2025--07_25_35-PM.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2025/10/ChatGPT-Image-Oct-23--2025--07_25_35-PM.png" alt="The Fourth Dimension of Data"><p>Most people look at a dashboard and see a collection of panels. A few charts, some graphs, maybe a live table or a map. Two dimensions. Something you look at.</p><p>But that is not how I see it.</p><p>When I am deep inside a network, watching ONT logs, SS7 call traces, DSL syncs, optical levels, and customer endpoints all move together, it stops feeling like a dashboard. It feels like a <strong>rotatable cube</strong>. A living model of everything happening in that system, across space, across time, across cause and effect.</p><p>Each data point is not just a number. It is an event, a relationship, a moment. It has neighbors, context, and gravity. And when you can pivot through those relationships quickly enough, the entire thing becomes spatial. You are no longer scrolling through metrics. You are navigating an environment.</p><p>Click a link, filter a subset, merge a field, aggregate a pattern. Each one is another rotation of that cube. You are not drilling down. You are moving through dimensions.</p><p>I build dashboards that move like that. They are not about making things pretty. They are about moving through information as naturally as you would move through a room. They are instruments of function, motion, and truth.</p><h4 id="the-fourth-dimension">The Fourth Dimension</h4><p>Dimension one is the static metric, the literal number.<br>Dimension two is the relationship between those metrics, the visual plane where comparisons live.<br>Dimension three is time, the motion between states.<br>Dimension four is correlation, the invisible architecture connecting everything.</p><p>Once you start working in that fourth dimension, old dashboards start to look primitive. A five-minute poll is not visibility. It is a shadow of what already happened. Real awareness happens when you can see cause and effect unfolding as it occurs.</p><p>That is the shift. From static monitoring to living systems.</p><h4 id="do-we-really-stop-at-four">Do We Really Stop at Four?</h4><p>When I say four dimensions, I am simplifying. In truth, it does not stop there. The deeper you get into real data, the more dimensions begin to emerge.</p><p>Every metric has dependencies, patterns, behavioral fingerprints, and human context. If you start counting the ways those interact, you are no longer in four dimensions. You are in something closer to <strong>multi-dimensional cognition</strong>, where each new connection spawns another axis of understanding.</p><p>A network, when visualized fully, is not a cube at all. It is a cloud of overlapping realities. Physical signal paths, logical routes, service policies, customer behaviors, historical anomalies, predictive probabilities. Each layer exists simultaneously. The human brain collapses it into something we can visualize, but the data itself does not live in two or three or four dimensions. It lives in something larger than we can picture, and we navigate it instinctively when the tools stop slowing us down.</p><p>That is what I am really building when I say a dashboard. It is not an interface. It is an extension of perception. A way for the human mind to move through more dimensions of reality than the senses allow.</p><h4 id="rethinking-data">Rethinking Data</h4><p>We are entering a time where data will no longer sit still. It will move, interact, and respond. The question is not how we will visualize it, but how we will think within it.</p><p>If your tools let you manipulate thousands of data points instantly, if you can pivot between context and correlation without losing your sense of place, you are not just analyzing. You are <em>experiencing</em>. You are interacting with a living model of your own environment.</p><p>That is not analytics. That is dimensional intelligence.</p><p>When I rotate that cube, I can watch a packet&#x2019;s entire story unfold. From ONT to PON, from softswitch to trunk, through a route, into a call trace, all connected, all alive. It is not reporting. It is cognition.</p><h4 id="the-road-ahead">The Road Ahead</h4><p>At some point, every serious operator, engineer, and analyst will have to leave the comfort of the 2D dashboard. The networks are too complex, the data too fast, and the decisions too important.</p><p>We do not need more charts. We need systems that think spatially. Tools that allow a human to experience data in motion.</p><p>Four dimensions are only the start. Once the interface becomes as fast as thought, the data stops being a product and starts being a landscape.</p><p>The fourth dimension is not science fiction. It is what happens when you stop looking at your data and start <em>living inside it</em>.<br><br><em>--Always Thinking</em><br><strong>-Bryan</strong></p>]]></content:encoded></item><item><title><![CDATA[Why Your Adtran TA Won’t Route * Codes to DNIS (And How to Fix It)]]></title><description><![CDATA[<p><strong>Intro:</strong><br>Ever tried to make a * code like *98 route through DNIS on an Adtran TA and hit a brick wall? I did&#x2014;and after scouring the internet for an answer, I came up empty. So I tore it apart myself, and here&#x2019;s the straight truth.</p><p><strong>The</strong></p>]]></description><link>https://baremetalbridge.com/why-your-adtran-ta-wont-route-codes-and-how-to-fix-it/</link><guid isPermaLink="false">68c15069d9988c0338615a17</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Wed, 10 Sep 2025 10:27:13 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/09/AdtranDNISSPre.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2025/09/AdtranDNISSPre.png" alt="Why Your Adtran TA Won&#x2019;t Route * Codes to DNIS (And How to Fix It)"><p><strong>Intro:</strong><br>Ever tried to make a * code like *98 route through DNIS on an Adtran TA and hit a brick wall? I did&#x2014;and after scouring the internet for an answer, I came up empty. So I tore it apart myself, and here&#x2019;s the straight truth.</p><p><strong>The Problem:</strong></p><ul><li>Subscriber dials *98 expecting voicemail.</li><li>DNIS entry exists, but the call dies.</li><li>Nothing in the docs screams why.</li></ul><p><strong>The Reason:</strong></p><ul><li>Adtran treats * codes as feature access codes, not digits to feed into DNIS.</li><li>With <em>Spre Map Local</em>, the box eats the *98 before DNIS ever sees it.</li><li>That&#x2019;s why your DNIS entries look fine but never trigger.</li></ul><p><strong>The Fix:</strong></p><ul><li>Flip <em>Spre Map</em> from <strong>Local</strong> to <strong>Network</strong>.</li><li>Create a DNIS entry translating *98 &#x2192; full 10-digit voicemail number.</li><li>Now *98 passes through, DNIS rewrites it, and the call completes.</li></ul><p><strong>The Caveat:</strong><br>When you move <em>Spre Map</em> to <strong>Network</strong>, the Adtran&#x2019;s built-in star code map stops working. That means internal features tied to those codes will no longer function. If you rely on the TA&#x2019;s native *xx features, you need to replicate or reassign them before making the switch. Otherwise, you&#x2019;ll fix one problem and create another.</p><p><strong>Takeaway:</strong><br>Star codes will never work with DNIS when <em>Spre Map</em> is set to Local. If you want *98 (or any other *xx code) to hit DNIS, you <em>must</em> set Spre Map to Network. Simple once you know it&#x2014;but nobody spells it out.</p>]]></content:encoded></item><item><title><![CDATA[Noise, Memory, and the Language of Networks]]></title><description><![CDATA[<p>On LinkedIn my posts may be long, but I try to keep them within the groove of technical and professional. Here, my mind is a little more free &#x2014; well, maybe a lot more free.</p><p>Take BroadSoft logs for example. They&#x2019;re like a Java error dump that got</p>]]></description><link>https://baremetalbridge.com/cliffs-chaos-and-the-stories-data-tells/</link><guid isPermaLink="false">68aba0aed9988c0338615a06</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Sun, 24 Aug 2025 23:35:24 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/08/ChatGPT-Image-Aug-24--2025--07_34_21-PM.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2025/08/ChatGPT-Image-Aug-24--2025--07_34_21-PM.png" alt="Noise, Memory, and the Language of Networks"><p>On LinkedIn my posts may be long, but I try to keep them within the groove of technical and professional. Here, my mind is a little more free &#x2014; well, maybe a lot more free.</p><p>Take BroadSoft logs for example. They&#x2019;re like a Java error dump that got drunk and fell off a cliff. Multiline chaos, overlapping, nested in different streams, but each one still begins with a line you can anchor to. If you know that, you can split it, parse it, tame it with the least number of grok rules possible. It&#x2019;s messy, but not meaningless. That&#x2019;s the trick. The drunk gibberish, if you stare at it long enough, actually has a rhythm.</p><p>And that&#x2019;s where my head goes every time I&#x2019;m staring at these logs, or tickets, or SNMP traps. What does any of this really mean? Why does it matter? Because data, at its core, is nothing but the fossil record of human intent colliding with systems. A phone call made, a packet dropped, a technician rolling a truck &#x2014; each one leaving a trace, an imprint. By itself, each trace is noise. Together, they form a story.</p><p>CodexMCP was never just software. It was an attempt at translation. To take all those fossils &#x2014; logs, traps, notes, metrics &#x2014; and read them not as disconnected events, but as the mythology of a network. Codex was, is, and might always be a language exercise. Not in the sense of English versus German, but in the sense of decoding the grammar of reality itself: what happened, why, and how the system experienced it.</p><p>Most people see data as numbers or lines on a screen. I see it as memory. Collective memory. A network remembers its own life through the messages it emits, just as we remember ours through journals, scars, photographs. A bounced ONT isn&#x2019;t just a device glitching &#x2014; it&#x2019;s a neuron misfiring in the brain of the telco. A series of SIP cancels isn&#x2019;t just call setup noise &#x2014; it&#x2019;s a stutter in the voice of communication itself.</p><p>The absurdity, of course, is that I spend hours and years building pipelines to make this visible, while the world at large shrugs. To most, it&#x2019;s just IT work. To me, it&#x2019;s almost sacred. Because beneath the noise is a chance to glimpse order. A chance to pull back the curtain and say: this is not random. These patterns carry meaning. They are the fingerprints of both failure and resilience.</p><p>Will CodexMCP ever be finished? Probably not. Because it&#x2019;s not really a tool &#x2014; it&#x2019;s a way of thinking. It began in my lab, evolved in my head, and now leaks out through every system I touch. And maybe that&#x2019;s the point. It&#x2019;s not about an end state. It&#x2019;s about the act of seeing, of refusing to let noise remain noise.</p><p>So yes, BroadSoft logs look like a Java dump that fell off a cliff. But maybe cliffs are where language begins. Maybe out of those broken lines, those multiline errors, the real stories emerge &#x2014; the stories that tell us not just what the network is doing, but what we are doing with it, to it, through it. And maybe, just maybe, those stories outlast the network itself.</p><p><em>-Quite a Ride, Try it Sometime</em><br><strong>--Bryan</strong></p>]]></content:encoded></item><item><title><![CDATA[When a Aromatherapy Diffuser Decides To Be The Network]]></title><description><![CDATA[<p>Earlier this week, I was working a support case for a rural fiber customer. They live far out in the country&#x2014;clean spectrum, no neighboring SSIDs, 1G fiber connection running through a Gigaspire router. Normally a stable setup. But suddenly their Wi-Fi fell apart. Devices dropped off. Speeds tanked.</p>]]></description><link>https://baremetalbridge.com/when-a-aromatherapy-diffuser-decides-to-be-the-network/</link><guid isPermaLink="false">6869b9a9d9988c03386159bb</guid><dc:creator><![CDATA[Bryan Vest]]></dc:creator><pubDate>Sat, 05 Jul 2025 23:57:25 GMT</pubDate><media:content url="https://baremetalbridge.com/content/images/2025/07/ChatGPT-Image-Jul-5--2025--07_51_35-PM.png" medium="image"/><content:encoded><![CDATA[<img src="https://baremetalbridge.com/content/images/2025/07/ChatGPT-Image-Jul-5--2025--07_51_35-PM.png" alt="When a Aromatherapy Diffuser Decides To Be The Network"><p>Earlier this week, I was working a support case for a rural fiber customer. They live far out in the country&#x2014;clean spectrum, no neighboring SSIDs, 1G fiber connection running through a Gigaspire router. Normally a stable setup. But suddenly their Wi-Fi fell apart. Devices dropped off. Speeds tanked. Phones and TVs struggled to stay online.</p><p>I pulled up the spectrum analytics and right there&#x2014;loud and clear&#x2014;was a rogue SSID broadcasting as <code>AROMA-013-240709</code>. It was consuming <strong>85% of the 2.4GHz airtime</strong>. Not bandwidth. <strong>Airtime.</strong> That means the medium itself was congested. Devices couldn&#x2019;t talk. Even though the router stayed up and signal levels looked fine, the channel was gridlocked.</p><p>The device responsible had a MAC that fingerprinted to an ESP32 chip. Likely some cheap IoT device. At that point, I didn&#x2019;t know what it was, just that it was hammering the air. I called the customer and explained something on their network was blasting the spectrum. They asked me to disable SSID broadcast and reset the Wi-Fi password.</p><h3 id="the-smoking-gun">The Smoking Gun</h3><p>I told the customer I would figure out what is going on and reach out to them in about an hour. After lunch, I rechecked the spectrum. Airtime usage had fallen back to a normal 22%. The network was calm. That told me everything I needed to know&#x2014;<strong>the problem device hadn&#x2019;t reconnected after the password reset</strong>. It was boxed out.</p><p>I called the customer back. The wife answered. I explained that something on their network had gone haywire and asked if they had an internet-connected aromatherapy diffuser. She said yes, explaining that she could control it from her phone. That was the moment it all clicked.</p><p>This device had lost its connection and decided to flip into pairing mode, broadcasting its own SSID&#x2014;<strong>fully open</strong>, <strong>40MHz wide</strong>, and <strong>right on channel 1</strong>, which is exactly where their Gigaspire router operates by design.</p><h3 id="why-this-is-bad-design">Why This Is Bad Design</h3><ul><li><strong>2.4GHz only has three non-overlapping channels</strong>: 1, 6, and 11</li><li>A 40MHz AP on channel 1 bleeds into channels 2&#x2013;5</li><li>The diffuser was essentially stepping sideways into traffic, blocking 5 of 11 channels</li><li>On a clean spectrum, this obliterates throughput</li></ul><p>And let&#x2019;s be clear: <strong>85% airtime usage is the same as 100% in real terms</strong>. Once you hit that threshold, everything else is queuing up, backing off, retrying. From the end user&#x2019;s view? Nothing works.</p><h3 id="why-24ghz-still-matters">Why 2.4GHz Still Matters</h3><p>Even with 5GHz and 6GHz widely available, <strong>2.4GHz is still critical</strong>:</p><ul><li>It has longer range and better wall penetration</li><li>Many IoT devices only support 2.4GHz</li><li>It&#x2019;s often used for onboarding and failover</li><li>Devices like phones and smart hubs still fall back to it in edge cases</li></ul><p>That means <strong>2.4GHz remains fragile</strong>, and it&#x2019;s <strong>under constant attack from low-cost, poorly-behaved devices</strong> flooding the market.</p><h3 id="the-real-problem">The Real Problem</h3><ul><li>ESP32-based devices are everywhere. They&#x2019;re cheap, programmable, and easy to mass produce</li><li>Vendors prioritize low BOM cost and fast pairing over responsible RF behavior</li><li>Firmware often defaults to open AP mode when a device loses Wi-Fi</li><li>Users have no idea these devices are misbehaving</li></ul><p>This diffuser joined the network, blew through DHCP, failed, and responded by opening its own AP, likely to reach a phone app. But in doing so, it <strong>jammed the entire spectrum</strong>.</p><h3 id="who-supports-this">Who Supports This?</h3><p>Here&#x2019;s the kicker: <strong>we do</strong>. As ISPs, we spend as much time supporting third-party garbage like this as we do maintaining our own infrastructure. It&#x2019;s not our hardware, not our firmware, not our failure&#x2014;but it&#x2019;s still our support queue.</p><p>And who else is going to track down a rogue ESP32 aromatherapy diffuser at 1 a.m. causing spectral collapse? No one. That&#x2019;s not in the user manual. That&#x2019;s not in the Alexa app. That&#x2019;s not what the Best Buy Geek Squad is trained to handle.</p><p>But we are.</p><h3 id="takeaways">Takeaways</h3><ul><li><strong>IoT vendors</strong>: Stop shipping devices that broadcast open APs when they fail</li><li><strong>ISPs</strong>: Start treating spectrum as a shared battlefield, not just a signal graph</li><li><strong>Consumers</strong>: Understand that not all &quot;smart&quot; means smart for your network</li></ul><p>This wasn&#x2019;t an attack. It wasn&#x2019;t malware. It was just bad firmware doing exactly what it was told.</p><p>And it nearly took down a household.</p><p>In a different setting, it could&#x2019;ve taken down dozens.</p><hr><p><strong>The air is the wire now. And we better start defending it like one.</strong></p><p><em>--Be One Step Ahead</em><br><strong>-Bryan</strong></p>]]></content:encoded></item></channel></rss>