<?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: kingyou</title>
    <description>The latest articles on DEV Community by kingyou (@kingyou).</description>
    <link>https://dev.to/kingyou</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1266278%2Fb2d715ee-9187-4884-89b2-16222eedc996.png</url>
      <title>DEV Community: kingyou</title>
      <link>https://dev.to/kingyou</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kingyou"/>
    <language>en</language>
    <item>
      <title>In the age of AI, the most valuable skill is no longer writing answers — it is asking the right questions.</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Thu, 09 Jul 2026 09:50:43 +0000</pubDate>
      <link>https://dev.to/kingyou/in-the-age-of-ai-the-most-valuable-skill-is-no-longer-writing-answers-it-is-asking-the-right-10kl</link>
      <guid>https://dev.to/kingyou/in-the-age-of-ai-the-most-valuable-skill-is-no-longer-writing-answers-it-is-asking-the-right-10kl</guid>
      <description>&lt;p&gt;For a long time, education and work rewarded one thing above all else: the ability to produce correct answers.&lt;/p&gt;

&lt;p&gt;School exams were built around it. Technical interviews were built around it. Even many engineering jobs were built around it. The person who could respond faster, explain better, and deliver the right output was often seen as the most valuable person in the room.&lt;/p&gt;

&lt;p&gt;But AI is changing that.&lt;/p&gt;

&lt;p&gt;Today, answers are becoming cheap. With modern AI tools, anyone can generate code, summaries, documentation, architecture drafts, and even product ideas in seconds. The scarcity is no longer in producing answers. The scarcity is in defining the right problem.&lt;/p&gt;

&lt;p&gt;That is why, in the AI era, learning how to ask better questions matters more than learning how to write better answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottleneck Has Moved
&lt;/h2&gt;

&lt;p&gt;The biggest shift is not that AI can answer questions.&lt;/p&gt;

&lt;p&gt;The bigger shift is that answering is no longer the hardest part.&lt;/p&gt;

&lt;p&gt;When answers can be generated instantly, the real bottleneck becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What exactly should be asked?&lt;/li&gt;
&lt;li&gt;What is the real problem behind the surface request?&lt;/li&gt;
&lt;li&gt;What constraints actually matter?&lt;/li&gt;
&lt;li&gt;What outcome is considered good enough?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can generate many possible answers. But it still depends heavily on the quality of the question.&lt;/p&gt;

&lt;p&gt;A vague prompt creates vague output.&lt;/p&gt;

&lt;p&gt;A precise question creates leverage.&lt;/p&gt;

&lt;p&gt;In that sense, the person who defines the problem is now more important than the person who simply responds to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Setter Is More Valuable Than the Problem Solver
&lt;/h2&gt;

&lt;p&gt;This idea may sound exaggerated at first, but it becomes obvious in practice.&lt;/p&gt;

&lt;p&gt;Suppose someone says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Optimize this system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sounds like a reasonable task, but it is actually too weak to produce a strong result. Optimize for what? Cost? Latency? Reliability? Simplicity? Team productivity?&lt;/p&gt;

&lt;p&gt;Now compare it with this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We have a Node.js API running on AWS ECS. Under burst traffic, CPU throttling causes latency spikes. How can we reduce p95 latency without increasing infrastructure cost by more than 10%?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a much better question because it contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Context&lt;/li&gt;
&lt;li&gt;Constraints&lt;/li&gt;
&lt;li&gt;Success criteria&lt;/li&gt;
&lt;li&gt;A measurable target&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, AI becomes genuinely useful. It can suggest queueing strategies, autoscaling changes, request shaping, caching, or concurrency controls. But the quality of the output comes from the framing of the problem.&lt;/p&gt;

&lt;p&gt;The value is no longer just in answering.&lt;/p&gt;

&lt;p&gt;The value is in setting the question correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  This Is Bigger Than Prompt Engineering
&lt;/h2&gt;

&lt;p&gt;Some people reduce this trend to &lt;em&gt;prompt engineering&lt;/em&gt;, as if it were just about finding clever wording tricks for AI models.&lt;/p&gt;

&lt;p&gt;That misses the deeper point.&lt;/p&gt;

&lt;p&gt;Asking strong questions is really about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defining problems clearly&lt;/li&gt;
&lt;li&gt;Exposing hidden assumptions&lt;/li&gt;
&lt;li&gt;Making constraints explicit&lt;/li&gt;
&lt;li&gt;Breaking large tasks into smaller ones&lt;/li&gt;
&lt;li&gt;Knowing what success looks like&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These were always high-value skills. Senior engineers have always done this better than juniors. Architects have always done this better than implementers. Product thinkers have always done this better than feature factories.&lt;/p&gt;

&lt;p&gt;AI did not invent this skill.&lt;/p&gt;

&lt;p&gt;AI simply made its importance impossible to ignore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Engineers Are Becoming Problem Designers
&lt;/h2&gt;

&lt;p&gt;This is especially true in software engineering.&lt;/p&gt;

&lt;p&gt;In the past, technical skill was often measured by how much code someone could write and how quickly they could write it.&lt;/p&gt;

&lt;p&gt;Now that AI can generate working code very quickly, the more important questions become:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this the right abstraction?&lt;/li&gt;
&lt;li&gt;Is this solving the right problem?&lt;/li&gt;
&lt;li&gt;What trade-offs are acceptable?&lt;/li&gt;
&lt;li&gt;What should be automated, and what should remain manual?&lt;/li&gt;
&lt;li&gt;What are the failure modes?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The engineer of the AI era is not just a code producer.&lt;/p&gt;

