<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Asharib Ahmed</title>
    <description>The latest articles on Forem by Asharib Ahmed (@codeashing).</description>
    <link>https://forem.com/codeashing</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%2F471854%2F347c076d-a750-4660-8a99-7c6cf758f81b.jpeg</url>
      <title>Forem: Asharib Ahmed</title>
      <link>https://forem.com/codeashing</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/codeashing"/>
    <language>en</language>
    <item>
      <title>Why Go Developers Avoid panic() - And When It's Actually Okay to Use</title>
      <dc:creator>Asharib Ahmed</dc:creator>
      <pubDate>Mon, 05 May 2025 04:28:28 +0000</pubDate>
      <link>https://forem.com/codeashing/why-go-developers-avoid-panic-and-when-its-actually-okay-to-use-4j99</link>
      <guid>https://forem.com/codeashing/why-go-developers-avoid-panic-and-when-its-actually-okay-to-use-4j99</guid>
      <description>&lt;p&gt;If you're coming to Go from another language, you might be surprised to find that Go developers don't really throw exceptions. In fact, they mostly avoid Go’s built-in &lt;code&gt;panic()&lt;/code&gt; function unless absolutely necessary.&lt;/p&gt;

&lt;p&gt;But that doesn’t mean &lt;code&gt;panic&lt;/code&gt; is bad. It just has a specific purpose, and misusing it can lead to rigid, brittle, and unpredictable code.&lt;/p&gt;

&lt;p&gt;Let’s break down why &lt;code&gt;panic()&lt;/code&gt; is usually discouraged, when it &lt;em&gt;is&lt;/em&gt; acceptable, and how Go’s unique approach to error handling makes your code more explicit, testable, and robust.&lt;/p&gt;




&lt;h2&gt;
  
  
  ☠️ What Exactly Is &lt;code&gt;panic()&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;In Go, calling &lt;code&gt;panic()&lt;/code&gt; stops the normal flow of execution. The program begins &lt;strong&gt;unwinding the call stack&lt;/strong&gt;, running any &lt;code&gt;defer&lt;/code&gt; functions along the way, until it either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recovers (via &lt;code&gt;recover()&lt;/code&gt;), or&lt;/li&gt;
&lt;li&gt;crashes the program entirely.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s Go’s version of an unrecoverable error — a loud, immediate halt.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧘 Why Returning Errors Is Preferred
&lt;/h2&gt;

&lt;p&gt;Go was designed around simplicity and &lt;strong&gt;explicit error handling&lt;/strong&gt;. The idiomatic way to handle issues is by returning an &lt;code&gt;error&lt;/code&gt; as a second value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;// Handle it&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;Here’s why that’s usually better than panicking:&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Gives the Caller Control
&lt;/h3&gt;

&lt;p&gt;When a function returns an error, the caller has &lt;em&gt;options&lt;/em&gt;. They can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retry the operation&lt;/li&gt;
&lt;li&gt;Wrap the error with more context&lt;/li&gt;
&lt;li&gt;Log it&lt;/li&gt;
&lt;li&gt;Ignore it (rarely, but sometimes valid)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With &lt;code&gt;panic()&lt;/code&gt;, all control is lost — unless you catch it with &lt;code&gt;recover()&lt;/code&gt;, which is clunky and rarely worth it.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Easier to Test
&lt;/h3&gt;

