<?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: Amanda Guan</title>
    <description>The latest articles on DEV Community by Amanda Guan (@agagag).</description>
    <link>https://dev.to/agagag</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%2F1556671%2F08444dfb-0bb1-43ca-8801-faffa73ec582.jpg</url>
      <title>DEV Community: Amanda Guan</title>
      <link>https://dev.to/agagag</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/agagag"/>
    <language>en</language>
    <item>
      <title>Datadog’s ARM Migration Journey and OpenCost Cost Management Use Case</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Sun, 17 Nov 2024 05:45:51 +0000</pubDate>
      <link>https://dev.to/agagag/datadogs-arm-migration-journey-and-opencost-cost-management-use-case-8c1</link>
      <guid>https://dev.to/agagag/datadogs-arm-migration-journey-and-opencost-cost-management-use-case-8c1</guid>
      <description>&lt;p&gt;I have joined &lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/" rel="noopener noreferrer"&gt;KubeCon + CloudNativeCon North America&lt;/a&gt; from November 11–15, 2024, and had the chance to dive into some interesting sessions. Here’s a quick recap of two talks on &lt;strong&gt;Operations + Performance&lt;/strong&gt; and &lt;strong&gt;Observability&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://kccncna2024.sched.com/event/1i7kU/arm-wrestling-overcoming-cpu-migration-challenges-to-reduce-costs-laurent-bernaille-eric-mountain-datadog?iframe=no&amp;amp;w=100%25&amp;amp;sidebar=yes&amp;amp;bg=no" rel="noopener noreferrer"&gt;&lt;strong&gt;ARM-Wrestling: Overcoming CPU Migration Challenges to Reduce Costs&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speakers:&lt;/strong&gt; Laurent Bernaille (Principal Engineer) &amp;amp; Eric Mountain (Staff Engineer), Datadog&lt;/p&gt;

&lt;p&gt;Datadog shared their experience migrating workloads to ARM-based CPUs, aiming to lower costs and boost performance. With ARM adoption growing (think AWS Graviton), the talk emphasized the practicalities of future-proofing infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Terms for beginner:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;ARM CPUs:&lt;/strong&gt; These are processors designed with energy efficiency in mind, commonly used in mobile devices but increasingly popular in cloud computing (e.g., AWS Graviton) due to their cost and performance advantages over traditional x86 processors.&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Multi-Architecture Images:&lt;/strong&gt; These are Docker images that include versions of the software for different CPU types (e.g., x86 and ARM) so they can run seamlessly on various systems without manual intervention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Preparation:&lt;/strong&gt; They modified their Kubernetes clusters to work with ARM nodes, updating tools like kubelet and containerd.&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Challenges:&lt;/strong&gt; Debugging was a recurring theme—issues like Go runtime bugs and libc incompatibilities needed creative fixes.&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Solutions:&lt;/strong&gt; The team used multi-architecture images and cross-compilation to simplify deployments across ARM and x86.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ARM instances with AWS Graviton2 offer 40% better value than x86—more cost-effective and faster. However, achieving this requires careful planning and adjustments to your systems.&lt;/p&gt;

&lt;p&gt;Here’s a simple workflow of how Datadog transitioned to ARM nodes:&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%2Fnjzbe66zr3ofbfxpdrtg.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%2Fnjzbe66zr3ofbfxpdrtg.png" alt="Image description" width="800" height="988"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personal Takeaway:&lt;/strong&gt; Datadog was upfront about the bumps in the road, which made their journey relatable. The process showed that even large, well-resourced companies need to iterate and adapt.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://kccncna2024.sched.com/event/1i7oQ/measuring-all-the-costs-with-opencost-plugins-alex-meijer-stackwatch?iframe=no&amp;amp;w=100%25&amp;amp;sidebar=yes&amp;amp;bg=no" rel="noopener noreferrer"&gt;&lt;strong&gt;Measuring All the Costs with OpenCost Plugins&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speaker:&lt;/strong&gt; Alex Meijer (Staff Engineer, Stackwatch)&lt;/p&gt;

&lt;p&gt;This session introduced &lt;strong&gt;OpenCost Plugins&lt;/strong&gt;, designed to measure and visualize Kubernetes costs. What stood out was Datadog being the first reference implementation, connecting cost data to their observability platform. It’s an interesting collaboration, but it also raised questions about balancing simplicity with flexibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Terms for beginner:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;FOCUS Specification:&lt;/strong&gt; A standard set of billing fields created by the FinOps Foundation to make cost data consistent across tools. It ensures plugins provide the right information to OpenCost without needing deep technical knowledge of the platform.&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Plugins:&lt;/strong&gt; Add-ons that let users customize how they track costs in OpenCost by connecting it to specific data sources (like Datadog). Plugins allow flexibility without altering OpenCost’s core functionality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Core vs. Extended Interfaces:&lt;/strong&gt; The plugin design simplifies common use cases while allowing advanced customizations for those who need it.&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Community Contributions:&lt;/strong&gt; OpenCost actively encourages user-built plugins, even offering a bounty program to drive adoption.&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;FOCUS Specification:&lt;/strong&gt; This schema standardizes cost data, making it easier for tools like Datadog to integrate and provide consistent results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With cloud costs growing, having tools like OpenCost Plugins can be a game changer. They make cost tracking straightforward while leaving room for deeper analysis. The integration with Datadog adds another layer of value, though it feels more like a first step than a fully matured solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personal Takeaway:&lt;/strong&gt; The talk felt empowering, but also a little ambitious. While the collaboration with Datadog shows potential, it might take time to see widespread adoption or seamless integration.&lt;/p&gt;




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

&lt;p&gt;Both talks touched on how tech teams can optimize their workflows—whether by cutting costs with ARM or simplifying cost tracking with OpenCost Plugins. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Empowering Open-Source: My LFX Mentorship Adventure with Thanos</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Fri, 18 Oct 2024 06:14:43 +0000</pubDate>
      <link>https://dev.to/agagag/empowering-open-source-my-lfx-mentorship-adventure-with-thanos-2mfj</link>
      <guid>https://dev.to/agagag/empowering-open-source-my-lfx-mentorship-adventure-with-thanos-2mfj</guid>
      <description>&lt;p&gt;This summer, I had the incredible opportunity to join the LFX Mentorship program, where I contributed to the open-source project Thanos, a tool designed to improve system monitoring on a large scale. The mentorship connects aspiring contributors with impactful open-source projects, providing hands-on experience alongside experienced engineers. I owe a special thanks to my mentors, &lt;em&gt;Michael&lt;/em&gt; and &lt;em&gt;Saswata&lt;/em&gt;, whose guidance and expertise were instrumental in my learning journey.&lt;/p&gt;

&lt;p&gt;Prometheus and Thanos are powerful tools used to monitor complex computer systems. While Prometheus collects real-time data from applications and systems, Thanos enhances Prometheus by enabling scalability, long-term storage, and cross-instance querying. Think of Prometheus as a “watchdog” keeping track of system performance, while Thanos ensures that data can be efficiently stored and retrieved, even in large, distributed environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thanos and Its Components
&lt;/h3&gt;

&lt;p&gt;Thanos was created to solve key challenges in Prometheus, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Horizontal scaling: Prometheus struggles with handling data across multiple servers.&lt;/li&gt;
&lt;li&gt;Querying across instances: It’s difficult to retrieve data from multiple Prometheus instances.&lt;/li&gt;
&lt;li&gt;Costly long-term storage: Storing data for extended periods in Prometheus can become inefficient and expensive.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To solve these issues, Thanos introduces several key components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query Frontend: Balances and optimizes user requests to make data queries more efficient.&lt;/li&gt;
&lt;li&gt;Query: Gathers and processes data from multiple sources.&lt;/li&gt;
&lt;li&gt;Store Gateway: Retrieves and manages access to long-term stored metrics.&lt;/li&gt;
&lt;li&gt;Compact: Compresses and optimizes data blocks for storage, reducing overall data size.&lt;/li&gt;
&lt;li&gt;Ruler: Evaluates predefined rules and triggers alerts based on specific conditions.&lt;/li&gt;
&lt;li&gt;Receive: Accepts data from Prometheus or external sources and stores it for later use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each component plays a crucial role in making Prometheus more scalable and adaptable to large-scale environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thanos Architecture
&lt;/h3&gt;

