<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Atomxel]]></title><description><![CDATA[Helping React-Native Developers Level Up Their Skills, Articles around React Native Development.]]></description><link>https://blog.atomxel.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1705242701863/mLsI83BJ4.png</url><title>Atomxel</title><link>https://blog.atomxel.com</link></image><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 14:11:48 GMT</lastBuildDate><atom:link href="https://blog.atomxel.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Building a Multi-Page Application with React Router]]></title><description><![CDATA[React Router is a powerful routing library built on top of React that helps you add new screens and flows to your application incredibly quickly, all while keeping the URL in sync with what's being displayed on the page.
React manipulates the DOM by ...]]></description><link>https://blog.atomxel.com/building-a-multi-page-application-with-react-router</link><guid isPermaLink="true">https://blog.atomxel.com/building-a-multi-page-application-with-react-router</guid><category><![CDATA[atomxel]]></category><category><![CDATA[atomxel-academy]]></category><category><![CDATA[React]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Mobile Development]]></category><dc:creator><![CDATA[Piyush Nanwani]]></dc:creator><pubDate>Mon, 12 May 2025 05:34:08 GMT</pubDate><content:encoded><![CDATA[<p>React Router is a powerful routing library built on top of React that helps you add new screens and flows to your application incredibly quickly, all while keeping the URL in sync with what's being displayed on the page.</p>
<p>React manipulates the DOM by injecting components dynamically, creating the illusion of multiple pages while maintaining a single page structure. React Router isn't just about matching a URL to a function or component: it's about building a full user interface that maps to the URL.</p>
<p>In this blog, we will talk about single-page applications (SPAs) and demonstrates how to implement routing with React Router DOM.</p>
<h3 id="heading-what-is-spas"><strong>What is SPAs ?</strong></h3>
<p>Single Page Applications (SPAs) in React use a single page to manage navigation without refreshing. React manipulates the DOM by injecting components dynamically, creating the illusion of multiple pages while maintaining a single page structure. This is crucial for SPAs to function smoothly</p>
<p>We have to install React Router in our react project in order to use them. Use following command on your project file terminal.</p>
<pre><code class="lang-javascript">npm install react-router-dom
</code></pre>
<p>Now you will import the necessary components from react-router-dom in your application.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> ReactDOM <span class="hljs-keyword">from</span> <span class="hljs-string">"react-dom/client"</span>;
<span class="hljs-keyword">import</span> { BrowserRouter, Routes, Route } <span class="hljs-keyword">from</span> <span class="hljs-string">"react-router-dom"</span>;
<span class="hljs-keyword">import</span> Layout <span class="hljs-keyword">from</span> <span class="hljs-string">"./pages/Layout"</span>;
<span class="hljs-keyword">import</span> Home <span class="hljs-keyword">from</span> <span class="hljs-string">"./pages/Home"</span>;
<span class="hljs-keyword">import</span> Contact <span class="hljs-keyword">from</span> <span class="hljs-string">"./pages/Contact"</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">BrowserRouter</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Routes</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Route</span> <span class="hljs-attr">path</span>=<span class="hljs-string">"/"</span> <span class="hljs-attr">element</span>=<span class="hljs-string">{</span>&lt;<span class="hljs-attr">Layout</span> /&gt;</span>}&gt;
          <span class="hljs-tag">&lt;<span class="hljs-name">Route</span> <span class="hljs-attr">index</span> <span class="hljs-attr">element</span>=<span class="hljs-string">{</span>&lt;<span class="hljs-attr">Home</span> /&gt;</span>} /&gt;
          <span class="hljs-tag">&lt;<span class="hljs-name">Route</span> <span class="hljs-attr">path</span>=<span class="hljs-string">"contact"</span> <span class="hljs-attr">element</span>=<span class="hljs-string">{</span>&lt;<span class="hljs-attr">Contact</span> /&gt;</span>} /&gt;
        <span class="hljs-tag">&lt;/<span class="hljs-name">Route</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">Routes</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BrowserRouter</span>&gt;</span></span>
  );
}

<span class="hljs-keyword">const</span> root = ReactDOM.createRoot(<span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'root'</span>));
root.render(<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">App</span> /&gt;</span></span>);
</code></pre>
<p>Layout.js</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { Outlet, Link } <span class="hljs-keyword">from</span> <span class="hljs-string">"react-router-dom"</span>;

<span class="hljs-keyword">const</span> Layout = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">nav</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">Link</span> <span class="hljs-attr">to</span>=<span class="hljs-string">"/"</span>&gt;</span>Home<span class="hljs-tag">&lt;/<span class="hljs-name">Link</span>&gt;</span>
          <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">Link</span> <span class="hljs-attr">to</span>=<span class="hljs-string">"/contact"</span>&gt;</span>Contact<span class="hljs-tag">&lt;/<span class="hljs-name">Link</span>&gt;</span>
          <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">nav</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Outlet</span> /&gt;</span>
    <span class="hljs-tag">&lt;/&gt;</span></span>
  )
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> Layout;
</code></pre>
<p>Home.js</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> Home = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Home<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span></span>;
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> Home;
</code></pre>
<p>Contact.js</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> About = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>About<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span></span>;
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> About;
</code></pre>
<p>In v6.4, new routers were introduced that support the new data APIs:</p>
<ul>
<li><p>createBrowserRouter</p>
</li>
<li><p>createMemoryRouter</p>
</li>
<li><p>createHashRouter</p>
</li>
<li><p>createStaticRouter</p>
</li>
</ul>
<p>The following routers do not support the data APIs:</p>
<ul>
<li><p><a target="_blank" href="https://reactrouter.com/en/main/routers/create-browser-router"><code>&lt;BrowserRouter</code></a><a target="_blank" href="https://reactrouter.com/en/main/routers/create-memory-router"><code>&gt;</code>:Uses the HTML5</a> <a target="_blank" href="https://reactrouter.com/en/main/routers/create-hash-router"><strong>history API for</strong></a> s<a target="_blank" href="https://reactrouter.com/en/main/routers/create-static-router"><strong>tandard web apps.</strong></a></p>
</li>
<li><p><a target="_blank" href="https://reactrouter.com/en/main/routers/picking-a-router#data-apis"><code>&lt;</code></a><code>HashRouter&gt;</code>:Uses hash-based routing for static servers.</p>
</li>
<li><p><code>&lt;MemoryRouter&gt;</code>:Uses in-memory routing for testing and non-browser environments.</p>
</li>
<li><p><code>&lt;StaticRouter&gt;</code>:Provides static routing for server-side rendering (SSR).</p>
</li>
</ul>
<p>The above components will create <em>browser</em>, <em>hash</em>, <em>memory</em> and <em>static</em> history instances. React Router v6 makes the properties and methods of the history instance associated with your router available through the context in the router object.</p>
<p>createHashRouter is part of the React Router library and provides routing capabilities for single-page applications (SPAs). It's commonly used for building client-side navigation within applications.</p>
<p>Conclusion</p>
<p>React Router allows you to perform single-page routing without reloading the page. This enables faster user experiences because the browser doesn't need to request an entirely new document or re-evaluate CSS and JavaScript assets for the next page. It also enables more dynamic user experiences with things like animation.</p>
<p>Resources</p>
<p><a target="_blank" href="https://reactrouter.com/en/main/route/route"><strong>https://reactrouter.com/en/main/route/route</strong></a></p>
<p><a target="_blank" href="https://www.w3schools.com/react/react_router.asp"><strong>https://www.w3schools.com/react/react_router.asp</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[How to Integrate React JS with a REST API: A Step-by-Step Guide]]></title><description><![CDATA[React is popular frontend JavaScript library for building web application. You need to integrate APIs in your react project for if you want to build production ready web application.
What is a REST API?
REST API stand for A Representational State Tra...]]></description><link>https://blog.atomxel.com/how-to-integrate-react-js-with-a-rest-api-a-step-by-step-guide</link><guid isPermaLink="true">https://blog.atomxel.com/how-to-integrate-react-js-with-a-rest-api-a-step-by-step-guide</guid><category><![CDATA[atomxel]]></category><category><![CDATA[atomxel-academy]]></category><category><![CDATA[REST API]]></category><category><![CDATA[React]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[http]]></category><dc:creator><![CDATA[Piyush Nanwani]]></dc:creator><pubDate>Sat, 03 May 2025 05:30:39 GMT</pubDate><content:encoded><![CDATA[<p>React is popular frontend JavaScript library for building web application. You need to integrate APIs in your react project for if you want to build production ready web application.</p>
<h3 id="heading-what-is-a-rest-api"><strong>What is a REST API?</strong></h3>
<p>REST API stand for A Representational State Transfer Application Programming Interface. It is also known as RESTful API. It is an application programming interface that conforms to the constraints of REST architectural style and allows for interaction with RESTful web services.</p>
<p>When a client request is made via a RESTful API, it transfers a representation of the state of the resource to the requester or endpoint. This information, or representation, is delivered in one of several formats via HTTP: JSON (Javascript Object Notation), HTML, XLT, Python, PHP, or plain text. JSON is the most generally popular file format to use because, despite its name, it’s language-agnostic, as well as readable by both humans and machines.</p>
<p>What is an API?</p>
<p>API is a medium that allows different applications to communicate programmatically with one another and return a response in real time. It is a set of definitions and protocols for building and integrating application software.</p>
<p>In other words, if you want to interact with a computer or system to retrieve information or perform a function, an API helps you communicate what you want to that system so it can understand and fulfill the request.</p>
<h3 id="heading-how-to-consume-rest-apis-in-react"><strong>How to consume REST API's in React.</strong></h3>
<p>We will use Fetch API which is browser in-built web API. You are going to use two popular react hook in your project.</p>
<ul>
<li><code>useState</code> is a React Hook that lets you add a state variable to your component. We Call useState at the top level of your component to declare a state variable. In below example, initialState is the value you want the state to be initially.</li>
</ul>
<p>Let's understand what is state in react. State is components memory.</p>
<p><a target="_blank" href="https://react.dev/learn/synchronizing-with-effects"><strong>Example of useState hook:</strong></a></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> [state, setState] = useState(initialState)
</code></pre>
<ul>
<li><p><code>useEffect</code> : is a React Hook that lets you synchronize a component with an external system. It allows you to perform side effects in functional components. Side effects could be data fetching, subscription, or manually changing the DOM. We will use this hook to fetch API response. It accepts two arguments : a callback function and a dependencies. Second argument is optional. The list of dependencies must have a constant number of items and be written inline like <code>[dep1, dep2, dep3]</code>. React will compare each dependency with its previous value. If you omit this argument, your Effect will re-run after every re-render of the component. <code>useEffect</code> returns <code>undefined</code>.</p>
<p>  Here's an example of useEffect Hook:</p>
<p>  <strong>Copy</strong></p>
<p>  <strong>Copy</strong></p>
<pre><code class="lang-javascript">    useEffect(<span class="hljs-function">() =&gt;</span> {
        <span class="hljs-comment">// data fetching here</span>
    }, []);
</code></pre>
</li>
</ul>
<p>We will fetch the user data from GitHub API. We will display the fetched user data including username, avatar, number of follower, and last but not the least total number of repositories. Here's an example of getting user details using APIs.</p>
<p><code>useEffect</code>: This hook runs after the component mounts to fetch data.</p>
<ul>
<li><p><code>async/await</code> syntax is used for asynchronous operations.</p>
</li>
<li><p><code>fetch</code> is used to make a GET request to the specified API endpoint.</p>
</li>
<li><p><code>.then()</code> is returned a response object.</p>
</li>
<li><p><code>response.json()</code> parses the JSON response. And to resolve the Response object to JSON format.</p>
</li>
<li><p><code>.then()</code> used to get actual data.</p>
</li>
<li><p>Error handling using <code>try...catch</code> block.</p>
</li>
</ul>
<p><strong>Copy</strong></p>
<p><strong>Copy</strong></p>
<pre><code class="lang-javascript">useEffect(<span class="hljs-function">() =&gt;</span> {
    <span class="hljs-keyword">const</span> fetchData = <span class="hljs-keyword">async</span> () =&gt; {
      <span class="hljs-keyword">try</span> {
        <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> fetch(
          <span class="hljs-string">"https://api.github.com/users/AnandAnkur404"</span>
        );

        <span class="hljs-keyword">if</span> (!response.ok) {
          <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"Failed to fetch user data"</span>);
        }

        <span class="hljs-keyword">const</span> results = <span class="hljs-keyword">await</span> response.json();
        <span class="hljs-built_in">console</span>.log(results);
        setAvatarURL(results.avatar_url);
        setGithubUserame(results.login);
        setNoOfFollower(results.followers);
        setNoOfRepo(results.public_repos);
      } <span class="hljs-keyword">catch</span> (error) {
        <span class="hljs-built_in">console</span>.log(error);
        setError(error.message);
      }
    };
    fetchData();
  }, []);
</code></pre>
<p>Now we will get all the repository data from API.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> <span class="hljs-string">"./App.css"</span>;
<span class="hljs-keyword">import</span> Button <span class="hljs-keyword">from</span> <span class="hljs-string">"react-bootstrap/Button"</span>;
<span class="hljs-keyword">import</span> Card <span class="hljs-keyword">from</span> <span class="hljs-string">"react-bootstrap/Card"</span>;
<span class="hljs-keyword">import</span> { useEffect, useState } <span class="hljs-keyword">from</span> <span class="hljs-string">"react"</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> [avatarURL, setAvatarURL] = useState();
  <span class="hljs-keyword">const</span> [githubUserame, setGithubUserame] = useState();
  <span class="hljs-keyword">const</span> [noOfFollower, setNoOfFollower] = useState();
  <span class="hljs-keyword">const</span> [repoData, setRepoData] = useState();
  <span class="hljs-keyword">const</span> [noOfRepo, setNoOfRepo] = useState();
  <span class="hljs-keyword">const</span> [error, setError] = useState(<span class="hljs-literal">null</span>);
<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">repoDataURL</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">try</span> {
      <span class="hljs-comment">// Getting all the repos of users.</span>
      <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> fetch(
        <span class="hljs-string">"https://api.github.com/users/AnandAnkur404/repos"</span>
      );
      <span class="hljs-keyword">if</span> (!response.ok) {
        <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"Failed to fetch repo data"</span>);
      }
      <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> response.json();
      <span class="hljs-keyword">const</span> list = result.map(<span class="hljs-function">(<span class="hljs-params">item</span>) =&gt;</span> (
        <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">className</span>=<span class="hljs-string">"text-center"</span> <span class="hljs-attr">key</span>=<span class="hljs-string">{item.id}</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">target</span>=<span class="hljs-string">"_blank"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">{item.svn_url}</span>&gt;</span>
            {item.name}
          <span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
      ));
      setRepoData(list);
    } <span class="hljs-keyword">catch</span> (error) {
      <span class="hljs-built_in">console</span>.log(error);
      setError(error.message);
    }
  }
}
</code></pre>
<p>Now we will consume data from this API and display.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">className</span>=<span class="hljs-string">"App w-100 min-vh-100 justify-content-center align-items-center d-flex flex-column"</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Card</span> <span class="hljs-attr">style</span>=<span class="hljs-string">{{</span> <span class="hljs-attr">width:</span> "<span class="hljs-attr">18rem</span>" }}&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Card.Img</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"top"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">{avatarURL}</span> /&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Card.Body</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">Card.Title</span>&gt;</span>{githubUserame}<span class="hljs-tag">&lt;/<span class="hljs-name">Card.Title</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">Card.Text</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>No Of Followers {noOfFollower}<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>No Of Public Repos {noOfRepo}<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span>
          <span class="hljs-tag">&lt;/<span class="hljs-name">Card.Text</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"primary"</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{repoDataURL}</span>&gt;</span>
            List My Repo
          <span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">Card.Body</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">Card</span>&gt;</span>
      { repoData };
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
</code></pre>
<h3 id="heading-conclusion"><strong>Conclusion</strong></h3>
<p>Here you see how effectively we have integrated Rest API to our react application to build dynamic and data driven web application. In contrast, REST is a set of guidelines that can be implemented as needed, making REST APIs faster and more lightweight, with increased scalability. You can follow the above guideline and use your specific REST APIs to create your own project.</p>
<p>Resources</p>
<p><a target="_blank" href="https://react.dev/reference/react"><strong>https://react.dev/reference/react</strong></a></p>
<p><a target="_blank" href="https://www.redhat.com/en/topics/api/what-is-a-rest-api#overview"><strong>https://www.redhat.com/en/topics/api/what-is-a-rest-api#overview</strong></a></p>
<p><a target="_blank" href="https://www.freecodecamp.org/news/how-to-consume-rest-apis-in-react/"><strong>https://www.freecodecamp.org/news/how-to-consume-rest-apis-in-react/</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Static Site Generation (SSG) vs. Server-Side Rendering (SSR) in Next.js]]></title><description><![CDATA[What is Next js ?
Next.js is a React framework for building full-stack web applications.
Rendering is one of the features of Next.js that is very useful for developer. In this blog post, we'll explore the key differences between SSG and SSR, their ad...]]></description><link>https://blog.atomxel.com/static-site-generation-ssg-vs-server-side-rendering-ssr-in-nextjs</link><guid isPermaLink="true">https://blog.atomxel.com/static-site-generation-ssg-vs-server-side-rendering-ssr-in-nextjs</guid><category><![CDATA[atomxel]]></category><category><![CDATA[atomxel-academy]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Next.js]]></category><category><![CDATA[React]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Frontend Development]]></category><dc:creator><![CDATA[Piyush Nanwani]]></dc:creator><pubDate>Wed, 23 Apr 2025 04:33:29 GMT</pubDate><content:encoded><![CDATA[<p><strong>What is Next js ?</strong></p>
<p><strong>Next.js</strong> is a React framework for building full-stack web applications.</p>
<p>Rendering is one of the features of <strong>Next.js</strong> that is very useful for developer. In this blog post, we'll explore the key differences between SSG and SSR, their advantages and when to choose one over the other.</p>
<h3 id="heading-two-main-rendering-strategy-of-nextjs"><strong>Two main rendering strategy of Next.js.</strong></h3>
<h2 id="heading-static-site-generation-ssg"><strong>Static Site Generation (SSG)</strong></h2>
<p>Static site generation is a technique in web development where it pre-renders pages at build time. That means in production, the page HTML generated when you run next build. SSG results in excellent performance because this HTML will then be reused on each request. This pre-render pages are ready to serve directly to user on each request. This approach is ideal for websites with content that doesn’t change frequently, like blogs or documentation sites.</p>
<p>In Next js, you can statically generates pages with or without data. Lets take a look on example below.</p>
<p><strong>Static Site Generation without data</strong></p>
<p>Using Static Generation, it re-render without fetching data. Here's an example.</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">About</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>About<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
}
<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> About
</code></pre>
<p>Note that this page does not need to fetch any external data to be pre-rendered. In cases like this, Next.js generates a single HTML file per page during build time.</p>
<p><strong>Static generation with data</strong></p>
<p>Next js provides two important function for fetching data during static generation.</p>
<ul>
<li><p>getStaticProps: Fetches data for a specific page.</p>
</li>
<li><p>getStaticPaths: Defines dynamic routes for a page.</p>
</li>
</ul>
<ol>
<li><strong>getStaticProps.</strong></li>
</ol>
<p>To fetch this data on pre-render, Next.js allows you to export an async function called getStaticProps from the same file. This function gets called at build time and lets you pass fetched data to the page's props on pre-render.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Blog</span>(<span class="hljs-params">{ posts }</span>) </span>{
  <span class="hljs-comment">// Render posts...</span>
}

