<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andy Stewart</title>
    <description>The latest articles on DEV Community by Andy Stewart (@lcmd007).</description>
    <link>https://dev.to/lcmd007</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3890210%2F844dfe22-6b9d-4b32-87aa-ff45eaf98145.jpg</url>
      <title>DEV Community: Andy Stewart</title>
      <link>https://dev.to/lcmd007</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lcmd007"/>
    <language>en</language>
    <item>
      <title>Tired of Manual Movie Hunting? I Built an AI Agent Skill to Automate My NAS Downloads</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Fri, 15 May 2026 08:11:49 +0000</pubDate>
      <link>https://dev.to/lcmd007/tired-of-manual-movie-hunting-i-built-an-ai-agent-skill-to-automate-my-nas-downloads-3g53</link>
      <guid>https://dev.to/lcmd007/tired-of-manual-movie-hunting-i-built-an-ai-agent-skill-to-automate-my-nas-downloads-3g53</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Backstory: Engineering "Domestic Bliss"&lt;/strong&gt;&lt;br&gt;
As an OS developer and hardware entrepreneur with over 20 years in the game, my life is usually defined by "Walking &amp;amp; Coding." However, even the most robust system architecture can’t solve a simple domestic pain point: "Honey, can you find this movie for me?"&lt;/p&gt;

&lt;p&gt;The old workflow was tedious: Get the request -&amp;gt; Manual search for magnets -&amp;gt; Log into the NAS -&amp;gt; Paste the link -&amp;gt; Monitor the download. It felt like a waste of cycles.&lt;/p&gt;

&lt;p&gt;Since I'm currently building Hermes (an AI Agent) and the LCMD private cloud hardware, I decided to close the loop. I wrote a Skill that allows the Agent to handle the entire "Search-to-Download" pipeline via natural language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Stack: AI Agent + NAS + VueTorrent&lt;/strong&gt;&lt;br&gt;
The architecture is built on a "Surgical Logic" approach—precise, deterministic, and efficient:&lt;/p&gt;

&lt;p&gt;The Brain (Agent): Processes natural language intent (e.g., "Find the Pirates of the Caribbean series").&lt;/p&gt;

&lt;p&gt;The Nerve (Skill): My custom LazyCat Movie Search Skill queries resource sites and filters metadata.&lt;/p&gt;

&lt;p&gt;The Muscle (Downloader): Interfaces with the VueTorrent API on the NAS to execute the task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It’s "Smooth as Silk":&lt;/strong&gt;&lt;br&gt;
Smart Recognition: It doesn't just find one file; it can identify entire series or specific sequels based on context.&lt;/p&gt;

&lt;p&gt;Quality Control: Supports filtering by resolution—720P, 1080P, or 4K.&lt;/p&gt;

&lt;p&gt;Traffic Management: I implemented a logic to automatically set the Seeding Ratio to 1.0. This ensures you contribute back to the swarm without choking your NAS upload bandwidth indefinitely.&lt;/p&gt;

&lt;p&gt;The "Popcorn" Experience: Once the file hits the NAS, tools like NetEase Popcorn automatically scrape the metadata, creating a beautiful poster wall for the family to watch on any device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Setup&lt;/strong&gt;&lt;br&gt;
If you’re running a NAS (optimized for Lazy Cat, but adaptable for others), here’s the drill:&lt;/p&gt;

&lt;p&gt;Prepare your Agent: Ensure your assistant (like Hermes) supports external Skill loading.&lt;/p&gt;

&lt;p&gt;Install the Skill: Load the "LazyCat Movie Search" Skill.&lt;/p&gt;

&lt;p&gt;Link the Downloader: Input your VueTorrent WebUI address and credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Talk is cheap. Show me the code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’ve fully open-sourced this Skill. The logic is clean, and you can easily adapt it to other BT clients by tweaking the API calls.&lt;/p&gt;

&lt;p&gt;🔗 GitHub Repository: &lt;a href="https://github.com/whoamihappyhacking/lazycat-movie-search-skill" rel="noopener noreferrer"&gt;https://github.com/whoamihappyhacking/lazycat-movie-search-skill&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
Now, when my wife wants to watch something, I don't even have to look up from my keyboard. A single voice command to the Agent handles it all.&lt;/p&gt;

&lt;p&gt;To me, AI shouldn't just be a chatbot; it should be the "universal interface" between human intent and hardware execution. This project is a small example of how we can use AI to reclaim our time from repetitive digital chores.&lt;/p&gt;

&lt;p&gt;If you’re into AI Agents, private clouds, or just want to chat about NAS optimization, feel free to drop a comment or open a PR on GitHub.&lt;/p&gt;

&lt;p&gt;Happy Hacking!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmosy9coxo73uh1hm3avr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmosy9coxo73uh1hm3avr.png" alt=" " width="800" height="2458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6315srw1lirr2fkpvv9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6315srw1lirr2fkpvv9.png" alt=" " width="800" height="1778"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nas</category>
      <category>opensource</category>
      <category>agentaichallenge</category>
    </item>
    <item>
      <title>Stop Relying on Prompts: A 3-Step Architect’s Guide to Building Bulletproof AI Skills</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Tue, 12 May 2026 09:21:22 +0000</pubDate>
      <link>https://dev.to/lcmd007/stop-relying-on-prompts-a-3-step-architects-guide-to-building-bulletproof-ai-skills-i9o</link>
      <guid>https://dev.to/lcmd007/stop-relying-on-prompts-a-3-step-architects-guide-to-building-bulletproof-ai-skills-i9o</guid>
      <description>&lt;p&gt;I’ve spent 20 years in the Linux ecosystem, from founding Deepin to architecting private AI hardware. If there’s one thing I’ve learned, it’s this: A well-designed Tool is worth ten "perfect" prompts.&lt;/p&gt;

&lt;p&gt;Lately, people have been asking me why my LCMD Assistant is so reliable at complex tasks like resource hunting and automated media management. The secret isn't in a magic prompt; it’s in the engineering framework I use to build Skills with DeepSeek V4.&lt;/p&gt;

&lt;p&gt;Here is my 3-step blueprint for building AI Skills that actually work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Define the Path (Not just the Goal)&lt;/strong&gt;&lt;br&gt;
Most people tell an AI: "Find me this movie." Architects don't do that.&lt;br&gt;
You must analyze the target environment. If you’re targeting a specific site, you need to map the path: From opening the URL, to parsing the list, to extracting the final magnet link. You need a mental flowchart of the logic before you write a single instruction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Scripting as Your "Super Tool"&lt;/strong&gt;&lt;br&gt;
Script = Tool.&lt;br&gt;
If you let an AI "hallucinate" its way through a website, your success rate is a coin flip. I prioritize scripting core actions (like searching or filtering) and exposing them as a Tool. The AI’s job isn't to "guess" how to interact—its job is to act as the "Brain" that executes these scripts.&lt;br&gt;
This ensures deterministic results, regardless of which model you are using.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Edge Case Deduction (Defensive Programming)&lt;/strong&gt;&lt;br&gt;
This is the boundary between a toy and a professional tool. You must architect for the "What ifs":&lt;/p&gt;

&lt;p&gt;Conflict Resolution: If the search returns 720p, 1080p, and 4K, how should the AI present these choices to the user?&lt;/p&gt;

&lt;p&gt;Environment Gaps: What if the user doesn't have a download client installed? How should the AI guide them instead of just failing?&lt;br&gt;
By defining these output formats and error-handling logics within the Skill, your AI starts acting like a "Senior Engineer" rather than a confused intern.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge: Build Your Own&lt;/strong&gt;&lt;br&gt;
I’ve already used this framework to build a "TV Series Automator" that tracks and fetches new episodes.&lt;/p&gt;

