<?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: Temp-insta</title>
    <description>The latest articles on DEV Community by Temp-insta (@harryholland).</description>
    <link>https://dev.to/harryholland</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%2F734374%2Ffc803c16-10b2-4ae4-9e73-2379226b47c7.jpeg</url>
      <title>DEV Community: Temp-insta</title>
      <link>https://dev.to/harryholland</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/harryholland"/>
    <language>en</language>
    <item>
      <title>The End of the "Lonely" AI Coder: A Look at Dropstone v3.0.5</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Sun, 08 Feb 2026 04:46:35 +0000</pubDate>
      <link>https://dev.to/harryholland/the-end-of-the-lonely-ai-coder-a-look-at-dropstone-v305-3cli</link>
      <guid>https://dev.to/harryholland/the-end-of-the-lonely-ai-coder-a-look-at-dropstone-v305-3cli</guid>
      <description>&lt;p&gt;Let’s be honest for a second. The current state of AI coding tools is incredible, but it is also surprisingly lonely.&lt;/p&gt;

&lt;p&gt;It is 2026. We are living in the golden age of &lt;strong&gt;Cursor&lt;/strong&gt;, &lt;strong&gt;Anitgravity&lt;/strong&gt;, and the &lt;strong&gt;Claude Code&lt;/strong&gt; CLI. We have models like &lt;strong&gt;Claude Opus 4.6&lt;/strong&gt; that can reason through complex refactors that would have melted a GPU two years ago. We have &lt;strong&gt;Antigravity&lt;/strong&gt; for deep Pythonic reasoning.&lt;/p&gt;

&lt;p&gt;But there is a glaring architectural flaw in almost all of them: &lt;strong&gt;They are single-player experiences.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are using Cursor, it is &lt;em&gt;you&lt;/em&gt; and &lt;em&gt;the bot&lt;/em&gt;. If a junior dev needs help, you’re pasting stack traces into Slack. If a Product Manager wants an update, you send a screenshot. Software engineering is inherently multiplayer, yet our most powerful tools are isolated silos.&lt;/p&gt;

&lt;p&gt;That changes with &lt;strong&gt;Dropstone&lt;/strong&gt;. With the release of &lt;strong&gt;Share Chat (v3.0.5)&lt;/strong&gt;, the team at Blankline isn't just updating an editor; they are attempting to fix the "70% Wall" that kills most AI projects.&lt;/p&gt;

&lt;p&gt;Here is why Dropstone might be the most interesting dev tool of 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: The "70% Wall"
&lt;/h2&gt;

&lt;p&gt;We have all been there with "text-to-app" tools like &lt;strong&gt;Lovable&lt;/strong&gt;, &lt;strong&gt;Bolt&lt;/strong&gt;, or &lt;strong&gt;Replit&lt;/strong&gt;. They feel like magic for the first hour. You prompt, the AI builds, and you feel invincible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then you hit the 70% Wall.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Around 70% completion, complexity spikes. The AI creates a subtle bug. The non-technical founder doesn't know how to debug a React hydration error. They are stranded. The code is locked in a web container. There is no way for a real developer to jump in and fix the last 30% without exporting everything and starting over.&lt;/p&gt;

&lt;p&gt;Dropstone removes this wall by putting the &lt;strong&gt;Founder&lt;/strong&gt;, the &lt;strong&gt;Developer&lt;/strong&gt;, and the &lt;strong&gt;AI Agents&lt;/strong&gt; in the same room.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Scenario:&lt;/strong&gt; A founder describes a feature in chat. An AI agent (running Claude Opus 4.6) builds it live. It hits a complex edge case. The developer, watching in the same workspace, steps in, modifies the specific logic block, and hands control back to the AI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No git commits, no "let me pull your branch," just real-time collaboration.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature Spotlight: Share Chat &amp;amp; Horizon Mode
&lt;/h2&gt;

&lt;p&gt;Dropstone is distinct because it isn't just a wrapper around the OpenAI API; it's a desktop application built on a proprietary runtime called the &lt;strong&gt;D3 Engine&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Multiplayer is the Default
&lt;/h3&gt;

&lt;p&gt;With &lt;strong&gt;Share Chat&lt;/strong&gt;, you can generate a deep link to your local workspace. Anyone with the link can join:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developers&lt;/strong&gt; get full access (terminal, LSP, debugger).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stakeholders&lt;/strong&gt; get a simplified Chat + Live Preview view.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Agents&lt;/strong&gt; are actual participants.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Imagine 10 engineers and 5 autonomous agents working on a monorepo simultaneously. The humans handle architecture; the agents handle boilerplate and refactoring in the background. It’s like Google Docs, if Google Docs could write its own code.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Horizon Mode: Agents Talking to Agents 🤖💬🤖
&lt;/h3&gt;