<span class="hljs-comment">// This function gets called at build time</span>
<span class="hljs-keyword">export</span> <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getStaticProps</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-comment">// Call an external API endpoint to get posts</span>
  <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> fetch(<span class="hljs-string">'https://.../posts'</span>)
  <span class="hljs-keyword">const</span> posts = <span class="hljs-keyword">await</span> res.json()

  <span class="hljs-comment">// By returning { props: { posts } }, the Blog component</span>
  <span class="hljs-comment">// will receive `posts` as a prop at build time</span>
  <span class="hljs-keyword">return</span> {
    <span class="hljs-attr">props</span>: {
      posts,
    },
  }
}
</code></pre>
<ol start="2">
<li><strong>getStaticPath</strong></li>
</ol>
<p>Next.js allows you to create pages with dynamic routes. Next.js lets you export an async function called getStaticPaths from a dynamic page . This function gets called at build time and lets you specify which paths you want to pre-render.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// This function gets called at build time</span>
<span class="hljs-keyword">export</span> <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getStaticPaths</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-comment">// Call an external API endpoint to get posts</span>
  <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> fetch(<span class="hljs-string">'https://.../posts'</span>)
  <span class="hljs-keyword">const</span> posts = <span class="hljs-keyword">await</span> res.json()

  <span class="hljs-comment">// Get the paths we want to pre-render based on posts</span>
  <span class="hljs-keyword">const</span> paths = posts.map(<span class="hljs-function">(<span class="hljs-params">post</span>) =&gt;</span> ({
    <span class="hljs-attr">params</span>: { <span class="hljs-attr">id</span>: post.id },
  }))

  <span class="hljs-comment">// We'll pre-render only these paths at build time.</span>
  <span class="hljs-comment">// { fallback: false } means other routes should 404.</span>
  <span class="hljs-keyword">return</span> { paths, <span class="hljs-attr">fallback</span>: <span class="hljs-literal">false</span> }
}
</code></pre>
<p><strong>Advantages of SSG</strong></p>
<ul>
<li><p>Speed: Pre-rendered HTML files are served directly, resulting in faster load times.</p>
</li>
<li><p><strong>Scalability</strong>: Static files can be easily served by Content Delivery Networks (CDNs), improving your application’s ability to handle more global traffic around the world.</p>
</li>
</ul>
<p>You can use Static Generation for many types of pages, including:</p>
<ul>
<li><p>Marketing pages</p>
</li>
<li><p>Blog posts and portfolios</p>
</li>
<li><p>E-commerce product listings</p>
</li>
<li><p>Help and documentation</p>
</li>
</ul>
<p><strong>When should you use Static Generation?</strong></p>
<p>If you want to re-render page ahead of a user's request, and if your content don't change often, then you must choose Static Generation for better performance and scalability.</p>
<h2 id="heading-server-side-rendering-ssr"><strong>Server-side Rendering (SSR)</strong></h2>
<p>Server-Side Rendering involves generating the HTML for each page on the server when a user requests it. It is also referred as a "Dynamic Rendering". With SSR, there is a server that pre-renders the page – it’s like a template that you plug variables into and the server handles all of the rendering. This happens at request time, so when the user requests the page, they get the server side rendered page. This rendering happens all on the server side and never runs in the browser.</p>
<p>If your page needs to pre-render frequently updated data (fetched from an external API). You can write getServerSideProps which fetches this data and passes it to Page like below.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Page</span>(<span class="hljs-params">{ data }</span>) </span>{
  <span class="hljs-comment">// Render data...</span>
}
<span class="hljs-comment">// This gets called on every request</span>
<span class="hljs-keyword">export</span> <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getServerSideProps</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-comment">// Fetch data from external API</span>
  <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> fetch(<span class="hljs-string">`https://.../data`</span>)
  <span class="hljs-keyword">const</span> data = <span class="hljs-keyword">await</span> res.json()

  <span class="hljs-comment">// Pass data to the page via props</span>
  <span class="hljs-keyword">return</span> { <span class="hljs-attr">props</span>: { data } }
}
</code></pre>
<p>SSR is ideal for websites with dynamic or personalised content that changes frequently. You can use Static Generation for many types of pages, including</p>
<ul>
<li><p>E-commerce websites.</p>
</li>
<li><p>Media platforms.</p>
</li>
</ul>
<p><strong>Advantages of SSR</strong></p>
<ul>
<li><p>Consistent user experience: Users see the latest content as it’s generated on-the-fly, ensuring they always have up-to-date information.</p>
</li>
<li><p>Personalisation: SSR allows you to serve unique content based on user preferences or other dynamic data.</p>
</li>
</ul>
<h3 id="heading-when-you-should-use-server-side-rendering"><strong>When you should use Server-Side Rendering.</strong></h3>
<p>Consider whether your users need real-time data or personalised content. If so, SSR is the better option. SSR pages will always display the latest data because they are generated on the server with every request from the user. With every request, you can always be sure that you have the most recent/up-to-date information.</p>
<h3 id="heading-conclusion"><strong>Conclusion</strong></h3>
<p>In this article, we have discussed the two rendering approaches in Next.js: SSG and SSR. I have also provided an example codebase that will help you determine the best rendering approach for your application.</p>
<p>Resources</p>
<p><a target="_blank" href="https://nextjs.org/docs/pages/building-your-application/rendering"><strong>https://nextjs.org/docs/pages/building-your-application/rendering</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[ChatGPT: Evolution , Technical features and App making]]></title><description><![CDATA[ChatGPT is developed by OpenAI. It is an AI chatbot that uses natural language processing to generate human-like conversational responses. It can answer questions, write essays, generate code and more. The "GPT" in ChatGPT stands for "Generative Pre-...]]></description><link>https://blog.atomxel.com/chatgpt-evolution-technical-features-and-app-making</link><guid isPermaLink="true">https://blog.atomxel.com/chatgpt-evolution-technical-features-and-app-making</guid><category><![CDATA[atomxel]]></category><category><![CDATA[atomxel-academy]]></category><category><![CDATA[openai]]></category><category><![CDATA[chatgpt]]></category><category><![CDATA[llm]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[generative ai]]></category><category><![CDATA[gemini]]></category><dc:creator><![CDATA[Sulabh Sharma]]></dc:creator><pubDate>Wed, 02 Apr 2025 04:30:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1736788222539/484c084e-ffc7-433f-8126-a38708100a1b.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>ChatGPT is developed by <strong>OpenAI.</strong> It is an AI chatbot that uses natural language processing to generate human-like conversational responses. It can answer questions, write essays, generate code and more. The <strong>"GPT"</strong> in ChatGPT stands for "<strong>Generative Pre-trained Transformer</strong>" indicating its architecture and training method. ChatGPT uses deep learning, a subset of machine learning to produce humanlike text through transformer neural networks. The transformer predicts text including the next word sentence or paragraph based on its training data's typical sequence. Training begins with generic data then moves to more tailored data for a specific task. ChatGPT was trained with online text to learn the human language and then it used transcripts to learn the basics of conversations.</p>
<h2 id="heading-evolution-of-chatgpt">Evolution of ChatGPT</h2>
<p><strong>GPT-1:</strong> The journey began with the first Generative Pre-trained Transformer (GPT) model introduced by <strong>OpenAI in 2018.</strong> GPT-1 was a breakthrough in <strong>Natural Language Processing (NLP)</strong> utilizing <strong>117 million parameters</strong> to generate human-like text based on the context provided. It marked a significant step forward in machine learning demonstrating the potential of pre-trained transformers.</p>
<p><strong>GPT-2:</strong> Launched in <strong>2019</strong>, GPT-2 built upon the foundation laid by GPT-1 expanding the model to <strong>1.5 billion parameters.</strong> This massive increase in scale enabled GPT-2 to generate more coherent and contextually relevant text making it a more powerful tool for a variety of NLP tasks. The revolution of GPT has begun.</p>
<p><strong>GPT-3:</strong> Released in <strong>June 2020,</strong> GPT-3 was a monumental leap forward boasting <strong>175 billion parameters.</strong> This vast increase in model size brought unprecedented capabilities in natural language understanding and generation.</p>
<p><strong>GPT-3.5:</strong> Generative Pre-trained Transformer 3.5 (GPT-3.5) is a sub class of GPT-3 Models created by <strong>OpenAI in 2022</strong>. On <strong>March 15th 2022</strong>, OpenAI made available new versions of GPT-3 and Codex in its API with edit and insert capabilities under the names <strong>"text-davinci-002" and "code-davinci-002"</strong></p>
<p><strong>GPT-4:</strong> It is a multimodal large language model trained and created by OpenAI and the fourth in its series of GPT foundation models. It was launched on March 14th 2023.</p>
<p><a target="_blank" href="https://www.researchgate.net/figure/Illustration-of-GPT-development-history-and-the-rise-of-ChatGPT-The-development-timeline_fig1_374092520"><img src="https://www.researchgate.net/publication/374092520/figure/fig1/AS:11431281245417780@1716157126719/Illustration-of-GPT-development-history-and-the-rise-of-ChatGPT-The-development-timeline.png" alt="Illustration of GPT development history and the rise of ChatGPT. The development timeline of GPT and the emergence of ChatGPT, highlight key milestones and improvements in the model's capabilities. GPT, generative pre‐trained transformers." /></a></p>
<p><a target="_blank" href="https://www.researchgate.net/figure/Illustration-of-GPT-development-history-and-the-rise-of-ChatGPT-The-development-timeline_fig1_374092520">https://www.researchgate.net/figure/Illustration-of-GPT-development-history-and-the-rise-of-ChatGPT-The-development-timeline_fig1_374092520</a></p>
<h2 id="heading-basic-technical-features-of-chatgpt-models">Basic Technical features of ChatGPT models</h2>
<h3 id="heading-model-architecture"><strong>Model Architecture</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The design of the AI model that determines how it <strong>processes</strong> and <strong>generates</strong> text.</p>
</li>
<li><p><strong>Example</strong>: Think of it like the blueprint for building a robot. A <strong>"Transformer Decoder"</strong> is like a design that helps the robot predict and write sentences based on patterns it learned.</p>
</li>
</ul>
<hr />
<h3 id="heading-parameters"><strong>Parameters</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The internal "settings" the model uses to <strong>make decisions</strong> and <strong>generate responses.</strong> More parameters mean better decision-making.</p>
</li>
<li><p><strong>Example</strong>: A model with 175 billion parameters (like GPT-3) is like a chef with 175 billion recipes- it can cook almost anything you ask for.</p>
</li>
</ul>
<hr />
<h3 id="heading-token-limit"><strong>Token Limit</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The maximum amount of text the model can process in a single interaction. Tokens are chunks of <strong>words or letters.</strong></p>
</li>
<li><p><strong>Example</strong>: If you ask the model to summarize a 5-page document but its token limit is 2 pages it won’t be able to process the entire document.</p>
</li>
</ul>
<hr />
<h3 id="heading-batch-processing"><strong>Batch Processing</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The ability to handle multiple tasks or inputs at the same time.</p>
</li>
<li><p><strong>Example</strong>: Imagine a cashier processing 5 customers at once instead of one by one. A model with good batch processing can answer 5 different users simultaneously without delay.</p>
</li>
</ul>
<hr />
<h3 id="heading-training-type"><strong>Training Type</strong></h3>
<ul>
<li><p><strong>Definition</strong>: How the model is trained to understand and generate text.</p>
<ul>
<li><p><strong>Pre-trained</strong>: Trained on a large dataset before being released.</p>
</li>
<li><p><strong>Reinforcement Learning from Human Feedback (RLHF)</strong>: Further refined by humans to improve responses.</p>
</li>
</ul>
</li>
<li><p><strong>Example</strong>: Pre-trained is like a chef who learned cooking by reading books. RLHF is like a chef who improved their cooking by learning directly from customer feedback.</p>
</li>
</ul>
<hr />
<h3 id="heading-few-shot-learning"><strong>Few-Shot Learning</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The model's ability to perform tasks after seeing only a few examples.</p>
</li>
<li><p><strong>Example</strong>: If you show the model two examples of writing a haiku it can generate its own haikus without needing hundreds of examples.</p>
</li>
</ul>
<hr />
<h3 id="heading-latency"><strong>Latency</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The time it takes for the model to generate a response after receiving input.</p>
</li>
<li><p><strong>Example</strong>: A low-latency model is like a fast typist who replies to your text immediately while a high-latency model is like a slow responder who takes minutes.</p>
</li>
</ul>
<hr />
<h3 id="heading-multimodal-input"><strong>Multimodal Input</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The ability to process both text and images as input.</p>
</li>
<li><p><strong>Example</strong>: You can upload a photo of a math problem and the model (like GPT-4) can solve it by analyzing the image and generating a text response.</p>
</li>
</ul>
<hr />
<h3 id="heading-context-retention"><strong>Context Retention</strong></h3>
<ul>
<li><p><strong>Definition</strong>: How well the model remembers previous parts of a conversation or input.</p>
</li>
<li><p><strong>Example</strong>: If you’re chatting about your favorite movies a model with good context retention will remember your preferences and recommend relevant movies later in the chat.</p>
</li>
</ul>
<h2 id="heading-comparison-of-key-technical-features-of-chatgpt-models">Comparison of Key technical features of ChatGPT models</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736790453768/6d3a6d27-7703-437b-9e16-766949eea744.png" alt /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736790502642/d143bae6-b612-473e-8770-e172602a54cc.png" alt /></p>
<h3 id="heading-pricing-mechanism-of-chatgpt-httpsopenaicomapipricinghttpsopenaicomapipricing"><strong>Pricing Mechanism of ChatGPT,</strong> <a target="_blank" href="https://openai.com/api/pricing/">https://openai.com/api/pricing/</a></h3>
<p><a target="_blank" href="https://openai.com/chatgpt/pricing/"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736770442138/9dfafbe3-eb1d-41c2-9a8a-2ac8ad18f2d8.png" alt /></a></p>
<p><a target="_blank" href="https://openai.com/chatgpt/pricing/"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736770464863/a7f86e9b-72b3-4e3e-8107-9d51bd06811f.png" alt /></a></p>
<h3 id="heading-which-model-should-you-choose-based-on-your-budget"><strong>Which Model Should You Choose Based on Your Budget?</strong></h3>
<h4 id="heading-1-if-youre-on-a-tight-budget-mvp-or-small-scale-app">1. <strong>If You're on a Tight Budget (MVP or Small-Scale App)</strong>:</h4>
<ul>
<li><strong>Choose GPT-3</strong>: It offers great performance for basic use cases like simple content generation, question-answering and basic chatbots. It’s <strong>cost-effective</strong> and can handle small-scale applications with ease.</li>
</ul>
<h4 id="heading-2-if-you-need-better-performance-and-more-complex-conversations">2. <strong>If You Need Better Performance and More Complex Conversations</strong>:</h4>
<ul>
<li><strong>Choose GPT-3.5</strong>: It provides <strong>improved performance</strong> over GPT-3 especially for applications that require ongoing conversations, handling complex customer support queries and larger datasets. It’s a sweet spot between <strong>price</strong> and <strong>performance</strong>.</li>
</ul>
<h4 id="heading-3-if-you-need-advanced-features-multimodal-capabilities-or-large-scale-enterprise-applications">3. <strong>If You Need Advanced Features, Multimodal Capabilities, or Large-Scale Enterprise Applications</strong>:</h4>
<ul>
<li><strong>Choose GPT-4</strong>: While <strong>GPT-4</strong> is the most expensive and it offers advanced capabilities such as <strong>multimodal processing</strong> (text and images) <strong>better reasoning</strong> and <strong>longer context retention</strong>. If your app needs <strong>complex problem-solving</strong> or works with a lot of data (like <strong>long documents</strong>, <strong>images</strong> or <strong>multilingual content</strong>) GPT-4 is worth the higher investment.</li>
</ul>
<hr />
<h3 id="heading-final-thoughts"><strong>Final Thoughts:</strong></h3>
<p>When choosing a <strong>ChatGPT model</strong> for your <strong>app development</strong> the <strong>token limits</strong>, <strong>batch processing capabilities</strong> and the <strong>level of complexity</strong> your app requires will dictate the costs and performance you can expect.</p>
<ul>
<li><p><strong>GPT-3</strong> is the best choice for <strong>basic apps</strong> with <strong>minimal budget</strong> and simple tasks.</p>
</li>
<li><p><strong>GPT-3.5</strong> offers a <strong>good balance</strong> between cost and <strong>advanced conversational abilities</strong>.</p>
</li>
<li><p><strong>GPT-4</strong> is for <strong>high-demand applications</strong> that require <strong>advanced capabilities</strong> but it comes with a higher price tag.</p>
</li>
</ul>
<p>Always consider your app’s specific needs <strong>user interaction volume</strong> and <strong>expected workload</strong> when evaluating the most cost-effective model for your app.</p>
<p><strong>Conclusion-</strong> The journey began with GPT-1 in 2018 introducing 117 million parameters and pioneering pre-trained transformers for text generation. GPT-2 launched in 2019 scaled up to 1.5 billion parameters improving coherence and contextual relevance. GPT-3 with 175 billion parameters set a new benchmark in 2020 enabling complex tasks like coding and detailed content generation. GPT-3.5 (2022) enhanced conversational abilities and task-specific fine-tuning while GPT-4 (2023) added multimodal capabilities processing both text and images and extended context retention for advanced applications.</p>
<p>ChatGPT models cater to diverse needs:</p>
<ul>
<li><p><strong>GPT-3</strong>: Ideal for basic tasks and budget-friendly solutions.</p>
</li>
<li><p><strong>GPT-3.5</strong>: Balances cost and performance for conversational and customer support apps.</p>
</li>
<li><p><strong>GPT-4</strong>: Best for enterprise-level, multimodal tasks and applications requiring advanced reasoning.</p>
</li>
</ul>
<p>Selecting a model depends on your budget complexity and performance needs making ChatGPT a versatile tool for various domains from chatbots to enterprise-level AI applications.</p>
<h2 id="heading-references">References</h2>
<p><a target="_blank" href="https://ttms.com/my/evolution-of-ai-from-gpt-1-to-gpt-4o-key-features-milestones-and-applications/#:~:text=This%20evolution%20of%20GPT%20chatbots,the%20sophisticated%20GPT-4o%20model">https://ttms.com/my/evolution-of-ai-from-gpt-1-to-gpt-4o-key-features-milestones-and-applications/#:~:text=This%20evolution%20of%20GPT%20chatbots,the%20sophisticated%20GPT-4o%20model</a>.</p>
<p><a target="_blank" href="https://platform.openai.com/docs/models">https://platform.openai.com/docs/models</a></p>
<p><a target="_blank" href="https://platform.openai.com/docs/models">https://platform.openai.com/docs/models</a></p>
]]></content:encoded></item><item><title><![CDATA[Google Gemini: Evolution, Technical features and app development]]></title><description><![CDATA[Gemini, formerly known as Bard is a Generative Artificial Intelligence chatbot developed by Google. Based on the Large Language Model (LLM) developed by google Deep Mind, created to compete with OpenAI’s ChatGPT. It was launched in 2023 after being d...]]></description><link>https://blog.atomxel.com/google-gemini-evolution-technical-features-and-app-development</link><guid isPermaLink="true">https://blog.atomxel.com/google-gemini-evolution-technical-features-and-app-development</guid><category><![CDATA[gemini]]></category><category><![CDATA[AI]]></category><category><![CDATA[openai]]></category><category><![CDATA[atomxel]]></category><category><![CDATA[atomxel-academy]]></category><category><![CDATA[chatgpt]]></category><category><![CDATA[Google]]></category><category><![CDATA[llm]]></category><category><![CDATA[large language models]]></category><dc:creator><![CDATA[Sulabh Sharma]]></dc:creator><pubDate>Tue, 18 Mar 2025 03:30:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1736916452403/b25581b8-07ad-4173-87bb-3ce8b7f189b2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Gemini</strong>, formerly known as <strong>Bard</strong> is a <strong>Generative Artificial Intelligence</strong> chatbot developed by Google. Based on the <strong>Large Language Model (LLM)</strong> developed by google Deep Mind, created to compete with OpenAI’s ChatGPT. It was launched in 2023 after being developed as a direct response to the rise of OpenAI's ChatGPT. <strong>Gemini AI can process and understand various data types (text, images, audio, code) also present ideas innovatively</strong>. Its reasoning capabilities are exceptional. Gemini AI can solve complex problems efficiently and generate high-quality code.</p>
<h2 id="heading-evolution-of-google-gemini">Evolution of Google Gemini</h2>
<p><strong>Gemini-</strong> Google introduced Gemini As a powerful Successor to <strong>PaLM 2</strong> on <strong>May 10th 2023.</strong> Gemini was developed as a collaboration between DeepMind and Google Brain designed to be multimodal capable of processing text, images, video and computer code simultaneously.</p>
<p><strong>Gemini 1.0-</strong> Gemini 1.0 was announced on Dec. 6, 2023, and built by Alphabet's Google DeepMind business unit which is focused on <strong>Advanced AI research and development.</strong> It comprises <strong>three</strong> models-<strong>Gemini Ultra-</strong> designed for highly complex tasks, fully released on February 2024. <strong>Gemini Pro-</strong> suited for a wide range of tasks. <strong>Gemini Nano-</strong> Optimized for on-device tasks. Gemini Pro and Nano were integrated into Bard and the Pixel 8 Pro smartphone, respectively.</p>
<p><strong>Gemini 1.5-</strong> launched in <strong>February 202</strong>4 and In <strong>May 2024,</strong> Google announced enhancements to <strong>Gemini 1.5 Pro</strong> at the google I/O conference. Upgrades included performance improvements in translation, coding and reasoning features. The upgraded Google 1.5 Pro also <strong>improved image and video</strong> understanding, including the ability to <strong>directly process voice inputs</strong> using native audio understanding. The model's context window was increased to <strong>2 million tokens</strong> enabling it to remember much more information when responding to prompts. Google announced new features to the Gemini API in May, including the following: <a target="_blank" href="https://www.techtarget.com/searchenterpriseai/definition/Google-Gemini">https://www.techtarget.com/searchenterpriseai/definition/Google-Gemini</a></p>
<ul>
<li><p>Video frame extraction which lets users upload a video to generate content.</p>
</li>
<li><p>Parallel function calling, which lets users engage in more than one function call at a time.</p>
</li>
</ul>
<p>In June 2024, Google added context caching to ensure users only have to send parts of a prompt to a model once.</p>
<p><strong>Gemini 2.0-</strong> Google introduced Gemini 2.0 Flash on <strong>December 11, 2024.</strong> In an experimental preview through Vertex AI Gemini API and AI Studio. Gemini 2.0 Flash is <strong>twice the speed of 1.5 Pro</strong> and has new capabilities, such as multimodal input and output, and long context understanding. Other new features include text-to-speech capabilities for image editing and art. The new API has audio streaming applications to assist with native tool use and improved latency.</p>
<p>For more in depth learning of Gemini evolution you can refer to this link- <a target="_blank" href="https://timelines.issarice.com/wiki/Timeline_of_Google_Gemini">https://timelines.issarice.com/wiki/Timeline_of_Google_Gemini</a></p>
<h2 id="heading-basic-technical-features-of-google-gemini-models">Basic Technical features of Google Gemini models</h2>
<h3 id="heading-model-architecture"><strong>Model Architecture</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The design of the AI model that determines how it <strong>processes</strong> and <strong>generates</strong> text.</p>
</li>
<li><p><strong>Example</strong>: Think of it like the blueprint for building a robot. A <strong>"Transformer Decoder"</strong> is like a design that helps the robot predict and write sentences based on patterns it learned.</p>
</li>
</ul>
<hr />
<h3 id="heading-parameters"><strong>Parameters</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The internal "settings" the model uses to <strong>make decisions</strong> and <strong>generate responses.</strong> More parameters mean better decision-making.</p>
</li>
<li><p><strong>Example</strong>: A model with 175 billion parameters (like GPT-3) is like a chef with 175 billion recipes- it can cook almost anything you ask for.</p>
</li>
</ul>
<hr />
<h3 id="heading-token-limit"><strong>Token Limit</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The maximum amount of text the model can process in a single interaction. Tokens are chunks of <strong>words or letters.</strong></p>
</li>
<li><p><strong>Example</strong>: If you ask the model to summarize a 5-page document but its token limit is 2 pages it won’t be able to process the entire document.</p>
</li>
</ul>
<hr />
<h3 id="heading-batch-processing"><strong>Batch Processing</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The ability to handle multiple tasks or inputs at the same time.</p>
</li>
<li><p><strong>Example</strong>: Imagine a cashier processing 5 customers at once instead of one by one. A model with good batch processing can answer 5 different users simultaneously without delay.</p>
</li>
</ul>
<hr />
<h3 id="heading-training-type"><strong>Training Type</strong></h3>
<ul>
<li><p><strong>Definition</strong>: How the model is trained to understand and generate text.</p>
<ul>
<li><p><strong>Pre-trained</strong>: Trained on a large dataset before being released.</p>
</li>
<li><p><strong>Reinforcement Learning from Human Feedback (RLHF)</strong>: Further refined by humans to improve responses.</p>
</li>
</ul>
</li>
<li><p><strong>Example</strong>: Pre-trained is like a chef who learned cooking by reading books. RLHF is like a chef who improved their cooking by learning directly from customer feedback.</p>
</li>
</ul>
<hr />
<h3 id="heading-few-shot-learning"><strong>Few-Shot Learning</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The model's ability to perform tasks after seeing only a few examples.</p>
</li>
<li><p><strong>Example</strong>: If you show the model two examples of writing a haiku it can generate its own haikus without needing hundreds of examples.</p>
</li>
</ul>
<hr />
<h3 id="heading-latency"><strong>Latency</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The time it takes for the model to generate a response after receiving input.</p>
</li>
<li><p><strong>Example</strong>: A low-latency model is like a fast typist who replies to your text immediately while a high-latency model is like a slow responder who takes minutes.</p>
</li>
</ul>
<hr />
<h3 id="heading-multimodal-input"><strong>Multimodal Input</strong></h3>
<ul>
<li><p><strong>Definition</strong>: The ability to process both text and images as input.</p>
</li>
<li><p><strong>Example</strong>: You can upload a photo of a math problem and the model (like GPT-4) can solve it by analyzing the image and generating a text response.</p>
</li>
</ul>
<hr />
<h3 id="heading-context-retention"><strong>Context Retention</strong></h3>
<ul>
<li><p><strong>Definition</strong>: How well the model remembers previous parts of a conversation or input.</p>
</li>
<li><p><strong>Example</strong>: If you’re chatting about your favorite movies a model with good context retention will remember your preferences and recommend relevant movies later in the chat.</p>
</li>
</ul>
<h2 id="heading-comparison-of-key-technical-features-of-google-gemini-models">Comparison of Key technical features of Google Gemini models</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736938045084/06d6e4b9-bf20-4263-95e5-738003648191.png" alt /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736922597563/ce6a7abb-452d-429c-9404-69c2244eceb0.png" alt /></p>
<h2 id="heading-pricing-mechanism-of-gemini-models">Pricing Mechanism of Gemini models</h2>
<p><a target="_blank" href="https://developers.googleblog.com/en/updated-gemini-models-reduced-15-pro-pricing-increased-rate-limits-and-more/"><img src="https://storage.googleapis.com/gweb-developer-goog-blog-assets/images/Gemini_Pro_Price_Chart_GRHV7Tk.original.png" alt="A pricing table for the Gemini 1.5 Flash model, outlining the cost per one million tokens for input and output" /></a></p>
<h2 id="heading-gemini-model-suitability-for-app-development"><strong>Gemini Model Suitability for App Development</strong></h2>
<ol>
<li><p><strong>Gemini 1.0</strong></p>
<ul>
<li><p><strong>Best for:</strong> Basic multimodal capabilities, general app development involving text, image, audio or video input handling.</p>
</li>
<li><p><strong>Why:</strong> Offers foundational multimodal input capabilities making it useful for applications requiring interactions like chatbots, image processing or content generation.</p>
</li>
</ul>
</li>
<li><p><strong>Gemini 1.5 Pro</strong></p>
<ul>
<li><p><strong>Best for:</strong> Advanced apps involving reasoning, large-scale data processing, and complex problem-solving (e.g.- code generation tools, advanced AI assistants).</p>
</li>
<li><p><strong>Why:</strong> Features enhanced reasoning capabilities, a higher token limit (up to 2 million) and improved efficiency, making it ideal for apps with substantial data and reasoning demands.</p>
</li>
</ul>
</li>
<li><p><strong>Gemini 1.5 Flash</strong></p>
<ul>
<li><p><strong>Best for:</strong> Real-time apps requiring fast responses (e.g., live chat systems, gaming assistants or real-time recommendation engines).</p>
</li>
<li><p><strong>Why:</strong> Optimized for speed and efficiency, with a focus on latency reduction. Its ability to handle up to 1 million tokens also supports moderately complex tasks without high latency.</p>
</li>
</ul>
</li>
<li><p><strong>Gemini 2.0 Flash Experimental</strong></p>
<ul>
<li><p><strong>Best for:</strong> Cutting-edge apps with real-time multimodal interactions, such as AI-powered virtual assistants, augmented reality (AR) applications, or apps generating native images or audio.</p>
</li>
<li><p><strong>Why:</strong> Focuses on real-time multimodal processing and native content generation making it ideal for innovative and interactive applications.</p>
</li>
</ul>
</li>
</ol>
<h2 id="heading-conclusion">Conclusion</h2>
<p>The evolution of Google Gemini models from <strong>Gemini 1.0 to Gemini 2.0</strong> Flash Experimental, showcases groundbreaking advancements in generative AI having technical features like model architecture, token limit, content retention, parameters. Gemini can help in app development, depends on the complexity and purpose of the application models can be selected <strong>Gemini 1.0</strong> for <strong>basic</strong>, for <strong>advanced reasoning and scalability Gemini 1.5 Pro excels</strong>. <strong>Real-time</strong> <strong>interactive apps</strong> benefit most from <strong>Gemini 2.0</strong> Flash Experimental. With its multimodal prowess and adaptability Gemini redefines AI-driven app development making it a versatile tool for developers aiming to deliver superior user experiences.</p>
<h2 id="heading-references">References</h2>
<p><a target="_blank" href="https://timelines.issarice.com/wiki/Timeline_of_Google_Gemini">https://timelines.issarice.com/wiki/Timeline_of_Google_Gemini</a></p>
<p><a target="_blank" href="https://firebase.google.com/docs/vertex-ai/gemini-models">https://firebase.google.com/docs/vertex-ai/gemini-</a></p>
<p><a target="_blank" href="https://firebase.google.com/docs/vertex-ai/gemini-models">https://firebase.google.com/docs/vertex-ai/gemini-models</a></p>
]]></content:encoded></item><item><title><![CDATA[Discover technology behind your Smartphones: AI/ML]]></title><description><![CDATA[Machine learning is a type of artificial intelligence that performs data analysis tasks without explicit instructions. Machine learning technology can process large quantities of historical data, identify patterns and predict new relationships betwee...]]></description><link>https://blog.atomxel.com/discover-technology-behind-your-smartphones-aiml</link><guid isPermaLink="true">https://blog.atomxel.com/discover-technology-behind-your-smartphones-aiml</guid><category><![CDATA[atomxel]]></category><category><![CDATA[atomxel-academy]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[AI]]></category><category><![CDATA[ML]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[gemini]]></category><category><![CDATA[TensorFlow]]></category><category><![CDATA[llm]]></category><category><![CDATA[openai]]></category><category><![CDATA[Mobile Development]]></category><category><![CDATA[mobile app development]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Sulabh Sharma]]></dc:creator><pubDate>Wed, 05 Mar 2025 01:30:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1737525439615/150cc6fe-2610-46e6-b0d2-3a820b33ec9a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Machine learning is <strong>a type of artificial intelligence that performs data analysis tasks without explicit instructions</strong>. Machine learning technology can process large quantities of historical data, identify patterns and predict new relationships between previously unknown data. Running machine learning (ML) models directly on mobile devices has become increasingly feasible, enabling applications to function offline, reduce latency, and enhance user privacy. Frameworks like TensorFlow Lite, advancements in Large Language Models (LLMs) and tools from OpenAI have been pivotal in this evolution. <strong>Running ML on Mobile Phones - TensorFlow/LLM/Gemini/OpenAI"</strong> refers to the application and integration of machine learning (ML) technologies directly on mobile devices using specific tools and frameworks</p>
<h2 id="heading-why-bring-aiml-to-mobile-phones"><strong>Why Bring AI/ML to Mobile Phones?</strong></h2>
<p>The integration of Artificial Intelligence (AI) and Machine Learning (ML) into mobile phones is revolutionizing the way we interact with technology. Here’s why bringing AI/ML to mobile devices is essential:</p>
<hr />
<h3 id="heading-1-enhanced-user-experience"><strong>1. Enhanced User Experience</strong></h3>
<p>AI/ML powers smarter apps, such as <strong>voice assistants, predictive text</strong> and camera enhancements like object recognition and scene optimization, offering personalized and intuitive experiences.</p>
<hr />
<h3 id="heading-2-offline-functionality"><strong>2. Offline Functionality</strong></h3>
<p>On-device AI ensures access to features like <strong>translations</strong> and <strong>voice commands</strong> without internet connectivity. This is particularly valuable for remote areas or privacy-focused applications like health tracking.</p>
<hr />
<h3 id="heading-3-reduced-latency"><strong>3. Reduced Latency</strong></h3>
<p>With computations performed on the device, response times are faster, making applications like <strong>real-time gaming</strong> and <strong>navigation</strong> seamless and efficient.</p>
<hr />
<h3 id="heading-4-improved-privacy"><strong>4. Improved Privacy</strong></h3>
<p>Processing data locally minimizes the need for cloud servers, ensuring sensitive information stays secure. For example <strong>AI-powered facial recognition</strong> systems work directly on the phone.</p>
<hr />
<h3 id="heading-5-cost-and-energy-efficiency"><strong>5. Cost and Energy Efficiency</strong></h3>
<p>Mobile AI <strong>reduces reliance on cloud computing</strong>, lowering data transfer costs and energy usage. Frameworks like TensorFlow Lite optimize these computations for low-power devices.</p>
<hr />
<h3 id="heading-6-democratization-of-technology"><strong>6. Democratization of Technology</strong></h3>
<p>AI/ML on phones makes advanced tools like learning apps and <strong>translation accessible</strong> to a wider audience, empowering users across different regions and demographics</p>
<h2 id="heading-technologies-powering-mobile-aiml">Technologies Powering Mobile AI/ML</h2>
<h2 id="heading-1-tensorflow-lite">1. tensorFlow Lite</h2>
<p>tensorFlow Lite (TF Lite) is an open-source, cross-platform deep learning framework launched by <strong>Google</strong> for on-device inference, which is designed to provide support for multiple platforms, including Android and iOS devices, embedded Linux and microcontrollers. It can convert tensorFlow pre-trained models into special formats that can be optimized for speed or storage. It also helps developers run tensorFlow models on mobile, embedded and IoT devices.</p>
<h2 id="heading-how-does-tensorflow-lite-work"><strong>How does TensorFlow Lite work?</strong></h2>
<h3 id="heading-1-select-and-train-a-model"><strong>1. Select and train a model</strong></h3>
<p>Suppose you want to perform an image classification task. The first is to determine the model for the task. You can choose:</p>
<p>–<strong>Use pre-trained models</strong> like Inception V3, MobileNet, etc.</p>
<p>You can check out the <a target="_blank" href="https://www.tensorflow.org/lite/examples">https://www.tensorflow.org/lite/examples</a> here. Explore pre-trained TensorFlow Lite models and learn how to use them for various ML applications in the sample application.</p>
<p>–<strong>Create your custom models</strong> </p>
<p>Create models with custom datasets using the <a target="_blank" href="https://www.tensorflow.org/lite/guide/model_maker">https://www.tensorflow.org/lite/guide/model_maker</a></p>
<p><strong>–Apply transfer learning to pre-trained models</strong></p>
<h3 id="heading-2-transform-models-using-converter"><strong>2. Transform models using Converter</strong></h3>
<p>After the model training is complete, you need to use the TensorFlow Lite Converter to convert the model to a TensorFlow Lite model. The TensorFlow Lite model is a lightweight version that is very efficient in terms of accuracy and has a smaller footprint. These properties make TF Lite models ideal for working on mobile and embedded devices.</p>
<p><img src="https://www.seeedstudio.com/blog/wp-content/uploads/2022/05/%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_16519356467445-1030x527.png" alt /></p>
<p><strong>Schematic diagram of TensorFlow Lite conversion process<br />Source:</strong> <a target="_blank" href="https://www.tensorflow.org/lite/convert/index">https://www.tensorflow.org/lite/convert/index</a></p>
<p>Regarding the <strong>selection of pre-trained models</strong> section, you may want to get more information about this. TensorFlow Lite already supports many trained and optimized models:</p>
<ul>
<li><p>MobileNet: A class of vision models capable of recognizing 1000 different object classes, specially designed for efficient execution on mobile and embedded devices.</p>
</li>
<li><p>Inception v3: Image recognition model, similar in functionality to MobileNet, offering higher accuracy but larger.</p>
</li>
<li><p>Smart Reply: An on-device conversational model that enables one-click replies to incoming conversational chat messages. First- and third-party messaging apps use this feature on Android Wear.</p>
</li>
</ul>
<p>Inception v3 and MobileNet have been trained on the ImageNet dataset. You can retrain on your own image dataset through transfer learning.</p>
<p>You may refer to the information on <a target="_blank" href="http://ai.googleblog.com/2017/11/on-device-conversational-modeling-with.html">http://ai.googleblog.com/2017/11/on-device-conversational-modeling-with.html</a></p>
<h1 id="heading-get-started-with-litert">Get started with LiteRT</h1>
<p>This guide introduces you to the process of running a LiteRT (short for Lite Runtime) model on-device to make predictions based on input data. This is achieved with the LiteRT interpreter, which uses a static graph ordering and a custom (less-dynamic) memory allocator to ensure minimal load, initialization, and execution latency.</p>
<p>LiteRT inference typically follows the following steps:</p>
<ol>
<li><p><strong>Loading a model</strong>: load the <code>.tflite</code> model into memory, which contains the model's execution graph.</p>
</li>
<li><p><strong>Transforming data</strong>: Transform input data into the expected format and dimensions. Raw input data for the model generally does not match the input data format expected by the model. For example, you might need to resize an image or change the image format to be compatible with the model.</p>
</li>
<li><p><strong>Running inference</strong>: Execute the LiteRT model to make predictions. This step involves using the LiteRT API to execute the model. It involves a few steps such as building the interpreter, and allocating tensors.</p>
</li>
<li><p><strong>Interpreting output</strong>: Interpret the output tensors in a meaningful way that's useful in your application. For example, a model might return only a list of probabilities. It's up to you to map the probabilities to relevant categories and format the output.</p>
</li>
</ol>
<p>This guide describes how to access the LiteRT interpreter and perform an inference using C++, Java, and Python.</p>
<h2 id="heading-2-large-language-modelsllm">2. Large Language Models(LLM)</h2>
<p>Large Language Models (LLMs) are changing smartphone technology, subtly reshaping everything from the device’s core architecture to user interaction. As generative AI integrates deeper into mobile devices, we’re witnessing transformative changes in various aspects of our mobile devices.</p>
<h2 id="heading-how-do-large-language-models-work"><strong>How do large language models work?</strong></h2>
<h3 id="heading-machine-learning-and-deep-learning"><strong>Machine learning and deep learning</strong></h3>
<p>At a basic level, LLMs are built on machine learning. Machine learning is a subset of AI, and it refers to the practice of feeding a program large amounts of data in order to train the program how to identify features of that data without human intervention.</p>
<p>LLMs use a type of machine learning called deep learning. Deep learning models can essentially train themselves to recognize distinctions without human intervention, although some human fine-tuning is typically necessary.</p>
<p>Deep learning uses probability in order to "learn." For instance, in the sentence "The quick brown fox jumped over the lazy dog," the letters "e" and "o" are the most common, appearing four times each. From this, a deep learning model could conclude (correctly) that these characters are among the most likely to appear in English-language text.</p>
<p>Realistically, a deep learning model cannot actually conclude anything from a single sentence. But after analyzing trillions of sentences, it could learn enough to predict how to logically finish an incomplete sentence, or even generate its own sentences.</p>
<h3 id="heading-llm-neural-networks"><strong>LLM neural networks</strong></h3>
<p>In order to enable this type of deep learning, LLMs are built on neural networks. Just as the human brain is constructed of neurons that connect and send signals to each other, an artificial neural network (typically shortened to "neural network") is constructed of network nodes that connect with each other. They are composed of several "layers”: an input layer, an output layer, and one or more layers in between. The layers only pass information to each other if their own outputs cross a certain threshold.</p>
<h3 id="heading-llm-transformer-models"><strong>LLM transformer models</strong></h3>
<p>The specific kind of neural networks used for LLMs are called transformer models. Transformer models are able to learn context — especially important for human language, which is highly context-dependent. Transformer models use a mathematical technique called self-attention to detect subtle ways that elements in a sequence relate to each other. This makes them better at understanding context than other types of machine learning. It enables them to understand, for instance, how the end of a sentence connects to the beginning, and how the sentences in a paragraph relate to each other.</p>
<p>This enables LLMs to interpret human language, even when that language is vague or poorly defined, arranged in combinations they have not encountered before, or contextualized in new ways. On some level they "understand" semantics in that they can associate words and concepts by their meaning, having seen them grouped together in that way millions or billions of times</p>
<h2 id="heading-3-gemini">3. Gemini</h2>
<p><strong>Gemini</strong>, formerly known as <strong>Bard</strong>, is a <a target="_blank" href="https://en.wikipedia.org/wiki/Generative_artificial_intelligence">generative artificial intelligence</a> <a target="_blank" href="https://en.wikipedia.org/wiki/Generative_artificial_intelligence">chatbot</a> <a target="_blank" href="https://en.wikipedia.org/wiki/Chatbot">develop</a><a target="_blank" href="https://en.wikipedia.org/wiki/Generative_artificial_intelligence">ed by Google.</a> <a target="_blank" href="https://en.wikipedia.org/wiki/Gemini_\(chatbot\)#cite_note-6"></a><a target="_blank" href="https://en.wikipedia.org/wiki/Gemini_\(chatbot\)#cite_note-7">Bas</a>ed on the <a target="_blank" href="https://en.wikipedia.org/wiki/Large_language_model">large language model</a> <a target="_blank" href="https://en.wikipedia.org/wiki/Large_language_model">(LLM) of the same na</a><a target="_blank" href="https://en.wikipedia.org/wiki/Gemini_\(language_model\)">me</a>, <a target="_blank" href="https://en.wikipedia.org/wiki/Gemini_\(language_model\)">it was launched</a> in 2023 after being developed as a direct response to the rise of <a target="_blank" href="https://en.wikipedia.org/wiki/OpenAI">OpenAI</a>'<a target="_blank" href="https://en.wikipedia.org/wiki/OpenAI">s Chat</a><a target="_blank" href="https://en.wikipedia.org/wiki/ChatGPT">GPT</a>. <a target="_blank" href="https://en.wikipedia.org/wiki/ChatGPT">It was</a> previously based on <a target="_blank" href="https://en.wikipedia.org/wiki/PaLM">PaLM</a>, <a target="_blank" href="https://en.wikipedia.org/wiki/PaLM">and</a> initially the <a target="_blank" href="https://en.wikipedia.org/wiki/LaMDA">LaMDA</a> <a target="_blank" href="https://en.wikipedia.org/wiki/LaMDA">famil</a>y of large language models.</p>
<h2 id="heading-how-does-gemini-work">How does Gemini work?</h2>
<h3 id="heading-1-set-objectives"><strong>1. Set Objectives</strong></h3>
<p>The process of integrating Google Gemini Pro begins by understanding your business needs and setting clear goals. Whether you aim to improve user engagement, streamline workflows, automate tasks, or strengthen security, having a solid grasp of your objectives is essential for a successful integration.</p>
<h3 id="heading-2-utilize-gemini-pro-apis-and-sdks"><strong>2. Utilize Gemini Pro APIs and SDKs</strong></h3>
<p>To seamlessly integrate Gemini AI, make use of its APIs and SDKs. This entails incorporating the required code and interfaces to help communication between the mobile app and Gemini Pro’s AI features. Your Google Gemini Pro developer can also utilize tools like Google AI Studio and Google Cloud Vertex Gemini AI to connect Gemini models into your applications.</p>
<p><img src="https://www.valuecoders.com/blog/wp-content/uploads/2024/04/Utilize-Gemini-Pro-APIs-and-SDKs.png.webp" alt="Utilize Gemini Pro APIs and SDKs" /></p>
<h3 id="heading-3-mapping-data-and-configuration"><strong>3. Mapping Data and Configuration</strong></h3>
<p>Next, you need to map how data moves and set up Gemini Pro to handle and understand the relevant data sources. This is essential for the AI model to generate useful insights and provide smart responses tailored to the mobile app’s specific context.</p>
<h3 id="heading-4-testing-and-quality-assurance"><strong>4. Testing and Quality Assurance</strong></h3>
<p>Thoroughly test the integrated solution to pinpoint and address any possible issues, errors, or bugs. This stage includes testing for technical issues, app performance, security measures, and user experience, guaranteeing that Gemini Pro operates smoothly within the mobile app.</p>
<h3 id="heading-5-deployment-and-monitoring"><strong>5. Deployment and Monitoring</strong></h3>
<p>Once testing is complete, deploy the integrated mobile app. After deployment, closely monitor its performance in real-world situations and use analytics to understand user interactions. This helps in the continuous improvement and optimization of the app.</p>
<h3 id="heading-6-continuous-improvement-and-updates"><strong>6. Continuous Improvement and Updates</strong></h3>
<p>The final step is to establish a system for ongoing improvement by keeping up-to-date with Google Gemini Pro updates. Businesses should regularly review user feedback and industry trends to make incremental updates, keeping the integrated solution innovative and effective</p>
<h2 id="heading-4-open-ai">4. Open AI</h2>
<p>OpenAI is a research company that specializes in artificial intelligence (AI) and machine learning (ML) technologies. Its goal is to develop safe AI systems that can benefit humanity as a whole. OpenAI offers a range of AI and ML tools that can be integrated into mobile app development, making it easier for developers to create intelligent and responsive apps.</p>
<h2 id="heading-how-does-open-ai-works">How Does Open AI works?</h2>
<p>OpenAI provides developers with a range of tools and APIs that can be used to incorporate AI and ML into their mobile apps. These tools include natural language processing (NLP), image recognition, predictive analytics and more.</p>
<p>OpenAI’s NLP tools can help improve the user experience by providing personalized recommendations, chatbot functionality, and natural language search capabilities. Image recognition tools can be used to identify objects, people, and places within images, enabling developers to create apps that can recognize and respond to visual cues. </p>
<p>OpenAI’s predictive analytics tools can analyze data to provide insights that can be used to enhance user engagement. For example, predictive analytics can be used to identify which users are most likely to churn and to provide targeted offers or promotions to those users.</p>
<p>OpenAI’s machine learning algorithms can also automate certain tasks, such as image or voice recognition, allowing developers to focus on other aspects of the app. </p>
<p><img src="https://datasciencedojo.com/wp-content/uploads/OpenAI-in-Mobile-App-Development-.jpg" alt="OpenAI in Mobile App Development" /></p>
<h2 id="heading-future-of-artificial-intelligence-in-mobile-phone"><strong>Future of Artificial Intelligence in Mobile Phone</strong></h2>
<p>Artificial Intelligence (AI) is poised to revolutionize the mobile phone experience in the coming years. As AI continues to evolve, it will make your smartphone smarter, more intuitive, and increasingly personalized. The key revolution you can expect in the context of the future of artificial intelligence for mobile phone technology:</p>
<p><strong>1.Advancements in AI Chipsets</strong></p>
<p>One of the key drivers of the future of artificial intelligence in mobile phones is the rapid advancements in AI-focused chipsets. Major chip manufacturers like Qualcomm, MediaTek, and Samsung are developing dedicated AI processors that will power the next generation of AI-capable smartphones. These chipsets will enable more AI processing to be done directly on the device, leading to faster response times and enhanced privacy.</p>
<p><strong>2.Generative AI and Multimodal Capabilities</strong></p>
<p>Generative AI, which can create new content like images, text, and audio, is expected to have a significant impact on mobile phones. By 2027, over 1 billion <a target="_blank" href="https://www.counterpointresearch.com/insights/genai-capable-smartphone-shipments-to-grow-over-4x-by-2027/">https://www.counterpointresearch.com/insights/genai-capable-smartphone-shipments-to-grow-over-4x-by-2027/</a> will be shipped that will enable features like AI-powered photo editing, virtual assistants with more natural conversations, and enhanced accessibility for users with disabilities.</p>
<p><strong>3.Personalization and Predictive Features</strong></p>
<p>The future of artificial intelligence (AI) will continue to enhance personalization in mobile phones, with algorithms that learn user preferences and adapt the device's functionality accordingly. This will include features like predictive text, smart content curation, and intelligent task automation. As AI becomes more advanced, it will be able to anticipate user needs and proactively offer suggestions and assistance, making the mobile experience more seamless and efficient.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>The integration of AI and ML into mobile devices is revolutionizing technology, enhancing user experiences, reducing latency, and ensuring privacy. Frameworks like TensorFlow Lite, LLMs, Google’s Gemini and OpenAI APIs empower mobile apps with smarter features, real-time processing, and personalized interactions. These advancements make AI more accessible and drive innovation across industries. As AI evolves, mobile development will continue to deliver intelligent, responsive, and transformative solutions for the digital age.</p>
<h2 id="heading-references">References</h2>
<p><a target="_blank" href="https://beonperf.ch/fr-CH/blog-de-beonperf/large-language-model-llm">https://beonperf.ch/fr-CH/blog-de-beonperf/large-language-model-llm</a></p>
<p><a target="_blank" href="https://glance.com/us/articles/future-of-artificial-intelligence">https://glance.com/us/articles/future-of-artificial-intelligence</a></p>
<p><a target="_blank" href="https://datasciencedojo.com/blog/openai-and-mobile-app-development/">https://datasciencedojo.com/blog/openai-and-mobile-app-development/</a></p>
]]></content:encoded></item><item><title><![CDATA[Step-by-Step Guide to Publishing Apps on Google Play Store]]></title><description><![CDATA[Publishing your app on the Google Play Store can be a thrilling milestone in your app development journey. It not only allows you to share your creation with millions of Android users but also opens up opportunities for feedback, improvements, and po...]]></description><link>https://blog.atomxel.com/step-by-step-guide-to-publishing-apps-on-google-play-store</link><guid isPermaLink="true">https://blog.atomxel.com/step-by-step-guide-to-publishing-apps-on-google-play-store</guid><category><![CDATA[atomxel]]></category><category><![CDATA[atomxel-academy]]></category><category><![CDATA[Google Play Console]]></category><category><![CDATA[Google Play Store]]></category><category><![CDATA[Android]]></category><category><![CDATA[android app development]]></category><dc:creator><![CDATA[Kashish Nanwani]]></dc:creator><pubDate>Tue, 11 Feb 2025 03:30:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1736600414666/e7bc16f1-f727-4aef-8282-6fa1758be2db.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<hr />
<p>Publishing your app on the Google Play Store can be a thrilling milestone in your app development journey. It not only allows you to share your creation with millions of Android users but also opens up opportunities for feedback, improvements, and potential earnings. If you're new to the process, don't worry – this guide will walk you through the steps of publishing your app on the Play Store.</p>
<h3 id="heading-step-1-create-a-google-developer-account"><strong>Step 1: Create a Google Developer Account</strong></h3>
<p>Before you can publish an app, you need to create a <strong>Google Developer Account</strong>. This account will be used to manage your apps and is required to submit apps to the Play Store.</p>
<ol>
<li><p>Go to the Google Play Console.</p>
</li>
<li><p>Sign in with your Google account or create a new one if you don't already have one.</p>
</li>
<li><p>Pay the <strong>$25 registration fee</strong> (one-time payment).</p>
</li>
<li><p>Once your account is created, you'll have access to the Google Play Console, where you'll manage your apps.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736601481431/091e664a-8c96-4faa-8c04-e36cb5a81079.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<h3 id="heading-step-2-prepare-your-app-for-release"><strong>Step 2: Prepare Your App for Release</strong></h3>
<p>Before uploading your app, make sure it's ready for the public. Here are some critical steps to follow:</p>
<ol>
<li><p><strong>Build a Release Version</strong>: Ensure you’re building a release version of your app. You don’t want to publish a development build.</p>
</li>
<li><p><strong>Sign Your APK</strong>: Your app needs to be signed before submission. Use your private key to sign the APK (Android Package).</p>
</li>
<li><p><strong>Test Thoroughly</strong>: Test your app on different devices and screen sizes. Address any bugs, crashes, or performance issues.</p>
</li>
<li><p><strong>Create an App Icon</strong>: Prepare a 512x512 pixel icon that will represent your app on the Play Store.</p>
</li>
</ol>
<h3 id="heading-step-3-create-the-app-listing"><strong>Step 3: Create the App Listing</strong></h3>
<p>Your app's listing is what users will see when they search for your app in the Play Store. Here’s what you need to include:</p>
<ol>
<li><p><strong>App Name</strong>: Choose a unique name that reflects your app's purpose and is easy to remember.</p>
</li>
<li><p><strong>App Description</strong>: Write a compelling description of what your app does and why users should download it. Include relevant keywords but avoid spamming.</p>
</li>
<li><p><strong>Screenshots</strong>: Provide at least two screenshots of your app’s user interface. These will help users understand the app before they download it.</p>
</li>
<li><p><strong>Category</strong>: Select the appropriate category for your app (e.g., Games, Education, Business, etc.).</p>
</li>
<li><p><strong>Content Rating</strong>: Choose the appropriate rating for your app based on its content. Google uses this to restrict the app from being shown to inappropriate audiences.</p>
</li>
<li><p><strong>Privacy Policy</strong>: If your app collects user data, you’ll need to provide a link to your privacy policy. This is required by Google to comply with data protection regulations.</p>
</li>
</ol>
<h3 id="heading-step-4-upload-the-apk-to-the-play-console"><strong>Step 4: Upload the APK to the Play Console</strong></h3>
<p>Once your app and listing are ready, it’s time to upload your APK file to the Play Console:</p>
<ol>
<li><p>Go to the <strong>Google Play Console</strong>.</p>
</li>
<li><p>Click on <strong>Create Application</strong>.</p>
</li>
<li><p>Choose the language and enter the app title.</p>
</li>
<li><p>Under the <strong>Release Management</strong> section, select <strong>App Releases</strong>.</p>
</li>
<li><p>Click on <strong>Create Release</strong>.</p>
</li>
<li><p>Upload your signed APK file and provide any necessary release notes.</p>
</li>
<li><p>Click <strong>Save</strong>.</p>
</li>
</ol>
<h3 id="heading-step-5-set-pricing-and-distribution"><strong>Step 5: Set Pricing and Distribution</strong></h3>
<p>Decide whether your app will be free or paid, and select the countries where you want it to be available. You can also enable or disable certain distribution channels, such as Android TV or Wear OS.</p>
<h3 id="heading-step-6-submit-your-app-for-review"><strong>Step 6: Submit Your App for Review</strong></h3>
<p>Once you’ve completed the necessary steps, it’s time to submit your app for review. Google will review your app to ensure it complies with their Developer Program Policies.</p>
<p>The review process usually takes a few days, but it can take longer if there are any issues or if your app violates any policies.</p>
<h3 id="heading-step-7-app-goes-live"><strong>Step 7: App Goes Live</strong></h3>
<p>Once your app is approved, it will be published on the Play Store, and users will be able to download it. You can now monitor its performance, gather user feedback, and update it as needed.</p>
<h3 id="heading-tips-for-success-on-the-play-store"><strong>Tips for Success on the Play Store</strong></h3>
<ul>
<li><p><strong>Keep your app updated</strong>: Regular updates with bug fixes, new features, and optimizations will help keep your app relevant and user-friendly.</p>
</li>
<li><p><strong>Use App Analytics</strong>: Leverage the Play Console’s analytics to track your app’s performance and user engagement.</p>
</li>
<li><p><strong>Respond to Reviews</strong>: Engage with your users by responding to their reviews, whether positive or negative. This can help improve your app’s reputation.</p>
</li>
</ul>
<h3 id="heading-conclusion"><strong>Conclusion</strong></h3>
<p>Publishing your app on the Play Store is an exciting process that opens up new opportunities for growth and recognition. By following the steps outlined in this guide, you’ll be on your way to sharing your app with the world in no time.</p>
<hr />
<p>References-</p>
<p><a target="_blank" href="https://appinventiv.com/blog/how-to-submit-app-to-google-play-store/">https://appinventiv.com/blog/how-to-submit-app-to-google-play-store/</a></p>
<p><a target="_blank" href="https://blog.felgo.com/mobile-development-tips/how-to-publish-an-app-on-google-play">https://blog.felgo.com/mobile-development-tips/how-to-publish-an-app-on-google-play</a></p>
<p><a target="_blank" href="https://www.techmagnate.com/blog/how-to-publish-an-app-on-the-google-play-store/">https://www.techmagnate.com/blog/how-to-publish-an-app-on-the-google-play-store/</a></p>
]]></content:encoded></item><item><title><![CDATA[Masterclass #2: Understanding Web Fundamentals]]></title><description><![CDATA[In today’s digital world websites are the backbone of online presence and understanding web fundamentals is essential for anyone looking to create, design or optimize a website. Whether you’re a beginner or an aspiring developer learning HTML, CSS an...]]></description><link>https://blog.atomxel.com/masterclass-2-understanding-web-fundamentals</link><guid isPermaLink="true">https://blog.atomxel.com/masterclass-2-understanding-web-fundamentals</guid><category><![CDATA[atomxel]]></category><category><![CDATA[atomxel-academy]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[HTML5]]></category><category><![CDATA[CSS]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[workshop]]></category><category><![CDATA[internet]]></category><category><![CDATA[webdev]]></category><dc:creator><![CDATA[Sulabh Sharma]]></dc:creator><pubDate>Tue, 04 Feb 2025 04:30:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1738566388765/2dbd7558-6d25-4ad8-83fc-b700b2e05aff.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In today’s digital world websites are the backbone of online presence and understanding <strong>web fundamentals</strong> is essential for anyone looking to create, design or optimize a website. Whether you’re a beginner or an aspiring developer learning <strong>HTML, CSS and JavaScript</strong> will empower you to build engaging and responsive web pages. <strong>Masterclass</strong> session was conducted on <strong>1st February 2025</strong> at our Noida office about Web fundamentals and this blog contains the <strong>key learnings of session.</strong></p>
<h2 id="heading-topics-covered-in-masterclass">Topics covered in Masterclass</h2>
<h2 id="heading-1-what-is-the-internet"><strong>1. What is the Internet?</strong></h2>
<p>The <strong>internet</strong> is a vast network that connects the whole world, allowing us to access information, communicate and share data instantly. Every website, app and online service relies on this <strong>global network of computers</strong> to function.</p>
<hr />
<h2 id="heading-2-how-does-the-internet-work"><strong>2. How Does the Internet Work?</strong></h2>
<p>When you type <a target="_blank" href="http://www.google.com"><strong>www.google.com</strong></a> into your browser, several steps happen behind the scenes:</p>
<p>🔹 <strong>Web Browser – Your Digital Navigator</strong>: The browser (Chrome, Firefox, Edge) helps you access websites by interpreting web code.<br />🔹 <strong>URL – The Internet’s Home Address</strong>: A <strong>URL (Uniform Resource Locator)</strong> like <a target="_blank" href="http://www.google.com">www.google.com</a> tells your browser where to find a website.<br />🔹 <strong>DNS – The Internet’s Phonebook</strong>: The <strong>Domain Name System (DNS)</strong> translates the website name (e.g. google.com) into an IP address.<br />🔹 <strong>Request – Knocking on Google’s Door</strong>: The browser sends a request to <strong>Google’s servers</strong> asking for the webpage.<br />🔹 <strong>Storage – The Internet’s Library</strong>: Web servers store <strong>databases</strong> where websites and data are saved.<br />🔹 <strong>Response – Getting the Webpage</strong>: Once the request is processed, <strong>Google’s web server</strong> sends back the requested page.</p>
<p>This entire process happens in milliseconds!</p>
<hr />
<h2 id="heading-3-webpages-and-websites"><strong>3. Webpages and Websites</strong></h2>
<p>A <strong>webpage</strong> is a single document on the internet while <strong>website</strong> is a collection of linked webpages.</p>
<p>🔹 <strong>Hyperlinks – The Web’s Connectors</strong>: Hyperlinks help navigate between different webpages.<br />🔹 <strong>Static vs. Dynamic Websites</strong>:</p>
<ul>
<li><p><strong>Static Websites</strong>: Fixed content (e.g., basic blogs, portfolio sites).</p>
</li>
<li><p><strong>Dynamic Websites</strong>: Interactive, database-driven content (e.g., Facebook, YouTube).</p>
</li>
</ul>
<hr />
<h2 id="heading-4-http-vs-https"><strong>4. HTTP vs HTTPS</strong></h2>
<p>🔹 <strong>HTTP (Hypertext Transfer Protocol)</strong>: A communication protocol that allows data transfer between web browsers and servers.<br />🔹 <strong>HTTPS (Secure HTTP)</strong>: Uses <strong>encryption</strong> (SSL/TLS) to protect sensitive information, ensuring data security. Eg. banking system</p>
<p>Websites with <strong>HTTPS</strong> are safer preventing cyber threats like data interception.</p>
<hr />
<h2 id="heading-5-frontend-vs-backend-development"><strong>5. Frontend vs Backend Development</strong></h2>
<p>🔹 <strong>Frontend (Client-Side)</strong>: Everything users see and interact with on a webpage (HTML, CSS, JavaScript).<br />🔹 <strong>Backend (Server-Side)</strong>: Manages data processing, databases, and user authentication (PHP, Node.js, Python).</p>
<p>A well-functioning website requires both <strong>frontend and backend</strong> development.</p>
<hr />
<h2 id="heading-6-html-the-structure-of-the-web"><strong>6. HTML: The Structure of the Web</strong></h2>
<p>HTML (<strong>Hypertext Markup Language</strong>) is the foundation of every webpage. It defines the structure of content using <strong>tags</strong>.</p>
<p>Students wrote <strong>live HTML code</strong>, creating a simple webpage with headings, paragraphs, links and images. To make your HTML skills more better you can refer to this site- <a target="_blank" href="https://www.w3schools.com/html/default.asp">https://www.w3schools.com/html/default.asp</a></p>
<hr />
<h2 id="heading-7-css-styling-the-web"><strong>7. CSS: Styling the Web</strong></h2>
<p>CSS (<strong>Cascading Style Sheets</strong>) is used to style webpages making them visually appealing.</p>
<p>🔹 It controls <strong>colors, fonts, layouts and responsiveness</strong>.<br />🔹 A basic overview was presented, highlighting how CSS makes websites attractive.</p>
<hr />
<h2 id="heading-8-javascript"><strong>8. JavaScript</strong></h2>
<p>JavaScript is the <strong>programming language of the web</strong> making websites interactive. The mentor conducted a <strong>live coding session</strong> covering:</p>
<p>🔹 <strong>Data Types</strong> (Numbers, Strings, Booleans, Arrays, Objects)<br />🔹 <strong>Variables</strong> (var, let, const)<br />🔹 <strong>Loops</strong> (for, while)<br />🔹 <strong>Conditional Statements</strong> (if-else)<br />🔹 <strong>Functions</strong> (Reusable blocks of code)</p>
<p>To make your HTML skills more better you can refer to this site- <a target="_blank" href="https://javascript.info/">https://javascript.info/</a> &amp; <a target="_blank" href="https://www.programiz.com/javascript/online-compiler/">https://www.programiz.com/javascript/online-compiler/</a></p>
<hr />
<h2 id="heading-9-student-qampa-session"><strong>9. Student Q&amp;A Session</strong></h2>
<p>After the session, students asked questions and clarified their doubts on:</p>
<ul>
<li><p><strong>Frontend vs Backend development</strong></p>
</li>
<li><p><strong>Best practices for writing clean code</strong></p>
</li>
<li><p><strong>How to start a web development project</strong></p>
</li>
</ul>
<hr />
<h2 id="heading-10-class-summary-amp-next-steps"><strong>10. Class Summary &amp; Next Steps 🚀</strong></h2>
<p>Today's masterclass provided <strong>a strong foundation in web fundamentals</strong>. Students now understand:<br />✔️ How the internet works<br />✔️ The difference between webpages &amp; websites<br />✔️ The role of HTTP &amp; HTTPS<br />✔️ The importance of frontend &amp; backend development<br />✔️ Basic coding in <strong>HTML, CSS and JavaScript</strong></p>
<p>The next step? <strong>Practice!</strong> Start coding simple web projects and explore more about web development.</p>
<hr />
<h3 id="heading-conclusion"><strong>Conclusion</strong></h3>
<p>Today’s session was just the beginning! Web development is a vast and exciting field and <strong>consistent practice is key</strong>. Keep experimenting, building and learning.</p>
<p>Keep exploring and learning. <strong>Happy coding.</strong></p>
<h3 id="heading-references">References</h3>
<p><a target="_blank" href="https://www.programiz.com/javascript/online-compiler/">https://www.programiz.com/javascript/online-compiler/</a></p>
<p><a target="_blank" href="https://javascript.info/">https://javascript.info/</a></p>
<p><a target="_blank" href="https://www.w3schools.com/html/default.asp">https://www.w3schools.com/html/default.asp</a></p>
]]></content:encoded></item><item><title><![CDATA[AI in Your Pocket: How Smartphones are Getting Smarter]]></title><description><![CDATA[Introduction
Imagine a world where your smartphone not only understands your needs but predicts them—this is the reality Artificial Intelligence (AI) has brought to mobile technology. Over the years, AI has evolved from being a futuristic concept to ...]]></description><link>https://blog.atomxel.com/ai-in-your-pocket-how-smartphones-are-getting-smarter</link><guid isPermaLink="true">https://blog.atomxel.com/ai-in-your-pocket-how-smartphones-are-getting-smarter</guid><category><![CDATA[atomxel]]></category><category><![CDATA[atomxel-academy]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[gemini]]></category><category><![CDATA[Siri]]></category><category><![CDATA[generative ai]]></category><category><![CDATA[Google]]></category><category><![CDATA[Apple]]></category><category><![CDATA[Samsung]]></category><category><![CDATA[chatgpt]]></category><category><![CDATA[openai]]></category><dc:creator><![CDATA[Kashish Nanwani]]></dc:creator><pubDate>Mon, 03 Feb 2025 05:39:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1736872718857/7cb22957-d66b-4d23-9e4a-18a0ef530e46.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction">Introduction</h1>
<p>Imagine a world where your smartphone not only understands your needs but predicts them—this is the reality Artificial Intelligence (AI) has brought to mobile technology. Over the years, AI has evolved from being a futuristic concept to a tangible force in our daily lives. A key milestone in this journey was the launch of Siri in 2011, which made AI assistants widely accessible and transformed the way users interacted with their phones.</p>
<p>The journey of AI in mobile phones is nothing short of transformative. What started as simple devices for communication has evolved into sophisticated, intelligent companions. Early mobile phones offered only basic functionalities, but with the integration of AI, these devices now serve as dynamic tools capable of adapting to and enhancing our daily lives.</p>
<p>Today, AI is at the core of smartphone innovation. Features like facial recognition, augmented reality, and adaptive performance optimization have turned mobile phones into indispensable tools. These advancements not only improve usability but also offer groundbreaking applications in photography, security, and personalized experiences.</p>
<h2 id="heading-ai-trends-in-mobile-phones">AI Trends in Mobile Phones</h2>
<p>The integration of Artificial Intelligence (AI) into mobile phones has redefined how we interact with our devices. From enhancing photography to bolstering security, AI drives innovation in mobile technology. Let’s explore the key AI trends shaping the future of smartphones:</p>
<h4 id="heading-1-ai-powered-photography"><strong>1. AI-Powered Photography</strong></h4>
<p>Modern smartphones leverage AI to redefine mobile photography, allowing users to capture professional-quality images effortlessly.</p>
<p><strong>Image Recognition</strong></p>
<p>AI algorithms enable smartphones to detect scenes, objects, and faces in real-time. This recognition allows the camera to automatically adjust settings such as exposure, focus, and color balance to suit the identified subject, resulting in optimized photos without manual intervention.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736861076779/b2cb8c17-496a-4c87-a1bf-3be33ca93d74.png" alt class="image--center mx-auto" /></p>
<p><strong>Low-Light Photography</strong></p>
<p>In challenging lighting conditions, AI-driven computational photography techniques come into play. By capturing multiple exposures and intelligently merging them, AI reduces noise and enhances details, producing clearer and brighter images in low-light environments.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736868575276/5404ee18-688e-428d-a4ad-9879b59fdf24.webp" alt class="image--center mx-auto" /></p>
<p><strong>Real-Time Filters and Effects</strong></p>
<p>AI-powered features offer real-time beautification and augmented reality (AR) effects. These include skin smoothing, virtual makeup, and AR stickers that interact seamlessly with facial movements, providing users with creative tools to enhance their photos and videos instantly.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736869161913/43012223-8a88-450f-92b4-aecfff7bc8a6.png" alt class="image--center mx-auto" /></p>
<p><strong>Video Stabilization</strong></p>
<p>AI contributes to video stabilization by analyzing motion patterns and compensating for unintended movements. This results in smoother, more professional-looking videos, even when recorded handheld or in dynamic situations.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736869273885/ddbf6ac4-d3d3-4696-a699-881a13453f16.webp" alt class="image--center mx-auto" /></p>
<h3 id="heading-timeline-of-ai-milestones-in-mobile-technology"><strong>Timeline of AI Milestones in Mobile Technology</strong></h3>
<p>Here's a chronological overview of pivotal moments where AI has significantly influenced mobile technology:</p>
<ol>
<li><p><strong>2011: Introduction of Siri</strong></p>
<ul>
<li>Apple launched Siri, the first virtual assistant integrated into a smartphone, enabling voice-activated commands and setting the stage for AI-driven personal assistants.</li>
</ul>
</li>
<li><p><strong>2014: Google Now</strong></p>
<ul>
<li>Google introduced Google Now, offering predictive information and voice search capabilities, enhancing user experience through AI.</li>
</ul>
</li>
<li><p><strong>2016: Samsung's S Voice</strong></p>
<ul>
<li>Samsung launched S Voice, its AI-powered virtual assistant, marking the company's initial foray into AI integration in smartphones.</li>
</ul>
</li>
<li><p><strong>2017: Introduction of AI-Specific Hardware</strong></p>
<ul>
<li>Huawei's Kirin 970 became the first mobile processor with a dedicated Neural Processing Unit (NPU), optimizing AI tasks on smartphones.</li>
</ul>
</li>
<li><p><strong>2018: AI-Powered Photography</strong></p>
<ul>
<li>Google's Pixel 3 utilized AI for features like Night Sight, enhancing low-light photography without the need for a flash.</li>
</ul>
</li>
<li><p><strong>2019: On-Device AI Processing</strong></p>
<ul>
<li>Apple's A13 Bionic chip featured an advanced Neural Engine, enabling real-time AI processing for tasks like facial recognition and augmented reality.</li>
</ul>
</li>
<li><p><strong>2020: Samsung's Galaxy AI</strong></p>
<ul>
<li>Samsung introduced its Galaxy AI suite, enhancing user experience with features like real-time language translation and intelligent photo editing.</li>
</ul>
</li>
<li><p><strong>2022: AI in Foldable Devices</strong></p>
<ul>
<li>Samsung's Galaxy Z Fold series incorporated AI to optimize app continuity and multitasking across different screen modes.</li>
</ul>
</li>
<li><p><strong>2024: Generative AI Features</strong></p>
<ul>
<li>Samsung's Galaxy S24 Ultra debuted with generative AI capabilities, including real-time voice translation and AI-driven photo editing.</li>
</ul>
</li>
<li><p><strong>2025: AI-Enhanced User Interfaces</strong></p>
<ul>
<li>Apple's iPhone 16 series introduced "Apple Intelligence," integrating AI for personalized user experiences and advanced privacy features.</li>
</ul>
</li>
</ol>
<h3 id="heading-user-centric-benefits"><strong>User-Centric Benefits</strong></h3>
<p>AI trends aren’t just about cutting-edge technology—they’re about enhancing everyday life for users. From accessibility to personalization, here’s how AI makes smartphones indispensable:</p>
<ul>
<li><p><strong>Accessibility for All</strong>: AI tools like Apple’s Voiceover provide screen narration for visually impaired users. Advanced systems even describe images aloud, making digital content more inclusive.</p>
</li>
<li><p><strong>Enhanced Productivity</strong>: Netflix’s AI-driven recommendation engine, which boasts up to 80% accuracy, demonstrates how predictive technology improves user experience. Similar capabilities are integrated into smartphones for app and content recommendations.</p>
</li>
<li><p><strong>Health and Wellness</strong>: Apps like Samsung Health use AI to analyze user data and provide insights on sleep patterns, activity levels, and even stress management tips.</p>
</li>
</ul>
<p><strong>The Future of Artificial Intelligence in Mobile Phones</strong></p>
<p>Artificial Intelligence (AI) is set to transform the mobile phone experience in unprecedented ways. As AI technology advances, smartphones will become smarter, more intuitive, and highly personalized. Here are the key innovations shaping the future of AI in mobile phone technology:</p>
<ul>
<li><ol>
<li><strong>Advancements in AI-Powered Chipsets</strong></li>
</ol>
</li>
</ul>
<p>    The rapid evolution of AI-centric chipsets is a major driving force behind the integration of AI in mobile phones. Leading manufacturers such as Qualcomm, MediaTek, and Samsung are creating specialized AI processors to power the next generation of smartphones. These advanced chipsets will allow AI computations to occur directly on the device, resulting in quicker response times and improved user privacy.</p>
<ol start="2">
<li><strong>Generative AI and Multimodal Functionality</strong></li>
</ol>
<p>    Generative AI, capable of producing new content like images, text, and audio, is set to revolutionize mobile capabilities. By 2027, over a billion smartphones equipped with generative AI are expected to be shipped, enabling groundbreaking features such as AI-driven photo editing, virtual assistants with more natural, human-like interactions, and enhanced tools for accessibility, especially for users with disabilities.</p>
<ol start="3">
<li><strong>Enhanced Personalization and Predictive Features</strong></li>
</ol>
<p>    AI will further refine personalization in mobile phones, with advanced algorithms that learn user behavior and preferences to adapt device functionalities accordingly. This includes smarter predictive text, curated content recommendations, and intelligent task automation. As AI grows more sophisticated, it will anticipate user needs and provide proactive suggestions and assistance, creating a seamless and highly efficient mobile experience.</p>
<hr />
<h3 id="heading-ethical-considerations"><strong>Ethical Considerations</strong></h3>
<p>As AI advances, ethical questions around data privacy and security have become more prominent. For example, facial recognition technology has sparked debates about user consent and data protection, leading to regulations like GDPR that aim to safeguard personal information.</p>
<hr />
<p>AI has transformed smartphones from simple communication tools into personalized, intelligent companions. As these technologies continue to evolve, the possibilities are endless—from smarter photography and assistants to sustainable energy practices and beyond.</p>
<p>References-</p>
<p><a target="_blank" href="https://www.prismetric.com/ai-in-mobile-phones/">https://www.prismetric.com/ai-in-mobile-phones/</a></p>
<p><a target="_blank" href="https://www.solulab.com/ai-in-mobile-phones/">https://www.solulab.com/ai-in-mobile-phones/</a></p>
<p><a target="_blank" href="https://glance.com/us/articles/future-of-artificial-intelligence">https://glance.com/us/articles/future-of-artificial-intelligence</a></p>
]]></content:encoded></item><item><title><![CDATA[Masterclass #1: Introduction to Mobile App Development and Problem-Solving Basics]]></title><description><![CDATA[Staring the journey of mobile app development can feel overwhelming but with the right guidance it becomes a pathway to innovation and creativity. Welcome to Masterclass on Mobile App Development where we’ll take you through with some Basics of Probl...]]></description><link>https://blog.atomxel.com/masterclass-1-introduction-to-mobile-app-development-and-problem-solving-basics</link><guid isPermaLink="true">https://blog.atomxel.com/masterclass-1-introduction-to-mobile-app-development-and-problem-solving-basics</guid><category><![CDATA[atomxel]]></category><category><![CDATA[atomxel-academy]]></category><category><![CDATA[Mobile Development]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[teaching]]></category><category><![CDATA[coding]]></category><dc:creator><![CDATA[Sulabh Sharma]]></dc:creator><pubDate>Tue, 21 Jan 2025 10:16:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1737454442873/a0efb433-8ec5-4ab5-a106-64ca0a7de6e4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Staring the journey of mobile app development can feel overwhelming but with the right guidance it becomes a pathway to innovation and creativity. Welcome to <strong>Masterclass on Mobile App Development</strong> where we’ll take you through with some Basics of Problem Solving, Mobile App Development, Career Opportunities types of Mobile Apps programming languages basics, industry insights and different apps Native and Hybrid etc. This offline session was conducted on <strong>18th January 2025</strong> at our Noida office, and this blog documents the key learnings for everyone.</p>
<h2 id="heading-why-mobile-app-development">Why mobile app development ?</h2>
<p>The mobile app industry is booming with millions of apps available across platforms like iOS and Android. Whether you’re an aspiring developer a tech enthusiast or a business owner looking to create an app for your brand, we will help you learning basics of <strong>programming and how mobile apps are built in this masterclass.</strong></p>
<h3 id="heading-when-we-asked-students-why-they-want-to-learn-app-development-read-their-inspiring-answers-below">When we asked students why they want to learn app development? Read their inspiring answers below</h3>
<ul>
<li><p>Many students shared that they find it <strong>fascinating</strong> to understand how apps are developed and brought to life.</p>
</li>
<li><p>A Chartered Accountant in the class expressed his desire to <strong>automate processes for people</strong> inspired by his extensive work with Excel.</p>
</li>
<li><p>One student was keen on learning mobile app development as a <strong>creative endeavor</strong> want to make exciting games.</p>
</li>
<li><p>Another participant wanted to create apps that bring <strong>ease and comfort to people’s lives</strong>.</p>
</li>
<li><p>A professional student previously working in a manufacturing company, revealed his interest stemmed from his experience with <strong>large machines being commanded through code</strong>. He was eager to learn how such technologies work at a deeper level.</p>
</li>
</ul>
<h2 id="heading-topics-covered-in-masterclass">Topics covered in masterclass</h2>
<p>Our recent Masterclass aimed to demystify this exciting domain by starting with the basics:</p>
<h3 id="heading-1-problem-solving-the-core-skill"><strong>1. Problem Solving: The Core Skill</strong></h3>
<ul>
<li>We opened with a session on the basics of problem-solving, emphasizing that every app starts with a problem waiting to be solved. Students were encouraged to think critically, break down problems, and brainstorm solutions that could be transformed into mobile applications</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1737357157890/7e5c146b-4f55-4fbc-9b53-72afb12829d5.png" alt class="image--center mx-auto" /></p>
<p>.</p>
<h3 id="heading-2-explored-some-fundamentals">2. Explored some fundamentals</h3>
<ul>
<li><p><strong>Algorithm: The Recipe Instructions</strong><br />  Just like a cooking recipe outlines <strong>step-by-step instructions</strong> to prepare a dish, an algorithm is a structured set of steps to solve a problem in programming. It's the plan you follow to achieve a desired outcome.</p>
</li>
<li><p><strong>Variables: The Ingredients</strong><br />  Variables are the <strong>ingredients of your program.</strong> They store data, just like flour, sugar and eggs are stored before being mixed to bake a cake</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1737357252595/12fc80b2-179c-4fbd-a1fb-68f745e01718.png" alt class="image--center mx-auto" /></p>
<p>  .</p>
</li>
<li><p><strong>Six Basic Computer Instructions: The Cooking Actions</strong></p>
<ul>
<li><p><strong>Input</strong>: Gathering ingredients from your pantry (data collection).</p>
</li>
<li><p><strong>Output</strong>: Plating the finished dish (displaying results).</p>
</li>
<li><p><strong>Processing</strong>: Mixing, kneading or blending (performing operations on data).</p>
</li>
<li><p><strong>Storage</strong>: Refrigerating leftovers (saving data for future use).</p>
</li>
<li><p><strong>Decision-Making</strong>: Deciding when the dish is done based on color or smell (logic to take actions).</p>
</li>
<li><p><strong>Iteration</strong>: Stirring continuously until the sauce thickens (repeating tasks until conditions are met)</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-3-learn-by-doing">3. Learn by doing</h3>
<ul>
<li><p><strong>Students were presented with scenarios and encouraged to:</strong></p>
<ul>
<li><p>Break down complex problems into manageable parts.</p>
</li>
<li><p>Think critically to identify efficient solutions.</p>
</li>
<li><p>Collaborate with peers, exploring diverse approaches to problem-solving.</p>
</li>
</ul>
</li>
</ul>
<p>    This activity mirrored challenges faced in real-world app development and highlighted the value of analytical thinking.</p>
<ul>
<li><p><strong>Creating flowcharts</strong><br />  In the next step, students translated their solutions into structured pseudo-designs by:</p>
<ul>
<li><p>Defining app functionality and outlining its features.</p>
</li>
<li><p>Visualizing workflows and logic through flowcharts and diagrams.</p>
</li>
<li><p>Writing pseudo-code, serving as a blueprint before actual coding begins.</p>
</li>
</ul>
</li>
</ul>
<p>    These exercises taught participants the importance of planning and organization, ensuring their apps would be efficient and scalable. Please refer to the solved example below.</p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1737356689636/99b966db-57e9-4e8c-a2a5-62a2ffb49e98.png" alt class="image--center mx-auto" /></p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1737357347579/e72714b6-199b-4e20-ae9a-7f9c9c98e5a5.png" alt class="image--center mx-auto" /></p>
<ul>
<li><strong>The Impact of Active Learning</strong><br />  By solving queries and creating flow charts, students gained both theoretical understanding and practical skills.</li>
</ul>
<h2 id="heading-building-the-future-diving-into-mobile-app-development"><strong>Building the Future: Diving into Mobile App Development</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1737354687457/fd245534-a8db-410d-8ba5-dfa2f0a4939d.png" alt class="image--center mx-auto" /></p>
<p>With a solid foundation in place the Masterclass transitioned into an exploration of mobile app development. Here’s what we covered:</p>
<ol>
<li><p><strong>Exploring Tools and Frameworks</strong><br /> Students were introduced to industry-standard tools and frameworks such as:</p>
<ul>
<li><p><strong>React Native and Flutter</strong> for creating cross-platform apps, Hybrid apps</p>
</li>
<li><p><strong>Kotlin and Swift</strong> for building native Android and iOS applications, Native Apps</p>
</li>
</ul>
</li>
<li><p><strong>User Interface (UI) Design Essentials</strong><br /> Designing user-friendly interfaces is key to any successful app. Participants learned:</p>
<ul>
<li><p>Principles of user-centered design.</p>
</li>
<li><p>Basic familiarity wireframes and prototypes to visualize app functionality.</p>
</li>
<li><p>Maintaining consistent and intuitive UI for seamless user experiences.</p>
</li>
</ul>
</li>
<li><p><strong>Frontend and Backend terminologies</strong><br /> To make apps more functional, students explored API integration basics, including:</p>
<ul>
<li><p>How backend and frontend works.</p>
</li>
<li><p>Importance of database.</p>
</li>
<li><p>Understanding secure data communication between the app and servers.</p>
</li>
</ul>
</li>
<li><p><strong>Learning from Real-World Case Studies</strong></p>
<ul>
<li>Real-world examples were analyzed to understand the strategies behind successful apps, helping students connect theoretical knowledge with practical applications.</li>
</ul>
</li>
</ol>
<h2 id="heading-key-takeaways">Key Takeaways</h2>
<ol>
<li><p><strong>Understanding the Basics of Programming</strong><br /> Participants built a basic foundation by learning algorithms, variables, and the six basic computer instructions essential for app development.</p>
</li>
<li><p><strong>Mastering Pseudocode Writing</strong><br /> Students practiced writing pseudocode and flowcharts allowing them to translate ideas into clear and actionable steps before actual coding.</p>
</li>
<li><p><strong>Developing Problem-Solving Skills</strong><br /> Through hands-on activities students learned to deconstruct complex problems, analyze solutions, and approach challenges systematically.</p>
</li>
<li><p><strong>Steps of cycle of mobile app development</strong><br /> From problem-solving to deployment, students were guided through the complete mobile app development lifecycle, empowering them to turn ideas into reality.</p>
</li>
</ol>
<h2 id="heading-conclusion">Conclusion</h2>
<p>This Masterclass laid the groundwork for students to begin their journey in mobile app development. By understanding <strong>programming fundamentals, creating flowcharts and writing pseudocode</strong>. They are now ready to start writing basic code and with continued learning and practice they will be able to build, enhance and modify apps thus turning their ideas into impactful digital solutions.</p>
]]></content:encoded></item><item><title><![CDATA[Top 5 Programming languages for Mobile App Development in 2025]]></title><description><![CDATA[Mobile apps are central to our daily lives with global downloads expected to surpass 258 billion by 2025. As the demand for high-quality apps grows the role of programming languages becomes crucial in shaping the future of mobile development. Languag...]]></description><link>https://blog.atomxel.com/top-5-programming-languages-for-mobile-app-development-in-2025</link><guid isPermaLink="true">https://blog.atomxel.com/top-5-programming-languages-for-mobile-app-development-in-2025</guid><category><![CDATA[atomxel-academy]]></category><category><![CDATA[atomxel]]></category><category><![CDATA[Mobile Development]]></category><category><![CDATA[Android]]></category><category><![CDATA[iOS]]></category><category><![CDATA[React]]></category><category><![CDATA[React Native]]></category><category><![CDATA[Swift]]></category><category><![CDATA[Kotlin]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Sulabh Sharma]]></dc:creator><pubDate>Tue, 14 Jan 2025 10:01:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1736593352419/88296862-2fbb-4e58-aa55-1cfa371a2011.avif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Mobile apps are central to our daily lives with global downloads expected to surpass <strong>258 billion</strong> by 2025. As the demand for high-quality apps grows the role of programming languages becomes crucial in shaping the future of mobile development. Languages like <strong>Swift</strong>, <strong>kotlin</strong>, <strong>JavaScript</strong> are powering today’s most popular apps and will continue to drive innovation in 2025.</p>
<p>In this blog, We'll explore the <strong>Top 5 programming languages for mobile app development</strong>, highlighting their <strong>Usage, Current stats, growth and future potential</strong> in the fast-evolving mobile ecosystem.</p>
<h3 id="heading-1-swift">1. <strong>Swift</strong></h3>
<ul>
<li><p><strong>Usage</strong>: Primarily used for iOS and macOS app development.</p>
</li>
<li><p><strong>Current Stats</strong>: Despite its popularity, only 4.<a target="_blank" href="https://www.statista.com/statistics/793628/worldwide-developer-survey-most-used-languages/">6</a> percent of developers worldwide use Swift. It is believed this community will only grow in size, <a target="_blank" href="https://www.coursera.org/articles/programming-in-swift">https://www.coursera.org/articles/programming-in-swift</a></p>
</li>
<li><p><strong>Growth</strong>: Swift is continuously evolving with regular updates from Apple making it the go-to language for iOS development. It's been the preferred language for Apple’s ecosystem <strong>since 2014.</strong></p>
</li>
<li><p><strong>Future Scope</strong>: As Apple's ecosystem grows with new devices like AR glasses. Swift’s role in developing apps for these devices will likely increase.</p>
</li>
<li><p><strong>Pros of Swift language-</strong> Fast performance, Modern Syntax, Memory safety, Active community, Cross-platform.</p>
</li>
<li><p><strong>Cons of Swift language-</strong> Limited libraries, Young language, Small Talent Pool, Platform restrictions, Slow adoption.</p>
<p>  <img src="https://preview.redd.it/kvpnympje7w71.png?width=640&amp;crop=smart&amp;auto=webp&amp;s=ad6df61297481ca6f77a83c41dec7930446bf1ae" alt="r/swift - The Swift programming language repository summary" class="image--center mx-auto" /></p>
</li>
</ul>
<h3 id="heading-2-kotlin">2. <strong>Kotlin</strong></h3>
<ul>
<li><p><strong>Usage</strong>: Kotlin is the official language for Android app development recommended by Google.</p>
</li>
<li><p><strong>Current Stats</strong>: <a target="_blank" href="https://kotlinlang.org/docs/serialization.html?_gl=1*16g0ylt*_ga*MjAxNjY2Njk4MC4xNzM2NTg3NDM4*_ga_9J976DJZ68*MTczNjc1MjA2Ni4yLjEuMTczNjc1MzA5MC4wLjAuMA..">Serialization</a> <a target="_blank" href="https://kotlinlang.org/docs/serialization.html?_gl=1*16g0ylt*_ga*MjAxNjY2Njk4MC4xNzM2NTg3NDM4*_ga_9J976DJZ68*MTczNjc1MjA2Ni4yLjEuMTczNjc1MzA5MC4wLjAuMA..">and Test</a> <a target="_blank" href="https://www.jetbrains.com/lp/devecosystem-2021/kotlin/">have</a> raised their presence by 9 and 6 percentage points respectively. In their tasks, roughly a quarter of Kotlin users apply <a target="_blank" href="https://ktor.io/">Ktor</a>, <a target="_blank" href="https://ktor.io/">an</a> asynchronous framework for creating microservices, web applications, and more, <a target="_blank" href="https://www.jetbrains.com/lp/devecosystem-2021/kotlin/#:~:text=What%20JetBrains%20Kotlin%20libraries%20and%20frameworks%20do%20you%20currently%20use?&amp;text=A%20greater%20proportion%20of%20Kotlin,%2C%20web%20applications%2C%20and%20more">https://www.jetbrains.com/lp/devecosystem-2021/kotlin/#:~:text=What%20JetBrains%20Kotlin%20libraries%20and%20frameworks%20do%20you%20currently%20use?&amp;text=A%20greater%20proportion%20of%20Kotlin,%2C%20web%20applications%2C%20and%20more</a>.</p>
</li>
<li><p><strong>Growth</strong>: Kotlin's ease of use and seamless interoperability with Java have made it a favorite for Android developers and its usage continues to rise as the preferred language for Android development.</p>
</li>
<li><p><strong>Future Scope</strong>: Kotlin is expected to maintain a dominant position in Android development as Google continues to integrate Kotlin into their frameworks and tools.</p>
</li>
<li><p><strong>Pros of kotlin language-</strong> Interoperates with Java, Concise Syntax, Null safety, Official android support, Growing community.</p>
</li>
<li><p><strong>Cons of Kotlin language-</strong> Learning Curve for Java developers, Smaller Ecosystem, Slower Compilation, Limited Job Market.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736597707556/7304831d-0daf-4dde-ab0b-3245b14f1a65.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h3 id="heading-3-javascript">3. <strong>JavaScript</strong></h3>
<ul>
<li><p><strong>Usage</strong>: JavaScript is primarily used for web development but is a top choice for cross-platform mobile apps via frameworks like React Native, Ionic and Node.js.</p>
</li>
<li><p><strong>Current Stats</strong>: JavaScript and HTML/CSS take center stage, with over 63% and approximately 55% adoption by global software developers, <a target="_blank" href="https://www.globalapptesting.com/blog/mobile-app-development-statistics-and-facts">https://www.globalapptesting.com/blog/mobile-app-development-statistics-and-facts</a></p>
</li>
<li><p><strong>Growth</strong>: JavaScript frameworks like React Native allow for faster, more efficient development of cross-platform apps. This trend is growing as developers look to write once and deploy on both iOS and Android.</p>
</li>
<li><p><strong>Future Scope</strong>: JavaScript will continue to lead cross-platform development, with more businesses adopting frameworks like React Native for cost-effective and scalable solutions.</p>
</li>
<li><p><strong>Pros of JavaScript language-</strong> Cross-Platform development, Huge ecosystem, High demand for developers, Rich libraries &amp; frameworks, Fast prototyping.</p>
</li>
<li><p><strong>Cons of JavaScript Language-</strong> Performance issues, Callback hell, Single-threaded nature, Difficult debugging, Code maintenance challenges.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736597684203/0b4a3ed5-cb68-48d6-9086-4471ae30a67c.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h3 id="heading-4-dart">4. <strong>Dart</strong></h3>
<ul>
<li><p><strong>Usage</strong>: Dart is primarily used in combination with Flutter for building high-performance cross-platform mobile apps.</p>
</li>
<li><p><strong>Current Stats</strong>: The top three geographies of Dart for programming-language are the United States with 237(43.57%), India with 121(22.24%), United Kingdom with 43(7.90%) customers respectively, <a target="_blank" href="https://6sense.com/tech/programming-language/dart-market-share">https://6sense.com/tech/programming-language/dart-market-share</a></p>
</li>
<li><p><strong>Growth</strong>: The simplicity and efficiency of Dart, combined with Flutter's ability to compile to native code, has led to its rise as a top choice for cross-platform development.</p>
</li>
<li><p><strong>Future Scope</strong>: Given the success of Flutter, Dart is poised for continued growth as a language of choice for building efficient, cross-platform apps.</p>
</li>
<li><p><strong>Pros of Dart language-</strong> High performance, Flutter integration, Fast development, Cross-platform efficiency, Strong google support</p>
</li>
<li><p><strong>Cons of Dart language-</strong> Small talent pool, Limited native support, Relatively new language, Lack of mature libraries, App size concerns.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736597669627/8f79ecaf-2019-4d57-8dec-e53bf7d5e116.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h3 id="heading-5-python">5. <strong>Python</strong></h3>
<ul>
<li><p><strong>Usage</strong>: Python is typically used for backend development, but frameworks like Kivy, BeeWare allow developers to build mobile apps but is very limited in use.</p>
</li>
<li><p><strong>Current Stats</strong>: According to <strong>TIOBE’s Index (2024)</strong>, <a target="_blank" href="https://www.tiobe.com/tiobe-index/">https://www.tiobe.com/tiobe-index/</a> Python usage increased by <strong>9.3%</strong> in 2024 <strong>but use in mobile app development is very less.</strong></p>
</li>
<li><p><strong>Growth</strong>: Python’s simplicity and vast ecosystem make it an attractive option for rapid prototyping and app development, but it faces <strong>limitations</strong> in terms of performance for 3resource-intensive apps.</p>
</li>
<li><p><strong>Future Scope</strong>: While Python may not replace native languages like Swift or Kotlin for mobile development, its growth in fields like AI, machine learning, and web development positions it as a valuable language for mobile developers who want to integrate these features.</p>
</li>
<li><p><strong>Pros of Python language-</strong> Easy to learn, Rich ecosystem, Cross-platform frameworks, Rapid prototyping, Versatile</p>
</li>
<li><p><strong>Cons of Python language-</strong> Performance limitations, Not natively supported on mobile, Limited mobile-specific tools, App size issues, Not ideal for performance Apps</p>
</li>
<li><p><strong>Why Python is not Popular for Mobile App Development-</strong> Python is not popular in mobile app development primarily due to <strong>performance</strong> and <strong>ecosystem limitations</strong>. As an <strong>interpreted language</strong> Python tends to be slower than <strong>natively compiled languages</strong> like Swift for iOS or Kotlin for Android which are optimized for mobile environments. Mobile apps often require <strong>high performance</strong> especially for resource-intensive tasks such as complex animations or real-time processing making native languages a more efficient choice. Additionally mobile operating systems have <strong>robust, platform-specific development environments</strong> with strong integration to their respective APIs, something Python lacks. While frameworks like <strong>Kivy</strong> and <strong>BeeWare</strong> offer Python-based development options they are not as <strong>mature</strong> or <strong>feature-rich</strong> as their native counterparts, leading to challenges in scalability, usability and access to advanced platform features. Furthermore, Python apps may face <strong>compatibility issues</strong> or difficulties during the <strong>app submission process</strong> to app stores which further diminishes its attractiveness for mobile development. Consequently developers often prefer more established technologies like <strong>Swift</strong>, <strong>Kotlin</strong> and cross-platform tools like <strong>Flutter</strong> or <strong>React Native</strong> for building mobile applications.</p>
<p>  <img src="https://cdn-cjmik.nitrocdn.com/UjszoEMIGzQLBmRYICliaPmdTnvQlovN/assets/images/optimized/rev-b7b1dec/www.aalpha.net/wp-content/uploads/2019/10/Python-programming-india.jpg" alt="python frameworks" /></p>
<h2 id="heading-a-comparative-analysis-of-popular-programming-languages">A Comparative Analysis of Popular Programming Languages</h2>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736747145455/c434fe2c-f4a3-43d7-a014-07f4c9be376a.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-conclusion"><strong>Conclusion</strong></h3>
<p>  Each of these programming languages has carved out a significant space in the mobile app development ecosystem. <strong>Swift</strong> and <strong>Kotlin</strong> dominate their respective platforms, <strong>JavaScript</strong> powers cross-platform frameworks, <strong>Dart</strong> is on the rise thanks to <strong>Flutter</strong>, and <strong>Python</strong> is an excellent choice for certain mobile applications, especially those integrating advanced technologies. Understanding their roles, adoption, and growth trends will help developers choose the right tools for the rapidly evolving mobile development landscape in 2025.</p>
<hr />
</li>
</ul>
<h3 id="heading-references"><strong>References</strong></h3>
<ul>
<li><p><a target="_blank" href="https://survey.stackoverflow.co/2024/">https://survey.stackoverflow.co/2024/</a></p>
</li>
<li><p><a target="_blank" href="https://www.coursera.org/articles/programming-in-swift">https://www.coursera.org/articles/programming-in-swift</a></p>
</li>
<li><p><a target="_blank" href="https://6sense.com/tech/programming-language/dart-market-share">https://6sense.com/tech/programming-language/dart-market-share</a></p>
</li>
<li><p><a target="_blank" href="https://www.tiobe.com/tiobe-index/">https://www.tiobe.com/tiobe-index/</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Making Your React App Multilingual]]></title><description><![CDATA[Internationalised software supports the languages and cultural customs of people throughout the world. The Web reaches all parts of the world. Internationalised web apps provide a great user experience for people everywhere.
Localised software adapts...]]></description><link>https://blog.atomxel.com/making-your-react-app-multilingual</link><guid isPermaLink="true">https://blog.atomxel.com/making-your-react-app-multilingual</guid><category><![CDATA[atomxel]]></category><category><![CDATA[React]]></category><category><![CDATA[internationalization]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Accessibility]]></category><category><![CDATA[multilingual]]></category><dc:creator><![CDATA[Ankur]]></dc:creator><pubDate>Mon, 26 Aug 2024 05:15:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1724647683700/69c1157b-f712-4e70-a7be-817937e26cbf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Internationalised software supports the languages and cultural customs of people throughout the world. The Web reaches all parts of the world. Internationalised web apps provide a great user experience for people everywhere.</p>
<p>Localised software adapts to a specific language and culture by translating text into the user's language and formatting data in accordance with the user's expectations. An app is typically localised for a small set of locales.</p>
<p>Typically, web apps are localised to just the language or language-region combination. Examples of such locale codes are:</p>
<ul>
<li><p>en for English</p>
</li>
<li><p>en-US for English as spoken in the United States</p>
</li>
<li><p>en-GB for English as spoken in the United Kingdom</p>
</li>
<li><p>es-AR for Spanish as spoken in Argentina</p>
</li>
<li><p>ar-001 for Arabic as spoken throughout the world</p>
</li>
<li><p>ar-AE for Arabic as spoken in United Arab Emirates</p>
</li>
</ul>
<p><strong>Create a new Next.js project by using below command line:</strong></p>
<pre><code class="lang-javascript">npx create-next-app@latest nextjs-app-router-i18n
</code></pre>
<p><strong>Add React Intl dependency</strong></p>
<pre><code class="lang-javascript">npm i -S react react-intl
</code></pre>
<p><strong>Create localisation files</strong></p>
<p>The en.json file</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"hello"</span>: <span class="hljs-string">"Hello, world!"</span>,
  <span class="hljs-attr">"welcome"</span>: <span class="hljs-string">"Welcome to our website"</span>
}
</code></pre>
<p>The es.json file</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"hello"</span>: <span class="hljs-string">"Hola Mundo"</span>,
  <span class="hljs-attr">"welcome"</span>: <span class="hljs-string">"Bienvenido a nuestro sitio web"</span>
}
</code></pre>
<p>The fr.json file</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"hello"</span>: <span class="hljs-string">"Bonjour le monde"</span>,
  <span class="hljs-attr">"welcome"</span>: <span class="hljs-string">"Bienvenue sur notre site Internet"</span>
}
</code></pre>
<p>Import <code>useTranslation</code> from <code>react-i18next</code> in your components</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// Page.js Entry point</span>
<span class="hljs-string">'use client'</span>
<span class="hljs-keyword">import</span> React, {
    useState
} <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> {
    FormattedMessage,
    IntlProvider
} <span class="hljs-keyword">from</span> <span class="hljs-string">'react-intl'</span>;
<span class="hljs-keyword">import</span> messages_en <span class="hljs-keyword">from</span> <span class="hljs-string">'../public/locales/en.json'</span>;
<span class="hljs-keyword">import</span> messages_fr <span class="hljs-keyword">from</span> <span class="hljs-string">'../public/locales/fr.json'</span>;
<span class="hljs-keyword">import</span> messages_sp <span class="hljs-keyword">from</span> <span class="hljs-string">'../public/locales/sp.json'</span>;
<span class="hljs-keyword">import</span> messages_hi <span class="hljs-keyword">from</span> <span class="hljs-string">'../public/locales/hindi.json'</span>;
<span class="hljs-keyword">import</span> messages_rs <span class="hljs-keyword">from</span> <span class="hljs-string">'../public/locales/rus.json'</span>;

