<?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: Oscar</title>
    <description>The latest articles on Forem by Oscar (@greyh_).</description>
    <link>https://forem.com/greyh_</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%2F2133153%2Fb6313900-7499-4134-b4e0-68b5964bafb6.png</url>
      <title>Forem: Oscar</title>
      <link>https://forem.com/greyh_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/greyh_"/>
    <language>en</language>
    <item>
      <title>BrewOps: Silly HTCPCP based game</title>
      <dc:creator>Oscar</dc:creator>
      <pubDate>Mon, 13 Apr 2026 06:57:55 +0000</pubDate>
      <link>https://forem.com/greyh_/brewops-silly-htcpcp-based-game-59op</link>
      <guid>https://forem.com/greyh_/brewops-silly-htcpcp-based-game-59op</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;BrewOps&lt;/strong&gt; is a &lt;em&gt;delightfully useless&lt;/em&gt; HTCPCP-based game where you run a coffee shop like a datacenter.&lt;/p&gt;

&lt;p&gt;Instead of making coffee, players construct and send protocol requests using a &lt;strong&gt;Swagger-style interface&lt;/strong&gt;. Each order must be translated into a valid HTCPCP request and routed to the correct coffee pot (server node).&lt;/p&gt;

&lt;p&gt;The game simulates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  protocol-based brewing (&lt;code&gt;BREW&lt;/code&gt;, &lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;PROPFIND&lt;/code&gt;, &lt;code&gt;WHEN&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;  infrastructure management (coffee pots as servers)
&lt;/li&gt;
&lt;li&gt;  real-time failures and debugging
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s inspired by RFC 2324 and tries to answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;what if a joke protocol actually ran a "production" system?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Of course, things go wrong. Sometimes very wrong.&lt;br&gt;
Like when a machine suddenly responds:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;418 I'm a teapot&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://brewops-297860143070.us-west1.run.app" rel="noopener noreferrer"&gt;https://brewops-297860143070.us-west1.run.app&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/khar20" rel="noopener noreferrer"&gt;
        khar20
      &lt;/a&gt; / &lt;a href="https://github.com/khar20/brewops" rel="noopener noreferrer"&gt;
        brewops
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      HTCPCP-based game
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/159876365/477138731-0aa67016-6eaf-458a-adb2-6e31a0763ed6.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzYwNjM3ODgsIm5iZiI6MTc3NjA2MzQ4OCwicGF0aCI6Ii8xNTk4NzYzNjUvNDc3MTM4NzMxLTBhYTY3MDE2LTZlYWYtNDU4YS1hZGIyLTZlMzFhMDc2M2VkNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQxM1QwNjU4MDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02MWU5YTg5MTVhNTc1ZTRlYjhmZDM4YTQ5NTdhN2E4ZTExNjY5NmMwYzZlYzZlNGEzMzA3MjM5YTc4MjMzN2NmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.d8A6uAf5tRGb2lfqAK9Erqy50EjumiAv-w-gZsxc1No"&gt;&lt;img width="1200" height="475" alt="GHBanner" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F159876365%2F477138731-0aa67016-6eaf-458a-adb2-6e31a0763ed6.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzYwNjM3ODgsIm5iZiI6MTc3NjA2MzQ4OCwicGF0aCI6Ii8xNTk4NzYzNjUvNDc3MTM4NzMxLTBhYTY3MDE2LTZlYWYtNDU4YS1hZGIyLTZlMzFhMDc2M2VkNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQxM1QwNjU4MDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02MWU5YTg5MTVhNTc1ZTRlYjhmZDM4YTQ5NTdhN2E4ZTExNjY5NmMwYzZlYzZlNGEzMzA3MjM5YTc4MjMzN2NmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.d8A6uAf5tRGb2lfqAK9Erqy50EjumiAv-w-gZsxc1No"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Run and deploy your AI Studio app&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;This contains everything you need to run your app locally.&lt;/p&gt;
&lt;p&gt;View your app in AI Studio: &lt;a href="https://ai.studio/apps/58002a14-bebb-4b6d-a445-75d604ac7cd8" rel="nofollow noopener noreferrer"&gt;https://ai.studio/apps/58002a14-bebb-4b6d-a445-75d604ac7cd8&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run Locally&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;  Node.js&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install dependencies:
&lt;code&gt;npm install&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set the &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; in &lt;a href="https://github.com/khar20/brewops/.env.local" rel="noopener noreferrer"&gt;.env.local&lt;/a&gt; to your Gemini API key&lt;/li&gt;
&lt;li&gt;Run the app:
&lt;code&gt;npm run dev&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/khar20/brewops" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;This project was heavily developed using &lt;strong&gt;Google AI Studio&lt;/strong&gt;, following a “vibecoding” approach.&lt;/p&gt;

&lt;p&gt;AI was used as a &lt;strong&gt;co-developer and design assistant&lt;/strong&gt; to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  prototype the HTCPCP-inspired request/response system
&lt;/li&gt;
&lt;li&gt;  design and iterate on the Swagger-style request builder
&lt;/li&gt;
&lt;li&gt;  build and refine UI components
&lt;/li&gt;
&lt;li&gt;  debug logic and interaction issues
&lt;/li&gt;
&lt;li&gt;  rapidly test gameplay ideas and UX improvements
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The game combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  real-time simulation (timing, expiration, brewing)
&lt;/li&gt;
&lt;li&gt;  protocol construction logic
&lt;/li&gt;
&lt;li&gt;  UI systems (request builder, topology view, syslog)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI enabled fast iteration across multiple interconnected systems that would otherwise be time-consuming to build and refine manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Google AI Usage
&lt;/h3&gt;

&lt;p&gt;AI was used not just for generating code, but as a &lt;strong&gt;core part of the development process&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Rapid prototyping of gameplay systems
&lt;/li&gt;
&lt;li&gt;  Iterative refinement of UI/UX
&lt;/li&gt;
&lt;li&gt;  Exploration of different interaction models
&lt;/li&gt;
&lt;li&gt;  Debugging and improving system behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project demonstrates how AI can accelerate turning a niche, humorous concept into a functional interactive simulation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Ode to Larry Masinter
&lt;/h3&gt;

&lt;p&gt;This project is a tribute to Larry Masinter and the HTCPCP specification.&lt;/p&gt;

&lt;p&gt;The game:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  implements real protocol methods (&lt;code&gt;BREW&lt;/code&gt;, &lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;PROPFIND&lt;/code&gt;, &lt;code&gt;WHEN&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;  uses authentic status codes, including &lt;code&gt;418 I'm a teapot&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  embraces the humor and absurdity of the original RFC
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It goes beyond referencing the protocol by attempting to &lt;strong&gt;simulate how it would behave in a real system&lt;/strong&gt;, including failures, misconfigurations, and unexpected behavior.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>paRAGraph - Narrative RAG chatbot</title>
      <dc:creator>Oscar</dc:creator>
      <pubDate>Mon, 11 Nov 2024 07:49:42 +0000</pubDate>
      <link>https://forem.com/greyh_/paragraph-narrative-rag-chatbot-4ib</link>
      <guid>https://forem.com/greyh_/paragraph-narrative-rag-chatbot-4ib</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/pgai"&gt;Open Source AI Challenge with pgai and Ollama &lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I developed an AI-driven storytelling and conversational application that integrates a chatbot interface powered by Ollama and PostgreSQL with TimescaleDB, designed to deliver responses that are contextually enriched by both past user queries and stored story fragments. By leveraging vector embeddings, the app retrieves relevant past conversations and story fragments to enrich the chatbot's response, creating a dynamic and personalized user experience.&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/khar20" rel="noopener noreferrer"&gt;
        khar20
      &lt;/a&gt; / &lt;a href="https://github.com/khar20/paRAGraph" rel="noopener noreferrer"&gt;
        paRAGraph
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjp3dooejlm036cqkltz9.png" alt="Image description" width="800" height="385"&gt;&lt;br&gt;
To try the app, you can either use a Timescale service to run the provided .sql files or install the necessary extensions locally on your own TimescaleDB instance. Additionally, make sure to set your DATABASE_URL in the .env file to properly configure the database connection.

&lt;p&gt;To use the pgai Vectorizer, your TimescaleDB instance must also have an OpenAI API key set. This is required for generating embeddings with the Vectorizer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;TimescaleDB with pgvector: I utilized TimescaleDB to store and manage historical data related to user conversations and story fragments, using pgvector to store vector embeddings for efficient retrieval based on semantic similarity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;pgai Vectorizer: The pgai Vectorizer was used to create vector embeddings of story fragments and conversation history. These embeddings allowed for contextually similar data to be fetched based on the user’s current input, enabling rich, relevant responses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;pgvectorscale: For even more efficient similarity-based retrieval, I used pgvectorscale to create StreamingDiskANN indexes on both the story fragment embeddings and the conversation history embeddings. This enabled faster and more scalable retrieval of semantically similar fragments from large datasets, improving the performance of the app during chat interactions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ollama: I integrated Ollama's conversational AI (specifically using the "llama3.2" model) to handle the chatbot’s generation of responses. This model was accessed via API calls and was key to generating coherent, contextually informed replies.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This project was both challenging and rewarding, especially in terms of designing an efficient retrieval system for story fragments and past conversations that uses vector embeddings to find semantically similar entries. It was nice to see how AI and database technologies like TimescaleDB and Ollama can come together to build an interactive storytelling experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prize Categories:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open-source Models from Ollama&lt;/li&gt;
&lt;li&gt;Vectorizer Vibe&lt;/li&gt;
&lt;li&gt;All the Extensions!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>pgaichallenge</category>
      <category>database</category>
      <category>ai</category>
    </item>
    <item>
      <title>Build a Web Game: Alien Repair Service</title>
      <dc:creator>Oscar</dc:creator>
      <pubDate>Mon, 30 Sep 2024 06:18:24 +0000</pubDate>
      <link>https://forem.com/greyh_/build-a-web-game-alien-repair-service-221a</link>
      <guid>https://forem.com/greyh_/build-a-web-game-alien-repair-service-221a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/webgame"&gt;Web Game Challenge&lt;/a&gt;, Build a Game: Alien Edition&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I developed an space exploration game using Phaser, an HTML5 game framework, where players embark on a cosmic journey with an alien engineer named Engi. The primary objective is to navigate through a distant galaxy, avoiding perilous asteroids while seeking out and repairing abandoned space stations scattered throughout the cosmos. Players can regain lives by visiting these stations, and successfully repairing all of them leads to victory!&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://greyh-20.github.io/AlienRepairService/" rel="noopener noreferrer"&gt;GitHub Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/greyh-20/AlienRepairService" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;Creating this game in just two days (due to my lack of awareness about the challenge beforehand) was both enlightening and rewarding, especially since it marks my first experience in game development. I gained valuable insights into implementing physics mechanics, focusing on inertia and the different movement modes that enhance gameplay. The game features two distinct movement modes: a standard speed mode and a super speed mode, allowing players to switch between them to effectively navigate the asteroid field. The inertia factor adds a layer of realism to the movement, causing the spaceship to gradually slow down when not actively propelled. However, it’s important to note that this isn’t completely realistic, as in space, an opposite force is needed to decelerate.&lt;/p&gt;

&lt;p&gt;I am particularly proud of the collision mechanics, which provide a thrilling experience when players encounter asteroids. Each collision results in a decrease in lives, creating a sense of urgency. Additionally, the physics engine ensures smooth movement and realistic interactions, making the gameplay engaging.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faq651bqr40njk88ci0um.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faq651bqr40njk88ci0um.png" alt="Screenshot of 'Alien Repair Service'" width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking ahead, I hope to expand the game by introducing more diverse challenges, such as an inventory system, delivery missions, and combat mechanics. Additionally, I aim to enhance the visual effects for an even more immersive experience. Overall, this project has been a fantastic learning opportunity, and I’m excited about the potential for future developments!&lt;/p&gt;

&lt;p&gt;Thank you to the team for providing the community with this challenge!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
