<?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>Forem: Temuri Takalandze</title>
    <description>The latest articles on Forem by Temuri Takalandze (@abgeo).</description>
    <link>https://forem.com/abgeo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F147697%2F4d30c60a-8233-42fd-b8d5-a806d22f0957.jpeg</url>
      <title>Forem: Temuri Takalandze</title>
      <link>https://forem.com/abgeo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/abgeo"/>
    <language>en</language>
    <item>
      <title>How a $12 Temu Doorbell Lets Anyone on the Internet Ring Your Bell</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Wed, 06 May 2026 06:56:34 +0000</pubDate>
      <link>https://forem.com/abgeo/how-a-12-temu-doorbell-lets-anyone-on-the-internet-ring-your-bell-1fi1</link>
      <guid>https://forem.com/abgeo/how-a-12-temu-doorbell-lets-anyone-on-the-internet-ring-your-bell-1fi1</guid>
      <description>&lt;p&gt;I picked up a no-name smart doorbell from Temu, the kind that sells for $12 and ships under a dozen rebrands. I wanted to know if the security was as cheap as the hardware. It was worse.&lt;/p&gt;

&lt;p&gt;The device talks to a backend run by Guangzhou Qiangui IoT (Naxclow brand). Every API request carries a "signature" that looks like authentication. It is not. The signing secret is a hardcoded alphanumeric string baked into every firmware image. Pull it out once and you can forge requests for any of these doorbells, anywhere.&lt;/p&gt;

&lt;p&gt;From there, two signed requests reassign ownership of any doorbell to an attacker. The victim's app silently drops the device while it stays online. One more request returns the doorbell's relay password in plaintext, and that password never rotates, not even after a factory reset. With the password, you can impersonate the doorbell during a live call and stream attacker-chosen video to the homeowner.&lt;/p&gt;

&lt;p&gt;The full writeup walks through the firmware extraction, the API reverse engineering, and the live-call hijack proof of concept. There is also a short list of things cheap-IoT vendors keep getting wrong, and a few pointers for owners who want to keep using the device safely (short version: VLAN your IoT).&lt;/p&gt;

&lt;p&gt;Originally published on &lt;a href="https://www.abgeo.dev/blog/anyone-can-ring-your-doorbell/" rel="noopener noreferrer"&gt;https://www.abgeo.dev/blog/anyone-can-ring-your-doorbell/&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>iot</category>
      <category>security</category>
      <category>reverseengineering</category>
      <category>firmware</category>
    </item>
    <item>
      <title>Nginx Ingress Is Archived: Gateway API, Alternatives, and How to Actually Migrate</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Wed, 25 Mar 2026 16:55:15 +0000</pubDate>
      <link>https://forem.com/abgeo/nginx-ingress-is-archived-gateway-api-alternatives-and-how-to-actually-migrate-3hn</link>
      <guid>https://forem.com/abgeo/nginx-ingress-is-archived-gateway-api-alternatives-and-how-to-actually-migrate-3hn</guid>
      <description>&lt;p&gt;The nginx ingress controller that we all relied on for years is now officially retired. The repo is archived and nothing new is coming out of it.&lt;/p&gt;