&lt;p&gt;The following diagram illustrates how Prometheus interacts with various Thanos components, such as the Query Frontend, Compact, and Ruler, showing the data flow between collection, querying, and storage:&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%2Fmax7ummlgo49on65fs0s.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%2Fmax7ummlgo49on65fs0s.png" alt="This visual aid shows how these components are interconnected and work together to monitor and manage complex systems." width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  My Contributions to Thanos
&lt;/h3&gt;

&lt;p&gt;Throughout the mentorship, I had the opportunity to work on two specific areas that directly improved Thanos’ functionality.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Improving the Visibility of the Compaction Process&lt;br&gt;
A key contribution I made was adding a feature to display Planned Blocks in the Thanos UI. Previously, users could see the Global Blocks and loaded blocks, representing the current state of stored data, but they had no insight into Planned Blocks, which represent upcoming tasks. With this new feature, system administrators can see which blocks are scheduled for compaction, giving them a better understanding of upcoming operations and enabling them to manage system performance more proactively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhancing Rule Evaluation Warnings&lt;br&gt;
Another key contribution was improving rule evaluation warnings. I added ‘file’ and ‘group’ labels to the warning metric, making it easier for developers to identify which rule file and group triggered a warning. This update provides more clarity for debugging and helps improve alert setups, leading to faster and more efficient troubleshooting.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Challenges and Lessons Learned
&lt;/h3&gt;

&lt;p&gt;This experience wasn’t without its challenges, and overcoming them was an essential part of my personal and professional growth:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning Golang: Golang’s structure differs significantly from object-oriented languages, so I had to adjust to its unique error-handling approach and concurrency models.&lt;/li&gt;
&lt;li&gt;Understanding Thanos’ Architecture: With its interconnected components like Query, Ruler, and Receive, learning how each piece fits into the larger system was a complex process that required thorough research and hands-on experience.&lt;/li&gt;
&lt;li&gt;UI Embedded in Binary: Thanos UI files are embedded into the binary, meaning that making updates to the UI required working with specific tools to regenerate the static files and test them within the system.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Contributing to Thanos through the LFX Mentorship has been an incredible experience. I learned the intricacies of large-scale system monitoring, developed my Golang skills, and played a part in improving a tool that’s used by teams all over the world.&lt;/p&gt;

&lt;p&gt;If you’re considering contributing to open-source, I highly recommend taking the leap—there’s so much to learn, and it’s a fantastic way to make a tangible impact in the tech community.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Uber: How Live Activity on iOS Transforms User Experience</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Sun, 29 Sep 2024 22:30:37 +0000</pubDate>
      <link>https://dev.to/agagag/uber-how-live-activity-on-ios-transforms-user-experience-1l7f</link>
      <guid>https://dev.to/agagag/uber-how-live-activity-on-ios-transforms-user-experience-1l7f</guid>
      <description>&lt;p&gt;Today, I read an article titled &lt;a href="https://www.uber.com/blog/pickup-in-3-minutes-ubers-implementation-of-live-activity-on-ios/" rel="noopener noreferrer"&gt;"Pickup in 3 minutes: Uber’s implementation of Live Activity on iOS"&lt;/a&gt;, which dives into Uber’s integration of &lt;strong&gt;Live Activity&lt;/strong&gt; on iOS devices. This feature significantly enhances the user experience by keeping riders informed about their trip status directly on their lock screen. Here’s a breakdown of the key takeaways:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Introduction to Live Activity: Enhancing User Experience&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Uber’s new Live Activity feature for iOS users provides real-time updates on the status of their ride directly on the lock screen. Users no longer have to repeatedly open the app to check updates on their driver's location, estimated pickup time, or trip details. This creates a more &lt;strong&gt;seamless and user-friendly experience&lt;/strong&gt;. It also makes the entire Uber trip process more transparent and efficient, all with the convenience of quick-glance updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. The Planning Process: Building for iOS&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Implementing Live Activity required the Uber engineering team to rethink how they approached &lt;strong&gt;live trip updates&lt;/strong&gt; and notifications. The process began by outlining how the feature would improve user interaction, focusing on offering information that is immediately actionable, like the estimated time of arrival (ETA) or ride status.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Diagram: Feature Planning Process&lt;/strong&gt;
&lt;/h4&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%2Fbe0b7xu353fw7mp200g4.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%2Fbe0b7xu353fw7mp200g4.png" alt="Image description" width="745" height="692"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This diagram illustrates Uber’s planning process, starting with understanding user needs for real-time information, followed by design, testing, and eventual implementation on iOS devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Technical Challenges and Data Collection&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One of the most interesting parts of the article was Uber’s description of the &lt;strong&gt;technical challenges&lt;/strong&gt; in implementing this feature. Since the iOS Live Activity feature updates continuously on the lock screen, the Uber team had to optimize &lt;strong&gt;data efficiency&lt;/strong&gt; while ensuring that updates remain fast and accurate. Collecting the right data, without overloading the system or draining battery life, was critical.&lt;/p&gt;

&lt;p&gt;Additionally, Uber had to account for edge cases, such as when the phone loses network connectivity. Building these failsafe mechanisms ensured that users would get reliable updates even when facing connectivity issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Feature Flags: Managing Incremental Rollouts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Uber used &lt;strong&gt;feature flags&lt;/strong&gt; to manage the rollout of Live Activity, allowing them to test the feature with a small subset of users before launching it more widely. This controlled approach ensured they could monitor the feature’s performance and user feedback before making it available to all users.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Diagram: Feature Rollout with Feature Flags&lt;/strong&gt;
&lt;/h4&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%2Fzt8ay50bgrzwhi9zuzxv.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%2Fzt8ay50bgrzwhi9zuzxv.png" alt="Image description" width="521" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This phased approach allowed Uber to catch any performance issues or unexpected bugs early, making for a smoother final rollout.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Integration of DSL, Analytics, and QA&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Uber team also relied on &lt;strong&gt;DSL (Domain-Specific Language)&lt;/strong&gt; to ensure that different teams, such as analytics and QA, could collaborate efficiently during the rollout of Live Activity. By using DSL to manage data collection and reporting, the team was able to track the feature’s impact in real time, ensuring it met performance benchmarks and improved the user experience.&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%2Fs06a4774t1i77wyt3d25.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%2Fs06a4774t1i77wyt3d25.png" alt="Image description" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This diagram highlights how Uber’s use of DSL streamlined their collaboration between analytics and QA teams, improving the testing process and ensuring the feature met performance expectations.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion: A Successful Rollout of Live Activity&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Uber’s integration of Live Activity on iOS shows how thoughtful design and technical precision can significantly enhance user experiences. By providing real-time updates directly on users' lock screens, Uber ensures that riders have access to critical trip information at a glance, without needing to constantly interact with the app.&lt;/p&gt;

&lt;p&gt;This feature is not only about convenience; it represents Uber’s ongoing commitment to using cutting-edge technology to improve user experience, while balancing performance, battery life, and system efficiency.&lt;/p&gt;

&lt;p&gt;By employing feature flags for controlled rollouts, using DSL to streamline collaboration, and solving the technical challenges of live updates, Uber has once again demonstrated its ability to innovate and meet user needs.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Unleashing the Power of Google's Vertex AI Prompt Optimizer</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Sat, 28 Sep 2024 04:51:29 +0000</pubDate>
      <link>https://dev.to/agagag/unleashing-the-power-of-googles-vertex-ai-prompt-optimizer-3860</link>
      <guid>https://dev.to/agagag/unleashing-the-power-of-googles-vertex-ai-prompt-optimizer-3860</guid>
      <description>&lt;p&gt;Today, I read an article titled "Enhance your prompts with Vertex AI Prompt Optimizer", which introduces a fascinating tool designed to optimize prompts used in large language models (LLMs). Here’s a summary of what I learned:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is Vertex AI Prompt Optimizer?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Vertex AI Prompt Optimizer is a tool from Google Cloud aimed at improving prompt efficiency when working with LLMs. It helps users fine-tune and generate high-quality prompts, which is crucial for getting accurate, consistent, and reliable responses from AI models. The tool moves beyond manual prompt crafting and offers a way to test and optimize multiple variations of prompts in a data-driven manner.&lt;/p&gt;

