<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem:  Aatman </title>
    <description>The latest articles on Forem by  Aatman  (@hunterthompson).</description>
    <link>https://forem.com/hunterthompson</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F584081%2F11f915a7-b628-4503-9da6-ad02afa54bbd.png</url>
      <title>Forem:  Aatman </title>
      <link>https://forem.com/hunterthompson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hunterthompson"/>
    <language>en</language>
    <item>
      <title>Copilot Plays Stardew Valley</title>
      <dc:creator> Aatman </dc:creator>
      <pubDate>Tue, 27 Jan 2026 08:32:34 +0000</pubDate>
      <link>https://forem.com/hunterthompson/copilot-plays-stardew-valley-5aea</link>
      <guid>https://forem.com/hunterthompson/copilot-plays-stardew-valley-5aea</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;A hybrid AI-controlled game mod that bridges Stardew Valley with AI assistants via the Model Context Protocol (MCP). Enables autonomous Copilot SDK AI agents to control and play Stardew Valley through real-time game state synchronization.&lt;/p&gt;

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

&lt;p&gt;Loom - &lt;a href="https://www.loom.com/share/d275cef5f4024163921ec4e6a4de378b" rel="noopener noreferrer"&gt;https://www.loom.com/share/d275cef5f4024163921ec4e6a4de378b&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Repo - &lt;a href="https://github.com/Hunter-Thompson/stardew-mcp" rel="noopener noreferrer"&gt;https://github.com/Hunter-Thompson/stardew-mcp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Deploying a Simple NodeJS Microservice using CDK8s</title>
      <dc:creator> Aatman </dc:creator>
      <pubDate>Mon, 22 Feb 2021 13:13:00 +0000</pubDate>
      <link>https://forem.com/hunterthompson/deploying-a-simple-nodejs-microservice-using-cdk8s-3mjg</link>
      <guid>https://forem.com/hunterthompson/deploying-a-simple-nodejs-microservice-using-cdk8s-3mjg</guid>
      <description>&lt;p&gt;Writing 200+ lines of YAML code just to deploy a Microservice on Kubernetes is a massive pain for a DevOps engineer.&lt;/p&gt;

&lt;p&gt;CDK8s can be used to remove all that duplicate code, and make it easier to deploy your Microservice without having to write massive YAML manifests.&lt;/p&gt;

&lt;p&gt;We also get the ability to write code using our favorite object-oriented languages.&lt;/p&gt;

&lt;p&gt;We will be writing a sample CDK8s chart using TypeScript and opensource CDK8s constructs.&lt;/p&gt;

&lt;p&gt;Constructs used :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@opencdk8s/cdk8s-redis-sts v0.0.7
cdk8s-plus-17 v1.0.0-beta.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Initialize CDK8s project
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir cdk8s-node-app &amp;amp;&amp;amp; cd cdk8s-node-app
cdk8s init typescript-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Install construct libraries
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @opencdk8s/cdk8s-redis-sts 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Edit main.ts to include our Redis db, and NodeJS app
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Construct } from 'constructs';
import { App, Chart, ChartProps } from 'cdk8s';
import { MyRedis } from '@opencdk8s/cdk8s-redis-sts';
import { Deployment } from 'cdk8s-plus-17';

export class MyChart extends Chart {
  constructor(scope: Construct, id: string, props: ChartProps = { }) {
    super(scope, id, props);
const redis = new MyRedis(this, 'redis', {
      image: 'redis',
      namespace: 'default',
      volumeSize: '10Gi',
      replicas: 3,
      createStorageClass: false,
    });
new Deployment(this, "deployment", {
      metadata: {
        namespace: 'default',
      },
      containers: [{
        image: "hunterthompson/node-redis-counter:latest",
        name: "hello",
        env: {
          'REDIS_URI': {
            value: redis.name
          }
        }
      }]
    })
  }
}

const app = new App();
new MyChart(app, 'microservice');
app.synth();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Run Compile and Synth
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run compile &amp;amp;&amp;amp; npm run synth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The end result of the npm run synth command is a YAML manifest that you can apply using kubectl&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: v1
data:
  master.conf: |-

    bind 0.0.0.0
    daemonize no
    port 6379
    tcp-backlog 511
    timeout 0
    tcp-keepalive 300
    supervised no
  slave.conf: |-

    slaveof redis 6379
kind: ConfigMap
metadata:
  name: redis-redis-conf
  namespace: default
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: redis
  name: redis
  namespace: default
spec:
  ports:
    - port: 6379
      targetPort: 6379
  selector:
    app: redis
  type: ClusterIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: redis
  name: redis
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  serviceName: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - command:
            - bash
            - -c
            - |-
              [[ `hostname` =~ -([0-9]+)$ ]] || exit 1
              ordinal=${BASH_REMATCH[1]}
              if [[ $ordinal -eq 0 ]]; then
              redis-server /mnt/redis/master.conf
              else
              redis-server /mnt/redis/slave.conf
              fi
          env: []
          image: redis
          name: redis
          ports:
            - containerPort: 6379
          resources:
            limits:
              cpu: 400m
              memory: 512Mi
            requests:
              cpu: 200m
              memory: 256Mi
          volumeMounts:
            - mountPath: /data
              name: redis
            - mountPath: /mnt/redis/
              name: redis-redis-conf
      terminationGracePeriodSeconds: 10
      volumes:
        - configMap:
            name: redis-redis-conf
          name: redis-redis-conf
  volumeClaimTemplates:
    - metadata:
        name: redis
        namespace: default
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 10Gi
        storageClassName: gp2
--------
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-deployment-c89e8760
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      cdk8s.deployment: microservice-deployment-c87f6fea
  template:
    metadata:
      labels:
        cdk8s.deployment: microservice-deployment-c87f6fea
    spec:
      containers:
        - env:
            - name: REDIS_URI
              value: redis
          image: hunterthompson/node-redis-counter:latest
          imagePullPolicy: Always
          name: hello
          ports: []
          volumeMounts: []
      volumes: []
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We just synthesized a 130 line YAML manifest by writing 33 lines of CDK8s code.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>typescript</category>
      <category>cdk8s</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
