<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Intermediate on Dev &amp; Platform Engineering Hub</title><link>https://rhidayat.work/level/intermediate/</link><description>Recent content in Intermediate 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 00:55:00 +0000</lastBuildDate><atom:link href="https://rhidayat.work/level/intermediate/index.xml" rel="self" type="application/rss+xml"/><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 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>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 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>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>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>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>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 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>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>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>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>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 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>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>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>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 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 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>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>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>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 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>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>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>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>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>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>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>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>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></channel></rss>