&lt;p&gt;This optimizer is designed to help bridge the gap between research and production, allowing businesses and developers to seamlessly integrate prompt optimizations into their workflows.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How It Works: A Step-by-Step Guide&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To use the Vertex AI Prompt Optimizer, you start by defining quality metrics for your prompts. These metrics might include the accuracy of the response or specific characteristics you need from the output, like tone or verbosity. The optimizer generates a range of prompts based on these goals, and you can evaluate which prompt delivers the best results according to your chosen metrics.&lt;/p&gt;

&lt;p&gt;Key Features of the Vertex AI Prompt Optimizer:&lt;/p&gt;

&lt;p&gt;Automated Prompt Generation: The tool creates variations of your initial prompt, helping you experiment with different structures and phrasings without manual intervention.&lt;/p&gt;

&lt;p&gt;Data-Driven Evaluation: You can track the performance of each prompt variation against pre-defined metrics, making the process highly objective and results-focused.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Simplifying LLM Interaction with APIs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The API makes it easier to integrate prompt optimization into real-world applications. Using the Vertex AI SDK or REST API, you can fine-tune prompts in just a few lines of code. Here’s a simple example of optimizing a prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.cloud&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;aiplatform&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize Vertex AI
&lt;/span&gt;&lt;span class="n"&gt;aiplatform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Define your prompt
&lt;/span&gt;&lt;span class="n"&gt;initial_prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Explain the significance of cloud computing.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Create and optimize your prompt
&lt;/span&gt;&lt;span class="n"&gt;prompt_optimizer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aiplatform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PromptOptimizer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;optimized_prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prompt_optimizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;optimize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;initial_prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;target_metric&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;accuracy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get the optimized prompt
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;optimized_prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the optimizer takes an initial prompt and adjusts it based on the "accuracy" metric, offering a more refined prompt that may yield better results in the final output.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real-Time Metrics and Feedback&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the standout features is the real-time feedback provided by Vertex AI Prompt Optimizer. The platform analyzes multiple prompt variations and visualizes performance in terms of precision, relevancy, and other key metrics. You can immediately see how changes to the prompt affect the quality of the responses.&lt;/p&gt;

&lt;p&gt;Diagram: Optimization Process Flow&lt;/p&gt;

&lt;p&gt;This diagram illustrates how the optimizer continuously refines prompts based on the feedback loop of defining, generating, and evaluating variations.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Moving Toward Production-Ready Solutions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The article highlighted how the Vertex AI Prompt Optimizer makes it easier to scale prompt optimization for production. Instead of manually tweaking prompts, businesses can now leverage this tool to automate the fine-tuning process, enabling quicker deployments of LLM-based systems with optimized prompts.&lt;/p&gt;

&lt;p&gt;For example, if you’re developing a chatbot for customer service, the Prompt Optimizer can help refine the questions and answers generated by the AI, ensuring users receive accurate and contextually relevant responses every time.&lt;/p&gt;

&lt;p&gt;Conclusion: Practical and Scalable Prompt Optimization&lt;/p&gt;

&lt;p&gt;In summary, Google's Vertex AI Prompt Optimizer offers a robust and scalable way to enhance the quality of AI-generated responses. By automating the prompt generation process and integrating data-driven feedback, it takes much of the guesswork out of working with LLMs. Whether you're an AI researcher or a business deploying AI solutions, this tool is a game-changer for improving the efficiency and reliability of your prompts.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Threads Joins the Fediverse: Meta's Leap into Decentralized Social Networking</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Thu, 26 Sep 2024 02:44:18 +0000</pubDate>
      <link>https://dev.to/agagag/threads-joins-the-fediverse-metas-leap-into-decentralized-social-networking-4j3b</link>
      <guid>https://dev.to/agagag/threads-joins-the-fediverse-metas-leap-into-decentralized-social-networking-4j3b</guid>
      <description>&lt;p&gt;Today I read an article titled &lt;a href="https://engineering.fb.com/2024/03/21/networking-traffic/threads-has-entered-the-fediverse/" rel="noopener noreferrer"&gt;"Threads has entered the fediverse"&lt;/a&gt; by Christopher Su and Simon Blackstein, which explains how Threads, Meta’s social networking app, is integrating with the decentralized fediverse. Here’s a quick breakdown of what I learned:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. What is the fediverse?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The fediverse is a network of interconnected servers used for social networking, similar to how different email providers communicate through shared protocols. By leveraging the &lt;strong&gt;ActivityPub protocol&lt;/strong&gt;, Threads allows users to connect with people on other platforms like Mastodon and WordPress, breaking down the silos that typically confine social media to a single platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Technical Challenges:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A significant challenge Threads faced was implementing &lt;strong&gt;quote posts&lt;/strong&gt;, which don’t have a formal specification in ActivityPub. The team used two unofficial methods—&lt;strong&gt;FEP-e232&lt;/strong&gt; and &lt;strong&gt;_misskey_quote&lt;/strong&gt;—to ensure that quote posts can be shared across different fediverse servers, which is a complex but innovative workaround.&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%2F3wyailuugwoc4hqnyzwu.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%2F3wyailuugwoc4hqnyzwu.png" alt="Image description" width="787" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Phased Approach:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Threads is taking a &lt;strong&gt;phased approach&lt;/strong&gt; to its integration. Right now, users can share posts with other servers, but in the future, Threads plans to allow more seamless interaction, including bidirectional content flow where users will be able to reply and engage with posts from other platforms directly within Threads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Future Vision:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Eventually, Threads aims to consolidate follower counts and interactions from both its platform and other fediverse servers, creating a truly interoperable social media experience. The team continues to refine features and adapt to the decentralized fediverse community’s standards.&lt;/p&gt;

&lt;p&gt;In summary, building a decentralized social network like Threads is a complex challenge, but Meta’s adoption of open protocols like ActivityPub shows the potential for a more open and connected digital future.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Recap: Unraveling Duolingo's Unique Engineering Challenges</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Thu, 22 Aug 2024 20:11:27 +0000</pubDate>
      <link>https://dev.to/agagag/recap-unraveling-duolingos-unique-engineering-challenges-47n9</link>
      <guid>https://dev.to/agagag/recap-unraveling-duolingos-unique-engineering-challenges-47n9</guid>
      <description>&lt;p&gt;As I delved into the May 15, 2024 article, "3 Interesting Engineering Problems You Could Only Solve at Duolingo" by the Duolingo Team, I found myself captivated by the unique technical challenges that Duolingo’s engineering team faces. With over 500 million users worldwide, Duolingo is not just an app—it’s a platform committed to making world-class education universally accessible. Achieving this ambitious goal demands constant innovation and problem-solving at a scale few companies encounter. In this retrospective, I’ll explore three key engineering challenges that Duolingo has tackled, each one showcasing the intricate balance between technical ingenuity and the mission to educate.&lt;/p&gt;

&lt;p&gt;Ensuring a High-Quality Experience for All Learners&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%2Fu74x548mwzmvv2ki4au9.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%2Fu74x548mwzmvv2ki4au9.png" alt="Image description" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the most pressing challenges Duolingo faces is ensuring that all learners, regardless of their device or internet quality, have a seamless and high-quality experience. This is particularly crucial in emerging markets, where users often rely on less performant devices and deal with unreliable internet connections. The team identified that the app's startup time, especially on Android, was a significant pain point.&lt;/p&gt;

&lt;p&gt;To address this, Duolingo engineers utilized system traces—detailed records of the app's execution process—to pinpoint key performance bottlenecks. By breaking down the startup process into critical steps and identifying areas where delays occurred, they implemented optimizations like delaying non-essential processes until after the home screen loaded. This approach led to a 40% reduction in startup time, making the app much more accessible for users on older devices.&lt;/p&gt;

&lt;p&gt;Scaling Personalization for Learners&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%2Feis1r7rluaxk9qlp4391.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%2Feis1r7rluaxk9qlp4391.png" alt="Image description" width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Personalizing practice sessions for millions of learners is no small feat. Duolingo’s Birdbrain system, which tailors practice sessions based on each learner’s proficiency, is central to this effort. However, the process of personalizing learning requires extensive A/B testing of new machine learning models, which initially doubled storage costs and API latency.&lt;/p&gt;