&lt;p&gt;This is where it gets sci-fi. In most tools, the AI waits for you to type. In &lt;strong&gt;Horizon Mode&lt;/strong&gt;, Dropstone deploys background agents that coordinate with &lt;em&gt;each other&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent A&lt;/strong&gt; explores a solution path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent B&lt;/strong&gt; reviews Agent A's code against the project's style guide.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent C&lt;/strong&gt; writes the unit tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They communicate via shared &lt;strong&gt;Workspace Memory&lt;/strong&gt;, delegating subtasks without you needing to micromanage them.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Tech: Why It Remembers Everything
&lt;/h2&gt;

&lt;p&gt;Everyone claims "large context windows." But Gemini’s 1M tokens or Claude’s massive recall have a flaw: raw token windows are dumb. They forget as soon as the text scrolls off.&lt;/p&gt;

&lt;p&gt;Dropstone uses &lt;strong&gt;Logic-Regularized Compression&lt;/strong&gt;. It separates active workspace state from history, compressing trajectory vectors (variables, definitions, logic gates) at a &lt;strong&gt;50:1 ratio&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Result:&lt;/strong&gt; Dropstone remembers code from three weeks ago, or a file you haven't opened in days, without hallucinating. It builds a persistent "Project Brain"—episodic, semantic, and procedural memory that stays with your repo.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Verdict: Dropstone vs. The Giants
&lt;/h2&gt;

&lt;p&gt;Should you switch? It depends on how you work.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Dropstone&lt;/th&gt;
&lt;th&gt;Cursor&lt;/th&gt;
&lt;th&gt;Claude Code / Antigravity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Collaboration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Multiplayer (Real-time)&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;❌ Single-player&lt;/td&gt;
&lt;td&gt;❌ Single-player&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Infinite (D3 Logic Compression)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Token Window Limit&lt;/td&gt;
&lt;td&gt;Context Window&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Persistent Project Brain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Resets per session&lt;/td&gt;
&lt;td&gt;Static &lt;code&gt;.md&lt;/code&gt; files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Horizon Mode (Swarm)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi Agent&lt;/td&gt;
&lt;td&gt;Multi Agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Offline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Full Local (Ollama)&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;❌ Cloud Required&lt;/td&gt;
&lt;td&gt;❌ Cloud Required&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;My Take:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stick with Cursor&lt;/strong&gt; if you are a solo developer who just wants the fastest possible inline autocomplete.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch to Dropstone&lt;/strong&gt; if you work in a team, need to handle massive context, or want AI agents that work &lt;em&gt;with&lt;/em&gt; you rather than just &lt;em&gt;for&lt;/em&gt; you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/RqHS6_vOyH4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  A Note on Privacy
&lt;/h3&gt;

&lt;p&gt;One of the coolest features is that Dropstone supports &lt;strong&gt;Ollama&lt;/strong&gt; out of the box. You can run Llama 3 or DeepSeek entirely offline on your machine. For enterprise teams worried about IP leakage, this is a massive selling point.&lt;/p&gt;

&lt;p&gt;The tool is built by &lt;strong&gt;Blankline&lt;/strong&gt;, a research team based in Chennai known for publishing papers on computational physics and infrastructure (Project CELSIUS). They aren't just a UI wrapper shop, and it shows in the architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dropstone v3.0.5 is available now at &lt;a href="https://www.dropstone.io" rel="noopener noreferrer"&gt;dropstone.io&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Is this the end of "Context Rot"? A first look at the Dropstone Recursive Swarm architecture.</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Fri, 26 Dec 2025 05:24:50 +0000</pubDate>
      <link>https://dev.to/harryholland/is-this-the-end-of-context-rot-a-first-look-at-the-dropstone-recursive-swarm-architecture-goc</link>
      <guid>https://dev.to/harryholland/is-this-the-end-of-context-rot-a-first-look-at-the-dropstone-recursive-swarm-architecture-goc</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Full Disclosure:&lt;/strong&gt; I don't work for the team at Blankline, but I’ve been following their recent whitepapers on "Linearity Barriers". I finally got to test the Dropstone v2 runtime, and I think we need to talk about what’s happening here.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We are currently seeing a lot of "AI Washing"—products that claim to be "General Intelligence" but are just basic wrappers. Dropstone is different. It doesn't claim to be a "God Model"; it's a fundamental rethink of how an AI agent navigates a codebase.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;The "Superhuman" Capability (Wait, hear me out)&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;I usually hate using the word "superhuman," but there is a specific metric where this topology moves past what a single human (or a single LLM) can do: &lt;strong&gt;Parallel Trajectory Search&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you give Dropstone a task, it doesn't just guess a solution. It spawns a "Recursive Swarm"—effectively thousands of scout agents—to explore divergent timelines in the background.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Why this isn't just another wrapper:&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Autonomous Entropy Pruning:&lt;/strong&gt; Instead of filling your context window with every thought, it calculates "uncertainty" (semantic entropy). If a scout agent gets confused, that entire timeline is killed before it hits your history.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stable Long-Horizon Engineering:&lt;/strong&gt; I watched this thing handle a complex refactor that took nearly 24 hours of autonomous runtime. Usually, an agent would have "dementia" by hour two. This didn't.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Check out the architecture breakdown from the founder:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2004349561775837406-401" src="https://platform.twitter.com/embed/Tweet.html?id=2004349561775837406"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2004349561775837406-401');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2004349561775837406&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;My Verdict&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;We aren't at AGI yet, but we are entering a phase of &lt;strong&gt;High-Competence Agentic Runtimes&lt;/strong&gt;. If you are tired of your agents looping and apologizing, the "Recursive Swarm" approach might be the only way forward for enterprise-grade AI engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can see the beta at &lt;a href="https://dropstone.io" rel="noopener noreferrer"&gt;dropstone.io&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>python</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>This AI will code for you!</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Sun, 15 Sep 2024 18:01:18 +0000</pubDate>
      <link>https://dev.to/harryholland/this-ai-will-code-for-you-okc</link>
      <guid>https://dev.to/harryholland/this-ai-will-code-for-you-okc</guid>
      <description>&lt;p&gt;Dropstone AI is a tool designed to simplify programming. It uses a dual-context system, allowing you to input two parts of context to help handle and work with your code. Whether you need to implement features, compare code, debug issues, or resolve errors, Dropstone makes it easy. There are so many possibilities with this tool. Give it a try and let me know in the comments.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/p-3pCKQolX8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://dropstone.blankline.org/" rel="noopener noreferrer"&gt;https://dropstone.blankline.org/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Here is The Resume that got $450,000 job at Google</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Tue, 18 Jun 2024 04:45:29 +0000</pubDate>
      <link>https://dev.to/harryholland/here-is-the-resume-that-got-450000-job-at-google-15p2</link>
      <guid>https://dev.to/harryholland/here-is-the-resume-that-got-450000-job-at-google-15p2</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Z5CmnAM1t40"&gt;