&lt;p&gt;It’s straightforward to test a function that returns an error:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;go&lt;br&gt;
if err := myFunc(); err != nil {&lt;br&gt;
    t.Errorf("unexpected error: %v", err)&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Testing for panics requires a deferred &lt;code&gt;recover()&lt;/code&gt; block, which adds boilerplate and confusion to your test code.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Better for Libraries and APIs
&lt;/h3&gt;

&lt;p&gt;If you're writing a package for others, panicking is a poor user experience. Your panic could crash their entire application — something they didn’t sign up for. Returning an error lets &lt;strong&gt;them&lt;/strong&gt; decide what to do.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. More Informative Errors
&lt;/h3&gt;

&lt;p&gt;Go makes it easy to wrap errors with context:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;go&lt;br&gt;
return fmt.Errorf("loading config: %w", err)&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This provides a breadcrumb trail of what went wrong and where. A &lt;code&gt;panic&lt;/code&gt; just dumps a stack trace, which may or may not help.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. It’s the Go Way
&lt;/h3&gt;

&lt;p&gt;Go’s standard library overwhelmingly favors returning errors over panicking. This consistency is part of what makes Go easy to read, maintain, and understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ So... When &lt;em&gt;Is&lt;/em&gt; &lt;code&gt;panic()&lt;/code&gt; Appropriate?
&lt;/h2&gt;

&lt;p&gt;Despite all the caution, &lt;code&gt;panic()&lt;/code&gt; does have its place — just use it &lt;strong&gt;sparingly&lt;/strong&gt; and &lt;strong&gt;intentionally&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here are the legitimate use cases:&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ 1. Truly Unrecoverable Errors
&lt;/h3&gt;

&lt;p&gt;If your application reaches a state it should never be in, panicking can be appropriate.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;go&lt;br&gt;
func mustGetEnv(key string) string {&lt;br&gt;
    val, ok := os.LookupEnv(key)&lt;br&gt;
    if !ok {&lt;br&gt;
        panic("missing required env var: " + key)&lt;br&gt;
    }&lt;br&gt;
    return val&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You’re signaling: “This is a developer mistake, not a runtime issue.”&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ 2. During Initialization
&lt;/h3&gt;

&lt;p&gt;It’s okay to panic when your program can’t even start correctly.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;go&lt;br&gt;
var cfg = loadConfig() // panics if config file is malformed&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Failing fast during startup is better than limping along in a broken state.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ 3. For Internal Tooling or Scripts
&lt;/h3&gt;

&lt;p&gt;If you’re writing a short CLI tool or internal script, and you’re just validating a few assumptions, panicking can save time — though error handling is still better if you expect others to reuse your code.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ 4. In Tests
&lt;/h3&gt;

&lt;p&gt;In unit tests, panic isn’t harmful — it just fails the test. You can use &lt;code&gt;t.Fatal&lt;/code&gt; or even call &lt;code&gt;panic()&lt;/code&gt; yourself for early exits in setup failures.&lt;/p&gt;




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

&lt;p&gt;&lt;code&gt;panic()&lt;/code&gt; isn’t evil — it’s just &lt;strong&gt;blunt&lt;/strong&gt;. Like a fire alarm, you don’t want to pull it unless things have truly gone off the rails.&lt;/p&gt;

&lt;p&gt;In almost every case, &lt;strong&gt;returning an error is better&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It’s more flexible&lt;/li&gt;
&lt;li&gt;Easier to test&lt;/li&gt;
&lt;li&gt;Safer for library consumers&lt;/li&gt;
&lt;li&gt;More aligned with Go’s philosophy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stick with explicit error handling, and reserve &lt;code&gt;panic()&lt;/code&gt; for when you really mean, “This should &lt;em&gt;never&lt;/em&gt; happen.”&lt;/p&gt;




&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Recommendation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Invalid user input&lt;/td&gt;
&lt;td&gt;Return &lt;code&gt;error&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File not found&lt;/td&gt;
&lt;td&gt;Return &lt;code&gt;error&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internal bug&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;panic()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Missing config&lt;/td&gt;
&lt;td&gt;Panic at startup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unexpected nil&lt;/td&gt;
&lt;td&gt;Panic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Library package&lt;/td&gt;
&lt;td&gt;Never panic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;💬 Want to see real-world code examples comparing &lt;code&gt;panic&lt;/code&gt; vs returned errors? Let me know in the comments — I’d be happy to write a follow-up post!&lt;/p&gt;

</description>
      <category>go</category>
      <category>backenddevelopment</category>
    </item>
    <item>
      <title>How to Use AI in Go with LangChainGo (Very Easy!)</title>
      <dc:creator>Asharib Ahmed</dc:creator>
      <pubDate>Sun, 04 May 2025 05:50:29 +0000</pubDate>
      <link>https://forem.com/codeashing/how-to-use-ai-in-go-with-langchaingo-very-easy-i2j</link>
      <guid>https://forem.com/codeashing/how-to-use-ai-in-go-with-langchaingo-very-easy-i2j</guid>
      <description>&lt;p&gt;Have you ever wanted to use AI in your Go (Golang) programs? It may sound hard, but with &lt;a href="https://github.com/tmc/langchaingo" rel="noopener noreferrer"&gt;LangChainGo&lt;/a&gt;, it’s actually very easy. In this post, I will show you a simple example to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is LangChainGo?
&lt;/h2&gt;

&lt;p&gt;LangChainGo is a Go library that helps you use language models (like Google AI, OpenAI, etc.) in your Go programs. You can give it a prompt (a question or a message), and it will give you an answer using AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We’ll Build
&lt;/h2&gt;

&lt;p&gt;We will write a small Go program that asks AI to explain something in simple terms. In this case, we ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Explain the concept of quantum entanglement in simple terms"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI will give us an answer we can print.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Code
&lt;/h2&gt;

&lt;p&gt;Here is the full code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"context"&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"log"&lt;/span&gt;
    &lt;span class="s"&gt;"os"&lt;/span&gt;

    &lt;span class="s"&gt;"github.com/tmc/langchaingo/llms"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/tmc/langchaingo/llms/googleai"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;ctx&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Background&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"API_KEY"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;googleai&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;googleai&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithAPIKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&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="s"&gt;"Explain the concept of quantum entanglement in simple terms"&lt;/span&gt;
    &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;llms&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GenerateFromSinglePrompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What This Code Does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;First, it sets up a context.&lt;/li&gt;
&lt;li&gt;It gets your Google AI API key from the environment (&lt;code&gt;API_KEY&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Then it creates a connection to the AI using the LangChainGo library.&lt;/li&gt;
&lt;li&gt;It sends a prompt to the AI.&lt;/li&gt;
&lt;li&gt;The AI gives an answer.&lt;/li&gt;
&lt;li&gt;We print the answer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example Output
&lt;/h3&gt;

&lt;p&gt;When I run the code, I get something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Quantum entanglement is when two tiny particles are connected in a special way, so if you do something to one, the other changes instantly, no matter how far apart they are."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Amazing, right? With just a few lines of code, you can use the power of AI!&lt;/p&gt;

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

&lt;p&gt;LangChainGo makes it very easy to use AI in Go. You don’t need to be an expert in machine learning or AI. If you know some Go, you can get started right away.&lt;/p&gt;

&lt;p&gt;Let me know if you try it out or if you have any questions!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Docker Desktop's Global Search Capability: The Quest for the Lost Container🕵🏻‍♂️</title>
      <dc:creator>Asharib Ahmed</dc:creator>
      <pubDate>Mon, 18 Sep 2023 12:39:17 +0000</pubDate>
      <link>https://forem.com/docker/docker-desktops-global-search-capability-the-quest-for-the-lost-container-4900</link>
      <guid>https://forem.com/docker/docker-desktops-global-search-capability-the-quest-for-the-lost-container-4900</guid>
      <description>&lt;h2&gt;
  
  
  Finding Docker Resources Just Got Easier 🔭
&lt;/h2&gt;

&lt;p&gt;In the vast and mysterious realm of containerization, Docker users have often embarked on epic quests, akin to seeking hidden treasures. These quests, however, were less like swashbuckling adventures and more like trying to find that missing sock in your laundry – frustrating and time-consuming.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem 🤦🏻
&lt;/h2&gt;

&lt;p&gt;Picture this: You're a developer, DevOps guru, or an IT administrator. Your Docker environment is like a bustling metropolis, filled with containers, images, volumes, and extensions. You've just received a call that the production server is acting up, and your mission, should you choose to accept it, is to find and fix the rogue container causing chaos.&lt;/p&gt;

&lt;p&gt;You think to yourself, "No problem, I've got this." You fire up Docker Desktop, and suddenly, you find yourself in a labyrinthine maze of menus, sub-menus, and windows. "Where on Earth is that container?" you mumble, as you navigate through an endless maze of clicks and scrolls.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Eureka" Moment 🎯
&lt;/h2&gt;

&lt;p&gt;But behold, dear Docker user, the winds of change have blown your way. Docker Desktop introduces its latest hero: the Global Search Capability! This feature is like the treasure map you've always needed but never knew existed.&lt;/p&gt;

&lt;p&gt;With a flourish of your keyboard and a confident click of your mouse, you invoke the Global Search. You type in the name of the container you seek, and voilà! It appears before you, like a mythical creature summoned by your Docker-wizardry.&lt;/p&gt;

&lt;p&gt;You can't help but chuckle at the irony – all those hours spent searching for containers, and now it's as easy as finding your favorite cat meme on the internet. You might even imagine Docker Desktop whispering in your ear, "Why didn't you summon me earlier, oh seeker of containers?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Global Search: Your Trusty Sidekick 🤝🏻
&lt;/h2&gt;

&lt;p&gt;Global Search in Docker Desktop is more than just a feature; it's your trusty sidekick, your secret weapon, your ticket to a world where finding resources doesn't require a treasure map or a Sherlock Holmes hat.&lt;/p&gt;

&lt;p&gt;This ingenious capability allows you to search for not only images and containers but also the Extensions Marketplace and Community Extensions, as well as volumes. It's like having a super-powered search engine that understands the language of Docker.&lt;/p&gt;

&lt;p&gt;Who's This For?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers&lt;/li&gt;
&lt;li&gt;DevOps&lt;/li&gt;
&lt;li&gt;IT Administrators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Global Search in Docker Desktop is a feature that can benefit anyone who works with containers and images. It can be particularly useful for developers, DevOps engineers, and IT administrators who work with complex Docker environments and need to manage multiple resources simultaneously.&lt;/p&gt;

&lt;h2&gt;
  
  
  In Conclusion 🔥
&lt;/h2&gt;

&lt;p&gt;As you bask in the glory of finding the rogue container in record time, you realize that Docker Desktop's Global Search Capability is your trusty sidekick, your secret weapon, your ticket to a world where finding resources doesn't require a treasure map or a Sherlock Holmes hat.&lt;/p&gt;

&lt;p&gt;So, dear Docker enthusiasts, next time you're faced with a container conundrum, remember that with Docker Desktop's Global Search, you're not just finding containers – you're finding precious moments of time, sanity, and perhaps, a good laugh along the way. Happy Docker-ing!&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started 🚴🏻
&lt;/h2&gt;

&lt;p&gt;Prerequisite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker Desktop 4.23.0 and above&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Click on the “whale” icon and choose “Dashboard”.&lt;/strong&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Step 2:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Click on “Search for images,containers, volumes, extensions and more…”&lt;/strong&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Step 3:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Start typing a Docker Image name and select the Images&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Start typing "Mongo," and you will see search results appearing on the screen. It shows that there are 50 images and 1 extension. I don't have a Mongo image on my local machine; this is why it's showing me the list on &lt;strong&gt;Hub Images&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;h3&gt;
  
  
  Step 4:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Click "Run" the MongoDB container&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It will start downloading this image if you are running this app for the first time&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;h3&gt;
  
  
  Step 5:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Configuring the settings &amp;amp; environment variable&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can setup environment variables like username and password as shown in the following way&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;h3&gt;
  
  
  Step 6:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Click "Run" the MongoDB container&lt;/strong&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Step 7:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Viewing the log&lt;/strong&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Step 8:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Accessing MogoDB Server via Mac Terminal&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To achieve this, you will need to install Mongosh(Mongo Shell) software on your Mac system&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install mongosh  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, Run mongosh without any command-line options to connect to a MongoDB instance running on your localhost with default port 27017:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mongosh 
Current Mongosh Log ID: 637857e4560a50a9c0df827c
Connecting to:      mongodb://127.0.0.1:27017/?directConnection=true&amp;amp;serverSelectionTimeoutMS=2000&amp;amp;appName=mongosh+1.6.0
Using MongoDB:      6.0.3
Using Mongosh:      1.6.0
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.

test&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Connecting to Remote MongoDB Server
&lt;/h3&gt;

&lt;p&gt;To connect to a MongoDB instance running on a remote host on port 27017 with authentication in place&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mongosh "mongodb://localhost:27017" --username root -p

Enter password: ********
Current Mongosh Log ID: 6378743da440589326e2c8a2
Connecting to:      mongodb://&amp;lt;credentials&amp;gt;@localhost:27017/?directConnection=true&amp;amp;serverSelectionTimeoutMS=2000&amp;amp;appName=mongosh+1.6.0
Using MongoDB:      6.0.3
Using Mongosh:      1.6.0

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting
   2022-11-19T05:05:35.135+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
   2022-11-19T05:05:36.020+00:00: vm.max_map_count is too low
------

------
   Enable MongoDB's free cloud-based monitoring service, which will then receive and display
   metrics about your deployment (disk utilization, CPU, operation statistics, etc).

   The monitoring data will be available on a MongoDB website with a unique URL accessible to you
   and anyone you share the URL with. MongoDB may use this information to make product
   improvements and to suggest MongoDB products and deployment options to you.

   To enable free monitoring, run the following command: db.enableFreeMonitoring()
   To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
------
test&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that you've entered the MongoDB shell, you're equipped to embark on your data journey. You can begin by crafting a new collection and orchestrating an intricate symphony of CRUD operations to shape your data universe&lt;/p&gt;




&lt;p&gt;Thanks for reading this! If you enjoyed this article, give it a virtual high-five with a 💖! If you need more info or have a burning desire for a topic I should tackle (preferably not "How to Train Your Pet Rock"), drop a comment below, and I'll try not to respond with a knock-knock joke. You can also follow me on &lt;a href="https://www.linkedin.com/in/codeashing"&gt;LinkedIn&lt;/a&gt;, where I promise to post only the most dignified cat videos and coffee mishaps.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>webdev</category>
      <category>devops</category>
      <category>programming</category>
    </item>
    <item>
      <title>Automated Updates Made Easy: Unveiling Docker Compose File Watch 🐳</title>
      <dc:creator>Asharib Ahmed</dc:creator>
      <pubDate>Wed, 23 Aug 2023 21:34:51 +0000</pubDate>
      <link>https://forem.com/docker/automated-updates-made-easy-unveiling-docker-compose-file-watch-4jgc</link>
      <guid>https://forem.com/docker/automated-updates-made-easy-unveiling-docker-compose-file-watch-4jgc</guid>
      <description>&lt;h2&gt;
  
  
  Introduction 🚀
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Overview of Docker Compose File
&lt;/h3&gt;

&lt;p&gt;Containerized development has revolutionized the way software is built and deployed, offering unparalleled flexibility and scalability. However, this progress hasn't come without its challenges. Docker Compose File Watch emerges as a promising solution to one of the most persistent obstacles faced by developers in this realm - the need for seamless and automatic updates to service containers during the development process.&lt;/p&gt;

&lt;p&gt;In essence, Docker Compose File Watch aims to bridge the gap between coding and deployment by introducing a dynamic mechanism that ensures your service containers stay in sync with your evolving codebase. It promises to eliminate the tedium of manual container updates, freeing developers to focus on what truly matters - writing code and crafting innovative solutions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Importance of Automated Updates in Development:
&lt;/h3&gt;

&lt;p&gt;The modern development landscape is marked by agility and rapid iteration. Developers continuously refine their code, responding to changing requirements and addressing bugs. However, in the containerized world, every code modification often necessitates a corresponding container update, disrupting the flow and impeding productivity.&lt;/p&gt;

&lt;p&gt;Picture this: you're feverishly coding, bringing your brilliant ideas to life. Suddenly, you need to modify a configuration file, triggering a series of manual steps to synchronize your changes with the container. The rhythm is lost, and your focus shifts from innovation to maintenance. This is where Docker Compose File Watch steps in, promising to liberate developers from these shackles of manual synchronization and container management.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of Streamlining Containerized Development:
&lt;/h3&gt;

&lt;p&gt;At the heart of Docker Compose File Watch lies the aspiration to optimize the development process. By automating the synchronization of code changes with container instances, developers gain the luxury of uninterrupted focus on their codebase. This newfound efficiency translates into faster development cycles, quicker bug fixes, and a more responsive development environment.&lt;/p&gt;

&lt;p&gt;Beyond individual productivity gains, Docker Compose File Watch holds the potential to foster collaboration within development teams. With manual synchronization largely relegated to the past, teams can work harmoniously on shared projects without constant disruptions. This collaborative synergy can lead to enhanced creativity, improved code quality, and accelerated project timelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Problem 🌪
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Challenges Faced by Developers in Containerized Development:
&lt;/h3&gt;

&lt;p&gt;While containerization offers a plethora of advantages, it isn't without its challenges, especially when it comes to maintaining a fluid development experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Time Complexity in Manually Updating Containers:
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Iterative Code-Test-Update Cycles:
&lt;/h3&gt;

&lt;p&gt;In the realm of software development, iteration is key. Developers constantly iterate through a cycle of coding, testing, and refining. However, in a containerized environment, the iteration process is often hampered by the need to manually update containers. This introduces a significant time overhead, disrupting the seamless flow of development.&lt;/p&gt;

&lt;p&gt;Consider a scenario where you're working on a microservice architecture. Each tweak to your codebase necessitates an update to the respective container. The manual nature of this process introduces a time complexity that accumulates with each iteration. The result? Valuable time and energy diverted from coding to administrative tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cumbersome Restart Processes:
&lt;/h3&gt;

&lt;p&gt;Containerized applications thrive on their ability to be lightweight and nimble. Containers can be started, stopped, and scaled with remarkable speed. However, this agility often contrasts with the manual steps required to restart containers after code changes. The need to halt, modify, and restart services introduces friction into the development process.&lt;/p&gt;

&lt;p&gt;Imagine you're collaborating with team members, each working on different parts of the application. As code changes are integrated and services are updated, the constant need to restart containers can create a disjointed development experience. The more complex your architecture becomes, the more pronounced this challenge becomes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Shift in Focus from Development to Maintenance:
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Impact on Creativity and Innovation:
&lt;/h3&gt;

&lt;p&gt;Software development is a creative endeavor, requiring unfettered focus and imagination. Yet, the burden of manual container updates can derail this creative flow. Developers find themselves pulled away from the art of coding and into the realm of maintenance, stifling the very creativity that drives innovation.&lt;/p&gt;

&lt;p&gt;In the midst of crafting elegant algorithms or designing intuitive user interfaces, the interruption caused by manual updates can lead to loss of context, fragmented thoughts, and a reduced capacity for innovation. The cognitive shift from development to maintenance is a disruption that hampers the very essence of what developers do best - innovate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mitigating Development Momentum:
&lt;/h3&gt;

&lt;p&gt;Momentum is a powerful force in development. When you're deeply engaged in coding, you ride a wave of inspiration and insight. However, the need to frequently pause this momentum to attend to container updates can be jarring. The mental shift required to transition from coding to container management disrupts the development rhythm.&lt;/p&gt;

&lt;p&gt;Imagine a scenario where you're meticulously crafting intricate logic for a complex feature. Suddenly, you're required to switch gears, update containers, and ensure everything is in sync. The mental context-switching introduces a cognitive load that erodes the fluidity of the development process. As a developer, your energy is best spent on coding, not on managing container states.&lt;/p&gt;

&lt;h2&gt;
  
  
  Balancing Act: Development vs. Maintenance 🧘🏼
&lt;/h2&gt;

&lt;p&gt;Balancing development with maintenance is a delicate act. While maintenance is an essential part of software engineering, it should not overshadow the creative process of coding. Docker Compose File Watch aspires to recalibrate this balance, enabling developers to focus on development while the tool handles the intricate task of container synchronization.&lt;/p&gt;

&lt;p&gt;In the sections that follow, we'll delve into the mechanics of Docker Compose File Watch, exploring how it tackles these challenges head-on. We'll uncover the inner workings of this experimental feature, delve into real-world scenarios, and equip you with the knowledge to integrate it seamlessly into your development workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing the Solution 🔥
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How Docker Compose File Watch Addresses the Developer Problem:
&lt;/h3&gt;

&lt;p&gt;Docker Compose File Watch emerges as a beacon of hope for developers grappling with the complexities of manual container updates. At its core, this experimental feature embodies the principle of automation - the art of simplifying and streamlining tasks that were once labor-intensive.&lt;/p&gt;

&lt;p&gt;When you integrate Docker Compose File Watch into your development workflow, the arduous process of manual container updates becomes a thing of the past. Instead of toggling between your code editor and terminal, initiating container restarts, and meticulously synchronizing changes, you can trust Docker Compose to handle these intricacies seamlessly.&lt;/p&gt;

&lt;p&gt;This feature introduces an x-develop section in your Compose.yaml file, acting as a command center for orchestrating automatic updates. By configuring watch paths and associated actions, you empower Docker Compose to monitor specific files or directories for changes and trigger predefined actions accordingly. The result? A development environment that remains in lockstep with your codebase, freeing you to channel your energy into coding rather than container management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started 👀
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installation and Setup of Docker Compose:
&lt;/h3&gt;

&lt;p&gt;Before we embark on our exploration of Docker Compose File Watch, it's imperative to ensure that you have the necessary tools at your disposal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Installing Docker and Docker Compose:&lt;/strong&gt; If you're new to Docker, fear not. The installation process is straightforward and well-documented. Head over to the official Docker website and follow the installation instructions tailored to your operating system. Additionally, Docker Compose, an essential companion, must be installed to orchestrate multi-container applications effortlessly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ensuring Compatibility with Your Project:&lt;/strong&gt; As with any new tool, compatibility is key. Take a moment to assess whether your project aligns with the prerequisites of Docker Compose File Watch. While the feature promises a smoother development experience, confirming compatibility upfront ensures a seamless integration.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Basics of Compose.yaml Configuration:
&lt;/h3&gt;

&lt;p&gt;Docker Compose operates on the premise of declarative configuration. At its core is the Compose.yaml file - a blueprint that outlines the composition and behavior of your containerized application.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Defining Services, Networks, and Volumes:&lt;/strong&gt; The Compose.yaml file provides a canvas to define your services, networks, and volumes. Services encapsulate the individual components of your application, while networks facilitate communication between services. Volumes, on the other hand, enable data persistence and sharing between containers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Building the Foundation for Automated Updates:&lt;/strong&gt; To harness the power of Docker Compose File Watch, it's essential to establish a strong foundation. The Compose.yaml file serves as the canvas on which we'll introduce the x-develop extension, transforming it into a dynamic control center for automated updates.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Enabling the x-develop Section for Watch:
&lt;/h3&gt;

&lt;p&gt;The key to unlocking the potential of Docker Compose File Watch lies in the introduction of the x-develop section within your Compose.yaml file.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Introducing the x-develop Extension:&lt;/strong&gt; The x-develop extension is a mechanism to extend the capabilities of Compose.yaml. It empowers you to define watch paths and associated actions, laying the groundwork for automatic container updates. Understanding the structure and syntax of this extension is crucial as we venture into the heart of automated updates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integrating File Watch in Your Project Setup:&lt;/strong&gt; Armed with the knowledge of the x-develop extension, you'll seamlessly integrate Docker Compose File Watch into your project. By strategically configuring watch paths and actions, you'll orchestrate a symphony of automated updates, ensuring your containers are always in sync with your code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configuring Watch Paths and Actions 🛠
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Exploring the x-develop Configuration Options:
&lt;/h3&gt;

&lt;p&gt;At the heart of Docker Compose File Watch lies the power to configure watch paths and define corresponding actions. This intricate dance between watching and acting is what enables the seamless synchronization of code changes and container updates.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Understanding Watch Paths and Glob Patterns:&lt;/strong&gt;&lt;br&gt;
Watch paths define the locations in your project's file structure that Docker Compose will monitor for changes. By specifying these paths, you dictate which components of your codebase trigger automated updates. The use of glob patterns offers flexibility in selecting files and directories, allowing you to be as granular or comprehensive as necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Defining Actions: Sync, Rebuild, and More:&lt;/strong&gt;&lt;br&gt;
Actions define how Docker Compose responds to changes detected in the specified watch paths. The two primary actions at your disposal are synchronization and rebuild. Synchronization ensures that modified files are copied into the corresponding container paths, ensuring real-time consistency. Rebuild, on the other hand, triggers the rebuilding of container images and subsequent service updates.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Specifying Paths to Watch for Changes:
&lt;/h3&gt;

&lt;p&gt;The art of configuring watch paths is rooted in strategic selection. While the temptation might be to monitor every corner of your project, a more refined approach yields greater efficiency.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Selecting Relevant Project Files and Folders:&lt;/strong&gt; &lt;br&gt;
Begin by identifying the files and folders that hold the greatest impact on your application's behavior. These could include source code files, configuration files, or data assets. By focusing on the critical components, you ensure that Docker Compose File Watch expends its resources judiciously.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimizing Path Selection for Development Needs:&lt;/strong&gt; &lt;br&gt;
Customization is key. Consider tailoring your watch paths to suit your development needs. For instance, if a specific feature module undergoes frequent changes, targeting its directory for watch can enhance responsiveness. The goal is to strike a balance between comprehensive coverage and targeted efficiency.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Working of Docker Compose File Watch 👨🏻‍💻
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Behind the Scenes: How File Watch Mechanism Operates:
&lt;/h3&gt;

&lt;p&gt;The allure of Docker Compose File Watch lies not only in its results but also in its elegant inner workings. To truly grasp its power, let's venture behind the scenes and understand how this dynamic mechanism operates.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monitoring File System Events:&lt;/strong&gt;&lt;br&gt;
At its core, Docker Compose File Watch acts as a vigilant sentry, monitoring file system events with precision. It keeps a watchful eye on the paths you've configured, detecting changes such as file creations, modifications, or deletions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Communication Between Host and Containers:&lt;/strong&gt;&lt;br&gt;
When a file system event is detected, Docker Compose orchestrates a seamless communication dance between the host and the relevant containers. This dance ensures that changes are propagated swiftly, maintaining a real-time synchronization that mirrors your development efforts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Handling Synchronization and Image Rebuilds:
&lt;/h3&gt;

&lt;p&gt;Docker Compose File Watch's prowess extends beyond mere synchronization. It has the ability to orchestrate intricate image rebuilds, ensuring your services encapsulate the latest updates.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Understanding the Synchronization Workflow:&lt;/strong&gt;&lt;br&gt;
When a file is modified in a watched path, Docker Compose swings into action. It orchestrates the transfer of the updated file into the corresponding container, ensuring that your changes are seamlessly integrated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rebuilding Images Efficiently with Cached Layers:&lt;/strong&gt;&lt;br&gt;
Certain changes, such as modifications to package dependency files, warrant more than just synchronization. In such cases, Docker Compose can trigger a systematic image rebuild. Leveraging its understanding of cached layers, Docker Compose optimizes the rebuild process, minimizing unnecessary overhead.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Benefits and Considerations 🎉
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Developer Productivity and Time Savings:
&lt;/h3&gt;

&lt;p&gt;The most tangible benefit of Docker Compose File Watch lies in its ability to amplify developer productivity. By eliminating the need for manual container updates, you're free to invest your time and energy where it matters most: writing code. The resulting acceleration in development cycles translates to quicker feature delivery, faster bug fixes, and an overall smoother development experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Potential Impact on Build and Deployment Pipelines:
&lt;/h3&gt;

&lt;p&gt;The integration of Docker Compose File Watch extends its influence beyond development. It can potentially impact your build and deployment pipelines by streamlining the synchronization between development, testing, and deployment stages. Containers that remain in sync with your codebase from the outset are more likely to exhibit consistent behavior, reducing discrepancies between development and production environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Known Issues and Limitations of the Experimental Feature:
&lt;/h3&gt;

&lt;p&gt;While Docker Compose File Watch holds immense promise, it's important to acknowledge its experimental nature. Like any technology in its infancy, there may be bugs, limitations, or scenarios that require manual intervention. Keeping abreast of Docker's official documentation and community discussions is crucial to understanding potential pitfalls and workarounds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Balancing Automation with Manual Control:
&lt;/h3&gt;

&lt;p&gt;Docker Compose File Watch is a powerful ally, but it's not the sole commander of your development landscape. Striking a balance between automation and manual control is key. There might be instances where nuanced adjustments or specific requirements demand a more hands-on approach. As you harness the power of Docker Compose File Watch, ensure that you retain the flexibility to intervene when necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Enhancements ⌛️
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Roadmap for Docker Compose File Watch Improvements:
&lt;/h3&gt;

&lt;p&gt;The world of technology is ever-evolving, and Docker Compose File Watch is no exception. The Docker Compose team is actively engaged in refining the feature based on user feedback and evolving development paradigms. As you embark on your journey with Docker Compose File Watch, keep an eye on the official roadmap to anticipate upcoming enhancements and refinements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Community Feedback and Collaboration:
&lt;/h3&gt;

&lt;p&gt;The strength of any tool lies in its community. Docker Compose File Watch thrives on user feedback, suggestions, and collaborative efforts. Engaging with the Docker community, participating in discussions, and sharing your experiences can contribute to the feature's evolution. Your insights could potentially shape the direction of future updates and improvements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Upcoming Features and Integrations:
&lt;/h3&gt;

&lt;p&gt;The beauty of the software ecosystem is its relentless pursuit of improvement. Docker Compose File Watch is likely to evolve in tandem with the broader container landscape. Anticipate updates that might enhance its capabilities, introduce new features, or facilitate integrations with complementary tools. Staying informed about upcoming features equips you to make informed decisions about its integration into your workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with Docker Compose File Watch
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step-by-Step Integration Guide:
&lt;/h3&gt;

&lt;p&gt;Now that you've gained a comprehensive understanding of Docker Compose File Watch, it's time to embark on your journey of integration. Follow this step-by-step guide to get started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install Docker and Docker Compose:&lt;/strong&gt;&lt;br&gt;
If you haven't already, ensure that Docker and Docker Compose are installed on your development environment. Head to the official Docker website and follow the installation instructions for your specific operating system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create or Navigate to Your Project Directory:&lt;/strong&gt;&lt;br&gt;
Whether you're starting a new project or integrating Docker Compose File Watch into an existing one, navigate to the root directory of your project in your terminal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compose.yaml Configuration:&lt;/strong&gt;&lt;br&gt;
Open your project's Compose.yaml file. If you don't have one, create a new file and define your services, networks, and volumes following Docker Compose's declarative syntax.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Introduce the x-develop Extension:&lt;/strong&gt;&lt;br&gt;
Within your Compose.yaml file, introduce the x-develop extension under the service for which you want to enable automated updates. Define the watch paths and associated actions within this extension.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configure Watch Paths and Actions:&lt;/strong&gt;&lt;br&gt;
Specify the paths you want Docker Compose to watch for changes. These paths can encompass critical code files, configuration files, or other components that require synchronization. Determine the appropriate actions to take upon changes, whether it's synchronization or triggering image rebuilds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Save and Validate:&lt;/strong&gt;&lt;br&gt;
Save your Compose.yaml file and validate its syntax using the docker-compose config command. Ensure that your configuration is error-free and ready for deployment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Launch Your Services:&lt;/strong&gt;&lt;br&gt;
Run docker-compose up to launch your services. Docker Compose will now monitor the specified watch paths and execute the defined actions when changes occur.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Observe Automatic Updates:&lt;/strong&gt;&lt;br&gt;
As you make changes to the watched paths, observe how Docker Compose File Watch springs into action. It will synchronize changes or trigger image rebuilds as configured, maintaining a real-time connection between your code and containers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Iterate and Enhance:&lt;/strong&gt;&lt;br&gt;
With Docker Compose File Watch seamlessly integrated into your workflow, iterate on your development process with newfound efficiency. Focus on coding, testing, and refining, knowing that container updates are no longer a manual burden.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Congratulations! You've successfully integrated Docker Compose File Watch into your development workflow. Embrace the enhanced productivity, streamlined collaboration, and accelerated iterations that this powerful feature brings to your containerized projects.&lt;/p&gt;

&lt;p&gt;In the realm of software development, time is of the essence. By harnessing the capabilities of Docker Compose File Watch, you've unlocked a valuable tool that empowers you to devote more time to innovation and less to administrative tasks. As you continue your journey, explore additional nuances, experiment with various configurations, and share your experiences with the thriving Docker community.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo Projects ☃️
&lt;/h2&gt;

&lt;p&gt;Embarking on our journey, we present a captivating demo project that breathes life into the concept of file watch. This hands-on demonstration offers a vivid showcase of Docker Compose File Watch in action, allowing you to witness firsthand how it transforms the development landscape. Through this engaging demo, you'll unlock the potential of automated updates and seamless synchronization, breathing new life into your coding endeavors. So, without further ado, let's delve into the world of file watch and unveil the magic it brings to your development process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Demo Project : Todo List Application
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Step 1. Clone the repository
&lt;/h3&gt;

&lt;p&gt;Begin your journey by cloning the repository for our Todo List Application. In your terminal, execute the following command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

git clone https://github.com/ajeetraina/todolist-node-xdevelop


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Step 2. Examining the Compose file
&lt;/h3&gt;

&lt;p&gt;Dive into the heart of the Compose file that powers our Todo List Application. The Compose.yaml file orchestrates the interplay between services and introduces the magic of Docker Compose File Watch.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

services:
  app:
    build: .
    x-develop:
      watch:
        - action: rebuild
          path: .
    command: sh -c "yarn install &amp;amp;&amp;amp; yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:8.0
    ports:
      - 3306:3306
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This compose file defines two services, &lt;code&gt;web&lt;/code&gt; and &lt;code&gt;mysql&lt;/code&gt;, and a volume named &lt;code&gt;todo-mysql-data&lt;/code&gt;, similar to the original file. However, the &lt;code&gt;web&lt;/code&gt; service now includes an &lt;code&gt;x-develop&lt;/code&gt; section, which enables the experimental "watch" mode for this service.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;watch&lt;/code&gt; section contains two actions: &lt;code&gt;sync&lt;/code&gt; and &lt;code&gt;rebuild&lt;/code&gt;. The "sync" action specifies a path to watch for changes in the host file system, and a corresponding target path inside the container to synchronize changes to. The "rebuild" action specifies a path to watch for changes in the host file system, and triggers a rebuild of the container when changes are detected.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;web&lt;/code&gt; service maps port &lt;code&gt;3000&lt;/code&gt; of the container to port &lt;code&gt;3000&lt;/code&gt; of the host, sets the working directory inside the container to &lt;code&gt;/app&lt;/code&gt;, and mounts the current directory on the host to &lt;code&gt;/app&lt;/code&gt; inside the container. The "mysql" service uses the official MySQL 8.0 Docker image, maps port &lt;code&gt;3306&lt;/code&gt; of the container to port &lt;code&gt;3306&lt;/code&gt; of the host, and creates a volume named &lt;code&gt;todo-mysql-data&lt;/code&gt; to persist the MySQL data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3. Starting the container services
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

docker compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
app-app-1           app-app             "docker-entrypoint.s…"   app                 7 seconds ago       Up 7 seconds        0.0.0.0:3000-&amp;gt;3000/tcp
app-mysql-1         mysql:8.0           "docker-entrypoint.s…"   mysql               5 days ago          Up 7 seconds        0.0.0.0:3306-&amp;gt;3306/tcp, 33060/tcp


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Step 4. Accessing the app
&lt;/h3&gt;

&lt;p&gt;Open &lt;code&gt;http://localhost:8080&lt;/code&gt; to access the app&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fgze9jlt6vjfun1902no3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fgze9jlt6vjfun1902no3.png" alt="Accessing the app"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 5. Testing the Compose &lt;code&gt;Watch&lt;/code&gt; Feature
&lt;/h3&gt;

&lt;p&gt;To test the watch mode in the Docker Compose file, you can make some changes to the source code files that are being watched and see if the changes are automatically synchronized and/or trigger a rebuild of the container.&lt;/p&gt;

&lt;p&gt;Run the below command to start monitoring for file edits within your project and keep the terminal open:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

docker compose alpha watch


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In the &lt;code&gt;/src/index.js&lt;/code&gt; file, update the line 18 to use the new empty text&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

-   app.listen(3000, () =&amp;gt; console.log('Listening on port 3000'));
+   app.listen(3000, () =&amp;gt; console.log('Listen on port 3000'));


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Step 6. Verifying the effect
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

change detected on /src/index.js
change detected on /src/index.js


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you make changes to the &lt;code&gt;index.js&lt;/code&gt; under the app directory, the changes should be automatically synchronized to the corresponding files inside the container, and you should see the changes in your results.&lt;/p&gt;

&lt;p&gt;Note that the watch mode is still an experimental feature, so there may be some issues or limitations that you encounter during testing.&lt;/p&gt;

&lt;p&gt;Compose Watch also allows you to specify the name of directories. For example, this Docker Compose file defines a service called &lt;code&gt;web&lt;/code&gt; which is built from the current directory (".") and includes an experimental feature called &lt;code&gt;x-develop&lt;/code&gt;. The &lt;code&gt;x-develop&lt;/code&gt; section includes a list of actions to be taken when changes are detected in certain directories or files.&lt;/p&gt;

&lt;p&gt;In this case, there are two actions defined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;sync&lt;/code&gt;: This action will synchronize any changes made to the &lt;code&gt;./web&lt;/code&gt; directory on the host machine to the &lt;code&gt;/app/web&lt;/code&gt; directory inside the container running the &lt;code&gt;web&lt;/code&gt; service. This ensures that any changes made to the web application code are immediately available inside the container.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;rebuild&lt;/code&gt;: This action will trigger a rebuild of the &lt;code&gt;web&lt;/code&gt; service container if changes are detected in the &lt;code&gt;.package.json&lt;/code&gt; file. This ensures that any changes to the application's dependencies are automatically installed and available inside the container.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

services:
  web:
    build: .
    x-develop:
      watch:
        - action: sync
          path: ./web
          target: /app/web
        - action: rebuild
          path: package.json


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In nutshell, if you modify &lt;code&gt;package.json&lt;/code&gt; (such as by installing a new npm package), Compose will rebuild the image and replace the existing service with an updated version. Refer to the next section to see it in action.&lt;/p&gt;

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

&lt;p&gt;In the dynamic landscape of containerized development, Docker Compose File Watch emerges as a beacon of efficiency and innovation. This experimental feature liberates developers from the chore of manual container updates, unleashing a new era of productivity and collaboration. By seamlessly synchronizing code changes with container instances, Docker Compose File Watch empowers developers to channel their energy into coding, refining, and creating, fostering an environment where ideas flourish. As you embark on your containerized development journey, remember that while technology propels progress, it's your insights and creativity that shape the future of software. Embrace Docker Compose File Watch, enhance your workflow, and embark on a seamless development journey like never before.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thanks for reading this! If you enjoyed this article make sure to leave a 💖, and if you need any other information or want to request a topic I should cover, feel free to drop a comment below!&lt;br&gt;
You can also follow me on &lt;a href="https://www.linkedin.com/in/codeashing/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Adopt 10x approach in Computer Science Degree…!🔥</title>
      <dc:creator>Asharib Ahmed</dc:creator>
      <pubDate>Sat, 04 Mar 2023 16:24:04 +0000</pubDate>
      <link>https://forem.com/aws-builders/adopt-10x-approach-in-computer-science-degree-3546</link>
      <guid>https://forem.com/aws-builders/adopt-10x-approach-in-computer-science-degree-3546</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9wmk6yazdplujkbtztgy.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9wmk6yazdplujkbtztgy.jpeg" alt=" " width="720" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Key Reason of writing this Article&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m pursuing my bachelors in Computer Science from last 2 and a half year, what I have seen in my fellows that there are numerous students who end up with lower job positions or having less skills after their degree because they didn’t got the proper counseling regarding their field or market required skills!&lt;/p&gt;

&lt;p&gt;So, I will share 10x approach with y’all how you folks can pursue your degree in a way that will make you ready for the interview in Google, Facebook type companies and what are the key courses that you have to most focus on and some tips and tricks for the better skills development :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discussion 💬&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My end goal is to make you comprehend that CS has whole universe in it, there is nothing impossible to do, you just desire a proper path way. so, we’ll be talking over following things which you can follow to become a master in Computer Science 😎&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Most worth full Concepts&lt;/li&gt;
&lt;li&gt;Projects you have to build&lt;/li&gt;
&lt;li&gt;How to become better programmer&lt;/li&gt;
&lt;li&gt;How to get hired in tech giants&lt;/li&gt;
&lt;li&gt;Soft Skills&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s get Started 🤩&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExOTAyZDM2NDYxYjNlZDI5ODdjM2YxMzU5YjQ3MmU3NDhlZGY3YjUxNCZjdD1n/2uIlaHVsql55CLP3as/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExOTAyZDM2NDYxYjNlZDI5ODdjM2YxMzU5YjQ3MmU3NDhlZGY3YjUxNCZjdD1n/2uIlaHVsql55CLP3as/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🕯 Beginning of your 4 years journey&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In very first semester mostly universities will teach you the course of Introduction to programming fundamental, Applied physics, programming language like C or C++ and Ms Office. They are just giving you an synopsis regarding these concepts, they never took you to the deeper concepts like the main reason of having a course of Applied physics is to implementation of physics principles in computer science but they teach you just momentum, force and newtons laws. so don’t just rely on your university, do learn about gravity equations, Navier stoke equation by your own which is gonna enable you build simulation. In fact Microsoft, Google have their own simulation system in which they test computer science design principle and their underlying principle which is completely based on applied physics. More over when you play any game you see Air, water, motions and movements they all are develop by inverse and forward cymatics and you can see it by your own if you download the standard assets or character controller of unity and see its script written on C#, so you’ll find the gravity equation there. This is why applied physics is crucial in CS and so you have to comprehend these concepts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚒️ Project Idea:&lt;/strong&gt; Build your own 2D cylindrical game engine on C++ in which you can render object and change their shapes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📐 Single and multi variable Calculus&lt;/strong&gt;&lt;br&gt;
If you have any interest in Artificial Intelligence so you have to consider this course extremely significant because machine learning is nothing but math and if you go in a bit deeper so you’ll find calculus concept’s like derivatives, integration etc. like we can’t do back propagation in neural network without chain rule. In CS you'll see calculus principles on and off in many places.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💪🏻 Power of C++&lt;/strong&gt;&lt;br&gt;
C++ is versatile language, you can build really amazing stuff by using C++. Our world wide web is completely written on C++ but still our universities asked you to create simple console base read and write tool which can read an employee name, age etc and write it on a .txt file. but for God sake go for something creative which is based on GUI, not go for console based tool because this habit will stuck with you till the end of your degree. In universities they will just teach you C++ up to functions and classes but you have to discover about GPU programming, Directx programming, Open GL programming, Web GL programming type thing by your own because if you gonna apply for a internship at google after 3rd or 4th semester so they will asked you for you semester projects and if you gonna exhibit them console based application, they will definitely kick you out but on the other hand if you have something like TCP/IP socket server as your semester project then they will consider you as a potential candidate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠️ Project Ideas :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Develop game using Simple and Fast Multimedia Library.&lt;/li&gt;
&lt;li&gt;First person shooter game on unreal engine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;📏 Probability and Statistics&lt;/strong&gt;&lt;br&gt;
This course is the essential for Artificial Intelligence developer. Entire Machine Learning works on probability and statistics principles’ like K nearest neighbors, Linear regression, Random Forest etc. No one can survive in AI without having a understanding of this course. You can initiate python library like Pstats as a semester project , which can implement stats function mean, mode and Standard Deviation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧰 Project Idea :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create your own Algorithm (with team).&lt;/li&gt;
&lt;li&gt;Solve real world problem related to Fintech Market&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🎯 Digital Logic and Design (DLD)&lt;/strong&gt;&lt;br&gt;
This course is lovely and bit easier as compare to others. You have tones of amazing projects on which you can work on. You can build keyloggers in hardware, signal jammers , WiFi authors etc. These are the projects which can teach you real world material ground truth like how signal jammers work, how WiFi get disabled, how WiFi access point stable and how WiFi connects with the help of access points. these mini project can help you to get command on hardware programming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧮 Linear Algebra&lt;/strong&gt;&lt;br&gt;
This is also a prerequisite of Artificial Intelligence. Egin values and Egin vectors implementation in any programming language is the primary concept that you have to discover. Coordinators transformation is also vital if you wanna go for robotics including rotation matrix, rotation vectors etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🖱️ Object Oriented Programming (OOP)&lt;/strong&gt;&lt;br&gt;
Universities mostly prefer JAVA for OOP but you are in good university so they will teach you in C# otherwise. You need to learn multi-threading in this, which use to run single code on a multiple machines. Do try to learn about GPU programming, if you have NVIDIA graphic card then download Compute Unified Device Architecture (CUDA) and learn its programming. Because if you know GPU programming so you can increase any device speed, you can decrease their run-time etc and almost every tech giant required GPU programming because they are using handling large scale traffic every day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔧 Project Idea :&lt;/strong&gt; GUI App management by using (Java/Visual Basic)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📊 Discrete Mathematics&lt;/strong&gt;&lt;br&gt;
In this course you have to learn about inductive and deductive logic because this is the time when you are suppose to showcase yourself to the world by Competitive Programming. CP is the only way by which you can prove yourself to the world. Gennady Korotkevich is amazing example of this, who is the world best competitive programmer, the guy who rejected Microsoft, Google and Facebook type companies’ offer. And this course is a prerequisite for competitive programming so you have to take this seriously.&lt;/p&gt;

&lt;p&gt;Following are the platforms from where you can polish your competitive programming skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔥 Platforms :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hacker Rank&lt;/li&gt;
&lt;li&gt;Leetcode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;following are the competitions that you can be a part of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚔️ Competitions :&lt;/strong&gt;&lt;br&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%2F4vbklfms2k1k8x8ysxkd.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4vbklfms2k1k8x8ysxkd.jpeg" alt=" " width="720" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google hash code and code jam&lt;/li&gt;
&lt;li&gt;Facebook Hacker Cup&lt;/li&gt;
&lt;li&gt;International Collegiate Programming Contest&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;💾 Database Administration&lt;/strong&gt;&lt;br&gt;
So, data structure is the only concept what you will deal with in every IT related job. If you are a developer so I guaranteed you that one day time will be come when you have to deal with Databases. So you have to be prepared for it. Do try to create your own database with few features as a semester project rather than just using pre-build database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🗣️ Soft Skills&lt;/strong&gt;&lt;br&gt;
We have been discussing about the concepts and project that you to focus on but there is main key on which you have to work on and that key is SOFT SKILLS. Search Results. Soft skills are attributes that enable you to engage in meaningful interactions with others. Since most jobs require teamwork, it’s important to possess soft skills to enhance your employability and achieve your dream job.&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%2Fyt8gftrf23l0eq04zj7s.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyt8gftrf23l0eq04zj7s.jpeg" alt=" " width="660" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yooooo!!! its to much to digest hmmm???&lt;/p&gt;

&lt;p&gt;No worries you have four years for this so just stay concentrated on what you are doing and if you gain good understanding of all these concepts and build likewise projects then congratulation now you are ready to join GOOGLE, FACEBOOK and MICROSOFT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pdfdrive.com/" rel="noopener noreferrer"&gt;For any Book&lt;/a&gt;&lt;br&gt;
&lt;a href="https://maltronics.com/" rel="noopener noreferrer"&gt;For DLD Projects&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/donnemartin/system-design-primer" rel="noopener noreferrer"&gt;For system Design&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Weeyy Haaa!! 🤠 We are done and you are a completely ready to be a part of Google, Facebook and Microsoft!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Congratulations!! 🥳&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s all from my side, I hope anything from above trash would help you. Good luck for your future endeavor. And Yeah one thing I forgot:&lt;/p&gt;

&lt;p&gt;Please leave some comments!! 👏 Please..!! AaaaHAHA0HHAHA! 😭&lt;br&gt;
HAHAH! Just kidding :)&lt;/p&gt;

</description>
      <category>react</category>
      <category>tailwindcss</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