&lt;p&gt;Now it's your turn. Pick up DeepSeek V4, follow these three steps (Map Path -&amp;gt; Script Core -&amp;gt; Define Edge Cases), and build a Skill that solves a real pain point in your life.&lt;/p&gt;

&lt;p&gt;Stop making Demos. Start building Tools. I'm looking forward to seeing what you build in the comments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4tksof9on4kmg37difhz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4tksof9on4kmg37difhz.jpg" alt=" " width="800" height="1778"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtypc2f3185m35gmu57s.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtypc2f3185m35gmu57s.jpg" alt=" " width="800" height="1778"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>deepseek</category>
      <category>architecture</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why Most AI Agents Fail: If You Can’t Bypass Cloudflare, Your Agent is Blind</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Tue, 12 May 2026 08:53:34 +0000</pubDate>
      <link>https://dev.to/lcmd007/why-most-ai-agents-fail-if-you-cant-bypass-cloudflare-your-agent-is-blind-50om</link>
      <guid>https://dev.to/lcmd007/why-most-ai-agents-fail-if-you-cant-bypass-cloudflare-your-agent-is-blind-50om</guid>
      <description>&lt;p&gt;I’ve been building operating systems for over 20 years. From founding Deepin to architecting private AI hardware, I’ve learned one thing: Architecture beats hype.&lt;/p&gt;

&lt;p&gt;Lately, everyone is talking about "AI Agents." But as an old-school C/C++ developer and Linuxer, I see a glaring issue that most "AI experts" are ignoring.&lt;/p&gt;

&lt;p&gt;The Elephant in the Room: The "Cloudflare Wall"&lt;br&gt;
The biggest pain point of running an Agent isn't its reasoning capability—it’s its reach.&lt;/p&gt;

&lt;p&gt;The web’s most valuable resources are increasingly hidden behind Cloudflare and advanced bot protection. If your Agent gets stuck on a "Verify you are human" checkbox, it becomes useless. It can't fetch data, it can't analyze trends, and it can't solve real problems.&lt;/p&gt;

&lt;p&gt;You can pay for expensive third-party proxy services, but why? As a veteran programmer, I believe we should solve this at the system level, not with a credit card.&lt;/p&gt;

&lt;p&gt;The Foundation: Full-Auto Browser Proxy&lt;br&gt;
While developing LCMD Assistant(小龙猫), I focused on solving the "Access" problem before the "Thinking" problem.&lt;/p&gt;

&lt;p&gt;Whether you are using Skills or the MCP (Model Context Protocol), the foundation is a headless browser that can navigate the real web without restrictions. We’ve developed a kernel-level logic that handles Cloudflare verification automatically.&lt;/p&gt;

&lt;p&gt;Without this, your Agent is just a toy. With it, it’s a professional researcher.&lt;/p&gt;

&lt;p&gt;What a Real "AI OS" Looks Like&lt;br&gt;
A true AI OS shouldn't just chat; it should work.&lt;/p&gt;

&lt;p&gt;Real Retrieval: It goes to the web, bypasses the gates, and gets the raw data.&lt;/p&gt;

&lt;p&gt;Information Arbitrage: It summarizes what you can’t find through a standard search.&lt;/p&gt;

&lt;p&gt;Private Integration: It fetches those resources and delivers them directly to your Private Cloud Storage.&lt;/p&gt;

&lt;p&gt;That is the closed-loop ecosystem we’ve built. It’s ready.&lt;/p&gt;

&lt;p&gt;Join the Beta (For Free)&lt;br&gt;
If you have a DeepSeek V4 API key, you can run the LCMD Assistant and our suite of Skill/MCP scenarios fluently right now.&lt;/p&gt;

&lt;p&gt;I want to share this with developers who are tired of "demo-only" AI and want something that works in the trenches.&lt;/p&gt;

&lt;p&gt;Want free access to LCMD Assistant+ our Skill/MCP library?&lt;/p&gt;

&lt;p&gt;Comment "1" below, and I’ll send the documentation and access link to your inbox.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>linux</category>
      <category>mcp</category>
    </item>
    <item>
      <title>DeepSeek V4 + Claude Code: Building a "Surgical" Development Workflow with China's Strongest Open-Source Model</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Tue, 12 May 2026 07:44:11 +0000</pubDate>
      <link>https://dev.to/lcmd007/deepseek-v4-claude-code-building-a-surgical-development-workflow-with-chinas-strongest-220l</link>
      <guid>https://dev.to/lcmd007/deepseek-v4-claude-code-building-a-surgical-development-workflow-with-chinas-strongest-220l</guid>
      <description>&lt;p&gt;The "Vibe Coding" era has evolved. With the release of DeepSeek V4, we finally have an open-source reasoning engine from China that can truly compete with closed-source giants like GPT-4o and Claude 3.5.&lt;/p&gt;

&lt;p&gt;As a system architect (founder of deepin and Lazy Cat), I have always pursued determinism and architectural sovereignty. By combining DeepSeek’s logical reasoning with Claude Code’s CLI automation, we can build an AI-native development loop that is extremely low-cost and offers high control.&lt;/p&gt;

&lt;p&gt;In just 5 minutes, you can configure this "Terminal Arsenal."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Engine: Installing Claude Code&lt;/strong&gt;&lt;br&gt;
Claude Code is more than just a chat box; it is an agent running in your terminal that can directly manipulate local files, run tests, and manage Git workflows. It is a true engineering tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Windows 10:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;（1）Press Win+R, type cmd, and open the Command Prompt.&lt;/p&gt;

&lt;p&gt;（2）Paste the following code and hit Enter (Note: It must be CMD; PowerShell will not work)：&lt;br&gt;
&lt;code&gt;curl -fsSL https://claude.ai/install.cmd -o install.cmd &amp;amp;&amp;amp; install.cmd &amp;amp;&amp;amp; del install.cmd&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
（3）After installation, verify it by running:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;claude --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If the version number appears correctly as shown in the screenshots, the installation is successful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fps2kspkqn95pda4nsytl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fps2kspkqn95pda4nsytl.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: Pay attention to the small grey text regarding adding environment variables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unix (macOS and Linux):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;（1）Open your terminal emulator. (macOS users: Search for "Terminal" in Spotlight. Linux users: You know the drill.)&lt;br&gt;
（2）Paste and execute the following code (ensure your network can access global services):&lt;br&gt;
&lt;code&gt;curl -fsSL https://claude.ai/install.sh | bash&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;（3）Verify the installation:&lt;br&gt;
&lt;code&gt;claude --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvf3qlh6mjbs5ecwww5n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvf3qlh6mjbs5ecwww5n.png" alt=" " width="800" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The Soul: DeepSeek V4 API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DeepSeek is currently the "smartest brain" with the highest cost-performance ratio globally.&lt;/p&gt;

&lt;p&gt;（1） Visit the &lt;a href="https://platform.deepseek.com/" rel="noopener noreferrer"&gt;DeepSeek Open Platform&lt;/a&gt; to register.&lt;br&gt;
（2）I recommend an initial top-up (using the &lt;code&gt;flash&lt;/code&gt; model is incredibly cheap and perfect for high-frequency iterations).&lt;br&gt;
（3）Generate your &lt;strong&gt;API Key&lt;/strong&gt;. &lt;br&gt;
&lt;em&gt;Safety Tip: I personally store my keys in Bitwarden on my local LCMD private cloud; I refuse to let my data sovereignty go "streaking" on the public cloud.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdiae6w8w66aufbrlyktq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdiae6w8w66aufbrlyktq.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Launch Command: Driving Claude Code with DeepSeek&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;（1）Using the Anthropic-compatible interface provided by DeepSeek, we can seamlessly swap the underlying model.&lt;/p&gt;

