<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://the66monkey.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://the66monkey.github.io/" rel="alternate" type="text/html" /><updated>2026-06-07T14:30:35+00:00</updated><id>https://the66monkey.github.io/feed.xml</id><title type="html">Decent Into Debian 🐧</title><subtitle>A wandering story of kernels, cables, distros, and the strange joy of making the universe compile.</subtitle><entry><title type="html">Pop Goes The Os</title><link href="https://the66monkey.github.io/2026/05/27/POP-goes-the-OS.html" rel="alternate" type="text/html" title="Pop Goes The Os" /><published>2026-05-27T00:00:00+00:00</published><updated>2026-05-27T00:00:00+00:00</updated><id>https://the66monkey.github.io/2026/05/27/POP-goes-the-OS</id><content type="html" xml:base="https://the66monkey.github.io/2026/05/27/POP-goes-the-OS.html"><![CDATA[<h1 id="distro-hopping-like-a-wallaby">Distro hopping like a Wallaby</h1>

<p>To quote Kiss “These are my people and this is my crowd”</p>

<p>I genuinely thought Linux Mint would be my final stop. It was close enough to pure Debian that I felt at home, but with enough convenience sprinkled in that day‑to‑day work didn’t feel like a chore. Mint is a great “I need to get things done” distro — functional defaults, predictable behavior, and a desktop that doesn’t fight you.</p>

<p>But if you hang around Linux‑focused Discord servers long enough, something new and shiny will eventually wander across your path. And with juuuust enough daily frustrations — GPU weirdness, Wayland immaturity, a mysterious second‑screen dead zone I could never solve — it was enough for me to reach for the Ventoy USB.</p>

<h1 id="why-pop_os">Why Pop!_OS?</h1>

<p>I’m not one of those people who sampled a million distros before settling into Linux. When I switched to Debian as my daily driver all those years ago, it was a deliberate choice. I wanted to learn “Linux” from scratch: close to the metal, minimal fluff, no hand‑holding. And honestly, I still recommend Debian to anyone who likes IT. If you come from the server or infra world, it’s a great way to slide into user‑facing Linux.</p>

<p>Pop!_OS sits in a strange but appealing niche. It’s Ubuntu‑based, but with a distinct personality. Calling System76 the Apple of the Linux world might be hyperbole, but they’ve definitely tapped into something similar: the idea that defaults, polish, and PRESENTATION matter.</p>

<p>I know some of my more hardcore Linux brethren — the ones who treat a TTY like a lifestyle choice — will insist that anything beyond a blinking cursor is for casuals. But the GUI, the window style, and the ease of setting per‑monitor wallpapers make Pop!_OS feel usable and personal in a way that clicks immediately.</p>

<p>What really surprised me, though, is how coherent it feels. Pop!_OS gives you modern tools without the usual Ubuntu‑adjacent clutter, and the whole environment feels designed as a whole rather than stitched together from whatever components happened to be available. Mint is great, but let’s be honest: Nemo and GNOME Terminal aren’t exactly peak UX, and Cinnamon can sometimes feel like a carefully curated shelf of unrelated parts rather than a single idea.</p>

<p>Pop!_OS, even with Cosmic still evolving, feels intentional — the tiling workflow is smooth, the hardware support is ahead of the curve, and the system has that rare sense of everything pulling in the same direction. And despite the polish, it still feels unmistakably Linux; hand a Windows user Mint and Pop side‑by‑side and they’ll gravitate toward Mint’s familiarity, but anyone who’s lived in this ecosystem will immediately feel at home in Pop!_OS.</p>

<p>Cosmic’s future is still a moving target — maybe it becomes a full fork, maybe it ends up as a drop‑in DE, maybe it grows into something we haven’t seen in the Linux world yet. But even in its current state, it’s shockingly functional for something being built from the ground up. I was close to rolling my own Mint remix just to get the workflow I wanted, and Pop!_OS saved me from going full “compile‑your‑own‑distro” mode. It’s polished without pretending not to be Linux, opinionated without boxing you in, and coherent in a way most distros only gesture at. For now, that’s exactly the level of chaos and control I want.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Distro hopping like a Wallaby]]></summary></entry><entry><title type="html">Conveniance</title><link href="https://the66monkey.github.io/2026/05/24/Conveniance.html" rel="alternate" type="text/html" title="Conveniance" /><published>2026-05-24T00:00:00+00:00</published><updated>2026-05-24T00:00:00+00:00</updated><id>https://the66monkey.github.io/2026/05/24/Conveniance</id><content type="html" xml:base="https://the66monkey.github.io/2026/05/24/Conveniance.html"><![CDATA[<h1 id="moving-from-debian-to-linux-mint">Moving from Debian to Linux Mint</h1>

<p>Switching from Debian to Linux Mint was not a matter of abandoning stability or minimalism. It was a shift in priorities. Debian remains one of the cleanest, most disciplined Linux distributions available, and is for me very much what Linux is “supposed to be”. Its design philosophy is conservative by intent: minimal assumptions, and minimal surprises.</p>

<p>The trade‑off is time. Debian gives you full control, but it also expects you to exercise that control. Debian is a distribution where you can get anything done if you have an hour.</p>

<p>Linux Mint sits at a different point on the spectrum. It is not trying to be a universal base system. It is trying to be a workstation. The defaults are tuned for everyday use, the desktop environment is configured for clarity rather than purity, and many of the small tasks that require manual configuration on Debian are handled automatically. The automation is not perfect, but it removes enough friction that it is as easy as old windows was to get to a working state (and easier than modern Windows i would argue).</p>

<p>That convenience is ultimately why I moved. I still appreciate Debian’s clean design and the way it exposes the underlying system without decoration. But for day‑to‑day work, Mint reduces the number of small interruptions that accumulate over time. External drives mount without argument. Network tools behave as expected. Desktop integration requires less manual wiring.</p>