<span class="hljs-keyword">const</span> messages = {
    <span class="hljs-attr">en</span>: messages_en,
    <span class="hljs-attr">fr</span>: messages_fr,
    <span class="hljs-attr">sp</span>: messages_sp,
    <span class="hljs-attr">hi</span>: messages_hi,
    <span class="hljs-attr">rs</span>: messages_rs,
};

<span class="hljs-keyword">const</span> App = <span class="hljs-function">() =&gt;</span> {
    <span class="hljs-keyword">const</span> [locale, setLocale] = useState(<span class="hljs-string">'en'</span>);

    <span class="hljs-keyword">const</span> handleLanguageChange = <span class="hljs-function">(<span class="hljs-params">e</span>) =&gt;</span> {
        setLocale(e.target.value);
    };

    <span class="hljs-keyword">return</span> (
        <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">IntlProvider</span> <span class="hljs-attr">locale</span>=<span class="hljs-string">{locale}</span> <span class="hljs-attr">messages</span>=<span class="hljs-string">{messages[locale]}</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">FormattedMessage</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app.title"</span> /&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">select</span> <span class="hljs-attr">onChange</span>=<span class="hljs-string">{handleLanguageChange}</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{locale}</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"en"</span>&gt;</span>English<span class="hljs-tag">&lt;/<span class="hljs-name">option</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"fr"</span>&gt;</span>French<span class="hljs-tag">&lt;/<span class="hljs-name">option</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"sp"</span>&gt;</span>Spanish<span class="hljs-tag">&lt;/<span class="hljs-name">option</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"hi"</span>&gt;</span>Hindi<span class="hljs-tag">&lt;/<span class="hljs-name">option</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"rs"</span>&gt;</span>Russian<span class="hljs-tag">&lt;/<span class="hljs-name">option</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">select</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">FormattedMessage</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app.description"</span> /&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">IntlProvider</span>&gt;</span></span>
    );
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> App;
</code></pre>
<p><a target="_blank" href="https://codepen.io/piyushnanwani/pen/NWZzxgZ">Sample code link</a> : To run the code on your browser.</p>
<p><strong>Conclusion</strong></p>
<p>Next.js offers pretty good support for internationalisation, though recent routing updates have added some complexity. We've shown how to integrate the React Intl library with Next.js, utilizing both the App Router and Pages Router for routing.</p>
]]></content:encoded></item><item><title><![CDATA[Simplifying Git and GitHub for Developers]]></title><description><![CDATA[About Git
Git is a Version Control System that intelligently tracks changes in files. Git is particularly useful when you and a group of people are all making changes to the same files at the same time.
A version control system, or VCS, tracks the hi...]]></description><link>https://blog.atomxel.com/simplifying-git-and-github-for-developers</link><guid isPermaLink="true">https://blog.atomxel.com/simplifying-git-and-github-for-developers</guid><category><![CDATA[atomxel]]></category><category><![CDATA[React]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[React Native]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Git]]></category><category><![CDATA[github-actions]]></category><category><![CDATA[GitHubPages]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Microsoft]]></category><category><![CDATA[coding]]></category><category><![CDATA[software development]]></category><dc:creator><![CDATA[Ankur]]></dc:creator><pubDate>Fri, 16 Aug 2024 03:30:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1723650917163/8d4b6cc6-03ab-47b7-98dd-f51e240e5921.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-about-git">About Git</h3>
<p><strong>Git</strong> is a <strong>Version Control System</strong> that intelligently tracks changes in files. <strong>Git</strong> is particularly useful when you and a group of people are all making changes to the same files at the same time.</p>
<p>A version control system, or VCS, tracks the history of changes as people and teams collaborate on projects together. As developers make changes to the project, any earlier version of the project can be recovered at any time.</p>
<h3 id="heading-what-is-github">What is GitHub ?</h3>
<p>GitHub is an online SaaS service. GitHub is a cloud-based platform where you can store, share, and work together with others to write code.</p>
<p>Storing your code in a "repository" on GitHub allows you to:</p>
<ul>
<li><p>Showcase <strong>or share</strong> your work.</p>
</li>
<li><p>Track and manage changes to your code over time.</p>
</li>
<li><p>Let others <strong>review</strong> your code, and make suggestions to improve it.</p>
</li>
<li><p>Collaborate on a shared project, without worrying that your changes will impact the work of your collaborators before you're ready to integrate them.</p>
</li>
</ul>
<p>Collaborative working, one of GitHub’s fundamental features, is made possible by the open-source software, Git, upon which GitHub is built.</p>
<h3 id="heading-about-repository">About Repository</h3>
<p>A repository, or Git project, encompasses the entire collection of files and folders associated with a project, along with each file's revision history.</p>
<p>Git repositories are self-contained units and anyone who has a copy of the repository can access the entire codebase and its history.</p>
<h3 id="heading-git-setup">Git Setup</h3>
<p><code>git config --global</code> <a target="_blank" href="http://user.name"><code>user.name</code></a> <code>“[firstname lastname]”</code></p>
<p>To set a name that is identifiable for credit when review version history</p>
<p><code>git config --global</code> <a target="_blank" href="http://user.email"><code>user.email</code></a> <code>“[valid-email]”</code></p>
<h3 id="heading-basic-git-commands">Basic Git commands.</h3>
<p>To use Git, developers use specific commands to copy, create, change, and combine code. These Commands can be directly executed from command line, code editor like VS Code, Intellij idea, or GitHub desktop.</p>
<ul>
<li><p><code>git init</code> : It create a repository and begins tracking the existing directory.</p>
</li>
<li><p><code>git clone</code>: It used to copy a remote repository that already exist. The clone includes all the project's files, history, and branches.</p>
</li>
<li><p><code>git add</code> : It stages a file. Git tracks changes to a developer's codebase, but it's necessary to stage and take a snapshot of the changes to include them in the project's history.</p>
</li>
<li><p><code>git commit</code> : It saves the snapshot to the project history and completes the change-tracking process. In short, a commit functions like taking a photo.</p>
</li>
<li><p><code>git status</code> : It shows the status of changes as untracked, modified, or staged.</p>
</li>
<li><p><code>git commit -m “[descriptive message]”</code> : It commits your staged content as a new commit snapshot.</p>
</li>
<li><p><code>git branch</code> : It will list your branches. a * will appear next to the currently active branch.</p>
</li>
<li><p><code>git branch [branch-name]</code> : It creates new branch at the current commit.</p>
</li>
<li><p><code>git merge [branch]</code> : It merge the specified branch’s history into the current one.</p>
</li>
<li><p><code>git push</code> : It transmit local branch commits to the remote repository branch.</p>
</li>
<li><p><code>git pull</code> : It fetch and merge any commits from the tracking remote branch.</p>
</li>
<li><p><code>git log</code> : It show all commits in the current branch’s history.</p>
</li>
</ul>
<p>Example of how we push our remote file to git.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723152770624/243623fb-9d52-41f2-8987-df79a269baab.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723152801580/61436077-6798-4e50-b92e-17a2dcfdca44.png" alt class="image--center mx-auto" /></p>
<p>Git after committing changes</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723152845558/bb273a34-00d3-4952-8b77-736d1530064d.png" alt class="image--center mx-auto" /></p>
<p>Here's an example of git clone.</p>
<p><strong>Command</strong> : <code>git clone [URL]</code></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723186635750/a1e2a5c5-279e-4a55-aa91-5b917f0ac156.png" alt class="image--center mx-auto" /></p>
<p>Here's an example of pushing local branch to remote git.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723187082031/6efdd62f-3c67-4e18-808a-2033545dce70.png" alt class="image--center mx-auto" /></p>
<p>Here's how you create a pull request</p>
<p>Navigate to your repository on GitHub and click on "New Pull Request". Provide a clear description for the Pull Request.</p>
<p>Now we merge branches using command line.</p>
<p><code>git fetch</code> : Fetch the latest change.</p>
<p><code>git checkout</code> : "base branch name".</p>
<p><code>git merge</code> : "New branch name".</p>
<p><strong>Example</strong> :</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723308862124/c3e6115d-785e-4964-b4b7-a5741e4660af.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-github-features">GitHub features</h3>
<p><strong>GitHub Codespace</strong> : Spin up fully configured dev environments in the cloud with the full power of your favorite editor. GitHub Codespaces is an instant, cloud-based development environment that uses a container to provide you with common languages, tools, and utilities for development. GitHub Codespaces is also configurable, allowing you to create a customized development environment for your project.</p>
<p><strong>GitHub Pull Request</strong> : Allow contributors to easily notify you of changes they've pushed to a repository – with access limited to the contributors you specify. Easily merge changes you accept.</p>
<p><strong>GitHub Issues:</strong> GitHub Issues are items you can create in a repository to plan, discuss and track work. Issues are simple to create and flexible to suit a variety of scenarios. You can use issues to track work, give or receive feedback, collaborate on ideas or tasks, and efficiently communicate with others. Essentially they serve pivotal point for collaborating or communicating among various element in a system.</p>
<p><strong>CI/CD GitHub:</strong> CI/CD automates your builds, testing, and deployment so you can ship code changes faster and more reliably.</p>
<ul>
<li><p>Continuous Integration : Automatically builds, tests, and integrates code changes within a shared repository.</p>
</li>
<li><p>Continuous Delivery : Automatically builds, tests, and integrates code changes within a shared repository.</p>
</li>
<li><p>Continuous Deployment : Automatically deploys code changes to customers directly.</p>
</li>
</ul>
<p><strong>GitHub Actions:</strong> You can automate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you'd like, including CI/CD, and combine actions in a completely customized workflow.</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>As we have gone through the Git and GitHub, its common command, its features that how git revolutionize your workflow. GitHub action has CI/CD that simply automate building, testing, deployment so that developer can only focus on writing code and GitHub ensure the quality and efficiency. There are still so much to discover in git.</p>
<p>Resource :</p>
<p><a target="_blank" href="https://docs.github.com/en">https://docs.github.com/en</a></p>
<p><a target="_blank" href="https://github.com/features">https://github.com/features</a></p>
]]></content:encoded></item><item><title><![CDATA[You Call Yourself a Web Developer and Don't Use Chrome Dev Tools?]]></title><description><![CDATA[Chrome Dev Tools is a powerful tool for web developer built into the Google Chrome browser. Chrome Dev Tools is indispensable tool that lets you inspect, edit and debug your code. It helps web developer to build better website and faster.
You can acc...]]></description><link>https://blog.atomxel.com/you-call-yourself-a-web-developer-and-dont-use-chrome-dev-tools</link><guid isPermaLink="true">https://blog.atomxel.com/you-call-yourself-a-web-developer-and-dont-use-chrome-dev-tools</guid><category><![CDATA[atomxel]]></category><category><![CDATA[React]]></category><category><![CDATA[#chrome_devtools]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[networking]]></category><category><![CDATA[debugging]]></category><category><![CDATA[performance]]></category><category><![CDATA[website]]></category><category><![CDATA[webdev]]></category><dc:creator><![CDATA[Ankur]]></dc:creator><pubDate>Wed, 14 Aug 2024 15:42:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1723650000627/a5dd4ff3-830b-42ca-bc0f-87d32b59411f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Chrome Dev Tools is a powerful tool for web developer built into the Google Chrome browser. Chrome Dev Tools is indispensable tool that lets you inspect, edit and debug your code. It helps web developer to build better website and faster.</p>
<p>You can access Chrome dev tools by following commands</p>
<ol>
<li><p>macOS: Command+Shift+P</p>
</li>
<li><p>Windows, Linux, ChromeOS: Control+Shift+P</p>
</li>
</ol>
<h3 id="heading-elements-panel"><strong>Elements Panel</strong></h3>
<p>The HTML and inline CSS codes are displayed in the elements tab. The Elements panel lets you inspect and edit the HTML and CSS of your page. Elements panel gives access to edit on the go so that you can see the immediate changes on the page while you can make changes to your code.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722858221426/97bfbed1-0494-45eb-b6f8-4c02de3110fb.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-console-panel"><strong>Console Panel</strong></h3>
<p>In the console, Javascript codes are executed. To get started with the Console panel, enter some JavaScript into the Console and press "Enter." The Console will evaluate the code and print the result. Web developers often log messages to the Console to make sure that their JavaScript is working as expected. To log a message, you insert an expression in console.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722858418671/fad2c454-a0b9-4c6f-a463-fdc0bbe714d0.png" alt class="image--center mx-auto" /></p>
<p>When the browser executes your JavaScript and sees an expression like that, it knows that it's supposed to log the message to the Console.</p>
<h3 id="heading-source-panel"><strong>Source Panel</strong></h3>
<p>The sources tab displays the files that contain the codes. The Sources panel lets you view and edit your page's JavaScript and CSS code.</p>
<p>Use the Chrome Dev Tools <strong>Sources</strong> panel to:</p>
<ol>
<li><p>View Files.</p>
</li>
<li><p>Edit CSS and JavaScript.</p>
</li>
<li><p>Create and save code snippets of JavaScript.</p>
</li>
<li><p>Debug JavaScript.</p>
</li>
<li><p>Set up a Workspace, so that changes you make in Dev Tools get saved to the code on your file system.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722858791578/6011f780-f7c5-499b-ab1f-f28b1e0ad78e.png" alt class="image--center mx-auto" /></p>
<p>Select a file in the "Files" pane to get started with the Sources panel. This will bring up the contents of that file in the "Editor" pane. From here, you make changes to the code and see those changes immediately reflected on the page.</p>
<h3 id="heading-network-panel"><strong>Network Panel</strong></h3>
<p>The network tab displays the files that are being loaded from the URL. Network tab used to analyze network load and resources.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722857816506/9ce7dfa3-dd65-46b2-90f5-63e51430b2a1.png" alt class="image--center mx-auto" /></p>
<p>Select a resource in the "Resources" pane to start with the Network panel. This will bring up the details of that resource in the "Details" pane. From here, you can see when the resource was loaded, how long it took to load, and what type of resource it was.</p>
<p>The Network panel lets you:</p>
<ol>
<li><p>Record network activity</p>
</li>
<li><p>Inspect network requests</p>
</li>
<li><p>Filter and sort network requests</p>
</li>
<li><p>Search network headers and responses</p>
</li>
<li><p>Change loading behavior</p>
</li>
<li><p>Block network requests</p>
</li>
<li><p>Change network conditions</p>
</li>
<li><p>Debug prefetch speculation rules</p>
</li>
<li><p>Override HTTP response headers</p>
</li>
<li><p>Override headers for multiple URLs with wildcard characters.</p>
</li>
<li><p>Save and export network request data</p>
</li>
</ol>
<h3 id="heading-performance-panel"><strong>Performance Panel</strong></h3>
<p>Runtime performance is how your page performs when it is running, as opposed to loading. This tutorial teaches you how to use the Chrome Dev Tools Performance panel to analyze runtime performance.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722859781102/123d6888-6009-43c2-953f-71a04e099687.png" alt class="image--center mx-auto" /></p>
<p>Select a resource in the "Resources" pane to get started with the Performance panel. This will bring up the details of that resource in the "Details" pane. You can check how much time it is taking to load, what type of resource it is, and what size it is.</p>
<p>You can also use the Performance panel to record a performance profile. To record a performance profile, click the "Record" button at the panel's top. This will start recording information about your page's performance. Once you have finished recording then just click the "Stop" button to save the performance profile.</p>
<h3 id="heading-application-panel"><strong>Application Panel</strong></h3>
<p>The application tab displays the contents of your browser’s storage. Use the Application panel to inspect, modify, and debug many aspects of your web app including its manifest, service workers, storage, and cache data.</p>
<p>Select a resource in the "Resources" pane to get started with the Application panel. This will bring up the details of that resource in the "Details" pane. You can just see and check what files are being loaded and what cookies and local storage are being used.</p>
<h3 id="heading-security-panel"><strong>Security Panel</strong></h3>
<p>Security provides standard security details, such as viewing a site’s HTTPS certificate and TLS status.</p>
<p>The Security panel lets you inspect the security settings of your web page. With the Security panel, you can see what permissions your page has and what security vulnerabilities may be present.</p>
<h3 id="heading-memory-panel"><strong>Memory Panel</strong></h3>
<p>The Memory panel provides diagnostic tools that let you see the memory distribution of JavaScript objects, discover and isolate memory leaks, get a breakdown of memory allocation by function, and more.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722860612430/a5c7bc85-3cb8-4898-b3c5-2228b8a4b211.png" alt class="image--center mx-auto" /></p>
<p>Select a resource in the "Resources" pane to get started with the Memory panel. This will bring up the details of that resource in the "Details" pane. From here, you can check how much of the memory the resource uses, what type of resource it is, and when it was last accessed.</p>
<h3 id="heading-conclusion"><strong>Conclusion</strong></h3>
<p>As we saw, how Dev Tools are important for web developer. It allows you to work directly in the browser and see results in real time. You can use it to preview style changes, alter the HTML or help write your JavaScript code and do some debugging.</p>
<p><strong>Resources</strong></p>
<p><a target="_blank" href="https://developer.chrome.com/docs/devtools/">https://developer.chrome.com/docs/devtools/</a></p>
<p><a target="_blank" href="https://www.headspin.io/blog/chrome-devtools-a-complete-guide">https://www.headspin.io/blog/chrome-devtools-a-complete-guide</a></p>
<p><a target="_blank" href="https://medium.com/swlh/the-basics-of-chrome-devtools-4d69a102a699">https://medium.com/swlh/the-basics-of-chrome-devtools-4d69a102a699</a></p>
<p><a target="_blank" href="https://codeinstitute.net/global/blog/chrome-dev-tools-tips-tricks/">https://codeinstitute.net/global/blog/chrome-dev-tools-tips-tricks/</a></p>
]]></content:encoded></item><item><title><![CDATA[Top UI Frameworks of React in 2024]]></title><description><![CDATA[React is the most commonly used Javascript library in 2024 for front-end development. React is so popular that many UI libraries have built-in custom react components to facilitate easy integration. React UI framework provides a wide range of built i...]]></description><link>https://blog.atomxel.com/top-ui-frameworks-of-react-in-2024</link><guid isPermaLink="true">https://blog.atomxel.com/top-ui-frameworks-of-react-in-2024</guid><category><![CDATA[atomxel]]></category><category><![CDATA[React]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Frontend Development]]></category><category><![CDATA[CSS]]></category><dc:creator><![CDATA[Ankur]]></dc:creator><pubDate>Thu, 01 Aug 2024 13:35:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1722507290786/0de14587-80df-4655-9eff-1d5942b5a5ac.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>React is the most commonly used Javascript library in 2024 for front-end development. React is so popular that many UI libraries have built-in custom react components to facilitate easy integration. React UI framework provides a wide range of built in React components like buttons, cards, navigation bar, forms, tables and many more.</p>
<p>In this blog, we will figure out top React UI components. We will talk about their features, strengths, and suitability for React projects development.</p>
<h3 id="heading-top-ui-component-libraries-for-react">Top UI Component libraries for React:</h3>
<p><strong>Chakra UI</strong></p>
<p><strong>Chakra UI has over 480k weekly downloads and 34.6k stars on GitHub.</strong></p>
<p>To install Chakra UI into our project, we need to run below commands in our terminal:</p>
<pre><code class="lang-javascript">npm i @chakra-ui/react @emotion/react @emotion/styled framer-motion
</code></pre>
<p>After installing Chakra UI into your project, you need to include ChakraProvider in root of your application.</p>
<p>Button components are used to trigger an event or submit for or navigate to another page.</p>
<p>You have to import the button from the chakra package into your React app.</p>
<p>Here’s an example of a button with icon:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>
<span class="hljs-comment">// 1. import `ChakraProvider` component</span>
<span class="hljs-keyword">import</span> { ChakraProvider } <span class="hljs-keyword">from</span> <span class="hljs-string">'@chakra-ui/react'</span>

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-comment">// 2. Wrap ChakraProvider at the root of your app</span>
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">ChakraProvider</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Stack</span> <span class="hljs-attr">direction</span>=<span class="hljs-string">'row'</span> <span class="hljs-attr">spacing</span>=<span class="hljs-string">{4}</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">leftIcon</span>=<span class="hljs-string">{</span>&lt;<span class="hljs-attr">EmailIcon</span> /&gt;</span>} colorScheme='teal' variant='solid'&gt;
            Email
          <span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">rightIcon</span>=<span class="hljs-string">{</span>&lt;<span class="hljs-attr">ArrowForwardIcon</span> /&gt;</span>} colorScheme='teal' variant='outline'&gt;
            Call us
          <span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">Stack</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">ChakraProvider</span>&gt;</span></span>
  )
}
</code></pre>
<p>Output</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722417229566/1b3908df-5c6e-4c5a-b2a2-80dbe5e6fccd.png" alt class="image--center mx-auto" /></p>
<p><strong>Radix UI</strong></p>
<p><strong>Radix UI has over 13k weekly downloads on npm.</strong></p>
<p>Simple and easy React based UI to customize. You can only install that particular component in your project and customize it. The vision of radix UI to create an open-source library that the community can use to build accessible design systems.</p>
<p>You will install Radix UI primitives for button interaction into your react app.</p>
<pre><code class="lang-javascript">npm install @radix-ui/react-focus
</code></pre>
<p>Radix themes does not come with a built-in styling system. There’s no <code>css</code> or <code>sx</code> prop, and it does not use any styling libraries internally. Under the hood, it’s built with vanilla CSS.</p>
<p>Here's an example of Button:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> { Focus } <span class="hljs-keyword">from</span> <span class="hljs-string">'@radix-ui/react-focus'</span>;
<span class="hljs-keyword">import</span> { Flex, Button } <span class="hljs-keyword">from</span> <span class="hljs-string">'@radix-ui/react-focus'</span>

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">MyButton</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">return</span> (
        <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Focus</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">Flex</span> <span class="hljs-attr">align</span>=<span class="hljs-string">"center"</span> <span class="hljs-attr">gap</span>=<span class="hljs-string">"3"</span>&gt;</span>
              <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"classic"</span>&gt;</span>Edit profile<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
              <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"solid"</span>&gt;</span>Edit profile<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
              <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"soft"</span>&gt;</span>Edit profile<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
              <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"surface"</span>&gt;</span>Edit profile<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
              <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"outline"</span>&gt;</span>Edit profile<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">Flex</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">Focus</span>&gt;</span></span>
    );
}
</code></pre>
<p>Output</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722418957054/73349286-1c19-4ff3-a810-6d3955df3dfc.png" alt class="image--center mx-auto" /></p>
<p><strong>Shadcn UI</strong></p>
<p>It’s a collection of reusable components that we can copy and paste code directly into your projects. It is not a component library so you do not have to install it as a dependency. It is not available or distributed via NPM.</p>
<p>Here's an example of Button:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { Button } <span class="hljs-keyword">from</span> <span class="hljs-string">"@/components/ui/button"</span>

