<?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: Fayaz</title>
    <description>The latest articles on DEV Community by Fayaz (@fm).</description>
    <link>https://dev.to/fm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F40939%2F7d1b5592-06de-4055-aa97-01cf895bebe7.gif</url>
      <title>DEV Community: Fayaz</title>
      <link>https://dev.to/fm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fm"/>
    <language>en</language>
    <item>
      <title>Grab $250 in Free Cloud VM Credits from Docker (Before Oct 31, 2026)!</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Mon, 19 Oct 2026 13:33:39 +0000</pubDate>
      <link>https://dev.to/fm/grab-250-in-free-cloud-vm-credits-from-docker-before-oct-31-2026-18m8</link>
      <guid>https://dev.to/fm/grab-250-in-free-cloud-vm-credits-from-docker-before-oct-31-2026-18m8</guid>
      <description>&lt;p&gt;Hey developers! 👋&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I stumbled upon this cool promo from Docker yesterday, and thought you'd love it too! Am I late in the party though? 🤣&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anyways, I hope it'll help someone who is building and experimenting with AI Agents, or just trying to save on cloud bills.&lt;/p&gt;

&lt;p&gt;Considering that so many people are submitting in &lt;a href="https://dev.to/challenges/hf26"&gt;Hacktoberfest Challenges&lt;/a&gt;, this promo could be really helpful for the DEV community at this very moment! ❤️&lt;/p&gt;




&lt;h2&gt;
  
  
  So, here it is:
&lt;/h2&gt;

&lt;p&gt;Docker is currently offering &lt;strong&gt;$250 in free Cloud Sandbox compute credits&lt;/strong&gt; for their new &lt;strong&gt;Docker Agentic Platform&lt;/strong&gt;, and you have until October 31, 2026 to claim and activate them!&lt;/p&gt;

&lt;p&gt;Yes, &lt;strong&gt;$250&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;You need just two steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;You'll have to create a new account from their promo page: &lt;a href="https://www.docker.com/c/sbx-promo/" rel="noopener noreferrer"&gt;https://www.docker.com/c/sbx-promo/&lt;/a&gt; &lt;em&gt;(Docker's own promo page, no affiliation with me 😂)&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then, add an active credit / debit card in the account by October 31, 2026 to receive the FREE Credits.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.docker.com/c/sbx-promo/" rel="noopener noreferrer"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F40qdvkggpp7jxzsz84s5.png" alt="docker credits $250 promo" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Catch ‼️
&lt;/h3&gt;

&lt;p&gt;It's cool promo for sure, but there's a few things you need to be aware of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deadline:&lt;/strong&gt; You must sign up and activate the promo before &lt;strong&gt;October 31, 2026&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Card Required:&lt;/strong&gt; A credit / debit card is required for the promo to be applied.&lt;/li&gt;
&lt;li&gt;I've noticed that they take $1 from the card account as an authorization hold, and give it back within a few hours. So, if you use a &lt;strong&gt;debit card&lt;/strong&gt;, make sure it at least has $1 balance.&lt;/li&gt;
&lt;li&gt;Credit is ONLY applied to new Docker Sandbox accounts. I'm not sure if having an old Docker account (but not a Sandbox account) with the same email address is a deal breaker or not!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usage Cap:&lt;/strong&gt; I didn't see any usage alert or usage cap on the platform as of yet. So, make sure to &lt;strong&gt;monitor your bill&lt;/strong&gt; every once in a while, if you don't want to get a surprise bill after your $250 credit runs out. Hope they'll add such options!&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  What is the Docker Agentic Platform?
&lt;/h3&gt;

&lt;p&gt;Instead of spinning up local containers that need to be shut down or complex cloud infrastructure that requires maintenance, Docker Sandboxes give you isolated &lt;strong&gt;microVMs with useful presets&lt;/strong&gt; running directly in the cloud.&lt;/p&gt;

&lt;p&gt;The best part?&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8s71r343p7zcz3ud5mm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8s71r343p7zcz3ud5mm.png" alt="no bill when you agent is stopped" width="799" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can set your agent to work for a few hours and then &lt;strong&gt;stop&lt;/strong&gt;. Stop means your bill is stopped too, but you still have the VM in it's previous state, saved for you to restart where it left off!&lt;/p&gt;

&lt;p&gt;This one thing stood out for me! It's not a limit, but an option, and I can see a lot of use case for this one!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; When creating a new sandbox they call this &lt;strong&gt;&lt;code&gt;stop&lt;/code&gt;&lt;/strong&gt;, but after creating the sandbox (in sandbox management) they call it &lt;strong&gt;&lt;code&gt;pause&lt;/code&gt;&lt;/strong&gt;. Apparently both does the same thing, both stops the bill, so I don't know why they used two names for the same feature!  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Other notable features are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your agents can keep working even after you close your computer.&lt;/li&gt;
&lt;li&gt;You can activate the YOLO mode (or whatever &lt;a href="https://dev.to/fm/theres-no-ai-agent-nor-any-harness-203f"&gt;buzz words they use these days&lt;/a&gt; when you give your AI Agent unrestricted permissions) without worrying about your privacy or security.&lt;/li&gt;
&lt;li&gt;Out of the box, you get pre-configured kits for popular agentic workflows and CLI tools, including (but not limited to):

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;claude&lt;/code&gt;, &lt;code&gt;codex&lt;/code&gt;, &lt;code&gt;copilot&lt;/code&gt;, &lt;code&gt;Pi Agent&lt;/code&gt;, &lt;code&gt;hermes-agent&lt;/code&gt;, &lt;code&gt;antigravity&lt;/code&gt;, &lt;code&gt;opencode&lt;/code&gt; etc.&lt;/li&gt;
&lt;li&gt;Seamless &lt;strong&gt;MCP server&lt;/strong&gt; integrations and GitHub repo access via &lt;em&gt;GitHub tokens&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;or, just a raw &lt;code&gt;shell&lt;/code&gt; environments that you can use to build almost anything you want.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Transparent Pricing: How Far Does $250 Go?
&lt;/h2&gt;

&lt;p&gt;Compute is billed per second while running, and you can choose between &lt;code&gt;linux/amd64&lt;/code&gt; and &lt;code&gt;linux/arm64&lt;/code&gt; architectures across five tier sizes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Specs&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Micro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 vCPU + 2 GB RAM&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$0.07/hr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quick scripts, MCP servers &amp;amp; small experiments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Small&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2 vCPU + 4 GB RAM&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$0.14/hr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Coding tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Medium&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4 vCPU + 8 GB RAM&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$0.28/hr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Most standard agentic workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Large&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8 vCPU + 16 GB RAM&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$0.56/hr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bigger code bases and heavier workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;XL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16 vCPU + 32 GB RAM&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$1.12/hr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Heavy builds, test suites, big monorepos etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Because the promo credits remain &lt;strong&gt;valid for 6 months after activation&lt;/strong&gt;, $250 gives you a good amount of freedom to test out the system. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1 vCPU + 2GB RAM (Micro):&lt;/strong&gt; Run a lightweight agent or MCP server &lt;strong&gt;non-stop 24/7 for ~5 months&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2 vCPU + 4GB RAM (Small):&lt;/strong&gt; Run continuously for &lt;strong&gt;2.5 months&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4 vCPU + 8GB RAM (Medium):&lt;/strong&gt; Run &lt;strong&gt;5 agents in parallel for 6 hours a day&lt;/strong&gt; for a full &lt;strong&gt;30 days&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fazpokdcj51z48iq6an0y.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fazpokdcj51z48iq6an0y.png" alt="VM options" width="800" height="656"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;Whether you are stress-testing autonomous customized coding agents like &lt;code&gt;Pi Durable&lt;/code&gt;, or just running your regular Claude, Codex, Copilot, Antigravity etc. subscriptions, this is basically free cloud compute for the next half-year.&lt;/p&gt;

&lt;p&gt;Why wait! Go claim your $250 Docker Sandbox credits here: &lt;br&gt;
&lt;a href="https://www.docker.com/c/sbx-promo/" rel="noopener noreferrer"&gt;https://www.docker.com/c/sbx-promo/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I'll most likely use this platform even after the $250 promo credits. I guess they are banking on this potential too!&lt;/p&gt;

&lt;p&gt;So, what are you planning to spin up with your credits? Let me know in the comments below! 👇&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; &lt;em&gt;this is NOT a paid post or anything like that. I just signed up for this and thought the DEV community would love it too! 🥰&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>devops</category>
      <category>programming</category>
    </item>
    <item>
      <title>There's No AI Agent, Nor Any Harness.</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Tue, 13 Oct 2026 16:06:52 +0000</pubDate>
      <link>https://dev.to/fm/theres-no-ai-agent-nor-any-harness-203f</link>
      <guid>https://dev.to/fm/theres-no-ai-agent-nor-any-harness-203f</guid>
      <description>&lt;h2&gt;
  
  
  Don't let them make you forget about software.
&lt;/h2&gt;




&lt;p&gt;There's no AI agent, nor any harness. These are just buzz words coined to take the emphasis away from software and software development.&lt;/p&gt;

&lt;p&gt;There's just software, machine learning models made using software, and software that makes good use of those models.&lt;/p&gt;

&lt;p&gt;If you divide the digital world into:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Software: deterministic programming + non-tensor data e.g. control logic, user inputs, databases, APIs, heuristics etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Machine Learning Models&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then, every digital AI system that exists today completely falls in either of those two categories, often both.&lt;/p&gt;

&lt;p&gt;There is no mystical third element!&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqtrwgu4er6fig96tqwvb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqtrwgu4er6fig96tqwvb.png" alt="no AI genie" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything running on servers (CPU / GPU) consists entirely of traditional software, and tensor-based models. Nothing more.&lt;/p&gt;

&lt;p&gt;The funny part is: most users never get even close to those models. All they use are software that use those models, and then call it Agent, Harness, etc. etc.&lt;/p&gt;

&lt;p&gt;Models don't even do any tool calls either! They only accept input (text, image, audio, video) and return output (text, image, audio, video).&lt;/p&gt;

&lt;p&gt;That's all there is to it. It's the software that makes the tool calls based on what the models return.&lt;/p&gt;

&lt;p&gt;The models don't have any control over what happens after it returns something.&lt;/p&gt;