&lt;p&gt;The engineer is increasingly a problem designer.&lt;/p&gt;

&lt;p&gt;That means the highest leverage comes from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Task decomposition&lt;/li&gt;
&lt;li&gt;System framing&lt;/li&gt;
&lt;li&gt;Requirement clarity&lt;/li&gt;
&lt;li&gt;Constraint modeling&lt;/li&gt;
&lt;li&gt;Decision quality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The person who can define a clean problem space can get extraordinary output from AI tools.&lt;/p&gt;

&lt;p&gt;The person who cannot will get impressive-looking nonsense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Answers Are Abundant, Judgment Is Rare
&lt;/h2&gt;

&lt;p&gt;This is the core asymmetry of the AI age.&lt;/p&gt;

&lt;p&gt;Answers are abundant.&lt;/p&gt;

&lt;p&gt;Judgment is rare.&lt;/p&gt;

&lt;p&gt;AI can generate ten solutions in seconds. But it cannot reliably tell you which problem is worth solving first, which trade-off your team can actually afford, or which constraint is politically invisible but operationally critical.&lt;/p&gt;

&lt;p&gt;That part still depends on human judgment.&lt;/p&gt;

&lt;p&gt;And judgment usually appears in the form of questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are we optimizing for?&lt;/li&gt;
&lt;li&gt;What assumption are we making here?&lt;/li&gt;
&lt;li&gt;What breaks under scale?&lt;/li&gt;
&lt;li&gt;What is the hidden cost of this shortcut?&lt;/li&gt;
&lt;li&gt;Are we solving the root cause, or just patching symptoms?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not answer-writing skills.&lt;/p&gt;

&lt;p&gt;These are question-design skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better Questions Create Better Collaboration With AI
&lt;/h2&gt;

&lt;p&gt;A lot of frustration with AI comes from weak interaction design.&lt;/p&gt;

&lt;p&gt;People say AI is unreliable, but often the input itself is underspecified. The model is being asked to infer context that was never stated.&lt;/p&gt;

&lt;p&gt;If the request is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build me a dashboard.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The output will likely be generic.&lt;/p&gt;

&lt;p&gt;If the request is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build a dashboard for internal DevOps use. The users are platform engineers. It should surface deployment frequency, rollback count, p95 build time, and failed pipeline rate across 12 services. Prioritize fast scanning over visual decoration.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The chances of getting useful output rise dramatically.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because the second version gives the model something to reason about.&lt;/p&gt;

&lt;p&gt;Good questions do not just request output.&lt;/p&gt;

&lt;p&gt;They encode intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Practice This Skill
&lt;/h2&gt;

&lt;p&gt;If asking is becoming more important than answering, then this should be trained deliberately.&lt;/p&gt;

&lt;p&gt;A practical way to improve is to make every request more explicit in four dimensions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; — What environment are we in?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Constraint&lt;/strong&gt; — What limits must be respected?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Goal&lt;/strong&gt; — What does success mean?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off&lt;/strong&gt; — What are we willing to sacrifice?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example, instead of saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Help me improve this app.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Try saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is a Tauri desktop app used internally on Windows. Startup time is acceptable, but memory usage grows after prolonged use. The goal is to reduce idle RAM consumption without rewriting the frontend stack. What should be investigated first?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question is harder to ask.&lt;/p&gt;

&lt;p&gt;But once asked, it becomes far easier to answer well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Education and Work Will Eventually Reorganize Around This
&lt;/h2&gt;

&lt;p&gt;This shift has implications beyond AI tooling.&lt;/p&gt;

&lt;p&gt;Much of education still rewards answer reproduction. Many organizations still reward visible output over problem clarity. But if AI keeps reducing the value of routine answer production, then both education and work will need to adapt.&lt;/p&gt;

&lt;p&gt;The future advantage will belong less to people who can merely respond, and more to people who can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify meaningful problems&lt;/li&gt;
&lt;li&gt;Frame them precisely&lt;/li&gt;
&lt;li&gt;Add the right constraints&lt;/li&gt;
&lt;li&gt;Direct intelligence, whether human or machine, toward useful outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In that world, the one who writes the exam matters more than the one who takes it.&lt;/p&gt;

&lt;p&gt;The one who defines the problem matters more than the one who fills in the solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;In the AI era, writing answers is no longer the highest-value skill.&lt;/p&gt;

&lt;p&gt;Asking the right question is.&lt;/p&gt;

&lt;p&gt;Because once answers become cheap, the real power moves to the person who decides what is worth asking in the first place.&lt;/p&gt;

&lt;p&gt;And that is why the problem setter is becoming more important than the problem solver.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>discuss</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built a Self-Healing Extension Stabilizer for Ungoogled Chromium (and You Can Use It Too)</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Wed, 27 May 2026 03:53:09 +0000</pubDate>
      <link>https://dev.to/kingyou/i-built-a-self-healing-extension-stabilizer-for-ungoogled-chromium-and-you-can-use-it-too-161a</link>
      <guid>https://dev.to/kingyou/i-built-a-self-healing-extension-stabilizer-for-ungoogled-chromium-and-you-can-use-it-too-161a</guid>
      <description>&lt;p&gt;I've been using &lt;a href="https://github.com/ungoogled-software/ungoogled-chromium" rel="noopener noreferrer"&gt;Ungoogled Chromium&lt;/a&gt; as my daily driver for a while now. The speed is incredible — no telemetry overhead, no background services phoning home, just a lean, fast browser that gets out of your way.&lt;/p&gt;

&lt;p&gt;But there's a catch. Actually, several.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Extension Management Hell
&lt;/h2&gt;