&lt;p&gt;（2）Enter the following code in your terminal (replace with your actual Key):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic ANTHROPIC_AUTH_TOKEN=sk-你的访问密码 ANTHROPIC_MODEL=deepseek-v4-flash claude&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Note: There are spaces in the command—do not miss them. Even a single wrong character will cause it to fail. It is best to copy this into a text editor first, edit it, and then paste it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Real-World Demo: Building a High-Tech Product Page&lt;/strong&gt;&lt;br&gt;
Once launched, try giving the Agent instructions (using my LC03 project as an example):&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Create an introduction page for LC03. Requirements: White theme, minimalist high-tech aesthetic (Surgical Logic style), optimized for desktop experience. Once written, automatically open the HTML in my browser."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Workflow: Claude Code will automatically plan the file structure, write the code, and handle permissions. You are only responsible for high-level architectural decisions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9ba9s519w7mew84kd05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9ba9s519w7mew84kd05.png" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnk8m6uvfhbbdp184duqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnk8m6uvfhbbdp184duqg.png" alt=" " width="800" height="2174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Why is this the ultimate solution for the "One-Person Company" (OPC)?&lt;/strong&gt;&lt;br&gt;
During the development of LightOS (the AI Development All-in-One), I realized that leadership is essentially the quality of the nervous system under pressure. The same applies to tools.&lt;/p&gt;

&lt;p&gt;By using Chinese open-source models like DeepSeek, we not only reduce costs but, more importantly, reduce dependency on "external black boxes," keeping the core business logic pure and controlled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Join the Community&lt;/strong&gt;&lt;br&gt;
The OPC is no longer a myth. We are deploying AI-generated software directly onto decentralized private hardware, reclaiming digital sovereignty.&lt;/p&gt;

&lt;p&gt;Are you ready to move from "writing prompts" to "building systems"? Let's discuss the future of AI infrastructure together.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>deepseek</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Breaking the "Desk-Lock": A Linux Veteran’s Blueprint for Walking Programming and Productivity Reconstruction</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Wed, 06 May 2026 08:55:02 +0000</pubDate>
      <link>https://dev.to/lcmd007/breaking-the-desk-lock-a-linux-veterans-blueprint-for-walking-programming-and-productivity-2696</link>
      <guid>https://dev.to/lcmd007/breaking-the-desk-lock-a-linux-veterans-blueprint-for-walking-programming-and-productivity-2696</guid>
      <description>&lt;p&gt;People call me a "Involution King" (卷王).&lt;/p&gt;

&lt;p&gt;They see me managing a company, writing core infrastructure code, and handling a mountain of "miscellaneous" tasks—all while maintaining a relentless release schedule. They’re curious: "Andy, how do you actually ship that much code?"&lt;/p&gt;

&lt;p&gt;The answer is simple: I stopped anchoring myself to a desk. I code while walking, while thinking, and while moving. Whether I'm shopping with my wife, walking the dog, or waiting at the school gate, I am in development mode.&lt;/p&gt;

&lt;p&gt;For me, this isn't just about efficiency; it's about a seamless transition of roles:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;While writing logic&lt;/strong&gt;, I am the Programmer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;While walking and ideating&lt;/strong&gt;, I am the Product Manager.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;While pushing a release&lt;/strong&gt;, I am the Project Manager.&lt;/p&gt;

&lt;p&gt;I don’t need to be tethered to a physical coordinate. What I need is a systematic architecture—a "plumbing" system that lets me dispatch tasks to AI as digital agents, rather than just staring at a dry chat interface on a smartphone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 4 "Hardcore" Pain Points of Mobile Programming&lt;/strong&gt;&lt;br&gt;
While walking by East Lake or waiting for my daughter after school, I’ve stress-tested nearly every mobile AI coding solution on the market. I’ve realized that true "Programming Freedom" requires overcoming four technical hurdles:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Seamless Workflow "Drift" (Context Handoff)&lt;/strong&gt;&lt;br&gt;
I cannot accept fragmented environments. When I leave my office and head outdoors, my entire coding environment and debugging context must "drift" instantly to my mobile device. The phone isn't a crippled backup; it must share the exact same underlying logic as my workstation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Breaking the "Geofence"&lt;/strong&gt;&lt;br&gt;
True mobile programming isn't just sitting on your couch. It’s in the car, at the grocery store, or by the BBQ grill. Inspiration is fleeting. You must have the ability to turn a thought into a Commit within 60 seconds of it hitting your brain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Closed-Loop Real-Time Rendering&lt;/strong&gt;&lt;br&gt;
Programming is fundamentally a loop of "Execute &amp;amp; Verify." Writing code without seeing the result is flying blind. Whether I’m tweaking a UI pixel or refactoring an Agent’s scheduling logic, I demand an instant, live preview of the execution on my actual device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The "Bare Metal" Debugging Advantage&lt;/strong&gt;&lt;br&gt;
This is the Achilles' heel of most cloud IDEs and web-based AI tools. When you are both the developer and the user, your phone is both your dev machine and your real-world testbed. Validating functions on actual hardware in real-time provides a level of "dev-euphoria" that only hardcore engineers truly understand.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Field Report: My "Fluid Laboratory" *&lt;/em&gt;&lt;br&gt;
Shopping with my wife: Fixing a bug in the Hermes Agent. I’ve already mapped out the logic while walking; during the gaps in our conversation, I whip out my phone, "chat" with the system, modify the code, and verify the fix on the spot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cq193d8x2ay2c7suk2f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cq193d8x2ay2c7suk2f.png" alt="Shopping with my wife: Fixing a bug in the Hermes Agent." width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BBQ by East Lake: Refactoring code amidst the smoke and fire.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqn2g6z726wvhuka4jixx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqn2g6z726wvhuka4jixx.png" alt="BBQ by East Lake: Refactoring code amidst the smoke and fire." width="800" height="1317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Waiting for school pickup: A 15-minute window is more than enough to ship a new version.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90537xx04p23k0cfgho1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90537xx04p23k0cfgho1.png" alt="Waiting for school pickup: A 15-minute window is more than enough to ship a new version." width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Core Gear: LCMD Micro-Server&lt;br&gt;
The backbone of this entire operation is my LCMD Micro-Server, running 24/7 at my home.&lt;/p&gt;

&lt;p&gt;It’s not just a NAS; it’s my Productivity Command Center. You can dispatch heavy-lifting tasks—computational power, environment isolation, and version control—to it at any time, leaving you free to focus on decision-making and high-level planning.&lt;/p&gt;

&lt;p&gt;In the past, individuals couldn't handle complex projects because they were trapped by expensive cloud costs and fixed workstations. Now, with a Micro-Server and AI, you can fit an entire development studio in your pocket.&lt;/p&gt;

&lt;p&gt;Stop "welding" yourself to your desk. Go walk, go think, and code as naturally as you breathe.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>coding</category>
      <category>productivity</category>
    </item>
    <item>
      <title>20-Year Linux Veteran Gets "Kernel Panicked"? Hardcore Fix for Random Desktop Freezes on AMD GPUs</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Thu, 30 Apr 2026 09:22:00 +0000</pubDate>
      <link>https://dev.to/lcmd007/20-year-linux-veteran-gets-kernel-panicked-hardcore-fix-for-random-desktop-freezes-on-amd-gpus-2em7</link>
      <guid>https://dev.to/lcmd007/20-year-linux-veteran-gets-kernel-panicked-hardcore-fix-for-random-desktop-freezes-on-amd-gpus-2em7</guid>
      <description>&lt;p&gt;After 20 years of hacking away in the open-source world and the Linux community, I’ve realized I might actually be a Bug Magnet.&lt;/p&gt;