<span class="hljs-keyword">export</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">ButtonSecondary</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"secondary"</span>&gt;</span>Secondary<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span></span>
}
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722420120578/7d13810e-e118-4286-9e5a-f5f568d651a6.png" alt class="image--center mx-auto" /></p>
<p><strong>Ant Design</strong></p>
<p><strong>Ant design has over 1 million weekly downloads on NPM and 87k stars on GitHub</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> { Button, Flex } <span class="hljs-keyword">from</span> <span class="hljs-string">'antd'</span>;

<span class="hljs-keyword">const</span> App: React.FC = <span class="hljs-function">() =&gt;</span> (
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Flex</span> <span class="hljs-attr">gap</span>=<span class="hljs-string">"small"</span> <span class="hljs-attr">wrap</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"primary"</span>&gt;</span>Primary Button<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">Button</span>&gt;</span>Default Button<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"dashed"</span>&gt;</span>Dashed Button<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span>&gt;</span>Text Button<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"link"</span>&gt;</span>Link Button<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">Flex</span>&gt;</span></span>
);
<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> App;
</code></pre>
<p><strong>Output</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722420293374/32e851c7-0263-473f-b328-758ccfce94df.png" alt class="image--center mx-auto" /></p>
<p><strong>React Bootstrap</strong></p>
<p>React bootstrap is one of the popular React UI libraries. It is built on popular bootstrap framework.</p>
<p><strong>React Bootstrap has over 2 million weekly download on NPM and 22k stars of GitHub</strong></p>
<p>Here's an example of using different types of button components in React app.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> Button <span class="hljs-keyword">from</span> <span class="hljs-string">'react-bootstrap/Button'</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">ButtonTypes</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"primary"</span>&gt;</span>Primary<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>{' '}
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"secondary"</span>&gt;</span>Secondary<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>{' '}
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"success"</span>&gt;</span>Success<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>{' '}
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"warning"</span>&gt;</span>Warning<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>{' '}
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"danger"</span>&gt;</span>Danger<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>{' '}
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"info"</span>&gt;</span>Info<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>{' '}
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"light"</span>&gt;</span>Light<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>{' '}
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"dark"</span>&gt;</span>Dark<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"link"</span>&gt;</span>Link<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
    <span class="hljs-tag">&lt;/&gt;</span></span>
  );
}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> ButtonTypes;
</code></pre>
<p>Output</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722420410846/dfedb21f-9ada-443c-9190-de6c1f6ece43.png" alt class="image--center mx-auto" /></p>
<p><strong>Material UI</strong></p>
<p><strong>Material UI has over 91.4K GitHub star</strong>. It is open source react library that implements Google’s material design.</p>
<p>It includes a comprehensive collection of prebuilt components that are ready for use in production right out of the box, and features a suite of customization options that make it easy to implement your own custom design system on top of your components.</p>
<p>You need to install material UI core libraries and its dependencies.</p>
<p>Here's an example of a button:</p>
<pre><code class="lang-javascript">npm install @mui/material @emotion/react @emotion/styled
</code></pre>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> Button <span class="hljs-keyword">from</span> <span class="hljs-string">'@mui/material/Button'</span>;
<span class="hljs-keyword">import</span> Stack <span class="hljs-keyword">from</span> <span class="hljs-string">'@mui/material/Stack'</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">ContainedButtons</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Stack</span> <span class="hljs-attr">direction</span>=<span class="hljs-string">"row"</span> <span class="hljs-attr">spacing</span>=<span class="hljs-string">{2}</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"contained"</span>&gt;</span>Contained<span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"contained"</span> <span class="hljs-attr">disabled</span>&gt;</span>
        Disabled
      <span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Button</span> <span class="hljs-attr">variant</span>=<span class="hljs-string">"contained"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#contained-buttons"</span>&gt;</span>
        Link
      <span class="hljs-tag">&lt;/<span class="hljs-name">Button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">Stack</span>&gt;</span></span>
  );
}
</code></pre>
<p>Output</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722421663635/4eaeea87-0202-478e-8af1-20d2f3d1121e.png" alt="Output" class="image--center mx-auto" /></p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>In this blog, we have seen different React UI libraries with their popularity. Choosing the right UI component library which has good community support will definitely accelerate the development of your project. While deciding, weigh the pros and cons in the context of your project. For example, while one library might excel in customization, another might shine in performance. Each libraries comes with its own development benefits, so the best one for your projects largely depends on your project requirements.</p>
<h3 id="heading-references">References:</h3>
<p><a target="_blank" href="https://prismic.io/blog/react-component-libraries">https://prismic.io/blog/react-component-libraries</a></p>
<p><a target="_blank" href="https://ably.com/blog/best-react-component-libraries">https://ably.com/blog/best-react-component-libraries</a></p>
<p><a target="_blank" href="https://v2.chakra-ui.com/">https://v2.chakra-ui.com/</a></p>
<p><a target="_blank" href="https://mui.com/material-ui/getting-started/">https://mui.com/material-ui/getting-started/</a></p>
]]></content:encoded></item><item><title><![CDATA[The React Hooks you need to know]]></title><description><![CDATA[In this blog, we'll cover fundamental hooks like useState, useEffect, useRef, and useContext. Then we will talk about custom hooks.
React Hooks
useState
The useState hook allows functional components to manage state. Let's look at a simple example:
i...]]></description><link>https://blog.atomxel.com/the-react-hooks-you-need-to-know</link><guid isPermaLink="true">https://blog.atomxel.com/the-react-hooks-you-need-to-know</guid><category><![CDATA[React]]></category><category><![CDATA[React Native]]></category><category><![CDATA[ReactHooks]]></category><category><![CDATA[useState]]></category><category><![CDATA[useEffect]]></category><category><![CDATA[useContext]]></category><category><![CDATA[useRef]]></category><category><![CDATA[#customhooks]]></category><category><![CDATA[React.js, Props, Components, Data flow, Modularity, Reusability, JavaScript, Front-end development, User interfaces, Web development, Programming]]></category><category><![CDATA[atomxel]]></category><dc:creator><![CDATA[Piyush Nanwani]]></dc:creator><pubDate>Wed, 27 Mar 2024 03:30:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1710854978013/de6fff6d-1ee3-4ca7-af46-f46857a8caea.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this blog, we'll cover fundamental hooks like <code>useState</code>, <code>useEffect</code>, <code>useRef</code>, and <code>useContext</code>. Then we will talk about custom hooks.</p>
<h2 id="heading-react-hooks">React Hooks</h2>
<h3 id="heading-usestate">useState</h3>
<p>The <code>useState</code> hook allows functional components to manage state. Let's look at a simple example:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React, { useState } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Counter</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> [count, setCount] = useState(<span class="hljs-number">0</span>);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Count: {count}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> setCount(count + 1)}&gt;Increment<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
}
</code></pre>
<ol>
<li><p>The code initializes a state variable named "count" using React's useState hook.</p>
</li>
<li><p>The initial value of "count" is set to 0.</p>
</li>
<li><p>The "setCount" function is a setter function provided by useState hook, used to update the value of "count" later in the component's lifecycle.</p>
</li>
</ol>
<h3 id="heading-useeffect">useEffect</h3>
<p><code>useEffect</code> enables performing side effects in functional components, such as fetching data or subscribing to external events. Here's an illustration:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React, { useState, useEffect } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">DataFetcher</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> [data, setData] = useState([]);

  useEffect(<span class="hljs-function">() =&gt;</span> {
    <span class="hljs-comment">// Fetch data from an API</span>
    fetch(<span class="hljs-string">'https://api.example.com/data'</span>)
      .then(<span class="hljs-function"><span class="hljs-params">response</span> =&gt;</span> response.json())
      .then(<span class="hljs-function"><span class="hljs-params">data</span> =&gt;</span> setData(data));
  }, []); <span class="hljs-comment">// Empty dependency array triggers effect only once on mount</span>

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
        {data.map(item =&gt; (
          <span class="hljs-tag">&lt;<span class="hljs-name">li</span> <span class="hljs-attr">key</span>=<span class="hljs-string">{item.id}</span>&gt;</span>{item.name}<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        ))}
      <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
}
</code></pre>
<h3 id="heading-useref">useRef</h3>
<p><code>useRef</code> is handy for accessing and interacting with DOM elements directly. Consider the following example:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React, { useRef, useEffect } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">FocusInput</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> inputRef = useRef();

  useEffect(<span class="hljs-function">() =&gt;</span> {
    <span class="hljs-comment">// Focus the input element on mount</span>
    inputRef.current.focus();
  }, []);

  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">{inputRef}</span> /&gt;</span></span>;
}
</code></pre>
<h3 id="heading-usecontext">useContext</h3>
<p>The <code>useContext</code> hook simplifies accessing context values in functional components. Example:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React, { useContext } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-keyword">const</span> ThemeContext = React.createContext(<span class="hljs-string">'light'</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">ThemedComponent</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> theme = useContext(ThemeContext);

  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">style</span>=<span class="hljs-string">{{</span> <span class="hljs-attr">color:</span> <span class="hljs-attr">theme</span> }}&gt;</span>Themed Content<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;
}
</code></pre>
<h2 id="heading-custom-hooks">Custom Hooks</h2>
<p>Custom hooks enable reusing stateful logic across different components. Let's create a simple custom hook for handling form input:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { useState } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">useFormInput</span>(<span class="hljs-params">initialValue</span>) </span>{
  <span class="hljs-keyword">const</span> [value, setValue] = useState(initialValue);

  <span class="hljs-keyword">const</span> handleChange = <span class="hljs-function"><span class="hljs-params">e</span> =&gt;</span> {
    setValue(e.target.value);
  };

  <span class="hljs-keyword">return</span> {
    value,
    <span class="hljs-attr">onChange</span>: handleChange,
  };
}
</code></pre>
<p>Now, you can use this custom hook in any component:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> useFormInput <span class="hljs-keyword">from</span> <span class="hljs-string">'./useFormInput'</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Form</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> username = useFormInput(<span class="hljs-string">''</span>);
  <span class="hljs-keyword">const</span> password = useFormInput(<span class="hljs-string">''</span>);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">form</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> {<span class="hljs-attr">...username</span>} <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"Username"</span> /&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"password"</span> {<span class="hljs-attr">...password</span>} <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"Password"</span> /&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">form</span>&gt;</span></span>
  );
}
</code></pre>
<h2 id="heading-another-custom-hook">Another custom hook</h2>
<p>Let's create a custom hook called <code>useFetch</code> for handling data fetching using the <code>fetch</code> API.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { useState, useEffect } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">useFetch</span>(<span class="hljs-params">url</span>) </span>{
  <span class="hljs-keyword">const</span> [data, setData] = useState(<span class="hljs-literal">null</span>);
  <span class="hljs-keyword">const</span> [loading, setLoading] = useState(<span class="hljs-literal">true</span>);
  <span class="hljs-keyword">const</span> [error, setError] = useState(<span class="hljs-literal">null</span>);

  useEffect(<span class="hljs-function">() =&gt;</span> {
    <span class="hljs-keyword">const</span> fetchData = <span class="hljs-keyword">async</span> () =&gt; {
      <span class="hljs-keyword">try</span> {
        <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> fetch(url);
        <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> response.json();
        setData(result);
      } <span class="hljs-keyword">catch</span> (error) {
        setError(error);
      } <span class="hljs-keyword">finally</span> {
        setLoading(<span class="hljs-literal">false</span>);
      }
    };

    fetchData();
  }, [url]);

  <span class="hljs-keyword">return</span> { data, loading, error };
}