&lt;p&gt;If you've used Ungoogled Chromium, you know the drill. The Chrome Web Store isn't integrated. You can't just click "Add to Chrome" and have things work. Sites like &lt;a href="https://www.ungoogledextensions.com" rel="noopener noreferrer"&gt;ungoogledextensions.com&lt;/a&gt; are lifesavers — they let you browse and install extensions manually. But the moment you have more than a handful of extensions, things start falling apart.&lt;/p&gt;

&lt;p&gt;Here's what happened to me. Twice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lost profile&lt;/strong&gt; — Something corrupted my Chrome profile directory. All extensions gone. I spent an entire evening hunting down extension IDs, opening two dozen Web Store tabs, and clicking through install dialogs one by one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Accidental removal&lt;/strong&gt; — I was debugging a browser issue and disabled a few extensions. One slip of the mouse later, &lt;code&gt;uBlock Origin&lt;/code&gt; was uninstalled. I didn't notice for three days. Three days of ads.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After the second incident, I thought: &lt;em&gt;there has to be a better way.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea: Declarative Extension Management
&lt;/h2&gt;

&lt;p&gt;What if I could just write down which extensions I want, and have a tool handle the rest?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cjpalhdlnbpafiamejdnhcphjbkeiagm    # uBlock Origin
gcbommkclmclpchllfjekcdonpmejbdp    # HTTPS Everywhere
nngceckbapebfimnlniiiahkandclblb    # Something else I need
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the list. Done. The tool installs whatever's missing, removes whatever shouldn't be there, and keeps checking so nothing drifts. If uBlock gets nuked again, it comes back automatically. If I switch machines, I just paste the same list.&lt;/p&gt;

&lt;p&gt;That's the stabilizer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Ungoogle Extension Stabilizer&lt;/strong&gt; — a Manifest V3 Chrome extension that acts as a consistency watchdog for your browser extensions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core features:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Declarative list&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Paste extension IDs, one per line. That's your source of truth.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto-install&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Missing extensions are installed via CRX direct download URLs. The stabilizer opens the install page and Chrome handles the rest.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto-remove&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Extensions not in your list? Removed on next sync. No clutter, no surprises.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scheduled checks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Configurable timer (default 30 min). Your browser stays consistent even if you forget about it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Self-healing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Accidentally remove a managed extension? The stabilizer detects it and reinstalls automatically.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;One-click sync&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open the popup, hit "Sync Now". Full consistency pass in seconds.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Architecture at a glance:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌───────────────┐     ┌────────────────────┐     ┌──────────────────┐
│   Popup UI    │────▶│  Service Worker     │────▶│  Chrome APIs     │
│  (user input) │     │  (install/monitor)  │     │  management,     │
│               │◀────│                     │◀────│  storage, alarms │
└───────────────┘     └────────────────────┘     └──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why CRX Direct Downloads?
&lt;/h2&gt;

&lt;p&gt;The first version tried to automate the Chrome Web Store — injecting scripts to find and click the "Add to Chrome" button. It was fragile. The Web Store's DOM structure changes, shadow DOM makes element selection tricky, and honestly it felt like building on sand.&lt;/p&gt;

&lt;p&gt;Then I discovered the CRX direct download URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://clients2.google.com/service/update2/crx
  ?response=redirect
  &amp;amp;prodversion=130.0.0.0
  &amp;amp;acceptformat=crx2,crx3
  &amp;amp;x=id%3D{EXTENSION_ID}%26uc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Navigating to this URL triggers Chrome's native extension installation flow — no DOM parsing, no button hunting, no fragile selectors. The browser does what it was designed to do. We just need to point it at the right URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  The User Gesture Challenge
&lt;/h2&gt;

&lt;p&gt;Here's something I learned the hard way: Chrome requires a &lt;strong&gt;user gesture&lt;/strong&gt; for &lt;code&gt;chrome.management.uninstall()&lt;/code&gt;. You can't just call it from a service worker and expect it to work. The error message is wonderfully unhelpful:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chrome.management.uninstall requires a user gesture.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fix? Move uninstall operations to the popup context, where every button click IS a user gesture. Each removal triggers a browser confirmation dialog, and the user's click on "Remove" provides a fresh gesture for the next one. Not perfectly zero-touch, but about as close as Chrome's security model allows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the repo&lt;/span&gt;
git clone https://github.com/TingyuShare/ungoogle-extension-stabilizer.git

&lt;span class="c"&gt;# Open Chrome / Ungoogled Chromium&lt;/span&gt;
&lt;span class="c"&gt;# Navigate to chrome://extensions&lt;/span&gt;
&lt;span class="c"&gt;# Enable Developer Mode&lt;/span&gt;
&lt;span class="c"&gt;# Click "Load unpacked" → select the project folder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Find your extension IDs from the Web Store URL:&lt;br&gt;
&lt;code&gt;https://chromewebstore.google.com/detail/&lt;/code&gt;&lt;strong&gt;&lt;code&gt;cjpalhdlnbpafiamejdnhcphjbkeiagm&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paste them into the popup, save, and you're done.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;This is v1.0. There's plenty I want to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Export/import profiles&lt;/strong&gt; — Share extension lists as JSON or a simple link&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extension name resolution&lt;/strong&gt; — Show human-readable names alongside IDs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firefox port&lt;/strong&gt; — The &lt;code&gt;browser.management&lt;/code&gt; API is similar; a port shouldn't be too involved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-profile support&lt;/strong&gt; — Different extension sets for work vs. personal browsing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI companion&lt;/strong&gt; — A Node.js tool that generates the extension list from a config file&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Want to Help?
&lt;/h2&gt;

