<?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>DEV Community: Sourav</title>
    <description>The latest articles on DEV Community by Sourav (@morningstarxcdcode).</description>
    <link>https://dev.to/morningstarxcdcode</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3284880%2F19373a15-ee31-41a5-8dee-7e38da50bc13.jpeg</url>
      <title>DEV Community: Sourav</title>
      <link>https://dev.to/morningstarxcdcode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/morningstarxcdcode"/>
    <language>en</language>
    <item>
      <title>My Grandpa Measures in Handfuls: Turning His Voice Memos Into a Family Recipe Book</title>
      <dc:creator>Sourav</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:59:40 +0000</pubDate>
      <link>https://dev.to/morningstarxcdcode/hi-1m4h</link>
      <guid>https://dev.to/morningstarxcdcode/hi-1m4h</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend (&lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;https://dev.to/challenges/hacktoberfest-weekend-2026-10-01&lt;/a&gt;).&lt;br&gt;
What I Built&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5wo68oskmaei56vv1jy6.png" class="article-body-image-wrapper"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5wo68oskmaei56vv1jy6.png" alt=" " width="799" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Garp turns my grandpa Thatha's voice memos into a family recipe book. He talks, the app listens, and a 3D book page appears with the recipe written the way he actually said it.&lt;br&gt;
The problem is simple. Thatha is getting older and his recipes live nowhere except his head and a pile of phone voice notes. When he says "a handful of dal" or "don't rush the onions, they'll punish you," no normal recipe app knows what to do with that. Write it down wrong and the dish dies with him.&lt;br&gt;
So I built him a book that accepts voice memos and live recordings, figures out whether the note is actually a recipe, and refuses anything that isn't. A story about the neighbor's dog never lands in the book. A dal memo becomes a Dal page, ingredients first, numbered steps after, his tip quoted at the bottom, signed Grandpa.&lt;/p&gt;

&lt;p&gt;Demo&lt;br&gt;
There is no public link yet. It runs on my machine with two commands:&lt;br&gt;
PORT=8001 python3 -m extractor.server&lt;br&gt;
then open &lt;a href="http://127.0.0.1:8001" rel="noopener noreferrer"&gt;http://127.0.0.1:8001&lt;/a&gt;. The homepage is the 3D book. Click "Add a voice or live memo," pick Voice to upload a file or Live to record in the browser. A real memo I recorded came back as the Dal page: five ingredients, six steps, 2970 STT credits spent, one tinker call. Non-recipe audio gets a plain "Not added" message and nothing is saved.&lt;br&gt;
Repo: &lt;a href="https://github.com/LusterSourav/Garp" rel="noopener noreferrer"&gt;https://github.com/LusterSourav/Garp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code&lt;br&gt;
The whole server is Python stdlib, no framework. The pipeline is one file per job: memo_ingest.py guards the upload, transcribe.py turns speech into text, extract.py turns text into recipe JSON, to_nyum.py writes the book file, bookview.py renders the 3D pages. test_smoke.py keeps it honest offline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/LusterSourav/Garp" rel="noopener noreferrer"&gt;https://github.com/LusterSourav/Garp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How I Built It&lt;br&gt;
The open pieces are the core, not decoration.&lt;br&gt;
Transcription tries local first. If faster-whisper is installed, the memo never leaves the laptop: the transcript gets scored on word count, confidence, no-speech probability, and repetition loops, and only a clean transcript is accepted. If local fails or nothing is installed, the same saved temp file goes to ElevenLabs Scribe automatically. The user never re-uploads. Credits burn only when the cloud actually runs.&lt;/p&gt;

&lt;p&gt;Extraction has a local path too through Ollama and Qwen, with Backboard's Claude Haiku as the hosted fallback. The prompt is strict: speaker's own words for quantities, never invent, vague things go in unclear, non-food returns empty and gets rejected with a 422. The recipe is written in whatever language Thatha spoke.&lt;br&gt;
The book itself is vendored everything: Barlow and Lora fonts, Tabler icons redrawn on canvas with rough.js, no CDN. Long recipes paginate inside the 3D page and turn with a curl animation, no buttons, just tap left or right.&lt;/p&gt;

&lt;p&gt;Why Does Open Innovation Matter?&lt;br&gt;
Because this book cannot depend on anyone's server but ours. Faster-whisper means Thatha's voice can stay on a laptop in his house. Qwen through Ollama means extraction works with no account and no bill. MIT-licensed templates and icons mean the whole thing is mine to keep, fork, and hand to my cousins without asking permission.&lt;br&gt;
A closed API could do each step. It could never give me this: a gift I can copy onto a ten-year-old laptop, run offline at his kitchen table, and know it will still work when the free credits are long gone. Open made it a family heirloom instead of a subscription.&lt;/p&gt;