<p>Debian remains the distribution I trust for long‑term stability and for environments where I want to control every detail. Mint is the distribution I reach for when I want to sit down, open the machine, and start working on something that is not “computer related”, as in not tinkering but writing or something that “just needs to wrok”. The move was not about abandoning one philosophy for another. It was about choosing the environment that introduces fewer obstacles in the course of an ordinary day.</p>

<h1 id="rtfm-n00b">RTFM n00b</h1>

<p>Joining the Linux Mint Discord ended up being part of the transition as well, and it made me think about how different the landscape was when I first moved to Linux. In the mid‑2000s, nothing about the ecosystem was simple. World of Warcraft was still new enough that people were making spending-money by grinding characters for strangers, and the internet felt smaller, stranger, and far less curated. If you wanted to fix something on Linux, you didn’t open a friendly chat server. You went a dozen pages deep into a search engine that still returned static HTML sites, hoping to find an archived forum thread where someone had encountered a vaguely similar problem years earlier. Real‑time help existed, but only in the form of IRC channels you found through rumor, and stepping into one felt like entering a workshop where everyone already knew each other and nobody had time for beginners. You learned by reading, experimenting, and breaking things until you understood them.</p>

<p>Today the barrier to entry is lower and the community is easier to reach, but the baseline level of preparation has dropped with it. What worries me is not the decline of search quality, but the shift in how people interact with information. We are in an in‑between era where LLMs are becoming good enough to replace old search engines, but only if you know how to speak to them. It is the same skill we used to laugh about when someone typed a polite letter into Google asking for a recipe. Search has always been a language, and the language has changed. If you tell an LLM “my hard drive doesn’t work,” it will happily offer to sell you a new one. If you say “I booted a Debian 12 live USB and my old Windows 10 NTFS drive mounts read‑only and won’t let me rename files,” it can actually help. The difference is precision, context, and a functioning nonsense detector — the same instincts you needed when the first reply on a forum was “delete system32.”</p>

<p>I enjoy helping people, and in open source that kind of collaboration is what keeps the ecosystem alive. But the combination of vague questions, weakened research habits, and an overreliance on AI to guess the problem makes me wonder how the next generation of enthusiasts will develop the curiosity and resilience that defined the earlier era of Linux.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Moving from Debian to Linux Mint]]></summary></entry><entry><title type="html">Playing With The Limits</title><link href="https://the66monkey.github.io/2026/03/26/Playing-with-the-limits.html" rel="alternate" type="text/html" title="Playing With The Limits" /><published>2026-03-26T00:00:00+00:00</published><updated>2026-03-26T00:00:00+00:00</updated><id>https://the66monkey.github.io/2026/03/26/Playing-with-the-limits</id><content type="html" xml:base="https://the66monkey.github.io/2026/03/26/Playing-with-the-limits.html"><![CDATA[<h2 id="deepseek-on-battlemage-through-vs-codium">DeepSeek on Battlemage Through VS Codium</h2>

<p>Running DeepSeek locally inside VS Codium made sense for one simple reason: it removes token limits, avoids external dependencies, and paired with a de‑telemetrized editor like Codium, it provides a fully offline coding assistant with none of the usual data collection overhead.</p>

<h2 id="reassigning-gpu-roles-to-fit-a-larger-model">Reassigning GPU Roles to Fit a Larger Model</h2>

<p>Before integrating DeepSeek into VS Codium, the system was running in a different configuration. The Intel Arc B580 originally handled the desktop, while the GTX 970 was reserved for CUDA workloads. This made sense for smaller models and for tools like InvokeAI, which automatically detect and prefer CUDA devices. The Arc stayed free for Vulkan applications and general desktop rendering, and the 970 handled the AI tasks.</p>

<p>That arrangement stopped working once the model size increased. DeepSeek‑Coder‑V2‑Lite requires roughly nine to ten gigabytes of VRAM for full offload, plus additional space for runtime buffers and the KV cache. The Arc B580 is a 12 GB card on paper, but with the desktop running on it, nearly two gigabytes were permanently occupied by the display stack. That left too little headroom for the model to load reliably.</p>

<h2 id="1-reversing-the-gpu-roles">1. Reversing the GPU Roles</h2>

<p>To free the Arc’s VRAM, the display output had to be moved to the GTX 970. Under Xorg this is straightforward: the NVIDIA card becomes the primary display device, and the Arc is left completely idle until a Vulkan workload is launched. Once the desktop was running on the 970, the Arc reported roughly 10.5 GB of free VRAM, which is just enough for DeepSeek‑Coder‑V2‑Lite in Q4_K_M format.</p>

<p>This change was the turning point. With the display stack off the Arc, the model could finally load without falling back to CPU or failing during initialization.</p>

<h2 id="2-forcing-vulkan-to-target-the-arc">2. Forcing Vulkan to Target the Arc</h2>

<p>With two GPUs present, Vulkan does not always select the correct device automatically. KoboldCpp in particular tends to prefer CUDA if it detects an NVIDIA card, even if Vulkan is requested. To avoid this, the Intel ICD file was explicitly exported:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.json
</code></pre></div></div>

<p>This ensures that Vulkan compute work is routed to the Arc B580 rather than the GTX 970.</p>

<h2 id="3-launching-deepseek-with-the-required-flags">3. Launching DeepSeek with the Required Flags</h2>

<p>Once the ICD was set, the model could be launched through KoboldCpp:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>koboldcpp-linux-x64 \
  --model /path/to/DeepSeek-Coder-V2-Lite-Instruct-Q4_K_M.gguf \
  --usevulkan \
  --gpulayers 999 \
  --contextsize 4096
</code></pre></div></div>

<p>Each flag serves a specific purpose.</p>

<p>usevulkan<br />
Forces the Vulkan backend and prevents accidental fallback to CUDA or CPU.</p>

<p>gpulayers 999<br />
Requests full layer offload. On the Arc B580, this results in complete GPU execution.</p>

<p>contextsize 4096<br />
Keeps the KV cache within the available VRAM budget. Larger values risk exhausting memory during longer completions.</p>

<p>With these flags, the model loads entirely on the Arc and remains stable during extended coding sessions.</p>