&lt;p&gt;This project is MIT licensed and open to contributions. Whether it's code, bug reports, documentation, or translations — all are welcome.&lt;/p&gt;

&lt;p&gt;Check out the repo: &lt;strong&gt;&lt;a href="https://github.com/TingyuShare/ungoogle-extension-stabilizer" rel="noopener noreferrer"&gt;github.com/TingyuShare/ungoogle-extension-stabilizer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some areas where I'd especially love help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Translations&lt;/strong&gt; for the popup UI&lt;/li&gt;
&lt;li&gt;🧪 &lt;strong&gt;Testing&lt;/strong&gt; on different Chromium forks (Brave, Edge, Vivaldi)&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;UX polish&lt;/strong&gt; — better status indicators, dark/light theme support&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;CI/CD&lt;/strong&gt; for automated release packaging&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;The Ungoogled Chromium community values independence. No account sync, no cloud profiles, no vendor lock-in. But that independence comes with a maintenance burden. Every extension is your responsibility — install it, update it, keep track of it.&lt;/p&gt;

&lt;p&gt;I built this stabilizer because I believe you shouldn't have to choose between privacy and convenience. You should be able to define your browser's identity in a text file and trust that it stays consistent.&lt;/p&gt;

&lt;p&gt;If that resonates with you — give the project a ⭐, try it out, or contribute. Let's make extension management boring again.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ for the ungoogled Chromium community. MIT licensed. &lt;a href="https://github.com/TingyuShare/ungoogle-extension-stabilizer" rel="noopener noreferrer"&gt;View on GitHub →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why you love dev.to</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Wed, 24 Dec 2025 06:10:25 +0000</pubDate>
      <link>https://dev.to/kingyou/why-you-love-devto-30p0</link>
      <guid>https://dev.to/kingyou/why-you-love-devto-30p0</guid>
      <description>&lt;p&gt;I will say, simple, markdown, true global.&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>iproute2 vs net-tools Comparison</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Thu, 18 Dec 2025 07:44:39 +0000</pubDate>
      <link>https://dev.to/kingyou/iproute2-vs-net-tools-comparison-a7l</link>
      <guid>https://dev.to/kingyou/iproute2-vs-net-tools-comparison-a7l</guid>
      <description>&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;net-tools&lt;/th&gt;
&lt;th&gt;iproute2&lt;/th&gt;
&lt;th&gt;Winner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Maintenance&lt;/td&gt;
&lt;td&gt;Deprecated (2011)&lt;/td&gt;
&lt;td&gt;Actively maintained&lt;/td&gt;
&lt;td&gt;iproute2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Size&lt;/td&gt;
&lt;td&gt;~5MB&lt;/td&gt;
&lt;td&gt;~3MB&lt;/td&gt;
&lt;td&gt;iproute2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Slower&lt;/td&gt;
&lt;td&gt;Faster, kernel-native&lt;/td&gt;
&lt;td&gt;iproute2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Functionality&lt;/td&gt;
&lt;td&gt;Basic networking&lt;/td&gt;
&lt;td&gt;Advanced (policy routing, tc)&lt;/td&gt;
&lt;td&gt;iproute2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Common Command Replacements
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;net-tools&lt;/th&gt;
&lt;th&gt;iproute2 Equivalent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;netstat -tlnp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ss -tlnp&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;netstat -an&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ss -an&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ifconfig&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ip addr&lt;/code&gt; / &lt;code&gt;ip a&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;route -n&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ip route&lt;/code&gt; / &lt;code&gt;ip r&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;arp -a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ip neigh&lt;/code&gt; / &lt;code&gt;ip n&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;route add default gw 8.8.8.8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ip route add default via 8.8.8.8&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>tooling</category>
      <category>cli</category>
      <category>linux</category>
      <category>networking</category>
    </item>
    <item>
      <title>What `apt upgrade` Actually Does</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Wed, 17 Dec 2025 06:11:47 +0000</pubDate>
      <link>https://dev.to/kingyou/what-apt-upgrade-actually-does-35i0</link>
      <guid>https://dev.to/kingyou/what-apt-upgrade-actually-does-35i0</guid>
      <description>&lt;p&gt;&lt;code&gt;apt upgrade&lt;/code&gt; &lt;strong&gt;does not update the system version&lt;/strong&gt;. It only upgrades &lt;strong&gt;minor versions of already installed packages&lt;/strong&gt; and will not change the Debian release (e.g., from bookworm to trixie).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt upgrade: Only updates existing package versions
- bash 5.2.15 → bash 5.2.21 (bug fixes, security patches)
- btop 1.3.2 → btop 1.3.3 (new features)
- Will NOT: bookworm → Debian 13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Safety Limits&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No new packages installed&lt;/li&gt;
&lt;li&gt;No old packages removed
&lt;/li&gt;
&lt;li&gt;No dependency changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  System Version Upgrade Commands
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;apt upgrade&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Minor updates&lt;/strong&gt; (daily recommended)&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;apt full-upgrade&lt;/code&gt; / &lt;code&gt;apt-get dist-upgrade&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Major updates&lt;/strong&gt; (may add/remove packages)&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;do-release-upgrade&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Release upgrade&lt;/strong&gt; (bookworm→trixie)&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Practical Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Daily maintenance (recommended)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# When new dependencies needed (use carefully)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt full-upgrade