&lt;p&gt;I wrote a detailed post breaking down your options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gateway API migration (with workarounds for charts that don't support it yet, including a wrapper chart pattern)&lt;/li&gt;
&lt;li&gt;Dual-support controllers for gradual migration&lt;/li&gt;
&lt;li&gt;Drop-in ingress controller replacements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Covers Envoy Gateway, Traefik, Cilium, Istio, Kong, HAProxy, and Contour with pros/cons and real YAML examples.&lt;/p&gt;

&lt;p&gt;Full post on my blog 👉 &lt;a href="https://www.abgeo.dev/blog/nginx-ingress-retirement/" rel="noopener noreferrer"&gt;https://www.abgeo.dev/blog/nginx-ingress-retirement/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>nginx</category>
    </item>
    <item>
      <title>Trivy GitHub Actions Compromised: Full Malware Payload Analysis</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Fri, 20 Mar 2026 14:13:42 +0000</pubDate>
      <link>https://forem.com/abgeo/trivy-github-actions-compromised-full-malware-payload-analysis-1f85</link>
      <guid>https://forem.com/abgeo/trivy-github-actions-compromised-full-malware-payload-analysis-1f85</guid>
      <description>&lt;p&gt;Yesterday, &lt;code&gt;aquasecurity/trivy-action&lt;/code&gt; got compromised again. Attackers force-pushed 75 out of 76 version tags to inject a full credential stealer that scrapes runner memory, harvests secrets across 17 categories, and exfiltrates everything encrypted to a typosquatted domain.&lt;/p&gt;

&lt;p&gt;I pulled the malicious payload apart and documented every step, from process discovery to AES+RSA encrypted exfiltration.&lt;/p&gt;

&lt;p&gt;Full write-up here: &lt;a href="https://www.abgeo.dev/blog/trivy-github-actions-compromised-full-payload-analysis/" rel="noopener noreferrer"&gt;https://www.abgeo.dev/blog/trivy-github-actions-compromised-full-payload-analysis/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>github</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Git Sparse Checkout: Clone a Single File or Directory</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Sat, 19 Apr 2025 09:14:55 +0000</pubDate>
      <link>https://forem.com/abgeo/git-sparse-checkout-clone-a-single-file-or-directory-108i</link>
      <guid>https://forem.com/abgeo/git-sparse-checkout-clone-a-single-file-or-directory-108i</guid>
      <description>&lt;p&gt;Ever needed to clone a Git repository, but only partially?&lt;/p&gt;

&lt;p&gt;Maybe you just want a single file or a specific directory, not the entire codebase.&lt;/p&gt;

&lt;p&gt;Cloning the whole repo can be overkill, especially if it’s large or you’re running something in automation. That’s where Git’s sparse checkout comes in handy. It lets you pull only the parts you actually need, saving time, bandwidth, and disk space.&lt;/p&gt;

&lt;p&gt;Here’s how to do it:&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%2Fhl2vqzw03b06g0uykiee.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhl2vqzw03b06g0uykiee.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automations that only need a single script or config&lt;/li&gt;
&lt;li&gt;Pulling just one project or service from a monorepo&lt;/li&gt;
&lt;li&gt;Saving time when you don’t need the full repo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No need to clone the whole haystack when you only want the needle 🧵&lt;/p&gt;

&lt;p&gt;Give it a shot the next time you need just a piece of a repo.&lt;/p&gt;

</description>
      <category>git</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🚨 Common Programming Pitfalls &amp; How to Avoid Them 🚨</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Fri, 28 Feb 2025 09:23:50 +0000</pubDate>
      <link>https://forem.com/abgeo/common-programming-pitfalls-how-to-avoid-them-1c37</link>
      <guid>https://forem.com/abgeo/common-programming-pitfalls-how-to-avoid-them-1c37</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9n8wrfcr7k29wu2mjqd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9n8wrfcr7k29wu2mjqd.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even experienced developers fall into traps! Here are some common programming pitfalls and how to dodge them:&lt;/p&gt;

&lt;p&gt;💥 Not Handling Edge Cases – Always consider unexpected inputs, empty lists, and extreme values. Test thoroughly!&lt;/p&gt;

&lt;p&gt;🔄 Infinite Loops – A missing exit condition can break everything. Double-check loop conditions and use timeouts when needed.&lt;/p&gt;

&lt;p&gt;🧹 Ignoring Memory Leaks – Be mindful of object references, especially in long-running applications. Use profiling tools to monitor memory usage.&lt;/p&gt;

&lt;p&gt;📦 Hardcoding Values – Avoid magic numbers and hardcoded credentials. Use config files or environment variables instead.&lt;/p&gt;

&lt;p&gt;🛑 Skipping Error Handling – Ignoring exceptions can lead to crashes. Always handle errors gracefully with proper logging.&lt;/p&gt;

&lt;p&gt;🔄 Copy-Pasting Code – Repetitive code is a maintenance nightmare. DRY (Don’t Repeat Yourself) and use functions or modules.&lt;/p&gt;

&lt;p&gt;What’s the worst pitfall you’ve encountered? Let’s discuss! 💬👇&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🔓 Free Your Ports in One Command 🚀</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Sat, 22 Feb 2025 10:51:23 +0000</pubDate>
      <link>https://forem.com/abgeo/free-your-ports-in-one-command-2kio</link>
      <guid>https://forem.com/abgeo/free-your-ports-in-one-command-2kio</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh0q5hpzmxkdvs9f346m6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh0q5hpzmxkdvs9f346m6.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;😤 Ever struggled with stopping a process that’s hogging a port on Linux? Hunting down the process ID and killing it manually can be a hassle. Here’s a quick one-liner that does it all for you.&lt;/p&gt;

&lt;p&gt;✨ Replace  with the port number you want to free, and you’re good to go! Simple, effective, and saves time. 💻⚡&lt;/p&gt;

</description>
      <category>linux</category>
      <category>productivity</category>
    </item>
    <item>
      <title>5 Tech Blogs Every Developer Should Follow 🚀</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Sat, 22 Feb 2025 10:50:17 +0000</pubDate>
      <link>https://forem.com/abgeo/5-tech-blogs-every-developer-should-follow-4c3e</link>
      <guid>https://forem.com/abgeo/5-tech-blogs-every-developer-should-follow-4c3e</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcsf1ahtc3bio2zl8brx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcsf1ahtc3bio2zl8brx.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the ever-evolving world of technology, staying up-to-date is essential for every developer. Keeping track of the latest tools, trends, and innovations not only boosts your skills but also keeps you ahead of the curve.&lt;/p&gt;

&lt;p&gt;Here are 5 must-follow tech blogs from industry leaders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Developers Blog – Updates on Android, APIs, and web dev.&lt;/li&gt;
&lt;li&gt;AWS News Blog – Cloud innovations and best practices.&lt;/li&gt;
&lt;li&gt;Engineering at Meta Blog – Insights on Meta’s engineering challenges.&lt;/li&gt;
&lt;li&gt;Netflix TechBlog – Stories on streaming tech and scalability.&lt;/li&gt;
&lt;li&gt;Microsoft Developer Blogs – Tools and frameworks like .NET and Azure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stay curious and keep learning! And don’t forget to check out abgeo.dev, where I also share interesting blogs and insights to fuel your developer journey 💻&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Dynamic Environment Variables in Dockerized Next.js: A Flexible Multi-Environment Solution</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Sat, 22 Feb 2025 10:48:59 +0000</pubDate>
      <link>https://forem.com/abgeo/dynamic-environment-variables-in-dockerized-nextjs-a-flexible-multi-environment-solution-3a0f</link>
      <guid>https://forem.com/abgeo/dynamic-environment-variables-in-dockerized-nextjs-a-flexible-multi-environment-solution-3a0f</guid>
      <description>&lt;p&gt;If you’re using Next.js with Docker, you’ve probably encountered the challenge of environment variables being fixed at build time. In this blog post, I walk through a practical approach to handling dynamic environment variables using a Docker entrypoint script.&lt;/p&gt;

&lt;p&gt;🔗 Read it here: &lt;a href="https://www.abgeo.dev/blog/dynamic-environment-variables-dockerized-nextjs/" rel="noopener noreferrer"&gt;https://www.abgeo.dev/blog/dynamic-environment-variables-dockerized-nextjs/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know how you manage environment variables in your Next.js projects.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>nextjs</category>
      <category>env</category>
    </item>
    <item>
      <title>Partially Committing Changes in Git ✂️</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Sat, 22 Feb 2025 10:47:09 +0000</pubDate>
      <link>https://forem.com/abgeo/partially-committing-changes-in-git-3og</link>
      <guid>https://forem.com/abgeo/partially-committing-changes-in-git-3og</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6wi0xe63by40u6qlbr7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6wi0xe63by40u6qlbr7.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When working on a project, sometimes you don’t want to commit all your changes at once. Git makes it easy to commit changes selectively using the git add -p command. This allows you to interactively pick which chunks of changes you want to stage and commit 🎯&lt;/p&gt;

&lt;p&gt;First, you can use git add -p to stage only the changes you want. This will open your configured editor, where you can pick the changes to stage ✨&lt;/p&gt;

&lt;p&gt;By committing only what matters, you keep your commit history clean and focused, making it easier to track your progress 🚀&lt;/p&gt;

&lt;p&gt;Perfect for when you want to stay organized and avoid committing unnecessary changes! 😌&lt;/p&gt;

</description>
      <category>git</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>🔐 Secure Your Kubernetes Apps with Cert-Manager &amp; Let’s Encrypt</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Sat, 22 Feb 2025 10:45:43 +0000</pubDate>
      <link>https://forem.com/abgeo/secure-your-kubernetes-apps-with-cert-manager-lets-encrypt-48k3</link>
      <guid>https://forem.com/abgeo/secure-your-kubernetes-apps-with-cert-manager-lets-encrypt-48k3</guid>
      <description>&lt;p&gt;Ensuring secure communication for your Kubernetes applications is crucial! In my latest blog post, I walk you through how to automate SSL certificate issuance and management in Kubernetes using cert-manager and Let’s Encrypt.&lt;/p&gt;

&lt;p&gt;✅ Why cert-manager? Automates certificate provisioning &amp;amp; renewal&lt;br&gt;
✅ Why Let’s Encrypt? Free, automated &amp;amp; widely trusted&lt;br&gt;
✅ Demo setup: Securing a Kubernetes service with a real SSL certificate from Let’s Encrypt&lt;/p&gt;

&lt;p&gt;If you’re running Kubernetes workloads and need secure, automated certificate management, this guide is for you!&lt;/p&gt;

&lt;p&gt;📖 Read the full post: &lt;a href="https://www.abgeo.dev/blog/secure-kubernetes-apps-with-cert-manager-and-lets-encrypt/" rel="noopener noreferrer"&gt;https://www.abgeo.dev/blog/secure-kubernetes-apps-with-cert-manager-and-lets-encrypt/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>ssl</category>
      <category>security</category>
    </item>
    <item>
      <title>Ensuring Interface Implementation at Compile Time in Go 🛠️</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Sat, 22 Feb 2025 10:43:52 +0000</pubDate>
      <link>https://forem.com/abgeo/ensuring-interface-implementation-at-compile-time-in-go-3366</link>
      <guid>https://forem.com/abgeo/ensuring-interface-implementation-at-compile-time-in-go-3366</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44f2p57zhubgrx3rnc0x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44f2p57zhubgrx3rnc0x.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Go, we can’t implicitly implement interfaces like in some other languages. To ensure a type implements an interface, we explicitly check this by trying to cast the type to the interface. If the type doesn’t match, Go will give a compile-time error, and the code won’t compile 🚫&lt;/p&gt;

&lt;p&gt;This compile-time check helps catch errors early, making sure your types conform to the expected interfaces. If Task doesn’t implement Executor properly, Go won’t compile the code, saving you from potential issues at runtime 👨‍💻&lt;/p&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🚀 What is a Bash Fork Bomb?</title>
      <dc:creator>Temuri Takalandze</dc:creator>
      <pubDate>Sat, 22 Feb 2025 10:42:24 +0000</pubDate>
      <link>https://forem.com/abgeo/what-is-a-bash-fork-bomb-12i5</link>
      <guid>https://forem.com/abgeo/what-is-a-bash-fork-bomb-12i5</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfw0lpav6lsz6k2374mp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfw0lpav6lsz6k2374mp.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A tiny but deadly command that can crash a Linux system in seconds! 🤯&lt;/p&gt;

&lt;p&gt;This tiny Bash script is a fork bomb—a self-replicating function that keeps creating processes until the system collapses. It’s a great example of how recursion can go out of control!&lt;/p&gt;

&lt;p&gt;💡 How to stay safe?&lt;br&gt;
✅ Limit user processes with ulimit&lt;br&gt;
✅ Restrict execution permissions&lt;br&gt;
✅ Monitor system resource usage&lt;/p&gt;

</description>
      <category>linux</category>
      <category>bash</category>
    </item>
  </channel>
</rss>