&lt;p&gt;On my previous laptop, a Dell G16, the power-saving mode of the Intel AX201 Wi-Fi card caused &lt;code&gt;pacman&lt;/code&gt; updates to crawl at snail speeds. I finally solved that by surgically disabling the power-saving logic. Last year, I switched to this ThinkPad P14s, specifically choosing the AMD integrated graphics version. I thought, "No NVIDIA proprietary drivers to mess with—surely this will be stable, right?"&lt;/p&gt;

&lt;p&gt;As it turns out, if you have a mind for "tinkering," bugs will find you with pinpoint accuracy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Symptom: The Unavoidable "Frozen Frame"&lt;/strong&gt;&lt;br&gt;
Recently, my desktop environment started freezing multiple times a day. That feeling of the entire GUI suddenly solidifying is incredibly frustrating. It even made me wonder if I had broken the system by messing with some underlying plumbing.&lt;/p&gt;

&lt;p&gt;After work, I decided to cut the Gordian knot and reinstalled EndeavourOS. The freezes persisted. But I noticed a crucial clue: While the GUI was dead, the TTY was still functional. This classic "pseudo-hang" usually means the system hasn't crashed; rather, there’s a communication breakdown between the kernel driver and the hardware.&lt;/p&gt;

&lt;p&gt;I fired up dmesg for a deep-dive log review and finally caught the culprit.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[    4.392040] amdgpu 0000:c4:00.0: amdgpu: [drm] PSR support 1, DC PSR ver 0, sink PSR ver 3 DPCD caps 0x7b su_y_granularity 4&lt;br&gt;
[    4.392173] amdgpu 0000:c4:00.0: amdgpu: [drm] PSR support 0, DC PSR ver -1, sink PSR ver 0 DPCD caps 0x0 su_y_granularity 0&lt;br&gt;
[    4.392327] amdgpu 0000:c4:00.0: amdgpu: [drm] PSR support 0, DC PSR ver -1, sink PSR ver 0 DPCD caps 0x0 su_y_granularity 0&lt;br&gt;
[    4.392453] amdgpu 0000:c4:00.0: amdgpu: [drm] PSR support 0, DC PSR ver -1, sink PSR ver 0 DPCD caps 0x0 su_y_granularity 0&lt;br&gt;
[    4.392587] amdgpu 0000:c4:00.0: amdgpu: [drm] PSR support 0, DC PSR ver -1, sink PSR ver 0 DPCD caps 0x0 su_y_granularity 0&lt;br&gt;
[    4.392641] amdgpu 0000:c4:00.0: amdgpu: [drm] PSR support 0, DC PSR ver -1, sink PSR ver 0 DPCD caps 0x0 su_y_granularity 0&lt;br&gt;
[    4.392703] amdgpu 0000:c4:00.0: amdgpu: [drm] PSR support 0, DC PSR ver -1, sink PSR ver 0 DPCD caps 0x0 su_y_granularity 0&lt;br&gt;
[    4.392774] amdgpu 0000:c4:00.0: amdgpu: [drm] PSR support 0, DC PSR ver -1, sink PSR ver 0 DPCD caps 0x0 su_y_granularity 0&lt;br&gt;
[    4.392842] amdgpu 0000:c4:00.0: amdgpu: [drm] PSR support 0, DC PSR ver -1, sink PSR ver 0 DPCD caps 0x0 su_y_granularity 0&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;The Root Cause: AMD Driver's PSR Feature&lt;/strong&gt;&lt;br&gt;
After a technical post-mortem, I discovered the freezes were caused by the Panel Self Refresh (PSR) feature of the AMD Radeon 890M.&lt;/p&gt;

&lt;p&gt;This is a known driver bug, particularly prone to triggering on the Ryzen AI 9 HX PRO 370 (Strix Point) platform + amdgpu driver + Plasma desktop combo. PSR is intended to save power by allowing the panel to refresh itself when the image is static, but in practice, it becomes a "chokehold" that causes the GPU driver to hang.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Surgical Solution: Manually Disabling PSR&lt;/strong&gt;&lt;br&gt;
For programmers and veterans, the logic for solving problems isn't "reinstalling everything"—it's precise excision. Since the power-saving logic is buggy, we manually disable the feature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here is the fix:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.sudo nano /etc/kernel/cmdline , add the parameter amdgpu.dcdebugmask=0x10 to the end of the line.&lt;/p&gt;

&lt;p&gt;2.sudo reinstall-kernels , to regenerate the kernel entries and initrd. This will automatically update all .conf files under /efi/loader/entries/, applying the new parameter to current and future kernels.&lt;/p&gt;

&lt;p&gt;3.sudo reboot , restart the system.&lt;/p&gt;

&lt;p&gt;Verifying the Kernel Parameters:&lt;/p&gt;

&lt;p&gt;Use the command cat /proc/cmdline to check if amdgpu.dcdebugmask=0x10 is present at the end.&lt;/p&gt;

&lt;p&gt;You can also run cat /sys/module/amdgpu/parameters/dcdebugmask. If the output is 16 (the decimal equivalent of 0x10), PSR is successfully disabled.&lt;/p&gt;

&lt;p&gt;Finally, run dmesg | grep -i psr. You should no longer see any PSR-related logs in the kernel.&lt;/p&gt;

&lt;p&gt;After this bit of tinkering, the laptop is now rock-solid. I haven't encountered a single desktop freeze since.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>kernel</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>20 Years of Linux Input Method Tweaking: From Kernel Drivers to AI Models—The Ultimate Form of Input Experience</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Thu, 30 Apr 2026 07:46:34 +0000</pubDate>
      <link>https://dev.to/lcmd007/20-years-of-linux-input-method-tweaking-from-kernel-drivers-to-ai-models-the-ultimate-form-of-541d</link>
      <guid>https://dev.to/lcmd007/20-years-of-linux-input-method-tweaking-from-kernel-drivers-to-ai-models-the-ultimate-form-of-541d</guid>
      <description>&lt;p&gt;Having spent 20 years navigating the open-source world and the Linux community—from building Deepin OS to developing EAF—I’ve always held one conviction: A programmer’s sense of achievement comes half from changing the world, and half from the ultimate refinement of their tools. Many ask me why I still spend so much energy on RIME configurations in the age of AI. It's because an input method is an extension of one's thoughts. Every missed character or mistyped toggle between Chinese and English is a profanity against the "Flow State."&lt;/p&gt;

&lt;p&gt;I’ve tested Rime-Ice, Rime-Frost, and Wanxiang, but ultimately returned to Rime-Ice. Wanxiang’s pinyin mode was simply too frustrating due to frequent accidental triggers. Today, I’m organizing all my Fcitx configuration practices into this post. This isn't just a tutorial; it’s a tribute to the open-source community’s spirit of "standing on the shoulders of giants." Since I’ve benefited from the wheels others built, I must contribute my polished solutions back.&lt;/p&gt;