<h2 id="4-integrating-continue-in-vs-codium">4. Integrating Continue in VS Codium</h2>

<p>KoboldCpp exposes an OpenAI‑compatible API on port 5001. Continue can use this directly without modification.</p>

<p>In Continue’s settings:</p>

<p>Provider: OpenAI Compatible<br />
Endpoint:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>http://localhost:5001/v1
</code></pre></div></div>
<p>Model name: deepseek<br />
API key: (empty)</p>

<p>Once configured, Continue sends all requests to the local DeepSeek instance. Code explanations, refactoring, and inline completions all run through the Arc GPU without involving cloud services.</p>

<h2 id="5-why-the-reconfiguration-was-necessary">5. Why the Reconfiguration Was Necessary</h2>

<p>The initial layout worked for smaller models, but DeepSeek‑Coder‑V2‑Lite needed nearly the entire VRAM budget of the Arc. The display stack alone consumed close to two gigabytes, leaving too little room for the model and its runtime buffers. Moving the desktop to the GTX 970 freed the Arc completely, allowing the model to load and run as intended.</p>

<p>The end result is a mixed‑GPU system where each card has a clear role: the GTX 970 drives the desktop, and the Arc B580 handles all Vulkan‑based LLM workloads. This configuration allows a 2016 platform to run a modern coding model inside VS Codium with no external dependencies.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[DeepSeek on Battlemage Through VS Codium]]></summary></entry><entry><title type="html">Old Hardware New Workloads</title><link href="https://the66monkey.github.io/2026/03/22/Old-Hardware-New-Workloads.html" rel="alternate" type="text/html" title="Old Hardware New Workloads" /><published>2026-03-22T00:00:00+00:00</published><updated>2026-03-22T00:00:00+00:00</updated><id>https://the66monkey.github.io/2026/03/22/Old-Hardware-New-Workloads</id><content type="html" xml:base="https://the66monkey.github.io/2026/03/22/Old-Hardware-New-Workloads.html"><![CDATA[<h2 id="dual-gpus-on-a-2016-z270-board-old-hardware-new-workloads"><strong>Dual GPUs on a 2016 Z270 Board: Old Hardware, New Workloads</strong></h2>

<p>When I built this system in 2016, NVIDIA was still pushing SLI as the next big thing. I even considered buying a second GTX 970, but the scaling numbers were already questionable and support was fading. So I stuck with one card and moved on.</p>

<p>Ironically, almost a decade later, the machine <em>does</em> run two GPUs — just not in any way NVIDIA intended. No SLI bridges, no linked rendering, just two independent cards doing completely different jobs.</p>

<hr />

<h2 id="1-hardware-layout-three-pcie-slots-used-properly-for-once"><strong>1. Hardware Layout: Three PCIe Slots Used Properly for Once</strong></h2>

<p>The Gigabyte Z270X‑Gaming 5 has three full‑length PCIe slots, which makes this setup straightforward:</p>

<ul>
  <li><strong>Top x16:</strong> Intel Arc B580 (Battlemage)</li>
  <li><strong>Middle x8:</strong> ASUS GTX 970</li>
  <li><strong>Bottom x4:</strong> ASUS PCE‑AX3000 Wi‑Fi card</li>
</ul>

<p>The Wi‑Fi card sits in the bottom slot because putting it in the middle slot blocks the Arc’s fan. The Arc gets the top slot for airflow and bandwidth, the 970 sits in the middle without complaint, and everything runs at PCIe Gen3 — which is fine for this workload.</p>

<hr />

<h2 id="2-desktop-stack-cinnamon-xorg-still-makes-the-most-sense"><strong>2. Desktop Stack: Cinnamon Xorg Still Makes the Most Sense</strong></h2>

<p>Linux Mint 22.3 ships with an experimental Cinnamon Wayland session, so I tested it. With mixed GPUs (Intel + NVIDIA), it wasn’t usable:</p>

<ul>
  <li>Arc acceleration was unreliable</li>
  <li>Multi‑GPU handling was inconsistent</li>
  <li>Steam and some GTK apps refused to start</li>
</ul>

<p>Switching back to the standard Cinnamon Xorg session fixed everything immediately. Arc handles the desktop and games, the 970 stays available in the background, and the system behaves predictably.</p>

<hr />

<h2 id="3-using-the-gtx-970-for-local-ai-invokeai"><strong>3. Using the GTX 970 for Local AI (InvokeAI)</strong></h2>

<p>The main reason for keeping the 970 installed is simple: CUDA.</p>

<p>InvokeAI detects the NVIDIA card and uses it for model inference:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[InvokeAI]::INFO --&gt; Using torch device: NVIDIA GeForce GTX 970
...
VRAM in use: ~3.0G
</code></pre></div></div>

<p>The Arc stays free for desktop rendering and Vulkan workloads, while the 970 becomes a dedicated AI accelerator. With only 4 GB VRAM it’s not fast — roughly 10 minutes for a 30‑step SDXL run — but it works reliably and keeps the system responsive.</p>

<p>This is a better use of an old GPU than letting it sit in a drawer.</p>

<hr />

<h2 id="4-lm-studio-not-there-yet-on-this-setup"><strong>4. LM Studio: Not There Yet on This Setup</strong></h2>

<p>I also tried running LM Studio, but it wasn’t stable on this configuration. Even under Xorg, it consistently crashed during startup or model load. We tested different backends, toggled GPU settings, and tried both GPUs, but nothing made it usable.</p>

<p>Right now LM Studio simply doesn’t behave well on this mixed‑GPU, older‑platform setup. It might improve with future updates, but at the moment it’s not an option here.</p>

<hr />

<h2 id="5-why-this-setup-still-makes-sense"><strong>5. Why This Setup Still Makes Sense</strong></h2>

<ul>
  <li>A 2016 motherboard can still run a modern Intel GPU and a legacy NVIDIA card at the same time</li>
  <li>Cinnamon Xorg remains the stable option for mixed‑vendor, dual‑GPU setups</li>
  <li>The GTX 970 is still useful as a CUDA device for local AI workloads</li>
  <li>LM Studio isn’t stable yet, but InvokeAI works reliably</li>
  <li>Reusing old hardware for specific tasks is more satisfying than replacing everything</li>