&lt;/iframe&gt;
&lt;br&gt;
I watched a YouTube video called "The Resume that got me $450,000 job at Google," and it was very helpful. The video explained how to make a great resume that can catch the attention of big tech companies. Here are the main points I learned:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Show Results: Highlight achievements with numbers to show your impact.&lt;/li&gt;
&lt;li&gt;Match the Job: Use the same keywords and skills to tailor your resume to fit the job description.&lt;/li&gt;
&lt;li&gt;Be Clear and Short: Organize your resume so it's easy to read and keep it concise.&lt;/li&gt;
&lt;li&gt;Grab Attention: Write a strong summary at the top to catch the recruiter's eye.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The video's advice and examples can improve your resume and help you stand out in a tough job market.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Reinforcement Learning in 5 Minutes</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Wed, 17 Jan 2024 10:51:44 +0000</pubDate>
      <link>https://dev.to/harryholland/reinforcement-learning-in-5-minutes-46j2</link>
      <guid>https://dev.to/harryholland/reinforcement-learning-in-5-minutes-46j2</guid>
      <description>&lt;p&gt;We want our AI model to make right decisions, and one powerful approach to achieve this is through reinforcement learning. Reinforcement Learning is a subfield of machine learning that involves training an agent to make decisions by selecting actions from its action space within a specific environment, with the goal of maximizing cumulative rewards over time.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/2ArU1uE9QLo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do We Define Reinforcement Learning?
&lt;/h2&gt;

&lt;p&gt;Reinforcement Learning is a subfield of machine learning that teaches an agent how to choose an action from its action space, within a particular environment, in order to maximize rewards over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reinforcement Learning has four essential elements:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Agent. The program you train, with the aim of doing a job you specify.&lt;/li&gt;
&lt;li&gt;Environment. The world, real or virtual, in which the agent performs actions.&lt;/li&gt;
&lt;li&gt;Action. A move made by the agent, which causes a status change in the environment.&lt;/li&gt;
&lt;li&gt;Rewards. The evaluation of an action, which can be positive or negative.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Supervised, Unsupervised, and Reinforcement Learning: What are the Differences?
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Difference #1: Static Vs.Dynamic
&lt;/h2&gt;

&lt;p&gt;The goal of supervised and unsupervised learning is to search for and learn about patterns in training data, which is quite static. RL, on the other hand, is about developing a policy that tells an agent which action to choose at each step — making it more dynamic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Difference #2: No Explicit Right Answer
&lt;/h2&gt;

&lt;p&gt;In supervised learning, the right answer is given by the training data. In Reinforcement Learning, the right answer is not explicitly given: instead, the agent needs to learn by trial and error. The only reference is the reward it gets after taking an action, which tells the agent when it is making progress or when it has failed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Difference #3: RL Requires Exploration
&lt;/h2&gt;

&lt;p&gt;A Reinforcement Learning agent needs to find the right balance between exploring the environment, looking for new ways to get rewards, and exploiting the reward sources it has already discovered. In contrast, supervised and unsupervised learning systems take the answer directly from training data without having to explore other answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Difference #4: RL is a Multiple-Decision Process
&lt;/h2&gt;