&lt;span class="c"&gt;# Change system version (rarely used)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="nt"&gt;-release-upgrade&lt;/span&gt;  &lt;span class="c"&gt;# Debian/Ubuntu only&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Docker Production Best Practice&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Only security patches, no compatibility breaks&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get upgrade &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get autoremove &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/lib/apt/lists/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;One Sentence Summary&lt;/strong&gt;: &lt;code&gt;apt upgrade&lt;/code&gt; = bug fixes/patches, &lt;strong&gt;NOT system version change&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>cli</category>
      <category>linux</category>
    </item>
    <item>
      <title>Discovering Hiawatha: A Lightweight Web Server for Modern PHP Deployments</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Tue, 16 Dec 2025 09:28:50 +0000</pubDate>
      <link>https://dev.to/kingyou/discovering-hiawatha-a-lightweight-web-server-for-modern-php-deployments-2chf</link>
      <guid>https://dev.to/kingyou/discovering-hiawatha-a-lightweight-web-server-for-modern-php-deployments-2chf</guid>
      <description>&lt;p&gt;Recently, I received an email from a man struggling to set up a reliable web environment for a PHP forum project similar to MyLittleForum. They were dealing with bloated Docker images, complex PHP-FPM socket permissions, and dependency issues in a Debian-based container stack. Frustrated with mainstream options like Nginx or Apache, they reached out for optimization help. That's when I first explored &lt;strong&gt;Hiawatha&lt;/strong&gt; in depth—a secure, lightweight web server I'd only vaguely heard of before. What began as troubleshooting turned into appreciation for this underappreciated tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hiawatha vs. Nginx and Apache: Key Differences
&lt;/h2&gt;

&lt;p&gt;Hiawatha, developed by Hugo Leisink, prioritizes &lt;strong&gt;security, simplicity, and PHP efficiency&lt;/strong&gt; over feature bloat. Here's how it stacks up:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature/Aspect&lt;/th&gt;
&lt;th&gt;Hiawatha&lt;/th&gt;
&lt;th&gt;Nginx&lt;/th&gt;
&lt;th&gt;Apache&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary Strength&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in exploit protection (SQLi, XSS, CSRF)&lt;/td&gt;
&lt;td&gt;High concurrency, static files&lt;/td&gt;
&lt;td&gt;Flexibility, .htaccess support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PHP Handling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native FastCGI focus (Unix sockets)&lt;/td&gt;
&lt;td&gt;fastcgi_pass config required&lt;/td&gt;
&lt;td&gt;mod_php or FastCGI (heavier)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security Model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Paranoid defaults (ExploitAttack=yes)&lt;/td&gt;
&lt;td&gt;Manual config/WAF needed&lt;/td&gt;
&lt;td&gt;Modules like mod_security extra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource Usage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tiny (~5MB compiled), container-friendly&lt;/td&gt;
&lt;td&gt;Low memory, scales horizontally&lt;/td&gt;
&lt;td&gt;Higher baseline, module-heavy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Configuration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple, declarative blocks&lt;/td&gt;
&lt;td&gt;Powerful but terse directives&lt;/td&gt;
&lt;td&gt;Verbose, .htaccess overrides&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning Curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quick for PHP devs&lt;/td&gt;
&lt;td&gt;Steep for complex rewrites&lt;/td&gt;
&lt;td&gt;Familiar but overwhelming options&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Unlike Nginx's reverse-proxy focus (excelling at static assets/high traffic but needing extra PHP tuning) or Apache's modularity (great for shared hosting but resource-hungry), Hiawatha is &lt;strong&gt;PHP-first&lt;/strong&gt;. It blocks attacks out-of-the-box without WAFs, integrates seamlessly with PHP-FPM sockets under &lt;code&gt;www-data&lt;/code&gt;, and avoids bloat—ideal for forums/CMS in Docker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ideal Use Cases and Trade-offs
&lt;/h2&gt;

&lt;p&gt;Hiawatha shines for &lt;strong&gt;PHP-centric apps&lt;/strong&gt; like MyLittleForum: drop-in security, minimal footprint, and easy virtual hosts/FastCGI setup. In my friend's case, it resolved permission mismatches and TLS lib issues effortlessly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations&lt;/strong&gt;: Smaller community, no HTTP/2 (yet), fewer enterprise plugins. Choose Nginx for massive scale/static-heavy sites, Apache for legacy/.htaccess needs. For secure, lightweight PHP? Hiawatha wins.&lt;/p&gt;

&lt;p&gt;Thanks to that email, Hiawatha's now in my toolkit. If you're deploying PHP forums or containers, it's worth trying—your security and simplicity will improve noticeably.&lt;/p&gt;

</description>
      <category>php</category>
      <category>webdev</category>
      <category>tooling</category>
      <category>security</category>
    </item>
    <item>
      <title>AWS AMI cross-region replication and sharing</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Mon, 15 Dec 2025 01:22:22 +0000</pubDate>
      <link>https://dev.to/kingyou/aws-ami-cross-region-replication-and-sharing-2811</link>
      <guid>https://dev.to/kingyou/aws-ami-cross-region-replication-and-sharing-2811</guid>
      <description>&lt;p&gt;AWS AMI cross-region replication and sharing can be achieved using the AWS Management Console, CLI, or SDK, following official procedures for copying images and modifying permissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-Region AMI Copy
&lt;/h2&gt;

&lt;p&gt;To make an AMI available in another region, copy it explicitly since AMIs are region-specific.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the EC2 console, navigate to AMIs &amp;gt; My AMIs, select the source AMI, and choose Actions &amp;gt; Copy AMI.&lt;/li&gt;
&lt;li&gt;Specify the destination region, name, description, and encryption options if applicable (e.g., select a KMS key for encrypted snapshots).&lt;/li&gt;
&lt;li&gt;AWS creates a new AMI ID in the target region; monitor progress in the console or via &lt;code&gt;describe-images&lt;/code&gt; CLI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CLI example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws ec2 copy-image --source-region us-east-1 --source-image-id ami-12345678 --name "CopiedAMI" --region us-west-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This incurs snapshot storage and minor data transfer costs but no extra copy fee.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sharing AMI with Specific Accounts
&lt;/h2&gt;