&lt;p&gt;We do it using the software we developed, software uses those models, then the users do it based on those software.&lt;/p&gt;




&lt;p&gt;Once you understand this, use those buzz words when you need to, but every once in a while, remind people of what they are actually using under the hood.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;P.S. of course, most developers are already aware of the under the hood architecture of the whole thing. However, what most people are probably not aware of, is the fact that, even switching the word software with terms like "agent" and "harness" devalues our work to people who don't know any better. That's why, saying out loud what it is, at least some of the times, is important. 🥰 &lt;/p&gt;
&lt;/blockquote&gt;





&lt;div class="ltag__user ltag__user__id__40939"&gt;
    &lt;a href="/fm" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F40939%2F7d1b5592-06de-4055-aa97-01cf895bebe7.gif" alt="fm image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/fm"&gt;Fayaz&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/fm"&gt;A Software Engineer who strongly believes you can add immense value by knowingly implementing Software Engineering best practices even at the age of AI, and puts human life and dignity above all else.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;





</description>
      <category>ai</category>
      <category>software</category>
      <category>softwaredevelopment</category>
      <category>programming</category>
    </item>
    <item>
      <title>Birds.Quest - My Effortless Bird Watching Auto Blogging Buddy that Inspires Me to Go Back to Nature</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Mon, 12 Oct 2026 06:53:09 +0000</pubDate>
      <link>https://dev.to/fm/birdsquest-my-effortless-bird-watching-auto-blogging-buddy-that-inspires-me-to-go-back-to-nature-4iai</link>
      <guid>https://dev.to/fm/birdsquest-my-effortless-bird-watching-auto-blogging-buddy-that-inspires-me-to-go-back-to-nature-4iai</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built and Why
&lt;/h2&gt;

&lt;p&gt;I love watching birds with my &lt;em&gt;Bushnell ENGAGE 8x42&lt;/em&gt; Binoculars. I like to track some of my experiences, but I'm too lazy to write them down. I used to enter every walk into eBird APP by hand at the very beginning of my bird watching journey. It was fun for a while, but then it became like homework, and homework is the opposite of having fun while touching grass.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Birds.Quest&lt;/strong&gt; is my attempt to remove the homework. I switch on a GPS tracker, walk, and put my phone in the pocket. Later, a post about the walk shows up on my blog, written for me. That's the idea of Birds Quest.&lt;/p&gt;

&lt;p&gt;The auto generated post is not a claim that I saw these birds. Rather it's an inspiration to take the walk again, a reminder that says what's waiting for me in the nature. And since the posts will be in public, perhaps a few other people will feel the same as well!&lt;/p&gt;

&lt;p&gt;The system predicts which species &lt;em&gt;anyone&lt;/em&gt; could plausibly have met along my exact route at that time of year, then writes it up as "what you might see if you took this path". I open the draft, tick the birds I really saw (if I get time), and hit regenerate. If I don't like the words, I edit the Markdown in a side-by-side editor. For now, posts are drafts until I publish them. Eventually after I test the system enough, I plan to auto publish them to with minimum or no effort from my part.&lt;/p&gt;

&lt;h3&gt;
  
  
  Two rules shaped the whole build:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Location never leaves the server.&lt;/strong&gt; The blog and the LLM prompt contain no coordinates and no place names. The post describes birds and seasons, never where I was.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictions are not sightings.&lt;/strong&gt; Everything is a draft until I approve it, and the species list is editable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's a tool for my own walks, but it's open source. Anyone can point it at their own Traccar server and get the same effortless blog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: I didn't complete the server deployment while writing this post. Site will become live once I complete tests on the live server. Until then, the domain redirects to my DEV profile.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="ltag__user ltag__user__id__40939"&gt;
    &lt;a href="/fm" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F40939%2F7d1b5592-06de-4055-aa97-01cf895bebe7.gif" alt="fm image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/fm"&gt;Fayaz&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/fm"&gt;A Software Engineer who strongly believes you can add immense value by knowingly implementing Software Engineering best practices even at the age of AI, and puts human life and dignity above all else.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SweaDev" rel="noopener noreferrer"&gt;
        SweaDev
      &lt;/a&gt; / &lt;a href="https://github.com/SweaDev/birds.quest" rel="noopener noreferrer"&gt;
        birds.quest
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      birds.quest
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;birds.quest&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Auto-blogging from bird watching sessions. GPS tracks recorded with the Traccar Client are turned into a blog post about the birds anyone might see on that route. See &lt;a href="https://github.com/SweaDev/birds.quest/specs/" rel="noopener noreferrer"&gt;specs/&lt;/a&gt; for the spec, plan and task list.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Privacy rule:&lt;/strong&gt; no location data (coordinates, place names) may reach the LLM prompt or the public blog.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Local development&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Requirements: Node 22+, pnpm, MariaDB, and Ollama with &lt;code&gt;gemma4:e2b&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pnpm install
cp .env.example .env        &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; then fill it in, see the comments inside&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Create the databases and users (once, as the MariaDB admin):&lt;/p&gt;
&lt;div class="highlight highlight-source-sql notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;CREATE&lt;/span&gt; &lt;span class="pl-k"&gt;DATABASE&lt;/span&gt; &lt;span class="pl-en"&gt;birdsquest&lt;/span&gt; CHARACTER &lt;span class="pl-k"&gt;SET&lt;/span&gt; utf8mb4
&lt;span class="pl-k"&gt;CREATE&lt;/span&gt; &lt;span class="pl-k"&gt;DATABASE&lt;/span&gt; &lt;span class="pl-en"&gt;birdsquest_test&lt;/span&gt; CHARACTER &lt;span class="pl-k"&gt;SET&lt;/span&gt; utf8mb4;
&lt;span class="pl-k"&gt;CREATE&lt;/span&gt; &lt;span class="pl-k"&gt;DATABASE&lt;/span&gt; &lt;span class="pl-en"&gt;traccar&lt;/span&gt; CHARACTER &lt;span class="pl-k"&gt;SET&lt;/span&gt; utf8mb4;
&lt;span class="pl-k"&gt;CREATE&lt;/span&gt; &lt;span class="pl-k"&gt;USER&lt;/span&gt; '&lt;span class="pl-en"&gt;birdsquest&lt;/span&gt;'@&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;127.0.0.1&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; IDENTIFIED BY &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;...&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;;      &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;--&lt;/span&gt; app, read/write&lt;/span&gt;
&lt;span class="pl-k"&gt;CREATE&lt;/span&gt; &lt;span class="pl-k"&gt;USER&lt;/span&gt; '&lt;span class="pl-en"&gt;birdsquest_ro&lt;/span&gt;'@&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;127.0.0.1&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; IDENTIFIED BY &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;...&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;;   &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;--&lt;/span&gt; Traccar DB, read-only&lt;/span&gt;
&lt;span class="pl-k"&gt;CREATE&lt;/span&gt; &lt;span class="pl-k"&gt;USER&lt;/span&gt; '&lt;span class="pl-en"&gt;traccar_dev&lt;/span&gt;'@&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;127.0.0.1&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SweaDev/birds.quest" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Using the project
&lt;/h2&gt;

&lt;p&gt;I couldn't finish the project before taking the first bird watching journey for it. However, I designed it such that even a previous run with Traccar can be uploaded and published later.&lt;/p&gt;

&lt;p&gt;Here's a real run on a real track. I exported a GPS track from my Traccar server as a KML file: 82 positions, about 10.4 km, around 10–11 October 2026. I'm not publishing the coordinates, for the same reason the blog doesn't.&lt;/p&gt;

&lt;p&gt;The pipeline processed it like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;What happened&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Discover&lt;/td&gt;
&lt;td&gt;Traccar positions became one finished trip (more than 30 minutes, then idle).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sample&lt;/td&gt;
&lt;td&gt;The 82 positions were thinned to &lt;strong&gt;24 route points&lt;/strong&gt;, about one every 300 m.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Week&lt;/td&gt;
&lt;td&gt;10–11 October is &lt;strong&gt;week 38&lt;/strong&gt; of BirdNET's 48-week year.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Predict&lt;/td&gt;
&lt;td&gt;The GeoModel ran once, as a single batch of 24 &lt;code&gt;[lat, lon, week]&lt;/code&gt; inputs, on a plain CPU. Each species keeps its best score along the route.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter&lt;/td&gt;
&lt;td&gt;A threshold of 0.15 and a top 20 cap kept the likeliest birds.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The top 20 for that route and week:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Likelihood&lt;/th&gt;
&lt;th&gt;Species&lt;/th&gt;
&lt;th&gt;Scientific name&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;99.7%&lt;/td&gt;
&lt;td&gt;Spotted Dove&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Spilopelia chinensis&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99.4%&lt;/td&gt;
&lt;td&gt;Common Tailorbird&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Orthotomus sutorius&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99.3%&lt;/td&gt;
&lt;td&gt;Black Drongo&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Dicrurus macrocercus&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99.3%&lt;/td&gt;
&lt;td&gt;Red-vented Bulbul&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Pycnonotus cafer&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99.0%&lt;/td&gt;
&lt;td&gt;White-throated Kingfisher&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Halcyon smyrnensis&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99.0%&lt;/td&gt;
&lt;td&gt;Common Kingfisher&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Alcedo atthis&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98.8%&lt;/td&gt;
&lt;td&gt;Little Cormorant&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Microcarbo niger&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98.8%&lt;/td&gt;
&lt;td&gt;Little Egret&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Egretta garzetta&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98.7%&lt;/td&gt;
&lt;td&gt;House Crow&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Corvus splendens&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98.7%&lt;/td&gt;
&lt;td&gt;Barn Swallow&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Hirundo rustica&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98.6%&lt;/td&gt;
&lt;td&gt;Oriental Magpie-Robin&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Copsychus saularis&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98.5%&lt;/td&gt;
&lt;td&gt;Indian Pond Heron&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Ardeola grayii&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98.1%&lt;/td&gt;
&lt;td&gt;Common Myna&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Acridotheres tristis&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98.1%&lt;/td&gt;
&lt;td&gt;Eastern Cattle Egret&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Ardea coromanda&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98.0%&lt;/td&gt;
&lt;td&gt;Rufous Treepie&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Dendrocitta vagabunda&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98.0%&lt;/td&gt;
&lt;td&gt;Black Kite&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Milvus migrans&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97.9%&lt;/td&gt;
&lt;td&gt;Asian Palm Swift&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Cypsiurus balasiensis&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97.7%&lt;/td&gt;
&lt;td&gt;Rock Dove&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Columba livia&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97.6%&lt;/td&gt;
&lt;td&gt;Common Iora&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Aegithina tiphia&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97.3%&lt;/td&gt;
&lt;td&gt;Brown Shrike&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Lanius cristatus&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few things I like about this list. The kingfishers, egrets and herons suggest water nearby. The Barn Swallow and the Brown Shrike are the kind of autumn migrants you'd expect in mid-October. That's the point of feeding the model the week as well as the position: the same route in June gives a different list.&lt;/p&gt;