&lt;p&gt;Reinforcement Learning is a multiple-decision process: it forms a decision-making chain through the time required to finish a specific job. Conversely, supervised learning is a single-decision process: one instance, one prediction.&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://www.epicprogrammer.org/reinforcement-learning/"&gt;https://www.epicprogrammer.org/reinforcement-learning/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>python</category>
    </item>
    <item>
      <title>A New Programming Language for AI Developers</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Mon, 08 Jan 2024 13:15:21 +0000</pubDate>
      <link>https://dev.to/harryholland/a-new-programming-language-for-ai-developers-mlb</link>
      <guid>https://dev.to/harryholland/a-new-programming-language-for-ai-developers-mlb</guid>
      <description>&lt;p&gt;Mojo is a Programming Language Designed by Chris Lattner, the creator of the Swift programming language and LLVM Compiler Infrastructure, Mojo presents a novel solution for Python’s speed constraints. Despite its popularity, Python often lags in performance, making languages like C and C++ preferable for high-speed, high-performance tasks. In response, Mojo was born to integrate Python’s usability with C’s performance.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/wY2ojfJABLA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;But what does this mean for the average web developer? Mojo has an astonishing 35,000x speed advantage over Python, substantially outpacing competitors like PyPy, Scala, and C++.&lt;/p&gt;

&lt;p&gt;Here’s a benchmark test result of Mojo versus other languages, running the Mandelbrot algorithm on an AWS r7iz.metal-16xl instance:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HCNUbUhm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gewqie017kikcmgjpuxi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HCNUbUhm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gewqie017kikcmgjpuxi.png" alt="A benchmark screenshot of Mojo vs. other languages from the Modular website" width="730" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This leap in AI programming opens up new possibilities for developing high-performance, AI-powered web applications without sacrificing the familiarity of Python’s syntax and extensive libraries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mojo lang: Designed for the future of AI
&lt;/h2&gt;

&lt;p&gt;A significant selling point for Mojo is its compatibility with AI hardware. It leverages multilevel intermediate representation (MLIR) to scale various hardware types, including GPUs running CUDA and similar hardware, without adding complexity.&lt;/p&gt;

&lt;p&gt;Mojo’s design also ensures portability across several hardware platforms and specialized accelerators. This makes it a great choice for developing applications that need to run on a variety of devices.&lt;/p&gt;

&lt;p&gt;One of the reasons Python is so beloved in the development community is its robust ecosystem, and Mojo takes this legacy forward. As a Python superset, it offers smooth access to Python libraries like NumPy. This means you can jump into AI development using tools you’re already familiar with.&lt;/p&gt;

&lt;p&gt;To start your journey with Mojo, head over to the Mojo playground, an interactive platform provided by Modular that allows developers to run Mojo code. As of May 2023, Mojo is still under development, but you can experience its functionalities in this playground.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing your first Mojo code
&lt;/h2&gt;

&lt;p&gt;Mojo’s syntax is heavily influenced by Python. For instance, a “Hello, World!” program in Mojo looks exactly like one in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello Mojo!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Variables in Mojo
&lt;/h2&gt;

&lt;p&gt;Mojo supports let and var declarations, which introduce a new scoped runtime value. let is used to declare immutable variables, while var is for mutable ones. Here is a basic example of how you can use these declarations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;addNumbers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;num2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;let&lt;/span&gt; &lt;span class="nb"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;num1&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;num2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;let&lt;/span&gt; &lt;span class="n"&gt;newNum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;num2&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newNum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;addNumbers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With let and var declarations, you can also specify the variable type. Here’s an example with several data types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;guessLuckyNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;let&lt;/span&gt; &lt;span class="n"&gt;luckyNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;37&lt;/span&gt;
    &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;StringLiteral&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;guess&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;luckyNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You guessed right!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You guessed wrong!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="nf"&gt;guessLuckyNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using struct types
&lt;/h2&gt;

&lt;p&gt;In Mojo, you can build safe high-level abstractions on top of low-level data layout controls with the struct type. In programming, a struct is a data type that allows for the combination of different kinds of data items, but which can be manipulated as a single unit.&lt;/p&gt;

&lt;p&gt;In the Mojo programming language, struct types are a bit similar to classes in other object-oriented languages. They can have methods and properties, but unlike classes, structs in Mojo are statically bound at compile time, and they are directly inserted or “inlined” into their container without needing a separate memory reference, or “indirection.”&lt;/p&gt;

&lt;p&gt;Here’s a simple definition of a struct:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;MyPair&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Int&lt;/span&gt;
    &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Int&lt;/span&gt;
    &lt;span class="n"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inout&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Mojo promises a new era of efficiency and robustness for AI developers. By combining the simplicity of Python with C’s high-performance capabilities, Mojo aims to democratize AI programming and simplify the development process.&lt;/p&gt;

&lt;p&gt;As we eagerly anticipate Mojo’s public launch, it’s the perfect time to explore its possibilities through the Mojo playground and kickstart your journey into the future of AI development.&lt;/p&gt;