&lt;p&gt;To overcome this, Duolingo engineers optimized their system by writing data less frequently to the database, specifically DynamoDB. By buffering changes in-memory and enforcing a Least Recently Used (LRU) policy, they significantly reduced the number of database writes, thereby lowering storage costs. This optimization allowed Duolingo to run simultaneous A/B tests for multiple models efficiently, reducing the cost of testing by 50% and enabling the introduction of new features like personalized vocabulary practice.&lt;/p&gt;

&lt;p&gt;Making English Certification Testing More Accessible&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%2Fuksqqytvulorc5x5c72u.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%2Fuksqqytvulorc5x5c72u.png" alt="Image description" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Duolingo’s mission to make education accessible extends to English certification through the Duolingo English Test (DET), a more affordable and accessible alternative to traditional tests like TOEFL. However, ensuring that the DET is both accurate and free from bias posed a significant challenge, especially given the potential for human error in online proctoring.&lt;/p&gt;

&lt;p&gt;To address this, Duolingo developed a system of AI-assisted human proctoring. This system uses computer vision models to detect prohibited items, monitor eye gaze, and ensure the visibility of test-takers’ faces during the exam. These models alert human proctors to potential issues, allowing for a more efficient and consistent evaluation process. The AI system not only helps mitigate bias but also reduces the overall cost of administering the test, making it five times less expensive than its competitors.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;Duolingo’s approach to solving these unique engineering problems highlights the intricate interplay between technical innovation and the company’s mission to democratize education. By improving app performance, scaling personalized learning, and ensuring fair and accessible English certification, Duolingo continues to push the boundaries of what is possible in educational technology. As the platform evolves, so too will the challenges it faces, offering new opportunities for engineers to innovate and contribute to a truly global impact.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Recap of Microsoft's "Let's Move Away from API Keys!" by Chris Noring</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Tue, 13 Aug 2024 21:32:16 +0000</pubDate>
      <link>https://dev.to/agagag/recap-of-microsofts-lets-move-away-from-api-keys-by-chris-noring-4e5o</link>
      <guid>https://dev.to/agagag/recap-of-microsofts-lets-move-away-from-api-keys-by-chris-noring-4e5o</guid>
      <description>&lt;p&gt;In his insightful blog post, Chris Noring delves into the critical security risks posed by API keys, especially in enterprise settings. He sheds light on why these seemingly convenient tools can become major vulnerabilities if not managed properly. The article is structured to guide readers through the problems with API keys and the strategies to mitigate these risks, making it a valuable resource for anyone concerned about API security.&lt;/p&gt;

&lt;h4&gt;
  
  
  Problems with API Keys
&lt;/h4&gt;

&lt;p&gt;API keys, while user-friendly and effective for quick implementation, come with significant security drawbacks. Noring highlights several key issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Exposure&lt;/strong&gt;
API keys can be unintentionally exposed in public repositories, leading to unauthorized access.&lt;/li&gt;
&lt;/ol&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%2Fc1f6dk07n5ohdxdaryo3.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%2Fc1f6dk07n5ohdxdaryo3.png" alt="Image description" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Static Nature&lt;/strong&gt;
API keys often remain unchanged unless manually rotated, making them easy targets if they are compromised.&lt;/li&gt;
&lt;/ol&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%2Fksoa6l4gps8y150ajfif.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%2Fksoa6l4gps8y150ajfif.png" alt="Image description" width="565" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lack of Granular Control&lt;/strong&gt;
These keys typically provide broad access, lacking the fine-grained permissions that more secure methods like OAuth offer.&lt;/li&gt;
&lt;/ol&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%2Fmttdmc381mxcbptuvu12.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%2Fmttdmc381mxcbptuvu12.png" alt="Image description" width="800" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Insecure Storage&lt;/strong&gt;
Keys stored in source code or unencrypted files are vulnerable to extraction by malicious actors.&lt;/li&gt;
&lt;/ol&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%2F5gxwjvpeymnv09cwy339.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%2F5gxwjvpeymnv09cwy339.png" alt="Image description" width="800" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Secret Sprawl&lt;/strong&gt;
API keys can proliferate across various apps and services, making them difficult to manage and secure effectively.&lt;/li&gt;
&lt;/ol&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%2Fxziy7qg5znryiyxrrhdd.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%2Fxziy7qg5znryiyxrrhdd.png" alt="Image description" width="800" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Mitigating the Risks
&lt;/h4&gt;

&lt;p&gt;To mitigate these risks, Noring suggests moving away from API keys in favor of more secure alternatives. Here are some recommended strategies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use OAuth&lt;/strong&gt;
OAuth is an open standard for access delegation, using tokens instead of passwords. These tokens are issued by an authorization server and specify limited access permissions, reducing the risk of overexposure.&lt;/li&gt;
&lt;/ol&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%2F3zad1fx1d45mijid0xlo.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%2F3zad1fx1d45mijid0xlo.png" alt="Image description" width="800" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Secure Storage&lt;/strong&gt;
Storing secrets in a secure environment, such as Azure Key Vault, ensures they are protected from unauthorized access.&lt;/li&gt;
&lt;/ol&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%2Fdpluah2dafb8dvvaxrf7.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%2Fdpluah2dafb8dvvaxrf7.png" alt="Image description" width="800" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Regular Key Rotation&lt;/strong&gt;
Regularly rotating API keys and managing dependent services can significantly reduce the risk of exposure.&lt;/li&gt;
&lt;/ol&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%2Fs4cnui7o85az7a5s8dwz.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%2Fs4cnui7o85az7a5s8dwz.png" alt="Image description" width="800" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Follow Cloud Vendor Recommendations&lt;/strong&gt;
Applying a cloud vendor's best practices for securing secrets and resources is crucial for maintaining robust security.&lt;/li&gt;
&lt;/ol&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%2Fpax63mm2giw3hqyjcme1.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%2Fpax63mm2giw3hqyjcme1.png" alt="Image description" width="800" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Real-World Examples and Additional Insights
&lt;/h4&gt;

&lt;p&gt;For instance, a well-known incident involved a major company accidentally exposing their API keys in a public GitHub repository, leading to unauthorized access and significant data breaches. This example underscores the real-world impact of the security risks Noring describes.&lt;/p&gt;

&lt;p&gt;To help readers better understand technical terms, brief explanations can be added:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OAuth&lt;/strong&gt;: A protocol that allows third-party applications to access user data without exposing passwords.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure Key Vault&lt;/strong&gt;: A cloud service for securely storing and managing secrets, such as API keys and passwords.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access Delegation&lt;/strong&gt;: Granting limited access to a resource on behalf of the resource owner.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;In conclusion, while API keys offer convenience, their security risks cannot be overlooked. By adopting more secure methods like OAuth, ensuring secure storage, and following best practices, organizations can significantly enhance their API security. For a deeper dive into this topic, be sure to read Chris Noring's full article on the &lt;a href="https://techcommunity.microsoft.com/t5/apps-on-azure-blog/let-s-move-away-from-api-keys/ba-p/4217697" rel="noopener noreferrer"&gt;Microsoft Tech Community blog&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Strengthening Security in AI Chatbots with Amazon Bedrock: A Review to MindMentor</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Tue, 13 Aug 2024 16:50:07 +0000</pubDate>
      <link>https://dev.to/agagag/strengthening-security-in-ai-chatbots-with-amazon-bedrock-a-review-and-application-to-mindmentor-5h1j</link>
      <guid>https://dev.to/agagag/strengthening-security-in-ai-chatbots-with-amazon-bedrock-a-review-and-application-to-mindmentor-5h1j</guid>
      <description>&lt;p&gt;In their comprehensive guide, "Hardening the RAG Chatbot Architecture Powered by Amazon Bedrock: Blueprint for Secure Design and Anti-pattern Mitigation," authors Magesh Dhanasekaran and Amy Tipple delve into the intricacies of enhancing the security of generative AI applications. This analysis is not only a beacon for developers in the tech community but also a vital tool for those involved in specialized projects such as MindMentor, my own initiative in AI-driven mental health consultations.&lt;/p&gt;

&lt;h4&gt;
  
  
  Detailed Overview of the Blueprint
&lt;/h4&gt;

