<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>drpaneas</title><link>https://drpaneas.com/</link><description>Recent content on drpaneas</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 02 Jul 2026 12:19:00 +0200</lastBuildDate><atom:link href="https://drpaneas.com/index.xml" rel="self" type="application/rss+xml"/><item><title>NES Mathematics</title><link>https://drpaneas.com/blog/2026/07/02/nes-mathematics/</link><pubDate>Thu, 02 Jul 2026 12:19:00 +0200</pubDate><guid>https://drpaneas.com/blog/2026/07/02/nes-mathematics/</guid><description>NES Math A guide to the fixed-point arithmetic behind classic NES platformers, written for programmers porting NES games to modern languages.
1. Why This Article Exists You are porting a classic single-screen NES platformer to a modern platform. You have access to a full disassembly of the original ROM, you know the physics constants, and you can read wiki pages describing every system. What you may not have is an intuition for why the numbers look the way they do - why a run speed byte is $19 and not $1A, why friction values live in a three-entry table, why gravity uses two bytes when speed uses one.</description></item><item><title>How We Put OpenClaw on Developer Sandbox</title><link>https://drpaneas.com/blog/2026/06/05/how-we-put-openclaw-on-developer-sandbox/</link><pubDate>Fri, 05 Jun 2026 12:19:00 +0200</pubDate><guid>https://drpaneas.com/blog/2026/06/05/how-we-put-openclaw-on-developer-sandbox/</guid><description>OpenClaw is now on Developer Sandbox.
You click a card, provide an API key, and get a personal AI assistant running on OpenShift.
Under the hood, that assistant runs on OpenClaw, and the core building blocks come from claw-operator.
That part is the boring story.
The harder story is the one I actually care about.
The first question I asked was not &amp;ldquo;does the demo work?&amp;rdquo; It was this:
if I compromise the agent, can I steal the credential?</description></item><item><title>The Case of the Phantom Memory Corruption</title><link>https://drpaneas.com/blog/2025/12/02/the-case-of-the-phantom-memory-corruption/</link><pubDate>Tue, 02 Dec 2025 02:46:35 +0100</pubDate><guid>https://drpaneas.com/blog/2025/12/02/the-case-of-the-phantom-memory-corruption/</guid><description>Or: How a Single Wrong Pointer Ruined My Week
I&amp;rsquo;m building libgodc that is a Go runtime for the Sega Dreamcast. Yes, that Dreamcast. The one with the Hitachi SH-4 processor that Sega shipped (North America) in 9/9/1999. The one that ran Sonic Adventure and Crazy Taxi. I want it to run Go.
If you&amp;rsquo;re wondering why anyone would do this: partly because it&amp;rsquo;s fun, partly because constrained environments force you to truly understand what you&amp;rsquo;re building.</description></item><item><title>How test a PR locally</title><link>https://drpaneas.com/blog/2022/07/12/how-test-a-pr-locally/</link><pubDate>Tue, 12 Jul 2022 15:39:35 +0200</pubDate><guid>https://drpaneas.com/blog/2022/07/12/how-test-a-pr-locally/</guid><description>Well, use a script Let&amp;rsquo;s say I want to test this PR locally, meaning I need to fetch the code locally to my laptop. All I need is the URL and nothing more.
Clone the repository locally (if you haven&amp;rsquo;t done it already), change into this directyory and then run the script:
$ testpr https://github.com/redhat-appstudio/managed-gitops/pull/177 Output:
remote: Enumerating objects: 202, done. remote: Counting objects: 100% (202/202), done. remote: Compressing objects: 100% (129/129), done.</description></item><item><title>What GitOps is</title><link>https://drpaneas.com/blog/2022/01/04/what-gitops-is/</link><pubDate>Tue, 04 Jan 2022 11:39:35 +0200</pubDate><guid>https://drpaneas.com/blog/2022/01/04/what-gitops-is/</guid><description>What GitOps is GitOps is a set of best practices to update or rollback your application, nowadays mostly in a cloud (e.g. k8s) environment. As the name implies, the whole process is controlled by Git, and the code includes both the application source and the infrastructure configuration. The goal, as usual, is to deploy fast and reliably.
In 2021, the first OpenGitOps Standard v1 was created, to make sure we all GitOps enthusiasts speak the same language.</description></item><item><title>About</title><link>https://drpaneas.com/about/</link><pubDate>Mon, 26 Apr 2021 01:29:05 +0200</pubDate><guid>https://drpaneas.com/about/</guid><description>Panagiotis Georgiadis Wendelstein, Germany (Remote) · drpaneas@gmail.com · GitHub · LinkedIn
Global Engineering Leader | Platform Engineering · Cloud Native · AI-Driven Developer Productivity
Executive Summary Global engineering leader who builds organizations and ships production software. Leads a multi-continent Red Hat engineering organization delivering cloud-native developer platforms on Kubernetes, OpenShift, GitOps, and AWS - while writing Go, contributing to CNCF upstream projects, and creating open-source systems. Defined the agentic SDLC practices and AI governance now used organization-wide.</description></item><item><title>Write a Google GCP client with Go</title><link>https://drpaneas.com/blog/2020/03/15/write-a-google-gcp-client-with-go/</link><pubDate>Sun, 15 Mar 2020 03:29:35 +0100</pubDate><guid>https://drpaneas.com/blog/2020/03/15/write-a-google-gcp-client-with-go/</guid><description>In this article I will explain the mechanics of writing a client for Google GCP, pretty similar like gcloud. The purpose is to not write a full-featured client (that would make no sense, since you can use gcloud already) but to learn the how to communicate with Google&amp;rsquo;s GCP API using Go. Such a pkg can be useful in small projects where you need to talk to Google GCP API, like the OpenShift&amp;rsquo;s GCP Operator.</description></item><item><title>How to write your own Kubernetes controller</title><link>https://drpaneas.com/blog/2020/02/25/how-to-write-your-own-kubernetes-controller/</link><pubDate>Tue, 25 Feb 2020 03:29:35 +0100</pubDate><guid>https://drpaneas.com/blog/2020/02/25/how-to-write-your-own-kubernetes-controller/</guid><description>Write your own controller Before going down the operator framework out there, it is important to understand what is happening under the hood. Then you would be able to appreciate the generated boilerplate code and feel more comfortable to change it.
Prereq This tutorial assumes you have a cluster up and running and you can successfully communicate with it (e.g. kubectl get pods -A should work). If you don&amp;rsquo;t have a cluster, you can setup one locally using CodeReadyContainers(used by the tutorial) or minikube.</description></item><item><title>How to run Traefik ingress controller as non-root</title><link>https://drpaneas.com/blog/2019/01/16/how-to-run-traefik-ingress-controller-as-non-root/</link><pubDate>Wed, 16 Jan 2019 15:39:35 +0200</pubDate><guid>https://drpaneas.com/blog/2019/01/16/how-to-run-traefik-ingress-controller-as-non-root/</guid><description>What is ingress? Ingress are (in a sense) reverse-proxies. But to understand, you need to know first what a proxy is &amp;ndash; and only then will be able to understand the reverse of it.
What is a proxy? For those of you who do not know what a proxy is, the word proxy describes someone/something acting on behalf of someone/something else. In terms on networking, when we are talking about a proxy server we are talking about one server that is acting on behalf of another server.</description></item><item><title>Contribute to minikube in a nutshell</title><link>https://drpaneas.com/blog/2018/09/28/contribute-to-minikube-in-a-nutshell/</link><pubDate>Fri, 28 Sep 2018 16:29:35 +0200</pubDate><guid>https://drpaneas.com/blog/2018/09/28/contribute-to-minikube-in-a-nutshell/</guid><description>It&amp;rsquo;s very easy to contribute to minikube (and other similar packages) when the only thing that is needed is just a version bump in the spec file. You first need to install these:
# zypper in osc spec-cleaner Configure your ~/.oscrc file:
[general] no_verify = 1 extra-pkgs = vim less mc [https://api.opensuse.org] user=pgeorgiadis # CHANGE email=pgeorgiadis@suse.com # CHANGE pass=123456789 # CHANGE trusted_prj=SUSE:SLE-12:GA openSUSE:13.2 openSUSE:Leap:42.3 openSUSE:Factory Base:System Virtualization:containers SUSE:SLE-12-SP3:GA SUSE:SLE-12:SLE-Module-Containers SUSE:Templates:Images:SLE-12-SP3:Base SUSE:SLE-12-SP3:Update openSUSE:Leap:42.</description></item><item><title>My personal Go environment setup</title><link>https://drpaneas.com/blog/2018/09/27/my-personal-go-environment-setup/</link><pubDate>Thu, 27 Sep 2018 17:34:35 +0200</pubDate><guid>https://drpaneas.com/blog/2018/09/27/my-personal-go-environment-setup/</guid><description>How many go version do you have installed? The default upstream location for the binary is: /usr/local/go. But in SUSE it is: /usr/bin/go. This is a symlink created via update-alternatives.
# update-alternatives --list go /usr/lib64/go/1.10/bin/go /usr/lib64/go/1.8/bin/go /usr/lib64/go/1.9/bin/go I want to keep only the 1.10 so I will remove the others:
# zypper rm $(rpm -qf /usr/lib64/go/1.8/bin/go) $(rpm -qf /usr/lib64/go/1.9/bin/go) To verify, try update-alternatives once more. There should be only one version:</description></item><item><title>Deploy openSUSE Leap15 VM in Kubernetes using KubeVirt</title><link>https://drpaneas.com/blog/2018/03/15/deploy-opensuse-leap15-vm-in-kubernetes-using-kubevirt/</link><pubDate>Thu, 15 Mar 2018 20:46:35 +0200</pubDate><guid>https://drpaneas.com/blog/2018/03/15/deploy-opensuse-leap15-vm-in-kubernetes-using-kubevirt/</guid><description>Introduction If you think that Kubernetes is a cluster for managing containers, then you are dead wrong. Kubernetes is a cluster for managing Pods. In most cases, a Pod is considered to be an abstraction of an container object, so Pod talks to Docker and they know each other. What happens though when we introduce a new guy called libvirt and we learn Pod to talk to it? We have KubeVirt.</description></item><item><title>How to start with OpenFaaS</title><link>https://drpaneas.com/blog/2017/11/08/how-to-start-with-openfaas/</link><pubDate>Wed, 08 Nov 2017 22:08:35 +0200</pubDate><guid>https://drpaneas.com/blog/2017/11/08/how-to-start-with-openfaas/</guid><description>Introduction Before we get into what is serverless or openfaas, I would like to talk about the concept behind this. So, before going into the details, I want to give you the big picture of this new way of developing applications and how the users are supposed to use them.
Containers are now more efficient than ever So let’s go back in time, when computers were enormous things and filled complete rooms.</description></item><item><title>Kubernetes Basics</title><link>https://drpaneas.com/blog/2017/05/08/kubernetes-basics/</link><pubDate>Mon, 08 May 2017 22:08:35 +0200</pubDate><guid>https://drpaneas.com/blog/2017/05/08/kubernetes-basics/</guid><description>What is Kubernetes By definition, Kubernetes is an open source container cluster manager, and it is usually referred to by its internal name withing Google development - k8s. Google donated it to the open source world as a &amp;ldquo;seed technology&amp;rdquo; at 2015, to the newly formed CNCF - Cloud Native Computing Foundation, which established partnership with The Linux Foundation. The primary goal of Kubernetes is to provide a platform for automating deployment, scaling and operations of application containers across a cluster of hosts.</description></item></channel></rss>