&lt;p&gt;After copying, share the target-region AMI with other AWS accounts via launch permissions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In EC2 console (target region), select the AMI, choose Actions &amp;gt; Modify Image Permissions.&lt;/li&gt;
&lt;li&gt;Add the target account's 12-digit ID (e.g., 123456789012) under Launch Permissions &amp;gt; Specific AWS accounts.&lt;/li&gt;
&lt;li&gt;Save changes; the recipient sees it under AMIs &amp;gt; Shared with me in their console.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CLI example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws ec2 modify-image-attribute --image-id ami-87654321 --launch-permission "Add=[{UserId=123456789012}]"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To revoke, use &lt;code&gt;Remove&lt;/code&gt; instead of &lt;code&gt;Add&lt;/code&gt;. For encrypted AMIs, share the KMS key too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Complete Workflow Example
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Copy AMI from us-east-1 to us-west-2, note new ID.&lt;/li&gt;
&lt;li&gt;In us-west-2, modify permissions to add recipient account.&lt;/li&gt;
&lt;li&gt;Recipient launches instances from "Shared with me" in us-west-2; they pay usage fees.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>ec2</category>
    </item>
    <item>
      <title>frozen interfaces recover from Windows</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Fri, 12 Dec 2025 07:18:28 +0000</pubDate>
      <link>https://dev.to/kingyou/frozen-interfaces-recover-from-windows-20m7</link>
      <guid>https://dev.to/kingyou/frozen-interfaces-recover-from-windows-20m7</guid>
      <description>&lt;p&gt;Completely frozen interfaces are generally hard to recover, but here are ways to revive them without directly killing the main process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check if it's a Desktop Issue First
&lt;/h2&gt;

&lt;p&gt;Sometimes it looks like a program freeze, but it's actually Explorer/desktop hanging. Restarting Explorer refreshes the UI without touching the app process.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Ctrl + Shift + Esc&lt;/code&gt; to open Task Manager.
&lt;/li&gt;
&lt;li&gt;Find "Windows Explorer".
&lt;/li&gt;
&lt;li&gt;Right-click → "Restart".
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This often revives many stuck windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Analyze Wait Chain, Kill Only Sub-Processes
&lt;/h2&gt;

&lt;p&gt;The UI might be "not responding" while waiting for a child process/thread. Use Task Manager's wait chain to target just the blocker.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + Shift + Esc&lt;/code&gt; → "Details" tab.
&lt;/li&gt;
&lt;li&gt;Right-click the frozen app's process (e.g., &lt;code&gt;xxx.exe&lt;/code&gt;) → "Analyze wait chain".
&lt;/li&gt;
&lt;li&gt;If it shows a blocking child process, select it → "End process".
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This can unblock the main process without killing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reduce Load to Give It Breathing Room
&lt;/h2&gt;

&lt;p&gt;If system-wide CPU/memory pressure causes fake hangs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Close other high-CPU/disk apps in Task Manager.
&lt;/li&gt;
&lt;li&gt;Right-click the process in "Details" → Set "Priority" to "High" temporarily.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives the app resources to finish its task and recover.&lt;/p&gt;

&lt;h2&gt;
  
  
  Last Resorts
&lt;/h2&gt;

&lt;p&gt;If nothing works after minutes, the thread is likely deadlocked—ending the process is usually necessary. No universal "force-unfreeze" exists, but the above minimizes data loss.&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>Graphs — Kids' Friendship Map Adventure!</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Thu, 11 Dec 2025 02:22:34 +0000</pubDate>
      <link>https://dev.to/kingyou/graphs-kids-friendship-map-adventure-3p01</link>
      <guid>https://dev.to/kingyou/graphs-kids-friendship-map-adventure-3p01</guid>
      <description>&lt;p&gt;Imagine your classmates holding hands in a big circle, or like a spider web connecting everyone. That's a &lt;strong&gt;graph&lt;/strong&gt;! It's like a super cool friendship map showing who knows who. Today let's draw this fun map — as easy as playing connect-the-dots!&lt;/p&gt;

&lt;h2&gt;
  
  
  Graphs: Who's Friends with Who?
&lt;/h2&gt;

&lt;p&gt;A graph is like a big piece of paper with &lt;strong&gt;dots (nodes)&lt;/strong&gt; for kids, connected by &lt;strong&gt;lines (edges)&lt;/strong&gt; for friendships!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Everyday examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Classroom seating: Tom connects to Lily, Lily to Jack&lt;/li&gt;
&lt;li&gt;Subway map: Station A links to B, B to C&lt;/li&gt;
&lt;li&gt;Social media: You follow Mia, Mia follows Sam&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Draw a simple graph:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Tom —— Lily
    |     /
    |    /
   Jack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tom, Lily, and Jack are all friends!&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Fun Ways to Play Graphs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. One-way graphs (like one-way streets):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tom → Lily → Jack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tom knows Lily, Lily knows Jack, but Jack might not know Tom back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Two-way graphs (like two-way roads):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tom ↔ Lily ↔ Jack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everyone's best buddies both ways!&lt;/p&gt;

&lt;h2&gt;
  
  
  Super Easy Code to Try (Python)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Friendship map