&lt;p&gt;The guide presents a meticulous security framework centered on the Retrieval Augmented Generation (RAG) chatbot model, integrating Amazon Bedrock with various AWS services to ensure robust application deployment. The architecture blueprint addresses several crucial components and practices:&lt;/p&gt;

&lt;h5&gt;
  
  
  User Interaction and API Management
&lt;/h5&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%2F61fzbp8yhmw30p9ak4gs.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%2F61fzbp8yhmw30p9ak4gs.png" alt="Image description" width="491" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Core Processing with AWS Lambda and Amazon Bedrock
&lt;/h5&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%2Fqxj5xjmwwko0xm31p6c7.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%2Fqxj5xjmwwko0xm31p6c7.png" alt="Image description" width="439" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Data Storage and Retrieval
&lt;/h5&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%2Fi1z7ac8qtjuctzbxe1kf.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%2Fi1z7ac8qtjuctzbxe1kf.png" alt="Image description" width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Security and Monitoring Services
&lt;/h5&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%2Fa7eelxxzbt7igjyrgnnw.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%2Fa7eelxxzbt7igjyrgnnw.png" alt="Image description" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API Gateway and AWS Lambda:&lt;/strong&gt; These serve as the backbone for secure data processing and API management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Bedrock and Claude 3 Sonnet LLM:&lt;/strong&gt; At the core, these technologies handle complex query responses and data interactions, crucial for delivering precise and context-aware answers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supporting AWS Services:&lt;/strong&gt; Including DynamoDB for data storage, S3 for data archiving, and OpenSearch for efficient data retrieval, all fortified with stringent security measures like AWS KMS for encryption and IAM for access control.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Emphasized Security Strategies:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Proactive Monitoring:&lt;/strong&gt; Utilizing AWS CloudTrail and CloudWatch to actively monitor and log operations, ensuring real-time security oversight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Data Protection:&lt;/strong&gt; Implementing robust encryption and meticulous access control strategies to safeguard sensitive data throughout its lifecycle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anti-pattern Mitigation:&lt;/strong&gt; From insufficient input validation to insecure data storage, the blueprint outlines strategies to counteract prevalent security flaws effectively.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Reflections on MindMentor Application
&lt;/h4&gt;

&lt;p&gt;Applying the principles from the Amazon Bedrock security blueprint to my project, MindMentor—an AI-powered voicebot designed for mental health consultations—reveals several key insights and benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Data Privacy and Security:&lt;/strong&gt; Adhering to the blueprint’s comprehensive security measures ensures that sensitive client data remains protected, fostering trust and compliance in the handling of mental health information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Robust Operational Integrity:&lt;/strong&gt; By integrating logging and monitoring protocols akin to those suggested, MindMentor can achieve a high level of operational transparency and accountability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailored Anti-pattern Approaches:&lt;/strong&gt; The specific mitigation strategies applicable to MindMentor help prevent potential vulnerabilities unique to mental health data, enhancing overall system robustness.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Final Thoughts
&lt;/h4&gt;

&lt;p&gt;The guide by Dhanasekaran and Tipple not only illuminates paths to secure AI deployments but also acts as a crucial checkpoint for projects like MindMentor, where security and privacy are paramount. The continuous refinement of security measures to adapt to new threats and compliance requirements remains a core theme throughout the blueprint.&lt;/p&gt;

&lt;p&gt;For a deeper understanding of the architectural and security details, the original post on AWS’s blog is highly recommended. You can explore it &lt;a href="https://aws.amazon.com/blogs/security/hardening-the-rag-chatbot-architecture-powered-by-amazon-bedrock-blueprint-for-secure-design-and-anti-pattern-migration/" rel="noopener noreferrer"&gt;here&lt;/a&gt; for comprehensive strategies and technical guidelines to effectively secure your generative AI applications.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Recap Asana’s LLM Testing Playbook: A Comprehensive Analysis of Claude 3.5 Sonnet</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Sat, 10 Aug 2024 22:26:59 +0000</pubDate>
      <link>https://dev.to/agagag/recap-asanas-llm-testing-playbook-a-comprehensive-analysis-of-claude-35-sonnet-46ll</link>
      <guid>https://dev.to/agagag/recap-asanas-llm-testing-playbook-a-comprehensive-analysis-of-claude-35-sonnet-46ll</guid>
      <description>&lt;h4&gt;
  
  
  TLDR
&lt;/h4&gt;

&lt;p&gt;Asana’s LLM Testing Playbook outlines their comprehensive QA process for evaluating large language models like Claude 3.5 Sonnet. The process includes unit testing, integration testing, end-to-end testing, and additional assessments for new models to ensure reliable and high-performance AI-powered features. This rigorous approach helps Asana maintain data integrity, response accuracy, and overall model quality, ensuring their AI tools exceed user expectations.&lt;/p&gt;

&lt;h4&gt;
  
  
  Unit Testing
&lt;/h4&gt;

&lt;p&gt;Unit testing is the cornerstone of Asana’s LLM QA process. As part of their methodology, Asana’s LLM Foundations team developed an in-house unit testing framework that allows engineers to evaluate LLM responses similarly to traditional software unit tests. This approach is crucial because LLMs often produce slightly different outputs even when given the same input data. By using LLMs to validate their own assertions, Asana ensures that key details, such as task deadlines, are accurately captured by the model.&lt;/p&gt;

&lt;p&gt;Asana’s unique “needle-in-a-haystack” test is a prime example of their rigorous testing methodology. In this test, the model is required to find relevant data within a vast project, ensuring that it can synthesize accurate answers from large datasets. The diagram below illustrates the elements of Asana's unit testing framework:&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%2Fw0qidq3awwnlkuckmf12.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%2Fw0qidq3awwnlkuckmf12.png" alt="Image description" width="800" height="99"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For instance, one test might involve querying the model to identify a project’s launch date buried within extensive documentation. The model’s ability to consistently find and report this detail accurately demonstrates its effectiveness in real-world applications.&lt;/p&gt;

&lt;h4&gt;
  
  
  Integration Testing
&lt;/h4&gt;

&lt;p&gt;Integration testing at Asana involves assessing how well the LLM can manage complex workflows that require chaining multiple prompts together. This is particularly important for AI-powered features that rely on the LLM’s ability to retrieve data and generate accurate user-facing responses based on that data.&lt;/p&gt;

&lt;p&gt;For example, Asana’s LLM might be tested on its ability to retrieve specific project updates and then summarize those updates in a clear, user-friendly format. The integration tests ensure that these chains of prompts work together cohesively before new features are released. The diagram below represents the integration testing framework:&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%2Fu2stlcbzvq5rk35e6m9u.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%2Fu2stlcbzvq5rk35e6m9u.png" alt="Image description" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This method ensures that features like Asana’s AI-powered task management systems can reliably assist users in their daily workflows, providing them with the accurate information they need.&lt;/p&gt;

&lt;h4&gt;
  
  
  End-to-End Testing
&lt;/h4&gt;

&lt;p&gt;End-to-end (e2e) testing at Asana is designed to simulate the actual experience of their customers. By using realistic data in sandboxed test instances of Asana, the team can evaluate the LLM’s performance in scenarios that closely mirror real-world usage.&lt;/p&gt;

&lt;p&gt;While this type of testing is more time-consuming and requires manual evaluation by product managers, it provides invaluable insights into the model's overall quality, including aspects of intelligence that are difficult to quantify through automated tests. For instance, end-to-end testing might involve a comprehensive scenario where the LLM needs to handle a multi-step project planning task from start to finish, including generating updates and identifying potential risks. The end-to-end testing framework is depicted below:&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%2F4yxlycjqkkd7ieq2cuhu.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%2F4yxlycjqkkd7ieq2cuhu.png" alt="Image description" width="800" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Through these rigorous tests, Asana ensures that their AI-powered tools can handle complex, real-world tasks with a high degree of reliability and intelligence.&lt;/p&gt;

&lt;h4&gt;
  
  
  Additional Tests for New Models
&lt;/h4&gt;

&lt;p&gt;When testing pre-production models like Claude 3.5 Sonnet, Asana employs additional assessments to measure performance metrics such as time-to-first-token (TTFT) and tokens-per-second (TPS). These tests are crucial for ensuring that the LLM can respond quickly and efficiently, providing a smooth user experience.&lt;/p&gt;