<span class="hljs-comment">// Usage example in a component</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">DataComponent</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> { data, loading, error } = useFetch(<span class="hljs-string">'https://api.example.com/data'</span>);

  <span class="hljs-keyword">if</span> (loading) {
    <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Loading...<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;
  }

  <span class="hljs-keyword">if</span> (error) {
    <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Error: {error.message}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;
  }

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Data Component<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
        {data.map(item =&gt; (
          <span class="hljs-tag">&lt;<span class="hljs-name">li</span> <span class="hljs-attr">key</span>=<span class="hljs-string">{item.id}</span>&gt;</span>{item.name}<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        ))}
      <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
}
</code></pre>
<p>Now, you can reuse the <code>useFetch</code> hook in any component that needs to fetch data. This promotes code reusability and keeps your components focused on their specific concerns.</p>
<p>Thanks for reading!</p>
]]></content:encoded></item><item><title><![CDATA[Mastering State Management in React]]></title><description><![CDATA[In this blog, we'll explore various state management strategies, covering prop drilling, the useContext hook, useReducer, and popular state management libraries.
Prop Drilling
Prop drilling refers to the process of passing down props through multiple...]]></description><link>https://blog.atomxel.com/mastering-state-management-in-react</link><guid isPermaLink="true">https://blog.atomxel.com/mastering-state-management-in-react</guid><category><![CDATA[react js]]></category><category><![CDATA[React Native]]></category><category><![CDATA[useContext]]></category><category><![CDATA[State Management ]]></category><category><![CDATA[Redux]]></category><category><![CDATA[props]]></category><category><![CDATA[propsdrilliing]]></category><category><![CDATA[context API]]></category><category><![CDATA[livecoding]]></category><category><![CDATA[atomxel]]></category><category><![CDATA[Mobile Development]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Piyush Nanwani]]></dc:creator><pubDate>Wed, 20 Mar 2024 03:28:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1708875233578/577d2b49-c5af-4cd8-a6ec-fbab084a8af0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this blog, we'll explore various state management strategies, covering prop drilling, the <code>useContext</code> hook, <code>useReducer</code>, and popular state management libraries.</p>
<h2 id="heading-prop-drilling">Prop Drilling</h2>
<p>Prop drilling refers to the process of passing down props through multiple levels of nested components to reach a deeply nested child component. While it's a common practice, it can lead to code complexity and reduced maintainability.</p>
<h3 id="heading-example-of-prop-drilling">Example of Prop Drilling</h3>
<p>Consider a scenario where you have a deeply nested component that needs access to a prop passed by a parent component. Each intermediate component in the hierarchy would need to receive and pass down the prop:</p>
<pre><code class="lang-jsx"><span class="hljs-comment">// ParentComponent.js</span>
<span class="hljs-keyword">const</span> ParentComponent = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">const</span> sharedProp = <span class="hljs-string">'Hello, Prop Drilling!'</span>;
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">IntermediateComponent</span> <span class="hljs-attr">propToPass</span>=<span class="hljs-string">{sharedProp}</span> /&gt;</span></span>;
};