&lt;p&gt;If you are an Arch Linux user, congratulations—you don't need to mess with the command lines below. You can simply use my tool, rime-ice-installer, which automatically installs and applies all the configurations mentioned here.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yay -S rime-ice-installer&lt;br&gt;
rime-ice-installer&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features of rime-ice-installer:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.Installs Fcitx and Rime-Ice (Wusong).&lt;br&gt;
2.Automatically configures X11/Wayland environments.&lt;br&gt;
3.Automatically configures the Wanxiang AI Large Model.&lt;br&gt;
4.Configures convenient habits, such as using commas and periods for paging by default.&lt;br&gt;
5.Includes a dark-theme-friendly skin.&lt;br&gt;
6.Most importantly: It maps the Shift key to switch the system's English layout rather than entering Fcitx's internal "English Mode." Once Fcitx's English mode is triggered accidentally, it's notoriously difficult to switch back via the keyboard, often requiring a mouse click on the system tray.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Fcitx5&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Install the Fcitx5 packages:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo pacman -S fcitx5 fcitx5-gtk fcitx5-qt fcitx5-configtool fcitx5-rime librime&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fcitx5: Core input method framework.&lt;/li&gt;
&lt;li&gt;fcitx5-gtk: Support for GTK applications. Essential for fixing missing characters during fast typing.&lt;/li&gt;
&lt;li&gt;fcitx5-qt: Support for QT5 applications. Essential for fixing missing characters during fast typing.&lt;/li&gt;
&lt;li&gt;fcitx5-configtool: GUI configuration tool.&lt;/li&gt;
&lt;li&gt;fcitx5-rime: RIME input method engine.&lt;/li&gt;
&lt;li&gt;fcitx5-im: Input method setup tool.&lt;/li&gt;
&lt;li&gt;librime: RIME libraries, required by emacs-rime below.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Wayland Environment Setup&lt;/strong&gt;&lt;br&gt;
After installing the packages, in a KDE environment, simply go to KDE Settings -&amp;gt; Virtual Keyboard, select Fcitx5, and log out/in.&lt;/p&gt;

&lt;p&gt;For specific apps like WeChat that fail to support Chinese input, you need to create the configuration file ~/.config/plasma-workspace/env/ime.sh and add:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export GTK_IM_MODULE=fcitx&lt;br&gt;
export QT_IM_MODULE=fcitx&lt;br&gt;
export XMODIFIERS="@im=fcitx"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After logging out and back in, you should be able to type Chinese in WeChat under Wayland.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt;&lt;br&gt;
You must install fcitx5-gtk and fcitx5-qt and set the IM variables above, otherwise, typing too fast will result in "character leaking," where the pinyin is inserted directly into the input box instead of converting to Hanzi.&lt;/p&gt;

&lt;p&gt;Add-ons: Remove the shortcuts for the clipboard and quick input modules to avoid conflicts with Emacs keybindings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X11 Environment Setup&lt;/strong&gt;&lt;br&gt;
For X11, write the following to ~/.xprofile:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export GTK_IM_MODULE=fcitx&lt;br&gt;
export QT_IM_MODULE=fcitx&lt;br&gt;
export XMODIFIERS="@im=fcitx"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Log in again to apply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt;&lt;br&gt;
Same as Wayland, ensure fcitx5-gtk and fcitx5-qt are installed to prevent character leaking.&lt;/p&gt;

&lt;p&gt;Disable clipboard/quick input shortcuts to avoid Emacs conflicts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Fcitx5 Skins&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;yay -S fcitx5-skin-adwaita-dark&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then modify the config file ~/.config/fcitx5/conf/classicui.conf:&lt;br&gt;
`&lt;strong&gt;Horizontal candidate list&lt;/strong&gt;&lt;br&gt;
Vertical Candidate List=False&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prevent font scaling with DPI to avoid oversized interface&lt;/strong&gt;&lt;br&gt;
PerScreenDPI=False&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Font and size (check options with fc-list)&lt;/strong&gt;&lt;br&gt;
Font="Noto Sans Mono 13"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gnome3-style theme&lt;/strong&gt;&lt;br&gt;
Theme=adwaita-dark`&lt;/p&gt;

&lt;p&gt;Note: I personally prefer "TsangerJinKai03," so you can replace the Font with TsangerJinKai03-6763 15.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Rime-Ice (Wusong Pinyin)&lt;/strong&gt;&lt;br&gt;
The steps above set up the core and skin, but the default Fcitx dictionary is quite poor. For a fluid experience, you need Rime-Ice.&lt;br&gt;
Copy all rime-ice configurations to the fcitx rime directory:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/iDvel/rime-ice --depth=1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modifying Default Configurations&lt;/strong&gt;&lt;br&gt;
Switch to the rime-ice directory and perform these three operations:&lt;br&gt;
1.grep all- { when: paging, accept: comma, send: Page_Up } 和 - { when: has_menu, accept: period, send: Page_Down } ，Remove the annotations&lt;br&gt;
2.grep page_size, change 5 to 9.&lt;/p&gt;

&lt;p&gt;`sed -i 's/# (- { when: (paging|has_menu), accept: (comma|period), send: Page_(Up|Down) })/\1/' default.yaml&lt;/p&gt;

&lt;p&gt;sed -i 's/page_size: 5/page_size: 9/' default.yaml`&lt;/p&gt;

&lt;p&gt;he first two enable paging with commas and periods; the third increases the number of candidate words.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding Large Language Models&lt;/strong&gt;&lt;br&gt;
While Rime-Ice is already quite smart, we can enhance context-based suggestions by installing a Wanxiang language model.&lt;/p&gt;

&lt;p&gt;The specific operation method is as follows: &lt;br&gt;
Download rime-lmdg. I downloaded the amz-v2n3m1-zh-hans.gram file. &lt;/p&gt;

&lt;p&gt;Move the file amz-v2n3m1-zh-hans.gram to the rime-ice directory. &lt;/p&gt;

&lt;p&gt;Create a new rime-ice.custom.yaml file in the rime-ice directory with the following contents:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;patch:&lt;br&gt;
  grammar:&lt;br&gt;
    language: amz-v2n3m1-zh-hans&lt;br&gt;
    collocation_max_length: 5&lt;br&gt;
    collocation_min_length: 2&lt;br&gt;
  translator/contextual_suggestions: true&lt;br&gt;
  translator/max_homophones: 7&lt;br&gt;
  translator/max_homographs: 7&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updating the Fcitx Directory&lt;/strong&gt;&lt;br&gt;