&lt;p&gt;Moreover, Asana’s evaluation of Claude 3.5 Sonnet included a tool-use benchmark, which tested the model’s agentic capabilities. This involved both quantitative benchmarks and qualitative testing using Asana’s internal multi-agent prototyping platform. For example, one test might involve the LLM autonomously managing a series of tasks, making decisions, and adjusting workflows based on the data it receives. The additional testing framework for new models is shown below:&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%2F5lv8j35dq5wruj54dhir.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%2F5lv8j35dq5wruj54dhir.png" alt="Image description" width="800" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These additional tests provide deeper insights into the LLM’s capabilities, ensuring that it can be effectively integrated into Asana’s suite of AI tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Asana’s rigorous testing framework for evaluating frontier LLMs like Claude 3.5 Sonnet underscores their commitment to delivering reliable, high-performance AI-powered features. By implementing a comprehensive QA process that includes unit testing, integration testing, end-to-end testing, and additional assessments for new models, Asana ensures that their AI teammate remains a valuable and trusted tool for their users.&lt;/p&gt;

&lt;p&gt;As the frontier of large language models continues to evolve, Asana’s investment in robust QA processes allows them to stay ahead of the curve, ensuring that their AI-powered features not only meet but exceed user expectations.&lt;/p&gt;

&lt;p&gt;For more detailed insights, you can read the full article by Bradley Portnoy on Asana’s official website: &lt;a href="https://asana.com/inside-asana/llm-testing-claude-sonnet-analysis" rel="noopener noreferrer"&gt;Asana's LLM testing playbook: our analysis of Claude 3.5 Sonnet&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Harnessing AI for Real-Time Speech Recognition: Lessons from Salesforce and MindMentor</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Wed, 07 Aug 2024 06:43:06 +0000</pubDate>
      <link>https://dev.to/agagag/harnessing-ai-for-real-time-speech-recognition-lessons-from-salesforce-and-mindmentor-2kll</link>
      <guid>https://dev.to/agagag/harnessing-ai-for-real-time-speech-recognition-lessons-from-salesforce-and-mindmentor-2kll</guid>
      <description>&lt;h3&gt;
  
  
  TLDR
&lt;/h3&gt;

&lt;p&gt;Salesforce’s new Speech-to-Text (STT) service uses OpenAI’s Whisper models for real-time, accurate transcriptions, focusing on low latency and high accuracy. This service aims to enhance conversational AI applications, similar to the MindMentor voicebot for mental health consultations. Both projects emphasize system stability, rigorous testing, and continuous improvement based on user feedback. The integration of AI-driven analytics and ongoing development highlights the potential of AI in transforming interactions and providing meaningful applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;As artificial intelligence continues to evolve rapidly, integrating speech recognition technology into various applications has become a key focus for many companies, including Salesforce. A recent article by Dima Statz highlights how Salesforce’s new Speech-to-Text (STT) service leverages OpenAI’s Whisper models to provide real-time, accurate transcriptions. Reflecting on this development, I find strong parallels with my own project, MindMentor, an AI-powered voicebot designed for mental health consultations.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mission and Challenges of Salesforce’s STT Service
&lt;/h3&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%2Fd8hpmgn0un7y6qt122aq.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%2Fd8hpmgn0un7y6qt122aq.png" alt="Image description" width="800" height="694"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Salesforce’s STT service is part of a broader mission to empower developers with advanced speech AI services, facilitating efficient and rapid conversational AI application development. The team’s primary focus is on enhancing the accuracy and functionality of STT to ensure it can seamlessly convert spoken language into text. This precision is crucial for analyzing customer interactions. Similarly, in MindMentor, accuracy is paramount for providing reliable mental health support.&lt;/p&gt;

&lt;p&gt;One of the most significant technical challenges faced by Salesforce’s team was developing a real-time transcription service that balances low latency with high accuracy. In real-time applications, delays of over one second can render captions ineffective, yet accuracy cannot be compromised even when delivering results within 500 milliseconds. To address this, the team adapted OpenAI’s Whisper models, originally designed for batch processing, to function in real-time environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Role of OpenAI Whisper Models
&lt;/h3&gt;

&lt;p&gt;OpenAI’s Whisper models, known for their 95% accuracy rate with the LibriSpeech ASR Corpus, were initially intended for processing full audio or video files. The challenge was to adapt these models for real-time applications, which required the team to create a streaming solution using the WebSockets protocol. This approach allows audio to be processed in ‘chunks’ as it arrives, maintaining sub-second latency while enhancing accuracy through a technique known as the tumbling window.&lt;/p&gt;

&lt;p&gt;This process resonates with the work I did on MindMentor, where I utilized OpenAI’s Whisper API for voice recognition. Both Salesforce’s STT service and MindMentor focus on processing spoken language in real-time to deliver immediate, accurate results. While Salesforce’s use case involves business applications, MindMentor aims to provide timely mental health consultations, emphasizing the versatility of Whisper’s capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ensuring Stability and Code Quality
&lt;/h3&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%2Fi08do6wsb5yinjwwndj1.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%2Fi08do6wsb5yinjwwndj1.png" alt="Image description" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Salesforce’s STT team places a high priority on maintaining system stability, especially when implementing new features. Rigorous testing protocols, including a minimum of 95% code coverage with unit tests and a gated check-in mechanism, ensure that the main branch of their codebase remains stable and healthy. Additionally, the team employs static analysis and automatic code formatting to maintain high code quality and security.&lt;/p&gt;

&lt;p&gt;In my experience with MindMentor, maintaining code quality and stability was also crucial. Ensuring that the voicebot delivered accurate responses without compromising on performance required careful testing and adherence to best practices in code management.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integration Testing and Performance Benchmarking
&lt;/h3&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%2F0a1136cn5cqb66jhosw3.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%2F0a1136cn5cqb66jhosw3.png" alt="Image description" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Integration testing and performance benchmarking are integral to the continuous integration and delivery (CI/CD) process at Salesforce. The team uses the Salesforce Falcon Integration Tests (FIT) framework to ensure seamless interaction between components and reliable end-to-end functionality. Performance and accuracy are benchmarked using metrics like Word Error Rate (WER) and latency, with daily benchmarks run in higher environments using datasets like LibriSpeech ASR Corpus.&lt;/p&gt;

&lt;p&gt;Similarly, in developing MindMentor, it was essential to ensure that the integration of various components, such as the frontend interface, backend processing, and voice recognition APIs, worked harmoniously. While the performance metrics were not as formalized as in Salesforce’s setup, they were monitored to ensure that the voicebot responded promptly and accurately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ongoing Research and Development
&lt;/h3&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%2Fq1fcklppz67q0f5gtx3w.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%2Fq1fcklppz67q0f5gtx3w.png" alt="Image description" width="800" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Salesforce is continuously advancing its STT capabilities, aiming to integrate AI-driven analytics beyond traditional transcription services. The service is evolving to extract data for advanced analytics in Data Cloud environments, enhancing the AI system’s ability to process unstructured data from platforms like Zoom and Google Meet. For instance, Salesforce’s STT service can be used in customer service to transcribe calls in real-time, while MindMentor can provide immediate mental health support through voice interactions.&lt;/p&gt;

&lt;p&gt;This focus on ongoing improvement is something I deeply relate to. MindMentor, while functional, is a project that I continuously refine, seeking to improve its responsiveness, accuracy, and overall user experience. The journey of enhancing AI-driven solutions is ongoing, with each iteration bringing new insights and capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  User Feedback and Future Development
&lt;/h3&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%2Fux2c3adx4spq9ztu6s6a.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%2Fux2c3adx4spq9ztu6s6a.png" alt="Image description" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;User feedback is a critical component in shaping the future development of Salesforce’s STT service. The team gathers feedback through public Slack channels, behavioral data analysis, and a unified support system. This feedback informs the development roadmap, ensuring that the service evolves in ways that meet user needs and expectations.&lt;/p&gt;