<span class="hljs-comment">// IntermediateComponent.js</span>
<span class="hljs-keyword">const</span> IntermediateComponent = <span class="hljs-function">(<span class="hljs-params">{ propToPass }</span>) =&gt;</span> {
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">ChildComponent</span> <span class="hljs-attr">propToReceive</span>=<span class="hljs-string">{propToPass}</span> /&gt;</span></span>;
};

<span class="hljs-comment">// ChildComponent.js</span>
<span class="hljs-keyword">const</span> ChildComponent = <span class="hljs-function">(<span class="hljs-params">{ propToReceive }</span>) =&gt;</span> {
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>{propToReceive}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;
};
</code></pre>
<p><a target="_blank" href="https://codepen.io/piyushnanwani/pen/MWRbQog">Click here to run this code</a></p>
<h2 id="heading-usecontext">useContext()</h2>
<h3 id="heading-simplifying-with-usecontext">Simplifying with <code>useContext</code></h3>
<p>The <code>useContext</code> hook offers a cleaner solution for accessing values throughout the component tree without prop drilling. It allows components to subscribe to a context created by a provider.</p>
<h3 id="heading-example-using-usecontext">Example using <code>useContext</code></h3>
<pre><code class="lang-jsx"><span class="hljs-comment">// AppContext.js</span>
<span class="hljs-keyword">import</span> React, { createContext, useContext } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-keyword">const</span> AppContext = createContext();

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> AppProvider = <span class="hljs-function">(<span class="hljs-params">{ children }</span>) =&gt;</span> {
  <span class="hljs-keyword">const</span> sharedValue = <span class="hljs-string">'Hello, useContext!'</span>;
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">AppContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{sharedValue}</span>&gt;</span>{children}<span class="hljs-tag">&lt;/<span class="hljs-name">AppContext.Provider</span>&gt;</span></span>;
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> useAppContext = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> useContext(AppContext);
};
</code></pre>
<p>Now, any component within the <code>AppProvider</code> can access the shared value directly:</p>
<pre><code class="lang-jsx"><span class="hljs-comment">// ChildComponent.js</span>
<span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> { useAppContext } <span class="hljs-keyword">from</span> <span class="hljs-string">'./AppContext'</span>;