&lt;p&gt;Article Inspired from: &lt;a href="https://www.epicprogrammer.org/mojo-programming-language-for-ai-developers/"&gt;https://www.epicprogrammer.org/mojo-programming-language-for-ai-developers/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Build a Portfolio Website with Next.js and Tailwind CSS</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Sun, 20 Aug 2023 14:09:34 +0000</pubDate>
      <link>https://dev.to/harryholland/build-a-portfolio-website-with-nextjs-and-tailwind-css-4ln3</link>
      <guid>https://dev.to/harryholland/build-a-portfolio-website-with-nextjs-and-tailwind-css-4ln3</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/f-V-56vBU9g"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;You can use your portfolio to showcase your projects, your education, share re-usable code snippets with the world, provide helpful resources, and write your own blogs. There are countless things that you can do with your own website.&lt;/p&gt;

&lt;p&gt;I built a template that you can use to create, edit, and deploy your own portfolio website for free on the internet in no time. And if you want to build your own version from scratch, I'll show you how in this article.&lt;/p&gt;

&lt;p&gt;So let's dive in – I'll show you what technology I used, how I structured the portfolio, and I'll break it down by section so you can see how each part works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;Let's talk about the tech stack I used to build this template:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js - Bundler&lt;/li&gt;
&lt;li&gt;React - UI Library&lt;/li&gt;
&lt;li&gt;Tailwind CSS - CSS Framework&lt;/li&gt;
&lt;li&gt;Framer Motion - Animation Library&lt;/li&gt;
&lt;li&gt;GSAP - Animation Library&lt;/li&gt;
&lt;li&gt;Bun - Task Runner&lt;/li&gt;
&lt;li&gt;ESLint - Linter&lt;/li&gt;
&lt;li&gt;Prettier - Code Formatter&lt;/li&gt;
&lt;li&gt;Blobity - Cursor Effects&lt;/li&gt;
&lt;li&gt;usehooks-ts - Custom React Hooks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Next.js?
&lt;/h2&gt;

&lt;p&gt;Because it is a React framework with Server-Side Rendering, which is good for SEO (Good for us if we get found on Google, right?).&lt;/p&gt;

&lt;p&gt;Also, Next.js helps us build blazing-fast websites along with benefits such as Image optimization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why tailwindcss?
&lt;/h2&gt;

&lt;p&gt;Because TailwindCSS is a framework which reduces a lot of styling efforts. It has low level CSS classes that you can directly embed into the HTML code.&lt;/p&gt;

&lt;p&gt;Not only that, it comes with amazing support for responsiveness. For example &lt;/p&gt; signifies that text will be small on smaller screens and xl on medium to large screens.

&lt;p&gt;Finally, we are going to deploy the application on Vercel. Vercel gives us an easy way to deploy our application with CI/CD. The code is pushed to a remote GitHub repository and with every push, it's deployed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Animated Component: A Glimpse
&lt;/h2&gt;