&lt;p&gt;In developing MindMentor, user feedback has been equally important. Feedback from users has highlighted the importance of timely and accurate responses, which has been a key focus in its ongoing development. Understanding how users interact with the voicebot, what features they find most valuable, and where they encounter challenges helps guide future enhancements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Salesforce’s work on their STT service highlights the incredible potential of AI in transforming how we interact with technology, particularly in real-time applications. Their use of OpenAI’s Whisper models for accurate, low-latency transcriptions is a testament to the power of AI when combined with innovative engineering solutions. Reflecting on my own experience with MindMentor, I see many parallels in the challenges and solutions, underscoring the shared journey of leveraging AI to create meaningful, impactful applications. As AI continues to evolve, the possibilities for enhancing both business operations and personal well-being through technology are boundless.&lt;/p&gt;




&lt;p&gt;For more details on Salesforce's STT service, refer to the original article by Dima Statz: &lt;a href="https://engineering.salesforce.com/how-salesforces-new-speech-to-text-service-uses-openai-whisper-models-for-real-time-transcriptions/" rel="noopener noreferrer"&gt;How Salesforce’s New Speech-to-Text Service Uses OpenAI Whisper Models for Real-Time Transcriptions&lt;/a&gt;, published on July 25, 2024.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Recap of C1 Blog“The Past, Present &amp; Future of Cloud Computing for Businesses”</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Mon, 05 Aug 2024 01:09:35 +0000</pubDate>
      <link>https://dev.to/agagag/recap-of-the-past-present-future-of-cloud-computing-for-businesses-fhj</link>
      <guid>https://dev.to/agagag/recap-of-the-past-present-future-of-cloud-computing-for-businesses-fhj</guid>
      <description>&lt;p&gt;This article is a recap of Capital One's blog “&lt;a href="https://www.capitalone.com/tech/cloud/cloud-computing-evolution/" rel="noopener noreferrer"&gt;The Past, Present &amp;amp; Future of Cloud Computing for Businesses&lt;/a&gt;”&lt;/p&gt;

&lt;h3&gt;
  
  
  LTDR: Cloud Computing Overview
&lt;/h3&gt;

&lt;p&gt;Cloud computing has evolved from a theoretical concept in the 1960s to a fundamental component of modern business operations. Key milestones include the launch of AWS in 2006 and the entry of Google Cloud and Microsoft Azure in 2008. The market is segmented into IaaS, PaaS, and SaaS, with SaaS currently holding the largest share. Current trends include hybrid cloud strategies, AI and machine learning integration, serverless computing, sustainability efforts, and FinOps practices. The future of cloud computing looks promising with the rise of edge computing, quantum cloud services, IoT proliferation, and advancements in containerization and microservices.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Evolution of Cloud Computing
&lt;/h3&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%2F40yx0ub7o1gbc8b7ggb6.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%2F40yx0ub7o1gbc8b7ggb6.png" alt="Image description" width="800" height="638"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The journey of cloud computing began in the 1960s with J.C.R. Licklider’s visionary concept of an "intergalactic computer network." However, it wasn’t until the 1990s that this idea started taking shape with telecommunications companies offering virtualized private network connections. The real turning point came in the early 2000s, particularly in 2006, with the launch of Amazon Web Services (AWS), which began offering IT infrastructure services to businesses. This event marked the inception of modern cloud computing. Shortly thereafter, in 2008, Google Cloud and Microsoft Azure entered the market, further solidifying cloud computing's integral role in contemporary business operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of Cloud Computing
&lt;/h3&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%2Fn7nlnkm2shberbdpqq7n.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%2Fn7nlnkm2shberbdpqq7n.png" alt="Image description" width="800" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cloud computing has revolutionized business operations by reducing the costs and complexities associated with managing physical servers and data centers. Instead of investing heavily in IT infrastructure, companies can leverage cloud services on a pay-as-you-go basis, providing essential flexibility. This flexibility is crucial in a world increasingly driven by big data, as well as the need for mobile and remote access to applications. The scalability, reliability, and security offered by cloud computing platforms make them indispensable for modern businesses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Market Segmentation: IaaS, PaaS, and SaaS
&lt;/h3&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%2F3y2y7wl808dzxctyvbc9.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%2F3y2y7wl808dzxctyvbc9.png" alt="Image description" width="800" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The cloud computing market is segmented into three main service types: Infrastructure as a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IaaS&lt;/strong&gt; provides basic storage and computing capabilities, with major players including AWS, Google Cloud, and Microsoft Azure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PaaS&lt;/strong&gt; offers an environment for developing, testing, and managing software applications, dominated by Microsoft Azure and Google Cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS&lt;/strong&gt; delivers applications over the internet on a subscription basis, with popular services like Salesforce, Microsoft Office 365, and Google Workspace. While SaaS currently holds the largest market share, IaaS and PaaS are expected to grow rapidly due to the rising demand for scalable and cost-effective infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Current Market Trends
&lt;/h3&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%2F043yudqskhl5u2iflfhw.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%2F043yudqskhl5u2iflfhw.png" alt="Image description" width="800" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Several key trends are currently shaping the cloud computing landscape:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Cloud:&lt;/strong&gt; Many businesses are adopting hybrid cloud strategies, combining public and private cloud services to optimize cost-effectiveness, data sensitivity, and operational needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI and Machine Learning Integration:&lt;/strong&gt; Cloud providers are increasingly incorporating AI and machine learning capabilities into their offerings, empowering businesses with advanced analytics and operational efficiencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless Computing:&lt;/strong&gt; This model allows developers to focus on core products by eliminating the need to manage servers, with computation fully managed by the cloud provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environmental Considerations:&lt;/strong&gt; Sustainability is becoming a major focus for cloud providers like Google Cloud and Microsoft Azure, who are leading the charge by powering their data centers with renewable energy and implementing energy-efficient practices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FinOps:&lt;/strong&gt; As cloud usage grows, FinOps practices are becoming crucial for managing and optimizing cloud costs, ensuring financial accountability and maximizing return on investment. According to a report by Gartner, the global public cloud services market is projected to grow 20.4% in 2022 to total $494.7 billion, up from $410.9 billion in 2021.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Predicting the Future of Cloud Computing
&lt;/h3&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%2Ftydupghuxc0lo8k2ff1o.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%2Ftydupghuxc0lo8k2ff1o.png" alt="Image description" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking ahead, cloud computing is poised to continue its rapid growth, with predictions that the global market will exceed $1 trillion by 2030. Key future trends include the rise of edge computing, quantum cloud services, and the proliferation of Internet of Things (IoT) devices, all of which will drive further innovation and demand for robust cloud infrastructure. Additionally, the adoption of containerization and microservices is expected to enhance scalability and agility in cloud environments, fostering more efficient and responsive business operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Cloud computing has evolved from a theoretical concept into a cornerstone of the modern digital economy. As businesses increasingly leverage its myriad benefits, the future holds even greater promise for innovation, efficiency, and scalability. The trends and advances highlighted in Ahmed Ismail’s article underscore the critical importance of continued investment and development in cloud technologies. These advancements will undoubtedly continue to shape the future of business, driving new opportunities and efficiencies across industries.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Recap of "Getting Started with Kubernetes" Course</title>
      <dc:creator>Amanda Guan</dc:creator>
      <pubDate>Mon, 15 Jul 2024 20:47:24 +0000</pubDate>
      <link>https://dev.to/agagag/recap-of-getting-started-with-kubernetes-course-3ei4</link>
      <guid>https://dev.to/agagag/recap-of-getting-started-with-kubernetes-course-3ei4</guid>
      <description>&lt;p&gt;I recently studied the &lt;a href="https://www.educative.io/module/1j8yMXCkjGqYGZ9Py/10370001/6734573953613824" rel="noopener noreferrer"&gt;Getting Started with Kubernetes&lt;/a&gt; course, which provided an insightful introduction to Kubernetes, focusing on basic concepts, microservices, containerization, and practical steps for deploying applications both locally and in the cloud. In this article, I’ll recap the essential parts of the course, integrating illustrations to visualize key concepts, and share some practical code snippets and terminal commands to help reinforce the learning.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Kubernetes?
&lt;/h2&gt;

&lt;p&gt;Kubernetes, often abbreviated as K8s, is an open-source platform that automates the deployment, scaling, and management of containerized applications. It plays a pivotal role in orchestrating containers to ensure that applications run reliably and efficiently, especially in complex environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Are Microservices?
&lt;/h3&gt;