&lt;p&gt;Prize Categories&lt;br&gt;
Entering for the overall prize only.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Day 1 to understand Floresta</title>
      <dc:creator>Sourav</dc:creator>
      <pubDate>Sat, 04 Jul 2026 13:40:22 +0000</pubDate>
      <link>https://dev.to/morningstarxcdcode/day-to-understand-floresta-1k55</link>
      <guid>https://dev.to/morningstarxcdcode/day-to-understand-floresta-1k55</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe8ydy7nptcx0xdhrl8bn.jpeg" class="article-body-image-wrapper"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe8ydy7nptcx0xdhrl8bn.jpeg" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>go</category>
      <category>opensource</category>
      <category>bitcoin</category>
    </item>
    <item>
      <title>Ballerina vs Node.js: Building Modern APIs (Plus macOS Setup Tips)</title>
      <dc:creator>Sourav</dc:creator>
      <pubDate>Sun, 12 Oct 2025 04:39:08 +0000</pubDate>
      <link>https://dev.to/morningstarxcdcode/ballerina-vs-nodejs-building-modern-apis-plus-macos-setup-tips-582k</link>
      <guid>https://dev.to/morningstarxcdcode/ballerina-vs-nodejs-building-modern-apis-plus-macos-setup-tips-582k</guid>
      <description>&lt;p&gt;In API development, two names often come up: Ballerina and Node.js.&lt;br&gt;
Both are powerful — but they take very different paths. Here’s a quick technical breakdown &lt;/p&gt;

&lt;p&gt;Language and Design&lt;/p&gt;

&lt;p&gt;Ballerina is a cloud-native language built for network services. It has an HTTP listener and service construct baked in, making APIs feel declarative. It’s statically typed, helping catch issues early.&lt;br&gt;
Node.js is a JavaScript runtime (V8 engine) — dynamic, flexible, and usually paired with frameworks like Express.&lt;br&gt;
➡️ Ballerina focuses on integration and reliability.&lt;br&gt;
➡️ Node.js focuses on speed and flexibility.&lt;/p&gt;

&lt;p&gt;Ecosystem and Libraries&lt;/p&gt;

&lt;p&gt;Node.js wins in ecosystem size — npm offers thousands of packages and frameworks (Express, NestJS, Fastify).&lt;br&gt;
Ballerina offers built-in connectors for HTTP, gRPC, Kafka, databases, etc., so many integrations need no third-party code.&lt;br&gt;
Ballerina’s “inbuilt networking primitives” make service composition simple — ideal for enterprise APIs.&lt;/p&gt;

&lt;p&gt;Performance and Concurrency&lt;/p&gt;

&lt;p&gt;Both handle non-blocking I/O well but differ in approach:&lt;br&gt;
Node.js uses a single-threaded event loop, perfect for real-time apps.&lt;br&gt;
Ballerina uses lightweight strands, offering high concurrency and performance for microservices and data-heavy workloads.&lt;/p&gt;

&lt;p&gt;Use Cases&lt;/p&gt;

&lt;p&gt;Ballerina → Great for enterprise-grade APIs, observability, OpenAPI generation, and Kubernetes/Docker deployment.&lt;/p&gt;

&lt;p&gt;Node.js → Perfect for fast prototyping, real-time systems, and startups that thrive on JavaScript speed.&lt;/p&gt;

&lt;p&gt;Summary&lt;/p&gt;

&lt;p&gt;No one-size-fits-all winner:&lt;br&gt;
Choose Ballerina for strongly typed, integration-heavy systems.&lt;br&gt;
Choose Node.js for rapid builds and ecosystem power.&lt;br&gt;
Often, both coexist — Ballerina for backend microservices, Node.js for gateways.&lt;/p&gt;

&lt;p&gt;Bonus: Ballerina Setup Tips for macOS&lt;/p&gt;

&lt;p&gt;Common fixes if setup fails:&lt;br&gt;
Use Java 17+ (older versions cause compiler errors).&lt;br&gt;
Install via brew install bal or .pkg.&lt;br&gt;
For M1/M2 Macs, use Swan Lake 2201.5.0+.&lt;br&gt;
Run bal version to verify install.&lt;br&gt;
Fix JAVA_HOME if VS Code plugin fails.&lt;br&gt;
Once configured, Ballerina runs smoothly on macOS — ready for your next API build!&lt;/p&gt;

&lt;p&gt;💡 Conclusion:&lt;/p&gt;

&lt;p&gt;Ballerina’s integration-first, cloud-native design complements Node.js’s speed and ecosystem perfectly. Both have their place in the modern API stack.&lt;/p&gt;

&lt;h1&gt;
  
  
  Ballerina #Hacktoberfest #OpenSource #API #NodeJS #SoftwareEngineering #Integration #CloudNative #BallerinaLang @BallerinaLang
