<?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[Jaskaran Singh]]></title><description><![CDATA[Expert Full Stack Developer specializing in React, Next.js, and mobile app development. Building modern web applications and mobile solutions in Amritsar, India.]]></description><link>https://blog.jaskaran.in</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 10:18:38 GMT</lastBuildDate><atom:link href="https://blog.jaskaran.in/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[🚀 Embracing the Future: The Intersection of AI, Edge, and Quantum Computing!]]></title><description><![CDATA[The world of technology is evolving at an unprecedented pace, and we are witnessing groundbreaking advancements in the fields of Artificial Intelligence (AI), Edge Computing, and Quantum Computing. These emerging technologies hold immense potential t...]]></description><link>https://blog.jaskaran.in/embracing-the-future-the-intersection-of-ai-edge-and-quantum-computing</link><guid isPermaLink="true">https://blog.jaskaran.in/embracing-the-future-the-intersection-of-ai-edge-and-quantum-computing</guid><category><![CDATA[AI]]></category><category><![CDATA[quantum computing]]></category><category><![CDATA[Future]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Wed, 26 Jul 2023 13:03:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690376707426/dee77f8e-0b76-4a86-9a9c-b99fa2203797.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The world of technology is evolving at an unprecedented pace, and we are witnessing groundbreaking advancements in the fields of Artificial Intelligence (AI), Edge Computing, and Quantum Computing. These emerging technologies hold immense potential to revolutionize industries, reshape our daily lives, and solve complex challenges that were once considered insurmountable.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=eXcPjbRXp40&amp;ab_channel=DavidBombal">https://www.youtube.com/watch?v=eXcPjbRXp40&amp;ab_channel=DavidBombal</a></div>
<p> </p>
<h3 id="heading-artificial-intelligence-ai-empowering-intelligent-solutions">🧠 Artificial Intelligence (AI) - Empowering Intelligent Solutions:</h3>
<p>AI is no longer a distant dream but a tangible reality driving innovation across sectors. Machine Learning algorithms are powering predictive analytics, enhancing decision-making processes, and optimizing various operations. Natural Language Processing (NLP) enables seamless human-computer interactions, making chatbots and virtual assistants increasingly sophisticated and intuitive. AI-driven robotics are changing the landscape of manufacturing, healthcare, and even space exploration, transforming the way we perceive possibilities.</p>
<h3 id="heading-edge-computing-a-step-closer-to-real-time-connectivity">🌐 Edge Computing - A Step Closer to Real-Time Connectivity:</h3>
<p>The exponential growth of IoT devices has given rise to the need for swift data processing at the edge of the network. Edge Computing brings computation and data storage closer to the source, reducing latency, improving reliability, and optimizing bandwidth usage. This technology is becoming crucial for applications requiring real-time data analysis, such as autonomous vehicles, augmented reality, and smart cities. Embracing edge computing empowers organizations to unlock the full potential of IoT, enabling us to build a more connected and intelligent world.</p>
<h3 id="heading-quantum-computing-unleashing-unimaginable-computing-power">🔮 Quantum Computing - Unleashing Unimaginable Computing Power:</h3>
<p>Quantum Computing takes computation to a whole new dimension, leveraging quantum mechanics to process vast amounts of information at unprecedented speeds. Harnessing the power of quantum bits (qubits), quantum computers have the potential to solve complex problems that classical computers would take centuries to crack. From optimizing supply chains to drug discovery, financial modeling to cryptography, quantum computing promises transformative breakthroughs in nearly every industry.</p>
<p>As we delve into the era of convergence, the symbiotic relationship between these technologies is reshaping the technological landscape. Imagine AI algorithms leveraging edge computing's real-time capabilities while being supercharged by quantum computing prowess. This trifecta of technologies opens up a realm of possibilities limited only by our imagination.</p>
<p>However, with great power comes great responsibility. Ethical considerations, data privacy, and security must remain at the forefront as we navigate the uncharted territories of these technologies. Collaborative efforts between industries, academia, and policymakers will be vital to ensuring a responsible and equitable deployment of these innovations.</p>
<h3 id="heading-embrace-the-future-embrace-progress">🌟 Embrace the Future, Embrace Progress! 🌟</h3>
<p>As professionals, let's stay vigilant, educate ourselves, and foster an ecosystem that nurtures innovation and inclusivity. Together, we can steer the transformative force of AI, Edge, and Quantum Computing toward creating a better world for all.</p>
]]></content:encoded></item><item><title><![CDATA[Implement authentication using the useRoutes hook, AuthContext, and Redux Toolkit with an example. Here's a step-by-step guide]]></title><description><![CDATA[Create an AuthContext component: The AuthContext component will be responsible for storing the user's authentication state and exposing methods for logging in and out. You can create it like this:
import { createContext, useState } from "react";

exp...]]></description><link>https://blog.jaskaran.in/implement-authentication-using-the-useroutes-hook-authcontext-and-redux-toolkit-with-an-example-heres-a-step-by-step-guide</link><guid isPermaLink="true">https://blog.jaskaran.in/implement-authentication-using-the-useroutes-hook-authcontext-and-redux-toolkit-with-an-example-heres-a-step-by-step-guide</guid><category><![CDATA[React]]></category><category><![CDATA[React Native]]></category><category><![CDATA[ReactHooks]]></category><category><![CDATA[redux-toolkit]]></category><category><![CDATA[Developer]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Tue, 04 Apr 2023 04:17:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/89xuP-XmyrA/upload/1a3bce35c7032794ee70c280692d6114.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Create an AuthContext component: The AuthContext component will be responsible for storing the user's authentication state and exposing methods for logging in and out. You can create it like this:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { createContext, useState } <span class="hljs-keyword">from</span> <span class="hljs-string">"react"</span>;

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

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> AuthProvider = <span class="hljs-function">(<span class="hljs-params">{ children }</span>) =&gt;</span> {
  <span class="hljs-keyword">const</span> [isLoggedIn, setIsLoggedIn] = useState(<span class="hljs-literal">false</span>);

  <span class="hljs-keyword">const</span> login = <span class="hljs-function">() =&gt;</span> setIsLoggedIn(<span class="hljs-literal">true</span>);
  <span class="hljs-keyword">const</span> logout = <span class="hljs-function">() =&gt;</span> setIsLoggedIn(<span class="hljs-literal">false</span>);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">AuthContext.Provider</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{{</span> <span class="hljs-attr">isLoggedIn</span>, <span class="hljs-attr">login</span>, <span class="hljs-attr">logout</span> }}&gt;</span>
      {children}
    <span class="hljs-tag">&lt;/<span class="hljs-name">AuthContext.Provider</span>&gt;</span></span>
  );
};
</code></pre>
<p>Here, we're using the createContext function to create a new context, AuthContext. The AuthProvider component wraps its child components in the AuthContext.Provider component, which provides the authentication state and methods to its children. The isLoggedIn state represents whether the user is currently logged in or not, and the login and logout functions update the state accordingly.</p>
<p>Set up the routes with useRoutes: You can use the useRoutes hook from the @remix-run/react library to define the routes for your application. Here's an example:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { useRoutes, useRedirect } <span class="hljs-keyword">from</span> <span class="hljs-string">"@remix-run/react"</span>;
<span class="hljs-keyword">import</span> { AuthProvider } <span class="hljs-keyword">from</span> <span class="hljs-string">"./AuthContext"</span>;
<span class="hljs-keyword">import</span> { Home, Login, Dashboard } <span class="hljs-keyword">from</span> <span class="hljs-string">"./pages"</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">const</span> routes = useRoutes([
    { <span class="hljs-attr">path</span>: <span class="hljs-string">"/"</span>, <span class="hljs-attr">component</span>: Home },
    { <span class="hljs-attr">path</span>: <span class="hljs-string">"/login"</span>, <span class="hljs-attr">component</span>: Login },
    {
      <span class="hljs-attr">path</span>: <span class="hljs-string">"/dashboard"</span>,
      <span class="hljs-attr">component</span>: Dashboard,
      <span class="hljs-attr">action</span>: <span class="hljs-keyword">async</span> ({ context }) =&gt; {
        <span class="hljs-keyword">if</span> (!context.isLoggedIn) {
          <span class="hljs-keyword">return</span> { <span class="hljs-attr">redirect</span>: <span class="hljs-string">"/login"</span> };
        }
      },
    },
  ]);

  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">AuthProvider</span>&gt;</span>{routes}<span class="hljs-tag">&lt;/<span class="hljs-name">AuthProvider</span>&gt;</span></span>;
}
</code></pre>
<p>Here, we're defining three routes: the home page, the login page, and the dashboard page. The Dashboard route has an additional action function that checks whether the user is logged in. If the user is not logged in, it redirects them to the login page using the useRedirect hook.</p>
<p>Note that we're also wrapping the routes in the AuthProvider component to make the authentication state and methods available to the route components.</p>
<h2 id="heading-implement-authentication-with-redux-toolkit">Implement authentication with Redux Toolkit:</h2>
<p>Finally, we can use Redux Toolkit to store the user's authentication state globally and update it when the user logs in or out. Here's an example:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { configureStore, createSlice } <span class="hljs-keyword">from</span> <span class="hljs-string">"@reduxjs/toolkit"</span>;