&lt;p&gt;Let's begin by introducing our star player: the Animated component. This component is designed to encapsulate any React content you wish to animate when it comes into view. With the help of Framer Motion and React Intersection Observer, you can seamlessly create entrance animations for your UI elements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crafting Key Sections for Impactful Design
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hero Section:&lt;/strong&gt; The hero section is your website's grand entrance. Use it to showcase your brand identity, captivate users with a compelling headline, and provide a clear call to action. Utilize striking visuals to convey the essence of your message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Header and Navbar:&lt;/strong&gt; Your header and navbar are the navigational core of your website. Keep them clean, intuitive, and accessible. Implement sticky navigation to enhance user convenience while scrolling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;About Page:&lt;/strong&gt; The about page humanizes your brand. Share your team's story, values, and expertise through a blend of compelling content and engaging imagery. Build a connection by letting visitors see the people behind the brand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact Section:&lt;/strong&gt; Make contacting you effortless. Design user-friendly forms, incorporate interactive maps for location details, and provide clear contact information. Encourage user engagement and inquiries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Footer:&lt;/strong&gt; The footer is the perfect place for essential links, copyright information, and social media connections. Optimize this space to help visitors navigate, explore, and stay connected.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;So, whether you're building a personal portfolio, a business website, or an online platform, infuse these design elements and sections with your unique style and purpose. Let your creativity shine through and create a digital space that leaves a lasting impression on your visitors. Happy designing!&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;YouTube:&lt;/strong&gt; &lt;a href="https://www.youtube.com/watch?v=f-V-56vBU9g"&gt;https://www.youtube.com/watch?v=f-V-56vBU9g&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://www.epicprogrammer.org/build-a-portfolio-website-with-next-js-and-tailwind-css/"&gt;https://www.epicprogrammer.org/build-a-portfolio-website-with-next-js-and-tailwind-css/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>nextjs</category>
      <category>tailwindcss</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A Journey through the Professional Three.js Course</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Thu, 03 Aug 2023 03:34:44 +0000</pubDate>
      <link>https://dev.to/harryholland/a-journey-through-the-professional-threejs-course-3j1b</link>
      <guid>https://dev.to/harryholland/a-journey-through-the-professional-threejs-course-3j1b</guid>
      <description>&lt;p&gt;Hey fellow tech enthusiasts! Today, I am excited to share my experience with the Professional Three.js Course, a web-based 3D graphics course that has taken my skills to new heights. As a student with a passion for web development and a fascination with 3D graphics, I was eager to dive into this course and explore the world of Three.js. And boy, did it deliver!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/waJpSY_Q16A"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction to Three.js: A Solid Foundation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The course began with a well-structured introduction to Three.js, providing a solid foundation for understanding how 3D graphics work on the web. The instructors were clear and concise, explaining complex concepts with ease. They took us through the basic setup and configuration of Three.js, setting the stage for the exciting journey ahead.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--L-JnJWjk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rvqa74wgejvver0380ei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L-JnJWjk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rvqa74wgejvver0380ei.png" alt="Building 3D Scenes" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building 3D Scenes: From Concept to Reality&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the highlights of the course was the hands-on experience of building 3D scenes from scratch. We learned about 3D geometries, materials, and lighting to bring life to our scenes. The step-by-step approach helped me gain confidence as I progressed from simple shapes to intricate models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shaders and Textures&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As the course advanced, we delved into the fascinating world of shaders and textures. The instructors masterfully explained the role of shaders in creating stunning visual effects, allowing us to manipulate the appearance of our scenes. Applying textures to our 3D models brought a level of realism that amazed me and opened up countless possibilities for creativity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sw-4lCP_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mwm6yjn7i1lu9kzxagrf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sw-4lCP_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mwm6yjn7i1lu9kzxagrf.png" alt="Animation and Interactivity" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Animation and Interactivity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most exhilarating parts of the course was learning how to animate our 3D scenes and add interactivity to them. We explored keyframe animations, skeletal animations, and even advanced techniques like morph targets. I felt like a magician making my 3D objects come alive with user interactions, such as mouse and keyboard controls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dwK9aAy8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/awn8bajwqdpgahc5lgi3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dwK9aAy8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/awn8bajwqdpgahc5lgi3.png" alt="Performance Optimization" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The course didn't just stop at making things look great; it emphasized the importance of performance optimization. We learned about best practices to ensure our 3D scenes run smoothly across different devices. Techniques like frustum culling and level of detail (LOD) management made me appreciate the fine balance between visual fidelity and performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZSW1jDSA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/83r4dmlfth6x2r5840z2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZSW1jDSA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/83r4dmlfth6x2r5840z2.png" alt="Real World Projects on Three.js" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-World Projects&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The cherry on top of this learning experience was the opportunity to work on real-world projects. Throughout the course, we tackled projects that challenged us to apply what we learned in unique and creative ways. It was incredibly satisfying to see my projects evolve, and I couldn't help but share them with friends and family.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Community and Support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The course fostered a strong sense of community among learners. The instructors were active in the discussion forums, offering prompt and helpful feedback. Additionally, fellow students shared their insights, tips, and tricks, creating a collaborative environment that motivated me to push my boundaries further.&lt;/p&gt;

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

&lt;p&gt;In conclusion, the Professional Three.js Course was a game-changer for my web development journey. The course content was rich, the instructors were knowledgeable, and the practical approach helped me grasp complex concepts effortlessly. Whether you are a seasoned web developer or a newcomer to the 3D world, this course is a must-try.&lt;/p&gt;

&lt;p&gt;So, if you've been yearning to explore the realm of web-based 3D graphics and unleash your creativity in the digital world, I highly recommend the Professional Three.js Course. Trust me; you won't be disappointed. Happy coding, everyone!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; This review is based on my personal experience with the course. Course content and offerings may be subject to updates and improvements over time.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shop.codedolt.com/sponsorship"&gt;Course Link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>webdev</category>
      <category>react</category>
    </item>
    <item>
      <title>How I Created an Award-Winning Portfolio Site with Zero Experience</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Sun, 30 Apr 2023 10:44:47 +0000</pubDate>
      <link>https://dev.to/harryholland/how-i-created-an-award-winning-portfolio-site-with-zero-experience-fdk</link>
      <guid>https://dev.to/harryholland/how-i-created-an-award-winning-portfolio-site-with-zero-experience-fdk</guid>
      <description>&lt;p&gt;As someone with no prior experience in web development, the thought of creating a portfolio site from scratch was daunting. However, with the help of a single tutorial video, I was able to create an Awwward-winning portfolio site that showcased my work effectively.&lt;/p&gt;

&lt;p&gt;The tutorial I stumbled upon on YouTube&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/djEQfvuJ_RA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;broke down the process of creating a portfolio site step-by-step, teaching me about the principles of good web design and how to use HTML, CSS, and JavaScript to create a site that would not only look professional but also be user-friendly.&lt;/p&gt;

&lt;p&gt;As I followed along with the tutorial, I was amazed at how quickly I was able to create a visually stunning and intuitive site. It was exciting to see how even with zero experience, I was able to develop my skills and create something that I was proud to showcase to potential clients and employers.&lt;/p&gt;