&lt;/span&gt;&lt;span class="n"&gt;friends&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lily&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Jack&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="c1"&gt;# Tom's friends
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lily&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Jack&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="c1"&gt;# Lily's friends
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Jack&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lily&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;   &lt;span class="c1"&gt;# Jack's friends
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# See Tom's friends
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tom&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s friends:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;friends&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  &lt;span class="c1"&gt;# ['Lily', 'Jack']
&lt;/span&gt;
&lt;span class="c1"&gt;# Find mutual friends
&lt;/span&gt;&lt;span class="n"&gt;tom_friends&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;friends&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;lily_friends&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;friends&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lily&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;mutual&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tom_friends&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lily_friends&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tom and Lily&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s mutual friend:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mutual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# {'Jack'}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Play the Friendship Map Game?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Python (or python.org online)&lt;/li&gt;
&lt;li&gt;Save code as &lt;code&gt;friendship_map.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run: &lt;code&gt;python friendship_map.py&lt;/code&gt; in command line&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What you'll see:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tom's friends: ['Lily', 'Jack']
Tom and Lily's mutual friend: {'Jack'}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add your classmates' names and find shared friends!&lt;/p&gt;

&lt;h2&gt;
  
  
  Graphs Help Everywhere in Life!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Social apps&lt;/strong&gt;: "You have 3 mutual friends"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map apps&lt;/strong&gt;: Shortest path (A→B→D is fastest)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Games&lt;/strong&gt;: Quickest way to treasure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're a friendship map master now! Draw your class web or tweak the code to find the "most popular kid." So much fun! 🕸️✨&lt;/p&gt;

</description>
      <category>basic</category>
      <category>tutorial</category>
      <category>datastructures</category>
    </item>
    <item>
      <title>Trees and Binary Trees — Kids' Family Tree Fun!</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Thu, 11 Dec 2025 02:17:53 +0000</pubDate>
      <link>https://dev.to/kingyou/trees-and-binary-trees-kids-family-tree-fun-2k14</link>
      <guid>https://dev.to/kingyou/trees-and-binary-trees-kids-family-tree-fun-2k14</guid>
      <description>&lt;p&gt;Imagine your big happy family: grandparents at the top, mom and dad in the middle, and you with your siblings at the bottom. That's a &lt;strong&gt;tree&lt;/strong&gt;! It's like a big family drawing that grows from one root with branches going down. Today let's play the family tree game — as easy as drawing with crayons!&lt;/p&gt;

&lt;h2&gt;
  
  
  Trees: The Happy Family Chart
&lt;/h2&gt;

&lt;p&gt;A tree is like your family photo album. There's one &lt;strong&gt;grandparent (root)&lt;/strong&gt; at the top, then they have &lt;strong&gt;kids&lt;/strong&gt;, and those kids have their own kids. Everything grows downward from the top!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Everyday examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;School teams: teacher (top) → group leaders → friends&lt;/li&gt;
&lt;li&gt;Computer folders: "My Computer" (top) → Pictures → My Drawings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Draw a simple tree:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;     Grandpa
    /      \
  Dad     Uncle
 /  \       \
Tom  Lily   Jack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Grandpa is the boss — you find Tom through Dad!&lt;/p&gt;

&lt;h2&gt;
  
  
  Binary Trees: Max Two Kids Per Parent
&lt;/h2&gt;

&lt;p&gt;A binary tree is a special tree where every parent has &lt;strong&gt;at most two kids&lt;/strong&gt; (one left, one right). Like families with twins!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Everyday examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Guessing games: Guess 50? Too high → try 25? Too low → try 37!&lt;/li&gt;
&lt;li&gt;Yes/no choices: Left or right path? Pick left → another left/right&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Super easy code to try (Python):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Tree like family members
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FamilyMember&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;left_kid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;  &lt;span class="c1"&gt;# Left child
&lt;/span&gt;        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;right_kid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;  &lt;span class="c1"&gt;# Right child
&lt;/span&gt;
&lt;span class="c1"&gt;# Build family tree
&lt;/span&gt;&lt;span class="n"&gt;grandpa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FamilyMember&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Grandpa&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;dad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FamilyMember&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dad&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FamilyMember&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;grandpa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;left_kid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dad&lt;/span&gt;      &lt;span class="c1"&gt;# Grandpa's left is Dad
&lt;/span&gt;&lt;span class="n"&gt;dad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;left_kid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tom&lt;/span&gt;          &lt;span class="c1"&gt;# Dad's left is Tom
&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Grandpa&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s left kid:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;grandpa&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;left_kid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Dad
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dad&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s left kid:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;left_kid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="c1"&gt;# Tom
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Play the Family Tree Game?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Get ready:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Python on your computer (or python.org online)&lt;/li&gt;
&lt;li&gt;Save code as &lt;code&gt;family_tree.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run: &lt;code&gt;python family_tree.py&lt;/code&gt; in command line&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What you'll see:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Grandpa's left kid: Dad
Dad's left kid: Tom
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add "Lily" as Dad's right kid and watch the tree grow!&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Do Trees Help in Real Life?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trees&lt;/strong&gt;: Company teams, menu picks (File → Pictures → My Art)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Binary Trees&lt;/strong&gt;: Super-fast searches (like dictionary words), game choices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're a family tree artist now! Draw your own family or tweak the code with more relatives. So much fun! 🌳✨&lt;/p&gt;