</ul>

<p>It’s not a modern build, but it does exactly what I need: Arc for the desktop, 970 for AI, and a Z270 board quietly holding the whole thing together.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Dual GPUs on a 2016 Z270 Board: Old Hardware, New Workloads]]></summary></entry><entry><title type="html">Z270x Battelmage</title><link href="https://the66monkey.github.io/2026/03/21/Z270X-Battelmage.html" rel="alternate" type="text/html" title="Z270x Battelmage" /><published>2026-03-21T00:00:00+00:00</published><updated>2026-03-21T00:00:00+00:00</updated><id>https://the66monkey.github.io/2026/03/21/Z270X-Battelmage</id><content type="html" xml:base="https://the66monkey.github.io/2026/03/21/Z270X-Battelmage.html"><![CDATA[<h2 id="the-trials-and-tribulations-of-upgrading-an-old-computer-with-battlemage"><strong>The trials and tribulations of upgrading an old computer with Battlemage</strong></h2>

<p>Getting Intel’s new Battlemage GPU running smoothly on Linux turned out to be a mix of firmware archaeology, and a few strange quirks.</p>

<hr />

<h2 id="1-motherboard-configuration-making-an-older-platform-accept-a-new-gpu"><strong>1. Motherboard Configuration: Making an Older Platform Accept a New GPU</strong></h2>

<p>This machine started life as a 2016 self built gaming build, and like many aging PCs, it’s been through a long series of upgrades, sidegrades, and questionable decisions.
The original build specs were these:</p>

<ul>
  <li>Gigabyte Z270X‑Gaming 5 (LGA1151 / Z270 / GA‑Z270X‑G5)</li>
  <li>Kingston HyperX Fury 120GB SSD (SHFS37A/120G)</li>
  <li>Seagate Barracuda 3TB (64MB / 7200RPM) (ST3000DM001)</li>
  <li>Corsair Obsidian 750D Tower</li>
  <li>Corsair CX 750M / 750W / 80+ Bronze</li>
  <li>Corsair Vengeance LPX Red 16GB (2x8GB) / 3200MHz / DDR4 / CL16 / CMK16GX4M2B3200C16R</li>
  <li>ASUS GeForce GTX 970 4GB TURBO OC (TURBO-GTX970-OC-4GD5)</li>
  <li>Intel Core i7-6700K - 8 thread / 4,0GHz (4,2 Ghz Turbo) / 8MB / Socket 1151 (with a old noctua cooler, from 2012 or so)</li>
</ul>

<p>During it’s life it has hosted a number of different HDD’s, a sidegrade to a 1060 gtx 3gb GPU, and a Kingston NV2 M.2 1TB ssd.
I also upgraded it with a ASUS PCE-AX3000 wifi card, getting that fucker to work is listed in another post.</p>

<h3 id="bios-and-mb"><strong>BIOS and MB</strong></h3>

<p>The latest BIOS realeased for the system Mar 9, 2018, version F10b and I had updated to that by the end of 2018. But i haven’t messed with it much when it comes to settings since then</p>
<ul>
  <li><strong>Set PCIe slot to Gen3 manually</strong><br />
The board can’t negotiate Gen4/Gen5 properly with Battlemage, so forcing Gen3 avoids link‑training failures.
The setting was under M.I.S.C or something like that because i think this was an update pushed in one of the later bios versions and not originally there.</li>
  <li><strong>Disable CSM (Compatibility Support Module)</strong><br />
Ensures the GPU boots in pure UEFI mode, which Battlemage expects.
This bastard fucked me up because I had installed my old Debian OS in legacy and because of this i had to reinstall the OS.
Luckily with Ventoy and a glut of choices i decided to go with Linux Mint now, so far so good.</li>
</ul>

<hr />

<h2 id="2-linux-setup-drivers-mesa-and-the-unexpected-vaapi-crash"><strong>2. Linux Setup: Drivers, Mesa, and the Unexpected VAAPI Crash</strong></h2>

<p>On Linux Mint (Ubuntu 24.04 base), the Mesa stack already supports Battlemage well. 3D acceleration, Vulkan, desktop compositing — all of that worked immediately.</p>

<h3 id="what-worked-out-of-the-box"><strong>What worked out of the box</strong></h3>
<ul>
  <li>Mesa recognized the GPU</li>
  <li>Vulkan worked</li>
  <li>Desktop animations were smooth</li>
  <li>Games launched normally (Running Heroic Game Launcher)</li>
  <li>Browsers behaved fine</li>
</ul>

<h3 id="what-didnt-work"><strong>What <em>didn’t</em> work</strong></h3>
<p>VLC and Celluloid (mpv) <strong>crashed instantly</strong> on video playback.</p>

<p>Terminal output showed:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>libva info: Trying to open ... iHD_drv_video.so
Bus error (core dumped)
</code></pre></div></div>

<p>This revealed the real culprit:</p>

<h3 id="battlemages-vaapi-driver-ihd-is-unstable-on-ubuntumint-right-now"><strong>Battlemage’s VAAPI driver (iHD) is unstable on Ubuntu/Mint right now.</strong></h3>

<p>VLC loads VAAPI <strong>before</strong> it reads user preferences, so even disabling hardware decoding didn’t help. The crash happened too early in the startup sequence.</p>

<hr />

<h2 id="3-the-fix-block-vaapi-only-for-vlc"><strong>3. The Fix: Block VAAPI Only for VLC</strong></h2>

<p>Instead of ripping out drivers or modifying the system, the cleanest solution was to block VAAPI <strong>only for VLC</strong>, using an environment variable.</p>

<h3 id="the-wrapper-script"><strong>The wrapper script</strong></h3>
<p>I created:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>~/bin/vlc-no-vaapi
</code></pre></div></div>

<p>with:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#!/bin/bash
LIBVA_DRIVER_NAME=none exec /usr/bin/vlc "$@"
</code></pre></div></div>