&lt;/h1&gt;

</description>
      <category>discuss</category>
      <category>api</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>No Dependencies, Just Adventure: Introducing Mystic-Quest in Python</title>
      <dc:creator>Sourav</dc:creator>
      <pubDate>Sun, 22 Jun 2025 15:04:43 +0000</pubDate>
      <link>https://dev.to/morningstarxcdcode/no-dependencies-just-adventure-introducing-mystic-quest-in-python-1bij</link>
      <guid>https://dev.to/morningstarxcdcode/no-dependencies-just-adventure-introducing-mystic-quest-in-python-1bij</guid>
      <description>&lt;p&gt;Discover Mystic-Quest, a beautiful retro-inspired text-based adventure game built entirely in Python 3 with no external dependencies. Dive into a world of ASCII art, challenging riddles, magical encounters, and hidden treasures. With 10+ unique endings shaped by your choices, Mystic-Quest offers a nostalgic yet fresh experience for fans of interactive fiction and classic games. In this post, I’ll walk you through the game’s features, design choices, and how you can play or contribute!&lt;/p&gt;

&lt;p&gt;Why I Chose to Create a Text Adventure?&lt;/p&gt;

&lt;p&gt;Text adventure games hold a special place in gaming history—they ignite imagination, encourage problem-solving, and let players become part of the story in a unique, interactive way. I wanted to capture that nostalgic magic while making it accessible to everyone with simple Python 3, no dependencies, and fun ASCII art. Developing a text adventure also allowed me to focus on creative storytelling, riddles, and multiple endings, rather than complex graphics or external libraries. It’s both a tribute to classic games and an invitation for new players (or coders!) to experience the joy of interactive fiction.&lt;/p&gt;

&lt;p&gt;Game Story Idea&lt;/p&gt;

&lt;p&gt;Mystic-Quest is set in a mysterious, enchanted realm where the player awakens with no memory, surrounded by ancient ruins and cryptic symbols. As you explore, you encounter magical beings, solve riddles, and make choices that shape your destiny. The world is filled with hidden treasure chambers, ancient secrets, and mystical artifacts. Each decision you make—whether to trust a mischievous spirit, open a forbidden door, or solve a puzzle—leads to a unique storyline and one of 10+ possible endings. The game combines classic adventure elements with original riddles and interactive storytelling, encouraging replayability and imagination.&lt;/p&gt;

&lt;p&gt;How Q Helped Me Generate and Debug Code...hm???&lt;/p&gt;

&lt;p&gt;Q, as an AI-powered coding assistant, was invaluable throughout the development of Mystic-Quest. Here’s how it helped:&lt;/p&gt;

&lt;p&gt;Rapid Prototyping: Q helped me quickly generate Python code snippets for handling user input, branching storylines, and rendering ASCII art, saving me hours of manual coding.&lt;br&gt;
Debugging Assistance: Whenever I encountered errors—like logic bugs in riddle checks or unexpected crashes in story branches—Q analyzed the stack traces, suggested fixes, and explained the root causes in clear language.&lt;br&gt;
Refactoring and Best Practices: Q offered suggestions to improve code readability and structure, such as breaking large functions into smaller ones or using more descriptive variable names.&lt;br&gt;
Creative Ideas: When I needed inspiration for new story twists or riddle formats, I could brainstorm with Q to add more depth and replayability to the game.&lt;br&gt;
Documentation: Q helped me document functions and provide clear instructions for players and contributors.&lt;br&gt;
Overall, Q streamlined the coding process, made debugging less stressful, and even sparked creativity—making the journey of building Mystic-Quest much smoother and more enjoyable.&lt;/p&gt;

&lt;p&gt;I have also upload this in my gthub also &lt;br&gt;
&lt;a href="https://github.com/morningstarxcdcode/Mystic-Quest" rel="noopener noreferrer"&gt;https://github.com/morningstarxcdcode/Mystic-Quest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;build with AmazonQDevCLI&lt;/p&gt;

&lt;h1&gt;
  
  
  AmazonQDevCLI
&lt;/h1&gt;

&lt;h1&gt;
  
  
  BuildGamesChallenge
&lt;/h1&gt;

&lt;p&gt;give play ss&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2F3m7n8xbmkegm61kk4lj2.png" class="article-body-image-wrapper"&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%2F3m7n8xbmkegm61kk4lj2.png" alt="Image description" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fls8bwbdt0fzfrh01yu86.png" class="article-body-image-wrapper"&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%2Fls8bwbdt0fzfrh01yu86.png" alt="Image description" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fw40x6j3meyl2n0t4wek6.png" class="article-body-image-wrapper"&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%2Fw40x6j3meyl2n0t4wek6.png" alt="Image description" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
