<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Ekta Garg on Medium]]></title>
        <description><![CDATA[Stories by Ekta Garg on Medium]]></description>
        <link>https://medium.com/@_ektagarg?source=rss-bc66fc152ab0------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*SEt4dzdq7p05dgT-PgRd-g.jpeg</url>
            <title>Stories by Ekta Garg on Medium</title>
            <link>https://medium.com/@_ektagarg?source=rss-bc66fc152ab0------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 16:20:34 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@_ektagarg/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Tackling Frauds: You Solve One Puzzle, You Land on Another]]></title>
            <link>https://medium.com/@_ektagarg/tackling-frauds-you-solve-one-puzzle-you-land-on-another-65f27fcf5025?source=rss-bc66fc152ab0------2</link>
            <guid isPermaLink="false">https://medium.com/p/65f27fcf5025</guid>
            <category><![CDATA[fraud-detection]]></category>
            <category><![CDATA[fraud-prevention]]></category>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[analytics]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Ekta Garg]]></dc:creator>
            <pubDate>Mon, 07 Jul 2025 08:37:17 GMT</pubDate>
            <atom:updated>2025-07-07T08:37:17.740Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MJhgYMytjlX02BNnleqieQ.jpeg" /><figcaption>Image Credits: <a href="https://jurnalpost.com/">https://jurnalpost.com/</a></figcaption></figure><p>In the world of digital platforms, fraud is not just a possibility — it’s a certainty. Whether you’re running an e-commerce platform, a digital wallet, or a food delivery app, fraudsters are constantly seeking ways to extract benefits at your expense. And as your platform scales, the cost of inaction becomes more expensive than ever.</p><p>Let’s break down what fraud is, why chargebacks sting, and why <strong>you can’t eliminate fraud — but you can outpace it</strong> with the right systems in place.</p><h3>What Is Fraud?</h3><p>Fraud can take many forms, but at its core, it’s <strong>an intentional deception to secure unfair or unlawful gain</strong>. On platforms, this typically includes:</p><ul><li><strong>Refund fraud</strong>: A customer falsely claims an item never arrived or was defective to get their money back.</li><li><strong>Promo abuse</strong>: Creating multiple accounts to exploit first-time user discounts.</li><li><strong>Card fraud</strong>: Using stolen credit card information for purchases.</li><li><strong>Chargeback fraud</strong>: A customer initiates a chargeback (a reversal of a credit card payment) despite having received the product or service.</li></ul><p>Fraudsters aren’t always sophisticated. Sometimes they’re regular users who spot a loophole and exploit it. And that makes prevention even trickier.</p><h3>What Is a Chargeback — and Why It Hurts</h3><p>A <strong>chargeback</strong> is when a customer disputes a transaction and the issuing bank forcibly reverses the charge. It was designed as a consumer protection tool — but for businesses, it’s a nightmare.</p><p>Why? Because:</p><ul><li>You <strong>lose the product or service</strong> and <strong>the money</strong>.</li><li>You often pay <strong>additional fees</strong>.</li><li>Too many chargebacks raise your <strong>dispute rate</strong>, risking higher transaction fees or even getting banned by payment processors.</li></ul><p>Worse still, <strong>you rarely get to explain your side of the story</strong>. The decision is often automated, and the default stance is: T<em>he customer is right.</em></p><h3>You Can’t Eliminate Fraud — You Can Only Get Better at Fighting It</h3><p>Here’s the hard truth: <strong>fraud is a moving target</strong>.</p><p>Every time you build a defense system — captcha, OTP verification, velocity limits, KYC — fraudsters evolve. You solve one puzzle, you land on another.</p><p>So instead of chasing a perfect solution, aim to:</p><ul><li><strong>Minimize impact</strong>: Reduce the financial and operational damage.</li><li><strong>Increase friction for bad actors</strong>, but not for your good users.</li><li><strong>Build faster feedback loops</strong> so you can react to new fraud patterns quickly.</li></ul><h3>Why You Need Guardrails in Your System</h3><p>Guardrails are the <strong>protective mechanisms baked into your platform</strong> — the silent defenders that flag, block, or limit risky behaviors.</p><h3>What do guardrails look like?</h3><ul><li><strong>Refund limits</strong>: One refund per user per month.</li><li><strong>Velocity checks</strong>: Limit the number of orders, logins, or cards per device.</li><li><strong>Behavioral signals</strong>: Flag accounts that show suspicious patterns — too many password resets, multiple failed payments, etc.</li><li><strong>Device fingerprinting</strong>: Detect if the same device is being used to create multiple accounts.</li></ul><p>These don’t just prevent fraud — they <strong>deter</strong> it. If a fraudster hits a wall early, they’re less likely to keep probing your system.</p><h3>Fraud Is a Product Problem — Treat It Like One</h3><p>Fraud prevention is <strong>not just a security concern or a customer support task</strong>. It’s a product and engineering challenge. Treat it like any other product domain:</p><ul><li>Set metrics: % chargeback rate, fraud losses per order, false positive rate.</li><li>Run experiments: What happens if you change your refund window? Your KYC rules?</li><li>Talk to real users — and your fraud team. Often, your best insights come from people on the ground.</li></ul><h3>Don’t Wait for a Blow-Up</h3><p>Too often, companies ignore fraud until they hit a <strong>PR disaster</strong> or <strong>payment processor threat</strong>. But the damage by then is already done — in dollars and trust.</p><p>Build guardrails. Monitor abuse. Revisit thresholds. Iterate.</p><p>Because fraud doesn’t rest — and neither should your systems.</p><h3>🔚 Final Thought</h3><p>Fighting fraud is not about reaching 0%. That’s a myth. It’s about staying <strong>a step ahead</strong> and making it <strong>painful enough</strong> for fraudsters to go elsewhere. Every puzzle you solve helps your platform mature — and every guardrail you build protects your real users better.</p><p>Stay sharp. Keep shipping. And always expect the next move.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=65f27fcf5025" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Year in Review: 2024 — From Building Startups to New Beginnings]]></title>
            <link>https://medium.com/@_ektagarg/year-in-review-2024-from-building-startups-to-new-beginnings-8fec393dca9d?source=rss-bc66fc152ab0------2</link>
            <guid isPermaLink="false">https://medium.com/p/8fec393dca9d</guid>
            <category><![CDATA[learning]]></category>
            <category><![CDATA[startup-life]]></category>
            <category><![CDATA[challenges-in-life]]></category>
            <category><![CDATA[startup-lessons]]></category>
            <category><![CDATA[year-in-review]]></category>
            <dc:creator><![CDATA[Ekta Garg]]></dc:creator>
            <pubDate>Sat, 28 Dec 2024 15:02:56 GMT</pubDate>
            <atom:updated>2024-12-28T18:13:15.404Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Year in Review: 2024 — From Building Startups to New Beginnings</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HaqM4O04cZdsQ_IA4l-qDg.png" /></figure><p>As 2024 comes to a close, it’s hard to believe how much has happened in just one year. For me, this year has been filled with challenges, growth, and learning — both professionally and personally. From diving deep into the startup ecosystem to launching events that brought people together through creativity, it has been a year of experimentation, hard work, and collaboration.</p><p>Here’s a look back at my 2024 journey, from building on <strong>Exp.club </strong>with other cofounders<strong> </strong>to<strong> </strong>starting my own business, <strong>Eksau.in</strong>, and all the experiences that shaped my year.</p><h3>Starting the Year with Exp.club</h3><p><a href="https://exp.club/">exp.club | learn by building a real product with a real team</a></p><p>At the start of 2024, I was deeply involved in a project that I believed had the potential to make a significant impact — <strong>Exp.club</strong>. The concept was simple yet ambitious: we wanted to help students and professionals learn how to build their own products. The idea was to create a community where developers, designers, and product managers could collaborate, learn, and execute together.</p><p>Within a month, we launched <strong>three cohorts</strong> — each one made up of a diverse group of people with a shared goal: to build a product from scratch. Our mission was to guide these aspiring creators on every step of their journey, from ideation to launch. It was an incredibly fulfilling experience to watch these teams come together, collaborate, and bring their ideas to life.</p><p>However, despite the positive impact and potential I saw, I made the difficult decision to step away from <strong>Exp.club</strong>. As much as I loved the project, I realized that the startup required my <strong>full attention</strong> and bandwidth — something I wasn’t able to give due to my regular job. I truly believe that with the right focus, Exp.club has the potential to grow exponentially, but it needed more than I could offer at that time.</p><p>Looking back, though, I’m incredibly grateful for the relationships I built and the lessons I learned. I had the pleasure of working with my co-founders, <strong>Ankur Goyal</strong> and <strong>Dipti Mundra, </strong>who I met through<strong> </strong><a href="https://www.startupschool.org/cofounder-matching">Ycombinator</a>. Getting to know them was an absolute joy, and I learned a tremendous amount from their perspectives, wisdom, and work ethic. If you’d like to explore more about Exp.club, check out <a href="https://exp.club/"><strong>Exp.club</strong></a>.</p><h3>The Birth of Eksau.in</h3><p>After stepping away from Exp.club, I took some time to reflect on my next steps. It wasn’t long before I found my next adventure — and this time, I was venturing into a completely different space. Enter <strong>Eksau.in</strong>, my very own e-commerce venture.</p><p>Eksau is a curated collection of 100 different kinds of products — from <strong>home décor</strong> to a variety of lifestyle items, with a vision to create a space where quality and creativity meet.</p><p>I started this business alongside my good friend <strong>Saumya Sisodia</strong>, who has been an invaluable partner in this journey. Saumya brings immense expertise to the table, especially in areas like <strong>creativity</strong>, <strong>marketing</strong>, <strong>sales</strong>, and <strong>relationship management</strong>. We’ve worked together to build a brand that resonates with our customers and offers a truly curated experience.</p><p>In the early days, we focused on <strong>home décor</strong>, launching a range of beautifully designed products we felt were missing in the market. It was a small but exciting step, and we were both thrilled to see customers respond positively.</p><p>But what truly made this year stand out were the <strong>events</strong> we hosted. Two events, in particular, were close to my heart and filled me with a sense of purpose.</p><h3>Event 1: A Creative Ceramics Session</h3><p>The first event we hosted was a small, intimate gathering, held in a <strong>closed group</strong> setting. We invited people to come and paint ceramics, giving them the chance to express themselves creatively. It was such a fulfilling experience to see people of all skill levels paint their hearts out on these ceramics — some made beautiful bowls, others painted mugs or plates. There was food, laughter, and a sense of community in the air.</p><p>This event wasn’t just about selling products; it was about <strong>bringing people together</strong>, fostering creativity, and creating memories. The feedback from the participants was overwhelmingly positive, and we were excited to host more such events in the future.</p><h3>Event 2: Art for a Cause — NGO Event</h3><p>The second event was incredibly special to me. It took place on <strong>31st October</strong>, and we partnered with an <strong>NGO</strong> to bring together a group of individuals who had the chance to express their creativity through art. We provided them with canvases, paints, and a safe space to create. What made this event even more powerful was that these pieces of art were not just for personal enjoyment but were gifted to <strong>government officials</strong> as a gesture of appreciation.</p><p>Seeing these individuals — many of whom had never painted before — pour their hearts into their artwork and then proudly gift it was incredibly moving. It reminded me that creativity has the power to bring people together and make an impact in ways that go beyond just products.</p><p>This event is something I will always hold dear to my heart, as it reminded me that business can be about more than just making a profit — it can be about <strong>purpose</strong>, <strong>community</strong>, and <strong>giving back</strong>.</p><h3>Challenges: The Packaging Dilemma</h3><p>As with any new venture, there were challenges along the way. One of the biggest hurdles we faced at Eksau was <strong>packaging</strong>. Selling products online comes with its own set of logistics, and we quickly learned how complex and time-consuming the packaging process could be. We wanted to ensure that every product reached our customers in perfect condition, but as our orders increased, so did the packing challenges.</p><p>While this slowed our momentum a bit, it also gave us the opportunity to rethink and streamline our processes. We’re continuously working on finding solutions that will help us scale efficiently while maintaining the quality and service that our customers expect.</p><h3>Reflections and Looking Ahead</h3><p>2024 has been a year of transformation — one filled with new projects, unexpected turns, and invaluable lessons. From the excitement of building <strong>Exp.club</strong> and learning about product creation, to the joy of starting <strong>Eksau.in</strong> with Saumya and hosting events that brought people together, it’s been a year of growth in every sense.</p><p>Looking ahead, I am filled with a sense of <strong>gratitude</strong> and <strong>optimism</strong> for what the future holds. There is still so much to learn, so much to build, and so many more people to meet. As I continue to explore new ventures and creative projects, I’m reminded of how much we can accomplish when we pursue things with passion, collaboration, and an open heart.</p><p>Thank you to everyone who has been part of this journey — to my teammates, friends, mentors, and everyone who supported me along the way. I’m excited for what 2025 has in store and can’t wait to see what we can build together next.</p><p>Here’s to the next chapter!</p><p><strong>What was your 2024 like?</strong> If you’ve been through any exciting projects, challenges, or experiences this year, feel free to share in the comments. Let’s keep the conversation going! 🌟</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8fec393dca9d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Python Dictionaries: How Maps and Hashing Work Behind the Scenes]]></title>
            <link>https://medium.com/@_ektagarg/python-dictionaries-how-maps-and-hashing-work-behind-the-scenes-2ab1110b932e?source=rss-bc66fc152ab0------2</link>
            <guid isPermaLink="false">https://medium.com/p/2ab1110b932e</guid>
            <category><![CDATA[hashing]]></category>
            <category><![CDATA[maps]]></category>
            <category><![CDATA[python-dictionaries]]></category>
            <category><![CDATA[hash-table]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Ekta Garg]]></dc:creator>
            <pubDate>Wed, 23 Aug 2023 08:10:04 GMT</pubDate>
            <atom:updated>2023-08-23T08:10:04.914Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*cniEGWeW7UK6ep2S.jpg" /><figcaption>Image Credits: <a href="https://realpython.com/python-map-function/">https://realpython.com/python-map-function/</a></figcaption></figure><h3>Introduction</h3><p>Python, a language known for its simplicity and versatility, relies heavily on dictionaries, also known as <strong>maps</strong>. These dictionaries play a crucial role in various operations, offering swift data access. But have you ever wondered how they manage to be so fast and efficient? The secret lies in <strong>hashing</strong>, a fundamental concept we’ll explore in this blog, along with how dictionaries are structured internally.</p><h3>Hashing: The Magic Behind Dictionaries</h3><p>Imagine you have a bunch of keys (inputs) that you want to keep organized. Instead of arranging them linearly, a hash function is used. This function takes each key, processes it, and produces a compact code, or hash. This hash is like a cheat sheet, telling us where the actual data (values) is stored. This makes finding values incredibly quick, especially with large datasets.</p><h3>Storing Data: The Hash Table</h3><p>Think of a hash table as a huge, organized collection of buckets, each labeled with a unique number. These buckets are where our data resides. When we want to store or retrieve something, we consult the hash, which tells us which bucket to look in.</p><h3>Tackling Hash Collisions</h3><p>Hashing sounds perfect, right? Well, not always. There’s a tiny hiccup: what if two different keys produce the same hash? This is a hash collision, and it’s like two people ending up with the same locker number. Python deals with this using two main methods:</p><p>1. <strong>Chaining</strong>: Imagine each bucket having its own mini-list inside it. When two keys collide, they are placed in the same mini-list, sharing the bucket. It’s like having a shared locker for two friends.</p><p>2. <strong>Open Addressing</strong>: In this approach, if a bucket is already taken, Python looks at the next available bucket until it finds an empty one. It’s like finding an empty locker by moving to the nearest available one.</p><h3>Python’s Dictionary Magic</h3><p>Python’s dictionaries have a lot going on behind the scenes to make them efficient:</p><p>1. <strong>Flexible Hashing</strong>: Python uses a hash function that can process various types of data, making it possible to use diverse keys.</p><p>2. <strong>Changing Sizes</strong>: Dictionaries can grow or shrink as needed, ensuring they’re always optimized for your data.</p><p>3. <strong>Preserving Order</strong>: Since Python 3.7, dictionaries also remember the order in which keys were added, which is great for tasks that require maintaining input order.</p><h3>Performance: A Peek into Time Complexity</h3><p>In simple words, Python dictionaries are super-fast. On average, tasks like adding, removing, or fetching data have a consistent speed, regardless of the dictionary’s size. However, in rare cases where many hash collisions occur, the speed can decrease, but Python’s clever design minimizes this issue.</p><h3>Conclusion</h3><p>Python’s dictionaries are a behind-the-scenes hero, ensuring our code runs efficiently. By understanding hashing and the way dictionaries manage data internally, we gain insights into why Python is so good at what it does. Whether you’re a newbie or a seasoned coder, the inner workings of dictionaries shed light on the core of Python’s power, making your coding journey even more fascinating.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2ab1110b932e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Power and Potential of Supervised Learning]]></title>
            <link>https://medium.com/@_ektagarg/the-power-and-potential-of-supervised-learning-811cfee6d511?source=rss-bc66fc152ab0------2</link>
            <guid isPermaLink="false">https://medium.com/p/811cfee6d511</guid>
            <category><![CDATA[supervised-learning]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[classification]]></category>
            <dc:creator><![CDATA[Ekta Garg]]></dc:creator>
            <pubDate>Sun, 23 Jul 2023 12:16:05 GMT</pubDate>
            <atom:updated>2023-07-23T12:16:05.845Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/848/0*8xg-0EfyjS6ghFDK.jpg" /></figure><h3><em>Introduction</em></h3><p>In the realm of artificial intelligence and machine learning, there’s a fascinating concept called “supervised learning” that has the power to transform our lives in countless ways. At first glance, it might sound complex, but fear not! In this beginner-friendly guide, we’ll take a journey into the world of supervised learning, demystify its secrets, and discover the wonders it can bring to our daily lives.</p><h3><em>Understanding Supervised Learning</em></h3><p>So, what exactly is supervised learning? Think of it as a way to teach machines to learn from examples. Imagine you’re teaching a kid how to identify different animals. You show them pictures of cats, dogs, and elephants, and you tell them what each animal is. Gradually, the kid starts recognizing the unique features of each animal and can tell you what they are just by looking at new pictures. That’s what supervised learning is all about!</p><p>In this process, we use a labeled dataset, which means we have lots of examples with their correct answers. The dataset contains features (like the different attributes of an animal) and the corresponding labels (what type of animal it is). The goal is to build a “smart” model that can learn from these examples and make accurate predictions when faced with new, unseen data.</p><h3><em>Getting to Know the Parts</em></h3><p>Let’s break down the key components of supervised learning in simple terms:</p><ol><li><strong>Input Data</strong>: This is the information that goes into the model for learning. Just like the pictures of animals, we showed the kid, it can be anything, like numbers, text, pictures, or even sounds.</li><li><strong>Target Labels</strong>: These are the correct answers we want the model to learn. Going back to our example, the labels were “cat,” “dog,” and “elephant.” The model’s job is to figure out the relationship between the input data and the correct labels.</li><li><strong>Model Architecture</strong>: This is like the brain of the model. It’s a fancy mathematical structure that learns patterns and relationships from the examples we give it.</li><li><strong>Loss Function</strong>: Think of this as a way to measure how well the model is doing. It tells the model how far off its predictions are from the correct answers.</li><li><strong>Optimization Algorithm</strong>: This is like the model’s teacher. It helps the model adjust its “thinking” process to get better at making predictions.</li></ol><h3><em>Different Types of Supervised Learning</em></h3><p>Supervised learning comes in two main flavors:</p><ol><li><strong>Classification</strong>: It’s like sorting things into categories. For example, it can help us classify emails as “spam” or “not spam” or recognize whether a picture contains a cat or a dog.</li><li><strong>Regression</strong>: This one deals with predicting numbers. For instance, it could help us predict house prices based on factors like the number of rooms, location, and size.</li></ol><h3><em>The Challenges and Solutions</em></h3><p>No learning journey is without challenges! Two common issues are “overfitting,” where the model becomes too focused on the training examples and fails to generalize to new data, and “biased datasets,” which lead to biased predictions. To overcome these obstacles, we use techniques like cross-validation to test the model’s performance and regularization to prevent overfitting.</p><p><strong><em>Exciting Applications of Supervised Learning</em></strong></p><p>Now comes the fun part — seeing supervised learning in action in our lives! It’s everywhere:</p><ol><li><strong>Healthcare</strong>: Doctors use it to predict patient outcomes and suggest personalized treatments.</li><li><strong>Finance</strong>: Banks employ it to detect fraud and make credit risk assessments.</li><li><strong>Language and Speech</strong>: Virtual assistants like Siri or Alexa understand our commands thanks to supervised learning.</li><li><strong>Image Recognition</strong>: It helps us find objects in pictures and enables facial recognition.</li></ol><h3><em>Conclusion</em></h3><p>Supervised learning might sound like magic, but it’s a magical innovation that drives the world of AI and machine learning. By teaching machines to learn from examples, we can achieve incredible feats and solve complex problems. As we continue to explore this amazing field, supervised learning will undoubtedly lead us into a future where machines can assist and augment our capabilities, making our lives better in ways we couldn’t have imagined before. So, embrace the magic of supervised learning, and let’s embark on an exciting journey into the world of AI!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=811cfee6d511" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Machine Learning Basics: Unveiling the Magic of Smart Algorithms]]></title>
            <link>https://medium.com/@_ektagarg/machine-learning-basics-unveiling-the-magic-of-smart-algorithms-f5d9568c8143?source=rss-bc66fc152ab0------2</link>
            <guid isPermaLink="false">https://medium.com/p/f5d9568c8143</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[machine-learning-ai]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[robots]]></category>
            <dc:creator><![CDATA[Ekta Garg]]></dc:creator>
            <pubDate>Thu, 20 Jul 2023 18:32:06 GMT</pubDate>
            <atom:updated>2023-07-20T18:32:06.268Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*xTtf9OBjcKrf8ItN" /><figcaption>Image from: <a href="https://bdtechtalks.com/2019/02/15/what-is-deep-learning-neural-networks/">what-is-deep-learning-neural-networks</a>, Techtalks.</figcaption></figure><p>Hey there! Have you ever wondered how some apps and systems seem to know exactly what you need or like? Well, it’s not magic; it’s machine learning! This fascinating technology is all about teaching computers to learn from data and make smart decisions without being explicitly told what to do. So, let’s dive into the world of machine learning together and discover the key concepts that make it tick! Also, I will be writing entire series on machine learning, so do follow the blogs which I am writing if you want to deep dive into it.</p><h3>What’s the Big Deal with Machine Learning?</h3><p>Okay, picture this: instead of following fixed rules, machine learning lets computers learn from examples and experiences, just like we do. Imagine showing a computer countless cat pictures and telling it, “Hey, these are cats!” Then, it looks at new pictures and starts recognizing cats on its own. It’s like teaching a super-smart pet that never forgets!</p><h4><strong>The Three Types of Machine Learning:</strong></h4><p>Now, let’s break down the types of machine learning, which are like different learning styles for our computer buddy:</p><p><strong>a. Supervised Learning</strong>: Here, we give computer-labeled examples to learn from. For instance, we’ll show it pictures of cats labeled “cat” and pictures of dogs labeled “dog.” The computer figures out the patterns and can identify cats and dogs in new pictures.</p><p><strong>b. Unsupervised Learning:</strong> In this style, we don’t label the examples. Instead, we ask the computer to look for hidden patterns by itself. For example, if we show it pictures of various animals without labels, it may group similar animals based on their features.</p><p><strong>c. Reinforcement Learning:</strong> This one’s like training a puppy to perform tricks. The computer, or agent, interacts with an environment and gets rewards when it does something right. Over time, it learns to take actions that bring the most rewards. It’s like learning through trial and error.</p><h3>What’s the procedure to make machines learn?</h3><p><strong>Preparing the Data:</strong></p><p>Before the computer starts learning, we need to prepare the data, like tidying up before a big event. Data might be messy with missing information or irrelevant stuff. So, we clean it up, organize it, and make sure it’s ready for the learning process.</p><p><strong>Picking the Right Model:</strong></p><p>Choosing the right machine learning model is like picking the perfect tool for the job. Different models have different strengths, and we want the one that suits our task best. It’s like using a wrench for bolts and a screwdriver for screws.</p><p><strong>Training and Testing:</strong></p><p>Alright, let’s start teaching the computer! We train it using the labeled examples, and it learns to make predictions. But we can’t just trust it blindly. We need to test its skills on new, unseen examples to see if it’s really learning or just pretending.</p><p><strong>Avoiding Traps: Overfitting and Underfitting</strong></p><p>Okay, there are a couple of traps our computer learners might fall into. Overfitting is when it memorizes the examples so well that it can’t handle new ones. It’s like memorizing answers without understanding the concepts. On the other hand, underfitting is when it doesn’t learn enough and performs poorly even in the training examples. We want our computer buddy to find the right balance, just like we do in our studies.</p><h3>Where Machine Learning Works Its Magic:</h3><p>Machine learning has superpowers that make our lives better in many ways:</p><ul><li>It’s behind those chatbots that seem almost human-like.</li><li>It’s what makes your favorite app recommend the perfect song or movie for you.</li><li>It helps doctors diagnose diseases more accurately and quickly.</li><li>It keeps our online transactions secure by detecting fraudulent activities.</li></ul><h3>Conclusion:</h3><p>So, there you have it! Machine learning is like having a smart, learning friend in the digital world. It’s all about using data to teach computers to make decisions and spot patterns on their own. Whether it’s recognizing cats, organizing animals, or helping doctors save lives, machine learning has transformed our lives in countless amazing ways. As technology keeps advancing, this friendly magic will keep surprising us with even more wonders!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f5d9568c8143" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What is Edit distance (Levenshtein distance)? ]]></title>
            <link>https://medium.com/@_ektagarg/what-is-edit-distance-levenshtein-distance-e4373d8adb3c?source=rss-bc66fc152ab0------2</link>
            <guid isPermaLink="false">https://medium.com/p/e4373d8adb3c</guid>
            <category><![CDATA[search-engines]]></category>
            <category><![CDATA[search-engine-optimizati]]></category>
            <category><![CDATA[fuzzy-search]]></category>
            <category><![CDATA[nlp]]></category>
            <category><![CDATA[computer-science]]></category>
            <dc:creator><![CDATA[Ekta Garg]]></dc:creator>
            <pubDate>Wed, 19 Jul 2023 15:00:22 GMT</pubDate>
            <atom:updated>2023-07-19T15:12:05.270Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/600/0*WkIsXg8Dlw5GAyU9.jpg" /></figure><p><strong>Edit distance</strong>, also known as <strong>Levenshtein distance</strong>, is a metric used to quantify the similarity between two strings. It measures the minimum number of single-character edits (insertions, deletions, or substitutions) required to transform one string into the other. The name “Levenshtein distance” comes from the Russian mathematician <strong>Vladimir Levenshtein</strong>, who first introduced the concept in 1965.</p><p>The three basic types of single-character edits are:</p><ol><li><strong>Insertion</strong>: Adding a single character to one of the strings.</li><li><strong>Deletion</strong>: Removing a single character from one of the strings.</li><li><strong>Substitution</strong>: Replacing a character in one of the strings with another character.</li></ol><blockquote>“In Levenshtein’s domain, edit’s the game 🎮,</blockquote><blockquote>Change, add, or delete 📛, each move has its name .</blockquote><blockquote>Distance📍 we find, the characters’ plight ,</blockquote><blockquote>By counting ⏲️ the edits, to make them unite.</blockquote><blockquote>Levenshtein distance, it measures the space 🛰️,</blockquote><blockquote>Transforming the strings, at a steady pace🚶.</blockquote><blockquote>The smallest of changes, we aim 🎯 to pursue ,</blockquote><blockquote>In words and in code, it’s a tool that’s true.” 👯</blockquote><h3><strong>Let’s understand it with an example</strong></h3><p>Consider the following two strings:</p><p><strong>String 1: “Saturday”</strong></p><p><strong>String 2: “Sunday”</strong></p><p>To find the edit distance between these two strings, we need to determine the minimum number of single-character edits (insertions, deletions, or substitutions) required to transform “Saturday” into “Sunday.”</p><p>Here’s how we can do it step by step:</p><h4><strong>Step 1:</strong> Compare the first characters of both strings:</h4><ul><li>The first character of String 1 is “S.”</li><li>The first character of String 2 is “S.”</li></ul><p>The characters are the same, so no edit is needed. Our strings remain the same:</p><p><strong>S</strong>aturday<strong> → S</strong>unday</p><h4><strong>Step 2:</strong> Compare the second characters of both strings:</h4><ul><li>The second character of String 1 is “a.”</li><li>The second character of String 2 is “u.”</li></ul><p>Since the characters are different, we need to perform a substitution operation to change “a” to “u.” Our strings now look like this:</p><p>S<strong>u</strong>turday<strong> → </strong>S<strong>u</strong>nday</p><p><strong>Step 3:</strong> Compare the third characters of both strings:</p><ul><li>The third character of String 1 is “t.”</li><li>The third character of String 2 is “n.”</li></ul><p>Again, the characters are different, so we need to perform a substitution operation to change “t” to “n.” Our strings become:</p><p>Su<strong>n</strong>urday<strong> → </strong>Su<strong>n</strong>day</p><h4><strong>Step 4:</strong> Compare the fourth characters of both strings:</h4><ul><li>The fourth character of String 1 is “u.”</li><li>The fourth character of String 2 is “d.”</li></ul><p>Once more, the characters are different, so we need to perform a substitution operation to change “u” to “d.” Our strings now look like this:</p><p>Sun<strong>d</strong>rday<strong> → </strong>Sun<strong>d</strong>ay</p><p><strong>Step 5:</strong> Compare the fifth characters of both strings:</p><ul><li>The fifth character of String 1 is “r.”</li><li>The fifth character of String 2 is “a.”</li></ul><p>Yet again, the characters are different, so we need to perform a substitution operation to change “r” to “a.” Our strings become:</p><p>Sund<strong>a</strong>day<strong> → </strong>Sund<strong>a</strong>y</p><p><strong>Step 6:</strong> Compare the sixth characters of both strings:</p><ul><li>The sixth character of String 1 is “d.”</li><li>The sixth character of String 2 is missing.</li></ul><p>Since String 2 is shorter than String 1, we need to perform a <strong>deletion</strong> operation to remove the “d” from String 1. Our strings now look like this:</p><p>Sunda<strong>y → </strong>Sunda<strong>y</strong></p><p>Now, we have successfully transformed “Saturday” into “Sunday” using four operations: four substitutions and one deletion. Therefore, the edit distance between “Saturday” and “Sunday” is 5.</p><p><strong>Where to apply edit distance?</strong></p><ul><li>Edit distance has various applications in fields like <strong>computer science</strong>, <strong>natural language processing</strong>, <strong>bioinformatics</strong>, and more.</li><li>It is widely used in <strong>spell-checking</strong>, <strong>DNA sequence comparison</strong>, <strong>plagiarism detection</strong>, and <strong>string similarity comparison</strong> in general. By calculating the edit distance between two strings, we can understand how similar or different they are based on the number of operations needed to transform one string into the other.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e4373d8adb3c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why should you choose GO for your next project?]]></title>
            <link>https://medium.com/@_ektagarg/why-should-you-choose-go-for-your-next-project-f4816fda79c3?source=rss-bc66fc152ab0------2</link>
            <guid isPermaLink="false">https://medium.com/p/f4816fda79c3</guid>
            <category><![CDATA[golang-development]]></category>
            <category><![CDATA[golang]]></category>
            <category><![CDATA[go]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[development]]></category>
            <dc:creator><![CDATA[Ekta Garg]]></dc:creator>
            <pubDate>Mon, 08 May 2023 18:40:37 GMT</pubDate>
            <atom:updated>2023-05-08T18:40:37.184Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*BVWpHsEV0Nqlr7D6.png" /></figure><p>Go is a programming language that was created by Google in 2007. It is an open-source language becoming increasingly popular for its simplicity, speed, and ability to handle concurrency.</p><p>There are several reasons why you might choose to use Go for your programming projects. Here are some of the key benefits:</p><ol><li><strong>Concurrency</strong>: Go was designed from the ground up to be a concurrent language, which means it is well-suited for applications that need to handle multiple tasks simultaneously. Go includes built-in support for goroutines, which are lightweight threads that can be used to perform tasks concurrently, and channels, which allow for safe communication between goroutines. This makes it easy to write code that can take advantage of multiple CPU cores, resulting in faster and more efficient programs.</li><li><strong>Speed</strong>: Go is a compiled language, which means that it is typically faster than interpreted languages like Python or Ruby. The Go compiler produces machine code that can be executed directly by the computer’s processor, resulting in faster execution times.</li><li><strong>Simplicity</strong>: Go was designed to be easy to learn and use. The syntax is straightforward and easy to read, and the language includes a minimal set of features. This makes it a good choice for beginners, as well as experienced programmers who want to quickly develop efficient and effective code.</li><li><strong>Safety</strong>: Go includes several features that make it easier to write safe and secure code. For example, it includes strong typing, which can help prevent type-related errors, and a garbage collector, which helps prevent memory leaks. Additionally, Go’s emphasis on concurrency means that it includes built-in support for synchronization and mutual exclusion, making it easier to write code that is free from race conditions and other concurrency-related bugs.</li><li><strong>Large standard library</strong>: Go includes a large standard library that provides support for a wide range of tasks, from handling HTTP requests to working with databases. This means that you can often accomplish complex tasks without needing to use third-party libraries or frameworks.</li><li><strong>Cross-platform compatibility</strong>: Go is designed to be cross-platform compatible, which means that code written on one platform can be easily ported to other platforms without modification. This makes it easier to write code that works on multiple operating systems and devices.</li></ol><p>Overall, Go is a powerful and versatile programming language well-suited for a wide range of applications. Its emphasis on concurrency, speed, simplicity, safety, and a large standard library makes it a good choice for everything from web development to system programming.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f4816fda79c3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Things to keep in mind while picking a partition key in DynamoDB]]></title>
            <link>https://medium.com/@_ektagarg/things-to-keep-in-mind-while-picking-a-partition-key-in-dynamodb-ed76e4bf5a1e?source=rss-bc66fc152ab0------2</link>
            <guid isPermaLink="false">https://medium.com/p/ed76e4bf5a1e</guid>
            <category><![CDATA[dynamodb]]></category>
            <category><![CDATA[database]]></category>
            <category><![CDATA[nosql]]></category>
            <category><![CDATA[partition]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[Ekta Garg]]></dc:creator>
            <pubDate>Mon, 20 Mar 2023 19:07:13 GMT</pubDate>
            <atom:updated>2023-03-20T19:07:13.927Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*DwhSg_L-dr_VmxCZ.jpg" /><figcaption>architectural glass partitions</figcaption></figure><p><strong>Primary Key:</strong></p><p>In a DynamoDB table, we will always have a primary key. The primary can consist of just a partition key (Simple Primary Key) or the combination of a partition key and a sort key (Composite Primary Key).</p><p><strong>Partition and Partition key:</strong></p><p>Partition is simply a logical separation or group of machines that are hosting your data for instance if you have hundreds of GB of data in your table, DynamoDB may create multiple partitions based on a key to separate out the data across these partitions.</p><p>When a query comes in for a particular key, dynamo uses a particular key’s value which is called the partition key as the input to a hashing function and spits out the location of the record. Using this technique, dynamo can quickly go to the location and fetch the records with very very high performance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OPVlwRwcIDjf1jjhwLtobQ.png" /><figcaption>DynamoDB cart table of an e-grocery company</figcaption></figure><p>This diagram shows the organization of cart records placed by a user in a Cart table. Each order is uniquely identified by a combination of userID and cartID.</p><p><strong>Why choosing the right partition key is important?</strong></p><p><strong>Limit your access pattern:</strong> If you’re designing a table for the long term, it is essential to be aware of the implications of picking a certain type of key or key combination because it can actually limit the type of queries you can perform on your table.</p><p><strong>Throttling</strong>: It can occur when you have a bad table design that’s conducive to hot partitions or, in simple terms, When the amount of resources you’re trying to use exceeds the amount that you’ve provisioned on the table.</p><p>Things to keep in mind, when choosing a partition key in DynamoDB:</p><ol><li><strong>Even distribution</strong>: Select a partition key that ensures that the data is evenly distributed across its partitions. This can help avoid hot partitions, leading to throttling of requests and poor performance.</li><li><strong>Data access patterns</strong>: Choose a partition key that aligns with your data access patterns. This can help improve query performance and minimize the amount of data scanned.</li><li><strong>Uniqueness</strong>: The partition key should be unique across all items in the table. This is because all items with the same partition key are stored on the same partition.</li><li><strong>Avoid frequent updates</strong>: Choose a partition key that is not frequently updated. Frequent updates to the same partition key can lead to hot partitions and poor performance.</li><li><strong>Large cardinality</strong>: Choose a partition key with a large number of distinct values relative to the number of items in the table. This can help ensure the even distribution of data across partitions.</li></ol><p>By keeping these considerations in mind, you can select an appropriate partition key for your DynamoDB table that ensures good performance and scalability.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ed76e4bf5a1e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Create Splitwise App in Go]]></title>
            <link>https://medium.com/@_ektagarg/create-splitwise-app-in-go-45795b609b3b?source=rss-bc66fc152ab0------2</link>
            <guid isPermaLink="false">https://medium.com/p/45795b609b3b</guid>
            <category><![CDATA[splitwise]]></category>
            <category><![CDATA[golang-development]]></category>
            <category><![CDATA[go]]></category>
            <category><![CDATA[golang]]></category>
            <category><![CDATA[go-programming]]></category>
            <dc:creator><![CDATA[Ekta Garg]]></dc:creator>
            <pubDate>Fri, 30 Dec 2022 20:42:18 GMT</pubDate>
            <atom:updated>2022-12-30T20:42:18.688Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*OsLEjNOkPulUwpez.jpg" /><figcaption>Image Credits: <a href="https://www.livemint.com/">https://www.livemint.com/</a></figcaption></figure><p><strong>Splitwise</strong> is a financial management app that helps people easily split expenses with friends and family. With Splitwise, users can create expenses for things like rent, groceries, or a night out, and then specify which friends or family members are involved in the expense. The app then calculates how much each person owes and keeps track of who has paid their share.</p><p>Splitwise also has features for settling debts between users, generating reports, and integrating with payment systems such as PayPal or Venmo. This makes it easier for people to track shared expenses and ensure that everyone is paid back fairly.</p><p>To create a Splitwise app in Go (also known as Golang), you’ll need to have a basic understanding of the Go programming language, Here’s a <strong>high-level overview</strong> of the steps you might take:</p><ol><li>Design your <strong>app’s architecture</strong>. This will involve deciding how to structure your code, what packages and dependencies you’ll need, and how you’ll handle things like data storage and user authentication.</li><li>Implement the <strong>app’s core functionality</strong>. This will include writing code to handle things like creating and managing expenses, splitting costs between users, and generating reports.</li><li>Create <strong>a user interface</strong> for your app. This will involve writing HTML, CSS, and JavaScript code to create a web-based interface that users can interact with.</li><li>Test your app thoroughly. This will involve writing <strong>unit tests and integration tests</strong> to ensure that your app is reliable and performs as expected.</li></ol><p>Keep in mind that this is just a high-level overview, and there will be many details and challenges to address as you work on your Splitwise app. It’s a good idea to start small and gradually add features as you become more comfortable with Go and web development.</p><p><strong>Backend of splitwise app :</strong></p><p>The back-end of a Splitwise app is responsible for handling the business logic and data storage for the app. This might include handling user authentication, creating and managing expenses, calculating splits, and generating reports. We are going to write basic code for splitting the money but in actual implementation, you’ll have to use a database to store data such as user accounts, expenses, and payment information.</p><pre>package main<br><br>import &quot;fmt&quot;<br><br>// User represents a user in the app.<br>type User struct {<br> ID int<br> Name string<br>}<br><br>// Expense represents an expense in the app.<br>type Expense struct {<br> ID int<br> Description string<br> Amount float64<br> Payers []User<br> Split float64<br>}<br><br>func splitMoney(expense Expense) []float64 {<br> splitAmounts := make([]float64, len(expense.Payers))<br> for i, payer := range expense.Payers {<br>  splitAmounts[i] = expense.Amount / float64(len(expense.Payers))<br> }<br> return splitAmounts<br>}<br><br>func main() {<br> // Create some users.<br> alice := User{ID: 1, Name: &quot;Alice&quot;}<br> bob := User{ID: 2, Name: &quot;Bob&quot;}<br> charlie := User{ID: 3, Name: &quot;Charlie&quot;}<br><br> // Create an expense and split it evenly between the users.<br> expense := Expense{<br>  ID: 1,<br>  Description: &quot;Dinner at restaurant&quot;,<br>  Amount: 100,<br>  Payers: []User{alice, bob, charlie},<br> }<br><br> splitAmounts := splitMoney(expense)<br> for i, payer := range expense.Payers {<br>  fmt.Printf(&quot;%s owes $%.2f\n&quot;, payer.Name, splitAmounts[i])<br> }<br>}</pre><p>This is just a high-level overview of the main components and technologies that might be involved in building a Splitwise app. There are many other details and considerations that would need to be addressed as part of the app’s architecture, such as security, scalability, and performance.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=45795b609b3b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Comparing SQS and Kafka: Understanding the Differences]]></title>
            <link>https://medium.com/@_ektagarg/comparing-sqs-and-kafka-understanding-the-differences-b58666d7e658?source=rss-bc66fc152ab0------2</link>
            <guid isPermaLink="false">https://medium.com/p/b58666d7e658</guid>
            <category><![CDATA[sqs]]></category>
            <category><![CDATA[message-queue]]></category>
            <category><![CDATA[kafka]]></category>
            <dc:creator><![CDATA[Ekta Garg]]></dc:creator>
            <pubDate>Thu, 29 Dec 2022 11:44:21 GMT</pubDate>
            <atom:updated>2022-12-29T11:44:21.755Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*l3rfRczmf4cYSvgu" /><figcaption>Image Credits: <a href="https://www.freepik.com/free-vector/queue-tourists-with-baggage-departure-check-desk-airport-lounge-flat-vector-illustration_26764877.htm">https://www.freepik.com/</a></figcaption></figure><p>If you’re working with message queue systems, you’ve likely come across Amazon Simple Queue Service (SQS) and Apache Kafka. Both of these tools are designed to enable the asynchronous exchange of data between systems, but they have some key differences that you should be aware of.</p><p><strong>The main difference between SQS and Kafka is the type of message delivery they offer.</strong></p><p><strong>SQS</strong> is a fully managed message queue service that offers two types of message delivery: <strong>standard and FIFO</strong> (first-in, first-out). Standard delivery allows for messages to be delivered more than once, while FIFO delivery ensures that messages are delivered in the order they were sent and without duplication.</p><p>At a high level, SQS stores and transports messages using a distributed system of servers. When a message is sent to an SQS queue, it is stored on one of these servers until it is retrieved by a consumer. This allows for the decoupling of producers and consumers, as the producer does not need to wait for the consumer to be available in order to send the message.</p><p><strong>Kafka</strong>, on the other hand, is a distributed streaming platform that allows for the <strong>real-time processing of streaming data</strong>. It offers a publish-subscribe model for message delivery, which means that messages are sent to a topic and consumed by subscribers. Kafka also offers the ability to store messages for a configurable amount of time, which can be useful for handling late-arriving data or re-processing data.</p><p>At a high level, Kafka consists of a set of brokers that are responsible for storing and distributing messages. When a producer sends a message to a Kafka topic, the broker stores the message and makes it available to consumers. Consumers can then retrieve the message and process it as needed.</p><p><strong>Another major difference between SQS and Kafka is the level of control they offer.</strong></p><p><strong>SQS</strong> is a fully managed service, which means that Amazon takes care of the underlying infrastructure and scaling. This can be convenient, but it also means that you have less control over the underlying architecture.</p><p><strong>Kafka</strong>, on the other hand, is a self-managed platform, which gives you more control over the infrastructure and the ability to customize the setup to meet your specific needs.</p><p>Ultimately, the choice between SQS and Kafka will depend on your specific use case. If you need a fully managed message queue service with options for standard and FIFO delivery, SQS may be the right choice. On the other hand, if you need a distributed streaming platform with the ability to store and process real-time data, Kafka may be a better fit. It’s important to carefully evaluate your requirements and choose the tool that best meets your needs.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b58666d7e658" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>