<p>This prevents VLC from loading the unstable VAAPI driver, while leaving the rest of the system untouched.</p>

<h3 id="desktop-shortcut"><strong>Desktop shortcut</strong></h3>
<p>To make it convenient, I added a <code class="language-plaintext highlighter-rouge">.desktop</code> launcher pointing to the script:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[Desktop Entry]
Type=Application
Name=VLC (No VAAPI)
Exec=/home/the66monkey/bin/vlc-no-vaapi
Icon=vlc
Terminal=false
Categories=AudioVideo;Player;Video;
</code></pre></div></div>

<p>Now VLC launches normally from the desktop, without crashes.</p>

<h3 id="result"><strong>Result</strong></h3>
<ul>
  <li>VLC works perfectly</li>
  <li>The rest of the GPU stack remains fully accelerated</li>
</ul>

<hr />

<h2 id="4-gravitymark-1440p-results-linux-vulkan"><strong>4. GravityMark 1440p Results (Linux Vulkan):</strong></h2>

<p>GravityMark 1440p Results (Linux Vulkan):</p>

<p>Vulkan: 122.5 FPS</p>
<ul>
  <li>Shows the Xe2 Vulkan driver is mature and fast on Linux.</li>
  <li>No PCIe bottleneck, no thermal throttling, GPU fully utilized.</li>
</ul>

<p>Vulkan Ray Tracing: 38.2 FPS</p>
<ul>
  <li>This is limited mostly by the i7‑6700K + Z270 platform, not the GPU.</li>
  <li>RT workloads depend heavily on modern CPU IPC, memory bandwidth, and BVH traversal performance.</li>
  <li>Battlemage’s RT path is still early in Mesa, so some overhead is expected.</li>
</ul>

<p>Summary:<br />
Battlemage delivers excellent Vulkan performance on Linux Mint.
Ray tracing works, but on a 2015 CPU + Z270 board, the GPU can’t stretch its legs fully. On a modern platform, the RT score would climb significantly.</p>

<hr />

<h2 id="5-lessons-learned"><strong>5. Lessons Learned</strong></h2>

<ul>
  <li>ca 2017 seems to be the oldest components you can reliably update to a mid range PC these days, and even so the MB does not support some features one might want to utilize.</li>
  <li>There are still the normal Linux tinkering needed, however compared to the work needed to get Nvidia cards to work I still feel good about the move to Intel GPU. Intel’s open driver stack is still the least painful option on Linux, especially compared to NVIDIA’s DKMS roulette.</li>
  <li>The VAAPI crash issue might disappear once Intel stabilizes the media stack for Xe2, but we never know how commited they are to supporting the card, especially for the Linux community. And fixing it on a fundamental level is beoynd me…. for now!</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[The trials and tribulations of upgrading an old computer with Battlemage]]></summary></entry><entry><title type="html">ZTE_Scout: Field Recon from a Locked Core</title><link href="https://the66monkey.github.io/projects/tools/hardware/termux/security/2025/07/03/making-zte-scout.html" rel="alternate" type="text/html" title="ZTE_Scout: Field Recon from a Locked Core" /><published>2025-07-03T00:00:00+00:00</published><updated>2025-07-03T00:00:00+00:00</updated><id>https://the66monkey.github.io/projects/tools/hardware/termux/security/2025/07/03/making-zte-scout</id><content type="html" xml:base="https://the66monkey.github.io/projects/tools/hardware/termux/security/2025/07/03/making-zte-scout.html"><![CDATA[<p>Introdusing the <strong>ZTE_Scout</strong>, a low-profile recon asset built on a locked-down ZTE Axon 7.</p>

<h2 id="introduction">Introduction</h2>

<p>Mapping Wi-Fi networks on a non-rooted Android device can feel like a dead end—until you discover Termux.
In this post we’ll unpack two companion scripts, <strong>wifi-map.sh</strong> and <strong>wifi-scout.sh</strong>, that turn a ZTE Axon 7 into a portable scout device and Wi-Fi reconnaissance toolkit. You’ll learn how each script works, how they collect GPS‐tagged scans and network data, and how to deploy them over ADB on a stock (but debloated) device.</p>

<hr />

<h2 id="-base-platform">🧰 Base Platform</h2>

<ul>
  <li><strong>Device</strong>: ZTE Axon 7</li>
  <li><strong>Bootloader</strong>: Locked, no root or custom recovery (fuck you very much ZTE!)</li>
  <li><strong>OS</strong>: Stock Android 8.0</li>
  <li><strong>Access</strong>: ADB over USB</li>
</ul>

<hr />
<h2 id="prerequisites">Prerequisites</h2>

<p>Before you begin, ensure the following are in place:</p>

<ul>
  <li>A ZTE Axon 7 running Android with Termux, Termux:API and Termux:Widget installed</li>
  <li>USB debugging enabled and ADB accessible on your Debian host</li>
  <li>Termux packages:
    <ul>
      <li><code class="language-plaintext highlighter-rouge">termux-wifi-scaninfo</code> / <code class="language-plaintext highlighter-rouge">termux-wifi-connectioninfo</code></li>
      <li><code class="language-plaintext highlighter-rouge">termux-location</code></li>
      <li><code class="language-plaintext highlighter-rouge">jq</code>, <code class="language-plaintext highlighter-rouge">timeout</code>, <code class="language-plaintext highlighter-rouge">ip</code>, <code class="language-plaintext highlighter-rouge">arp</code>, <code class="language-plaintext highlighter-rouge">awk</code>, <code class="language-plaintext highlighter-rouge">grep</code>, <code class="language-plaintext highlighter-rouge">cut</code></li>
    </ul>
  </li>
  <li>(Optional) <code class="language-plaintext highlighter-rouge">nmap</code> installed in Termux for subnet ARP scanning</li>
  <li>A writable directory on shared storage (e.g. <code class="language-plaintext highlighter-rouge">/sdcard/logs</code>)</li>
</ul>

<hr />

