<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dev &amp; Platform Engineering Hub</title><link>https://rhidayat.work/</link><description>Recent content on Dev &amp; Platform Engineering Hub</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Rachmat Hidayat</copyright><lastBuildDate>Mon, 10 Aug 2026 01:15:00 +0000</lastBuildDate><atom:link href="https://rhidayat.work/index.xml" rel="self" type="application/rss+xml"/><item><title>Kubernetes Ep 15: Production Helm Charts &amp; Package Deployment</title><link>https://rhidayat.work/series/kubernetes/15-production-helm-chart-deployment/</link><pubDate>Mon, 10 Aug 2026 01:15:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/15-production-helm-chart-deployment/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Managing dozens of static YAML manifests across multiple environments (dev, staging, prod) leads to repetitive code and configuration drift. &lt;strong&gt;Helm&lt;/strong&gt; is the official package manager for Kubernetes, enabling templating, parameterization, versioned releases, and one-click upgrades.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 14: Health Checks &amp; Zero-Downtime Rolling Updates</title><link>https://rhidayat.work/series/kubernetes/14-probes-healthchecks-and-rolling-updates/</link><pubDate>Mon, 10 Aug 2026 01:10:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/14-probes-healthchecks-and-rolling-updates/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 In production, a container might be in a &lt;code&gt;Running&lt;/code&gt; state according to Docker, yet completely unable to serve HTTP traffic due to a deadlock, database connection timeout, or slow boot sequence. &lt;strong&gt;Probes&lt;/strong&gt; and &lt;strong&gt;Rolling Updates&lt;/strong&gt; guarantee zero-downtime application deployments.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 13: RBAC, ServiceAccounts &amp; Security</title><link>https://rhidayat.work/series/kubernetes/13-rbac-service-accounts-and-security/</link><pubDate>Mon, 10 Aug 2026 01:05:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/13-rbac-service-accounts-and-security/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Security in Kubernetes follows the Principle of Least Privilege. &lt;strong&gt;Role-Based Access Control (RBAC)&lt;/strong&gt; regulates who (Users, Groups, or ServiceAccounts) can perform which actions (verbs: &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;) on which resources (nouns: &lt;code&gt;pods&lt;/code&gt;, &lt;code&gt;services&lt;/code&gt;, &lt;code&gt;secrets&lt;/code&gt;).
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 12: Namespaces, Resource Quotas &amp; LimitRanges</title><link>https://rhidayat.work/series/kubernetes/12-namespaces-resource-quotas-and-limits/</link><pubDate>Mon, 10 Aug 2026 01:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/12-namespaces-resource-quotas-and-limits/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 In enterprise environments, a single Kubernetes cluster is shared across multiple development teams, environments (dev, staging, prod), and microservices. Without resource governance, a single misbehaving application can consume all cluster CPU and memory, crashing critical workloads.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 11: Jobs, CronJobs &amp; Batch Processing</title><link>https://rhidayat.work/series/kubernetes/11-jobs-cronjobs-and-batch-processing/</link><pubDate>Mon, 10 Aug 2026 00:55:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/11-jobs-cronjobs-and-batch-processing/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Unlike Deployments and StatefulSets—which are designed to keep long-running processes alive indefinitely—&lt;strong&gt;Jobs&lt;/strong&gt; and &lt;strong&gt;CronJobs&lt;/strong&gt; are designed for &lt;strong&gt;run-to-completion batch tasks&lt;/strong&gt;. When the workload process terminates with exit code 0, Kubernetes marks the Pod as &lt;code&gt;Completed&lt;/code&gt;.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 10: DaemonSets &amp; Cluster Node Agents</title><link>https://rhidayat.work/series/kubernetes/10-daemonsets-and-cluster-monitoring/</link><pubDate>Mon, 10 Aug 2026 00:50:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/10-daemonsets-and-cluster-monitoring/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 While Deployments distribute Pods across nodes based on available capacity, &lt;strong&gt;DaemonSets&lt;/strong&gt; ensure that a copy of a specific Pod runs on &lt;strong&gt;all (or selected) worker nodes&lt;/strong&gt; in the cluster. As nodes are added to or removed from the cluster, DaemonSet Pods are added or garbage-collected automatically.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 9: StatefulSets &amp; Stateful Database Deployments</title><link>https://rhidayat.work/series/kubernetes/09-statefulsets-and-database-deployments/</link><pubDate>Mon, 10 Aug 2026 00:45:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/09-statefulsets-and-database-deployments/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 While Deployments are designed for interchangeable, stateless application replicas, stateful workloads like PostgreSQL clusters, Redis Sentinels, Kafka brokers, and Elasticsearch nodes require &lt;strong&gt;stable network identities&lt;/strong&gt;, &lt;strong&gt;dedicated persistent volumes per replica&lt;/strong&gt;, and &lt;strong&gt;strict ordered deployment &amp;amp; scaling&lt;/strong&gt;. This is where &lt;strong&gt;StatefulSets&lt;/strong&gt; shine.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 8: Persistent Volumes, PVCs &amp; StorageClasses</title><link>https://rhidayat.work/series/kubernetes/08-volumes-pv-pvc-and-storageclass/</link><pubDate>Mon, 10 Aug 2026 00:40:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/08-volumes-pv-pvc-and-storageclass/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Containers are designed to be stateless and ephemeral. To run stateful applications like PostgreSQL, MySQL, Redis, or Elasticsearch, Kubernetes provides storage abstractions that decouple persistent storage infrastructure from application workload definitions.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 7: ConfigMaps, Secrets &amp; Environment Variables</title><link>https://rhidayat.work/series/kubernetes/07-configmaps-secrets-and-env-vars/</link><pubDate>Mon, 10 Aug 2026 00:35:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/07-configmaps-secrets-and-env-vars/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The Twelve-Factor App methodology mandates strict separation of application code from configuration settings. &lt;strong&gt;ConfigMaps&lt;/strong&gt; store non-sensitive configuration data (URLs, log levels), while &lt;strong&gt;Secrets&lt;/strong&gt; store sensitive values (passwords, API tokens, TLS keys).
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 6: Ingress Controllers &amp; HTTP Path Routing</title><link>https://rhidayat.work/series/kubernetes/06-ingress-controllers-and-routing/</link><pubDate>Mon, 10 Aug 2026 00:30:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/06-ingress-controllers-and-routing/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 While L4 Kubernetes Services handle IP and port-level load balancing, modern web applications require Layer 7 HTTP/HTTPS routing features: URL path matching (&lt;code&gt;/api&lt;/code&gt; vs &lt;code&gt;/app&lt;/code&gt;), hostname routing (&lt;code&gt;api.example.com&lt;/code&gt;), SSL/TLS termination, and header rewriting. This is handled by &lt;strong&gt;Ingress&lt;/strong&gt;.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 5: Networking Services (ClusterIP, NodePort, LoadBalancer)</title><link>https://rhidayat.work/series/kubernetes/05-services-clusterip-nodeport-loadbalancer/</link><pubDate>Mon, 10 Aug 2026 00:25:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/05-services-clusterip-nodeport-loadbalancer/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Pods are ephemeral—they are created, destroyed, and rescheduled dynamically, causing their IP addresses to change constantly. A &lt;strong&gt;Kubernetes Service&lt;/strong&gt; provides a stable, persistent virtual IP (VIP), DNS name, and load balancing frontend across a dynamic set of backend Pods.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 4: Deployments, ReplicaSets &amp; Self-Healing Scaling</title><link>https://rhidayat.work/series/kubernetes/04-deployments-replicasets-and-scaling/</link><pubDate>Mon, 10 Aug 2026 00:20:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/04-deployments-replicasets-and-scaling/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 While Pods are the basic building blocks of Kubernetes, you should rarely deploy bare Pods directly. Instead, production applications use &lt;strong&gt;Deployments&lt;/strong&gt;, a higher-level abstraction that manages &lt;strong&gt;ReplicaSets&lt;/strong&gt; to guarantee high availability, self-healing, and seamless scaling.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 3: kubectl CLI &amp; Launching Your First Pod</title><link>https://rhidayat.work/series/kubernetes/03-kubectl-cli-and-first-pod/</link><pubDate>Mon, 10 Aug 2026 00:15:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/03-kubectl-cli-and-first-pod/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The &lt;strong&gt;&lt;code&gt;kubectl&lt;/code&gt;&lt;/strong&gt; command-line interface is the primary tool platform engineers and developers use to interact with Kubernetes clusters. In this episode, we&amp;rsquo;ll configure &lt;code&gt;kubectl&lt;/code&gt; and deploy our first atomic Kubernetes primitive: the &lt;strong&gt;Pod&lt;/strong&gt;.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 2: Architecture - Control Plane &amp; Worker Nodes</title><link>https://rhidayat.work/series/kubernetes/02-architecture-control-plane-and-worker-nodes/</link><pubDate>Mon, 10 Aug 2026 00:10:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/02-architecture-control-plane-and-worker-nodes/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 A Kubernetes cluster consists of two primary logical layers: the &lt;strong&gt;Control Plane&lt;/strong&gt; (the cluster&amp;rsquo;s brain) and &lt;strong&gt;Worker Nodes&lt;/strong&gt; (the muscle that runs application containers). Understanding how these components communicate is crucial for cluster administration and troubleshooting.
&lt;/div&gt;</description></item><item><title>Kubernetes Ep 1: Introduction to Kubernetes &amp; Containers</title><link>https://rhidayat.work/series/kubernetes/01-introduction-to-kubernetes-and-containers/</link><pubDate>Mon, 10 Aug 2026 00:05:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/01-introduction-to-kubernetes-and-containers/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The evolution of modern infrastructure has transitioned from physical bare-metal servers to Virtual Machines (VMs), lightweight OCI Containers, and ultimately automated Container Orchestration platforms like &lt;strong&gt;Kubernetes&lt;/strong&gt;.
&lt;/div&gt;</description></item><item><title>Kratix Ep 12: Production Reference Architecture</title><link>https://rhidayat.work/series/kratix/12-production-reference-architecture-repository/</link><pubDate>Sun, 09 Aug 2026 22:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/12-production-reference-architecture-repository/</guid><description>We have reached the end of our journey. In this final episode, we combine everything we have learned—Kratix, Crossplane, ArgoCD, Vault, Prometheus, and Backstage—into a single, comprehensive reference architecture diagram that you can use to build your enterprise IDP.</description></item><item><title>Kratix Ep 11: Full IDP Integration with Backstage</title><link>https://rhidayat.work/series/kratix/11-full-idp-integration-unified-dashboard/</link><pubDate>Sun, 09 Aug 2026 21:50:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/11-full-idp-integration-unified-dashboard/</guid><description>While kubectl is powerful, it is not a Developer Portal. In this episode, we integrate Kratix with Backstage, creating a unified Web UI where developers can browse the service catalog, request infrastructure, and monitor their applications without ever opening a terminal.</description></item><item><title>Kratix Ep 10: Observability and Operations</title><link>https://rhidayat.work/series/kratix/10-observability-and-operations/</link><pubDate>Sun, 09 Aug 2026 21:40:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/10-observability-and-operations/</guid><description>Operating a multi-cluster architecture introduces a massive observability challenge. If a Kratix Pipeline fails, the logs are in the Platform cluster. If the physical database fails, the logs are in the Worker cluster. In this episode, we build a centralized monitoring stack using Prometheus and Grafana.</description></item><item><title>Kratix Ep 9: Promise CI/CD with GitHub Actions</title><link>https://rhidayat.work/series/kratix/09-promise-cicd-github-gitlab/</link><pubDate>Sun, 09 Aug 2026 21:30:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/09-promise-cicd-github-gitlab/</guid><description>Platform Engineers write code too. When you build a complex Promise, you must compile the Pipeline container, lint the YAML, and safely deploy it to the Platform Cluster. In this episode, we build a robust GitHub Actions CI/CD pipeline to automate the lifecycle of Kratix Promises.</description></item><item><title>Kratix Ep 8: Developer Self-Service Workflow</title><link>https://rhidayat.work/series/kratix/08-developer-self-service-workflow/</link><pubDate>Sun, 09 Aug 2026 21:20:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/08-developer-self-service-workflow/</guid><description>We have spent 7 episodes architecting a massively scalable, secure backend. But if the Developer Experience (DX) is terrible, no one will use it. In this episode, we switch personas to the Application Developer and explore the day-to-day workflow of consuming a Kratix Platform.</description></item><item><title>Kratix Ep 7: Secrets Management with ESO and Vault</title><link>https://rhidayat.work/series/kratix/07-secrets-management-eso-vault/</link><pubDate>Sun, 09 Aug 2026 21:10:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/07-secrets-management-eso-vault/</guid><description>GitOps has one fatal flaw: You cannot commit secrets to a Git repository. When Kratix generates a Redis password during a Pipeline execution, how does it securely deliver that password to the Worker Cluster? In this episode, we solve the GitOps secrets problem using HashiCorp Vault and ESO.</description></item><item><title>Kratix Ep 6: FluxCD GitOps Integration</title><link>https://rhidayat.work/series/kratix/06-fluxcd-gitops-integration/</link><pubDate>Sun, 09 Aug 2026 21:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/06-fluxcd-gitops-integration/</guid><description>If your organization prefers Flux over ArgoCD, Kratix supports it natively without any modifications to the Platform Cluster. Because Kratix simply writes standard YAML to a Git repository, any GitOps controller can act as the delivery agent. In this episode, we configure FluxCD on the Worker Cluster.</description></item><item><title>Kratix Ep 5: ArgoCD GitOps Integration</title><link>https://rhidayat.work/series/kratix/05-argocd-gitops-integration/</link><pubDate>Sun, 09 Aug 2026 20:50:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/05-argocd-gitops-integration/</guid><description>In this episode, we learn HOW to execute the GitOps pull model in practice. We will configure ArgoCD on a Worker Cluster to continuously sync the Redis StatefulSet YAML generated by our Kratix Pipeline, ensuring you understand the mechanics of the State Store.</description></item><item><title>Kratix Ep 4: Core Concepts Deep Dive (How-To)</title><link>https://rhidayat.work/series/kratix/04-kratix-core-concepts-deep-dive/</link><pubDate>Sun, 09 Aug 2026 20:40:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/04-kratix-core-concepts-deep-dive/</guid><description>Enough theory. It&amp;rsquo;s time to look at the YAML. In this episode, we build the E-Commerce Redis Promise line-by-line. We will examine the API schema, the Pipeline configuration, and the Destination selectors that make multi-cluster deployment possible, ensuring you understand exactly how Kratix executes your logic.</description></item><item><title>Kratix Ep 3: Kratix GitOps vs Crossplane GitOps</title><link>https://rhidayat.work/series/kratix/03-kratix-gitops-vs-crossplane-gitops/</link><pubDate>Sun, 09 Aug 2026 20:30:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/03-kratix-gitops-vs-crossplane-gitops/</guid><description>Crossplane uses GitOps to provision AWS infrastructure. Kratix uses GitOps to orchestrate Promises. This frequently leads to severe architectural confusion for teams adopting Platform Engineering. In this episode, we define the exact boundary between the two tools and learn how they complement each other in a Production IDP.</description></item><item><title>Kratix Ep 2: Multi-Cluster Architecture &amp; IaC</title><link>https://rhidayat.work/series/kratix/02-multi-cluster-architecture-and-iac/</link><pubDate>Sun, 09 Aug 2026 20:20:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/02-multi-cluster-architecture-and-iac/</guid><description>In this episode, we deeply analyze the &amp;lsquo;Where&amp;rsquo; of the 5W1H framework. We will map out the Hub and Spoke topology, learn why Kratix intentionally isolates the Platform Cluster from the Worker Clusters for security, and explore how traditional Infrastructure-as-Code (like Terraform) executes inside this GitOps-driven model.</description></item><item><title>Crossplane Ep 15: Building an IDP with Backstage</title><link>https://rhidayat.work/series/crossplane/advanced/15-building-an-idp-with-backstage/</link><pubDate>Sun, 09 Aug 2026 19:40:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/15-building-an-idp-with-backstage/</guid><description>We have built the APIs, the translation engine, the GitOps pipeline, and the security webhooks. But developers still have to write YAML to request a database. In this final episode, we integrate Crossplane with Backstage to create the ultimate Internal Developer Portal (IDP).</description></item><item><title>Crossplane Ep 14: Custom Composition Webhooks</title><link>https://rhidayat.work/series/crossplane/advanced/14-custom-composition-webhooks/</link><pubDate>Sun, 09 Aug 2026 19:30:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/14-custom-composition-webhooks/</guid><description>OpenAPI schema validation (like &lt;code&gt;type: integer&lt;/code&gt;) is too basic for enterprise security. What if you need to enforce that a database&amp;rsquo;s storage size is an even number, or that the requested environment matches a specific regex? In this episode, we write a Kubernetes Validating Webhook in Go to intercept and inspect Crossplane Claims.</description></item><item><title>Crossplane Ep 13: Provider Families and Performance</title><link>https://rhidayat.work/series/crossplane/advanced/13-provider-family-and-performance/</link><pubDate>Sun, 09 Aug 2026 19:20:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/13-provider-family-and-performance/</guid><description>If you install the monolithic &lt;code&gt;provider-aws&lt;/code&gt; package into a small EKS cluster, your Kubernetes API server might crash. AWS has over 1,000 resources, meaning Crossplane will inject 1,000 CRDs and run a massive Go controller in memory. In this episode, we learn how to architect high-performance Crossplane clusters using Provider Families.</description></item><item><title>Crossplane Ep 12: GitOps with ArgoCD and Crossplane</title><link>https://rhidayat.work/series/crossplane/advanced/12-gitops-with-argocd-and-crossplane/</link><pubDate>Sun, 09 Aug 2026 19:10:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/12-gitops-with-argocd-and-crossplane/</guid><description>If you are running &lt;code&gt;kubectl apply -f my-database.yaml&lt;/code&gt; from your laptop, you are doing it wrong. In modern Platform Engineering, no human should ever talk directly to the Kubernetes API. In this episode, we configure ArgoCD to automatically deploy Crossplane XRs directly from a GitHub repository.</description></item><item><title>Crossplane Ep 11: Writing Composition Functions in Go</title><link>https://rhidayat.work/series/crossplane/advanced/11-writing-composition-functions-in-go/</link><pubDate>Sun, 09 Aug 2026 19:00:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/11-writing-composition-functions-in-go/</guid><description>In Episode 10, we learned that Composition Functions allow us to escape the limitations of YAML. In this episode, we will write a custom Go program that dynamically generates an array of AWS Subnets based on a single integer provided by the Application Developer.</description></item><item><title>Crossplane Ep 10: Introduction to Composition Functions</title><link>https://rhidayat.work/series/crossplane/intermediate/10-composition-functions-introduction/</link><pubDate>Sun, 09 Aug 2026 18:40:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/intermediate/10-composition-functions-introduction/</guid><description>YAML is excellent for configuration, but terrible for programming. As your Platform scales, you will inevitably need &lt;code&gt;for&lt;/code&gt; loops, complex &lt;code&gt;if/else&lt;/code&gt; logic, and external API calls. In this final intermediate episode, we introduce Composition Functions—the architecture that allows you to write Crossplane logic in Turing-complete languages.</description></item><item><title>Crossplane Ep 9: Troubleshooting Sync Errors</title><link>https://rhidayat.work/series/crossplane/intermediate/09-troubleshooting-crossplane-sync-errors/</link><pubDate>Sun, 09 Aug 2026 18:30:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/intermediate/09-troubleshooting-crossplane-sync-errors/</guid><description>When you run &lt;code&gt;terraform apply&lt;/code&gt;, you get immediate red text in your console if an AWS API call fails. Because Crossplane is an asynchronous control loop, &lt;code&gt;kubectl apply&lt;/code&gt; always succeeds immediately. When a database fails to boot 10 minutes later, how do you find the error? In this episode, we learn the Crossplane troubleshooting cascade.</description></item><item><title>Crossplane Ep 8: Managing Dependencies Between Resources</title><link>https://rhidayat.work/series/crossplane/intermediate/08-managing-dependencies-between-resources/</link><pubDate>Sun, 09 Aug 2026 18:20:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/intermediate/08-managing-dependencies-between-resources/</guid><description>If a Composition provisions both an AWS VPC and a Subnet, the Subnet physically cannot be created until the VPC exists and returns an ID. In Terraform, you use implicit dependency mapping (e.g., &lt;code&gt;vpc_id = aws_vpc.main.id&lt;/code&gt;). In Crossplane, we manage this using Cross-Resource References and Selector matching.</description></item><item><title>Crossplane Ep 7: Environment Configs</title><link>https://rhidayat.work/series/crossplane/intermediate/07-environment-configs/</link><pubDate>Sun, 09 Aug 2026 18:10:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/intermediate/07-environment-configs/</guid><description>If your company has three clusters (Development, Staging, and Production), you do not want to write three different Compositions for the same RDS database. In this episode, we learn how to use Crossplane EnvironmentConfigs to inject global context (like AWS Account IDs, VPC IDs, and Regions) dynamically into your Compositions.</description></item><item><title>Crossplane Ep 6: Patching and Transforms</title><link>https://rhidayat.work/series/crossplane/intermediate/06-patching-and-transforms/</link><pubDate>Sun, 09 Aug 2026 18:00:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/intermediate/06-patching-and-transforms/</guid><description>In Episode 5, we hardcoded our RDS instance size to 20GB. If a developer asked for 50GB in their Claim, Crossplane ignored it. In this episode, we explore the Patcher, learning how to dynamically route data from the Composite Resource (XR) into the physical Managed Resources (MRs).</description></item><item><title>Crossplane Ep 5: Compositions</title><link>https://rhidayat.work/series/crossplane/fundamental/05-compositions/</link><pubDate>Sun, 09 Aug 2026 17:50:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/fundamental/05-compositions/</guid><description>In Episode 4, we built an API (XRD) but it didn&amp;rsquo;t actually create any AWS infrastructure. In this final fundamental episode, we write a Composition. This is the &amp;rsquo;translation engine&amp;rsquo; that instructs Crossplane exactly which physical Managed Resources to create when a developer requests our custom API.</description></item><item><title>Crossplane Ep 4: Composite Resources (XR)</title><link>https://rhidayat.work/series/crossplane/fundamental/04-composite-resources-xr/</link><pubDate>Sun, 09 Aug 2026 17:40:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/fundamental/04-composite-resources-xr/</guid><description>Managed Resources (MRs) are too low-level for application developers. In this episode, we learn how to define a Composite Resource Definition (XRD). This allows Platform Engineers to design a brand new, highly abstracted Custom Kubernetes API tailored exactly to their company&amp;rsquo;s needs.</description></item><item><title>Crossplane Ep 3: Managed Resources (MR)</title><link>https://rhidayat.work/series/crossplane/fundamental/03-managed-resources-mr/</link><pubDate>Sun, 09 Aug 2026 17:30:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/fundamental/03-managed-resources-mr/</guid><description>A Managed Resource (MR) is the foundational building block of Crossplane. It is a 1-to-1 representation of a physical cloud object (like an S3 Bucket or an RDS Instance) stored as a Custom Resource in Kubernetes. In this episode, we provision our first AWS resource directly via kubectl.</description></item><item><title>Crossplane Ep 2: Providers and Credentials</title><link>https://rhidayat.work/series/crossplane/fundamental/02-providers-and-credentials/</link><pubDate>Sun, 09 Aug 2026 17:20:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/fundamental/02-providers-and-credentials/</guid><description>Crossplane is useless on its own. To orchestrate AWS, Azure, or GCP, we must install Providers. In this episode, we install the official Upbound AWS Provider, configure Kubernetes Secrets to store our IAM credentials, and bind them to a ProviderConfig.</description></item><item><title>Crossplane Ep 1: The Kubernetes Native Control Plane</title><link>https://rhidayat.work/series/crossplane/fundamental/01-the-kubernetes-native-control-plane/</link><pubDate>Sun, 09 Aug 2026 17:10:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/fundamental/01-the-kubernetes-native-control-plane/</guid><description>To understand Crossplane, you must first understand the Kubernetes Control Loop. In this episode, we explore the theoretical difference between CLI-driven IaC (Terraform) and Control Plane IaC (Crossplane). We will then install Crossplane into a local cluster using Helm.</description></item><item><title>Docker Ep 5: Docker Compose for Local Microservices</title><link>https://rhidayat.work/series/docker/05-docker-compose-for-local-microservices/</link><pubDate>Sun, 09 Aug 2026 16:40:00 +0000</pubDate><guid>https://rhidayat.work/series/docker/05-docker-compose-for-local-microservices/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Running 10 &lt;code&gt;docker run&lt;/code&gt; commands manually with complex flags is tedious and error-prone. Docker Compose allows you to define and run your entire multi-container infrastructure declaratively in a single YAML file.
&lt;/div&gt;</description></item><item><title>Pulumi Ep 15: Multi-Language Components (MLC)</title><link>https://rhidayat.work/series/pulumi/advanced/15-multi-language-components/</link><pubDate>Sun, 09 Aug 2026 16:40:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/advanced/15-multi-language-components/</guid><description>In Episode 7, we built a reusable TypeScript ComponentResource. But what if the Data Science team wants to use your component in their Python IaC? Historically, they couldn&amp;rsquo;t. Pulumi Multi-Language Components (MLC) solves this by using gRPC to project your TypeScript code across all supported languages.</description></item><item><title>Docker Ep 4: Volumes &amp; Data Persistence</title><link>https://rhidayat.work/series/docker/04-docker-volumes-and-data-persistence/</link><pubDate>Sun, 09 Aug 2026 16:35:00 +0000</pubDate><guid>https://rhidayat.work/series/docker/04-docker-volumes-and-data-persistence/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 By default, all files created inside a container are stored on a writable container layer. When that container is deleted, the data is destroyed. Docker Volumes solve this by storing data outside the container filesystem.
&lt;/div&gt;</description></item><item><title>Docker Ep 3: Docker Networking Deep Dive</title><link>https://rhidayat.work/series/docker/03-docker-networking-deep-dive/</link><pubDate>Sun, 09 Aug 2026 16:30:00 +0000</pubDate><guid>https://rhidayat.work/series/docker/03-docker-networking-deep-dive/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 How do two containers on the same host talk to each other without exposing ports to the public internet? Docker uses Linux virtual network interfaces (&lt;code&gt;veth&lt;/code&gt; pairs) connected to a software &lt;code&gt;bridge&lt;/code&gt;.
&lt;/div&gt;</description></item><item><title>Pulumi Ep 14: Policy as Code with CrossGuard</title><link>https://rhidayat.work/series/pulumi/advanced/14-policy-as-code-with-crossguard/</link><pubDate>Sun, 09 Aug 2026 16:30:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/advanced/14-policy-as-code-with-crossguard/</guid><description>In Terraform, enforcing security rules requires external tools like OPA (Open Policy Agent) and Rego. Pulumi provides a native Policy-as-Code engine called CrossGuard. In this episode, we will write TypeScript policies that act as a strict firewall, preventing developers from provisioning insecure infrastructure.</description></item><item><title>Docker Ep 2: Writing Production Dockerfiles</title><link>https://rhidayat.work/series/docker/02-writing-production-dockerfiles/</link><pubDate>Sun, 09 Aug 2026 16:25:00 +0000</pubDate><guid>https://rhidayat.work/series/docker/02-writing-production-dockerfiles/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Shipping a 1GB Docker image containing compilers, debuggers, and build tools to production is a security nightmare. Multi-Stage Builds allow you to separate the build environment from the tiny runtime container.
&lt;/div&gt;</description></item><item><title>Docker Ep 1: Architecture &amp; Container Primitives</title><link>https://rhidayat.work/series/docker/01-docker-architecture-and-container-basics/</link><pubDate>Sun, 09 Aug 2026 16:20:00 +0000</pubDate><guid>https://rhidayat.work/series/docker/01-docker-architecture-and-container-basics/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Containers do not exist as physical entities inside the Linux kernel. A &amp;ldquo;container&amp;rdquo; is simply a standard Linux process isolated via &lt;strong&gt;Namespaces&lt;/strong&gt;, throttled by &lt;strong&gt;cgroups&lt;/strong&gt;, and mounted on an &lt;strong&gt;Overlay2&lt;/strong&gt; union filesystem.
&lt;/div&gt;</description></item><item><title>Pulumi Ep 13: Unit Testing Infrastructure (Jest)</title><link>https://rhidayat.work/series/pulumi/advanced/13-unit-testing-infrastructure/</link><pubDate>Sun, 09 Aug 2026 16:20:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/advanced/13-unit-testing-infrastructure/</guid><description>Testing infrastructure usually means deploying it to a sandbox, waiting 15 minutes, running a bash script to ping an IP, and tearing it down. Because Pulumi is TypeScript, we can use the industry-standard Jest testing framework to write offline, millisecond unit tests to validate our infrastructure logic &lt;em&gt;before&lt;/em&gt; we ever touch the cloud.</description></item><item><title>CKS Deep Guide: Cluster Hardening &amp; Runtime Security</title><link>https://rhidayat.work/series/kubernetes-certification-path/cks/01-cks-cluster-hardening-and-runtime-security/</link><pubDate>Sun, 09 Aug 2026 16:15:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/cks/01-cks-cluster-hardening-and-runtime-security/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The &lt;strong&gt;Certified Kubernetes Security Specialist (CKS)&lt;/strong&gt; is the pinnacle performance exam testing your ability to secure containerized workloads, harden Kubernetes clusters, and detect runtime attacks.
&lt;/div&gt;</description></item><item><title>CKAD Deep Guide: Application Design &amp; Deployment Strategies</title><link>https://rhidayat.work/series/kubernetes-certification-path/ckad/01-ckad-application-design-and-deployment-strategies/</link><pubDate>Sun, 09 Aug 2026 16:10:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/ckad/01-ckad-application-design-and-deployment-strategies/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The &lt;strong&gt;Certified Kubernetes Application Developer (CKAD)&lt;/strong&gt; exam tests your ability to design, build, expose, and troubleshoot cloud-native applications running inside Kubernetes clusters.
&lt;/div&gt;</description></item><item><title>Pulumi Ep 12: Authoring Dynamic Providers</title><link>https://rhidayat.work/series/pulumi/advanced/12-dynamic-providers/</link><pubDate>Sun, 09 Aug 2026 16:10:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/advanced/12-dynamic-providers/</guid><description>What happens when you need to provision a resource in a system that doesn&amp;rsquo;t have an official Pulumi plugin? In Terraform, you must write complex Go code, compile a binary, and distribute it. In Pulumi, you can author a Dynamic Provider directly in your &lt;code&gt;index.ts&lt;/code&gt; file using pure TypeScript.</description></item><item><title>CKA Deep Guide: Cluster Architecture, Installation &amp; etcd Backup</title><link>https://rhidayat.work/series/kubernetes-certification-path/cka/01-cka-cluster-architecture-installation-and-configuration/</link><pubDate>Sun, 09 Aug 2026 16:05:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/cka/01-cka-cluster-architecture-installation-and-configuration/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The &lt;strong&gt;Certified Kubernetes Administrator (CKA)&lt;/strong&gt; exam is a 100% performance-based practical exam. You must execute complex administrative tasks directly inside Linux terminal command lines within a 2-hour window.
&lt;/div&gt;</description></item><item><title>KCNA Deep Guide: Cloud Native Architecture &amp; Exam Mastery</title><link>https://rhidayat.work/series/kubernetes-certification-path/kcna/01-kcna-exam-guide-and-cloud-native-fundamentals/</link><pubDate>Sun, 09 Aug 2026 16:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/kcna/01-kcna-exam-guide-and-cloud-native-fundamentals/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The &lt;strong&gt;Kubernetes and Cloud Native Associate (KCNA)&lt;/strong&gt; certification tests your foundational understanding of the Cloud Native ecosystem, CNCF project landscape, and Kubernetes control plane mechanics.
&lt;/div&gt;</description></item><item><title>Pulumi Ep 11: The Automation API (Embedded Pulumi)</title><link>https://rhidayat.work/series/pulumi/advanced/11-automation-api/</link><pubDate>Sun, 09 Aug 2026 16:00:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/advanced/11-automation-api/</guid><description>Running &lt;code&gt;pulumi up&lt;/code&gt; from a CLI is great for Platform Engineers, but what if you want to build a self-service Internal Developer Portal (IDP) where developers click a button on a web page to provision a database? The Pulumi Automation API allows you to embed the entire Pulumi Engine inside your own Node.js, Python, or Go applications.</description></item><item><title>TS Ep 70: Building a REST API with Effect</title><link>https://rhidayat.work/series/typescript/functional-effect/15-building-a-rest-api-with-effect/</link><pubDate>Sun, 09 Aug 2026 15:55:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/15-building-a-rest-api-with-effect/</guid><description>We assemble the ultimate functional backend. Learn how to combine Layers, Context, Schema Validation, Error Handling, and Resource Management into a massive, production-grade Express REST API using @effect/platform.</description></item><item><title>TS Ep 69: Managing Resources and Scope</title><link>https://rhidayat.work/series/typescript/functional-effect/14-resource-management-acquire-release/</link><pubDate>Sun, 09 Aug 2026 15:50:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/14-resource-management-acquire-release/</guid><description>Learn how to safely acquire and release resources like database connections and file streams. The Scope API replaces try/finally blocks, guaranteeing cleanup even if your application crashes.</description></item><item><title>TS Ep 68: Effect Schema Validation</title><link>https://rhidayat.work/series/typescript/functional-effect/13-effect-schema-validation/</link><pubDate>Sun, 09 Aug 2026 15:45:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/13-effect-schema-validation/</guid><description>TypeScript interfaces do not exist at runtime. To protect your application from malformed API payloads and corrupted database rows, learn how to use @effect/schema to parse and validate data perfectly.</description></item><item><title>Pulumi Ep 10: Using Native Providers (AWS Classic vs AWS Native)</title><link>https://rhidayat.work/series/pulumi/intermediate/10-using-native-providers/</link><pubDate>Sun, 09 Aug 2026 15:40:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/intermediate/10-using-native-providers/</guid><description>Did you know that the &lt;code&gt;@pulumi/aws&lt;/code&gt; package you have been using is actually built on top of Terraform? In this final intermediate episode, we explore the difference between &amp;lsquo;Bridged&amp;rsquo; providers and &amp;lsquo;Native&amp;rsquo; providers, and learn how &lt;code&gt;@pulumi/aws-native&lt;/code&gt; directly communicates with the AWS Cloud Control API.</description></item><item><title>TS Ep 67: Concurrency and Fibers</title><link>https://rhidayat.work/series/typescript/functional-effect/12-concurrency-and-fibers/</link><pubDate>Sun, 09 Aug 2026 15:40:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/12-concurrency-and-fibers/</guid><description>Learn how Effect-TS implements Fibers (green threads) to allow millions of concurrent operations. Master &lt;code&gt;Effect.all&lt;/code&gt;, concurrency limits, and safe interruption of background tasks.</description></item><item><title>TS Ep 66: Layers &amp; Service Wiring</title><link>https://rhidayat.work/series/typescript/functional-effect/11-layers-and-service-wiring/</link><pubDate>Sun, 09 Aug 2026 15:35:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/11-layers-and-service-wiring/</guid><description>Providing single services is easy, but enterprise applications have massive dependency graphs. Learn how to use Effect Layers to wire services together, handle async initialization, and resolve graphs perfectly.</description></item><item><title>Pulumi Ep 9: Pulumi Packages and the Registry</title><link>https://rhidayat.work/series/pulumi/intermediate/09-pulumi-packages-and-registry/</link><pubDate>Sun, 09 Aug 2026 15:30:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/intermediate/09-pulumi-packages-and-registry/</guid><description>Platform Engineering is rarely confined to a single cloud. You often need to provision AWS servers, configure GitHub repositories, and set up DataDog dashboards simultaneously. In this episode, we learn how to leverage the Pulumi Registry to install third-party Providers and orchestrate multi-cloud deployments from a single TypeScript file.</description></item><item><title>TS Ep 65: Context &amp; Dependency Injection</title><link>https://rhidayat.work/series/typescript/functional-effect/10-context-and-dependency-injection/</link><pubDate>Sun, 09 Aug 2026 15:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/10-context-and-dependency-injection/</guid><description>Eliminate global singletons and complex IoC containers. Learn how the R parameter in Effect&amp;lt;A, E, R&amp;gt; forces you to provide dependencies before your program can run, ensuring perfect testability.</description></item><item><title>TS Ep 64: Error Handling in Effect</title><link>https://rhidayat.work/series/typescript/functional-effect/09-error-handling-in-effect/</link><pubDate>Sun, 09 Aug 2026 15:25:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/09-error-handling-in-effect/</guid><description>Effect-TS completely reimagines error handling. Learn the difference between Expected Failures and Unexpected Defects, and how to use &lt;code&gt;catchTag&lt;/code&gt; to build resilient, self-documenting pipelines.</description></item><item><title>Pulumi Ep 8: Cross-Stack References (Micro-Stacks)</title><link>https://rhidayat.work/series/pulumi/intermediate/08-cross-stack-references/</link><pubDate>Sun, 09 Aug 2026 15:20:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/intermediate/08-cross-stack-references/</guid><description>Deploying your entire infrastructure (Networking, Databases, Kubernetes, and Frontend) in a single Pulumi stack is dangerous. A tiny typo in an S3 bucket configuration could accidentally trigger the destruction of your VPC. In this episode, we learn how to architect Micro-Stacks and stitch them together using StackReference.</description></item><item><title>TS Ep 63: Creating and Running Effects</title><link>https://rhidayat.work/series/typescript/functional-effect/08-creating-and-running-effects/</link><pubDate>Sun, 09 Aug 2026 15:20:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/08-creating-and-running-effects/</guid><description>To use Effect-TS, you must know how to bridge the gap between the chaotic outside world and your pure functional pipeline. Master the constructors and execution methods of the Effect runtime.</description></item><item><title>TS Ep 62: The Effect Type Signature</title><link>https://rhidayat.work/series/typescript/functional-effect/07-effect-type-signature/</link><pubDate>Sun, 09 Aug 2026 15:15:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/07-effect-type-signature/</guid><description>The heart of Effect-TS is its three-parameter type signature. Master the A (Success), E (Error), and R (Requirement) parameters to unlock perfect architectural safety.</description></item><item><title>Pulumi Ep 7: Abstraction with ComponentResources</title><link>https://rhidayat.work/series/pulumi/intermediate/07-abstraction-with-componentresources/</link><pubDate>Sun, 09 Aug 2026 15:10:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/intermediate/07-abstraction-with-componentresources/</guid><description>Terraform relies on Modules for abstraction, which are essentially isolated directories of HCL files. Pulumi takes a much more elegant approach. Because we are using a real programming language, we can abstract complex architectures into reusable TypeScript Classes called ComponentResources.</description></item><item><title>TS Ep 61: Introduction to Effect-TS</title><link>https://rhidayat.work/series/typescript/functional-effect/06-introduction-to-effect-ts/</link><pubDate>Sun, 09 Aug 2026 15:10:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/06-introduction-to-effect-ts/</guid><description>We have built the functional foundation. Now it is time to enter the ecosystem. Discover why Effect-TS is rapidly becoming the standard library for enterprise TypeScript, and run your first pure asynchronous program.</description></item><item><title>TS Ep 60: Function Composition (Pipe &amp; Flow)</title><link>https://rhidayat.work/series/typescript/functional-effect/05-function-composition-pipe-flow/</link><pubDate>Sun, 09 Aug 2026 15:05:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/05-function-composition-pipe-flow/</guid><description>Learn how to avoid the &amp;lsquo;Pyramid of Doom&amp;rsquo; and method chaining limitations by embracing functional composition. We explore how &lt;code&gt;pipe&lt;/code&gt; and &lt;code&gt;flow&lt;/code&gt; allow you to build complex logic from small, testable pure functions.</description></item><item><title>Pulumi Ep 6: Loops and Conditional Infrastructure</title><link>https://rhidayat.work/series/pulumi/intermediate/06-loops-and-conditional-infrastructure/</link><pubDate>Sun, 09 Aug 2026 15:00:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/intermediate/06-loops-and-conditional-infrastructure/</guid><description>Welcome to the Intermediate Tier. The true advantage of using a general-purpose programming language for IaC is access to native control flow. In this episode, we will dynamically generate Subnets and Security Group rules using native array mapping and conditional logic based on environment flags.</description></item><item><title>TS Ep 59: Monadic Patterns (Option &amp; Either)</title><link>https://rhidayat.work/series/typescript/functional-effect/04-monadic-patterns-option-either/</link><pubDate>Sun, 09 Aug 2026 15:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/04-monadic-patterns-option-either/</guid><description>Learn how to wrap missing data and expected errors in type-safe containers. We explore the Option and Either monads, providing the final foundational step before entering the Effect-TS ecosystem.</description></item><item><title>TS Ep 58: Algebraic Data Types (ADTs)</title><link>https://rhidayat.work/series/typescript/functional-effect/03-algebraic-data-types-adt/</link><pubDate>Sun, 09 Aug 2026 14:55:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/03-algebraic-data-types-adt/</guid><description>Learn how to eliminate impossible states from your application by mastering Algebraic Data Types (ADTs). We explore Sum Types, Product Types, and exhaustive pattern matching in TypeScript.</description></item><item><title>Pulumi Ep 5: Inputs, Outputs, and Promises (The Asynchronous Conundrum)</title><link>https://rhidayat.work/series/pulumi/fundamental/05-inputs-outputs-and-promises/</link><pubDate>Sun, 09 Aug 2026 14:50:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/fundamental/05-inputs-outputs-and-promises/</guid><description>When you write standard TypeScript, data is computed immediately. But in Pulumi, when you request an EC2 instance&amp;rsquo;s IP address, the IP does not exist until AWS physically boots the server. This introduces temporal paradoxes. In this final fundamental episode, we master Inputs, Outputs, and how to safely manipulate asynchronous infrastructure data.</description></item><item><title>TS Ep 57: Immutability &amp; Readonly Data</title><link>https://rhidayat.work/series/typescript/functional-effect/02-immutability-and-readonly-data/</link><pubDate>Sun, 09 Aug 2026 14:50:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/02-immutability-and-readonly-data/</guid><description>Functional programming requires data to be immutable. Discover how to leverage TypeScript&amp;rsquo;s structural typing, &lt;code&gt;Readonly&amp;lt;T&amp;gt;&lt;/code&gt;, and &lt;code&gt;as const&lt;/code&gt; to enforce deep immutability at compile time, eliminating a massive category of state-based bugs.</description></item><item><title>TS Ep 56: Functional Programming Basics &amp; Pure Functions</title><link>https://rhidayat.work/series/typescript/functional-effect/01-functional-programming-basics-pure-functions/</link><pubDate>Sun, 09 Aug 2026 14:45:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/01-functional-programming-basics-pure-functions/</guid><description>Welcome to the final module! Before diving into Effect-TS, we must build a foundation in Functional Programming. Learn why pure functions eliminate whole classes of bugs, how separating descriptions from execution powers the Effect runtime, and how to refactor impure services into highly testable functional pipelines.</description></item><item><title>Pulumi Ep 4: Configuration and Secrets Management</title><link>https://rhidayat.work/series/pulumi/fundamental/04-configuration-and-secrets/</link><pubDate>Sun, 09 Aug 2026 14:40:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/fundamental/04-configuration-and-secrets/</guid><description>Hardcoding values like instance sizes and database passwords into your TypeScript code is a severe anti-pattern. In this episode, we learn how to decouple configuration from code using the Pulumi Config system, allowing the exact same codebase to deploy vastly different Staging and Production architectures.</description></item><item><title>TS Ep 24: The Polymorphic `this` Type &amp; Fluent APIs</title><link>https://rhidayat.work/series/typescript/classes-and-oop/09-the-this-type/</link><pubDate>Sun, 09 Aug 2026 14:40:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/classes-and-oop/09-the-this-type/</guid><description>An in-depth analysis of the polymorphic &lt;code&gt;this&lt;/code&gt; type in TypeScript. Learn how returning &lt;code&gt;: this&lt;/code&gt; preserves subclass type identities during method chaining, build type-safe Fluent Builder APIs, and use explicit &lt;code&gt;this&lt;/code&gt; parameters for callback binding safety.</description></item><item><title>TS Ep 23: Static Members, Static Blocks, and Singletons</title><link>https://rhidayat.work/series/typescript/classes-and-oop/08-static-members/</link><pubDate>Sun, 09 Aug 2026 14:35:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/classes-and-oop/08-static-members/</guid><description>An in-depth analysis of static class members in TypeScript. Learn how static properties attach to constructor functions, static access control, static blocks (&lt;code&gt;static {}&lt;/code&gt;), static inheritance, and implementing the Singleton Pattern using private constructors.</description></item><item><title>Pulumi Ep 3: Declaring Resources in TypeScript</title><link>https://rhidayat.work/series/pulumi/fundamental/03-declaring-resources-in-typescript/</link><pubDate>Sun, 09 Aug 2026 14:30:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/fundamental/03-declaring-resources-in-typescript/</guid><description>In Terraform, you write declarative configuration blocks. In Pulumi, you instantiate Object-Oriented classes. This episode explores how to declare complex resources like an AWS VPC, Security Group, and EC2 instance using pure TypeScript, while leveraging your IDE&amp;rsquo;s IntelliSense for maximum productivity.</description></item><item><title>TS Ep 22: Abstract Classes &amp; Template Method Pattern</title><link>https://rhidayat.work/series/typescript/classes-and-oop/07-abstract-classes/</link><pubDate>Sun, 09 Aug 2026 14:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/classes-and-oop/07-abstract-classes/</guid><description>An in-depth guide to Abstract Classes in TypeScript. Learn how &lt;code&gt;abstract class&lt;/code&gt; prevents direct instantiation, enforcing method implementation contracts on subclasses while sharing concrete base logic using the Template Method design pattern.</description></item><item><title>TS Ep 21: Class Inheritance, `super()`, and the `override` Keyword</title><link>https://rhidayat.work/series/typescript/classes-and-oop/06-inheritance-and-super/</link><pubDate>Sun, 09 Aug 2026 14:25:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/classes-and-oop/06-inheritance-and-super/</guid><description>An in-depth exploration of class inheritance in TypeScript. Learn how &lt;code&gt;extends&lt;/code&gt; establishes prototypal chain linkages, &lt;code&gt;super()&lt;/code&gt; constructor constraints, method overriding with &lt;code&gt;super.method()&lt;/code&gt;, and using TypeScript 4.3+ &lt;code&gt;override&lt;/code&gt; modifier to prevent silent refactoring bugs.</description></item><item><title>CKAD Ep 5: Storage &amp; Persistent Workloads</title><link>https://rhidayat.work/series/kubernetes-certification-path/ckad/05-ckad-application-storage-and-persistence/</link><pubDate>Sun, 09 Aug 2026 14:20:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/ckad/05-ckad-application-storage-and-persistence/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Containers are ephemeral by default—when a container restarts, all data written to its local filesystem is lost. On the CKAD exam, you must demonstrate how to attach persistent storage to Pods using PVCs and StorageClasses.
&lt;/div&gt;</description></item><item><title>Pulumi Ep 2: Stacks and State Management</title><link>https://rhidayat.work/series/pulumi/fundamental/02-stacks-and-state/</link><pubDate>Sun, 09 Aug 2026 14:20:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/fundamental/02-stacks-and-state/</guid><description>Managing state files in Terraform is notoriously difficult, requiring external buckets and DynamoDB locks. Pulumi solves this out-of-the-box using the Pulumi Service. In this episode, we explore how State is managed, and how to use Stacks to deploy identical infrastructure to Staging and Production environments safely.</description></item><item><title>TS Ep 20: Implementing Interfaces (`implements` Keyword)</title><link>https://rhidayat.work/series/typescript/classes-and-oop/05-implements-interfaces/</link><pubDate>Sun, 09 Aug 2026 14:20:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/classes-and-oop/05-implements-interfaces/</guid><description>An in-depth analysis of interface implementation in TypeScript. Learn how &lt;code&gt;implements&lt;/code&gt; validates class structure, why &lt;code&gt;implements&lt;/code&gt; does not infer method parameter types automatically, implementing multiple interfaces, and public contract enforcement.</description></item><item><title>CKAD Ep 4: Services, Ingress &amp; Network Policies</title><link>https://rhidayat.work/series/kubernetes-certification-path/ckad/04-ckad-application-services-and-networking/</link><pubDate>Sun, 09 Aug 2026 14:15:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/ckad/04-ckad-application-services-and-networking/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Services provide stable IP addresses for ephemeral Pods, Ingress controllers route HTTP/S domain traffic at Layer 7, and NetworkPolicies act as Pod-level firewalls. In this episode, we build production manifests for all three.
&lt;/div&gt;</description></item><item><title>TS Ep 19: Getters, Setters, and Asymmetric Accessors</title><link>https://rhidayat.work/series/typescript/classes-and-oop/04-getters-and-setters/</link><pubDate>Sun, 09 Aug 2026 14:15:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/classes-and-oop/04-getters-and-setters/</guid><description>An in-depth analysis of class accessors in TypeScript. Learn how &lt;code&gt;get&lt;/code&gt; and &lt;code&gt;set&lt;/code&gt; intercept reading and writing, computed properties, backing field naming patterns, and TypeScript 4.3+ Asymmetric Accessor Types.</description></item><item><title>CKAD Ep 3: ConfigMaps, Secrets &amp; Security Contexts</title><link>https://rhidayat.work/series/kubernetes-certification-path/ckad/03-ckad-application-environment-and-security/</link><pubDate>Sun, 09 Aug 2026 14:10:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/ckad/03-ckad-application-environment-and-security/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Decoupling application code from environment configuration and enforcing security policies is tested extensively on the CKAD exam. You must know how to pass ConfigMaps and Secrets into Pods as environment variables or volume mounts.
&lt;/div&gt;</description></item><item><title>Pulumi Ep 1: Introduction to Pulumi and Project Initialization</title><link>https://rhidayat.work/series/pulumi/fundamental/01-introduction-to-pulumi/</link><pubDate>Sun, 09 Aug 2026 14:10:00 +0000</pubDate><guid>https://rhidayat.work/series/pulumi/fundamental/01-introduction-to-pulumi/</guid><description>It is time to leave YAML behind. In this episode, we will install the Pulumi CLI, scaffold a brand new TypeScript project, and understand the anatomy of the generated files. You will learn how Pulumi securely integrates with your cloud provider credentials.</description></item><item><title>TS Ep 18: Parameter Properties — Concise Class Initializations</title><link>https://rhidayat.work/series/typescript/classes-and-oop/03-parameter-properties/</link><pubDate>Sun, 09 Aug 2026 14:10:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/classes-and-oop/03-parameter-properties/</guid><description>Learn how TypeScript parameter properties compress field declarations, constructor parameter typing, and &lt;code&gt;this&lt;/code&gt; assignments into one line. Understand compilation behavior, inheritance interaction with super(), and common duplicate identifier gotchas.</description></item><item><title>CKAD Ep 2: Deployments, Rollouts &amp; Canary Releases</title><link>https://rhidayat.work/series/kubernetes-certification-path/ckad/02-ckad-application-deployment-and-rollouts/</link><pubDate>Sun, 09 Aug 2026 14:05:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/ckad/02-ckad-application-deployment-and-rollouts/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Deployments manage ReplicaSets to automate application rollouts and rollbacks. The CKAD exam requires you to perform image updates, scale replicas, track revision history, and execute emergency rollbacks within seconds.
&lt;/div&gt;</description></item><item><title>TS Ep 17: Access Modifiers &amp; Hard Private Fields (#)</title><link>https://rhidayat.work/series/typescript/classes-and-oop/02-access-modifiers-public-private-protected/</link><pubDate>Sun, 09 Aug 2026 14:05:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/classes-and-oop/02-access-modifiers-public-private-protected/</guid><description>An in-depth analysis of class encapsulation. Understand the visibility matrix of public, private, and protected modifiers, inheritance rules in subclasses, compile-time type erasure, and how ES2022 hard private fields (&lt;code&gt;#&lt;/code&gt;) provide true runtime isolation.</description></item><item><title>CKAD Ep 1: Multi-Container Pod Patterns &amp; Design</title><link>https://rhidayat.work/series/kubernetes-certification-path/ckad/01-ckad-application-design-and-build/</link><pubDate>Sun, 09 Aug 2026 14:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/ckad/01-ckad-application-design-and-build/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Multi-container Pod patterns allow containers to share storage and network namespaces to extend functionality without modifying application source code. Designing these patterns under time pressure is a core domain of the CKAD exam.
&lt;/div&gt;</description></item><item><title>TS Ep 16: Class Basics, Field Declarations, and Constructors</title><link>https://rhidayat.work/series/typescript/classes-and-oop/01-class-basics-and-constructors/</link><pubDate>Sun, 09 Aug 2026 14:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/classes-and-oop/01-class-basics-and-constructors/</guid><description>An in-depth guide to TypeScript classes. Learn how field declarations differ from standard ES6 JavaScript, how strictPropertyInitialization eliminates uninitialized field bugs, readonly class fields, and the Definite Assignment Assertion operator (&lt;code&gt;!&lt;/code&gt;).</description></item><item><title>TS Ep 4: Functional TypeScript &amp; Effect-TS Prelude — Immutability, ADTs, and Type-Driven Error Handling</title><link>https://rhidayat.work/series/typescript/functional-effect/04-functional-typescript-and-effect-foundation/</link><pubDate>Sun, 09 Aug 2026 14:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/functional-effect/04-functional-typescript-and-effect-foundation/</guid><description>The functional programming masterclass for TypeScript developers. Bridge object-oriented patterns into pure functional architecture with Option/Either types, typed error handling without throw exceptions, pipe/flow composition, and an introduction to the Effect-TS ecosystem.</description></item><item><title>TS Ep 55: Advanced Function Composition</title><link>https://rhidayat.work/series/typescript/advanced/15-advanced-function-composition-typing/</link><pubDate>Sun, 09 Aug 2026 13:45:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/15-advanced-function-composition-typing/</guid><description>How do you type a pipe() function that takes an infinite number of functions, where the output of function A must perfectly match the input of function B? Welcome to the final boss of TypeScript.</description></item><item><title>TS Ep 54: The Builder Pattern with Generics</title><link>https://rhidayat.work/series/typescript/advanced/14-builder-pattern-with-generics/</link><pubDate>Sun, 09 Aug 2026 13:40:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/14-builder-pattern-with-generics/</guid><description>Learn how to build chainable APIs that accumulate type knowledge at every step. This Generic Accumulator pattern is the secret engine powering libraries like tRPC, Zod, and Prisma, providing unparalleled autocomplete.</description></item><item><title>TS Ep 53: Branding and Flavoring (Nominal Typing)</title><link>https://rhidayat.work/series/typescript/advanced/13-branding-and-flavoring-nominal-typing/</link><pubDate>Sun, 09 Aug 2026 13:35:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/13-branding-and-flavoring-nominal-typing/</guid><description>TypeScript doesn&amp;rsquo;t care if two types have different names; if they share the same shape, they are equivalent. Learn how to use Branding and Flavoring to force the compiler to differentiate between an OrderID string and a UserID string, powering Domain-Driven Design.</description></item><item><title>TS Ep 3: Advanced TypeScript — Conditional Types, Infer Keyword, and Template Literal Metaprogramming</title><link>https://rhidayat.work/series/typescript/advanced/03-conditional-types-infer-and-template-literals/</link><pubDate>Sun, 09 Aug 2026 13:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/03-conditional-types-infer-and-template-literals/</guid><description>An advanced masterclass in TypeScript type-level metaprogramming. Master conditional types (T extends U ? X : Y), distributive behavior, infer keyword pattern matching for unwrapping types, template literal types (${T}_${U}), and deep recursive object transformations.</description></item><item><title>TS Ep 52: Variance (Covariance vs Contravariance)</title><link>https://rhidayat.work/series/typescript/advanced/12-variance-covariance-contravariance/</link><pubDate>Sun, 09 Aug 2026 13:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/12-variance-covariance-contravariance/</guid><description>Why is it safe to return a subclass instead of a superclass, but dangerous to accept a superclass parameter instead of a subclass? Welcome to Variance: the computer science underpinning of TypeScript&amp;rsquo;s assignability engine.</description></item><item><title>KCNA Ep 5: Cloud Native Security &amp; GitOps Practices</title><link>https://rhidayat.work/series/kubernetes-certification-path/kcna/05-kcna-cloud-native-security-and-gitops-practices/</link><pubDate>Sun, 09 Aug 2026 13:25:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/kcna/05-kcna-cloud-native-security-and-gitops-practices/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Modern cloud-native operations rely on declarative security governance (RBAC, Network Policies) and automated continuous delivery (GitOps). In this final KCNA episode, we cover security fundamentals, GitOps workflows, and Service Meshes.
&lt;/div&gt;</description></item><item><title>TS Ep 51: Type-Level State Machines</title><link>https://rhidayat.work/series/typescript/advanced/11-type-level-state-machines/</link><pubDate>Sun, 09 Aug 2026 13:25:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/11-type-level-state-machines/</guid><description>Use mapped types and generics to enforce finite state transitions in the compiler. A type-level state machine makes impossible states impossible to represent, eliminating entire classes of runtime bugs.</description></item><item><title>KCNA Ep 4: Telemetry, Observability &amp; Monitoring</title><link>https://rhidayat.work/series/kubernetes-certification-path/kcna/04-kcna-cloud-native-telemetry-and-observability/</link><pubDate>Sun, 09 Aug 2026 13:20:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/kcna/04-kcna-cloud-native-telemetry-and-observability/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Observability allows engineers to infer the internal state of a complex distributed system based on its external outputs. For the KCNA exam, you must understand the Three Pillars of Observability and the CNCF tools that collect them.
&lt;/div&gt;</description></item><item><title>TS Ep 50: DeepReadonly and DeepPartial</title><link>https://rhidayat.work/series/typescript/advanced/10-deep-readonly-and-deep-partial/</link><pubDate>Sun, 09 Aug 2026 13:20:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/10-deep-readonly-and-deep-partial/</guid><description>The built-in &lt;code&gt;Partial&lt;/code&gt; and &lt;code&gt;Readonly&lt;/code&gt; utilities are shallow. Learn how to write your own &lt;code&gt;DeepReadonly&lt;/code&gt; and &lt;code&gt;DeepPartial&lt;/code&gt; utilities that penetrate every layer of nested objects by combining Generics, Conditionals, &lt;code&gt;infer&lt;/code&gt;, Mapped Types, and Recursion simultaneously.</description></item><item><title>KCNA Ep 3: Container Orchestration &amp; Workload Primitives</title><link>https://rhidayat.work/series/kubernetes-certification-path/kcna/03-kcna-container-orchestration-and-workloads/</link><pubDate>Sun, 09 Aug 2026 13:15:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/kcna/03-kcna-container-orchestration-and-workloads/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Workload resources define how application containers are scheduled, scaled, and managed across a Kubernetes cluster. Understanding when to choose a Deployment vs a StatefulSet, DaemonSet, or Job is essential for the KCNA exam.
&lt;/div&gt;</description></item><item><title>TS Ep 49: Recursive Types</title><link>https://rhidayat.work/series/typescript/advanced/09-recursive-types/</link><pubDate>Sun, 09 Aug 2026 13:15:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/09-recursive-types/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 How do you type a JSON object? A JSON object can contain arrays of objects, which can contain arrays of objects, infinitely down. You cannot hardcode this depth. You need a &lt;strong&gt;Recursive Type&lt;/strong&gt;.
&lt;/div&gt;</description></item><item><title>KCNA Ep 2: Kubernetes Fundamentals &amp; Architecture</title><link>https://rhidayat.work/series/kubernetes-certification-path/kcna/02-kcna-kubernetes-fundamentals-and-architecture/</link><pubDate>Sun, 09 Aug 2026 13:10:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/kcna/02-kcna-kubernetes-fundamentals-and-architecture/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 A Kubernetes cluster is divided into a Control Plane (the brain) and Worker Nodes (the muscle). Understanding how these components communicate via the declarative REST API is a core requirement for the KCNA exam.
&lt;/div&gt;</description></item><item><title>TS Ep 48: String Manipulation Utilities</title><link>https://rhidayat.work/series/typescript/advanced/08-string-manipulation-utilities/</link><pubDate>Sun, 09 Aug 2026 13:10:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/08-string-manipulation-utilities/</guid><description>TypeScript provides four built-in Intrinsic utilities that manipulate the casing of string literal types at compile time. Learn how to pair them with template literals and mapped types to dynamically generate robust event handler mappings.</description></item><item><title>KCNA Ep 1: CNCF Ecosystem &amp; Cloud Native Architecture</title><link>https://rhidayat.work/series/kubernetes-certification-path/kcna/01-kcna-exam-guide-and-cloud-native-ecosystem/</link><pubDate>Sun, 09 Aug 2026 13:05:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes-certification-path/kcna/01-kcna-exam-guide-and-cloud-native-ecosystem/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 The Kubernetes and Cloud Native Associate (KCNA) exam is a multiple-choice certification designed to test your foundational knowledge of the cloud-native ecosystem. In this first episode, we explore the CNCF landscape, cloud-native architecture patterns, and containerization principles.
&lt;/div&gt;</description></item><item><title>TS Ep 47: Template Literal Types</title><link>https://rhidayat.work/series/typescript/advanced/07-template-literal-types/</link><pubDate>Sun, 09 Aug 2026 13:05:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/07-template-literal-types/</guid><description>Template literal types allow you to use JavaScript-style template strings (&lt;code&gt;${...}&lt;/code&gt;) inside Type Space. Learn how to generate combinations of string literals automatically via Union Permutation, and parse delimited strings (like emails or URLs) using the &lt;code&gt;infer&lt;/code&gt; keyword.</description></item><item><title>TS Ep 2: Intermediate TypeScript — Generics, Type Helpers, and Mapped Types</title><link>https://rhidayat.work/series/typescript/intermediate/02-type-transformations-and-generics/</link><pubDate>Sun, 09 Aug 2026 13:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/02-type-transformations-and-generics/</guid><description>An in-depth guide to intermediate TypeScript type transformations. Master generic functions and constraints (extends), indexed access types, keyof/typeof operators, built-in helpers (Pick, Omit, Record, ReturnType), and mapped type transformations.</description></item><item><title>TS Ep 46: Inferring Tuples and Arrays</title><link>https://rhidayat.work/series/typescript/advanced/06-infer-with-tuples-and-arrays/</link><pubDate>Sun, 09 Aug 2026 13:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/06-infer-with-tuples-and-arrays/</guid><description>Pattern matching with &lt;code&gt;infer&lt;/code&gt; isn&amp;rsquo;t just for Promises and Objects. You can deconstruct Tuples and Arrays element by element in Type Space, mirroring the exact syntax of JavaScript&amp;rsquo;s array destructuring and spread operators.</description></item><item><title>TS Ep 45: Inferring Promises (`Awaited`)</title><link>https://rhidayat.work/series/typescript/advanced/05-infer-with-promises-awaited/</link><pubDate>Sun, 09 Aug 2026 12:55:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/05-infer-with-promises-awaited/</guid><description>Learn how the built-in &lt;code&gt;Awaited&amp;lt;T&amp;gt;&lt;/code&gt; utility models the runtime &lt;code&gt;await&lt;/code&gt; keyword. We explore how to combine the &lt;code&gt;infer&lt;/code&gt; keyword with Recursive Type Aliases to drill down and unwrap Promises infinitely deep, and how to compose it with &lt;code&gt;ReturnType&lt;/code&gt; for async functions.</description></item><item><title>TS Ep 44: The `infer` Keyword (Pattern Matching)</title><link>https://rhidayat.work/series/typescript/advanced/04-the-infer-keyword/</link><pubDate>Sun, 09 Aug 2026 12:50:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/04-the-infer-keyword/</guid><description>If conditional types are the if-else statements of Type Space, the &lt;code&gt;infer&lt;/code&gt; keyword is the variable declaration (&lt;code&gt;let x = ...&lt;/code&gt;). Learn how to extract types dynamically via pattern matching, rebuild &lt;code&gt;ReturnType&lt;/code&gt;, and parse Template Literal Strings at compile time.</description></item><item><title>TS Ep 43: Preventing Distribution (Tuples)</title><link>https://rhidayat.work/series/typescript/advanced/03-preventing-distribution/</link><pubDate>Sun, 09 Aug 2026 12:45:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/03-preventing-distribution/</guid><description>Sometimes, you want a conditional type to evaluate an entire Union as a single monolithic entity, rather than mapping over its individual members. Learn how wrapping generic parameters in brackets &lt;code&gt;[T]&lt;/code&gt; prevents distribution, and how to use this mechanic to build complex &lt;code&gt;IsUnion&lt;/code&gt; checks.</description></item><item><title>TS Ep 42: Distributive Conditional Types</title><link>https://rhidayat.work/series/typescript/advanced/02-distributive-conditional-types/</link><pubDate>Sun, 09 Aug 2026 12:40:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/02-distributive-conditional-types/</guid><description>When you pass a Union type into a conditional type, TypeScript doesn&amp;rsquo;t evaluate the union as a whole. It evaluates every single member of the union separately, and combines the results. Learn how this powerful (and sometimes confusing) mechanism powers TypeScript&amp;rsquo;s standard library.</description></item><item><title>TS Ep 41: Conditional Types (The Basics)</title><link>https://rhidayat.work/series/typescript/advanced/01-conditional-types-basics/</link><pubDate>Sun, 09 Aug 2026 12:35:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/advanced/01-conditional-types-basics/</guid><description>Conditional types are the if-else statements of Type Space. Learn how to use the &amp;rsquo;extends ? :&amp;rsquo; syntax to compute dynamic types based on assignability logic, replace complex function overloads, and construct nested else-if type chains.</description></item><item><title>TS Ep 1: Fundamental TypeScript — Inference, Type Narrowing, and Discriminated Unions</title><link>https://rhidayat.work/series/typescript/fundamental/01-typescript-fundamentals-and-narrowing/</link><pubDate>Sun, 09 Aug 2026 12:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/01-typescript-fundamentals-and-narrowing/</guid><description>The foundational guide to mastering TypeScript. Learn how the type inference engine works, master type narrowing with typeof, instanceof, in, and custom type predicates (is), build type-safe discriminated unions, and use as const assertions.</description></item><item><title>TS Ep 40: Key Remapping with `as`</title><link>https://rhidayat.work/series/typescript/intermediate/16-key-remapping-with-as/</link><pubDate>Sun, 09 Aug 2026 12:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/16-key-remapping-with-as/</guid><description>Take your Mapped Types to the absolute limit. Learn how to compute entirely new string names for keys on the fly using Template Literal Types, and discover how to completely filter out properties by returning &lt;code&gt;never&lt;/code&gt; during key mapping.</description></item><item><title>TS Ep 39: Mapped Type Modifiers (`+`, `-`, `?`, `readonly`)</title><link>https://rhidayat.work/series/typescript/intermediate/15-mapped-types-modifiers/</link><pubDate>Sun, 09 Aug 2026 12:25:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/15-mapped-types-modifiers/</guid><description>An in-depth guide to Mapped Type Modifiers in TypeScript. Learn how to preserve, add (&lt;code&gt;+&lt;/code&gt;), or strip (&lt;code&gt;-&lt;/code&gt;) property modifiers like &lt;code&gt;readonly&lt;/code&gt; and &lt;code&gt;?&lt;/code&gt;. We explore how these mapping modifiers power TypeScript&amp;rsquo;s built-in &lt;code&gt;Partial&lt;/code&gt;, &lt;code&gt;Required&lt;/code&gt;, and &lt;code&gt;Readonly&lt;/code&gt; utility types.</description></item><item><title>TS Ep 38: Mapped Types (Basics)</title><link>https://rhidayat.work/series/typescript/intermediate/14-mapped-types-basics/</link><pubDate>Sun, 09 Aug 2026 12:20:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/14-mapped-types-basics/</guid><description>An in-depth guide to Mapped Types in TypeScript. Learn how to use the &lt;code&gt;[K in Union]&lt;/code&gt; syntax to iterate over literal unions, transform existing object properties using &lt;code&gt;keyof&lt;/code&gt; and Indexed Access, and build strict state validation maps that perfectly mirror domain models.</description></item><item><title>TS Ep 37: Built-in Utility Types (`ReturnType` &amp; `Parameters`)</title><link>https://rhidayat.work/series/typescript/intermediate/13-utility-type-returntype-parameters/</link><pubDate>Sun, 09 Aug 2026 12:15:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/13-utility-type-returntype-parameters/</guid><description>An in-depth guide to &lt;code&gt;ReturnType&amp;lt;T&amp;gt;&lt;/code&gt; and &lt;code&gt;Parameters&amp;lt;T&amp;gt;&lt;/code&gt;. Learn how to reverse-engineer third-party library functions, the requirement of &lt;code&gt;typeof&lt;/code&gt;, tuple indexing to extract specific arguments, and the underlying &lt;code&gt;infer&lt;/code&gt; keyword mechanics powering these utilities.</description></item><item><title>TS Ep 36: Built-in Utility Types (`Extract` and `Exclude`)</title><link>https://rhidayat.work/series/typescript/intermediate/12-utility-type-extract-exclude/</link><pubDate>Sun, 09 Aug 2026 12:10:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/12-utility-type-extract-exclude/</guid><description>An in-depth guide to the &lt;code&gt;Extract&lt;/code&gt; and &lt;code&gt;Exclude&lt;/code&gt; utility types. Understand the fundamental difference between Object manipulation (&lt;code&gt;Pick&lt;/code&gt;/&lt;code&gt;Omit&lt;/code&gt;) and Union manipulation (&lt;code&gt;Extract&lt;/code&gt;/&lt;code&gt;Exclude&lt;/code&gt;), extracting by object signature in discriminated unions, and their underlying distributive conditional type mechanics.</description></item><item><title>TS Ep 35: Built-in Utility Types (`Record&lt;K, V&gt;`)</title><link>https://rhidayat.work/series/typescript/intermediate/11-utility-type-record/</link><pubDate>Sun, 09 Aug 2026 12:05:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/11-utility-type-record/</guid><description>An in-depth look at the &lt;code&gt;Record&amp;lt;K, V&amp;gt;&lt;/code&gt; utility type. Learn how to type arbitrary string dictionaries, enforce exhaustive key mapping using Unions, and combine &lt;code&gt;Record&lt;/code&gt; with other utilities to model complex domain configurations.</description></item><item><title>TS Ep 34: Built-in Utility Types (`Pick` and `Omit`)</title><link>https://rhidayat.work/series/typescript/intermediate/10-utility-type-pick-omit/</link><pubDate>Sun, 09 Aug 2026 12:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/10-utility-type-pick-omit/</guid><description>An in-depth guide to &lt;code&gt;Pick&lt;/code&gt; and &lt;code&gt;Omit&lt;/code&gt; utility types in TypeScript. Learn under-the-hood mapped type implementations (&lt;code&gt;Pick&lt;/code&gt; via mapped types, &lt;code&gt;Omit&lt;/code&gt; via &lt;code&gt;Exclude&lt;/code&gt;), key constraints differences, building public API DTOs, and the selection decision matrix.</description></item><item><title>TS Ep 33: Built-in Utility Types (`Partial`, `Required`, `Readonly`)</title><link>https://rhidayat.work/series/typescript/intermediate/09-utility-type-partial-required-readonly/</link><pubDate>Sun, 09 Aug 2026 11:55:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/09-utility-type-partial-required-readonly/</guid><description>An in-depth analysis of TypeScript&amp;rsquo;s foundational object utility types. Learn how &lt;code&gt;Partial&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;Required&amp;lt;T&amp;gt;&lt;/code&gt;, and &lt;code&gt;Readonly&amp;lt;T&amp;gt;&lt;/code&gt; transform property modifiers, their under-the-hood mapped type implementations (&lt;code&gt;?&lt;/code&gt;, &lt;code&gt;-?&lt;/code&gt;, &lt;code&gt;readonly&lt;/code&gt;), and shallow immutability limits.</description></item><item><title>TS Ep 32: Multiple &amp; Dependent Generic Parameters</title><link>https://rhidayat.work/series/typescript/intermediate/08-multiple-generic-parameters/</link><pubDate>Sun, 09 Aug 2026 11:50:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/08-multiple-generic-parameters/</guid><description>An in-depth guide to using multiple generic parameters in TypeScript. Learn dependent type parameter relationships, object merging signatures, and how to solve the Partial Generic Inference Trap using higher-order curried functions.</description></item><item><title>TS Ep 31: Default Generic Arguments (`&lt;T = Default&gt;`)</title><link>https://rhidayat.work/series/typescript/intermediate/07-default-generic-arguments/</link><pubDate>Sun, 09 Aug 2026 11:45:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/07-default-generic-arguments/</guid><description>An in-depth guide to Default Generic Arguments in TypeScript. Learn how assigning fallback types (&lt;code&gt;&amp;lt;T = Default&amp;gt;&lt;/code&gt;) simplifies generic interfaces, combining constraints with defaults (&lt;code&gt;&amp;lt;T extends Constraint = Default&amp;gt;&lt;/code&gt;), and enforcing strict parameter ordering rules.</description></item><item><title>Terraform Ep 15: Infrastructure Unit Testing with Terratest (Golang)</title><link>https://rhidayat.work/series/terraform/advanced/15-testing-with-terratest/</link><pubDate>Sun, 09 Aug 2026 11:40:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/15-testing-with-terratest/</guid><description>Running &amp;rsquo;terraform plan&amp;rsquo; is not enough to guarantee your infrastructure works. In this final episode, we bridge the gap between DevOps and Software Engineering by writing automated Golang tests using Terratest. We will programmatically provision infrastructure, assert its correctness, and tear it down.</description></item><item><title>TS Ep 30: Generic Constraints (`extends` Keyword)</title><link>https://rhidayat.work/series/typescript/intermediate/06-generic-constraints-extends/</link><pubDate>Sun, 09 Aug 2026 11:40:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/06-generic-constraints-extends/</guid><description>An in-depth guide to Generic Constraints in TypeScript. Learn why unconstrained &lt;code&gt;&amp;lt;T&amp;gt;&lt;/code&gt; limits property access, how &lt;code&gt;&amp;lt;T extends Shape&amp;gt;&lt;/code&gt; establishes lower type bounds, why generic constraints outperform interface parameter types, and how to constrain keys using &lt;code&gt;&amp;lt;K extends keyof T&amp;gt;&lt;/code&gt;.</description></item><item><title>TS Ep 29: Introduction to Generics — Type Parameters (&lt;T&gt;)</title><link>https://rhidayat.work/series/typescript/intermediate/05-intro-to-generics/</link><pubDate>Sun, 09 Aug 2026 11:35:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/05-intro-to-generics/</guid><description>An in-depth introduction to Generics in TypeScript. Learn how type parameters (&lt;code&gt;&amp;lt;T&amp;gt;&lt;/code&gt;) bridge reusable logic with strict type safety, generic type inference, generic interfaces (&lt;code&gt;ApiResponse&amp;lt;T&amp;gt;&lt;/code&gt;), and generic classes.</description></item><item><title>Terraform Ep 14: Achieving DRY Architecture with Terragrunt</title><link>https://rhidayat.work/series/terraform/advanced/14-terragrunt-and-dry-architecture/</link><pubDate>Sun, 09 Aug 2026 11:30:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/14-terragrunt-and-dry-architecture/</guid><description>As your Terraform codebase scales across dozens of microservices and environments, you will find yourself copy-pasting the same &amp;lsquo;backend&amp;rsquo; and &amp;lsquo;provider&amp;rsquo; blocks repeatedly. Terragrunt is a powerful wrapper that eliminates this repetition, allowing you to define global configurations once.</description></item><item><title>TS Ep 28: The `typeof` Type Operator (Value to Type Space)</title><link>https://rhidayat.work/series/typescript/intermediate/04-typeof-operator/</link><pubDate>Sun, 09 Aug 2026 11:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/04-typeof-operator/</guid><description>An in-depth guide to the &lt;code&gt;typeof&lt;/code&gt; operator in Type Space. Learn the distinction between Value Space and Type Space, reverse-engineering types from runtime objects and functions, combining &lt;code&gt;keyof typeof&lt;/code&gt;, and deriving single-source-of-truth types.</description></item><item><title>TS Ep 27: The `keyof` Type Operator</title><link>https://rhidayat.work/series/typescript/intermediate/03-keyof-operator/</link><pubDate>Sun, 09 Aug 2026 11:25:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/03-keyof-operator/</guid><description>An exhaustive guide to the &lt;code&gt;keyof&lt;/code&gt; operator in TypeScript. Learn how &lt;code&gt;keyof&lt;/code&gt; extracts property key unions from object interfaces, array/tuple types, index signatures, and how to combine &lt;code&gt;keyof&lt;/code&gt; with Generics to build type-safe property accessors.</description></item><item><title>Terraform Ep 13: Advanced State Manipulation (Surgical Refactoring)</title><link>https://rhidayat.work/series/terraform/advanced/13-advanced-state-manipulation/</link><pubDate>Sun, 09 Aug 2026 11:20:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/13-advanced-state-manipulation/</guid><description>Refactoring HCL code is dangerous. If you rename a resource block, Terraform will attempt to destroy the old resource and recreate it. In this episode, we learn how to use &amp;lsquo;moved&amp;rsquo; blocks and the state CLI to refactor code safely, preventing catastrophic database deletions.</description></item><item><title>TS Ep 26: Indexed Access Types (`T[K]`)</title><link>https://rhidayat.work/series/typescript/intermediate/02-indexed-access-types/</link><pubDate>Sun, 09 Aug 2026 11:20:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/02-indexed-access-types/</guid><description>An in-depth guide to Indexed Access Types (&lt;code&gt;T[K]&lt;/code&gt;). Learn how to look up specific property types from object shapes, perform nested indexing, index with unions &lt;code&gt;T['a' | 'b']&lt;/code&gt;, extract array element types using &lt;code&gt;[number]&lt;/code&gt;, and enforce DRY type architectures.</description></item><item><title>TS Ep 25: Interfaces vs. Type Aliases — The Definitive Comparison</title><link>https://rhidayat.work/series/typescript/intermediate/01-interfaces-vs-type-aliases/</link><pubDate>Sun, 09 Aug 2026 11:15:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/intermediate/01-interfaces-vs-type-aliases/</guid><description>An exhaustive comparison of &lt;code&gt;interface&lt;/code&gt; vs &lt;code&gt;type&lt;/code&gt; in TypeScript. Understand Declaration Merging, &lt;code&gt;extends&lt;/code&gt; vs Intersections (&lt;code&gt;&amp;amp;&lt;/code&gt;), compiler performance during type checking, and the precise decision matrix for choosing between them.</description></item><item><title>Terraform Ep 12: CI/CD Automation with Terraform Cloud and GitHub Actions</title><link>https://rhidayat.work/series/terraform/advanced/12-cicd-with-terraform-cloud/</link><pubDate>Sun, 09 Aug 2026 11:10:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/12-cicd-with-terraform-cloud/</guid><description>Running &amp;rsquo;terraform apply&amp;rsquo; from a local laptop is a major security and compliance risk. In this episode, we transition to a GitOps workflow. You will learn how to automate Terraform plans on Pull Requests, and automatically apply changes upon merging to the main branch using GitHub Actions.</description></item><item><title>TS Ep 15: Immutability with `as const` &amp; Const Assertions</title><link>https://rhidayat.work/series/typescript/fundamental/15-as-const-and-immutability/</link><pubDate>Sun, 09 Aug 2026 11:10:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/15-as-const-and-immutability/</guid><description>An exhaustive analysis of Const Assertions (&lt;code&gt;as const&lt;/code&gt;). Learn the 3 transformation rules of const assertions, deep recursive read-only object properties, converting arrays into readonly tuples, and deriving union types dynamically using &lt;code&gt;typeof ARRAY[number]&lt;/code&gt;.</description></item><item><title>TS Ep 14: The Never Type &amp; Exhaustive Checks</title><link>https://rhidayat.work/series/typescript/fundamental/14-the-never-type-and-exhaustive-checks/</link><pubDate>Sun, 09 Aug 2026 11:05:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/14-the-never-type-and-exhaustive-checks/</guid><description>An exhaustive deep dive into TypeScript&amp;rsquo;s bottom type (&lt;code&gt;never&lt;/code&gt;). Learn how set theory models the empty set ($mptyset$), the 3 sources of &amp;rsquo;never&amp;rsquo; in type analysis, and how to implement compile-time exhaustiveness checking for Discriminated Unions.</description></item><item><title>Terraform Ep 11: Managing Multi-Environment Architecture (Workspaces vs Directories)</title><link>https://rhidayat.work/series/terraform/advanced/11-workspaces-and-environments/</link><pubDate>Sun, 09 Aug 2026 11:00:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/11-workspaces-and-environments/</guid><description>Welcome to Tier 3: Advanced Platform Engineering. You now know how to write reusable modules and store state remotely. But how do you safely deploy identical infrastructure to both Staging and Production without them colliding? We explore Workspaces and Directory Isolation.</description></item><item><title>TS Ep 13: Function Overloads — Polymorphic Signatures</title><link>https://rhidayat.work/series/typescript/fundamental/13-function-overloads/</link><pubDate>Sun, 09 Aug 2026 11:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/13-function-overloads/</guid><description>An in-depth guide to Function Overloads in TypeScript. Learn how to define multiple overload signatures, why the implementation signature is invisible to callers, how TypeScript matches overloads sequentially, and when to use Union types instead of Overloads.</description></item><item><title>TS Ep 12: Function Typing, Call Signatures, and Void Semantics</title><link>https://rhidayat.work/series/typescript/fundamental/12-function-typing-and-void/</link><pubDate>Sun, 09 Aug 2026 10:55:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/12-function-typing-and-void/</guid><description>An exhaustive guide to typing functions in TypeScript. Learn function expressions, type aliases, destructuring parameter signatures, optional/default/rest parameters, call signatures with properties, and why &amp;lsquo;void&amp;rsquo; callbacks ignore return values.</description></item><item><title>TS Ep 11: Discriminated Unions — Tagged Unions &amp; Domain Modeling</title><link>https://rhidayat.work/series/typescript/fundamental/11-discriminated-unions/</link><pubDate>Sun, 09 Aug 2026 10:50:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/11-discriminated-unions/</guid><description>An exhaustive guide to Discriminated Unions in TypeScript. Learn why optional property blobs create impossible states, the 3 requirements for tagged unions, how Control Flow Analysis narrows discriminants, and real-world domain state patterns.</description></item><item><title>TS Ep 10: Custom Type Guards &amp; Assertion Functions</title><link>https://rhidayat.work/series/typescript/fundamental/10-custom-type-guards-is/</link><pubDate>Sun, 09 Aug 2026 10:45:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/10-custom-type-guards-is/</guid><description>Learn how to build custom runtime type validators in TypeScript. Master Type Predicates (&lt;code&gt;parameter is Type&lt;/code&gt;), Assertion Functions (&lt;code&gt;asserts val is Type&lt;/code&gt;), array &lt;code&gt;.filter()&lt;/code&gt; type narrowing, and safely parsing untrusted external JSON data.</description></item><item><title>Terraform Ep 10: Remote State Backends and Concurrency Locking</title><link>https://rhidayat.work/series/terraform/intermediate/10-remote-state-and-locking/</link><pubDate>Sun, 09 Aug 2026 10:40:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/intermediate/10-remote-state-and-locking/</guid><description>Local state files are fine for solo learning, but catastrophic for team environments. In this episode, we will solve the &amp;lsquo;state file drift&amp;rsquo; problem by configuring a Remote Backend on AWS S3, and preventing simultaneous executions using DynamoDB locking.</description></item><item><title>TS Ep 9: Type Narrowing &amp; Control Flow Analysis</title><link>https://rhidayat.work/series/typescript/fundamental/09-type-narrowing-typeof-instanceof/</link><pubDate>Sun, 09 Aug 2026 10:40:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/09-type-narrowing-typeof-instanceof/</guid><description>Understand how TypeScript&amp;rsquo;s Control Flow Analysis engine refines types across code branches. Master typeof guards (and the typeof null quirk), instanceof class narrowing, the &amp;lsquo;in&amp;rsquo; property operator, equality narrowing, and truthiness pitfalls.</description></item><item><title>TS Ep 8: Literal Types — Unit Types &amp; Enum Alternatives</title><link>https://rhidayat.work/series/typescript/fundamental/08-literal-types/</link><pubDate>Sun, 09 Aug 2026 10:35:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/08-literal-types/</guid><description>An in-depth breakdown of TypeScript Literal Types. Understand unit types in set theory, how string/number literal unions replace Enums with zero runtime overhead, and how to solve object property literal widening bugs.</description></item><item><title>Terraform Ep 9: Architecting Reusable, Production-Grade Modules</title><link>https://rhidayat.work/series/terraform/intermediate/09-writing-reusable-modules/</link><pubDate>Sun, 09 Aug 2026 10:30:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/intermediate/09-writing-reusable-modules/</guid><description>Modules are the functions of the Terraform ecosystem. In this episode, we will build a reusable AWS VPC module from scratch, define explicit inputs and outputs, and consume it from a separate Root Module. Stop copy-pasting code and start building a self-service infrastructure catalog.</description></item><item><title>TS Ep 7: Union and Intersection Types — Set Theory Mechanics</title><link>https://rhidayat.work/series/typescript/fundamental/07-union-and-intersection-types/</link><pubDate>Sun, 09 Aug 2026 10:30:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/07-union-and-intersection-types/</guid><description>An in-depth analysis of Unions and Intersections in TypeScript. Understand how set theory models type relationships ($A \cup B$ vs $A \cap B$), property access rules, property conflict resolution to &amp;rsquo;never&amp;rsquo;, and operator precedence.</description></item><item><title>TS Ep 6: Any vs. Unknown — Top Types and Type Safety</title><link>https://rhidayat.work/series/typescript/fundamental/06-any-vs-unknown/</link><pubDate>Sun, 09 Aug 2026 10:25:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/06-any-vs-unknown/</guid><description>Understand the type-system mechanics of top types in TypeScript. Learn why &amp;lsquo;any&amp;rsquo; disables type checking and causes type contagion, why &amp;lsquo;unknown&amp;rsquo; provides safe dynamic typing, and how to use &amp;lsquo;unknown&amp;rsquo; with runtime validation.</description></item><item><title>Go Ep 15: Building a Production REST API</title><link>https://rhidayat.work/series/go/15-building-a-production-rest-api/</link><pubDate>Sun, 09 Aug 2026 10:20:00 +0000</pubDate><guid>https://rhidayat.work/series/go/15-building-a-production-rest-api/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Theory is useless without execution. We assemble everything learned across 14 episodes — structs, pointers, error handling, JSON codecs, context timeouts, and concurrency — into a production-grade HTTP REST API.
&lt;/div&gt;</description></item><item><title>Terraform Ep 8: Generating Nested Configurations with Dynamic Blocks</title><link>https://rhidayat.work/series/terraform/intermediate/08-dynamic-blocks/</link><pubDate>Sun, 09 Aug 2026 10:20:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/intermediate/08-dynamic-blocks/</guid><description>While &amp;lsquo;count&amp;rsquo; and &amp;lsquo;for_each&amp;rsquo; duplicate entire resources, &amp;lsquo;dynamic&amp;rsquo; blocks duplicate nested configurations &lt;em&gt;inside&lt;/em&gt; a single resource. Discover how to build highly flexible, list-driven Security Groups and Route Tables without repeating HCL blocks.</description></item><item><title>TS Ep 5: Arrays, Tuples, and Readonly Collections</title><link>https://rhidayat.work/series/typescript/fundamental/05-arrays-and-tuples/</link><pubDate>Sun, 09 Aug 2026 10:20:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/05-arrays-and-tuples/</guid><description>An exhaustive guide to typing collections in TypeScript. Learn the syntax differences between T[] and Array&lt;!-- raw HTML omitted --&gt;, union array typing precedence, labeled tuple elements, rest tuples, and why readonly arrays prevent array mutation bugs.</description></item><item><title>TS Ep 4: Object Types, Interfaces, and Structural Typing</title><link>https://rhidayat.work/series/typescript/fundamental/04-object-types-and-interfaces/</link><pubDate>Sun, 09 Aug 2026 10:15:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/04-object-types-and-interfaces/</guid><description>Learn how to model object shapes in TypeScript. We cover inline types, type aliases, interfaces, optional properties vs undefined, readonly modifiers, index signatures, and TypeScript&amp;rsquo;s structural type system.</description></item><item><title>Go Ep 14: Testing, Benchmarking &amp; Fuzzing</title><link>https://rhidayat.work/series/go/14-unit-testing-benchmarking-fuzzing/</link><pubDate>Sun, 09 Aug 2026 10:10:00 +0000</pubDate><guid>https://rhidayat.work/series/go/14-unit-testing-benchmarking-fuzzing/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Go includes a first-class test runner built into the &lt;code&gt;go test&lt;/code&gt; CLI. You don&amp;rsquo;t need external test frameworks like Jest or JUnit to write unit tests, benchmarks, or fuzzers.
&lt;/div&gt;</description></item><item><title>Terraform Ep 7: Advanced Looping Strategies (count vs for_each)</title><link>https://rhidayat.work/series/terraform/intermediate/07-loops-with-count-and-for-each/</link><pubDate>Sun, 09 Aug 2026 10:10:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/intermediate/07-loops-with-count-and-for-each/</guid><description>Copy-pasting resource blocks is a cardinal sin in Platform Engineering. In this episode, we will deploy identical infrastructure fleets using loops. You will learn the critical differences between &amp;lsquo;count&amp;rsquo; and &amp;lsquo;for_each&amp;rsquo;, and why &amp;lsquo;count&amp;rsquo; can accidentally destroy your production servers if used incorrectly.</description></item><item><title>TS Ep 3: Type Annotations vs. Type Inference</title><link>https://rhidayat.work/series/typescript/fundamental/03-type-annotations-vs-inference/</link><pubDate>Sun, 09 Aug 2026 10:10:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/03-type-annotations-vs-inference/</guid><description>Stop writing redundant type annotations. Learn how TypeScript infers types, the mechanics of literal type widening (&lt;code&gt;let&lt;/code&gt; vs &lt;code&gt;const&lt;/code&gt;), contextual typing in callbacks, and the precise rules for when explicit type annotations are required.</description></item><item><title>TS Ep 2: Primitive Types — Deep Dive into JS Primitives</title><link>https://rhidayat.work/series/typescript/fundamental/02-primitive-types/</link><pubDate>Sun, 09 Aug 2026 10:05:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/02-primitive-types/</guid><description>An exhaustive breakdown of TypeScript&amp;rsquo;s 7 primitive types. Learn how TS handles floating-point numbers, BigInts, symbols, strictNullChecks, and the critical structural differences between lowercase primitive types and uppercase Object wrappers.</description></item><item><title>Go Ep 13: Generics (Type Parameters)</title><link>https://rhidayat.work/series/go/13-generics-in-go/</link><pubDate>Sun, 09 Aug 2026 10:00:00 +0000</pubDate><guid>https://rhidayat.work/series/go/13-generics-in-go/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Before Go 1.18, writing a reusable function for finding a slice element required duplicate functions for &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt;, and &lt;code&gt;float64&lt;/code&gt;, or using reflection. &lt;strong&gt;Generics&lt;/strong&gt; solve this using Type Parameters.
&lt;/div&gt;</description></item><item><title>Terraform Ep 6: Local Values, Built-in Functions, and Interpolation</title><link>https://rhidayat.work/series/terraform/intermediate/06-local-values-and-functions/</link><pubDate>Sun, 09 Aug 2026 10:00:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/intermediate/06-local-values-and-functions/</guid><description>Terraform is not just static configuration; it is a powerful programming language. In this episode, we explore how to perform string interpolations, use mathematical functions, and centralize complex expressions using the &amp;rsquo;locals&amp;rsquo; block to keep your code DRY.</description></item><item><title>TS Ep 1: Introduction, Compilation, and Compiler Setup</title><link>https://rhidayat.work/series/typescript/fundamental/01-introduction-and-setup/</link><pubDate>Sun, 09 Aug 2026 10:00:00 +0000</pubDate><guid>https://rhidayat.work/series/typescript/fundamental/01-introduction-and-setup/</guid><description>An in-depth introduction to TypeScript architecture. Understand static type checking vs runtime behavior, the internal stages of the TypeScript compiler (tsc), type erasure, and how to configure tsconfig.json with strict flags for professional development.</description></item><item><title>Go Ep 12: Context, Cancellation &amp; Timeouts</title><link>https://rhidayat.work/series/go/12-context-cancellation-and-timeouts/</link><pubDate>Sun, 09 Aug 2026 09:50:00 +0000</pubDate><guid>https://rhidayat.work/series/go/12-context-cancellation-and-timeouts/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 When an incoming HTTP request is cancelled by the client, every downstream database query and RPC call associated with that request must stop immediately. Go&amp;rsquo;s &lt;strong&gt;&lt;code&gt;context.Context&lt;/code&gt;&lt;/strong&gt; enforces this cancellation propagation.
&lt;/div&gt;</description></item><item><title>Terraform Ep 5: Querying Existing Cloud Infrastructure with Data Sources</title><link>https://rhidayat.work/series/terraform/fundamental/05-data-sources/</link><pubDate>Sun, 09 Aug 2026 09:50:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/fundamental/05-data-sources/</guid><description>Not everything in your cloud is managed by Terraform. In this episode, you will learn how to use the &amp;lsquo;data&amp;rsquo; block to interrogate the AWS API. Fetch the latest Ubuntu AMI ID dynamically, or retrieve a VPC ID created by the Networking team, ensuring your code remains hardcode-free.</description></item><item><title>Go Ep 11: Advanced Concurrency &amp; Worker Pools</title><link>https://rhidayat.work/series/go/11-advanced-concurrency-patterns/</link><pubDate>Sun, 09 Aug 2026 09:40:00 +0000</pubDate><guid>https://rhidayat.work/series/go/11-advanced-concurrency-patterns/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Channel communication handles message passing, but shared memory synchronization requires standard primitives like &lt;code&gt;sync.Mutex&lt;/code&gt; and &lt;code&gt;sync.WaitGroup&lt;/code&gt;. Learn how to build thread-safe concurrent systems.
&lt;/div&gt;</description></item><item><title>Terraform Ep 4: Input Variables, Outputs, and Data Types</title><link>https://rhidayat.work/series/terraform/fundamental/04-input-variables-and-outputs/</link><pubDate>Sun, 09 Aug 2026 09:40:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/fundamental/04-input-variables-and-outputs/</guid><description>Hardcoding values in Terraform is a bad practice. In this episode, we will introduce Input Variables and Data Types to make your code reusable across multiple environments. You will also learn how to extract critical information using Outputs.</description></item><item><title>Go Ep 10: Goroutines &amp; Channel Basics</title><link>https://rhidayat.work/series/go/10-goroutines-and-channels-basics/</link><pubDate>Sun, 09 Aug 2026 09:30:00 +0000</pubDate><guid>https://rhidayat.work/series/go/10-goroutines-and-channels-basics/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Do not communicate by sharing memory; instead, share memory by communicating. Goroutines and Channels form the core primitives of Go&amp;rsquo;s concurrency model.
&lt;/div&gt;</description></item><item><title>Terraform Ep 3: Declaring Resources and Dependency Management</title><link>https://rhidayat.work/series/terraform/fundamental/03-declaring-resources/</link><pubDate>Sun, 09 Aug 2026 09:30:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/fundamental/03-declaring-resources/</guid><description>It is time to build real infrastructure. In this episode, we will declare an AWS Virtual Private Cloud (VPC) and a Subnet. You will learn how Terraform intelligently determines the correct order of creation using the Dependency Graph, preventing race conditions.</description></item><item><title>Terraform Ep 2: Providers, Plugins, and Secure Authentication</title><link>https://rhidayat.work/series/terraform/fundamental/02-providers-and-authentication/</link><pubDate>Sun, 09 Aug 2026 09:20:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/fundamental/02-providers-and-authentication/</guid><description>Terraform itself cannot create an AWS EC2 instance. It relies on &amp;lsquo;Providers&amp;rsquo; (plugins) to translate HCL code into cloud-specific API calls. In this episode, we connect Terraform to AWS and establish a secure, production-grade authentication mechanism.</description></item><item><title>Go Ep 9: Implicit Interfaces &amp; Polymorphism</title><link>https://rhidayat.work/series/go/09-interfaces-and-polymorphism/</link><pubDate>Sun, 09 Aug 2026 09:10:00 +0000</pubDate><guid>https://rhidayat.work/series/go/09-interfaces-and-polymorphism/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 If it walks like a duck and quacks like a duck, Go treats it like a duck. Interfaces in Go are satisfied implicitly, creating loose coupling and high testability across packages.
&lt;/div&gt;</description></item><item><title>Terraform Ep 1: Introduction to IaC and the State File</title><link>https://rhidayat.work/series/terraform/fundamental/01-introduction-and-state/</link><pubDate>Sun, 09 Aug 2026 09:10:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/fundamental/01-introduction-and-state/</guid><description>Stop deploying cloud resources manually. In this first episode, we will transform your approach to cloud architecture by introducing declarative IaC. You will learn how Terraform tracks physical resources using the state file, and execute your first local configuration.</description></item><item><title>Go Ep 8: Methods &amp; Struct Composition</title><link>https://rhidayat.work/series/go/08-methods-and-struct-embedding/</link><pubDate>Sun, 09 Aug 2026 09:00:00 +0000</pubDate><guid>https://rhidayat.work/series/go/08-methods-and-struct-embedding/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Go favors &lt;strong&gt;Composition over Inheritance&lt;/strong&gt;. By embedding structs inside other structs, you automatically promote fields and methods without the rigid coupling of object-oriented class hierarchies.
&lt;/div&gt;</description></item><item><title>Go Ep 7: Pointers &amp; Memory Allocation</title><link>https://rhidayat.work/series/go/07-pointers-and-memory-allocation/</link><pubDate>Sun, 09 Aug 2026 08:50:00 +0000</pubDate><guid>https://rhidayat.work/series/go/07-pointers-and-memory-allocation/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Go is a pass-by-value language. When you pass an argument to a function, Go creates a copy. Pointers allow you to share memory directly across function boundaries without copying large data structures.
&lt;/div&gt;</description></item><item><title>Go Ep 6: Structs, Fields &amp; JSON Serialization</title><link>https://rhidayat.work/series/go/06-structs-fields-and-json-tags/</link><pubDate>Sun, 09 Aug 2026 08:45:00 +0000</pubDate><guid>https://rhidayat.work/series/go/06-structs-fields-and-json-tags/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Go is not a class-based object-oriented language. Instead, Go uses &lt;strong&gt;Structs&lt;/strong&gt; to group typed fields together into contiguous memory blocks.
&lt;/div&gt;</description></item><item><title>Go Ep 5: Maps &amp; Hash Tables</title><link>https://rhidayat.work/series/go/05-maps-and-hash-tables/</link><pubDate>Sun, 09 Aug 2026 08:40:00 +0000</pubDate><guid>https://rhidayat.work/series/go/05-maps-and-hash-tables/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Maps provide fast $O(1)$ key-value lookups. Understanding map initialization and comma-ok lookups is essential for safe data manipulation.
&lt;/div&gt;</description></item><item><title>Go Ep 4: Arrays, Slices &amp; Memory Capacity</title><link>https://rhidayat.work/series/go/04-arrays-slices-and-capacity/</link><pubDate>Sun, 09 Aug 2026 08:30:00 +0000</pubDate><guid>https://rhidayat.work/series/go/04-arrays-slices-and-capacity/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 In Go, an &lt;strong&gt;Array&lt;/strong&gt; has a fixed length determined at compile time. A &lt;strong&gt;Slice&lt;/strong&gt; is a lightweight, dynamically sized view into an underlying array. Understanding slice capacity (&lt;code&gt;cap&lt;/code&gt;) prevents accidental memory reallocation overhead.
&lt;/div&gt;</description></item><item><title>Go Ep 3: Functions, Defer &amp; Closures</title><link>https://rhidayat.work/series/go/03-functions-defer-and-closures/</link><pubDate>Sun, 09 Aug 2026 08:20:00 +0000</pubDate><guid>https://rhidayat.work/series/go/03-functions-defer-and-closures/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Functions in Go can return multiple values natively. Coupled with the &lt;strong&gt;&lt;code&gt;defer&lt;/code&gt;&lt;/strong&gt; statement, Go provides a clean, elegant mechanism for resource management that replaces cumbersome &lt;code&gt;try/finally&lt;/code&gt; blocks.
&lt;/div&gt;</description></item><item><title>Go Ep 2: Control Flow &amp; Loops</title><link>https://rhidayat.work/series/go/02-control-structures-and-loops/</link><pubDate>Sun, 09 Aug 2026 08:10:00 +0000</pubDate><guid>https://rhidayat.work/series/go/02-control-structures-and-loops/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Unlike languages with &lt;code&gt;while&lt;/code&gt;, &lt;code&gt;do-while&lt;/code&gt;, and &lt;code&gt;foreach&lt;/code&gt;, Go has only ONE keyword for looping: &lt;strong&gt;&lt;code&gt;for&lt;/code&gt;&lt;/strong&gt;. This design eliminates syntax complexity while maintaining complete control over iteration.
&lt;/div&gt;</description></item><item><title>K8s Ep 1: Architecture &amp; Your First Multi-Node Local Cluster Setup</title><link>https://rhidayat.work/series/kubernetes/fundamental/01-architecture-and-local-setup/</link><pubDate>Sun, 09 Aug 2026 08:10:00 +0000</pubDate><guid>https://rhidayat.work/series/kubernetes/fundamental/01-architecture-and-local-setup/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Many Kubernetes tutorials overwhelm you with hours of theory before ever touching a terminal. Here, we embrace the &lt;strong&gt;HowToForge&lt;/strong&gt; philosophy: we build it first, then we dissect how it works.
&lt;/div&gt;</description></item><item><title>Go Ep 1: Toolchain, Syntax &amp; Primitive Types</title><link>https://rhidayat.work/series/go/01-introduction-syntax-variables-types/</link><pubDate>Sun, 09 Aug 2026 08:00:00 +0000</pubDate><guid>https://rhidayat.work/series/go/01-introduction-syntax-variables-types/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Designed at Google by Robert Griesemer, Rob Pike, and Ken Thompson, Go (Golang) is an open-source programming language built for simplicity, concurrency, and high-performance systems engineering.
&lt;/div&gt;</description></item><item><title>Kratix Ep 1: Introduction to Kratix &amp; The Platform-as-a-Product Paradigm</title><link>https://rhidayat.work/series/kratix/01-introduction-to-kratix/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://rhidayat.work/series/kratix/01-introduction-to-kratix/</guid><description>Explore Kratix architecture, the Platform-as-a-Product paradigm, and how Kratix transforms Kubernetes into a composable Internal Developer Platform.</description></item><item><title>Learning Roadmap</title><link>https://rhidayat.work/roadmap/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://rhidayat.work/roadmap/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Platform ini diorganisir ke dalam &lt;strong&gt;3 Layer Kedalaman&lt;/strong&gt; untuk memastikan navigasi terstruktur bagi pembaca dari tingkat pemula hingga profesional. Silakan ikuti rute pembelajaran di bawah ini.
&lt;/div&gt;


&lt;h3 class="relative group"&gt;🟢 LAYER 1: Core Fundamentals (Bahasa &amp;amp; Basic Tools)
 &lt;div id="-layer-1-core-fundamentals-bahasa--basic-tools" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-layer-1-core-fundamentals-bahasa--basic-tools" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Fondasi yang harus Anda kuasai sebelum masuk ke ranah &lt;em&gt;Cloud Native&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;JS/TS Fundamentals&lt;/strong&gt;: Memahami Syntax, Event Loop, dan Asynchronous Programming.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Go Fundamentals&lt;/strong&gt;: Memahami Types, Structs, Pointers, dan Goroutines (Concurrency).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git &amp;amp; Version Control&lt;/strong&gt;: Branching, Rebase, dan Git Workflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h3 class="relative group"&gt;🟡 LAYER 2: Cloud Native &amp;amp; IaC Fundamentals
 &lt;div id="-layer-2-cloud-native--iac-fundamentals" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-layer-2-cloud-native--iac-fundamentals" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Mulai membangun infrastruktur cerdas dan otomatisasi &lt;em&gt;deployment&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Cara Fix Error OOMKilled (Exit Code 137) di Kubernetes Pod</title><link>https://rhidayat.work/blog/cara-fix-k8s-oomkilled/</link><pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate><guid>https://rhidayat.work/blog/cara-fix-k8s-oomkilled/</guid><description>&lt;p&gt;Mengalami error &lt;strong&gt;&lt;code&gt;OOMKilled&lt;/code&gt; (Exit Code 137)&lt;/strong&gt; saat menjalankan aplikasi di Kubernetes? Masalah ini terjadi ketika penggunaan memori kontainer melebihi batas &lt;code&gt;resources.limits.memory&lt;/code&gt;.&lt;/p&gt;

&lt;h2 class="relative group"&gt;1. Penyebab Utama Error
 &lt;div id="1-penyebab-utama-error" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-penyebab-utama-error" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Secara teknis, OOM (Out Of Memory) Killer pada Linux Kernel akan menghentikan proses yang mengonsumsi RAM berlebih.&lt;/p&gt;

&lt;h2 class="relative group"&gt;2. Solusi Cepat
 &lt;div id="2-solusi-cepat" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-solusi-cepat" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Naikkan batas RAM pada manifest YAML:&lt;/p&gt;</description></item><item><title/><link>https://rhidayat.work/series/antigravity/agentkit-2-0-complete-guide-antigravity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rhidayat.work/series/antigravity/agentkit-2-0-complete-guide-antigravity/</guid><description/></item></channel></rss>