<span class="hljs-keyword">const</span> ChildComponent = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">const</span> sharedValue = useAppContext();

  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>{sharedValue}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;
};
</code></pre>
<p><a target="_blank" href="https://codepen.io/piyushnanwani/pen/PogbQKB">Click here to run this code</a></p>
<h2 id="heading-usereducer">useReducer</h2>
<h3 id="heading-state-management-with-usereducer">State Management with <code>useReducer</code></h3>
<p>The <code>useReducer</code> hook is ideal for managing more complex state logic. It allows you to update the state based on the previous state and an action.</p>
<h3 id="heading-example-using-usereducer">Example using <code>useReducer</code></h3>
<pre><code class="lang-jsx"><span class="hljs-comment">// CounterReducer.js</span>
<span class="hljs-keyword">const</span> counterReducer = <span class="hljs-function">(<span class="hljs-params">state, action</span>) =&gt;</span> {
  <span class="hljs-keyword">switch</span> (action.type) {
    <span class="hljs-keyword">case</span> <span class="hljs-string">'INCREMENT'</span>:
      <span class="hljs-keyword">return</span> { <span class="hljs-attr">count</span>: state.count + <span class="hljs-number">1</span> };
    <span class="hljs-keyword">case</span> <span class="hljs-string">'DECREMENT'</span>:
      <span class="hljs-keyword">return</span> { <span class="hljs-attr">count</span>: state.count - <span class="hljs-number">1</span> };
    <span class="hljs-keyword">default</span>:
      <span class="hljs-keyword">return</span> state;
  }
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> counterReducer;
</code></pre>
<pre><code class="lang-jsx"><span class="hljs-comment">// CounterComponent.js</span>
<span class="hljs-keyword">import</span> React, { useReducer } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> counterReducer <span class="hljs-keyword">from</span> <span class="hljs-string">'./CounterReducer'</span>;

<span class="hljs-keyword">const</span> CounterComponent = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">const</span> [state, dispatch] = useReducer(counterReducer, { <span class="hljs-attr">count</span>: <span class="hljs-number">0</span> });

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Count: {state.count}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> dispatch({ type: 'INCREMENT' })}&gt;Increment<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> dispatch({ type: 'DECREMENT' })}&gt;Decrement<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
};
</code></pre>
<p><a target="_blank" href="https://codepen.io/piyushnanwani/pen/ZEZBraY">Click here to run this code</a></p>
<h2 id="heading-state-management-libraries">State Management Libraries</h2>
<h3 id="heading-exploring-state-management-libraries">Exploring State Management Libraries</h3>
<p>Several state management libraries simplify and streamline state management in large-scale applications. Notable libraries include Redux, MobX, and Recoil.</p>
<h3 id="heading-example-using-redux">Example using Redux</h3>
<p>Redux is a popular state management library. First, install it:</p>
<pre><code class="lang-bash">npm install redux react-redux
</code></pre>
<p>Now, create a Redux store, actions, and reducers:</p>
<pre><code class="lang-jsx"><span class="hljs-comment">// store.js</span>
<span class="hljs-keyword">import</span> { createStore } <span class="hljs-keyword">from</span> <span class="hljs-string">'redux'</span>;
<span class="hljs-keyword">import</span> rootReducer <span class="hljs-keyword">from</span> <span class="hljs-string">'./reducers'</span>;