<span class="hljs-keyword">const</span> authSlice = createSlice({
  <span class="hljs-attr">name</span>: <span class="hljs-string">"auth"</span>,
  <span class="hljs-attr">initialState</span>: { <span class="hljs-attr">isLoggedIn</span>: <span class="hljs-literal">false</span> },
  <span class="hljs-attr">reducers</span>: {
    <span class="hljs-attr">login</span>: <span class="hljs-function">(<span class="hljs-params">state</span>) =&gt;</span> {
      state.isLoggedIn = <span class="hljs-literal">true</span>;
    },
    <span class="hljs-attr">logout</span>: <span class="hljs-function">(<span class="hljs-params">state</span>) =&gt;</span> {
      state.isLoggedIn = <span class="hljs-literal">false</span>;
    },
  },
});

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> { login, logout } = authSlice.actions;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> store = configureStore({
  <span class="hljs-attr">reducer</span>: { <span class="hljs-attr">auth</span>: authSlice.reducer },
});

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> selectIsLoggedIn = <span class="hljs-function">(<span class="hljs-params">state</span>) =&gt;</span> state.auth.isLoggedIn;
</code></pre>
<p>Here, we're creating a Redux slice called authSlice that defines the authentication state and the login and logout reducers. We're also defining a selectIsLoggedIn selector function that returns the isLoggedIn state from the Redux store.</p>
<p>We're then configuring the Redux store with the authSlice reducer and exporting the store, login, logout, and <code>select</code></p>
<p>continuation of the implementation:</p>
<h2 id="heading-use-redux-toolkit-in-the-login-component">Use Redux Toolkit in the Login component:</h2>
<p>In the Login component, we can use Redux Toolkit to dispatch the login action when the user logs in. Here's an example:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { useDispatch } <span class="hljs-keyword">from</span> <span class="hljs-string">"react-redux"</span>;
<span class="hljs-keyword">import</span> { login } <span class="hljs-keyword">from</span> <span class="hljs-string">"../store"</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">Login</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> dispatch = useDispatch();

  <span class="hljs-keyword">const</span> handleLogin = <span class="hljs-function">() =&gt;</span> {
    <span class="hljs-comment">// perform login logic</span>
    dispatch(login());
  };

  <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>Login<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{handleLogin}</span>&gt;</span>Login<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>Here, we're using the useDispatch hook to get the Redux store's dispatch function, which we can use to dispatch the login action when the user logs in. Note that we're not performing any actual login logic in this example, but you would replace the handleLogin function with your own login logic.</p>