&lt;p&gt;One of the key concepts emphasized in the course is microservices—a design pattern that allows for fault isolation and independent management of different application features. Microservices enable faster development and iteration by smaller, specialized teams, although they can add complexity to the management of applications. Kubernetes simplifies this by orchestrating these microservices efficiently.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Cloud Native?
&lt;/h3&gt;

&lt;p&gt;Cloud-native applications are specifically designed to leverage the full advantages of cloud computing. This includes capabilities like scaling on demand, self-healing, supporting zero-downtime rolling updates, and running consistently across any environment using Kubernetes. The course highlights how Kubernetes fits perfectly into the cloud-native paradigm, making it an essential tool for modern application development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Do We Need Kubernetes?
&lt;/h3&gt;

&lt;p&gt;The course provides a clear explanation of why Kubernetes is crucial for managing modern applications. Kubernetes organizes microservices, scales applications automatically, self-heals by replacing failed containers, and allows for seamless updates with zero downtime. These features make Kubernetes indispensable for managing complex microservices architectures.&lt;/p&gt;

&lt;h4&gt;
  
  
  Illustration: Microservices Architecture
&lt;/h4&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%2Fnwamtnzapob00mc0az10.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%2Fnwamtnzapob00mc0az10.png" alt="Image description" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does Kubernetes Look Like?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Masters and Nodes
&lt;/h3&gt;

&lt;p&gt;A Kubernetes cluster consists of Master Nodes, which handle the control plane, and Worker Nodes, which run the actual application workloads. The course offers a detailed breakdown of these components, making it easier to understand the inner workings of a Kubernetes cluster.&lt;/p&gt;

&lt;h4&gt;
  
  
  Illustration: Kubernetes Cluster Components
&lt;/h4&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%2F4w1y7n7cldlvmdvfvmr5.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%2F4w1y7n7cldlvmdvfvmr5.png" alt="Image description" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Kubernetes in the Cloud with Linode Kubernetes Engine (LKE)
&lt;/h3&gt;

&lt;p&gt;Deploying Kubernetes in the cloud can be simplified with services like the Linode Kubernetes Engine (LKE). LKE manages the control plane for you, allowing you to focus on your applications and worker nodes. The course provided hands-on exercises with LKE, demonstrating how easy it can be to manage Kubernetes clusters in the cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction to Containerization
&lt;/h2&gt;

&lt;p&gt;Containerization is another critical concept covered in the course. It involves packaging an application with all its dependencies and configurations into a container image, ensuring consistent operation across different environments. This approach is fundamental to how Kubernetes operates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Build and Host the Image
&lt;/h3&gt;

&lt;p&gt;The course walked through the process of containerizing an application by writing a Dockerfile, building the image, and pushing it to a registry like Docker Hub. Here’s an example Dockerfile that was used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;dockerfile
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:current-slim&lt;/span&gt;

&lt;span class="c"&gt;# Copy source code to /src in container&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . /src&lt;/span&gt;

&lt;span class="c"&gt;# Install app and dependencies into /src in container&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /src&lt;span class="p"&gt;;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Document the port the app listens on&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8080&lt;/span&gt;

&lt;span class="c"&gt;# Run this command (starts the app) when the container starts&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; cd /src &amp;amp;&amp;amp; node ./app.js&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Illustration: Containerization Workflow
&lt;/h3&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%2Fuffrrqfcasb62fefqhn2.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%2Fuffrrqfcasb62fefqhn2.png" alt="Image description" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Hands-on With Kubernetes
&lt;/h2&gt;

&lt;p&gt;The course also provided several hands-on labs that helped reinforce the concepts learned. Here’s a summary of some of the practical exercises:&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup Required
&lt;/h3&gt;

&lt;p&gt;To get started, you’ll need Docker Desktop, Git, and optionally, accounts for Linode and DockerHub. Familiarize yourself with the &lt;code&gt;kubectl&lt;/code&gt; command-line tool, as it’s essential for interacting with Kubernetes clusters.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploy the Application Locally
&lt;/h3&gt;

&lt;p&gt;The course guided us through deploying a simple application locally using Kubernetes. Here’s how you can do it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Define the Pod in &lt;code&gt;pod.yml&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Pod&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;first-pod&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;project&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;qsk-course&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web-ctr&lt;/span&gt;
      &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;educative1/qsk-course:1.0&lt;/span&gt;
      &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deploy the Pod:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; pod.yml  
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify the Pod is running:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get pods  
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Forward the port to access the application:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl port-forward &lt;span class="nt"&gt;--address&lt;/span&gt; 0.0.0.0 first-pod 8080:8080    
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Access the application at &lt;code&gt;http://localhost:8080&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Illustration: Kubernetes Pod Definition
&lt;/h3&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%2F152btoyy2jgu3yhaz7x3.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%2F152btoyy2jgu3yhaz7x3.png" alt="Image description" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploy the Application on Cloud
&lt;/h3&gt;

&lt;p&gt;Deploying applications on the cloud using Kubernetes was another crucial part of the course. Here’s how you can do it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Copy-paste kubeconfig to &lt;code&gt;config&lt;/code&gt; file and configure &lt;code&gt;kubectl&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;KUBECONFIG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usercode/config  
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deploy the Pod:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; pod.yml    
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Connect to the Application
&lt;/h3&gt;

&lt;p&gt;Once the application is deployed, you’ll need to connect to it using a Kubernetes Service:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Define a Service in &lt;code&gt;svc-cloud.yml&lt;/code&gt; or &lt;code&gt;svc-local.yml&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Service&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;svc-local&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NodePort&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
  &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TCP&lt;/span&gt;
      &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
      &lt;span class="na"&gt;targetPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;8080&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deploy the Service:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; svc-local.yml    
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify the Service:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get svc   
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Access the application via the Service.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Kubernetes Deployments
&lt;/h3&gt;

&lt;p&gt;Kubernetes Deployments are crucial for managing applications at scale. The course demonstrated how to define and deploy a Deployment, and how Kubernetes automatically handles self-healing from failures:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Define Deployment in &lt;code&gt;deploy.yml&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;qsk-deploy&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;project&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;qsk-course&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;project&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;qsk-course&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hello-pod&lt;/span&gt;
          &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;educative1/qsk-course:1.0&lt;/span&gt;
          &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;8080&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deploy the Deployment:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deploy.yml   
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Self-healing from failures:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitor the deployment and manually delete a Pod to see Kubernetes automatically recreate it.&lt;/li&gt;
&lt;li&gt;Delete a Node and observe Kubernetes' automatic Pod replacement.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Illustration: Kubernetes Deployment
&lt;/h3&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%2Fiztog8dagbbbkpg6pxsh.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%2Fiztog8dagbbbkpg6pxsh.png" alt="Image description" width="800" height="710"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Scaling an Application
&lt;/h3&gt;

&lt;p&gt;Scaling an application was another critical aspect covered in the course. Kubernetes makes it easy to scale up or down depending on demand:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scale up:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edit &lt;code&gt;deploy.yml&lt;/code&gt; to set replicas to 10.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the changes and verify:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deploy.yml
kubectl get pods 
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scale down:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl scale &lt;span class="nt"&gt;--replicas&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5 deployment/qsk-deploy
kubectl get pods   
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Rolling Update
&lt;/h3&gt;

&lt;p&gt;The course also covered rolling updates—a powerful feature of Kubernetes that allows you to update your applications without downtime:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Perform rolling updates by modifying &lt;code&gt;deploy.yml&lt;/code&gt;:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;code&gt;minReadySeconds&lt;/code&gt;, &lt;code&gt;maxSurge&lt;/code&gt;, and &lt;code&gt;maxUnavailable&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Apply the updates and monitor the progress.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clean up resources after the update:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl delete deployment qsk-deploy
kubectl delete svc svc-local
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The "Getting Started with Kubernetes" course provided a thorough introduction to Kubernetes, from understanding the basics of microservices and cloud-native applications to deploying and managing containerized applications. The course's practical exercises and hands-on labs were particularly helpful in solidifying the concepts. By following this recap and using the provided illustrations and code snippets, you should have a solid foundation to continue exploring and mastering Kubernetes.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>docker</category>
      <category>devops</category>
      <category>microservices</category>
    </item>
  </channel>
</rss>
