<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Vladimir Budilov on Medium]]></title>
        <description><![CDATA[Stories by Vladimir Budilov on Medium]]></description>
        <link>https://medium.com/@budilov?source=rss-63e968c085aa------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*wQw7nnEiEMgOvQC97Bu5oA.jpeg</url>
            <title>Stories by Vladimir Budilov on Medium</title>
            <link>https://medium.com/@budilov?source=rss-63e968c085aa------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 25 Jun 2026 05:13:16 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@budilov/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Building a Typing Game for My Kids: Comparing Claude Code CLI and Kiro CLI]]></title>
            <link>https://medium.com/@budilov/building-a-typing-game-for-my-kids-comparing-claude-code-cli-and-kiro-cli-dc1239c4f5da?source=rss-63e968c085aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/dc1239c4f5da</guid>
            <category><![CDATA[kiro-cli]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[amazon-kiro]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[coding]]></category>
            <dc:creator><![CDATA[Vladimir Budilov]]></dc:creator>
            <pubDate>Tue, 21 Apr 2026 17:31:27 GMT</pubDate>
            <atom:updated>2026-04-21T17:31:27.354Z</atom:updated>
            <content:encoded><![CDATA[<p><strong><em>A quick family project that became a practical test of two AI coding tools. What the timing, cost, and output differences revealed about current developer workflows.</em></strong></p><p>My kids are working on touch typing, so I decided to recreate the simple “falling letters” game I played as a child. The concept is straightforward: letters drop from the top of the screen, and you type them before they reach the bottom.</p><p>Rather than writing the code myself (I haven’t done THAT for a while since coding assistants make it so easy), I used the opportunity to compare two AI coding assistants side by side using the same detailed prompt:</p><ul><li>Claude AI with its Code CLI</li><li>Kiro CLI from @kirodotdev</li></ul><p>I asked both tools to build a modern version of the game using Three.js, with neon visuals, particle effects, combo scoring, lives, progressive difficulty, and polished controls.</p><h3>What Each Tool Delivered</h3><p><strong>Claude Code CLI</strong> completed the task in 12 minutes and 37 seconds. It produced a fully functional game featuring a starfield background, glowing neon letters with pulse animations, particle explosions on successful hits, red bursts and camera shake on misses, combo multipliers with visual feedback, and a complete scoring and lives system.</p><p><strong>Kiro CLI</strong> finished in 3 minutes and 6 seconds. The output was comparable in quality and features — same visual style, animations, physics, and gameplay mechanics.</p><p>The main differences were speed and cost. Kiro’s smart router selected appropriate models for different parts of the implementation (visuals, physics, UI logic), resulting in significantly lower token usage — roughly one-fifth the cost of the Claude run.</p><p>Here are screenshots of the running game and the CLI outputs for reference:</p><p>Claude:</p><figure><img alt="Claude" src="https://cdn-images-1.medium.com/max/1024/0*jEUMMQ9dPWM9P0EW" /></figure><p>Kiro:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*HR8GHKVdgVl4N390" /></figure><p>Claude:</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/0*ZM0O_iX3OMu604wS" /></figure><p>Kiro:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/579/0*F9D5VWDYOQ6TQ9ME" /></figure><h3>Observations from the Experiment</h3><p>The project reinforced a few practical points I see in my day-to-day work with GenAI workloads and cloud-native development:</p><ul><li>Tool selection has become an important part of efficiency. Different AI coding environments handle speed, cost, and specialization differently, even when given identical prompts.</li><li>Rapid prototyping has accelerated dramatically. Features that once required hours of manual coding can now be generated, iterated, and made playable in minutes.</li><li>Complementary use of tools makes sense. I continue to use Claude for deeper reasoning and system design tasks, while Kiro has become useful for faster implementation passes.</li></ul><p>Even small personal projects like this help me stay connected to the evolving developer tooling landscape. As someone who works with customers on GenAI search solutions (OpenSearch + RAG pipelines with LangGraph, Cohere embeddings, vector stores), cloud migrations, and scalable SaaS architectures, these hands-on experiments keep my perspective current when advising teams on their own AI adoption strategies.</p><p>I highly recommend to experiment with tools if you’re in the field — don’t just settle for something you’re used to. This simple typing game experiment sits at the intersection of family, fun, and technology. It reminded me how quickly AI tools are changing the way we build, and how staying hands-on with them remains valuable regardless of role or seniority.</p><p>If you’ve run similar comparisons with Claude Code CLI, Kiro, Cursor, or other AI coding tools, I’d be interested in your experiences in the comments. What’s working well for you in 2026?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dc1239c4f5da" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[From Manual Repetition to Fully Automated SPA Deployments on AWS — My Latest Automation Journey]]></title>
            <link>https://medium.com/@budilov/from-manual-repetition-to-fully-automated-spa-deployments-on-aws-my-latest-automation-journey-4c546239dd05?source=rss-63e968c085aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/4c546239dd05</guid>
            <category><![CDATA[claude]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[automation]]></category>
            <category><![CDATA[single-page-applications]]></category>
            <category><![CDATA[kiro]]></category>
            <dc:creator><![CDATA[Vladimir Budilov]]></dc:creator>
            <pubDate>Wed, 28 Jan 2026 16:56:16 GMT</pubDate>
            <atom:updated>2026-01-28T16:56:16.716Z</atom:updated>
            <content:encoded><![CDATA[<h3>From Manual Repetition to Fully Automated SPA Deployments on AWS — My Latest Automation Journey</h3><p>A few months ago, I was still manually stepping through the same AWS deployment ritual for every Single Page Application (SPA): configuring S3 buckets with website hosting and CORS, creating CloudFront distributions, handling ACM certificates, syncing files via CLI, and running cache invalidations. Each run took 20–40 minutes of undivided attention. A single oversight — wrong policy, missing OAC, skipped invalidation — meant rework or silent failures later.</p><p>That repetition was eating real time and mental energy I wanted to spend on features, experiments, or new projects. So I decided to eliminate it once and for all.</p><p>I vibe-coded the solution in one focused session, leaning on code-assistants to turn high-level intent into clean, working Python code at high speed. The result is a single script that handles the complete end-to-end deployment:</p><p>- Creates or reuses the S3 bucket and enables static website hosting<br>- Provisions a CloudFront distribution with HTTPS-only redirection<br>- Manages ACM certificates (requests new ones when required or attaches existing valid ones)<br>- Syncs built SPA files efficiently with — delete<br>- Triggers cache invalidation so changes are live instantly</p><p>The script is idempotent where it counts, logs every meaningful step, fails fast on clear misconfigurations, and lets you override defaults via arguments or environment variables.</p><p>What once took 30+ minutes of manual work now completes in under 30 seconds — frequently 15–20 seconds depending on file count and region. The reduction in cognitive load is even more valuable than the raw time saved.</p><p>Vibe-coding with assistants is a massive value-add for any developer or architect. It collapses the gap between idea and implementation, keeps you in flow instead of fighting syntax or boilerplate, and lets domain knowledge guide the outcome while the heavy lifting happens instantly. The productivity multiplier is real and compounding.</p><p>I’ve open-sourced the project so anyone building SPAs on AWS can bypass the same grind: <br><a href="https://github.com/vbudilov/spa-deploy">https://github.com/vbudilov/spa-deploy</a></p><p>It’s kept deliberately lightweight — just boto3 plus sensible defaults — so it’s easy to read, fork, or extend for your own needs.</p><p>I’ve already used it across personal projects and small client work; it consistently saves hours and prevents silly errors.</p><p>If you’re still tab-switching between console, CLI, and docs for frontend deploys, this might be worth a try.</p><p>I’d love to hear your take:<br>- What’s your current SPA / frontend deployment flow on AWS (or other clouds)?<br>- Have you automated away a repetitive infrastructure task that used to drain you?<br>- How has vibe-coding (or AI-assisted coding) changed your own workflow?</p><p>Fork it, break it, improve it — feedback, issues, and PRs are very welcome.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4c546239dd05" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Claude Code vs Kiro-CLI: Creating a mobile app with both]]></title>
            <link>https://medium.com/@budilov/claude-code-vs-kiro-cli-creating-a-mobile-app-with-both-07cb8ef14676?source=rss-63e968c085aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/07cb8ef14676</guid>
            <category><![CDATA[claude]]></category>
            <category><![CDATA[kiro]]></category>
            <category><![CDATA[claude-code]]></category>
            <dc:creator><![CDATA[Vladimir Budilov]]></dc:creator>
            <pubDate>Fri, 09 Jan 2026 18:20:27 GMT</pubDate>
            <atom:updated>2026-01-09T18:20:27.291Z</atom:updated>
            <content:encoded><![CDATA[<p>I’ve been working a lot with AI coding agents to streamline my workflow — and simplify life in general.</p><p>I built a small mobile app for stock analysis + financial reminders, using both kiro-cli and Claude Code (CLI-only, no IDEs) on the exact same project. I’d prompt the same task, git-revert changes, and compare how each handled it — including code quality, verbosity, and token/credit burn.</p><p>Quick &amp; dirty takeaways:</p><p>kiro-cli is noticeably more succinct and developer-in-the-loop — it does a focused chunk of work, then waits for your feedback. Claude Code goes “all in,” often building way more than requested.</p><p>→ Result: kiro-cli used far fewer tokens/credits. I burned through Claude Code’s limits in ~30 minutes of heavy prompting, while kiro’s free tier kept me going much longer.</p><p>Claude Code has killer built-in features like Plan Mode (read-only planning without changes). Super handy. kiro-cli lacks a dedicated mode, but a simple prompt (“Plan everything first, no changes yet”) gets it to behave similarly.</p><p>→ Close call — Claude wins on convenience, kiro isn’t far behind.</p><p>Subagents in Claude Code look amazing for parallel work… until you see the token meter. They often fire off automatically and drain limits fast, even on moderate tasks.</p><p>→ Big advantage in theory, but in practice, they eat tokens aggressively.</p><p>Bottom line: For day-to-day, budget-conscious use, I lean toward kiro-cli — it’s efficient and predictable. But I’m keeping my Claude Code sub (no upgrade to the higher, $100/month, tier though) because it’s really good when I want maximum “hands-off” power (and also as a backup).</p><p>What’s your experience with kiro-cli vs. Claude Code? Which one wins for you in real projects?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=07cb8ef14676" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The many layers of Amazon Bedrock Knowledge Bases and why you should give it a try (hint: the…]]></title>
            <link>https://medium.com/@budilov/the-many-layers-of-amazon-bedrock-knowledge-bases-and-why-you-should-give-it-a-try-hint-the-6541e3a61b59?source=rss-63e968c085aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/6541e3a61b59</guid>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[genai]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Vladimir Budilov]]></dc:creator>
            <pubDate>Tue, 27 May 2025 21:06:26 GMT</pubDate>
            <atom:updated>2025-05-27T21:08:32.987Z</atom:updated>
            <content:encoded><![CDATA[<h3>The many layers of Amazon Bedrock Knowledge Bases and why you should give it a try (hint: the knowledge base “orchestration engine” is free)</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/609/1*WKAl5SS4kIWk6rIGZPBdAg.png" /></figure><h3>The Many Layers of Amazon Bedrock Knowledge Bases and Why You Should Give It a Try</h3><p>Building a Retrieval-Augmented Generation (RAG) system from scratch is no small feat. It involves stitching together data ingestion pipelines, text chunking algorithms, vector databases, search mechanisms, and generative AI models — all while ensuring security, scalability, and performance. Each component requires expertise, time, and resources, often leading to a complex web of microservices that can drain budgets and delay projects. Enter <strong>Amazon Bedrock Knowledge Bases</strong>, a fully managed service that takes away much of this “plumbing,” enabling developers to create robust RAG systems quickly and cost-effectively. In this article, I’ll explore the many layers of Bedrock Knowledge Bases and why it’s a game-changer for businesses and developers alike.</p><h3>What Is Amazon Bedrock Knowledge Bases?</h3><p>Amazon Bedrock Knowledge Bases is a managed service within AWS’s Bedrock platform, designed to simplify the creation of RAG workflows. RAG systems combine the power of information retrieval with generative AI to deliver accurate, context-aware responses. For example, a customer support chatbot might retrieve relevant documents from a company’s knowledge base and use a large language model (LLM) to generate a natural, user-friendly answer. Bedrock Knowledge Bases abstracts away the complexity of building such systems by providing an <strong>end-to-end solution — from data ingestion to response generation</strong> — saving you from managing a bunch of microservices.</p><h3>The Layers of Bedrock Knowledge Bases</h3><p>To understand why Bedrock Knowledge Bases is so powerful, let’s break down its architecture into its core layers. Each layer handles a critical part of the RAG workflow, eliminating the need for custom-built components.</p><h3>1. Data Ingestion: The Foundation 📂</h3><p>The first layer is all about getting your data into the system. Bedrock Knowledge Bases supports a wide range of data sources, including Amazon S3, Confluence, Salesforce, SharePoint, and even web crawlers (currently in preview). It can ingest both structured data (e.g., databases) and unstructured data like text, images, tables, and charts. This multimodal capability means you don’t need separate tools for processing PDFs, images, or tabular data.</p><p><strong>What It Replaces</strong>: Without Bedrock, you’d need to build custom ETL (Extract, Transform, Load) pipelines using tools like Apache NiFi or AWS Glue, or write scripts to scrape and process data from various platforms. Bedrock’s intelligent document processing (IDP) automates this, saving hours of development time.</p><p><strong>Why It Matters</strong>: By handling data ingestion across diverse sources, Bedrock reduces setup time and ensures your RAG system can pull from wherever your data lives — without manual intervention.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/938/1*y5J-s50Bn9SGmvqkuQMbIQ.png" /></figure><h3>2. Data Processing: Chunking and Embedding ✂️🔢</h3><p>Once data is ingested, Bedrock processes it into a format suitable for retrieval. This involves two key steps:</p><ul><li><strong>Chunking</strong>: Bedrock splits documents into manageable pieces using semantic, hierarchical, or fixed-size chunking. You can even customize chunking with AWS Lambda for specific use cases.</li><li><strong>Embedding Generation</strong>: It converts these chunks into vector embeddings using models like Amazon Titan or Cohere, supporting both text and multimodal data (e.g., images).</li></ul><p><strong>What It Replaces</strong>: Normally, you’d rely on libraries like LangChain or Hugging Face for chunking and embedding, requiring custom code to handle text segmentation and vectorization. You’d also need to manage compute resources for embedding generation, which can be resource-intensive.</p><p><strong>Why It Matters</strong>: Bedrock automates these steps, ensuring high-quality embeddings without the need for external libraries or infrastructure management. This speeds up development and reduces costs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/948/1*R6zF2DdSS-CQ8T5jiAQ1zg.png" /></figure><h3>3. Vector Storage: The Memory Bank 💾</h3><p>After processing, Bedrock stores embeddings in a managed vector database. Supported options include Amazon OpenSearch Serverless, Amazon Aurora, Amazon Neptune Analytics, MongoDB, Pinecone, and Redis Enterprise Cloud. It also handles metadata (up to 10 KB per document) for filtering and hybrid search (semantic + keyword).</p><p><strong>What It Replaces</strong>: Setting up and maintaining a vector database like Pinecone or Elasticsearch is a significant undertaking, requiring expertise in database configuration, scaling, and indexing. Bedrock’s managed vector stores eliminate this overhead.</p><p><strong>Why It Matters</strong>: You get a scalable, secure storage solution without provisioning servers or managing database operations, saving both time and operational costs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/956/1*_CBEHuuS26mMxzgdtM-s2g.png" /></figure><h3>4. Query Processing: Smart Retrieval 🔍</h3><p>When a user submits a query, Bedrock processes it to retrieve relevant data. It supports natural language queries, converting them into vector searches or SQL queries for structured data stores like Amazon Redshift. Features like hybrid search and GraphRAG (using Amazon Neptune Analytics) enhance retrieval accuracy by linking related content.</p><p><strong>What It Replaces</strong>: Without Bedrock, you’d need to build custom search algorithms or integrate tools like OpenSearch for semantic search and SQL engines for structured data. GraphRAG would require a separate graph database setup.</p><p><strong>Why It Matters</strong>: Bedrock’s query processing layer simplifies retrieval, making it accessible to non-experts while delivering precise results, reducing the need for specialized search infrastructure.</p><h3>5. Response Generation: The Final Touch 💬</h3><p>The final layer combines retrieved data with foundation models (e.g., Claude, Llama, Nova) to generate natural, context-aware responses. Bedrock’s RetrieveAndGenerate API streamlines this process, handling session context for conversational continuity.</p><p><strong>What It Replaces</strong>: Building a RAG system typically requires custom orchestration to integrate retrieval and generation, often using frameworks like LangChain or custom APIs. Bedrock’s single API call eliminates this complexity.</p><p><strong>Why It Matters</strong>: By automating response generation, Bedrock ensures fast, accurate answers without the need for custom integration code, saving development effort.</p><h3>6. Security and Integration: The Glue 🔒🔗</h3><p>Underpinning these layers are Bedrock’s security and integration capabilities. It manages IAM roles, supports customer-managed KMS keys for encryption, and ensures data isolation. Integration with AWS services like Lambda, S3, EventBridge, and Bedrock Agents enables seamless workflows and automation.</p><p><strong>What It Replaces</strong>: You’d otherwise need to configure IAM policies, encryption, and integration scripts manually, often using tools like AWS SDK or custom middleware.</p><p><strong>Why It Matters</strong>: Bedrock’s built-in security and integration reduce setup time and ensure compliance, while enabling easy connection to your broader AWS ecosystem.</p><h3>Give Bedrock Knowledge Bases a Try</h3><p>It’s the fastest way for you to build out your own RAG without coding up multiple microservices and ingestion pipelines.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6541e3a61b59" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How I Built a Personal Finance App with Amazon Bedrock’s Claude Sonnet 3.5,]]></title>
            <link>https://medium.com/@budilov/how-i-built-a-personal-finance-app-with-amazon-bedrocks-claude-sonnet-3-5-4ec010ce39ed?source=rss-63e968c085aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/4ec010ce39ed</guid>
            <category><![CDATA[genai]]></category>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[documentdb]]></category>
            <category><![CDATA[mongodb]]></category>
            <category><![CDATA[lambda]]></category>
            <dc:creator><![CDATA[Vladimir Budilov]]></dc:creator>
            <pubDate>Sun, 25 Aug 2024 18:59:08 GMT</pubDate>
            <atom:updated>2024-08-25T18:59:08.734Z</atom:updated>
            <content:encoded><![CDATA[<h3>How I Built a Personal Finance App with Amazon Bedrock’s Claude Sonnet 3.5, EKS, and other AWS Services</h3><p><a href="https://assetsmaven.com"><strong><em>https://assetsmaven.com</em></strong></a></p><p>Three years ago, my family and I relocated to Florida. Along with the warmer weather and beach life, we also experienced a significant spike in our credit card spending. This unexpected rise in expenses made me realize how crucial it was to have a better handle on our finances. That’s when I decided to create an app that has since transformed the way we manage our money.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*de4C6xTcw03z_ozJZzG_aw.png" /><figcaption>Categories of line items — click on each bar to see details</figcaption></figure><p>The app I developed allows users to upload their credit card and bank statements in PDF format, as well as take snapshots of their receipts, and then automates the entire process. It itemizes and categorizes transactions, providing insightful analytics and a powerful search functionality. But that’s just the beginning — the app also generates graphs and detailed analyses, making it easier to understand and manage your spending habits.</p><h3>The Tech Stack: From LLMs to Kubernetes and Lambda</h3><p>Building this app was an exciting challenge. I leveraged Amazon Bedrock’s Claude Sonnet 3.5, a cutting-edge large language model (LLM), to manage the complexities of natural language processing and data categorization. Claude Sonnet 3.5 was instrumental in making the app smart enough to understand and sort through the vast amounts of data that users upload.</p><p>In addition to the LLM, I used Amazon Textract for extracting text and data from documents. The backend of the app is powered by a combination of Kubernetes and AWS Lambda.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/786/1*670Vwi3Sck4hkI0gLhmswQ.png" /><figcaption>Textract in action</figcaption></figure><p>On the storage side, I utilized AWS S3 for storing user-uploaded files and Amazon DocumentDB for managing structured data. To manage communication between different parts of the app, I used Amazon SQS, which helps ensure everything runs smoothly, even under heavy load.</p><h3>Key Features: Search, Graphs, and In-Depth Analysis</h3><p>The app is more than just a transaction tracker. It offers a suite of features designed to give users a deeper understanding of their finances:</p><ul><li><strong>Search Functionality</strong>: The app allows users to search through their transactions with ease. Whether you’re looking for a specific purchase or trying to find all transactions related to a certain category, the search functionality makes it simple.</li><li><strong>Graphs and Visualizations</strong>: Visualizing data is key to understanding it. The app generates a variety of graphs that show spending trends, categorize expenses, and highlight patterns that might otherwise go unnoticed.</li><li><strong>In-Depth Analysis</strong>: Beyond just itemizing expenses, the app provides detailed analyses of your spending habits. It helps identify unnecessary subscriptions, recurring charges, and other financial insights that can save you money.</li></ul><h3>Discovering Hidden Costs: Uncovering Unnecessary Subscriptions</h3><p>One of the most useful features of the app, at least for me, has been its ability to identify unnecessary subscriptions. For instance, I discovered three subscriptions that had been silently draining money, including a $19.99 monthly charge for an Adobe account we hadn’t used in ages. Thanks to the app, I was able to cancel those subscriptions and save some cash.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TImf7o8dCIE1BWPGY29dNA.png" /><figcaption>Subscriptions analysis</figcaption></figure><h3>Looking Ahead: Opening the App to the Public</h3><p>I’m opening the app to the public today! The architecture and technology behind it have been fun to work with, and I plan to share more details in future posts. If you’re a developer, you’ll definitely want to stay tuned — I’ll be discussing some of the more technical aspects, such as handling context window limits in LLMs, ensuring response continuity, and the interplay between Kubernetes and Lambda.</p><p>In the meantime, if you’re curious about the product, you can check out the homepage at <a href="https://assetsmaven.com">https://assetsmaven.com</a>.</p><p>Stay tuned for more insights and updates as I continue to refine and expand the app. Your financial health might just thank you for it!</p><p>Please share this Medium article with others who might be interested in personal finance, app development, or simply keeping a closer eye on their spending. Feedback is always welcome as I continue to improve and iterate on the app.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4ec010ce39ed" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2023 Content Recap: What I found interesting and informative]]></title>
            <link>https://medium.com/@budilov/2023-content-recap-what-i-found-interesting-and-informative-0ec9181f1d87?source=rss-63e968c085aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/0ec9181f1d87</guid>
            <dc:creator><![CDATA[Vladimir Budilov]]></dc:creator>
            <pubDate>Sat, 30 Dec 2023 01:49:00 GMT</pubDate>
            <atom:updated>2023-12-30T01:49:00.294Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Podcasts</strong></h3><ol><li><strong>All In.</strong> By far one of the most enjoyable podcasts I’ve stumbled upon in 2023 is the <a href="https://open.spotify.com/show/2IqXAVFR4e0Bmyjsdc8QzF?si=4a2ddce040c14557">All In</a> pod. It’s led by Chamath Palihapitiya, Jason Calacanis, David Sacks &amp; David Friedberg and they “cover all things economic, tech, political, social &amp; poker.” I’ve learned a TON about business, VCs, tech, and enjoyed their political debates (not the ‘debates’ part — each one of them has his own opinion on what’s happening in this world and the conversations are usually very lively and informative).</li><li><strong>Modern Wisdom</strong>. The second-most interesting podcast I’ve started listening to is <a href="https://open.spotify.com/show/0XrOqvxlqQI6bmdYHuIVnr?si=2d185a8d97fb4144">Modern Wisdom</a>. It’s led by <strong>Chris Williamson </strong>and he’s doing an excellent job of letting people speak, while asking the right questions to make the pod more interesting and engaging.</li><li><a href="https://open.spotify.com/show/7gKwwMLFLc6RmjmRpbMtEO?si=dc368f745f314488"><strong>The AI Breakdown</strong></a>. By far the most informative AI-related pod I’ve listened to. Not sure where the narrator is getting his info or how he’s curating it, but it’s massive.</li><li><a href="https://open.spotify.com/show/5bC65RDvs3oxnLyqqvkUYX?si=20a1abe2fd034353"><strong>a16z</strong></a>. Interested in the intersection of business and technology? Look no further. I learned a lot abou the current and future trends as well as concerns.</li></ol><h3>Books</h3><p>Below are some of the more interesting books I’ve read or listened to.</p><p><a href="https://www.amazon.com/Blueprint-Nicholas-A-Christakis-audiobook/dp/B07PKS1Z4Z/ref=sr_1_1?crid=3JQPSJD0M64UI&amp;keywords=Blueprint+by+Nicholas+A.+Christakis&amp;qid=1703885381&amp;s=books&amp;sprefix=blueprint+by+nicholas+a.+christakis%2Cstripbooks%2C85&amp;sr=1-1">Blueprint</a> by Nicholas A. Christakis. How are successful societies formed? What are the traits of the failed ones? This book explores these nuances through historical stories and analysis.</p><p><a href="https://www.amazon.com/Bomber-Mafia-Temptation-Longest-Second/dp/0316296619">The Bomber Mafia</a> by Gladwell. Malcolm Gladwell is one of my favorite authors. He masterfully tells excellent stories, which makes them easy to consume. This book is a good example of that, covering airplanes during WW2.</p><p><a href="https://www.amazon.com/The-Dorito-Effect-Mark-Schatzker-audiobook/dp/B00WXS745G/ref=sr_1_1?crid=2BH505NW2MMUS&amp;keywords=the+dorito+effect&amp;qid=1703887922&amp;s=books&amp;sprefix=the+dorito+%2Cstripbooks%2C87&amp;sr=1-1">The Dorito Effect</a> by Mark Schatzker. Want to understand why our food industry is unhealthy? Read this book.</p><p><a href="https://www.amazon.com/Elon-Musk-Walter-Isaacson/dp/1982181281/ref=tmm_hrd_swatch_0?_encoding=UTF8&amp;qid=&amp;sr=">Elon Musk</a> by Walter Isaacson. Wow, what a story!</p><h3>Conferences</h3><p><a href="https://www.youtube.com/watch?v=F9cO3-MLHOM">All In Summit</a>. I used to be a huge fan of TED talks but the quality has went down quite significantly so I’m glad that the guys at the All In podcast decided to organize a Summit. Here’s an example of what to expect: <a href="https://www.youtube.com/watch?v=F9cO3-MLHOM">Bill Gurley discusses Regulatory Capture and how it’s detrimental to us all</a>.</p><p><a href="https://www.youtube.com/@amazonwebservices">reInvent 2023</a> -&gt; Kinda expected, isn’t it? :)</p><p><a href="https://www.youtube.com/@GOTO-">goto: 2023 </a>→ Love the GOTO conference. It’s a great forum for tech professionals that love to dive deep and innovate.</p><p>Hope you found this useful.</p><p>Enjoy and Happy New Year!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0ec9181f1d87" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Setting up an IPv6 EKS (Kubernetes) Cluster]]></title>
            <link>https://medium.com/@budilov/setting-up-an-ipv6-eks-kubernetes-cluster-be28088cded6?source=rss-63e968c085aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/be28088cded6</guid>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[ipv6]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[Vladimir Budilov]]></dc:creator>
            <pubDate>Wed, 20 Dec 2023 20:05:23 GMT</pubDate>
            <atom:updated>2024-01-10T16:28:46.038Z</atom:updated>
            <content:encoded><![CDATA[<p>There has been a significant amount of interest in running IPv6-based Kubernetes (EKS) clusters on AWS over the last year due to certain advantages of doing so:</p><ol><li>Address space availability ➡ IPv6-based clusters have SIGNIFICANTLY more available address-space compared to IPv4 ones.</li><li>NAT (Network Address Translation) Avoidance ➡ Yes, that’s a biggy. IPv6 would allow you to avoid using a NAT and saving your org some 💲. You will still need a NAT if your services need to talk to IPv4 endpoints, but there are <a href="https://docs.aws.amazon.com/vpc/latest/userguide/aws-ipv6-support.html">plenty of AWS services</a> (and external services) that support IPv6 traffic for you to see cost savings.</li><li>Future-proofing ➡ The end result is going to be IPv6 so the sooner you make the move (with reasonable tradeoffs, if any) the better.</li></ol><h3>Steps</h3><h4>VPC</h4><p>You will need to create a dualstack VPC. <a href="https://aws.amazon.com/blogs/containers/amazon-eks-launches-ipv6-support/">Here’s</a> a great resource to follow. Note that you need to enable egress-only IG and no need for a NAT (well, not really, since most likely you will still need to talk to non-IPv6 address and you’ll need one, but at least you won’t need it for all egress). Also, make sure the subnets auto-assign IPv6 addresses:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/751/1*Uo_BxIDnYTXWxQLlLDIqjw.png" /></figure><p>The last step is for you to <a href="https://eksctl.io/usage/vpc-configuration/">add the appropriate tags</a> for EKS to autodiscover the correct subnets:</p><ul><li>kubernetes.io/cluster/&lt;name&gt; tag set to either shared or owned</li><li>kubernetes.io/role/internal-elb tag set to 1 for <em>private</em> subnets</li><li>kubernetes.io/role/elb tag set to 1 for <em>public</em> subnets</li></ul><p>Here’s what a sample network diagram would look like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*pARMk_ppTlR7x2Kf.png" /></figure><h4>EKS</h4><p>The easiest way to provision an EKS cluster is to use <a href="https://eksctl.io/">eksctl</a>. It’s also the easiest way to add/remove nodegroups and perform EKS-specific tasks.</p><p>Here’s a sample IPv6 eksctl yaml declaration:</p><pre>apiVersion: eksctl.io/v1alpha5<br>kind: ClusterConfig<br><br>metadata:<br>  name: main<br>  region: us-east-1<br>  version: &quot;1.28&quot;<br><br>kubernetesNetworkConfig:<br>  ipFamily: IPv6 <br><br>vpc:<br>  id: &quot;vpc-XXXXXX&quot;<br>  subnets:<br>    private:<br>      us-east-1a-private: { id: &quot;subnet-XXXXXX1&quot; }<br>      us-east-1b-private: { id: &quot;subnet-XXXXXX2&quot; }<br>      us-east-1a-public: { id: &quot;subnet-XXXXXX3&quot; }<br>      us-east-1b-public: { id: &quot;subnet-XXXXXX4&quot; }<br><br>addons:<br>  - name: vpc-cni<br>  - name: coredns<br>  - name: kube-proxy<br><br>iam:<br>  withOIDC: true<br><br>managedNodeGroups:<br>  - name: t3small-ondemand-private<br>    instanceType: t3.small<br>    privateNetworking: true<br>    subnets:<br>      - us-east-1a-private<br>      - us-east-1b-private<br>    ssh:<br>      allow: false<br>    minSize: 1<br>    maxSize: 5<br>    desiredCapacity: 1<br>    labels: {role: worker}<br>    volumeSize: 100<br>    tags:<br>      nodegroup-role: worker<br>    iam:<br>      withAddonPolicies:<br>        externalDNS: true<br>        certManager: true</pre><p>Note that the ipFamily is IPv6.</p><h4>ALB (Application Load Balancer)</h4><p>After you create the appropriate IAM policy and serviceaccount you can deploy your app. But in order for it to be accessible you need an ALB (since you’re deploying your app, hopefully, in a private subnet). Here’s a sample definition for an ingress (btw what I usually do is create an ALB separately via CDK and then reuse it for my apps, but that’s for a different blog post):</p><pre>apiVersion: networking.k8s.io/v1<br>kind: Ingress<br>metadata:<br>  name: myservice<br>  annotations:<br>    alb.ingress.kubernetes.io/scheme: internet-facing<br>    alb.ingress.kubernetes.io/target-type: ip<br>    alb.ingress.kubernetes.io/ip-address-type: dualstack<br>spec:<br>  ingressClassName: alb<br>  rules:<br>    - http:<br>        paths:<br>        - path: /mypath<br>          pathType: Prefix<br>          backend:<br>            service:<br>              name: my-service<br>              port:<br>                number: 8080</pre><p>Note that the target type is ‘ip’, not the usual ‘instance’ and ip-address-type is dualstack.</p><p>That’s it! Enjoy! Let me know if you found this useful.</p><p><strong>Next Step: Show how to completely decouple the ALB from the Services to save some $ and reuse it with multiple Services. Stay tuned.</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=be28088cded6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Lambda & Amazon Textract: Provision the Infrastructure with CDK]]></title>
            <link>https://medium.com/@budilov/lambda-amazon-textract-provision-the-infrastructure-with-cdk-8c8fa4c85921?source=rss-63e968c085aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/8c8fa4c85921</guid>
            <category><![CDATA[amazon-textract]]></category>
            <category><![CDATA[cdk]]></category>
            <category><![CDATA[aws-lambda]]></category>
            <category><![CDATA[amazon]]></category>
            <category><![CDATA[textract]]></category>
            <dc:creator><![CDATA[Vladimir Budilov]]></dc:creator>
            <pubDate>Sat, 15 Jul 2023 15:12:54 GMT</pubDate>
            <atom:updated>2024-01-10T16:28:21.945Z</atom:updated>
            <content:encoded><![CDATA[<p>I’ve been experimenting with Amazon Textract lately and decided to create a sample application (using Lambda) that demonstrates the benefits of Textract. Check out my explainer video on the first part — provisioning the resources using CDK.</p><p>The next part will dive deep into the Lambda code.</p><p>You can find the CDK code here: <a href="https://github.com/vbudilov/amazon-textract-async-invocation">https://github.com/vbudilov/amazon-textract-async-invocation</a></p><p>Enjoy!</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FP5yZeI6tTos%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DP5yZeI6tTos&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FP5yZeI6tTos%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/621ccb4cc431596595d80156337820f1/href">https://medium.com/media/621ccb4cc431596595d80156337820f1/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8c8fa4c85921" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Serverless Podcast Search Engine on AWS — UI (Part 3)]]></title>
            <link>https://medium.com/@budilov/building-a-serverless-podcast-search-engine-on-aws-ui-part-3-59f1630c63ff?source=rss-63e968c085aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/59f1630c63ff</guid>
            <category><![CDATA[react]]></category>
            <category><![CDATA[single-page-applications]]></category>
            <category><![CDATA[lambda]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[reactjs]]></category>
            <dc:creator><![CDATA[Vladimir Budilov]]></dc:creator>
            <pubDate>Mon, 30 Sep 2019 20:28:22 GMT</pubDate>
            <atom:updated>2019-10-03T16:50:33.837Z</atom:updated>
            <content:encoded><![CDATA[<h3><a href="https://medium.com/@budilov/building-a-serverless-podcast-search-engine-on-aws-architecture-part-2-15843648df5c?source=your_stories_page---------------------------">Building a Serverless Podcast Search Engine on AWS — Web Tier (Part 3)</a></h3><p>This is probably the hardest part for me since I don’t have an iota of what any decent UI expert has — an artistic eye. None-the-less, it’s one of the most important ones. This step makes me think through the functional requirements of the app again, but from the perspective of the user. It’s a reinforcer that solidifies the already-defined use cases and some of the backend designs.</p><p><a href="https://github.com/vbudilov/reactjs-cognito-starter">Here you can find a fully-functioning template</a> I just created that will help you get started with <a href="https://reactjs.org/">ReactJS</a> + <a href="https://aws.amazon.com/cognito/">Amazon Cognito</a> + <a href="https://ant.design/">AntD</a>. I’m not going to spend too much on this part since there aren’t a lot of architectural decisions to be made here, but I’ll go over the tech stack and some of the screens that I will implement later on.</p><h3>Tech Stack</h3><p>At this stage I usually pick my UI tech stack. Here’s what I’ve chosen:</p><ol><li><a href="https://reactjs.org/">ReactJS</a> (notable libs/frameworks: <a href="https://ant.design/">AntD</a>, React-Router, <a href="https://github.com/CookPete/react-player">React-Player</a>): ReactJS was created, and is being maintained, by Facebook. It’s a very mature and robust framework that has a very significant following. One of the reasons I like it is the ability to reuse some of my web app code in my <a href="https://facebook.github.io/react-native/">React Native</a> mobile apps.</li><li><a href="https://aws-amplify.github.io/docs/js/start?ref=amplify-js-btn&amp;platform=purejs">Amplify SDK</a>: This is my go-to SDK whenever I need to call AWS services form the UI, and, especially, whenever I need to add authentication to my apps. A long time ago (3 years ago), I created a very <a href="https://github.com/awslabs/aws-cognito-angular-quickstart">simple Angular/Cognito</a> (soon to be deprecated) sample app before the Amazon Cognito service was released to the public. I used the “raw” SDK provided by Cognito, which required a LOT of tinkering and session management. What the Amplify SDK does it simplify this flow by managing the Cognito tokens for you, therefore allowing more time for business logic creation rather than the usual plumbing work you’d do.</li><li><a href="https://aws.amazon.com/cognito/">Amazon Cognito</a> for Auth: I’m a notable fan of Cognito since I worked with it even before it was released. It’s a great service and with the pricing model of 50,000 MAU for free it can go a long way for any startup. Cognito provides for an easy way to</li><li><a href="https://aws.amazon.com/route53/">Route 53</a> → <a href="https://aws.amazon.com/cloudfront/">CloudFront</a> → <a href="https://aws.amazon.com/s3/">S3</a> (actual place where the Single Page App will live) for hosting and code delivery</li><li><a href="https://github.com/vbudilov/cognito-to-dynamodb-lambda">Lambda function</a> that copies data from Amazon Cognito to DynamoDB</li></ol><h3>Screens</h3><p>Remember those initial business requirements in Part 1 of this series? Well now I’m trying ti visually express them. I’m going to skip some screens and steps and concentrate on the main functionality, which is searching and displaying the search results. Here are the screens that I came up with:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yGFbqTKmymyMwz6PCogGvQ.jpeg" /><figcaption>Default search results page</figcaption></figure><p>Here’s a detailed (albeit very minimal) view of a particular episode.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*esPGCmflawbStELupVOrpg.jpeg" /><figcaption>Episode details page</figcaption></figure><p>And here’s what the actual app that I programmed in ReactJS looks like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BxJTmMCOvDncLBi__y_PtA.png" /></figure><p>Again, <a href="https://github.com/vbudilov/reactjs-cognito-starter/">here’s the code</a> that you can use out of the box to get started with ReactJS/Cognito. You will see the above screen-shot once you clone the repo and run it locally.</p><h3>What we have so far</h3><p>Check out the current version of the app here: <a href="https://www.brainyninja.com">https://www.brainyninja.com</a>. Feel free to register and login — I will dive deeper into what’s going on in background once we get to the next step, but for now all you need to know is when you register, Cognito generates 3 JWT tokens for you and sends them back to the browser. There’s also <a href="https://github.com/vbudilov/cognito-to-dynamodb-lambda">a Lambda function that copied</a> the newly-registered user to a DynamoDB table.</p><h3>Next Steps</h3><p>Remember that <a href="https://medium.com/@budilov/building-a-serverless-podcast-search-engine-on-aws-part-1-f6e58fbc3c06">architecture diagram I shared in Part 1</a>? In this post I chose and setup my hosting and delivery solution, as well as created a fully-functioning scaffold of the future web app. Here’s the part I’ve done:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/516/1*rIxiEXJUoa3aVPY__4xyWg.png" /><figcaption>The front-end</figcaption></figure><p>In <strong>Part 4</strong> I will take a major bite out of the backend by setting up the DynamoDB tables, talking about the data formats, and touching upon some aspects of the data flow.</p><p>Stay tuned!</p><p>P.S.</p><ol><li>CloudFront — when you deploy a SPA to S3 and front it with CloudFront, you need to make sure that your <strong>error pages</strong> are setup correctly, otherwise the website users with see an AccessDenied when refreshing your page with a context root other than ‘/’. So here’s what you need to do on the CloudFront side to make react-router handle the actual routing:</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2rLFKdfWXKZCGiUOZDbVRw.png" /><figcaption>Fix for AccessDenied with ReactJS + CloudFront</figcaption></figure><p>2. Don’t overcomplicate your Cognito registration rules. Unless it’s a financial or medical (or the like) application, you don’t want your users to jump through hoops when choosing a password. Just make the rules simple. You can also auto-confirm users using a Lambda trigger. <a href="https://github.com/vbudilov/cognito-autoconfirm-user">Here’s one I created.</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=59f1630c63ff" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Serverless Podcast Search Engine on AWS — Architecture (Part 2)]]></title>
            <link>https://medium.com/@budilov/building-a-serverless-podcast-search-engine-on-aws-architecture-part-2-15843648df5c?source=rss-63e968c085aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/15843648df5c</guid>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[systems-thinking]]></category>
            <category><![CDATA[solutions]]></category>
            <dc:creator><![CDATA[Vladimir Budilov]]></dc:creator>
            <pubDate>Mon, 23 Sep 2019 20:08:33 GMT</pubDate>
            <atom:updated>2020-04-10T23:20:08.018Z</atom:updated>
            <content:encoded><![CDATA[<h3>Building a Serverless Podcast Search Engine on AWS — Architecture (Part 2)</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2ZKtW-oWJad-K2jS3dsy3A.png" /></figure><p>Now that you know what I’ll be doing, and why, let’s get to the “how”. For starters, I’ll be using AWS — it’d be weird if I didn’t, being an AWS Solutions Architect :) Most of the services seen in that diagram are either part of our Serverless stack or completely managed — at the end of the day I don’t want to manage any servers. I’m seeking that durability, scalability, and availability. Let’s go over the services (I’ll dive deeper into the languages, frameworks, and sdks in future blog posts).</p><h3>AWS Services (from bottom-left, following the arrows)</h3><ol><li><a href="https://aws.amazon.com/s3">Amazon S3</a>: used for hosting the Single Page Application (SPA)</li><li><a href="https://aws.amazon.com/cloudfront/">Amazon CloudFront</a>: CDN that will front S3</li><li><a href="https://aws.amazon.com/certificate-manager/">AWS Certificate Manager</a>: certificate management service that will provision the website certificate</li><li><a href="https://aws.amazon.com/cognito/">Amazon Cognito</a>: user directory that will control the authentication and authorization aspects of the web app</li><li><a href="https://aws.amazon.com/elasticloadbalancing/">Amazon Application Load Balancer</a>: will front the Fargate instances</li><li><a href="https://aws.amazon.com/fargate/">Amazon Fargate</a>: fully managed container service</li><li><a href="https://docs.aws.amazon.com/en_pv/systems-manager/latest/userguide/systems-manager-parameter-store.html">Amazon Parameter Store</a>: used for storing secure parameters. This is a great service that allows you to externalize your secure parameters and never running into an issue where you checked in your passwords or access keys into GitHub.</li><li><a href="https://aws.amazon.com/dynamodb/">Amazon DynamoDB</a>: noSQL database that will be used as the primary data store</li><li><a href="https://aws.amazon.com/kinesis/">Amazon Kinesis</a>: Used to copy the DDB data into ElasticSearch. Although DDB is a great noSQL database that is our “source of truth”, it doesn’t provide free-form text search capabilities that ElasticSearch provides out of the box. And since we want to be able to search for podcasts and episodes (and other things that we will discuss later on) we want to use the proper tech for that, which is ElasticSearch in our case.</li><li><a href="https://aws.amazon.com/lambda/">AWS Lambda</a>: functions in the cloud :)</li><li><a href="https://aws.amazon.com/elasticsearch-service/">Amazon ElasticSearch</a>: it’ll be used for free-form text searching</li><li><a href="https://aws.amazon.com/sqs/">Amazon SQS</a>: multiple uses in this app, including asynchronous data retrieval</li><li><a href="https://aws.amazon.com/cloudwatch/">Amazon CloudWatch</a>: this service has many features that are useful to any app, including logs and a cron-like feature that can kick-off a Lambda function on a consistent, periodic, basis</li><li><a href="https://aws.amazon.com/transcribe/">Amazon Transcribe</a>: at some point of the development process I’d want to get the text of the audio or video and make it searchable. This service will allow me to accomplish the goal</li><li><a href="https://aws.amazon.com/comprehend/">Amazon Comprehend</a>: to make this search engine smarter than what a regular Elasticsearch query response can provide, I will want to extract additional insights from the text</li></ol><h3>A video might do this architecture more justice than text, so I created one :)</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FfLc2th2nfX8%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DfLc2th2nfX8&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FfLc2th2nfX8%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/33db7b690726bcd5d9c857f253e5b4f0/href">https://medium.com/media/33db7b690726bcd5d9c857f253e5b4f0/href</a></iframe><h3>P.S.</h3><p>I needed a domain name and came up with <strong>BrainyNinja.com</strong> — kinda geeky and fun at the same time :) Later on I’ll need to setup a <a href="https://aws.amazon.com/route53/">Route53</a> <a href="https://docs.aws.amazon.com/en_pv/Route53/latest/DeveloperGuide/CreatingHostedZone.html">Hosted Zone</a> to make things simpler with further integrations with <a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html">Amazon ALB</a> and <a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html">CloudFront</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=15843648df5c" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>