&lt;p&gt;From here the worker pulls each species' summary and a licensed photo from Wikipedia. Then Gemma writes the post from only the species names, those Wikipedia facts and the season ("mid October, autumn"). The photo credits and licences are added by my code, not by the model. Finally I open &lt;code&gt;/admin&lt;/code&gt;, untick the birds I didn't actually see, and regenerate.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Traccar Client ──HTTPS──&amp;gt; Caddy ──&amp;gt; Traccar ──&amp;gt; MariaDB
                                                  │ read-only
              hourly worker ──────────────────────┘
                discover → predict → enrich → generate ──&amp;gt; MariaDB
                              │         │          └─ Gemma 4 (Ollama / DigitalOcean)
                              │         └─ Wikipedia
                              └─ BirdNET GeoModel (ONNX, on the droplet)
Next.js (public blog + /admin) &amp;lt;──────── MariaDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recording:&lt;/strong&gt; the &lt;a href="https://www.traccar.org/client/" rel="noopener noreferrer"&gt;Traccar Client&lt;/a&gt; app on my phone sends positions over HTTPS to a self-hosted Traccar server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trips:&lt;/strong&gt; the worker reads Traccar's &lt;code&gt;tc_positions&lt;/code&gt; table with a read-only DB user and splits it into trips. A gap or standstill of 10 minutes ends a trip, trips under 10 minutes are ignored, and an ongoing trip is never processed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prediction:&lt;/strong&gt; &lt;a href="https://birdnet-team.github.io/geomodel/" rel="noopener noreferrer"&gt;BirdNET GeoModel&lt;/a&gt; (ONNX, FP16) runs through &lt;code&gt;onnxruntime-node&lt;/code&gt; on the CPU. It takes &lt;code&gt;[lat, lon, week]&lt;/code&gt; and returns a probability for each species. I sample the route and take the maximum per species, because "could be seen anywhere along the route" is what I actually want.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Facts:&lt;/strong&gt; Wikipedia's REST API gives a summary and an image for each bird. Images with no licence info are skipped, and the licence and credit are stored with every image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writing:&lt;/strong&gt; Gemma 4 turns species, facts and season into a post.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App:&lt;/strong&gt; Next.js 16 (App Router), TypeScript, Drizzle on MariaDB, a job queue that is just a table (&lt;code&gt;FOR UPDATE SKIP LOCKED&lt;/code&gt;), and an admin area with an argon2 login, CSRF tokens, a nonce-based CSP and a live-preview Markdown editor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests:&lt;/strong&gt; unit tests for trip splitting (9 minutes ignored, 11 accepted), week maths, the queue, sanitising and, most importantly, that no coordinates or place names reach the prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  DigitalOcean: the whole production stack
&lt;/h3&gt;

&lt;p&gt;Everything runs on &lt;strong&gt;one DigitalOcean Droplet&lt;/strong&gt; running Ubuntu 26.04. There's no managed zoo to wire up. One idempotent &lt;code&gt;deploy/install.sh&lt;/code&gt; sets up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MariaDB, native Traccar (bound to localhost, open registration switched off after my account is created), Node 22 and pnpm&lt;/li&gt;
&lt;li&gt;Caddy as the reverse proxy and automatic HTTPS for two domains: the blog, and the Traccar endpoint the phone talks to&lt;/li&gt;
&lt;li&gt;UFW with only ports 22, 80 and 443 open&lt;/li&gt;
&lt;li&gt;systemd units for the web app and an hourly worker timer&lt;/li&gt;
&lt;li&gt;a bare git repo with a &lt;code&gt;post-receive&lt;/code&gt; hook, so shipping is &lt;code&gt;git push production main&lt;/code&gt;. The hook checks out the tree, installs, migrates, builds and restarts the app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model is the other half. The droplet doesn't need a GPU, because it calls &lt;strong&gt;DigitalOcean Serverless Inference&lt;/strong&gt; for Gemma. Serverless Inference exposes an OpenAI-compatible endpoint (&lt;code&gt;https://inference.do-ai.run/v1/chat/completions&lt;/code&gt;) with a model access key, so the app has one small &lt;code&gt;fetch&lt;/code&gt;-based LLM client. The same client talks to Ollama in development, and only environment variables change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;LLM_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;digitalocean   &lt;span class="c"&gt;# or "ollama" locally&lt;/span&gt;
&lt;span class="nv"&gt;LLM_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gemma-4-31B-it    &lt;span class="c"&gt;# or "gemma4:e2b" locally&lt;/span&gt;
&lt;span class="nv"&gt;LLM_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...             &lt;span class="c"&gt;# DO model access key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The droplet, the database, the ONNX model and the inference call all sit in one provider. For a hobby project that I want to run for years, that's one bill, one dashboard and very few moving parts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemma 4: small at home, big in production
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Development:&lt;/strong&gt; Gemma 4 &lt;strong&gt;E2B&lt;/strong&gt; through Ollama on my laptop. It's small enough to iterate quickly with no API key and no network, and the pipeline test runs entirely offline. A 20-species post took about three minutes there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production:&lt;/strong&gt; Gemma 4 &lt;strong&gt;31B&lt;/strong&gt; on DigitalOcean Serverless Inference, for noticeably better prose.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some things I learned about using Gemma for this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 is a thinking model.&lt;/strong&gt; With a small token limit, the Ollama response had an empty &lt;code&gt;content&lt;/code&gt; and only a &lt;code&gt;reasoning&lt;/code&gt; field. The dev client now sends &lt;code&gt;reasoning_effort: "none"&lt;/code&gt; so the answer lands where it should.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The prompt is deliberately starved.&lt;/strong&gt; The model only sees species names, up to three Wikipedia sentences per bird and the season. It never sees a coordinate, even to "set the scene".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I don't trust the reply.&lt;/strong&gt; Wikipedia sentences that name countries, cities and so on are dropped before prompting and again from the output. A reply containing coordinates, map names or URLs is thrown away completely. The model can't add images or links either, because my code adds those.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;There's always a fallback.&lt;/strong&gt; If the LLM times out or fails the checks, a plain template writes the post, so a flaky call never means a missing entry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building It with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;Birds.Quest was built almost entirely by GitHub Copilot, and I tried to be deliberate about &lt;em&gt;how&lt;/em&gt;. I stayed in the role of the person who decides what to build and checks the result, and let Copilot do the typing. The workflow had four stages, and every stage leaves a file in the repo you can read:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;I wrote the spec by hand.&lt;/strong&gt; &lt;a href="https://github.com/SweaDev/birds.quest/blob/main/specs/SPEC-01.md" rel="noopener noreferrer"&gt;&lt;code&gt;specs/SPEC-01.md&lt;/code&gt;&lt;/a&gt; is 45 lines of my own words: the goal, the big picture, the security rule (no location data to the LLM or the blog), the tech stack and some references. Nothing in it was generated, so the intent stayed mine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copilot &lt;code&gt;/plan&lt;/code&gt; mode turned the spec into a plan.&lt;/strong&gt; &lt;a href="https://github.com/SweaDev/birds.quest/blob/main/specs/PLAN-01.md" rel="noopener noreferrer"&gt;&lt;code&gt;specs/PLAN-01.md&lt;/code&gt;&lt;/a&gt; is the approach it proposed. I read it before any code was written. Planning before coding saved me from the "agent runs off in the wrong direction for an hour" problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent mode turned the plan into a checklist.&lt;/strong&gt; &lt;a href="https://github.com/SweaDev/birds.quest/blob/main/specs/TODO-01.md" rel="noopener noreferrer"&gt;&lt;code&gt;specs/TODO-01.md&lt;/code&gt;&lt;/a&gt; is a 36-task execution tracker. It also contains the &lt;em&gt;rules for the agent itself&lt;/em&gt;, which I think is the most useful part:

&lt;ul&gt;
&lt;li&gt;Work top to bottom, one task at a time, and mark it &lt;code&gt;[~]&lt;/code&gt; while in progress and &lt;code&gt;[x]&lt;/code&gt; when verified.&lt;/li&gt;
&lt;li&gt;Make one commit per task (&lt;code&gt;git add -A &amp;amp;&amp;amp; git commit -m "&amp;lt;task id&amp;gt;: &amp;lt;summary&amp;gt;"&lt;/code&gt;) and never push. That is why the history reads like a build log, and why I could review or revert any single step.&lt;/li&gt;
&lt;li&gt;If a task turns out to be wrong or too big, edit the TODO and note why in a changelog instead of silently improvising.&lt;/li&gt;
&lt;li&gt;Install the relevant agent skills before the work they apply to. My spec required it, so Copilot installed six project-level skills for React/Next.js, TypeScript, web security and Drizzle/MySQL (&lt;code&gt;npx skills add -a github-copilot&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Never commit secrets, keep &lt;code&gt;README.md&lt;/code&gt; and &lt;code&gt;.env.example&lt;/code&gt; up to date, and never let coordinates or place names reach the prompt or the blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent mode implemented the checklist, step by step.&lt;/strong&gt; I pointed it at &lt;code&gt;TODO-01.md&lt;/code&gt; and let it work through the tasks. The security rule in the spec became a test that checks no coordinates or place names reach the prompt, so Copilot couldn't quietly break the one promise the project makes. It finished with lint, typecheck, 208 passing tests and a clean production build.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Working in parallel with a git worktree
&lt;/h3&gt;

&lt;p&gt;Agent runs take a while, and I didn't want to sit and watch. I created a &lt;strong&gt;git worktree&lt;/strong&gt; so Copilot kept building in one working directory while I wrote the first draft of this post (&lt;code&gt;POST.md&lt;/code&gt;) in another, on a separate branch. We never touched the same files, so there were no conflicts and no stashing. When the app was finished, I asked Copilot to read the generated &lt;code&gt;README.md&lt;/code&gt; and use it to enrich the draft, so the architecture and setup details in this post match what the code actually does.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup and honest notes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Claude Sonnet 5.5 with the default High thinking setting, used for planning, task breakdown and implementation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools used:&lt;/strong&gt; &lt;code&gt;/plan&lt;/code&gt; mode and Agent mode, plus project skills for Next.js, Drizzle, MySQL, TypeScript and security best practices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What worked:&lt;/strong&gt; a hand-written spec, a plan I reviewed, and a TODO with strict rules. The agent had a clear definition of "done" for every task, and I got a reviewable commit at every step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What it cost:&lt;/strong&gt; this was a lot of agent work, and I used up almost all of my monthly Copilot quota doing it. 😅 Worth it, though.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What I still did myself:&lt;/strong&gt; the idea, the spec, reviewing the plan, and the privacy decisions. I also ran a real GPS track through the pipeline and read the species list to check it made sense.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;I want the same model on my laptop and on my server.&lt;/p&gt;

&lt;p&gt;With an open-weight model I can develop offline on a 2B-class Gemma, then ship the exact same model family to production on a 31B version. I can also pin a specific model ID, so my blog's voice doesn't shift under me because someone upstream quietly retrained a hosted model. For a journal I want to keep for years, that consistency matters.&lt;/p&gt;

&lt;p&gt;The same goes for the rest of the stack. BirdNET's GeoModel is open, so I can run it myself, and Traccar is open, so my GPS history sits on my own droplet and not in someone else's cloud. That is what makes the privacy rule realistic: my location data is only used on a machine I control, and only the species list ever goes to the inference endpoint. Because every piece is open, you can fork the repo, point it at your own Traccar and run the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of DigitalOcean:&lt;/strong&gt; the whole production deployment runs on a DigitalOcean Droplet (Traccar, MariaDB, Caddy, the Next.js app, the worker timer and git-push deploys), and post generation goes through DigitalOcean Serverless Inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma 4 E2B for local development and Gemma 4 31B in production write every post, behind a prompt and output filter designed so that no location data ever reaches the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of GitHub Copilot:&lt;/strong&gt; I wrote the spec by hand, then Copilot generated the project: &lt;code&gt;/plan&lt;/code&gt; mode produced the plan, Agent mode produced a 36-task TODO with rules for the agent (one commit per task, no pushing, never leak location data), and Agent mode then implemented it task by task. I used a git worktree to write this post while Copilot kept building, then had Copilot enrich the draft from the generated README. All of it used Claude Sonnet 5.5, and it ate almost my whole monthly quota 😂. The evidence is stored in the &lt;a href="https://github.com/SweaDev/birds.quest/tree/main/specs" rel="noopener noreferrer"&gt;specs directory&lt;/a&gt; of the source code.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>automation</category>
    </item>
    <item>
      <title>Excessive Use of AI Does Not Take Away Your Ability of Writing Code, but ...</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Thu, 08 Oct 2026 17:40:29 +0000</pubDate>
      <link>https://dev.to/fm/excessive-use-of-ai-doesnt-take-away-your-ability-of-writing-code-but--429</link>
      <guid>https://dev.to/fm/excessive-use-of-ai-doesnt-take-away-your-ability-of-writing-code-but--429</guid>
      <description>&lt;p&gt;I've said this before: if you keep using AI, and don't write code yourself, you'll lose that particular skill.&lt;/p&gt;

&lt;p&gt;But I think I was not entirely correct in that conclusion! 🤔&lt;/p&gt;

&lt;p&gt;What you really lose if you keep using AI for everything, is not your skills, but your &lt;strong&gt;ability to focus&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Being able to focus, being able to use your brain deeply, i.e. being able to enter the flow state, is the true high level skill that empowers human ingenuity in every knowledge base field.&lt;/p&gt;

&lt;p&gt;If you lose that, what do you actually have?&lt;/p&gt;

&lt;p&gt;I hope you'll give it a thought! 🥰&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Does Your Favorite AI Tool's Cache Hit Mean Your Project's Uniqueness Miss?</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Mon, 05 Oct 2026 07:53:32 +0000</pubDate>
      <link>https://dev.to/fm/does-your-favorite-ai-toolss-cache-hit-mean-your-projects-uniqueness-miss-dk3</link>
      <guid>https://dev.to/fm/does-your-favorite-ai-toolss-cache-hit-mean-your-projects-uniqueness-miss-dk3</guid>
      <description>&lt;h2&gt;
  
  
  This is NOT a Challenge Submission Post 🥰
&lt;/h2&gt;

&lt;p&gt;I was checking out &lt;a href="https://dev.to/t/hf26challenge/latest"&gt;Hacktoberfest Weekend Challenge Submissions&lt;/a&gt;. I do this from time to time on DEV Challenges, even when I myself don't have time to submit my own projects.&lt;/p&gt;

&lt;p&gt;This time was no different. I didn't have time to submit my own project, but had a couple of hours to checkout other submissions.&lt;/p&gt;

&lt;p&gt;Then I was wondering, what would be my project if I had time! 🤔&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Before I go forward, I just want to spit something out! Yeah, I could just ask Claude, Antigravity, or GitHub Co-pilot to generate the idea, build the implementation, write the submission post and submit — all by themselves! But that's not me. I would've revealed that fact within my submission post, even if I had done that. Otherwise, it wouldn't be fair to other contestants!&lt;/p&gt;

&lt;p&gt;On the other hand, I wouldn't submit something, if at least some important parts of it wasn't my own. In other words, I'm not in favor of submitting completely AI generated works, even with the revealing! That's just my choice. I don't intend to pass judgement on others. If you want to do that, it's 100% up to you!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now that it's out of the way, let me go back to the original story. Where was I? Oh, I was wondering, what my own project would've been, if I had enough time for this Challenge.&lt;/p&gt;

&lt;p&gt;So I was thinking that, and just to do a bit of brainstorming, I opened Gemini. I know, most people prefer Claude these days. But for these sort of brainstorming, Gemini works well for me, especially &lt;a href="https://notebook.google.com/" rel="noopener noreferrer"&gt;Gemini Notebook, A.K.A NotebookLM&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So I asked Gemini specifically to go to the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;challenge description page&lt;/a&gt;, and cook 10 unique ideas for me.&lt;/p&gt;

&lt;p&gt;To my surprise, well, may be not a total shock, but at least I raised one of my eyebrows, when I saw Gemini's suggestions mostly matching many of the submissions! Some even almost verbatim.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwey0davtx20e1co3pmwe.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwey0davtx20e1co3pmwe.png" alt="raised eyebrow" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I thought, well, it's Google. So, perhaps Gemini already indexed those posts, right?&lt;/p&gt;

&lt;p&gt;Then I extracted all the submission entries URLs myself, and then asked Gemini again to check those posts, and suggest 5 unique project ideas that are different enough from those submissions.&lt;/p&gt;

&lt;p&gt;This worked. I'm pretty sure these 5 ideas were unique up until that point! I was already sleepy at that point, so I went to sleep without going further down the rabbit hole.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm6icr5oawbi3oghc9cf7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm6icr5oawbi3oghc9cf7.png" alt="sleepy seal" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next morning, which is the date of posting this, after some routine works, being only few hours away from submission deadline, I checked for new submissions again.&lt;/p&gt;

&lt;p&gt;And this time I got the shock! This time I noticed quite a few posts, very close to what Gemini suggested me, which were unique up to last night!&lt;/p&gt;

&lt;p&gt;How did that happen?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Did Gemini suggest me the same thing some other people were working on, or brainstorming with it (but didn't yet submit)?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did they come up with those ideas all by themselves, and it was just a coincidence that AI suggested me the same before they made those posts public?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did the frontier labs share user data among themselves, and hence people keep getting LLM cache hit, when they work with AI tools with similar things?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have no idea. But it's too much of a coincidence to just let go!&lt;/p&gt;

&lt;p&gt;I remember the incident that happened a while ago, between a mathematician and OpenAI, about OpenAI's frontier model solving Navier-Stokes Millennium Prize Problem.&lt;/p&gt;

&lt;p&gt;To summarize the incident somewhat, the mathematician claimed he was using ChatGPT with his work. So the LLM just used his research data, and regurgitated with some of it's own variations, and OpenAI just took it as the LLM's own invention.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/aspmNhKAFMc" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If I consider that everyone is being honest in such incidents, then this is the only logical conclusion I can think of: when we are using AI, AI is using our prompts, works, conclusions, and spreading them around as either cache hit or part of it's training data, killing our own intellectual human uniqueness in the process.&lt;/p&gt;

&lt;p&gt;What does that mean if my conclusion is correct?&lt;/p&gt;

&lt;p&gt;I don't know. I leave the decision up to you. But I know exactly what I'm going to do from now on. But that's a post for another day. 🥰&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note:&lt;/em&gt;&lt;/strong&gt; If you find a lot of spelling and grammar mistakes in this post, that's because I just typed it all in one go, without bothering to check with any AI tool. So, if something is unclear in the post, please just quote it and ask me in the comment. 🙏🏼&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>softwaredevelopment</category>
      <category>programming</category>
      <category>devchallenge</category>
    </item>
    <item>
      <title>So, We Don't Need to Learn or Use Basic Math / Arithmetic Anymore? 😜</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Thu, 01 Oct 2026 13:41:23 +0000</pubDate>
      <link>https://dev.to/fm/we-dont-need-to-learn-basic-math-arithmetic-anymore-3e6b</link>
      <guid>https://dev.to/fm/we-dont-need-to-learn-basic-math-arithmetic-anymore-3e6b</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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0czxsxsw1llvmcfkgx5y.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0czxsxsw1llvmcfkgx5y.png" alt="simple calculator and other devices" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Have you heard about calculators?&lt;/p&gt;

&lt;p&gt;Do you know that calculators can do addition, subtraction, multiplication, division, and some other basic math fast and without any errors?&lt;/p&gt;

&lt;p&gt;The frontier calculators, a.k.a. scientific calculators, can do even more complex math, super fast and error-free! You won't even have to review them anymore. You'll just have to know how to &lt;strong&gt;"prompt them"&lt;/strong&gt; properly!&lt;/p&gt;

&lt;p&gt;And then there's something called computers! The government just put a ban on them, so only a specific set of people can use them. Those are the next level. They can do all sorts of calculations super fast, using some &lt;strong&gt;&lt;em&gt;skill files&lt;/em&gt;&lt;/strong&gt; called programming.&lt;/p&gt;

&lt;p&gt;Seriously, why do people bother to learn math anymore? 😜&lt;/p&gt;




&lt;p&gt;Sounds familiar? 🤣&lt;/p&gt;




&lt;p&gt;If so, then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Do not&lt;/strong&gt; stop learning the fundamentals of programming.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do not&lt;/strong&gt; stop writing code by hand.&lt;/li&gt;
&lt;li&gt;Use AI if it is useful, but not as a replacement for programming.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>softwareengineering</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Feeling Burnt Out? May Be You Should Read This! ❤️‍🩹</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Mon, 28 Sep 2026 08:24:59 +0000</pubDate>
      <link>https://dev.to/fm/feeling-burnt-out-may-be-you-should-read-this-2o8e</link>
      <guid>https://dev.to/fm/feeling-burnt-out-may-be-you-should-read-this-2o8e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note:&lt;/em&gt;&lt;/strong&gt; I started writing this as a comment to one of &lt;a class="mentioned-user" href="https://dev.to/embernoglow"&gt;@embernoglow&lt;/a&gt;'s &lt;a href="https://dev.to/embernoglow/i-burned-out-now-i-dont-know-how-to-start-again-1h79"&gt;posts&lt;/a&gt;, but it became too long.&lt;/p&gt;

&lt;p&gt;So I'm posting it as an article instead.&lt;br&gt;
Hope it'll help someone in need. ❤️&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Hey You! Whoever you are!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Know that you are not alone.&lt;/li&gt;
&lt;li&gt;Know that you are important.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you are feeling burnt out again and again, and nothing you try seems to help, then perhaps you need to find the true meaning of life, your reason for being.&lt;/p&gt;

&lt;p&gt;Perhaps you need to take a spiritual journey, a journey within.&lt;/p&gt;

&lt;p&gt;Until you find the true meaning of your life, and align your work with that meaning, no matter what you try, you'll keep burning out.&lt;/p&gt;

&lt;p&gt;The true meaning of life will give you a kind of motivation that will never run out.&lt;/p&gt;

&lt;p&gt;But I can't help you with this, I wish I could, but I can't.&lt;br&gt;
Only you can help yourself.&lt;/p&gt;




&lt;p&gt;I can only share what helps me when I feel down.&lt;/p&gt;

&lt;p&gt;First, I try to become comfortable, as much as I can, depending on the situation. Eat something sweet, lie down, take a walk in the woods — whatever helps.&lt;/p&gt;

&lt;p&gt;Sometimes even crying helps!&lt;br&gt;
Yes, even grown men cry. There's no shame in that.&lt;/p&gt;

&lt;p&gt;But that is only the beginning.&lt;br&gt;
Most people stop there. They think the job is done, but that's where they are wrong.&lt;/p&gt;

&lt;p&gt;Because the next step is the most important step.&lt;/p&gt;

&lt;p&gt;Once I'm comfortable enough from the first step, I dive deep into my inner self.&lt;/p&gt;

&lt;p&gt;Then I contemplate about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who I am, really!&lt;/li&gt;
&lt;li&gt;The reality of this life: we are born, we live for a while, then we die.&lt;/li&gt;
&lt;li&gt;I try to feel all of it.&lt;/li&gt;
&lt;li&gt;Then I try to find the meaning in it.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;What is the point, if it all ends in a short while!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then, I remind myself of what I've already found in this short journey of mine, called life:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I found meaning in taking care of my mother, who is a cancer survivor.&lt;/li&gt;
&lt;li&gt;I found meaning in helping others.&lt;/li&gt;
&lt;li&gt;I found meaning in Sufi poetry. Poetry of &lt;a href="https://en.wikipedia.org/wiki/Rumi" rel="noopener noreferrer"&gt;Rumi&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I found meaning in prayer.&lt;/li&gt;
&lt;li&gt;I found meaning in one true God who created everything.&lt;/li&gt;
&lt;li&gt;I found meaning in trying to connect to God, through which connection our essence lives on.&lt;/li&gt;
&lt;li&gt;And yes, I found meaning in continuing what I do: programming, writing, reading, connecting with people. Because it activates my mind, it helps me sustain this life, my family, and others too. However little, in whatever way!&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If finding meaning is too difficult because of a tough situation, I try to find a little inner peace, but not instant enjoyment or instant gratification.&lt;/p&gt;

&lt;p&gt;Instant gratification burns further. On the other hand, inner peace is a kind of happiness that gives spiritual energy.&lt;/p&gt;

&lt;p&gt;I find inner peace in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;looking at my loved ones with deep care.&lt;/li&gt;
&lt;li&gt;helping other people, even a little bit.&lt;/li&gt;
&lt;li&gt;looking at the innocence of a child who is laughing, playing and passing a worry free time.&lt;/li&gt;
&lt;li&gt;taking a deep breath and feeling alive!&lt;/li&gt;
&lt;li&gt;thinking and deeply believing that this universe, my life and everything in between must be connected somehow, and all these must not be in vein, even if I don't feel the connection at times.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Once I find a little inner peace, even for a moment, the next step is gratitude.&lt;/p&gt;

&lt;p&gt;I'm grateful for this momentary inner peace. I'm grateful for this experience called life.&lt;/p&gt;

&lt;p&gt;I thank my creator — the creator of everything that exists. I thank my parents, my wife, my siblings, my friends ... I thank everyone from the bottom of my heart, for being there for me.&lt;/p&gt;

&lt;p&gt;Of course, I don't just go and tell them that in that instant. That's for another time. This gratitude is in my heart, for what I feel deep within.&lt;/p&gt;




&lt;p&gt;In your case, you need to thank whoever you feel this gratitude to,  deep within yourself, from the bottom of your heart — to God, to the Universe, to your parents, or whoever fills your heart at that moment.&lt;/p&gt;

&lt;p&gt;Feel it. Really feel it.&lt;/p&gt;

&lt;p&gt;Gratitude is the beginning of a spiritual journey that'll help you find the true meaning of &lt;strong&gt;&lt;em&gt;your&lt;/em&gt;&lt;/strong&gt; life. That meaning of life will provide you the energy that'll never burn out, or at least, it'll continue to fill you up whenever there is a need for it.  &lt;/p&gt;

&lt;p&gt;But as I said before, I can't really help you with this.&lt;br&gt;
Because mere words are never enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  You'll have to take this journey yourself.
&lt;/h2&gt;

&lt;p&gt;I can't promise you that the journey will be easy.&lt;/p&gt;

&lt;p&gt;In fact, spiritual journeys are often difficult, painful even. Leaving those bad habits, instant gratifications, wasting of time — are going to take their toll.&lt;/p&gt;

&lt;p&gt;I can promise you one thing though: if you take this journey, it'll be fulfilling.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkm3lh8q4vhvlvl3odmdm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkm3lh8q4vhvlvl3odmdm.png" alt="wound is the place where light enters you" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you read this far, perhaps it helped you a little, perhaps it didn't, but I deeply hope and pray that you'll find your path soon! ❤️‍🩹&lt;/p&gt;

&lt;p&gt;I wish you all the best! 🥰&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>help</category>
      <category>programming</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>BoonFest: The Anti-Sloth Game Where Generosity Means Survival!</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Mon, 07 Sep 2026 06:37:45 +0000</pubDate>
      <link>https://dev.to/fm/boonfest-the-anti-sloth-game-where-generosity-means-survival-3pg8</link>
      <guid>https://dev.to/fm/boonfest-the-anti-sloth-game-where-generosity-means-survival-3pg8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-09-03"&gt;Weekend Challenge: Generosity Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;BoonFest&lt;/strong&gt;: a web game designed to awaken your inner generosity.&lt;/p&gt;

&lt;p&gt;Most games reward you for conquest, killing, speeding, hoarding, stacking power, and looking out only for yourself. In BoonFest, that exact mindset is a death sentence. Here, to survive, you'll have to be generous, productive, and mindful.&lt;/p&gt;

&lt;p&gt;Most games are designed to be addictive—promoting endless sloth. BoonFest is built to create balance between healthy entertainment and your real life, with built-in playtime restrictions. &lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://boonfest.ai.studio/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;boonfest.ai.studio&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff73iumb2tuf77b0q2ibj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff73iumb2tuf77b0q2ibj.png" alt="BoonFest screenshot" width="800" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SweaDev" rel="noopener noreferrer"&gt;
        SweaDev
      &lt;/a&gt; / &lt;a href="https://github.com/SweaDev/BoonFestDemo" rel="noopener noreferrer"&gt;
        BoonFestDemo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      BoonFest Demo
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;BoonFest&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;An anti-sloth, pro-social web game balancing capital accumulation, self-cultivation, and societal welfare through generative altruism.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌟 Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;BoonFest&lt;/strong&gt; challenges players to resist deceptive short-cuts and predatory economic traps while navigating the delicate tri-fold balance between personal capital, self-mastery, and civic altruism.&lt;/p&gt;
&lt;p&gt;As you navigate real-time economic turns, entropy steadily degrades your societal environment—visualized dynamically by your world's &lt;strong&gt;Ecosystem Hue&lt;/strong&gt; (shifting from verdant green towards catastrophic crimson red). Only by cultivating your core attributes and funneling personal wealth into pro-social &lt;strong&gt;Boon&lt;/strong&gt; projects can you stabilize the world, conquer entropy, and achieve enduring legacy.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🎮 Gameplay Details &amp;amp; Mechanics&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;1. The Three Pillars of Self-Cultivation&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Your attributes dictate your capacity for honest productivity, physical resilience, and altruistic impact:&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pillar&lt;/th&gt;
&lt;th&gt;Symbol&lt;/th&gt;
&lt;th&gt;Primary Function&lt;/th&gt;
&lt;th&gt;Strategic Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mind&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🧠&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Labor Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multiplies net Credit yields from honest &lt;strong&gt;Earn&lt;/strong&gt; cards. Higher Mind unlocks high-tier intellectual and architectural contracts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚡&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Entropy Dampening&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bolsters physical and&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SweaDev/BoonFestDemo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  A Little Background
&lt;/h2&gt;

&lt;p&gt;This Weekend Challenge is specifically interesting for me!&lt;/p&gt;

&lt;p&gt;DEV did something unique for this one: &lt;a class="mentioned-user" href="https://dev.to/heyitsjem"&gt;@heyitsjem&lt;/a&gt;, on behalf of The DEV Team, asked the DEV community &lt;a href="https://dev.to/devteam/what-should-the-next-weekend-challenge-theme-be-3mha"&gt;what the next Weekend Challenge theme&lt;/a&gt; should be.&lt;/p&gt;

&lt;p&gt;Some cool suggestions came up from the community, but to my pleasant surprise, DEV decided to run with &lt;strong&gt;generosity&lt;/strong&gt;, which was inspired by my own &lt;strong&gt;world peace&lt;/strong&gt; suggestion!&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7yo2rh40m3mgsqilzkkd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7yo2rh40m3mgsqilzkkd.png" alt="world peace theme suggestion" width="799" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since the theme this time was inspired by my suggestion, I thought I must participate in this one, as an appreciation for The DEV Team's kind consideration! 🙏🏼&lt;/p&gt;

&lt;p&gt;Initially I wanted to develop a donation organization finding web app for this Challenge, but &lt;a class="mentioned-user" href="https://dev.to/sizzlebop"&gt;@sizzlebop&lt;/a&gt; beat me to it with her &lt;a href="https://dev.to/sizzlebop/sprinkle-finding-a-better-home-for-the-things-we-donate-24m4"&gt;Sprinkle Project&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Well, this is &lt;strong&gt;generosity&lt;/strong&gt; challenge, so I'm just grateful that someone already did what I wanted to do! 🥰&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faedktcayn99xk928qp0x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faedktcayn99xk928qp0x.png" alt="expressing my gratitude" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;As I've already mentioned, the idea generation took too long. So I didn't have enough time to manually develop the game. I had multiple options to develop the game using AI. I chose &lt;a href="https://aistudio.google.com/" rel="noopener noreferrer"&gt;AI Studio&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I've used AI Studio before, but only for checking out, never for a complete app with deployment. So, I thought, why don't I try it out and see how it goes!&lt;/p&gt;

&lt;p&gt;Turned out, it was an excellent decision. Without AI Studio, I wouldn't be able to complete this demo.&lt;/p&gt;

&lt;p&gt;Suffice it to say, with my existing Google AI subscription ($19.99/mo), I ran out of my daily limit fast. I had to use some prepaid Gemini API Credits. But I'm glad I could complete the demo in less than $10 API expense. Thanks goes to the Google AI Team! 🥰&lt;/p&gt;

&lt;h3&gt;
  
  
  The Game Idea
&lt;/h3&gt;

&lt;p&gt;Almost immediately after replying to &lt;a class="mentioned-user" href="https://dev.to/sizzlebop"&gt;@sizzlebop&lt;/a&gt;'s comment, I thought, hey, why don't I develop a generosity game, where giving means winning!&lt;/p&gt;

&lt;p&gt;That idea stuck to my brain, but forming the actual game logic where generosity wins, proved to be more difficult than I initially thought. That's normal though, most games we play these days translates taking to winning, not the other way round. On the other hand, endlessly giving without an "End Game" is not really &lt;strong&gt;fun&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;So, I had to take the healthier alternative to &lt;strong&gt;&lt;em&gt;taking&lt;/em&gt;&lt;/strong&gt;, which is apparently not fun, and make &lt;strong&gt;&lt;em&gt;generosity&lt;/em&gt;&lt;/strong&gt; interesting in game play.&lt;/p&gt;

&lt;p&gt;I accepted my inner challenge, and started brainstorming with literally pen and paper.&lt;/p&gt;

&lt;p&gt;So, yeah, the entire game logic is 100% original. This demo is only a partial implementation, as the idea generation phase took too long to actually implement the entire game within this short challenge window.&lt;/p&gt;

&lt;h3&gt;
  
  
  Naming BoonFest
&lt;/h3&gt;

&lt;p&gt;As I was working with the game play logic, multiple name idea came to my mind. &lt;strong&gt;BoonFest&lt;/strong&gt; was one of the first few names, but I didn't really expect the .com version of the domain name to be available. So I was really glad to be able to secure &lt;a href="https://boonfest.com" rel="noopener noreferrer"&gt;BoonFest.com&lt;/a&gt; for the future of the game!&lt;/p&gt;

&lt;h3&gt;
  
  
  Game Development with AI Studio
&lt;/h3&gt;

&lt;p&gt;After the idea generation, I used AI Studio for game development and Publishing.&lt;/p&gt;

&lt;p&gt;My development experience with AI Studio was surprisingly good. The whole process from start to publish was very smooth.&lt;/p&gt;

&lt;p&gt;I've implemented Gemini API to generate some in-game content, and with AI Studio it was just a single prompt and then securely adding my Gemini API Key from the Settings panel.&lt;/p&gt;

&lt;p&gt;All the in game AI content can be changed from Admin panel, so it's not a simple AI generation implementation. AI Studio did it without any issues at all.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;Along with contesting for the overall challenge winner, I'm also applying for the &lt;strong&gt;Best Use of Google AI&lt;/strong&gt; prize category.&lt;/p&gt;




&lt;p&gt;Hope you'll like this brand new game.&lt;/p&gt;

&lt;p&gt;Please stay tuned for future updates once the Challenge judges finalize their decisions.&lt;/p&gt;

&lt;p&gt;Stay blessed! 😇&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>ai</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>I Won a Writing Challenge That I Almost Didn't Publish!</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Mon, 24 Aug 2026 17:24:53 +0000</pubDate>
      <link>https://dev.to/fm/i-won-a-writing-challenge-that-i-almost-didnt-publish-2cn0</link>
      <guid>https://dev.to/fm/i-won-a-writing-challenge-that-i-almost-didnt-publish-2cn0</guid>
      <description>&lt;p&gt;All praise to almighty God, and thanks to Google and the DEV Team, a while back, I won the &lt;a href="https://dev.to/fm/the-2026-agentic-era-with-gemini-agent-platform-surviving-cascading-failures-and-runaway-cloud-1gbk"&gt;Google Cloud NEXT '26 Writing Challenge&lt;/a&gt;!&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/devteam/congrats-to-the-google-cloud-next-26-writing-challenge-winners-5990" class="crayons-story__hidden-navigation-link"&gt;Congrats to the Google Cloud NEXT '26 Writing Challenge Winners!&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/devteam/congrats-to-the-google-cloud-next-26-writing-challenge-winners-5990" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Google Cloud NEXT '26 Winners&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/devteam"&gt;
            &lt;img alt="The DEV Team logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1%2Fd908a186-5651-4a5a-9f76-15200bc6801f.jpg" class="crayons-logo__image" width="800" height="800"&gt;
          &lt;/a&gt;

          &lt;a href="/jess" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" alt="jess profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jess" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jess Lee
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jess Lee
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
                &lt;img alt="Community Curator" class="community-leader-icon" src="https://assets.dev.to/assets/community-leader-icon-b72c9e74eff54916e5c46c962f47ba40c9f611a71f8b157511f9613f69c0001b.svg" width="20" height="20"&gt;
              
              &lt;div id="story-author-preview-content-3627978" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/jess" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jess Lee&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/devteam" class="crayons-story__secondary fw-medium"&gt;The DEV Team&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/devteam/congrats-to-the-google-cloud-next-26-writing-challenge-winners-5990" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 7&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/devteam/congrats-to-the-google-cloud-next-26-writing-challenge-winners-5990" id="article-link-3627978"&gt;
          Congrats to the Google Cloud NEXT '26 Writing Challenge Winners!
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cloudnextchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cloudnextchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/googlecloud"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;googlecloud&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/devteam/congrats-to-the-google-cloud-next-26-writing-challenge-winners-5990" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;51&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/devteam/congrats-to-the-google-cloud-next-26-writing-challenge-winners-5990#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              18&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;A big congrats to all the other winners of this challenge. 🥳&lt;/p&gt;

&lt;p&gt;The "interesting" thing is, I &lt;em&gt;almost&lt;/em&gt; didn't even publish the post! 😬&lt;/p&gt;

&lt;p&gt;I was running behind schedule and I still had too many things to say. I wanted the post to be perfect! But then I remembered the saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Perfection&lt;/strong&gt; is the enemy of &lt;strong&gt;good enough&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I focused on a specific topic, and completed writing right around 20 minutes before the deadline.&lt;/p&gt;

&lt;p&gt;And just when I wanted to press the &lt;strong&gt;Publish&lt;/strong&gt; button, I thought, why don't I check the Challenge page and see how much time I have left.&lt;/p&gt;

&lt;p&gt;To my utter shock, the DEV &lt;a href="https://dev.to/challenges/google-cloud-next-2026-04-22"&gt;Challenge page&lt;/a&gt; was showing the status: &lt;strong&gt;ENDED&lt;/strong&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%2Fj5lod90dfy3gg47p7sna.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%2Fj5lod90dfy3gg47p7sna.png" alt="Challenge Ended Status" width="800" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For a minute there, I thought I must have miscalculated the deadline based on my time zone, but then I got my confidence back after double-checking the deadline and timezone conversion.&lt;/p&gt;

&lt;p&gt;At that point, there was no time to confirm with the DEV Team, so I just published the post first, and then wrote a comment on the Challenge announcement post. &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%2F3amxum7l2yd9z05422gx.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%2F3amxum7l2yd9z05422gx.png" alt="Conversation with Dev management" width="800" height="874"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Long story short: it was showing me the &lt;strong&gt;ENDED&lt;/strong&gt; status because of a bug.&lt;/p&gt;

&lt;p&gt;Thanks &lt;a class="mentioned-user" href="https://dev.to/jess"&gt;@jess&lt;/a&gt; for those quick responses! 🥰&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Phew! Man, was I ever glad that I went through with publishing the post!&lt;/p&gt;

&lt;p&gt;Obviously, after becoming one of the winners, I was totally thrilled, and in a way, gained a few pleasant lifelong lessons:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Never give up!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ship, even if it's not perfect.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hope my story will motivate others to publish more.&lt;/p&gt;




&lt;p&gt;If you liked the post, here's another real-life story where I learned a few more lifelong lessons - and this time, the hard way!&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/fm/why-my-biggest-embarrassment-was-also-one-of-my-greatest-learning-experiences-in-programming-3o0c" class="crayons-story__hidden-navigation-link"&gt;Why my biggest embarrassment was also one of my greatest learning experiences in Programming!&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/fm/why-my-biggest-embarrassment-was-also-one-of-my-greatest-learning-experiences-in-programming-3o0c" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Summer Bug Smash: Smash Stories 🐛🛹&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/fm" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F40939%2Fbe6919da-52a1-432b-9657-8047d0a50c4e.gif" alt="fm profile" class="crayons-avatar__image" width="100" height="100"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/fm" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Fayaz
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Fayaz
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
                
              
              &lt;div id="story-author-preview-content-4430137" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/fm" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F40939%2Fbe6919da-52a1-432b-9657-8047d0a50c4e.gif" class="crayons-avatar__image" alt="" width="100" height="100"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Fayaz&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/fm/why-my-biggest-embarrassment-was-also-one-of-my-greatest-learning-experiences-in-programming-3o0c" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 24&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/fm/why-my-biggest-embarrassment-was-also-one-of-my-greatest-learning-experiences-in-programming-3o0c" id="article-link-4430137"&gt;
          Why my biggest embarrassment was also one of my greatest learning experiences in Programming!
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/bugsmash"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;bugsmash&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/performance"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;performance&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/fm/why-my-biggest-embarrassment-was-also-one-of-my-greatest-learning-experiences-in-programming-3o0c" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;17&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/fm/why-my-biggest-embarrassment-was-also-one-of-my-greatest-learning-experiences-in-programming-3o0c#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              6&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            10 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;






&lt;div class="ltag__user ltag__user__id__40939"&gt;
    &lt;a href="/fm" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F40939%2F7d1b5592-06de-4055-aa97-01cf895bebe7.gif" alt="fm image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/fm"&gt;Fayaz&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/fm"&gt;A Software Engineer who strongly believes you can add immense value by knowingly implementing Software Engineering best practices even at the age of AI, and puts human life and dignity above all else.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>motivation</category>
      <category>writing</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why my biggest embarrassment was also one of my greatest learning experiences in Programming!</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Mon, 24 Aug 2026 06:29:53 +0000</pubDate>
      <link>https://dev.to/fm/why-my-biggest-embarrassment-was-also-one-of-my-greatest-learning-experiences-in-programming-3o0c</link>
      <guid>https://dev.to/fm/why-my-biggest-embarrassment-was-also-one-of-my-greatest-learning-experiences-in-programming-3o0c</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/bugsmash"&gt;DEV's Summer Bug Smash: Smash Stories&lt;/a&gt; powered by &lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The background
&lt;/h2&gt;

&lt;p&gt;This happened almost twenty years ago, in the year 2006, back in my undergraduate days, when I was still studying CSE - I participated in my first and only &lt;a href="https://en.wikipedia.org/wiki/International_Collegiate_Programming_Contest" rel="noopener noreferrer"&gt;International Collegiate Programming Contest&lt;/a&gt; (ICPC), which was then known as &lt;a href="https://en.wikipedia.org/wiki/ACM_ICPC_Dhaka_Site#2006" rel="noopener noreferrer"&gt;ACM-ICPC&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I was, and still am, one of those programmers who like to take it slow, with full clarity, and try to completely grasp the concepts all by myself before jumping into implementation. As a result, I never was competitive programming contest material!&lt;/p&gt;

&lt;p&gt;So then, why did I participate in that contest?&lt;/p&gt;

&lt;p&gt;Well, one fine morning, I was working on a project in our university's computer lab, and two of my friends came to me and said, "We want to participate in the upcoming ICPC that our university is hosting, and we want you to join us!"&lt;/p&gt;

&lt;p&gt;They even wanted to make me the team lead! I was hesitant at first, but then I thought, "Why not? It will be a good learning experience!" So I agreed to join them. Except for the team lead part, of course, that would have been a bit too much for me, given my lack of interest in competitive programming.&lt;/p&gt;

&lt;h2&gt;
  
  
  A bit more about my own background
&lt;/h2&gt;

&lt;p&gt;I've never publicly shared this story before, especially because of the embarrassing part of it, but I think it's way past time to share it now, as I feel that it can be a good learning experience for others.&lt;/p&gt;

&lt;p&gt;To make sure readers understand the context of my embarrassment, I need to give a bit more background about my programming experiences up until that point.&lt;/p&gt;

&lt;p&gt;I started my Bachelor in Computer Science and Engineering (CSE) in 2002, at &lt;a href="https://www.northsouth.edu/" rel="noopener noreferrer"&gt;North South University&lt;/a&gt; and I was introduced to programming only in the first semester. Before that, I had no idea what programming was, but I found it interesting from the very first day!&lt;/p&gt;

&lt;p&gt;C was my first programming language, but it was only part of a single credit lab course, which ended merely in three lab sessions, one and a half hours long each! So my real taste in programming began in the second semester, with the course named "Introduction to Object Oriented Programming in Java" - if my memory serves me right.&lt;/p&gt;

&lt;p&gt;Around the middle of that second semester, there was an intra-university solo programming contest, and I participated in it. I was able to solve three out of six problems, which landed me third place in that contest! I was very happy about that, and it gave me a lot of confidence in my programming skills. But after that, outside my regular course curriculum, I became more interested in math, robotics and software development in general. For some reason, competitive programming never really attracted me that much.&lt;/p&gt;

&lt;p&gt;That said, since I was attending that ICPC team contest anyway, I did try to prepare for it for a while. Part of that preparation was going through some problem sets from previous contests. As a CSE student, I was already familiar with most of the algorithms that were needed to solve those problems, so all I needed to do was to practice enough problems to be able to solve them quickly during the contest. We didn't get much time to prepare, so we thought it would be best if we participated in an actual contest before the main event.&lt;/p&gt;

&lt;p&gt;Fortunately for us, there was an online programming contest hosted by &lt;a href="https://www.topcoder.com/" rel="noopener noreferrer"&gt;Topcoder&lt;/a&gt; that was happening around that time. That was a solo contest also known as SRM (Single Round Match). All three of us participated in that contest, and all of us were able to solve two out of three problems individually, which was a good result for us.&lt;/p&gt;

&lt;p&gt;So, from that preparation, we were expecting to solve at least 50-60% of the problems in the main contest! We weren't expecting to win, but we were hoping to do well enough to be recognized!&lt;/p&gt;

&lt;p&gt;As a straight-A student, that was a very basic expectation for me, and I was very confident that I would be able to achieve that. But as it turned out, I was in for a big surprise!&lt;/p&gt;

&lt;h2&gt;
  
  
  The embarrassment
&lt;/h2&gt;

&lt;p&gt;Now that all the background is out of the way, let me get to the embarrassing part of this story:&lt;/p&gt;

&lt;p&gt;We ended up solving ZERO problems in the main contest!&lt;/p&gt;

&lt;p&gt;Yes, you read that right - ZERO problems! We were not able to solve a single problem in that contest, and we ended up at the very bottom of the scoreboard!&lt;/p&gt;

&lt;h2&gt;
  
  
  Doomsday!
&lt;/h2&gt;

&lt;p&gt;Every religion has a doomsday, and if programming were a religion, then that contest was our doomsday!&lt;/p&gt;

&lt;p&gt;As I said before, I thought it would be a good learning experience, and I was right about that eventually, but none of us were expecting this sort of devastating learning experience!&lt;/p&gt;

&lt;p&gt;Out of ten problems, we were able to solve none! We were not even able to solve the easiest problem in that contest, which was a very basic math problem. I still remember that problem somewhat, and I can still solve it in my head without much difficulty. But during that contest, we were not able to solve any of them!&lt;/p&gt;

&lt;p&gt;I clearly remember, the moment I finished reading problem A (the very first problem), I knew that was the easiest problem in the contest.&lt;/p&gt;

&lt;p&gt;In every ICPC, usually there's one problem that is very easy, as far as programming contests go, and it's expected that most teams will be able to solve that problem. The first one is not always the easiest, but in most cases, it is.&lt;/p&gt;

&lt;p&gt;So I started solving it and probably within the first 5-6 minutes, I submitted my solution. But to my surprise, it was rejected! And the reason was given: "Memory Limit Exceeded". I was shocked! I had never encountered that error before, not in the practice problems we solved, and not in the past two contests I participated in!&lt;/p&gt;

&lt;p&gt;It's not that I didn't know what that error meant, but for that particular problem, the input was really straightforward, and there was no way that my solution could have exceeded the memory limit, or so I thought! I was very confused, and I tried to figure out what went wrong, but I couldn't find any issue with my solution. So I submitted it again with some improvement in the algorithm, and it was rejected again for the same reason!&lt;/p&gt;

&lt;p&gt;No matter what I did, I was not able to solve that problem, and I was not able to solve any of the other problems either! All three of us kept getting the same error, for all the problems we attempted to solve! We were completely baffled, and we had no idea what was going on!&lt;/p&gt;

&lt;p&gt;The contest was four and a half hours long, and we gave up after trying for almost three hours! We were completely demoralized, and kept thinking there must be something wrong with the contest system, or maybe it was about solving those problems more efficiently. But no matter what we tried, we could not figure it out!&lt;/p&gt;

&lt;p&gt;After we gave up, we spent the rest of the time gossiping among the three of us, trying to have some fun, as our last unsuccessful attempt to salvage some dignity from that contest.&lt;/p&gt;

&lt;p&gt;And right when there were only a few minutes left in the contest, suddenly something clicked in my mind! OMG! I realized what the problem was!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Aha moment!
&lt;/h2&gt;

&lt;p&gt;Along with the computer, the contestants were allowed to bring some programming or algorithm books, and a pen-drive with some code snippets in it.&lt;/p&gt;

&lt;p&gt;To solve the problems faster, the night before the contest, we wrote some code snippets for some common input and output handling - like taking inputs from the console (Standard Input), taking inputs from a file, printing outputs to the console (Standard Output), printing outputs to a file, etc. following common programming contest input output patterns. We wrote those snippets in C, and we were using those snippets in our solutions.&lt;/p&gt;

&lt;p&gt;But the problem was: we were taking all the input lines into an array all at once, and then processing the array to get the result based on the problem statement, and then concatenating the result into a single string, and then printing that string as the output. That was a very inefficient way of handling input and output, and it was causing our solutions to exceed the memory limit!&lt;/p&gt;

&lt;p&gt;However, since we were only focusing on solving the problems, we didn't realize that our prewritten input and output handling snippets were causing the problem! We were so focused on solving the problems that we didn't even think about the input and output handling part of our solutions!&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Code
&lt;/h2&gt;

&lt;p&gt;As it happened long ago, I don't have the exact code snippets we used back then, but I can give you a rough idea of what they looked like.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Flawed Code (Memory Limit Exceeded)
&lt;/h3&gt;

&lt;p&gt;For example, in this version, we preallocated giant arrays to read all input numbers into memory before processing. Then we processed all formatted output strings in another huge array before printing anything to standard output.&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;100,000&lt;/code&gt; per test case across up to 110 test cases, this instantly exceeded the judge's memory limit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="cp"&gt;#define MAX_NUMBERS 100000
#define MAX_LEN 25
&lt;/span&gt;
&lt;span class="cm"&gt;/* 
 * Flawed approach: Pre-allocating giant arrays to store all 
 * inputs and outputs in memory before printing.
 */&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;input_numbers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;MAX_NUMBERS&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;MAX_LEN&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;output_buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;MAX_NUMBERS&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;MAX_LEN&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;print_differing_suffix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"%s-%s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;case_num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Buffer inputs and outputs across test cases&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;input_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;output_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;// Store ALL input phone numbers into memory first&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;input_numbers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;input_count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Process stored inputs into output buffer array&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="c1"&gt;// Check for consecutive phone numbers&lt;/span&gt;
            &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;atoll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_numbers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;atoll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_numbers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Consecutive sequence range found&lt;/span&gt;
                &lt;span class="n"&gt;print_differing_suffix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_numbers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;input_numbers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;output_buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;output_count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Single standalone phone number&lt;/span&gt;
                &lt;span class="n"&gt;strcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;output_count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;input_numbers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Print header and buffered outputs all at once&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Case %d:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;case_num&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;output_count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Blank line after each case output&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. The Corrected Code
&lt;/h3&gt;

&lt;p&gt;The proper approach should've been to read, process, and print one line at a time, rather than keeping the complete input and output in memory. In other words, we should've never built a giant concatenated output buffer before flushing it to stdout.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="cp"&gt;#define MAX_LEN 25
&lt;/span&gt;
&lt;span class="cm"&gt;/* 
 * Corrected approach: Helper function to print range directly 
 * to stdout without allocating output buffers.
 */&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;print_range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s-%s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;case_num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Process case by case using streaming I/O&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Case %d:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;case_num&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;start_num&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;MAX_LEN&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;prev_num&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;MAX_LEN&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;curr_num&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;MAX_LEN&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;prev_val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;curr_val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;in_range&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;curr_num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;curr_val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;atoll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;curr_num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// First phone number of the test case&lt;/span&gt;
                &lt;span class="n"&gt;strcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start_num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;curr_num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;curr_val&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;prev_val&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Phone number is consecutive, extend current range&lt;/span&gt;
                &lt;span class="n"&gt;in_range&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Consecutive sequence ended; output range or single number immediately&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;in_range&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;print_range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start_num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prev_num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;start_num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="c1"&gt;// Start tracking new sequence&lt;/span&gt;
                &lt;span class="n"&gt;strcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start_num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;curr_num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;in_range&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="n"&gt;strcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prev_num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;curr_num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;prev_val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;curr_val&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Output the final range or single number for the current test case&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;in_range&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;print_range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start_num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prev_num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;start_num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Blank line after each case as required by problem specification&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Lessons learnt
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We thought that programming contests, and programming in general, were all about solving problems very efficiently, but we learned that, in real life, user input and output handling is also a very important part of programming, and it can make or break your solution! We learned that we should always be careful about how we handle input and output, and that we should never assume that the input will always be small enough to fit in memory, or that it will always be in a format that we expect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We learned that we should always test our code against realistic input and output scenarios, with edge cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We learned that, sometimes, in programming, taking breaks and looking at the problem with a fresh set of eyes is essential to find trivial mistakes that we might have otherwise overlooked, while being too focused on the problem, the solution and the efficiency of it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We learned that, in real life, failure doesn't mean the end of the world, and that we should always be ready to learn from our mistakes, and that we should never give up when it gets tough! As the proverb says:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;When the going gets tough, the tough get going!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;While trying to solve the problem after the AHA moment, we realized that we should've used a version control system like Git to keep track of our solutions, so that we could easily go back to a previous simpler version of our code and fix the input/output handling part without having to rewrite the entire solution from scratch, out of all the jumbled code we had written at the later part of the contest to make them unusually efficient! Had we used git, we probably would have been able to solve at least one problem in those last few minutes of the contest, and we would have been able to salvage some dignity from that contest!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The happy ending
&lt;/h2&gt;

&lt;p&gt;After that embarrassing event, we three attended another programming contest, the last one in our life, as a team.&lt;/p&gt;

&lt;p&gt;It was not an ICPC, but it was a prestigious inter-university programming contest nonetheless.&lt;/p&gt;

&lt;p&gt;We secured &lt;strong&gt;2nd place&lt;/strong&gt; in that one. 🏆&lt;/p&gt;

&lt;p&gt;And last but not least, I started my first job as a Software Engineer a week before my last programming contest. It was a students' contest, but since I was still a student when I registered for it, they allowed me to participate! 😇&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I sincerely hope that this story will help others avoid making the same mistakes we made, but more importantly, I hope that you'll learn to rise up from failures - own them, learn from them, and use them as stepping stones to future success! &lt;/p&gt;




&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I used AI to help with grammar and spelling corrections, but the story is genuine, and the main write-up is entirely my own.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code snippets above are not the exact code snippets we used back then. They are AI (Gemini) generated rough approximations of what they would look like. So please take the story as the lesson, not the code snippets.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The cover image is AI (Gemini) generated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I wrote the entire thing from memory. So, although the overall story is real, a few minor details here and there may not be!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://web.archive.org/web/20070225201325/http://northsouth.edu/acm/Problem_Set_with_Analysis_Dhaka2006.pdf" rel="noopener noreferrer"&gt;The Actual Problem Set&lt;/a&gt;. I found it after deeply looking for it in the &lt;a href="https://web.archive.org/" rel="noopener noreferrer"&gt;Wayback Machine&lt;/a&gt;. Salute to the Wayback Machine for preserving this problem set for so long! 🫡&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://profiles.topcoder.com/fayazmiraz" rel="noopener noreferrer"&gt;My Topcoder Profile&lt;/a&gt; after attending the only online programming contest (SRM) before the main contest. Thanks to Topcoder for keeping my profile for twenty years! 😍&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>bugsmash</category>
      <category>programming</category>
      <category>performance</category>
    </item>
    <item>
      <title>I need a new kind of Open Source Software License: "AGPL Pro Max"</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Mon, 15 Jun 2026 20:05:48 +0000</pubDate>
      <link>https://dev.to/fm/i-need-a-new-kind-of-open-source-software-license-agpl-pro-max-4aa6</link>
      <guid>https://dev.to/fm/i-need-a-new-kind-of-open-source-software-license-agpl-pro-max-4aa6</guid>
      <description>&lt;p&gt;As far as I know, &lt;a href="https://en.wikipedia.org/wiki/GNU_Affero_General_Public_License" rel="noopener noreferrer"&gt;AGPL&lt;/a&gt; doesn't cover Large Language Models.&lt;/p&gt;

&lt;p&gt;I think it should, but it doesn't.&lt;/p&gt;

&lt;p&gt;Going forward, we need a new kind of &lt;a href="https://en.wikipedia.org/wiki/Copyleft" rel="noopener noreferrer"&gt;Copy Left&lt;/a&gt; License for Open Source Software - something that covers LLMs as well.&lt;/p&gt;

&lt;p&gt;I mean, your LLM can be trained with my Open Source Software, but only if it's made Open Source as well!&lt;/p&gt;

&lt;p&gt;I'm calling it &lt;strong&gt;AGPL Pro Max&lt;/strong&gt;! 😎&lt;/p&gt;

&lt;p&gt;Someone please give it a better name, and make it popular among developers. 🙏🏼&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; Does something like this exist already?&lt;/p&gt;

&lt;p&gt;If so, then what is it?&lt;br&gt;
If not, then why not! 🤷&lt;/p&gt;




&lt;div class="ltag__user ltag__user__id__40939"&gt;
    &lt;a href="/fm" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F40939%2F7d1b5592-06de-4055-aa97-01cf895bebe7.gif" alt="fm image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/fm"&gt;Fayaz&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/fm"&gt;A Software Engineer who strongly believes you can add immense value by knowingly implementing Software Engineering best practices even at the age of AI, and puts human life and dignity above all else.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>opensource</category>
    </item>
    <item>
      <title>New AI Model Quality Check Flowchart.</title>
      <dc:creator>Fayaz</dc:creator>
      <pubDate>Sun, 14 Jun 2026 18:36:38 +0000</pubDate>
      <link>https://dev.to/fm/new-ai-model-quality-check-flowchart-55h4</link>
      <guid>https://dev.to/fm/new-ai-model-quality-check-flowchart-55h4</guid>
      <description>&lt;p&gt;Is it banned by any Government?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yes = Good Quality&lt;/li&gt;
&lt;li&gt;No = Bad Quality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;😁🤷🙏&lt;/p&gt;





&lt;div class="ltag__user ltag__user__id__40939"&gt;
    &lt;a href="/fm" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F40939%2F7d1b5592-06de-4055-aa97-01cf895bebe7.gif" alt="fm image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/fm"&gt;Fayaz&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/fm"&gt;A Software Engineer who strongly believes you can add immense value by knowingly implementing Software Engineering best practices even at the age of AI, and puts human life and dignity above all else.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
      <category>jokes</category>
    </item>
  </channel>
</rss>