&lt;p&gt;After completing the site, I submitted it to Awwwards, a renowned web design competition, and was thrilled when my site received an Honorable Mention. This recognition was not just an achievement, but a testament to the power of tutorials and online resources.&lt;/p&gt;

&lt;p&gt;The tutorial I used taught me not only how to code, but also how to approach web design strategically, making sure to create a site that would meet the needs of its users while still being visually appealing. It gave me the confidence to take on new web development projects and explore my creativity.&lt;/p&gt;

&lt;p&gt;If you're someone with no experience in web development and want to create a portfolio site, I highly recommend seeking out tutorials like the one I used. They can be a great way to learn and develop your skills, especially when starting from scratch.&lt;/p&gt;

&lt;p&gt;Creating an award-winning portfolio site has been a significant milestone for me, and I hope my experience encourages others to take a chance on learning something new. With the abundance of resources available online, anything is possible, and you may even surprise yourself with what you can accomplish.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Is object a HashMap in Javascript?</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Sun, 02 Oct 2022 08:59:19 +0000</pubDate>
      <link>https://dev.to/harryholland/is-object-a-hashmap-in-javascript-k4h</link>
      <guid>https://dev.to/harryholland/is-object-a-hashmap-in-javascript-k4h</guid>
      <description>&lt;p&gt;Maps, dictionaries, and associative arrays all describe the same data type a.k.a hash table data structure. A Hash table is a data structure that maps keys to values.&lt;/p&gt;

&lt;p&gt;Hashtables and hashmaps are data structures that store data in an array-like format, using key/value pairs, where the (hashed) key corresponds to the index in the array. One of the primary benefits that a hashtable has over a hashmap is the native ability to handle synchronous updates. This means that a hashtable can be shared by multiple threads without introducing desynching errors.&lt;/p&gt;

&lt;p&gt;Hashmaps offer the same key/value functionality and come native in JavaScript (ES6) in the form of the Map() object (not to be confused with Array.prototype.map()). While hashmaps are limited to single-threaded code, they do have some benefits, for instance the allowance of null values which allows for greater flexibility.&lt;/p&gt;

&lt;p&gt;JavaScript Objects: Similar but Different&lt;br&gt;
You might be thinking, “but JavaScript objects already keep track of key/value pairs.” While you can use JS objects to serve the same function of a hashmap, a hashmap does offer some benefits. For instance, hashmaps offer greater flexibility. The key in a hashmap can be any datatype, this includes arrays and objects. Meanwhile, objects can only use integers, strings, and symbols as their keys.&lt;/p&gt;

&lt;p&gt;Hashmaps are organized as linked lists, so the order of its elements is maintained, which allows the hashmap to be iterable. Also, unlike key/value pairs stored in an Object, the number of items in a hashmap can be determined by the size property.&lt;/p&gt;

&lt;p&gt;Note: One of the primary pitfalls to be aware of when it comes to hashmaps in JavaScript, is that they cannot be directly translated to JSON.&lt;/p&gt;

&lt;p&gt;Objects are similar to Maps in that both let you set keys to values, retrieve those values, delete keys, and detect whether something is stored at a key. Because of this, Objects have been used as Maps historically; however, there are important differences between Objects and Maps that make using a Map better.&lt;/p&gt;

&lt;p&gt;Originally Published at: &lt;a href="https://www.codedolt.com/blog/2022-10-02-is-object-a-hashmap-in-javascript/"&gt;https://www.codedolt.com/blog/2022-10-02-is-object-a-hashmap-in-javascript/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>async/await in js</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Sat, 01 Oct 2022 03:01:17 +0000</pubDate>
      <link>https://dev.to/harryholland/asyncawait-in-js-3hic</link>
      <guid>https://dev.to/harryholland/asyncawait-in-js-3hic</guid>
      <description>&lt;p&gt;Asynchronous programming is a technique that enables your program to start a potentially long-running task and still be able to be responsive to other events while that task runs, rather than having to wait until that task has finished. Once that task has finished, your program is presented with the result.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b2GksjcT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oy8yu7lrexrkqfjwaedw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b2GksjcT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oy8yu7lrexrkqfjwaedw.jpg" alt="3D Diamond" width="880" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; though this tutorial uses JavaScript, the same principles apply to other languages as well, such as Python/C#.&lt;/p&gt;

&lt;p&gt;Why do we need Async/Await in the first place?&lt;br&gt;
Before Promises and Async were introduced to JavaScript, all operations that would take some time and block the main thread resulted in what is known as callback hell. For example, let us imagine that you need to make a request to the API that takes roughly 2 seconds. This is what you would do:&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;const&lt;/span&gt; &lt;span class="nx"&gt;getResource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;callback&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;some resource&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="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;getResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this snippet we pass the function on line 7 as an argument to our getResource function and it will call it with requested info after 2 seconds. Does not look so bad, does it? It gets way worse as your code grows, you get multi-level nested callbacks and something that looks like this:&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="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&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;err&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="nx"&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;Error finding files: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fileIndex&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nx"&gt;gm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&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;err&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="nx"&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;Error identifying file size: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; : &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="nx"&gt;aspect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="nx"&gt;widths&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;widthIndex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;aspect&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="nx"&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;resizing &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;to &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dest&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;w&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&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;err&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="nx"&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;Error writing file: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;
          &lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nx"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;})&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;p&gt;This code becomes harder to read, maintain, and extend. If you want to learn more about callback hell, visit here.&lt;/p&gt;