</description>
      <category>datastructures</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Stack and Queue — Kids' Toy Box Adventure!</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Thu, 11 Dec 2025 02:12:14 +0000</pubDate>
      <link>https://dev.to/kingyou/stack-and-queue-kids-toy-box-adventure-f9</link>
      <guid>https://dev.to/kingyou/stack-and-queue-kids-toy-box-adventure-f9</guid>
      <description>&lt;p&gt;Imagine you have two magic toy boxes: one where you can only add or take toys from the &lt;strong&gt;top&lt;/strong&gt;, and another like a train line where toys go in one end and out the other. Today, let's play with &lt;strong&gt;stack&lt;/strong&gt; and &lt;strong&gt;queue&lt;/strong&gt; — super fun boxes that follow simple rules, just like stacking blocks or lining up for ice cream!&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack: The Cookie Tower Game
&lt;/h2&gt;

&lt;p&gt;A stack is like building a tower of cookies. You can only put a cookie &lt;strong&gt;on top&lt;/strong&gt; or take one &lt;strong&gt;from the top&lt;/strong&gt;. The last cookie you add is the first one you eat!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-life examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stacking plates: the top one gets washed first&lt;/li&gt;
&lt;li&gt;Undo button in games: removes the last move you made&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try it with simple code (Python):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;cookie_tower&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;  &lt;span class="c1"&gt;# Empty tower
&lt;/span&gt;
&lt;span class="c1"&gt;# Add cookies (on top)
&lt;/span&gt;&lt;span class="n"&gt;cookie_tower&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chocolate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;cookie_tower&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;strawberry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tower:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cookie_tower&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# ['chocolate', 'strawberry']
&lt;/span&gt;
&lt;span class="c1"&gt;# Take cookie (from top)
&lt;/span&gt;&lt;span class="n"&gt;top_cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cookie_tower&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Eat:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_cookie&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# strawberry
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Left:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cookie_tower&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# ['chocolate']
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Rule: Last In, First Out (LIFO)&lt;/strong&gt; — like undoing your latest drawing stroke!&lt;/p&gt;

&lt;h2&gt;
  
  
  Queue: The Line-Up Train
&lt;/h2&gt;

&lt;p&gt;A queue is like kids waiting for the school bus. The first kid in line gets on &lt;strong&gt;first&lt;/strong&gt;! Toys go in at the &lt;strong&gt;back&lt;/strong&gt; and leave from the &lt;strong&gt;front&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-life examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buying tickets at the movies: first to arrive, first to enter&lt;/li&gt;
&lt;li&gt;Printer jobs: first file sent prints first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try it with simple code (Python):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;train_line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;  &lt;span class="c1"&gt;# Empty line
&lt;/span&gt;
&lt;span class="c1"&gt;# Join line (at back)
&lt;/span&gt;&lt;span class="n"&gt;train_line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Amy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;train_line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ben&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Line:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;train_line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# ['Amy', 'Ben']
&lt;/span&gt;
&lt;span class="c1"&gt;# Leave line (from front)
&lt;/span&gt;&lt;span class="n"&gt;first_out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;train_line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Next:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;first_out&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Amy
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Left:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;train_line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# ['Ben']
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Rule: First In, First Out (FIFO)&lt;/strong&gt; — fair and orderly, like recess lines!&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Play Right Now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Python on your computer (or use python.org online)&lt;/li&gt;
&lt;li&gt;Copy the code into a file called &lt;code&gt;toy_boxes.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run it: &lt;code&gt;python toy_boxes.py&lt;/code&gt; in command line&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What you'll see:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tower: ['chocolate', 'strawberry']
Eat: strawberry
Left: ['chocolate']
Line: ['Amy', 'Ben']
Next: Amy
Left: ['Ben']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Where Do They Hide in Real Life?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stack&lt;/strong&gt;: Browser back button, puzzle game moves&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Queue&lt;/strong&gt;: Supermarket checkout, video game wait lists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're now a toy box master! Add "apple" or "banana" to both and see who comes out first. So much fun — try it and share with friends! 🚂🍪&lt;/p&gt;

</description>
      <category>datastructures</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A two-dimensional array is like a big grid of boxes</title>
      <dc:creator>kingyou</dc:creator>
      <pubDate>Thu, 11 Dec 2025 01:35:02 +0000</pubDate>
      <link>https://dev.to/kingyou/a-two-dimensional-array-is-like-a-big-grid-of-boxes-2dn7</link>
      <guid>https://dev.to/kingyou/a-two-dimensional-array-is-like-a-big-grid-of-boxes-2dn7</guid>
      <description>&lt;p&gt;A two-dimensional array is like a big grid of boxes, just like a chessboard or a classroom seating chart where kids sit in rows and columns.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Is
&lt;/h2&gt;

&lt;p&gt;It's a bunch of items lined up in rows that go side to side and columns that go up and down. Each little box in the grid can hold one thing, like a number or a picture.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rows are the horizontal lines, like lines of desks.&lt;/li&gt;
&lt;li&gt;Columns are the vertical lines, like seats next to each other.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Everyday Example
&lt;/h2&gt;

&lt;p&gt;Imagine a classroom full of students.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Front row, middle row, back row—that's the rows.&lt;/li&gt;
&lt;li&gt;Window seat, middle seat, door seat—that's the columns.&lt;/li&gt;
&lt;li&gt;To pick one kid, you say "second row, third seat." That's how you find the exact box!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Versus a One-Line Array
&lt;/h2&gt;

&lt;p&gt;A one-dimensional array is like kids standing in a single straight line—just "first kid, second kid."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A 2D array makes a rectangle shape with many lines, so you can organize way more stuff neatly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  In Code (for Grown-Ups)
&lt;/h2&gt;

&lt;p&gt;You make one with rows and columns, like a 3x4 grid (that's 12 boxes).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grab stuff from it like grid—row 2, column 3 (numbers start at 0).&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>discuss</category>
      <category>basic</category>
      <category>datastructures</category>
    </item>
  </channel>
</rss>