<span class="hljs-keyword">const</span> store = createStore(rootReducer);

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> store;
</code></pre>
<pre><code class="lang-jsx"><span class="hljs-comment">// reducers.js</span>
<span class="hljs-keyword">const</span> initialState = { <span class="hljs-attr">count</span>: <span class="hljs-number">0</span> };

<span class="hljs-keyword">const</span> counterReducer = <span class="hljs-function">(<span class="hljs-params">state = initialState, action</span>) =&gt;</span> {
  <span class="hljs-keyword">switch</span> (action.type) {
    <span class="hljs-keyword">case</span> <span class="hljs-string">'INCREMENT'</span>:
      <span class="hljs-keyword">return</span> { <span class="hljs-attr">count</span>: state.count + <span class="hljs-number">1</span> };
    <span class="hljs-keyword">case</span> <span class="hljs-string">'DECREMENT'</span>:
      <span class="hljs-keyword">return</span> { <span class="hljs-attr">count</span>: state.count - <span class="hljs-number">1</span> };
    <span class="hljs-keyword">default</span>:
      <span class="hljs-keyword">return</span> state;
  }
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> counterReducer;
</code></pre>
<p>Now, integrate Redux in your React component:</p>
<pre><code class="lang-jsx"><span class="hljs-comment">// CounterComponent.js</span>
<span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> { useSelector, useDispatch } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-redux'</span>;

<span class="hljs-keyword">const</span> CounterComponent = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">const</span> count = useSelector(<span class="hljs-function"><span class="hljs-params">state</span> =&gt;</span> state.count);
  <span class="hljs-keyword">const</span> dispatch = useDispatch();

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Count: {count}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> dispatch({ type: 'INCREMENT' })}&gt;Increment<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> dispatch({ type: 'DECREMENT' })}&gt;Decrement<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
};
</code></pre>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Whether you opt for prop drilling, <code>useContext</code>, <code>useReducer</code>, or leverage state management libraries like Redux, each method has its merits. Experiment with these techniques to discover which best fits your project's needs and enhances code maintainability and scalability.</p>
<p>Happy coding!</p>
]]></content:encoded></item><item><title><![CDATA[React Components: Function-Based vs Class-Based]]></title><description><![CDATA[Choosing function based components or class based components is a common question a lot of us face when starting your React journey. In this blog, we will talk about both of these approaches and guide you along with examples.
Function-Based Component...]]></description><link>https://blog.atomxel.com/react-components-function-based-vs-class-based</link><guid isPermaLink="true">https://blog.atomxel.com/react-components-function-based-vs-class-based</guid><category><![CDATA[React]]></category><category><![CDATA[React Native]]></category><category><![CDATA[Frontend Development]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[atomxel]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[components]]></category><category><![CDATA[ReactHooks]]></category><category><![CDATA[react componets]]></category><category><![CDATA[react components ]]></category><dc:creator><![CDATA[Piyush Nanwani]]></dc:creator><pubDate>Sat, 16 Mar 2024 12:26:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1708871958410/0db2b7e1-1bc9-4efd-86b5-7ba01378f8d4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Choosing function based components or class based components is a common question a lot of us face when starting your React journey. In this blog, we will talk about both of these approaches and guide you along with examples.</p>
<h2 id="heading-function-based-components">Function-Based Components</h2>
<p>In programming, we make functions to reuse the code and make it more readable. A function is just a block of code given some label, and we can execute that block of code by using that label i.e function name.</p>
<p>Our web applications are simply made of HTML, CSS and JavaScript. And in React we simply breakdown our apps into smaller parts called components. So, components are merely the HTML, CSS, JS chunks.</p>
<h3 id="heading-example">Example:</h3>
<pre><code class="lang-jsx"><span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-keyword">const</span> FunctionComponent = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Hello, Function Component!<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;
};
</code></pre>
<p><a target="_blank" href="https://codepen.io/piyushnanwani/pen/BaEQpRy"><em>Click here to run code</em></a></p>
<h3 id="heading-features">Features:</h3>
<ol>
<li><p><strong>Simplicity:</strong> Functions are concise, making the code easy to read and maintain.</p>
</li>
<li><p><strong>No</strong><code>this</code> Keyword: Eliminates confusion around the <code>this</code> keyword, simplifying the component structure.</p>
</li>
</ol>
<h2 id="heading-class-based-components">Class-Based Components</h2>
<p>Class-based components have been a traditional way of defining React components, incorporating the concepts of ES6 classes.</p>
<h3 id="heading-example-1">Example:</h3>
<pre><code class="lang-jsx"><span class="hljs-keyword">import</span> React, { Component } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ClassComponent</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Component</span> </span>{
  render() {
    <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Hello, Class Component!<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;
  }
}
</code></pre>
<p><a target="_blank" href="https://codepen.io/piyushnanwani/pen/oNOYBWa"><em>Click here to run code</em></a></p>
<h3 id="heading-features-1">Features:</h3>
<ol>
<li><p><strong>Lifecycle Methods:</strong> Enables the use of lifecycle methods like <code>componentDidMount</code>, <code>componentDidUpdate</code>, etc.</p>
</li>
<li><p><strong>State Management:</strong> Supports local state management using <code>this.state</code> and <code>this.setState()</code>.</p>
</li>
</ol>
<h2 id="heading-when-to-use-function-based-components">When to Use Function-Based Components?</h2>
<ol>
<li><p><strong>Functional Paradigm:</strong> When adhering to a functional programming paradigm or following a more functional approach.</p>
</li>
<li><p><strong>Simplicity:</strong> For simpler components without the need for state or lifecycle methods.</p>
</li>
<li><p><strong>Hooks:</strong> When utilizing React Hooks for state and side effects.</p>
</li>
</ol>
<h3 id="heading-example-function-based-component-with-hooks">Example: Function-Based Component with Hooks</h3>
<pre><code class="lang-jsx"><span class="hljs-keyword">import</span> React, { useState, useEffect } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-keyword">const</span> FunctionWithHooks = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">const</span> [count, setCount] = useState(<span class="hljs-number">0</span>);

  useEffect(<span class="hljs-function">() =&gt;</span> {
    <span class="hljs-built_in">document</span>.title = <span class="hljs-string">`Count: <span class="hljs-subst">${count}</span>`</span>;
  }, [count]);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Count: {count}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> setCount(count + 1)}&gt;Increment<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
};
</code></pre>
<p><a target="_blank" href="https://codepen.io/piyushnanwani/pen/poBNRwR"><em>Click here to run code</em></a></p>
<h2 id="heading-when-to-use-class-based-components">When to Use Class-Based Components?</h2>
<ol>
<li><p><strong>Legacy Codebases:</strong> When working with older codebases that extensively use class components.</p>
</li>
<li><p><strong>Lifecycle Methods:</strong> For components requiring lifecycle methods for tasks like data fetching or DOM manipulation.</p>
</li>
<li><p><strong>Local State:</strong> When managing local state using <code>this.state</code> is necessary.</p>
</li>
</ol>
<h3 id="heading-example-class-based-component-with-state">Example: Class-Based Component with State</h3>
<pre><code class="lang-jsx"><span class="hljs-keyword">import</span> React, { Component } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ClassWithState</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Component</span> </span>{
  <span class="hljs-keyword">constructor</span>(props) {
    <span class="hljs-built_in">super</span>(props);
    <span class="hljs-built_in">this</span>.state = {
      <span class="hljs-attr">count</span>: <span class="hljs-number">0</span>,
    };
  }

  componentDidMount() {
    <span class="hljs-built_in">document</span>.title = <span class="hljs-string">`Count: <span class="hljs-subst">${<span class="hljs-built_in">this</span>.state.count}</span>`</span>;
  }

  componentDidUpdate() {
    <span class="hljs-built_in">document</span>.title = <span class="hljs-string">`Count: <span class="hljs-subst">${<span class="hljs-built_in">this</span>.state.count}</span>`</span>;
  }

  render() {
    <span class="hljs-keyword">return</span> (
      <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Count: {this.state.count}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> this.setState({ count: this.state.count + 1 })}&gt;
          Increment
        <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
    );
  }
}
</code></pre>
<p><a target="_blank" href="http://codepen.io/piyushnanwani/pen/KKYNaRW"><em>Click here to run code</em></a></p>
<h2 id="heading-conclusion">Conclusion</h2>
<ul>
<li><p>Function-based components and class-based components are both essential to React development, providing different approaches for doing the same thing.</p>
</li>
<li><p>The introduction of hooks has allowed function components to handle state and side effects, blurring the distinction between the two techniques.</p>
</li>
<li><p>So, you will find old code written using class based syntax and new with function based syntax.</p>
</li>
<li><p>You should understand the differences between each so that you can work on projects or third party packages that use either or both of the two approaches.  </p>
<p>  Thanks for Reading!</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Understanding React Concepts: State and Prop]]></title><description><![CDATA[React, with its declarative and component-based approach, relies on key concepts like state and props to manage and pass data. This blog aims to explain the differences between state and props with examples.
State
State is the internal handling of da...]]></description><link>https://blog.atomxel.com/understanding-react-concepts-state-and-prop</link><guid isPermaLink="true">https://blog.atomxel.com/understanding-react-concepts-state-and-prop</guid><category><![CDATA[atomxel]]></category><category><![CDATA[React]]></category><category><![CDATA[React Native]]></category><category><![CDATA[react-state]]></category><category><![CDATA[reactprops]]></category><category><![CDATA[State Management ]]></category><category><![CDATA[Frontend Development]]></category><category><![CDATA[Mobile Development]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[JSX]]></category><category><![CDATA[React JSX]]></category><category><![CDATA[react documentation]]></category><dc:creator><![CDATA[Piyush Nanwani]]></dc:creator><pubDate>Sat, 09 Mar 2024 08:14:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1708873997757/82046759-40d3-47e7-bb87-0fff0a5c8b72.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>React, with its declarative and component-based approach, relies on key concepts like state and props to manage and pass data. This blog aims to explain the differences between state and props with examples.</p>
<h3 id="heading-state">State</h3>
<p>State is the internal handling of data of a component. It provides the component's dynamic properties, which might change over time.</p>
<p><strong>Features:</strong></p>
<ol>
<li><p>Local to Component: State is specific to the component it belongs to.</p>
</li>
<li><p>Mutable: It can be modified using <code>setState</code>.</p>
</li>
<li><p>Component-owned: Controlled and managed by the component itself.</p>
</li>
</ol>
<h3 id="heading-props">Props</h3>
<p>Props (short for properties) are external inputs passed to a component. They allow the parent component to communicate with and customize its child components.</p>
<p><strong>Features:</strong></p>
<ol>
<li><p>Immutable: Props are read-only and cannot be modified by the child component.</p>
</li>
<li><p>Received from Parent: Passed down from parent to child.</p>
</li>
<li><p>Pure Functions: Components that rely only on props are pure and deterministic.</p>
</li>
</ol>
<h2 id="heading-examples-of-state-and-props">Examples of State and Props</h2>
<h3 id="heading-state-example">State Example:</h3>
<p>Consider a counter component that manages its count using state.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">import</span> React, { useState } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-keyword">const</span> Counter = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">const</span> [count, setCount] = useState(<span class="hljs-number">0</span>);

  <span class="hljs-keyword">const</span> increment = <span class="hljs-function">() =&gt;</span> {
    setCount(count + <span class="hljs-number">1</span>);
  };

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Count: {count}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{increment}</span>&gt;</span>Increment<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
};
</code></pre>
<p>In this example, <code>count</code> is a piece of state managed by the <code>Counter</code> component.</p>
<h3 id="heading-props-example">Props Example:</h3>
<p>Now, let's create a <code>Greetings</code> component that receives a <code>name</code> prop.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-keyword">const</span> Greetings = <span class="hljs-function">(<span class="hljs-params">props</span>) =&gt;</span> {
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Hello, {props.name}!<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span></span>;
};
</code></pre>
<p>Here, <code>name</code> is a prop passed from the parent component when rendering <code>Greetings</code>:</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> Greetings <span class="hljs-keyword">from</span> <span class="hljs-string">'./Greetings'</span>;

<span class="hljs-keyword">const</span> App = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Greetings</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"John"</span> /&gt;</span></span>;
};
</code></pre>
<p>Understanding the difference between state and props is important for React developers. State enables components to manage internal dynamic data, while props help in communication between parent and child components.</p>
<p>Thanks for reading!</p>
]]></content:encoded></item><item><title><![CDATA[React Ecosystem Overview]]></title><description><![CDATA[I recall the early days of my journey with React. Upon completing a course or a book, I would feel a sense of accomplishment, thinking I had mastered React, only to discover there were still unknown aspects. This cycle repeated itself - learning, hap...]]></description><link>https://blog.atomxel.com/react-ecosystem-overview</link><guid isPermaLink="true">https://blog.atomxel.com/react-ecosystem-overview</guid><category><![CDATA[React]]></category><category><![CDATA[React Native]]></category><category><![CDATA[Roadmap]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Mobile Development]]></category><category><![CDATA[atomxel]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[Babel]]></category><dc:creator><![CDATA[Piyush Nanwani]]></dc:creator><pubDate>Mon, 04 Mar 2024 03:30:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1708860155365/3fcc7138-2173-4970-bc96-bdfd3c584cfb.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recall the early days of my journey with React. Upon completing a course or a book, I would feel a sense of accomplishment, thinking I had mastered React, only to discover there were still unknown aspects. This cycle repeated itself - learning, happiness, discovery of more unknowns. And then I realized how big the React Community is plus it keeps on evolving even when you are learning or sleeping or doing anything.</p>
<p>So, if one knows the React roadmap specific to their field, it helps in navigating in this React ocean. So, I have covered some topics in this blogs which I think will help you in developing a better understanding of the possibilities of React plus how to be in touch with ongoing and future updates.</p>
<h2 id="heading-the-react-ocean">The React Ocean</h2>
<p>React powers web, mobile apps, windows apps, mac os apps, tv - android, apple tv, AR, VR etc. So, whatever platform you want to build your React apps these are the things that you would need to know:</p>
<ol>
<li><p>Platform knowledge:</p>
<ol>
<li>So, if you are building Android / iOS apps. Knowing about how Android / iOS works, what are the limitations of your underlying platform, what are the powers or uniqueness of that platform.</li>
</ol>
</li>
<li><p>React Skills</p>
</li>
<li><p><a target="_blank" href="https://blog.atomxel.com/javascript-essentials-for-react-native-series">JavaScript Skills</a> ( Refer to this <a target="_blank" href="https://blog.atomxel.com/javascript-essentials-for-react-native-series">blog</a> )</p>
</li>
<li><p>Software Development Lifecycle</p>
</li>
<li><p>Best Practices</p>
</li>
</ol>
<h2 id="heading-mind-maps-of-react-ecosystem">Mind maps of React Ecosystem</h2>
<ol>
<li><p>React Learning Path</p>
</li>
<li><p>Core Concepts</p>
</li>
<li><p>Styling</p>
</li>
<li><p>Web Development Technologies</p>
</li>
<li><p>Web Development Tools</p>
</li>
<li><p><a target="_blank" href="https://blog.atomxel.com/react-native-roadmap-for-developers-in-2024">Mobile Development</a> ( Refer to this <a target="_blank" href="https://blog.atomxel.com/react-native-roadmap-for-developers-in-2024">blog</a> )</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1708864708746/717b3d29-4eee-4e38-bbad-8a650c9b384a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1708864717327/2e995aeb-dc17-492c-a1a5-14e9d90d4c0d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1708864734064/ea524beb-4369-43ed-ba73-a768f8e1e69c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1708864745785/63d34ec9-e118-4d8e-9ccc-9be9a5372a5e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1708864757322/f408f2e5-c57e-4fd2-ab17-a9fc31a5c1b5.png" alt class="image--center mx-auto" /></p>
<p>React powers various platforms, and understanding your chosen platform is key. Master React and JavaScript skills, embrace the software development lifecycle, and adopt best practices. To truly learn React, dive in, explore, and let curiosity guide you through this ever-evolving ecosystem.</p>
<p>If you found this helpful, like this. And if you have any doubt or feedback do write a comment.</p>
<p>Thanks for reading!</p>
<h3 id="heading-helpful-links">Helpful links:</h3>
<p><a target="_blank" href="https://blog.atomxel.com/javascript-essentials-for-react-native-series">JavaScript Essentials for React Native</a></p>
<p><a target="_blank" href="https://blog.atomxel.com/top-state-management-libraries-to-use-in-react-native">Top State Management Libraries in React Native</a></p>
<p><a target="_blank" href="https://blog.atomxel.com/react-native-roadmap-for-developers-in-2024">React Native Roadmap for Developers in 2024</a></p>
<p><a target="_blank" href="https://blog.atomxel.com/react-native-cli-vs-expo-cli-comparison">Comparing React.js, React Native, and Native Mobile App Development</a></p>
<p><a target="_blank" href="https://blog.atomxel.com/why-is-react-native-so-popular-discover-the-top-reasons">Why is React Native so Popular? Discover the Top Reasons!</a></p>
<p><a target="_blank" href="https://reactresources.com/">React Resources</a></p>
]]></content:encoded></item></channel></rss>