&lt;p&gt;Promises&lt;br&gt;
In attempt to fix the callback hell , Promises were introduced in ES2015. Their goal was to simplify the code, improve readability and add more asynchronous functionality to JS. With promises, the code in the first example becomes:&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;const&lt;/span&gt; &lt;span class="nx"&gt;getResource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;some resource&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;getResource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We create a Promise object on line 1. We pass a function as an argument which receives resolve and reject functions. In it, we make a call to our api and resolve the Promise with desired content. In an event of an error, we reject the Promise with some meaningful error message. Then, we call this promise by passing a callback function in .then(). To handle an error, we would also pass a callback function in .catch().&lt;/p&gt;

&lt;p&gt;While this is definitely a step forward, it is not a complete solution. We still have callback functions, chaining and a lot of redundant code. There is also such a thing as promise hell, though it can be avoided using techniques.&lt;/p&gt;

&lt;p&gt;Async/Await&lt;br&gt;
Async functions were introduced in ES2017 and are now compatible with all browser specifications except IE. An Async function is simply a function that returns a Promise, meaning, it should be waited for. We can still use await with all of promises written in legacy wait as they are backwards-compatible. Look at our example with promises:&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;const&lt;/span&gt; &lt;span class="nx"&gt;getResource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;some resource&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;resource1&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;getResource&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;resource2&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;getResource&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resource1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;resource2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This example is a bit longer, but do not let yourself be confused by this: async functions almost always win in terms of lines of code. Here we firstly define our promise and note that it slightly differs: now it is a function that returns a promise: I did it to show you how could we use the same promise twice. Later we define an async function main, because we can only use await keyword in async functions. Then, we fetch resources from our promises by using await. Note that this will not block neither the main thread nor the UI thread, hence the word async. You can see we have less callbacks now and if we wanted to hadle errors we would wrap the await statements in try/catch/finally blocks, just as with any other language. So the winnings in terms of readability and simplicity are obvious: the async code looks more like normal, synchronous code unlike callbacks/promises.&lt;/p&gt;

&lt;p&gt;Originally Published at: &lt;a href="https://www.codedolt.com/blog/2022-09-30-async-await-in-js/"&gt;https://www.codedolt.com/blog/2022-09-30-async-await-in-js/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Create a Music Visualizer with Three.JS</title>
      <dc:creator>Temp-insta</dc:creator>
      <pubDate>Sat, 11 Jun 2022 05:55:03 +0000</pubDate>
      <link>https://dev.to/harryholland/how-to-create-a-music-visualizer-with-threejs-3jik</link>
      <guid>https://dev.to/harryholland/how-to-create-a-music-visualizer-with-threejs-3jik</guid>
      <description>&lt;p&gt;A function featured in electronic music visualizers and media player software that creates animated graphics based on a piece of music is known as music visualization. The picture is frequently created and presented in real-time, in a fashion that is coordinated with the music as it is played.&lt;/p&gt;

&lt;p&gt;The Web Audio API is used to handle audio operations inside an audio context and was created with modular routing in mind. Audio nodes are joined together to form an audio routing graph and are used to conduct basic audio operations. Even within the same context, many sources with various channel configurations are permitted. This modular architecture allows you to easily construct sophisticated audio functions with dynamic effects.&lt;/p&gt;

&lt;p&gt;Note: You are expected to know the basics of javascript and three.js before getting started with this project.&lt;/p&gt;

&lt;p&gt;The Web Audio API involves handling audio operations inside an audio context and has been designed to allow modular routing. Basic audio operations are performed with audio nodes, which are linked together to form an audio routing graph. Several sources — with different types of channel layouts — are supported even within a single context. This modular design provides the flexibility to create complex audio functions with dynamic effects.&lt;/p&gt;

&lt;p&gt;The audio pipeline starts by creating an audio context. It should have at least a single audio source — which can be thought of as an entry point for external files, mic input, oscillators, etc. Once we have a source in place, the signal is processed and moved ahead in the pipeline using audio nodes. After processing, the signal(s) are routed to the audio destination, which can only be a single one in the whole context.&lt;/p&gt;

&lt;p&gt;The simplest illustration has a single source and a destination, without any effects or processing, inside the context. Why would anyone use this? Maybe they just want to play the sound without any changes.&lt;/p&gt;

&lt;p&gt;On the left is an example of a much more complex setup, which can also be made using this API.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/4L8XjHfy13c"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:-&lt;/strong&gt; This project was inspired by epic programmer&lt;br&gt;
© All Rights are Reserved by Epic Programmer.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