After adjusting the configs, perform the copy. Backup and clear ~/.config/fcitx/rime/ and ~/.local/share/fcitx5/rime first to avoid conflicts.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cp -r ./rime-ice/* ~/.config/fcitx/rime/&lt;br&gt;
cp -r ./rime-ice/* ~/.local/share/fcitx5/rime&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;~/.config/fcitx/rime/: Primarily read by the emacs-rime plugin.&lt;/p&gt;

&lt;p&gt;~/.local/share/fcitx5/rime: Read by Fcitx for external software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deleting Accidental Input&lt;/strong&gt;&lt;br&gt;
If you accidentally confirm a pinyin string, it might become the first candidate. These are recorded here:&lt;/p&gt;

&lt;p&gt;~/.local/share/fcitx5/rime/en_dicts/en.dict.yaml ~/.config/fcitx/rime/en_dicts/en.dict.yaml&lt;br&gt;
Find the errant string, delete it, save, and restart Fcitx.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing emacs-rime&lt;/strong&gt;&lt;br&gt;
This section is about bringing Rime-Ice into Emacs.&lt;br&gt;
First, install posframe, and then download emacs-rime:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/DogLooksGood/emacs-rime" rel="noopener noreferrer"&gt;https://github.com/DogLooksGood/emacs-rime&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the directory to your load-path and add the following config:&lt;/p&gt;

&lt;p&gt;`(require 'rime)&lt;/p&gt;

&lt;p&gt;;;; Code:&lt;br&gt;
(setq rime-user-data-dir "~/.config/fcitx/rime")&lt;/p&gt;

&lt;p&gt;(setq rime-posframe-properties&lt;br&gt;
      (list :background-color "#333333"&lt;br&gt;
            :foreground-color "#dcdccc"&lt;br&gt;
            :font "WenQuanYi Micro Hei Mono-14"&lt;br&gt;
            :internal-border-width 10))&lt;/p&gt;

&lt;p&gt;(setq default-input-method "rime"&lt;br&gt;
      rime-show-candidate 'posframe)`&lt;/p&gt;

&lt;p&gt;The configurations above respectively set the path for emacs-rime to read RIME configurations, the UI details, and the use of posframe to display candidate words.&lt;/p&gt;

&lt;p&gt;After restarting Emacs, invoke the toggle-input-method command to try typing in Chinese.&lt;/p&gt;

&lt;p&gt;The Rime-Ice home page provides several input examples. If typing the same pinyin yields the identical Chinese candidate words, it confirms that you have successfully implemented Rime-Ice.&lt;/p&gt;

&lt;p&gt;In my personal experience, the fine-tuning of Rime-Ice is exceptional—far more professional than any RIME dictionary I’ve tried to cobble together myself. Chinese input, especially for long sentences, no longer requires flipping through endless pages of candidates.&lt;/p&gt;

&lt;p&gt;The combination of emacs-rime and Rime-Ice makes Chinese input in Emacs an absolute joy. I’ve personally sent a small donation to the author of Rime-Ice to show my appreciation for their hard work and contribution to the open-source community！&lt;/p&gt;

</description>
      <category>fcitx5</category>
      <category>linux</category>
      <category>archlinux</category>
      <category>emacs</category>
    </item>
    <item>
      <title>Farewell to F5: Building a Seamless Writing Workflow with Jekyll LiveReload</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Wed, 29 Apr 2026 09:07:10 +0000</pubDate>
      <link>https://dev.to/lcmd007/farewell-to-f5-building-a-seamless-writing-workflow-with-jekyll-livereload-1nff</link>
      <guid>https://dev.to/lcmd007/farewell-to-f5-building-a-seamless-writing-workflow-with-jekyll-livereload-1nff</guid>
      <description>&lt;p&gt;As a 20-year Linux veteran, I have zero tolerance for mechanical tasks that break my "flow."&lt;/p&gt;

&lt;p&gt;When using Jekyll for blogging, many developers fall into a repetitive trap: edit a paragraph -&amp;gt; switch to the browser -&amp;gt; hit manual refresh (F5). It’s a tiny friction, but like a memory leak in your code, it slowly drains your creative energy throughout the day.&lt;/p&gt;

&lt;p&gt;The solution has been hiding in the Jekyll documentation all along.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Core Command: Instant Synchronization&lt;/strong&gt;&lt;br&gt;
Stop using the plain &lt;code&gt;jekyll serve&lt;/code&gt;. Instead, fire up your local environment with this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Bash&lt;br&gt;
jekyll serve --livereload&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;By adding this parameter, Jekyll spins up an internal listener. The moment your Markdown file is modified and saved, the browser updates the view automatically, as if it’s reading your mind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. My Hardcore Workflow: Emacs + Hammerspoon + Magit&lt;/strong&gt;&lt;br&gt;
Configuring LiveReload is just the foundation. Real efficiency comes from automating the entire pipeline. Here is my "zero-friction" loop—designed so that the moment my fingers leave the keys, everything is already in motion:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drafting in Emacs&lt;/strong&gt;: Writing fluidly in &lt;code&gt;markdown-mode&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auto-Save&lt;/strong&gt;: My &lt;code&gt;auto-save&lt;/code&gt; plugin commits the changes to the disk the split-second I stop typing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invisible Refresh&lt;/strong&gt;: Jekyll detects the change immediately. I use Hammerspoon to snap to the browser, where the content is already rendered and waiting for me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Magit Deployment&lt;/strong&gt;: Once I'm satisfied with the preview, a few quick Magit keystrokes push the update straight to GitHub Pages.&lt;/p&gt;

&lt;p&gt;A developer’s dignity is reflected in the craftsmanship of their toolchain. Achieving this kind of "seamless transition" allows you to pour 100% of your focus into the content itself, rather than acting as a manual bridge between your editor and the browser.&lt;/p&gt;

&lt;p&gt;What "manual refresh" or repetitive task in your daily workflow drives you crazy? How did you use scripts or automation to kill it off for good?&lt;/p&gt;

&lt;p&gt;Share your efficiency secrets or your Jekyll optimization tips in the comments below.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>jekyll</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>$400 or $4? Using 'Surgical Logic' for a Hardcore MacBook Keyboard Repair</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Wed, 29 Apr 2026 06:47:43 +0000</pubDate>
      <link>https://dev.to/lcmd007/400-or-4-using-surgical-logic-for-a-hardcore-macbook-keyboard-repair-h4c</link>
      <guid>https://dev.to/lcmd007/400-or-4-using-surgical-logic-for-a-hardcore-macbook-keyboard-repair-h4c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftekrf3q4gm2w6ob7m2so.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftekrf3q4gm2w6ob7m2so.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a long-time Linux enthusiast and a heavy hitter on the keys, I’ve always been fascinated by the underlying architecture of our tools. Recently, my MacBook Pro met its match—I managed to physically break one of the keycaps.&lt;/p&gt;

&lt;p&gt;A quick trip to the Apple Store ended with a quote that made my jaw drop: $400 to replace the entire top case assembly. For a hacker used to "building and breaking," this didn't sit right. I decided to embrace the DIY spirit and handle it myself.&lt;/p&gt;

&lt;p&gt;I spent about 30RMB ($4) buying a full set of replacement keycaps from Taobao.com. I thought this was going to be a "level 1" repair, but a single mistake quickly turned it into a "boss fight."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnldusfgtn4m7bbxhxspj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnldusfgtn4m7bbxhxspj.png" alt=" " width="770" height="672"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Incident: A Lesson in Chemistry and Adhesives&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;At first&lt;/strong&gt;, I thought only the keycap was broken. After a failed attempt to force it back on, I realized the butterfly hinge underneath was damaged. In a moment of misplaced confidence, I grabbed a bottle of Super Glue (502).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The second&lt;/strong&gt; that drop hit the board, I knew I had messed up. Super glue is fast-acting, low-viscosity, and highly corrosive to certain plastics. It didn't just bond the hinge; it seeped into the base and melted the precision elastic membrane responsible for the key's tactile feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The result&lt;/strong&gt;: The 'J' key was dead. No travel, no click, just a solid block of plastic. This is what happens when you ignore the physical properties of your materials.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhm0yoqri4zmkyx88zvlg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhm0yoqri4zmkyx88zvlg.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structural Analysis: The Precision of the Butterfly Design&lt;/strong&gt;&lt;br&gt;
Since I had already "bricked" the base, I decided to perform a full "autopsy" to understand the mechanics. Despite the frustration, the engineering is remarkably sophisticated:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logic Board (PCB)&lt;/strong&gt;: The bottom layer, handling circuitry and LED backlighting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Butterfly Hinge&lt;/strong&gt;: Two interlocking wings that sit between the PCB and the base.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Base&lt;/strong&gt;: The critical component. It snaps into four tiny notches on the PCB, holds the hinge in place, and houses the metal dome for tactile feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keycap&lt;/strong&gt;: The outer shell that clips onto the top of the hinge.&lt;/p&gt;

&lt;p&gt;The tolerances here are incredibly tight. Even a microscopic amount of excess glue can paralyze the entire movement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tooling Up: Finding the Perfect "Surgical Glue"&lt;/strong&gt;&lt;br&gt;
To fix the melted base, I needed an adhesive that met three hardcore requirements:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Needle-fine Applicator&lt;/strong&gt;: Total control at the millimeter level to avoid the contact points.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Material Safety&lt;/strong&gt;: Non-corrosive to delicate plastics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slow-Curing&lt;/strong&gt;: Allowing time for precise alignment and error correction.&lt;/p&gt;

&lt;p&gt;I eventually found B7000, a specialized adhesive used in smartphone repairs. Its needle-nose tip allowed for the precision I desperately needed.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0okesubo7h6r6vz33yvj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0okesubo7h6r6vz33yvj.png" alt=" " width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Ultimate $4 Fix (Step-by-Step)&lt;/strong&gt;&lt;br&gt;
Materials Required:&lt;br&gt;
Replacement Base + Hinge ($2)&lt;br&gt;
New Keycap ($1)&lt;br&gt;
B7000 Adhesive ($1)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmi467wylbf7ceehwarg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmi467wylbf7ceehwarg.png" alt=" " width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Repair Process:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.Debridement&lt;/strong&gt;: I used tweezers to painstakingly peel off the damaged, glue-crusted base from the PCB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.Precision Grouting&lt;/strong&gt;: I applied three tiny dots of B7000 (about 2mm wide) on the PCB, strictly avoiding the center sensor and the top LED.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.Assembly&lt;/strong&gt;: I snapped the hinge into the new base first, then aligned the base with the four PCB notches and pressed down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.Verification&lt;/strong&gt;: I tapped the center of the base to ensure the character appeared on the screen with a clean rebound.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.The "Cure" (Crucial!)&lt;/strong&gt;: Do not snap the keycap on yet. Wait several hours for the glue to fully cure. If you try to snap the keycap on too early, the vertical pull will rip the base right off the board.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6.Final Marriage&lt;/strong&gt;: Once cured, I snapped the keycap on with a satisfying click.&lt;/p&gt;

&lt;p&gt;This experiment taught me that modern hardware is a marvel of integration, where even a tiny key carries immense complexity. While the journey was chaotic, it proved a point: There is no machine that cannot be fixed, provided you understand its logic.&lt;/p&gt;

&lt;p&gt;Faced with a $400 repair bill, I chose a $4 fix and a heavy dose of curiosity.&lt;/p&gt;

&lt;p&gt;Have you ever had a "minor" repair turn into a major disaster, only to pull off a hardcore recovery in the end? What’s the most "dangerous" thing you’ve ever done to your daily driver?&lt;/p&gt;

</description>
      <category>diy</category>
      <category>tutorial</category>
      <category>productivity</category>
      <category>linux</category>
    </item>
    <item>
      <title>Stop Backspacing Like a Typist: My "Surgical" Syntax Deletion Tool for Emacs</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Wed, 29 Apr 2026 03:40:44 +0000</pubDate>
      <link>https://dev.to/lcmd007/stop-backspacing-like-a-typist-my-surgical-syntax-deletion-tool-for-emacs-57o4</link>
      <guid>https://dev.to/lcmd007/stop-backspacing-like-a-typist-my-surgical-syntax-deletion-tool-for-emacs-57o4</guid>
      <description>&lt;p&gt;I’ve always believed that a hardcore developer shouldn't waste a single second on low-level chores like "deleting code."&lt;/p&gt;

&lt;p&gt;In Emacs, most people delete code by either mashing the Backspace key like they're tapping out Morse code, or using &lt;code&gt;kill-word&lt;/code&gt; only to find they’ve overshot and deleted half the expression. While &lt;code&gt;subword-mode&lt;/code&gt; fixed navigation for CamelCase, &lt;strong&gt;deletion&lt;/strong&gt; still lacks that critical sense of &lt;strong&gt;determinism&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I wanted a tool that combines the raw power of &lt;code&gt;skip-syntax&lt;/code&gt; with the granular intelligence of &lt;code&gt;subword-mode&lt;/code&gt;. So, I built a plugin for what I call &lt;strong&gt;Syntax Block Deletion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why "Surgical" Precision Matters&lt;/strong&gt;&lt;br&gt;
Standard deletion relies on whitespace or generic word boundaries. This tool operates on the &lt;strong&gt;logic&lt;/strong&gt; of your code. By tapping directly into Emacs' internal syntax tables, it achieves a "what you see is what you prune" experience:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subword Awareness&lt;/strong&gt;: When it hits &lt;code&gt;FooBarExample&lt;/code&gt;, it recognizes &lt;code&gt;Foo&lt;/code&gt;, &lt;code&gt;Bar&lt;/code&gt;, and &lt;code&gt;Example&lt;/code&gt; as distinct entities. You can snip away** Bar** without touching the rest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Syntax Boundary Intelligence&lt;/strong&gt;: It automatically senses operators, delimiters, and symbol boundaries. It knows exactly where a logical unit ends, so it won't go charging through your parentheses like a blunt instrument.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero-Latency Feedback&lt;/strong&gt;: Built on low-level syntax skipping, the response is instantaneous. No bloat, just speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arm Your Editor&lt;/strong&gt;&lt;br&gt;
The implementation is lean and mean. I recommend binding these to your most accessible keys to completely replace your default deletion commands:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;delete-block-forward&lt;/code&gt;: Instantly prune the next syntax block.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;delete-block-backward&lt;/code&gt;: Precisely detonate the previous logical unit.&lt;/p&gt;

&lt;p&gt;When you're building complex systems like &lt;strong&gt;EAF&lt;/strong&gt;, these micro-efficiencies compound into massive productivity gains. Every keystroke should be &lt;strong&gt;deliberate&lt;/strong&gt;. If you’re still tolerating the uncertainty of "I wonder how much this keypress will delete," your toolchain is overdue for a refactor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's start a discussion:&lt;/strong&gt;&lt;br&gt;
In a world of highly customizable editors, what other "high-frequency" actions do you think are still fundamentally broken or inefficient? What "secret weapons" have you hidden in your own config to maintain your flow?&lt;/p&gt;

&lt;p&gt;See you in the comments, and I'm looking forward to your PRs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository&lt;/strong&gt;: [((&lt;a href="https://github.com/manateelazycat/delete-block))" rel="noopener noreferrer"&gt;https://github.com/manateelazycat/delete-block))&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Happy Hacking!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>showdev</category>
      <category>sideprojects</category>
      <category>tooling</category>
    </item>
    <item>
      <title>20-Year Linux Veteran: How I Slashed My Emacs Startup Time by 90%</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Wed, 29 Apr 2026 03:30:17 +0000</pubDate>
      <link>https://dev.to/lcmd007/20-year-linux-veteran-how-i-slashed-my-emacs-startup-time-by-90-417l</link>
      <guid>https://dev.to/lcmd007/20-year-linux-veteran-how-i-slashed-my-emacs-startup-time-by-90-417l</guid>
      <description>&lt;p&gt;As a long-time contributor to the Emacs community and the creator of EAF (Emacs Application Framework), I’ve always maintained one rule: If your development tool takes more than 2 seconds to start, it’s murdering your creativity.&lt;/p&gt;

&lt;p&gt;Many developers complain that Emacs is "bloated," but the truth is usually just poorly architected configuration. Today, I’m skipping the fluff and sharing my hard-earned methodology for optimizing startup performance. By following these three steps, you can compress your startup time to 1/10th of what it is now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Stop Guessing: Benchmark Your Config&lt;/strong&gt;&lt;br&gt;
The first rule of optimization: &lt;strong&gt;If you can't measure it, you can't improve it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don't blindy disable packages. Insert the following code at the very top of your configuration to use &lt;code&gt;benchmark-init&lt;/code&gt;. This recursively analyzes the overhead of every single line in your setup.&lt;/p&gt;

&lt;p&gt;`Code snippet&lt;br&gt;
(let (&lt;br&gt;
      ;; Temporarily set GC threshold to infinity to prevent garbage collection during startup&lt;br&gt;
      (gc-cons-threshold most-positive-fixnum)&lt;br&gt;
      ;; Clear file-name-handler-alist to skip regex matching on every loaded file&lt;br&gt;
      (file-name-handler-alist nil))&lt;br&gt;
  (require 'benchmark-init-modes)&lt;br&gt;
  (require 'benchmark-init)&lt;br&gt;
  (benchmark-init/activate)&lt;/p&gt;

&lt;p&gt;;; Your core configuration goes here&lt;br&gt;
  )&lt;code&gt;&lt;br&gt;
After startup, run &lt;/code&gt;M-x benchmark-init/show-durations-tree`. This gives you a precise, millisecond-level "hit list" showing exactly which packages are slowing you down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Dynamic Decoupling: Don't Load What You Don't Use&lt;/strong&gt;&lt;br&gt;
This is a fundamental architectural shift. Many libraries are only needed for specific scenarios—why let them clog your startup path?&lt;/p&gt;

&lt;p&gt;Take the &lt;code&gt;noflet&lt;/code&gt; library, often used to suppress the "Active processes exist" query when quitting:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Inefficient Way:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Code snippet&lt;br&gt;
(require 'noflet) ;; Loaded at startup, even if you don't quit for days&lt;br&gt;
(defadvice save-buffers-kill-emacs (around no-query-kill-emacs activate)&lt;br&gt;
  (noflet ((process-list ())) ad-do-it))&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Hardcore Way (On-Demand Loading):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Code snippet&lt;br&gt;
(defadvice save-buffers-kill-emacs (around no-query-kill-emacs activate)&lt;br&gt;
  "Only load the library at the moment the exit command is triggered"&lt;br&gt;
  (require 'noflet) &lt;br&gt;
  (noflet ((process-list ())) ad-do-it))&lt;/code&gt;&lt;br&gt;
By moving &lt;code&gt;require&lt;/code&gt; inside the function or using &lt;code&gt;eval-after-load&lt;/code&gt;blocks, you can strip away 50% of unnecessary dependencies from your initial boot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The Ultimate Weapon: Lazy-Loading via Key Triggers&lt;/strong&gt;&lt;br&gt;
This is my core secret. The logic is simple: Defer the loading of 90% of your plugins until the moment you actually press the key to use them.&lt;/p&gt;

&lt;p&gt;The traditional approach is "Load, then Bind." My lazy-load technique flips this: "Bind, then Inject."&lt;/p&gt;

&lt;p&gt;At Startup: Only define the keybindings (e.g., &lt;code&gt;Ctrl + c p&lt;/code&gt; for project management).&lt;/p&gt;

&lt;p&gt;At Runtime: The moment you hit that key, Emacs injects the source code and executes the command instantly.&lt;/p&gt;

&lt;p&gt;This reduces your startup process to a list of pure key mappings—the leanest possible configuration.&lt;/p&gt;

&lt;p&gt;Top-tier developers demand two things from their tools: determinism and extreme responsiveness.&lt;/p&gt;

&lt;p&gt;Optimization isn't about removing features; it's about precise resource allocation. Save your startup time for the work that matters, and keep your "flow" uninterrupted. If you're chasing terminal efficiency, try refactoring your config with these three steps today.&lt;/p&gt;

&lt;p&gt;Happy Hacking!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>performance</category>
      <category>linux</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Lightweight Analytics for Jekyll: Why I Chose Hit Kounter Over Google Analytics</title>
      <dc:creator>Andy Stewart</dc:creator>
      <pubDate>Tue, 28 Apr 2026 09:31:22 +0000</pubDate>
      <link>https://dev.to/lcmd007/lightweight-analytics-for-jekyll-why-i-chose-hit-kounter-over-google-analytics-ke5</link>
      <guid>https://dev.to/lcmd007/lightweight-analytics-for-jekyll-why-i-chose-hit-kounter-over-google-analytics-ke5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Privacy and Speed First&lt;/strong&gt;&lt;br&gt;
As I continue to polish my Jekyll blog on GitHub Pages, I realized I needed one more thing: View Counts. I wanted to know which topics resonate most with my readers, but I had two strict requirements:&lt;/p&gt;

&lt;p&gt;No Google Analytics: I don't want my site to be blocked or slowed down by heavy tracking scripts (especially considering accessibility in different regions).&lt;/p&gt;

&lt;p&gt;Minimalist Integration: It should be as "plug-and-play" as Jekyll itself.&lt;/p&gt;

&lt;p&gt;After searching, I found Hit Kounter. It’s simple, fits perfectly with static sites, and just works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Set It Up in 2 Minutes&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. The Header Injection&lt;/strong&gt;&lt;br&gt;
First, you need to include the Hit Kounter script in your HTML &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;. Usually, this goes into your&lt;code&gt;_includes/head.html&lt;/code&gt;file:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;HTML&lt;br&gt;
&amp;lt;script src="https://cdn.jsdelivr.net/npm/hit-kounter@0.1.0/dist/hit-kounter.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Displaying Views on Post Pages&lt;/strong&gt;&lt;br&gt;
To show the view count for a specific article, just add this tag to your post template (e.g., _layouts/post.html):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;HTML&lt;br&gt;
&amp;lt;span data-hk-page="current"&amp;gt; - &amp;lt;/span&amp;gt; Views&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The current attribute automatically detects the current URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Displaying View Counts on the Homepage&lt;/strong&gt;&lt;br&gt;
If you want to show the traffic for each post on your homepage index, use this snippet in your index.html loop:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;HTML&lt;br&gt;
&amp;lt;span data-hk-page="{{ post.url | prepend: site.url | prepend: 'https:' }}"&amp;gt; - &amp;lt;/span&amp;gt; Views&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pro Tip: Hit Kounter requires the absolute URL to track accurately. That’s why we use prepend: site.url and ensure https: is explicitly added. Without the full protocol, the counter won't trigger.&lt;/p&gt;

&lt;p&gt;That’s All!&lt;br&gt;
Just git push and your analytics are live. No complex dashboards, no privacy concerns, just a clean, simple number that tells you what your audience loves.&lt;/p&gt;

&lt;p&gt;It’s another small step toward building the perfect minimalist writing environment.&lt;/p&gt;

&lt;p&gt;What are you using to track your static site? Are you a fan of self-hosted analytics or do you prefer these "Zero-Config" tools? Let me know in the comments!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About the Author:&lt;/strong&gt;&lt;br&gt;
I am Yong Wang, a 20-year Linux veteran and former CTO of Deepin. I’m currently building Little Chinchilla, an AI Agent host designed for private-domain computing. Catch me on &lt;a href="https://github.com/manateelazycat" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; where I spend most of my time hacking Emacs.&lt;/p&gt;

</description>
      <category>jekyll</category>
      <category>analytics</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