<h2 id="heading-use-redux-toolkit-in-the-dashboard-component">Use Redux Toolkit in the Dashboard component:</h2>
<p>In the Dashboard component, we can use Redux Toolkit to check whether the user is logged in and dispatch the logout action when the user logs out. Here's an example:</p>
<pre><code class="lang-javascript"><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">import</span> { selectIsLoggedIn, logout } <span class="hljs-keyword">from</span> <span class="hljs-string">"../store"</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">Dashboard</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> isLoggedIn = useSelector(selectIsLoggedIn);
  <span class="hljs-keyword">const</span> dispatch = useDispatch();

  <span class="hljs-keyword">const</span> handleLogout = <span class="hljs-function">() =&gt;</span> {
    <span class="hljs-comment">// perform logout logic</span>
    dispatch(logout());
  };

  <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>Dashboard<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
      {isLoggedIn &amp;&amp; (
        <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{handleLogout}</span>&gt;</span>Logout<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>Here, we're using the useSelector hook to get the isLoggedIn state from the Redux store, and we're using the useDispatch hook to get the dispatch function. We're also defining a handleLogout function that dispatches the logout action when the user logs out. Note that we're only rendering the logout button if the user is logged in.</p>
<p>That's it! With this implementation, you can use the AuthContext component to manage the user's authentication state and the useRoutes hook to define the routes for your application. You can use Redux Toolkit to store the user's authentication state globally and update it when the user logs in or out.</p>
<h1 id="heading-putting-it-all-together">Putting it all together:</h1>
<p>Now that we have implemented the AuthContext, useRoutes hook, and Redux Toolkit, we can put them all together in our main app component. Here's an example:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { BrowserRouter <span class="hljs-keyword">as</span> Router, Route, Switch } <span class="hljs-keyword">from</span> <span class="hljs-string">"react-router-dom"</span>;
<span class="hljs-keyword">import</span> { AuthContextProvider, useRoutes } <span class="hljs-keyword">from</span> <span class="hljs-string">"./auth"</span>;
<span class="hljs-keyword">import</span> { configureStore } <span class="hljs-keyword">from</span> <span class="hljs-string">"@reduxjs/toolkit"</span>;
<span class="hljs-keyword">import</span> { Provider } <span class="hljs-keyword">from</span> <span class="hljs-string">"react-redux"</span>;
<span class="hljs-keyword">import</span> { login, logout, selectIsLoggedIn } <span class="hljs-keyword">from</span> <span class="hljs-string">"./store"</span>;
<span class="hljs-keyword">import</span> Login <span class="hljs-keyword">from</span> <span class="hljs-string">"./components/Login"</span>;
<span class="hljs-keyword">import</span> Dashboard <span class="hljs-keyword">from</span> <span class="hljs-string">"./components/Dashboard"</span>;

<span class="hljs-keyword">const</span> store = configureStore({
  <span class="hljs-attr">reducer</span>: {
    <span class="hljs-attr">auth</span>: authReducer,
  },
});

<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> isLoggedIn = useSelector(selectIsLoggedIn);
  <span class="hljs-keyword">const</span> routes = useRoutes(isLoggedIn);

  useEffect(<span class="hljs-function">() =&gt;</span> {
    <span class="hljs-comment">// check if the user is already logged in</span>
    <span class="hljs-keyword">const</span> storedUser = <span class="hljs-built_in">localStorage</span>.getItem(<span class="hljs-string">"user"</span>);
    <span class="hljs-keyword">if</span> (storedUser) {
      store.dispatch(login());
    }
  }, []);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Provider</span> <span class="hljs-attr">store</span>=<span class="hljs-string">{store}</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">AuthContextProvider</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Router</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">Switch</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">Route</span> <span class="hljs-attr">path</span>=<span class="hljs-string">"/login"</span>&gt;</span>
              <span class="hljs-tag">&lt;<span class="hljs-name">Login</span> /&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">Route</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>&gt;</span>
              {routes}
              <span class="hljs-tag">&lt;<span class="hljs-name">Dashboard</span> /&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">Route</span>&gt;</span>
          <span class="hljs-tag">&lt;/<span class="hljs-name">Switch</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">Router</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">AuthContextProvider</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">Provider</span>&gt;</span></span>
  );
}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> App;
</code></pre>
<p>In this example, we're defining the App component, which is the main component of our application. We're using the BrowserRouter, Route, and Switch components from the react-router-dom library to define the routes for our application. We're also using the AuthContextProvider component to manage the user's authentication state, and the Provider component from Redux to provide the Redux store to our components.</p>
<p>Inside the App component, we're using the useSelector hook to get the isLoggedIn state from the Redux store. We're also using the useRoutes hook to define the routes for our application based on whether the user is logged in or not. We're rendering the Login component if the user visits the /login route, and we're rendering the Dashboard component if the user visits any other route.</p>
<p>We're also using the useEffect hook to check if the user is already logged in when the app first loads. If the user is already logged in (i.e., their authentication state is stored in localStorage), we're dispatching the login action to update the authentication state in the Redux store.</p>
<p>Finally, we're wrapping our app component in the Provider component from Redux and the AuthContextProvider component from the auth module. This ensures that our components have access to the Redux store and the AuthContext component.</p>
<p>And that's it! With this implementation, you have a complete authentication flow using the useRoutes hook, AuthContext, and Redux Toolkit.</p>
]]></content:encoded></item><item><title><![CDATA[Think and Grow Rich: Lessons for Financial Success and a Wealth Mindset]]></title><description><![CDATA[Introduction
"Think and Grow Rich" is a book by Napoleon Hill that teaches principles for financial success and achieving a wealth mindset. Key lessons include defining your purpose, developing a positive mindset, taking action, building relationship...]]></description><link>https://blog.jaskaran.in/think-and-grow-rich-lessons-for-financial-success-and-a-wealth-mindset</link><guid isPermaLink="true">https://blog.jaskaran.in/think-and-grow-rich-lessons-for-financial-success-and-a-wealth-mindset</guid><category><![CDATA[#ThinkAndGrowRich]]></category><category><![CDATA[#FinancialSuccess]]></category><category><![CDATA[#WealthMindset]]></category><category><![CDATA[#PositiveMindset]]></category><category><![CDATA[#GoalOriented]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Sat, 04 Feb 2023 23:30:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/1zO4O3Z0UJA/upload/21468a7ca6788f5369e65310687aaa3a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction</h3>
<p>"Think and Grow Rich" is a book by Napoleon Hill that teaches principles for financial success and achieving a wealth mindset. Key lessons include defining your purpose, developing a positive mindset, taking action, building relationships, being persistent, investing in yourself, providing value, and practicing gratitude. The book encourages readers to focus on their goals, embrace challenges, and continuously educate and improve themselves in order to achieve financial success and fulfill their potential.</p>
<p><strong>Here are some key points from the book</strong></p>
<ol>
<li><p><strong>Define your purpose</strong>: <em>Having a clear understanding of what you want to achieve is essential to success.</em></p>
</li>
<li><p><strong>Develop a positive mindset</strong>: <em>A positive mental attitude is crucial for success and helps you overcome obstacles.</em></p>
</li>
<li><p><strong>Focus on your goal</strong>: <em>Stay focused on your goal and don't let distractions get in the way.</em></p>
</li>
<li><p><strong>Take action</strong>: <em>Success requires taking consistent and persistent action toward your goal.</em></p>
</li>
<li><p><strong>Build relationships</strong>: <em>Building strong relationships with others can help you achieve your goals and provide support along the way.</em></p>
</li>
<li><p><strong>Be persistent</strong>: <em>Never give up on your goal, even when faced with obstacles or setbacks.</em></p>
</li>
<li><p><strong>Develop a mastermind</strong>: <em>Surround yourself with successful people who can offer guidance and support.</em></p>
</li>
<li><p><strong>Provide value</strong>: <em>Focus on providing value to others, and success will come naturally.</em></p>
</li>
<li><p><strong>Invest in yourself</strong>: <em>Continuous self-education and personal development are crucial to success.</em></p>
</li>
<li><p><strong>Practice gratitude</strong>: <em>Cultivate a thankful attitude towards what you have and what you will achieve.</em></p>
</li>
</ol>
<p><em>These lessons, along with the stories and experiences shared by Hill and other successful individuals, provide a roadmap for achieving financial success and developing a wealth mindset. By implementing these principles, you can create a foundation for a successful and fulfilling life.</em></p>
]]></content:encoded></item><item><title><![CDATA[Things to remember when life seems too hard]]></title><description><![CDATA[It is amazing the power that a good quote has to lift us up and carry us out of our dark places. A great quote shows us the truth of a situation and gets us to think about life from a different perspective.
So we’ve dug up 22 of the best quotes to gi...]]></description><link>https://blog.jaskaran.in/things-to-remember-when-life-seems-too-hard</link><guid isPermaLink="true">https://blog.jaskaran.in/things-to-remember-when-life-seems-too-hard</guid><category><![CDATA[life]]></category><category><![CDATA[motivation]]></category><category><![CDATA[hardwork]]></category><category><![CDATA[remember]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Sat, 04 Feb 2023 03:09:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/mRMQwK513hY/upload/8b761bd39bbd3ed5e5fd3fb3e553e7d5.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>It is amazing the power that a</em> <strong><em>good quote</em></strong> <em>has to lift us up and carry us out of our dark places. A great quote shows us the truth of a situation and gets us to think about life from a different perspective.</em></p>
<p>So we’ve dug up 22 of the best quotes to give you a bit of perspective for <strong>when life just seems too hard.</strong></p>
<h3 id="heading-stop-thinking-of-what-could-go-wrong-and-start-thinking-of-what-could-go-right"><strong><em>Stop thinking of what could go wrong, and start thinking of what could go right.</em></strong></h3>
<p>For those with anxiety or depression, or even those of us who are just going through a rough patch, our minds seem bent on telling us just how wrong everything could go.</p>
<p>But the truth is, things can turn around. Things can go really right, and often they do.</p>
<p>So next time you find your mind trying to convince you of negative lies, stop, acknowledge what your brain is doing, and correct the thought by asking yourself: what are the odds of this actually happening? Then shift your focus to how the situation can turn around, think about all the good things that could happen.</p>
<h3 id="heading-you-miss-100-of-the-shots-you-dont-take-wayne-gretzky"><strong><em>You miss 100% of the shots you don’t take.</em> – Wayne Gretzky</strong></h3>
<p>It is easy to sit back and let life pass you by. Everyone fears failure, but the one sure way to fail at something is to never give it a go.</p>
<p>So be brave, step out and try, because trying is the first step to succeeding.</p>
<h3 id="heading-it-always-seems-impossible-until-its-done-nelson-mandela"><strong><em>It always seems impossible until it’s done.</em> – Nelson Mandela</strong></h3>
<p>If anyone knows how hard life can be, that person would have been Nelson Mandela.</p>
<p>Think of all the things in your life that you achieved, even the small things. At the time you set out to do them, I bet you never thought you could. But you did.</p>
<p>Achievement doesn’t happen immediately. Most of the time it’s a slow uphill walk. But gradually, over time, the landscape changes, you near the top, and suddenly you’re there.</p>
<p><img src="https://www.opencolleges.edu.au/blog//wp-content/uploads/2016/05/2.2-10.jpg" alt="quotes for when life seems too hard" /></p>
<h3 id="heading-life-isnt-about-waiting-for-the-storm-to-pass-its-about-dancing-in-the-rain"><strong><em>Life isn’t about waiting for the storm to pass, it’s about dancing in the rain.</em></strong></h3>
<p>It would be a lie to say that life is perfect. It is full of ups and downs. The key to happiness lies in being able to find the laughter and the small moments of joy within the dark places.</p>
<p>Sing off-key in your pyjamas when you don’t feel strong enough to leave the house. Go for a walk in the sunshine when you feel you can’t move another step. When you feel crippled with fear, watch something that will make you laugh.</p>
<p>Dance when life rains down on you. You will be amazed at what a difference this will make.</p>
<h3 id="heading-i-havent-failed-ive-just-found-10000-ways-it-does-not-work-thomas-edison"><strong><em>I haven’t failed, I’ve just found 10,000 ways it does not work.</em> – Thomas Edison</strong></h3>
<p>Yes, sometimes our plans don’t work out the way we want them to, but that is no reason to give up. It just means that you may need to find another approach.</p>
<p>Be flexible, be inventive. There really is no such thing as failure as long as you are willing to find a lesson in it, and then find another way to make the situation work.</p>
<h3 id="heading-fall-down-seven-times-and-stand-up-eight-japanese-proverb"><strong><em>Fall down seven times and stand up eight.</em> – Japanese Proverb</strong></h3>
<p>Life knocks everyone down from time to time. And sometimes it feels like nothing ever goes right.</p>
<p>You can become crippled by the fall; or you can dig deep, find what you can learn from it, grow as a person, and get back up.</p>
<p>The second option is harder. It involves learning about who you are and challenging yourself to change. But that’s where the growth comes in, and in the long run, it’s much better for you.</p>
<p>Ultimately, how you react to the falls determines the course of your life.</p>
<p><img src="https://www.opencolleges.edu.au/blog//wp-content/uploads/2016/05/3.3-8.jpg" alt="fight back when life seems too hard" /></p>
<h3 id="heading-bad-decisions-make-great-stories"><strong><em>Bad decisions make great stories.</em></strong></h3>
<p>We all make wrong choices, bad decisions, fall flat on our faces or embarrass ourselves. It’s part of being human and learning how to live.</p>
<p>Next time you make a bad call, something terrible happens, or you fall down a set of stairs in front of strangers, don’t think of how embarrassing it is, don’t beat yourself up about something you can’t change, instead re-frame the story in your mind.</p>
<p>Think about how you will tell the story to your friends to make it a funny and entertaining.</p>
<p>Let the story you tell make you smile and chuckle.</p>
<h3 id="heading-sometimes-the-wrong-choices-can-lead-us-to-the-right-places"><strong><em>Sometimes the wrong choices can lead us to the right places.</em></strong></h3>
<p>This is an old saying, but it is true. Every wrong road you take may lead you to the right place.</p>
<p>The wrong relationship may teach you about your own boundaries and what you really want, leading you to the right person a few years down the track. Or making a bad career choice can teach you about what you really want from life.</p>
<p>Take a lesson from the wrong path, and you will end up at the right place for you in the end.</p>
<h3 id="heading-courage-doesnt-always-roar-sometimes-courage-is-the-quiet-voice-at-the-end-of-the-day-saying-i-will-try-again-tomorrow-mary-anne-radmacher"><strong><em>Courage doesn’t always roar. Sometimes courage is the quiet voice at the end of the day saying, ‘I will try again tomorrow’.</em> – Mary Anne Radmacher</strong></h3>
<p>True courage is facing your fears and still walking ahead anyway. These moments are not always about going into battle, in fact, most of the time they happen when we are alone with our thoughts. They happen when we make the decision to try again.</p>
<p><img src="https://www.opencolleges.edu.au/blog//wp-content/uploads/2016/05/4.4-6.jpg" alt="have courage when life seems too hard" /></p>
<h3 id="heading-everything-changes-eventually"><strong><em>Everything changes eventually.</em></strong></h3>
<p>Nothing in this world is permanent. That is the only thing we can be sure of.</p>
<p>Today it may seem like you are stuck in a prison; like the pain, fear and desperation you feel is just how your life will be. But that is not true. You won’t always feel this way; people, situations, locations and feelings all change.</p>
<p>Think of other times in your life where you felt like nothing would change. Now remember that they did.</p>
<p>Things can change in an afternoon, and this time that you are going through, like all other times, will pass.</p>
<h3 id="heading-your-past-does-not-equal-your-future-tony-robbins"><strong><em>Your past does not equal your future.</em> – Tony Robbins</strong></h3>
<p>The mistakes that you made last week, last month, last year, don’t determine who you will become, your choices do.</p>
<p>Leave the past where it is, it is gone, your future is waiting for you. Make it what you want.</p>
<h3 id="heading-if-youre-going-through-hell-keep-going-winston-churchill"><strong><em>If you’re going through hell, keep going.</em> – Winston Churchill</strong></h3>
<p>What you are going through at the moment may feel like hell, but the only way to get through it is to keep moving.</p>
<p>It may be hard right now, but with some effort, support and guidance, you will actually make it out the other side.</p>
<p><img src="https://www.opencolleges.edu.au/blog//wp-content/uploads/2016/05/5.5-5.jpg" alt="get perspective when life seems too hard" /></p>
<h3 id="heading-it-is-never-too-late-to-be-what-you-might-have-been-george-elliot"><strong><em>It is never too late to be what you might have been.</em> – George Elliot</strong></h3>
<p>We seem to have an obsession with time in our society. It is almost like we have an expiry date on our own worth, which clicks over when we hit a certain age.</p>
<p>But that is just another lie that society tells us. We have been conditioned to believe that our value as a person is somehow directly linked to our age. But in truth, we are not a number assigned to us, we are people with worth, individuality, gifts and talents. Age cannot rob us of that.</p>
<p>You are valuable and worthy regardless of your age, economic status, or job, and you are capable of so much more than you think you are.</p>
<p>Don’t let other people’s ideas of worth define your life. You are in control of your path, so make it what you want it to be.</p>
<p>If you always wanted to be an artist, a mechanic, a teacher, just do it. It really, truly is never too late to be who you were meant to be.</p>
<h3 id="heading-the-best-is-yet-to-be-robert-browning"><strong><em>The best is yet to be.</em> – Robert Browning</strong></h3>
<p>When you are feeling low, it is easy to imagine that the best times are behind you.</p>
<p>But the truth is that you never know what is waiting just around the corner. Something amazing may be just about to happen. Look forward to your future, it’s going to be an adventure.</p>
<h3 id="heading-in-the-middle-of-difficulty-lies-opportunity-albert-einstein"><strong><em>In the middle of difficulty lies opportunity.</em> – Albert Einstein</strong></h3>
<p>Every time something is difficult, or you are going through a rough patch, there is an opportunity to learn and to grow as a person.</p>
<p>Seek out the growth opportunities when you hit rock bottom, as often the best lessons are learned in the darkest times.</p>
<p>Always ask yourself, how can I grow from this?</p>
<p><img src="https://www.opencolleges.edu.au/blog//wp-content/uploads/2016/05/6.6-3.jpg" alt="growth is possible even when life seems too hard" /></p>
<h3 id="heading-if-i-persist-long-enough-i-will-win-og-mandino"><strong><em>If I persist long enough I will win</em> – Og Mandino</strong></h3>
<p>You can have all the talent in the world, but if you don’t have persistence you will not succeed.</p>
<p>In fact, the people that are usually the most successful are the ones that just kept pounding on the doors of opportunity.</p>
<h3 id="heading-only-those-who-dare-to-fail-greatly-can-ever-achieve-greatly-robert-f-kennedy"><strong><em>Only those who dare to fail greatly can ever achieve greatly</em> – Robert F Kennedy</strong></h3>
<p>Anytime we want to grow, to achieve something or to gain something, we place ourselves in a scary and vulnerable position. We risk failure and ridicule.</p>
<p>But do you think that any great thing was achieved without risk?</p>
<p>Just think of all the great history changers: Martin Luther King Jr, Steve Jobs, Nelson Mandela, Florence Nightingale, Leonardo Da Vinci, Thomas Edison, Henry Ford, Picasso, Agatha Christie, Erin Brockovich, Marie Curie, Albert Einstein, Ghandi, Hellen Keller, Oprah Winfrey, the list could go on and on!</p>
<p>These were just people who took enormous risks, who dared failure and ended up changing the world.</p>
<p>Be daring. Step out. Put yourself on the line. Who knows what may happen.</p>
<h3 id="heading-the-first-step-is-you-have-to-say-that-you-can-will-smith"><strong><em>The first step is you have to say that you can.</em> – Will Smith</strong></h3>
<p>The things we tell ourselves are incredibly powerful. Thoughts do create a reality. So if you tell yourself you can’t, then you won’t.</p>
<p>Imagine what you could do if you told yourself that you can!</p>
<p><img src="https://www.opencolleges.edu.au/blog//wp-content/uploads/2016/05/7.7-3.jpg" alt="have faith when life seems too hard" /></p>
<h3 id="heading-most-people-have-attained-their-greatest-success-one-step-beyond-their-greatest-failure-napoleon-hill"><strong><em>Most people have attained their greatest success one step beyond their greatest failure.</em> – Napoleon Hill</strong></h3>
<p>Pushing beyond failure, taking the lessons it teaches and using them to create a better future is often the difference between success, and staying stuck.</p>
<p>You never know what is around the corner, you just have to have the courage to walk around it and see.</p>
<h3 id="heading-its-only-a-problem-if-you-think-its-a-problem"><strong><em>It’s only a problem if you think it’s a problem.</em></strong></h3>
<p>The way we choose to view things determines how we react to them, and ultimately the course of our lives.</p>
<p>You have the power to see something as a problem, as a challenge to be solved, or as a funny life story.</p>
<h3 id="heading-gratitude-improves-every-situation"><strong><em>Gratitude improves every situation.</em></strong></h3>
<p>Being grateful for life, for the <a target="_blank" href="https://www.opencolleges.edu.au/blog//2016/04/11/mhm-small-things-will-help-get-day/">small things</a> every day, like a great cup of coffee, or the smell of fresh sheets, can really change the course of your day.</p>
<p>When things are at their darkest, look around you. Think of five amazing things, and be grateful that you are here, in this time, and that you get to experience them.</p>
<p><img src="https://www.opencolleges.edu.au/blog//wp-content/uploads/2016/05/8.8-2.jpg" alt="be grateful even when life seems too hard" /></p>
<h3 id="heading-you-may-encounter-many-defeats-but-you-must-not-be-defeated-because-it-may-be-necessary-to-encounter-the-defeats-so-you-can-know-who-you-are-what-you-can-rise-from-how-you-can-still-come-out-of-it-maya-angelou"><strong><em>You may encounter many defeats, but you must not be defeated. Because it may be necessary to encounter the defeats, so you can know who you are, what you can rise from, how you can still come out of it.</em> – Maya Angelou</strong></h3>
<p>Sometimes it’s the hardest parts in life which teach us the most, if we’re willing to view them as lessons, not as crushing blows.</p>
]]></content:encoded></item><item><title><![CDATA[The Power of a Growth Mindset]]></title><description><![CDATA[A growth mindset refers to the belief that abilities and intelligence can be developed through effort, dedication, and learning. It is characterized by several key points, including:

Embracing challenges: Individuals with a growth mindset view chall...]]></description><link>https://blog.jaskaran.in/the-power-of-a-growth-mindset</link><guid isPermaLink="true">https://blog.jaskaran.in/the-power-of-a-growth-mindset</guid><category><![CDATA[growth mindset,]]></category><category><![CDATA[motivation]]></category><category><![CDATA[#LearningAndGrowth]]></category><category><![CDATA[#FailureAsOpportunity]]></category><category><![CDATA[#SuccessMindset]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Fri, 03 Feb 2023 23:30:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/JXQgP-7OsK4/upload/398d4fa92e83da7b4272e20d787d293d.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A growth mindset refers to the belief that abilities and intelligence can be developed through effort, dedication, and learning. It is characterized by several key points, including:</p>
<ol>
<li><p>Embracing challenges: Individuals with a growth mindset view challenges as opportunities for growth and learning, rather than as obstacles.</p>
</li>
<li><p>Emphasizing effort over talent: People with a growth mindset believe that effort and hard work are key to success, rather than innate talent or intelligence.</p>
</li>
<li><p>Encouraging learning and growth: Those with a growth mindset are continually seeking new knowledge and experiences to grow and develop.</p>
</li>
<li><p>Accepting failures as opportunities: Individuals with a growth mindset view failures as a necessary part of the learning process and use them to identify areas for improvement.</p>
</li>
<li><p>Embracing constructive feedback: People with a growth mindset are open to receiving feedback, as they view it as a valuable tool for growth and improvement.</p>
</li>
<li><p>Pursuing long-term goals: Those with a growth mindset have a long-term perspective and are focused on developing their abilities and achieving their goals over time.</p>
</li>
<li><p>Encouraging perseverance: Individuals with a growth mindset believe in their ability to overcome challenges and persist in the face of difficulties.</p>
</li>
</ol>
<p>Having a growth mindset can have many benefits, including increased motivation, resilience, and success in both personal and professional pursuits. By embracing challenges, embracing constructive feedback, and continually seeking new knowledge and experiences, individuals with a growth mindset can achieve their goals and continuously improve.</p>
]]></content:encoded></item><item><title><![CDATA[Improving Communication Skills: A Guide]]></title><description><![CDATA[Listen actively: Pay attention to what the other person is saying and ask questions to clarify any misunderstandings.

Be clear and concise: Make sure your message is easy to understand and avoid using jargon or technical terms that the other person ...]]></description><link>https://blog.jaskaran.in/improving-communication-skills-a-guide</link><guid isPermaLink="true">https://blog.jaskaran.in/improving-communication-skills-a-guide</guid><category><![CDATA[#softstudy #progress #report #chronicles #startup #sidehustle #boo]]></category><category><![CDATA[skills]]></category><category><![CDATA[growth mindset,]]></category><category><![CDATA[improve]]></category><category><![CDATA[CommunicationTips]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Thu, 02 Feb 2023 23:30:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/376KN_ISplE/upload/9e527937ebefd3f17193c71ad6836685.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ol>
<li><p>Listen actively: Pay attention to what the other person is saying and ask questions to clarify any misunderstandings.</p>
</li>
<li><p>Be clear and concise: Make sure your message is easy to understand and avoid using jargon or technical terms that the other person may not understand.</p>
</li>
<li><p>Avoid distractions: Turn off your phone and minimize other distractions during conversations to show that you are fully engaged and focused.</p>
</li>
<li><p>Practice empathy: Try to understand the other person's perspective and feelings, and respond in a way that shows you care.</p>
</li>
<li><p>Be open-minded: Be willing to listen to new ideas and be open to change, even if you don't agree with them.</p>
</li>
<li><p>Give feedback: Share constructive feedback in a non-judgmental way, and be willing to receive feedback in return.</p>
</li>
<li><p>Manage conflicts: Address conflicts calmly and respectfully, and look for solutions that benefit both parties.</p>
</li>
<li><p>Show appreciation: Express gratitude and appreciation for others' contributions to help build positive relationships.</p>
</li>
<li><p>Use non-verbal communication: Use body language and facial expressions to complement your words and help convey your message.</p>
</li>
<li><p>Continuously improve: Regularly evaluate and improve your communication skills to maintain effective relationships with others.</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[React Native]]></title><description><![CDATA[React Native is a popular open-source framework for building mobile applications using JavaScript and React, a JavaScript library for building user interfaces. React Native was developed by Facebook and is used by many companies to build high-quality...]]></description><link>https://blog.jaskaran.in/react-native</link><guid isPermaLink="true">https://blog.jaskaran.in/react-native</guid><category><![CDATA[React Native]]></category><category><![CDATA[Mobile Development]]></category><category><![CDATA[mobile app development]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[native apps]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Thu, 02 Feb 2023 13:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1675309422555/3232f609-1cb9-4972-90ed-9ade491600b4.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>React Native is a popular open-source framework for building mobile applications using JavaScript and React, a JavaScript library for building user interfaces. React Native was developed by Facebook and is used by many companies to build high-quality, cross-platform mobile applications for iOS and Android.</p>
<p>React Native allows developers to write mobile applications using a single codebase that can run on both iOS and Android. This is a major advantage over traditional native mobile app development, which typically requires separate codebases for each platform. With React Native, developers can write their code once and deploy it on multiple platforms, saving time and resources.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1675309485614/5138a107-2ee0-4749-ad42-467580e9b7d4.jpeg" alt class="image--center mx-auto" /></p>
<p>React Native uses native components, which are components that are written in the platform-specific programming language (e.g., Swift for iOS, Java for Android), to build the user interface. This ensures that the user interface is fully native, meaning that it looks and feels like a native app, and provides a seamless user experience. Additionally, React Native allows developers to reuse components and code across multiple projects, making it easier and more efficient to build and maintain mobile applications.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1675309445898/d09ed5fe-508a-4d01-b336-f3c072329f43.jpeg" alt class="image--center mx-auto" /></p>
<p>React Native also provides a large and growing community of developers and a wealth of resources, including tutorials, documentation, and libraries. This makes it easy for developers to find help and get started with React Native. Additionally, React Native has a strong ecosystem of third-party libraries and tools, including UI components, navigation libraries, and testing frameworks, that make it easier for developers to build high-quality, feature-rich mobile applications.</p>
<p>One of the key benefits of React Native is that it provides a fast and efficient development experience. React Native uses a hot reloading feature, which allows developers to see changes they make to the code in real-time, without having to restart the app. This makes it faster and easier to develop and test mobile applications. Additionally, React Native is designed to be fast and performant, providing a smooth and responsive user experience.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1675309464554/861c4da9-db8e-4581-b7b9-4827c84f2fbf.jpeg" alt class="image--center mx-auto" /></p>
<p>Another benefit of React Native is that it provides a native-like user experience. React Native uses native components to build the user interface, which means that the app looks and feels like a native app, providing a seamless user experience. Additionally, React Native uses animations and touch gestures that are native to each platform, providing a more natural and intuitive experience for users.</p>
<p>In conclusion, React Native is a popular open-source framework for building mobile applications using JavaScript and React. React Native provides a fast and efficient development experience and a native-like user experience, and it is used by many companies to build high-quality, cross-platform mobile applications for iOS and Android. With its large and growing community of developers and a wealth of resources, React Native is a great choice for organizations looking to build high-quality mobile applications.</p>
]]></content:encoded></item><item><title><![CDATA[Single Sign-On (SSO)]]></title><description><![CDATA[An Overview
Single Sign-On (SSO) is a user authentication method that enables users to access multiple applications and systems with a single set of login credentials. This means that instead of having to remember usernames and passwords for each sys...]]></description><link>https://blog.jaskaran.in/single-sign-on-sso</link><guid isPermaLink="true">https://blog.jaskaran.in/single-sign-on-sso</guid><category><![CDATA[authentication]]></category><category><![CDATA[SSO]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Auth0]]></category><category><![CDATA[user experience]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Thu, 02 Feb 2023 03:40:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/RMIsZlv8qv4/upload/7c9c7028eece402c090136385a494858.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>An Overview</p>
<p>Single Sign-On (SSO) is a user authentication method that enables users to access multiple applications and systems with a single set of login credentials. This means that instead of having to remember usernames and passwords for each system, users can log in once and then have access to all of the systems and applications they are authorized to use. SSO streamlines the user experience by reducing the number of times a user needs to log in and helps to increase their productivity by making it easier for them to access the systems and applications they need to do their work.</p>
<p>The SSO process works by establishing a trust relationship between the user's identity provider (IdP) and the service providers (SPs) that the user needs to access. When a user tries to access a system or application, they are redirected to the IdP, where they log in and their identity is authenticated. The IdP then sends a digitally signed authentication assertion to the SP, which the SP uses to grant the user access. This way, the user only needs to log in once, and they can access all of the systems and applications they need without having to log in again.</p>
<p>Some several protocols and technologies are used to implement SSO, including SAML (Security Assertion Markup Language), OAuth, and OpenID Connect. SAML is the most commonly used SSO protocol and is widely adopted by organizations of all sizes. OAuth is a widely used authorization protocol that is often used in combination with SSO to provide a more secure and user-friendly experience. OpenID Connect is a newer SSO protocol that builds on top of OAuth and provides additional features, such as the ability to handle user-initiated SSO and the ability to support multiple IdPs.</p>
<p>One of the key benefits of SSO is that it helps to improve security by reducing the number of places where a user's credentials are stored. By having a single set of login credentials, the risk of password reuse and the risk of weak or compromised passwords are reduced. Additionally, because the SSO process is managed by the IdP, there is a central point of control for managing user authentication and authorization, which makes it easier to enforce security policies and monitor access to systems and applications.</p>
<p>Another benefit of SSO is that it can improve the user experience by making it easier for users to access the systems and applications they need to do their work. By reducing the number of times a user needs to log in, they can spend more time focusing on their work and less time managing their login credentials. Additionally, SSO can help to reduce the number of helpdesk calls related to forgotten passwords, as users only need to remember a single set of login credentials.</p>
<p>In conclusion, Single Sign-On (SSO) is a user authentication method that enables users to access multiple applications and systems with a single set of login credentials. SSO improves the user experience by reducing the number of times a user needs to log in, and it helps to improve security by reducing the number of places where a user's credentials are stored. There are several protocols and technologies that are used to implement SSO, including SAML, OAuth, and OpenID Connect, and organizations of all sizes can benefit from implementing SSO.</p>
]]></content:encoded></item><item><title><![CDATA[To check if a given latitude and longitude fall within a collection of locations defined by latitude, longitude, and radius]]></title><description><![CDATA[Here's a sample code to check if a given latitude and longitude fall within a radius in a Laravel Collection:
phpCopy codeuse Illuminate\Support\Facades\DB;
use Illuminate\Support\Collection;

public function checkLocationInCollection($inputLatitude,...]]></description><link>https://blog.jaskaran.in/to-check-if-a-given-latitude-and-longitude-fall-within-a-collection-of-locations-defined-by-latitude-longitude-and-radius</link><guid isPermaLink="true">https://blog.jaskaran.in/to-check-if-a-given-latitude-and-longitude-fall-within-a-collection-of-locations-defined-by-latitude-longitude-and-radius</guid><category><![CDATA[Laravel]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[PHP]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Competitive programming]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Mon, 30 Jan 2023 22:30:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/BJXAxQ1L7dI/upload/d3d00b95cee142f2c7412be303bb6ddb.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here's a sample code to check if a given latitude and longitude fall within a radius in a Laravel Collection:</p>
<pre><code class="lang-php">phpCopy codeuse Illuminate\Support\Facades\DB;
<span class="hljs-keyword">use</span> <span class="hljs-title">Illuminate</span>\<span class="hljs-title">Support</span>\<span class="hljs-title">Collection</span>;

<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">checkLocationInCollection</span>(<span class="hljs-params">$inputLatitude, $inputLongitude, Collection $locations</span>)
</span>{
    <span class="hljs-keyword">foreach</span> ($locations <span class="hljs-keyword">as</span> $location) {
        $distance = <span class="hljs-keyword">$this</span>-&gt;calculateDistance($inputLatitude, $inputLongitude, $location-&gt;latitude, $location-&gt;longitude);

        <span class="hljs-keyword">if</span> ($distance &lt;= $location-&gt;radius) {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
        }
    }

    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
}

<span class="hljs-keyword">private</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">calculateDistance</span>(<span class="hljs-params">$lat1, $long1, $lat2, $long2</span>)
</span>{
    $earthRadius = <span class="hljs-number">3959</span>;
    $latFrom = deg2rad($lat1);
    $longFrom = deg2rad($long1);
    $latTo = deg2rad($lat2);
    $longTo = deg2rad($long2);
    $latDelta = $latTo - $latFrom;
    $longDelta = $longTo - $longFrom;

    $angle = <span class="hljs-number">2</span> * asin(sqrt(pow(sin($latDelta / <span class="hljs-number">2</span>), <span class="hljs-number">2</span>) + cos($latFrom) * cos($latTo) * pow(sin($longDelta / <span class="hljs-number">2</span>), <span class="hljs-number">2</span>)));
    $distance = $angle * $earthRadius;

    <span class="hljs-keyword">return</span> $distance;
}
</code></pre>
<p>In this example, the <code>checkLocationInCollection</code> function takes in the input latitude, longitude, and a Collection of locations, each containing latitude, longitude, and radius properties. The function iterates through each location in the Collection and calculates the distance between the input latitude and longitude and the location using the <code>calculateDistance</code> function. If the calculated distance is less than or equal to the location's radius, the function returns <code>true</code>. If no location in the Collection meets the criteria, the function returns <code>false</code>.</p>
]]></content:encoded></item><item><title><![CDATA[Git Commit Patterns]]></title><description><![CDATA[The use of Git for us Devs is something essential, whether in personal projects, open source with many people or an entire community.Given that, we must use git commit properly. Having a coherent and standardized language helps everyone involved in t...]]></description><link>https://blog.jaskaran.in/git-commit-patterns</link><guid isPermaLink="true">https://blog.jaskaran.in/git-commit-patterns</guid><category><![CDATA[Web Development]]></category><category><![CDATA[Git]]></category><category><![CDATA[clean code]]></category><category><![CDATA[patterns]]></category><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Mon, 30 Jan 2023 01:56:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/wX2L8L-fGeA/upload/b10c3616b9e70f6d55882f9a3414c33f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The use of Git for us Devs is something essential, whether in personal projects, open source with many people or an entire community.<br />Given that, we must use git commit properly. Having a coherent and standardized language helps everyone involved in the project to understand the changes that have occurred.</p>
<p><a target="_blank" href="https://res.cloudinary.com/practicaldev/image/fetch/s--YfDBUKwV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7r0qv3vii7v7yjxyxef2.png"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YfDBUKwV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7r0qv3vii7v7yjxyxef2.png" alt="Bad Commit Timeline" /></a></p>
<p>In the image above, we see how harmful a poorly commented commit can be, since we fail to understand the nature of the change that occurred and the context of it. In the long run, the effect is even more damaging, as the maintainability of the software suffers due to inconsistencies in the scope of these changes, and how they have affected the project in the past.</p>
<p>With that in mind, let's talk a little about <strong>Conventional Commits Pattern</strong>.</p>
<hr />
<h3 id="heading-what-is-it">What Is It?</h3>
<p>Conventional Commit is a simple convention for commit messages, which follows a set of rules and helps projects to have an explicit and well-structured commit history.</p>
<hr />
<h3 id="heading-how-to-use-it">How To Use It?</h3>
<p>The rules are very simple, as shown below we have a <em>type</em> of commit, the context <em>(scope) of the</em> commit and the message <em>(subject) of the</em> commit.</p>
<pre><code class="lang-plaintext">!type(?scope): !subject
&lt;?body&gt;
&lt;?footer&gt;
</code></pre>
<p>Thus, <code>!</code> indicates the mandatory attributes and <code>?</code> indicates optional attributes.</p>
<hr />
<h3 id="heading-subject-imperative-instead-of-past-tense">Subject: Imperative instead of past tense</h3>
<p>In this way, we are telling our team what the commit will do if applied.</p>
<blockquote>
<p><em>“If applied, this commit will ”</em></p>
</blockquote>
<p><strong>“If applied, this commit will change the markup”</strong>, which makes a lot more sense than: <em>“If applied, this commit will change the markup”</em></p>
<p><a target="_blank" href="https://res.cloudinary.com/practicaldev/image/fetch/s--lVYgo2aV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mfm2chjhctjdspyfl4t8.jpg"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lVYgo2aV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mfm2chjhctjdspyfl4t8.jpg" alt="Commit Subject use" /></a></p>
<hr />
<h3 id="heading-type-what-are-the-types-of-commits">Type: What are the types of commits</h3>
<p>The type is responsible for telling us what change or iteration is being made, from the convention rules, we have the following types:</p>
<ul>
<li><p><code>test</code>: indicates any type of creation or alteration of test codes.<br />  <strong>Example</strong>: Creation of unit tests.</p>
</li>
<li><p><code>feat</code>: indicates the development of a new feature for the project.<br />  <strong>Example</strong>: Adding a service, functionality, endpoint, etc.</p>
</li>
<li><p><code>refactor</code>: used when there is code refactoring that does not have any impact on the system logic/rules.<br />  <strong>Example</strong>: Code changes after a code review</p>
</li>
<li><p><code>style</code>: used when there are code formatting and style changes that do not change the system in any way.<br />  <strong>Example</strong>: Change the style guide, change the lint convention, fix indentations, remove white spaces, remove comments, etc…</p>
</li>
<li><p><code>fix</code>: used when correcting errors that are generating bugs in the system.<br />  <strong>Example</strong>: Apply handling for a function that is not behaving as expected and returning an error.</p>
</li>
<li><p><code>chore</code>: indicates changes to the project that do not affect the system or test files. These are developmental changes.<br />  <strong>Example</strong>: Change rules for <em>eslint</em>, add <em>prettier</em>, add more file extensions to <em>.gitignore</em></p>
</li>
<li><p><code>docs</code>: used when there are changes in the project documentation.<br />  <strong>Example</strong>: add information in the API documentation, change the README, etc.</p>
</li>
<li><p><code>build</code>: used to indicate changes that affect the project build process or external dependencies.<br />  <strong>Example</strong>: Gulp, add/remove <em>npm</em> dependencies, etc…</p>
</li>
<li><p><code>perf</code>: indicates a change that improved system performance.<br />  <strong>Example</strong>: change ForEach to While, etc…</p>
</li>
<li><p><code>ci</code>: used for changes in CI configuration files.<br />  <strong>Example</strong>: <em>Circle</em>, <em>Travis</em>, <em>BrowserStack</em>, etc…</p>
</li>
<li><p><code>revert</code>: indicates the reversal of a previous commit.</p>
</li>
</ul>
<p><a target="_blank" href="https://res.cloudinary.com/practicaldev/image/fetch/s--yvsHEV4_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eu75nl5bcy3l4em3s87m.jpg"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yvsHEV4_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eu75nl5bcy3l4em3s87m.jpg" alt="Commit Types use" /></a></p>
<p><em>Note:</em></p>
<ul>
<li><p>Only one <em>type</em> per commit;</p>
</li>
<li><p>The <em>type</em> is <strong>mandatory</strong>;</p>
</li>
<li><p>If you don’t know which <em>type</em> to use, it is probably a big change and it is possible to split this <em>commit</em> into two or more commits;</p>
</li>
<li><p>The difference between <code>build</code> and <code>chore</code> can be quite subtle and can lead to confusion, so we must be aware of the correct <em>type</em>. In the case of Node.js, for example, we can think that when there is an addition/change to a certain development dependency present in <code>devDependencies</code>, we use <code>chore</code>. For changes/additions of common dependencies to the project, and that have a direct and real impact on the system, we use <code>build</code>.</p>
</li>
</ul>
<hr />
<h3 id="heading-scope-contextualizing-the-commit">Scope: contextualizing the commit</h3>
<p>At this point — and following past conventions — we managed to understand the type of change that was made in the commit <em>(commit type)</em> and clearly understand what the commit will bring if applied <em>(commit subject)</em>.</p>
<p>Even though the scope is <strong>not mandatory</strong>, it can be used to contextualize the commit and bring less responsibility to the subject, making it as brief and concise as possible. <strong>Remembering that the <em>scope</em> must be inserted in the commit between parentheses</strong>.</p>
<p><a target="_blank" href="https://res.cloudinary.com/practicaldev/image/fetch/s--zcWIk3xi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mfiv8rrjrf40zsupe1w6.jpg"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zcWIk3xi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mfiv8rrjrf40zsupe1w6.jpg" alt="Commit Scope use" /></a></p>
<p><em>Note:</em> Scopes must be separated with <code>/</code></p>
<hr />
<h3 id="heading-conclusion">Conclusion</h3>
<p>I wrote this article to record one of my learnings <em>(they were just some notes in the notion app)</em>, but I hope it can help other devs out there.</p>
]]></content:encoded></item><item><title><![CDATA[Email Template : Request for Medical Leave]]></title><description><![CDATA[Subject: Request for Medical Leave
Dear [Manager's Name],
I am writing to request a medical leave of absence from work. My last day of work will be [date] and I will be returning to work on [date]. The reason for my medical leave is [specific conditi...]]></description><link>https://blog.jaskaran.in/email-template-request-for-medical-leave</link><guid isPermaLink="true">https://blog.jaskaran.in/email-template-request-for-medical-leave</guid><category><![CDATA[email]]></category><category><![CDATA[email templates]]></category><category><![CDATA[work life balance]]></category><category><![CDATA[medical]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Fri, 27 Jan 2023 03:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/Y-3Dt0us7e0/upload/9e13e6f03821c44e050ddbfe861086cc.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Subject: Request for Medical Leave</p>
<p>Dear [Manager's Name],</p>
<p>I am writing to request a medical leave of absence from work. My last day of work will be [date] and I will be returning to work on [date]. The reason for my medical leave is [specific condition or illness].</p>
<p>I have made arrangements for my work to be covered during my absence and I will make sure to complete any outstanding tasks before I leave. I will also ensure that my contact information is readily available in case of any urgent matters that may arise during my absence. I would be happy to provide any necessary documentation from my medical practitioner if needed.</p>
<p>Please let me know if any additional information is needed to process my medical leave request.</p>
<p>Thank you for your understanding and support during this time.</p>
<p>Sincerely, [Your Name]</p>
]]></content:encoded></item><item><title><![CDATA[Email Template for personal work email]]></title><description><![CDATA[Subject: Request for Short-term Leave - Urgent Personal Matter
Dear [Manager's Name],
I am writing to request a short-term leave of absence from work for an urgent personal matter. I will need to be away from the office for [number of days] starting ...]]></description><link>https://blog.jaskaran.in/email-template-for-personal-work-email</link><guid isPermaLink="true">https://blog.jaskaran.in/email-template-for-personal-work-email</guid><category><![CDATA[email]]></category><category><![CDATA[email templates]]></category><category><![CDATA[office]]></category><category><![CDATA[Request for Short-term Leave - Urgent Personal Matter]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Thu, 26 Jan 2023 03:00:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/Hcfwew744z4/upload/0a09f2cb67f58eac3a1b953cd1b64f66.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Subject: Request for Short-term Leave - Urgent Personal Matter</p>
<p>Dear [Manager's Name],</p>
<p>I am writing to request a short-term leave of absence from work for an urgent personal matter. I will need to be away from the office for [number of days] starting from [date].</p>
<p>I understand the importance of my work and assure you that I have made arrangements for my responsibilities to be covered during my absence. I will also make sure to complete any outstanding tasks before I leave, and I will make sure that my contact information is readily available in case of any urgent matters that may arise during my absence.</p>
<p>Please let me know if any additional information is needed in order to process my leave request. I would like to apologize for the short notice and any inconvenience this may cause.</p>
<p>Thank you for your understanding and support during this difficult time.</p>
<p>Sincerely, [Your Name]</p>
]]></content:encoded></item><item><title><![CDATA[Email Template for  Resignation - Lack of Opportunities for Professional Development]]></title><description><![CDATA[Dear [Manager's Name],
I am writing to inform you of my decision to resign from my position at [Company Name]. After careful consideration, I have decided that the current lack of opportunities for growth and development in new technologies at the co...]]></description><link>https://blog.jaskaran.in/email-template-for-resignation-lack-of-opportunities-for-professional-development</link><guid isPermaLink="true">https://blog.jaskaran.in/email-template-for-resignation-lack-of-opportunities-for-professional-development</guid><category><![CDATA[email]]></category><category><![CDATA[email templates]]></category><category><![CDATA[#resignation #jobs #career #startup]]></category><category><![CDATA[Subject: Resignation - Lack of Opportunities for Growth in New Technologies]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Wed, 25 Jan 2023 03:00:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/LPZy4da9aRo/upload/4d176eaea984f369edcc3a7393185231.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Dear [Manager's Name],</p>
<p>I am writing to inform you of my decision to resign from my position at [Company Name]. After careful consideration, I have decided that the current lack of opportunities for growth and development in new technologies at the company no longer aligns with my career goals and aspirations.</p>
<p>I have greatly appreciated the opportunities and experiences provided to me during my time here, but I feel that it is in my best interest to pursue other opportunities that will allow me to work with the latest technologies and continue to grow and develop my skills.</p>
<p>I will do my best to ensure a smooth transition during my remaining time with the company. I will complete any unfinished projects, and I will make sure that my responsibilities are properly transferred to my colleagues. I will also make sure that my contact information is readily available in case of any urgent matters that may arise after my departure.</p>
<p>Please let me know if there is anything else I can do to assist during this transition.</p>
<p>Thank you for the time and opportunities that you have provided to me during my tenure at [Company Name].</p>
<p>Sincerely, [Your Name]</p>
]]></content:encoded></item><item><title><![CDATA[Email Templates for Resignation]]></title><description><![CDATA[Subject: Resignation - Change in Work from Home Policy and Lack of Opportunities for Professional Development
Dear [Manager's Name],
I am writing to inform you of my decision to resign from my position at [Company Name]. As we had discussed before I ...]]></description><link>https://blog.jaskaran.in/email-templates-for-resignation</link><guid isPermaLink="true">https://blog.jaskaran.in/email-templates-for-resignation</guid><category><![CDATA[email]]></category><category><![CDATA[resignation]]></category><category><![CDATA[challenge]]></category><category><![CDATA[templates]]></category><category><![CDATA[email templates]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Tue, 24 Jan 2023 02:30:42 GMT</pubDate><content:encoded><![CDATA[<p>Subject: Resignation - Change in Work from Home Policy and Lack of Opportunities for Professional Development</p>
<p>Dear [Manager's Name],</p>
<p>I am writing to inform you of my decision to resign from my position at [Company Name]. As we had discussed before I joined the company, I had requested and received approval to work from home on a regular basis. However, I have recently been informed that there has been a change in policy, and I am now being asked to work from the office, which does not align with my personal circumstances and needs. Furthermore, I have not been given the opportunities for professional development and learning new technologies that were promised to me during the hiring process.</p>
<p>I understand that the company may have valid reasons for these changes, but they do not align with my career goals and aspirations. As such, I have decided to resign from my position.</p>
<p>I would like to take this opportunity to thank you and the entire team at [Company Name] for the opportunities and experiences provided to me during my time here. I have learned a lot and have grown professionally during my tenure at the company.</p>
<p>I will do my best to ensure a smooth transition during my remaining time with the company. I will complete any unfinished projects, and I will make sure that my responsibilities are properly transferred to my colleagues. I will also make sure that my contact information is readily available in case of any urgent matters that may arise after my departure.</p>
<p>Please let me know if there is anything else I can do to assist during this transition.</p>
<p>Thank you again for the time and opportunities that you have provided to me during my tenure at [Company Name].</p>
<p>Sincerely, [Your Name]</p>
]]></content:encoded></item><item><title><![CDATA[Artificial General Intelligence and its implications on Development]]></title><description><![CDATA[Artificial General Intelligence (AGI) is a type of artificial intelligence (AI) that can perform any intellectual task that a human can. This is in contrast to "narrow AI," which is designed to perform specific tasks such as image recognition or natu...]]></description><link>https://blog.jaskaran.in/artificial-general-intelligence-and-its-implications-on-development</link><guid isPermaLink="true">https://blog.jaskaran.in/artificial-general-intelligence-and-its-implications-on-development</guid><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[Developer]]></category><category><![CDATA[development]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Mon, 23 Jan 2023 07:30:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/g29arbbvPjo/upload/a4c68a885b5ce41dafa4d179532c7285.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Artificial General Intelligence (AGI) is a type of artificial intelligence (AI) that can perform any intellectual task that a human can. This is in contrast to "narrow AI," which is designed to perform specific tasks such as image recognition or natural language processing. AGI is considered to be the next step in the evolution of AI, and it has the potential to revolutionize the way we live and work.</p>
<p>AGI has several implications for development, including:</p>
<ol>
<li><p>Automation of jobs: AGI has the potential to automate a wide range of tasks, including those that are currently performed by humans. This could lead to job displacement and a need to retrain workers for new roles.</p>
</li>
<li><p>Improved efficiency and productivity: AGI could help to improve efficiency and productivity in various industries, including manufacturing, healthcare, and transportation.</p>
</li>
<li><p>Advancements in robotics: AGI could lead to the development of more advanced robots and autonomous systems, which would have a major impact on various industries.</p>
</li>
<li><p>Development of new technologies: AGI could lead to the development of new technologies and applications, such as self-driving cars, intelligent personal assistants, and smart cities.</p>
</li>
<li><p>Ethical concerns: AGI raises several ethical concerns, such as issues around accountability, transparency, and privacy.</p>
</li>
<li><p>Security: AGI might also come with new security concerns and challenges, such as the manipulation of its decision-making and the potential of hackers exploiting its weaknesses.</p>
</li>
</ol>
<p>Overall, AGI has the potential to bring significant benefits to society, but it is important that these benefits are realized while also addressing the potential risks and challenges. Developers will have to consider the ethical and security implications of the technology as they design and build AGI systems.</p>
]]></content:encoded></item><item><title><![CDATA[GPT: The Future of Text Generation for Developers]]></title><description><![CDATA[Here are some ways GPT can help developers:

Text completion: GPT can generate text that completes a given prompt, which can save time and effort in the writing process.

Text generation: GPT can generate multiple variations of an article, which can ...]]></description><link>https://blog.jaskaran.in/gpt-the-future-of-text-generation-for-developers</link><guid isPermaLink="true">https://blog.jaskaran.in/gpt-the-future-of-text-generation-for-developers</guid><category><![CDATA[GPT 3]]></category><category><![CDATA[chatgpt]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Developer Tools]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Mon, 23 Jan 2023 03:30:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/E3XtCQXEYMA/upload/4e08cce240eadab648290585d5a3c2c0.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here are some ways GPT can help developers:</p>
<ol>
<li><p>Text completion: GPT can generate text that completes a given prompt, which can save time and effort in the writing process.</p>
</li>
<li><p>Text generation: GPT can generate multiple variations of an article, which can be useful for creating multiple versions of content.</p>
</li>
<li><p>Fine-tuning: GPT can be fine-tuned on a specific dataset to improve its performance for a certain task.</p>
</li>
<li><p>Summarization: GPT can be used to summarize articles and provide keyword or keyphrase extraction.</p>
</li>
<li><p>Language Translation: GPT can be used to translate text to different languages, which can be useful for multilingual applications.</p>
</li>
<li><p>Dialogue agents and conversational AI: GPT can be used as an NLP backbone to build end-to-end systems like dialogue agents and conversational AI.</p>
</li>
<li><p>Sentiment analysis: GPT can be fine-tuned to identify the sentiment of the given text.</p>
</li>
<li><p>Named entity recognition: GPT can be fine-tuned to recognize named entities in text and extract them.</p>
</li>
<li><p>Text classification: GPT can be fine-tuned to classify text into different categories.</p>
</li>
<li><p>Text-to-Speech: GPT can be used to generate speech from text, which can be useful for voice assistants and other applications.</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Write Clean Code!]]></title><description><![CDATA[Introduction
Clean code is the practice of writing code that is easy to understand, maintain, and extend. It is the foundation of good software development and can help prevent bugs, improve performance, and increase the overall quality of a project....]]></description><link>https://blog.jaskaran.in/write-clean-code</link><guid isPermaLink="true">https://blog.jaskaran.in/write-clean-code</guid><category><![CDATA[#codenewbies]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[AI]]></category><category><![CDATA[chatgpt]]></category><category><![CDATA[IT]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Sun, 22 Jan 2023 13:53:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/m_HRfLhgABo/upload/58c93d2b5a5cf54b42c798a5d5325ff6.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>Clean code is the practice of writing code that is easy to understand, maintain, and extend. It is the foundation of good software development and can help prevent bugs, improve performance, and increase the overall quality of a project.</p>
<h2 id="heading-readability-making-code-easy-to-understand">Readability: Making Code Easy to Understand</h2>
<p>One of the key principles of clean code is readability. The code should be written in a way that is easy for other developers to understand, even if they are not familiar with the project. This includes using clear and meaningful variable names, consistent indentation and formatting, and commenting code when necessary.</p>
<h2 id="heading-organization-keeping-code-logical-and-consistent">Organization: Keeping Code Logical and Consistent</h2>
<p>Another important aspect of clean code is organization. Code should be organized logically and consistently, with similar functionality grouped. This helps to make the code more manageable and easier to navigate.</p>
<h2 id="heading-design-patterns-using-best-practices-to-improve-reusability">Design Patterns: Using Best Practices to Improve Reusability</h2>
<p>Another important aspect of clean code is using design patterns. Design patterns are a set of best practices that have been proven to work well in a variety of situations. Using design patterns can help to make your code more reusable, flexible, and maintainable.</p>
<h2 id="heading-testability-ensuring-code-is-easy-to-test">Testability: Ensuring Code is Easy to Test</h2>
<p>Clean code should also be easy to test. This means that the code should be modular and decoupled, with clear inputs and outputs. This makes it easy to write automated tests and to ensure that the code is working as expected.</p>
<h2 id="heading-performance-optimizing-code-for-speed-and-memory">Performance: Optimizing Code for Speed and Memory</h2>
<p>Finally, clean code should be efficient and performant. This means that the code should be optimized for speed and memory usage and that any unnecessary operations should be removed.</p>
<h2 id="heading-conclusion-the-importance-of-clean-code-in-software-development">Conclusion: The Importance of Clean Code in Software Development</h2>
<p>In summary, clean code is a vital aspect of software development that can help to improve the quality and maintainability of a project. It involves writing code that is easy to understand, organize, and test, and that uses best practices and design patterns to improve performance.</p>
]]></content:encoded></item><item><title><![CDATA[Tips for beginner programmers 🎯]]></title><description><![CDATA[📌 Be patient. you won’t learn quickly. it will take time.
📌 Listen to all the advice, but don’t follow all the advice
📌 Try to ignore too much enthusiasm (hype) and too much negativity as well (e.g. “PHP is shit” - not true)
📌 When doing tutorial...]]></description><link>https://blog.jaskaran.in/tips-for-beginner-programmers</link><guid isPermaLink="true">https://blog.jaskaran.in/tips-for-beginner-programmers</guid><category><![CDATA[Programming Blogs]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Software Engineering]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Tue, 14 Jun 2022 08:53:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/_Fx34KeqIEw/upload/v1655196731761/ptpmzWmfF.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>📌 Be patient. you won’t learn quickly. it will take time.</p>
<p>📌 Listen to all the advice, but don’t follow all the advice</p>
<p>📌 Try to ignore too much enthusiasm (hype) and too much negativity as well (e.g. “PHP is shit” - not true)</p>
<p>📌 When doing tutorials, type the code. Don’t do copy/paste. Subtle but big difference. The code will be yours</p>
<p>📌 You learn by doing, not by watching other people do. Find a problem, even a simple one. Use code to create a solution. Create tons of little websites/apps.</p>
<p>📌 Start by understanding the problem. Once you understand the problem, coding is the easy part.</p>
<p>📌 Simple is better than overly complex. Don’t write code for a future that might never exist. Simple code working now is better than complex code that might work for a future scenario. Don’t be afraid that it looks too simple and not enough “engineered”</p>
<p>📌 Work on little projects that are interesting to you. Work on lots of projects. Quantity and spending tons of hours exposing yourself to different things is brute-forcing learning</p>
<p>📌 Find a way to stay consistent. For example every day at 6AM you spend 1 hour learning programming. Make it a habit.</p>
<p>📌 Don’t wait until you check all the boxes in a job ad to apply. You never know. Also, make tons of applications because you might not find the best company for you right at the first try.</p>
<p>📌 Skills apply across different programming languages</p>
<p>📌 You never finish learning. you have to always stay up to date to avoid becoming obsolete</p>
<p>📌 Learn from different sources</p>
<p>📌 Don’t focus too much on tools</p>
<p>📌 Don’t think you need a degree and that you won’t become a developer without a degree.</p>
<p>📌 Everyone makes mistakes. Mistakes are part of the learning process.</p>
<p>📌 It’s ok to use Google for every little problem you have, searching for a solution. Programmers share every problem and solution online, and if they didn’t, everyone would be challenged by the same issues. </p>
<p>📌 Instead, they share the solutions so you can go on with your day</p>
<p>📌 Motivation and curiosity are the best tools in your arsenal</p>
<p>📌 Find a community. It’s more fun with peers.</p>
<p>📌 We have many different languages. Different people like different languages. Also, different 
languages let you do different things. If Python does not stick into your head, maybe JavaScript will. And vice-versa.</p>
<p>📌 When recreating projects you see on YouTube or in a course, always try to add your own unique spin and features to it. Make it your own. This can be a project you then use as portfolio and show to prospective employers.</p>
<p>📌 Practice using a rubber duck. Get a plastic duck or perhaps your cat or anything near your desk. </p>
<p>📌 When you hit a problem, explain the problem to the duck. Many times the problem resolves itself.</p>
<p>📌 Walks or showers work wonders to fix problems. And sleep.</p>
<p>😃 Have fun!</p>
]]></content:encoded></item><item><title><![CDATA[5 Ways to Keep Your Code Clean and Efficient as a Developer]]></title><description><![CDATA[COMMENTS
One way to keep your code clean is by using comments. Comments are a great way to add clarity to your code and to make sure that you and others can understand what your code is doing. When adding comments, be sure to add them in a clear and ...]]></description><link>https://blog.jaskaran.in/5-ways-to-keep-your-code-clean-and-efficient-as-a-developer</link><guid isPermaLink="true">https://blog.jaskaran.in/5-ways-to-keep-your-code-clean-and-efficient-as-a-developer</guid><category><![CDATA[coding]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[programmer]]></category><category><![CDATA[Programming Blogs]]></category><category><![CDATA[Developer]]></category><dc:creator><![CDATA[Jaskaran Singh]]></dc:creator><pubDate>Tue, 05 Apr 2022 06:25:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/6sAl6aQ4OWI/upload/v1649139919186/mps49u-jg.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-comments">COMMENTS</h3>
<p>One way to keep your code clean is by using comments. Comments are a great way to add clarity to your code and to make sure that you and others can understand what your code is doing. When adding comments, be sure to add them in a clear and concise manner.</p>
<h3 id="heading-indentation">INDENTATION</h3>
<p>Another way to keep your code clean is by using proper indentation. Indentation helps to make your code more readable and easier to understand. Be sure to use consistent indentation throughout your code.</p>
<h3 id="heading-naming-conventions">NAMING CONVENTIONS</h3>
<p>Another way to keep your code clean is by using proper naming conventions. When naming classes, variables, and methods, be sure to use clear and descriptive names. This will help make your code more readable and easier to understand. If you have a class as “fb”, and months down the line you are reviewing your code, it’ll be very difficult to figure out what “fb” is for. especially if you have 20,000 lines of code. A better solution would be, “footer-bottom”.</p>
<h3 id="heading-language-consistency">LANGUAGE CONSISTENCY</h3>
<p>Using proper coding conventions is also important to keep your code clean. When coding, be sure to follow the conventions that are set forth by the programming language that you are using. This will help make your code more consistent and easier to read.</p>
<h3 id="heading-grouping">GROUPING</h3>
<p>Finally, it is important to keep your code well organized. When organizing your code, be sure to group similar classes and methods together. This will help make your code more readable and easier to navigate.
By following these tips, you can help keep your code clean, organized, and efficient. So take some time to review your code and make sure that it is up to par! You will be glad that you did!
What other tips do you have for keeping your code clean and efficient? Share them with me in the comments below!</p>
<p>Happy coding!  😎</p>
]]></content:encoded></item></channel></rss>