<h2 id="script-1-wifi-mapsh">Script 1: wifi-map.sh</h2>

<h3 id="purpose">Purpose</h3>
<p>Passive “warwalking” scan: tag every beacon frame with GPS coordinates and log SSID, BSSID, channel and encryption.</p>

<h3 id="key-sections">Key Sections</h3>

<ol>
  <li><strong>Dependency Check</strong>
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for </span>cmd <span class="k">in </span>termux-wifi-scaninfo jq <span class="nb">timeout </span>termux-location<span class="p">;</span> <span class="k">do
  </span><span class="nb">command</span> <span class="nt">-v</span> <span class="s2">"</span><span class="nv">$cmd</span><span class="s2">"</span> <span class="o">&gt;</span>/dev/null <span class="o">||</span> <span class="o">{</span> <span class="nb">echo</span> <span class="s2">"Missing: </span><span class="nv">$cmd</span><span class="s2">"</span><span class="p">;</span> <span class="nb">exit </span>1<span class="p">;</span> <span class="o">}</span>
<span class="k">done</span>
</code></pre></div>    </div>
  </li>
  <li><strong>Log Initialization</strong>
    <ul>
      <li>Creates <code class="language-plaintext highlighter-rouge">/sdcard/logs</code></li>
      <li>Filename includes timestamp: <code class="language-plaintext highlighter-rouge">wifi-map-YYYYMMDD_HHMMSS.log</code></li>
    </ul>
  </li>
  <li><strong>Frequency→Channel Helper</strong><br />
Converts 2.4 GHz &amp; 5 GHz frequencies into channel numbers.</li>
  <li><strong>GPS Snapshot</strong><br />
Requests one‐off GPS fix (5 s timeout). If available, extracts latitude, longitude and accuracy via <code class="language-plaintext highlighter-rouge">jq</code>.</li>
  <li><strong>Passive Scan</strong>
    <ul>
      <li>Runs <code class="language-plaintext highlighter-rouge">termux-wifi-scaninfo</code> (10 s timeout)</li>
      <li>Parses JSON with <code class="language-plaintext highlighter-rouge">jq</code> into TSV lines</li>
      <li>For each network:
        <ul>
          <li>Derives channel</li>
          <li>Extracts encryption (WPA3/WPA2/WPA/WEP) or marks as OPEN</li>
          <li>Formats output into a nicely aligned string</li>
        </ul>
      </li>
    </ul>
  </li>
</ol>

<h3 id="sample-output-line">Sample Output Line</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>MyNetworkSSID               12:34:56:78:9A:BC CH:11 RSSI:-67  WPA2/WPA3
</code></pre></div></div>

<hr />

<h2 id="script-2-wifi-scoutsh">Script 2: wifi-scout.sh</h2>

<h3 id="purpose-1">Purpose</h3>
<p>Active reconnaissance on the currently connected AP: GPS tag + connection details + local host and subnet discovery.</p>

<h3 id="key-sections-1">Key Sections</h3>

<ol>
  <li><strong>Dependency Check</strong><br />
Includes <code class="language-plaintext highlighter-rouge">termux-wifi-connectioninfo</code>, <code class="language-plaintext highlighter-rouge">ip</code>, <code class="language-plaintext highlighter-rouge">arp</code>, <code class="language-plaintext highlighter-rouge">nmap</code> (optional), etc.</li>
  <li><strong>Report Header &amp; GPS</strong><br />
Similar 10 s GPS snapshot block as in wifi-map.sh.</li>
  <li><strong>Connection Info</strong><br />
Uses <code class="language-plaintext highlighter-rouge">termux-wifi-connectioninfo</code> to capture SSID, BSSID, IP, link speed, frequency and RSSI.</li>
  <li><strong>DNS Servers</strong><br />
Extracts DNS entries via <code class="language-plaintext highlighter-rouge">getprop | grep dns</code>.</li>
  <li><strong>ARP Cache</strong><br />
Dumps <code class="language-plaintext highlighter-rouge">ip neigh show</code> to list local neighbors.</li>
  <li><strong>Subnet Sweep—Ping Scan</strong>
    <ul>
      <li>Derives subnet from IP’s first three octets</li>
      <li>Fires simultaneous 1 s pings to <code class="language-plaintext highlighter-rouge">.1–.254</code> and logs “X.X.X.Y is up”</li>
    </ul>
  </li>
  <li><strong>Subnet Sweep—Nmap</strong><br />
If <code class="language-plaintext highlighter-rouge">nmap</code> is present, runs an ARP‐ping scan on <code class="language-plaintext highlighter-rouge">X.X.X.0/24</code> with a 45 s timeout.</li>
  <li><strong>MAC Vendor Lookup</strong><br />
Reads <code class="language-plaintext highlighter-rouge">/proc/net/arp</code>, extracts each MAC, finds OUI vendor in <code class="language-plaintext highlighter-rouge">~/storage/shared/oui.txt</code>.</li>
</ol>

<hr />

<h2 id="deploying">Deploying</h2>

<p>Just push the files to the device with something like</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>adb push wifi-map.sh /storage/scripts/wifi-map.sh

<span class="k">then </span>copy from the scripts folder on the device with Termux to the Termux-Widget folder.
<span class="nb">cp</span> <span class="nt">-f</span> ./<span class="k">*</span> ~/.shortcuts/

you might also have to make it executable
<span class="nb">chmod</span> +x <span class="o">(</span>filename<span class="o">)</span>
<span class="nt">---</span>

<span class="c">## Viewing Your Logs</span>

All logs land <span class="k">in</span> <span class="sb">`</span>/sdcard/logs<span class="sb">`</span><span class="nb">.</span> You can pull them down <span class="k">for </span>analysis:

<span class="sb">```</span>bash
adb pull /sdcard/logs ~/axonscout-logs
</code></pre></div></div>

<p>Open the <code class="language-plaintext highlighter-rouge">.log</code> files in your favorite editor or import into mapping software.</p>

<hr />

<h2 id="conclusion">Conclusion</h2>

<p>With these scripts, your unrooted ZTE Axon 7 becomes a complete scouting and network-recon platform. You get:</p>

<ul>
  <li>GPS-anchored passive scans</li>
  <li>Live‐connection details and subnet exploration</li>
  <li>Offline MAC vendor lookups</li>
</ul>

<p>Take this further by:</p>

<ul>
  <li>Integrating log files into web maps (Leaflet, QGIS)</li>
  <li>Automatically triggering scans on motion detection</li>
  <li>Adding real‐time dashboard with Termux:API and a lightweight web server</li>
</ul>

<p>Every step is in Bash, so customize as you see fit. Happy scouting!</p>

<h3 id="wifi-mapsh">wifi-map.sh</h3>
<pre><code>
#!/data/data/com.termux/files/usr/bin/bash

# wifi-map.sh — Passive scan with GPS tagging (for warwalking use)

# Dependencies check
for cmd in termux-wifi-scaninfo jq timeout termux-location; do
  command -v "$cmd" &gt;/dev/null || {
    echo "Missing: $cmd" &gt;&amp;2
    exit 1
  }
done

# Log directory
LOG_DIR="/sdcard/logs"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/wifi-map-$(date +%Y%m%d_%H%M%S).log"

# Channel helper
freq_to_channel() {
  local f=$1
  if [ "$f" -ge 2412 ] &amp;&amp; [ "$f" -le 2484 ]; then echo $(( (f - 2407) / 5 ))
  elif [ "$f" -ge 5170 ] &amp;&amp; [ "$f" -le 5825 ]; then echo $(( (f - 5000) / 5 ))
  else echo "?"; fi
}

# Get GPS snapshot
GPS=$(timeout 10 termux-location --provider gps --request once 2&gt;/dev/null)
if [ -n "$GPS" ]; then
  LAT=$(echo "$GPS" | jq -r '.latitude')
  LON=$(echo "$GPS" | jq -r '.longitude')
  ACC=$(echo "$GPS" | jq -r '.accuracy')
  echo "GPS: lat=$LAT lon=$LON acc=${ACC}m" &gt; "$LOG_FILE"
else
  echo "GPS: unavailable or timed out" &gt; "$LOG_FILE"
fi

# Run scan with timeout
SCAN_JSON=$(timeout 10 termux-wifi-scaninfo 2&gt;/dev/null)

# Handle timeout or empty result
if [ -z "$SCAN_JSON" ] || [ "$SCAN_JSON" = "[]" ]; then
  echo "Scan failed or returned no data. Check permissions or location services." &gt;&gt; "$LOG_FILE"
  exit 1
fi

# Parse and log results
echo "$SCAN_JSON" | jq -r '.[] | 
  {
    ssid: .SSID,
    bssid: .BSSID,
    freq: .frequency,
    level: .level,
    caps: .capabilities
  } | 
  [.ssid, .bssid, (.freq|tostring), (.level|tostring), .caps] | 
  @tsv' | while IFS=$'\t' read -r SSID BSSID FREQ RSSI CAPS; do
  CHAN=$(freq_to_channel "$FREQ")
  ENC=$(echo "$CAPS" | grep -Eo "WPA3|WPA2|WPA|WEP" | tr '\n' '/' | sed 's|/$||')
  [ -z "$ENC" ] &amp;&amp; ENC="OPEN"
  printf "%-30s %-18s CH:%-2s RSSI:%-4s %s\n" "$SSID" "$BSSID" "$CHAN" "$RSSI" "$ENC"
done &gt;&gt; "$LOG_FILE"
</code></pre>

<h2 id="wifi-scoutsh">wifi-scout.sh</h2>
<pre><code>
#!/data/data/com.termux/files/usr/bin/bash

# wifi-map.sh — Passive scan with GPS tagging (for warwalking use)

# Dependencies check
for cmd in termux-wifi-scaninfo jq timeout termux-location; do
  command -v "$cmd" &gt;/dev/null || {
    echo "Missing: $cmd" &gt;&amp;2
    exit 1
  }
done

# Log directory
LOG_DIR="/sdcard/logs"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/wifi-map-$(date +%Y%m%d_%H%M%S).log"

# Channel helper
freq_to_channel() {
  local f=$1
  if [ "$f" -ge 2412 ] &amp;&amp; [ "$f" -le 2484 ]; then echo $(( (f - 2407) / 5 ))
  elif [ "$f" -ge 5170 ] &amp;&amp; [ "$f" -le 5825 ]; then echo $(( (f - 5000) / 5 ))
  else echo "?"; fi
}

# Get GPS snapshot
GPS=$(timeout 5 termux-location --provider gps --request once 2&gt;/dev/null)
if [ -n "$GPS" ]; then
  LAT=$(echo "$GPS" | jq -r '.latitude')
  LON=$(echo "$GPS" | jq -r '.longitude')
  ACC=$(echo "$GPS" | jq -r '.accuracy')
  echo "GPS: lat=$LAT lon=$LON acc=${ACC}m" &gt; "$LOG_FILE"
else
  echo "GPS: unavailable or timed out" &gt; "$LOG_FILE"
fi

# Run scan with timeout
SCAN_JSON=$(timeout 10 termux-wifi-scaninfo 2&gt;/dev/null)

# Handle timeout or empty result
if [ -z "$SCAN_JSON" ] || [ "$SCAN_JSON" = "[]" ]; then
  echo "Scan failed or returned no data. Check permissions or location services." &gt;&gt; "$LOG_FILE"
  exit 1
fi

# Parse and log results
echo "$SCAN_JSON" | jq -r '.[] | 
  {
    ssid: .SSID,
    bssid: .BSSID,
    freq: .frequency,
    level: .level,
    caps: .capabilities
  } | 
  [.ssid, .bssid, (.freq|tostring), (.level|tostring), .caps] | 
  @tsv' | while IFS=$'\t' read -r SSID BSSID FREQ RSSI CAPS; do
  CHAN=$(freq_to_channel "$FREQ")
  ENC=$(echo "$CAPS" | grep -Eo "WPA3|WPA2|WPA|WEP" | tr '\n' '/' | sed 's|/$||')
  [ -z "$ENC" ] &amp;&amp; ENC="OPEN"
  printf "%-30s %-18s CH:%-2s RSSI:%-4s %s\n" "$SSID" "$BSSID" "$CHAN" "$RSSI" "$ENC"
done &gt;&gt; "$LOG_FILE"

</code></pre>]]></content><author><name></name></author><category term="projects" /><category term="tools" /><category term="hardware" /><category term="termux" /><category term="security" /><category term="ZTE_Scout" /><category term="Axon7" /><category term="automation" /><category term="hardware" /><category term="scripting" /><category term="wifi" /><summary type="html"><![CDATA[Introdusing the ZTE_Scout, a low-profile recon asset built on a locked-down ZTE Axon 7.]]></summary></entry><entry><title type="html">Ax200 Setup Guide</title><link href="https://the66monkey.github.io/2025/06/29/ax200-setup-guide.html" rel="alternate" type="text/html" title="Ax200 Setup Guide" /><published>2025-06-29T00:00:00+00:00</published><updated>2025-06-29T00:00:00+00:00</updated><id>https://the66monkey.github.io/2025/06/29/ax200-setup-guide</id><content type="html" xml:base="https://the66monkey.github.io/2025/06/29/ax200-setup-guide.html"><![CDATA[<h2 id="post-reinstall-setup-for-wi-fi--bluetooth-asus-pce-ax3000-intel-ax200-chipset">Post-Reinstall Setup for Wi-Fi &amp; Bluetooth <strong>ASUS PCE-AX3000</strong> (Intel AX200 chipset)</h2>

<h3 id="1-enable-wi-fi-support"><strong>1. Enable Wi-Fi Support</strong></h3>
<ul>
  <li>Make sure your kernel is version <strong>5.1+</strong>:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">uname</span> <span class="nt">-r</span>
</code></pre></div>    </div>
    <p>If older, consider upgrading via backports or using a newer Debian release.</p>
  </li>
  <li>Install the Intel Wi-Fi firmware:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt update
<span class="nb">sudo </span>apt <span class="nb">install </span>firmware-iwlwifi
</code></pre></div>    </div>
  </li>
  <li>Reboot or reload the driver:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>modprobe <span class="nt">-r</span> iwlwifi
<span class="nb">sudo </span>modprobe iwlwifi
</code></pre></div>    </div>
  </li>
</ul>

<hr />

<h3 id="-2-get-bluetooth-working">🔗 <strong>2. Get Bluetooth Working</strong></h3>
<blockquote>
  <p>The AX200’s Bluetooth runs over a <strong>USB header cable</strong>, so make sure that little cable is plugged into your motherboard!</p>
</blockquote>

<ul>
  <li>Install Bluetooth-related packages:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt <span class="nb">install </span>bluetooth bluez bluez-firmware
</code></pre></div>    </div>
  </li>
  <li>Optional but helpful: Prevent USB autosuspend (can cause issues)
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s1">'options btusb enable_autosuspend=0'</span> | <span class="nb">sudo tee</span> /etc/modprobe.d/btusb.conf
</code></pre></div>    </div>
  </li>
  <li>Reboot to apply everything.</li>
</ul>

<hr />

<h3 id="-3-troubleshooting-bluetooth-only-if-needed">🔧 <strong>3. Troubleshooting Bluetooth (Only If Needed)</strong></h3>
<p>If <code class="language-plaintext highlighter-rouge">bluetoothctl</code> still says <code class="language-plaintext highlighter-rouge">No default controller available</code>, try:</p>

<ul>
  <li>Reinstall firmware:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt <span class="nb">install </span>firmware-intel-sound
</code></pre></div>    </div>
  </li>
  <li>Manually reload Bluetooth module:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>modprobe <span class="nt">-r</span> btusb
<span class="nb">sudo </span>modprobe btusb
</code></pre></div>    </div>
  </li>
  <li>Check logs for firmware loading:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>dmesg | <span class="nb">grep</span> <span class="nt">-iE</span> <span class="s1">'firmware|btusb|hci'</span>
</code></pre></div>    </div>
  </li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[Post-Reinstall Setup for Wi-Fi &amp; Bluetooth ASUS PCE-AX3000 (Intel AX200 chipset)]]></summary></entry><entry><title type="html">Building a Traffic Limiter in Bash</title><link href="https://the66monkey.github.io/linux/bash/scripting/2025/06/29/traffic-limiter.html" rel="alternate" type="text/html" title="Building a Traffic Limiter in Bash" /><published>2025-06-29T00:00:00+00:00</published><updated>2025-06-29T00:00:00+00:00</updated><id>https://the66monkey.github.io/linux/bash/scripting/2025/06/29/traffic-limiter</id><content type="html" xml:base="https://the66monkey.github.io/linux/bash/scripting/2025/06/29/traffic-limiter.html"><![CDATA[<p>Not wanting to limit all traffic through my router i wanted to have a quick and easy way to limit traffic from my machine so I don’t hog the bandwith for the entire house.</p>

<p>I know there are some other programs out there that does the same and better, but they are all very old and i wanted to make sure it worked on modern machine.</p>

<p>Check it out here: <a href="https://github.com/The66Monkey/traffic-limiter">traffic-limiter GitHub repo</a></p>

<hr />

<h2 id="why-i-wrote-it">Why I Wrote It</h2>

<p>I wanted a simple modern and tested way to just limit the network usage.</p>

<hr />

<h2 id="future">Future</h2>

<p>When i have fixed everything else on my machine i hope to move on to allowing the user to limit the speed per/application as that was my original need.</p>]]></content><author><name></name></author><category term="linux" /><category term="bash" /><category term="scripting" /><category term="bash" /><category term="rate-limiting" /><category term="open-source" /><category term="github" /><summary type="html"><![CDATA[Not wanting to limit all traffic through my router i wanted to have a quick and easy way to limit traffic from my machine so I don’t hog the bandwith for the entire house.]]></summary></entry></feed>