<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: dilsemonk</title>
    <description>The latest articles on DEV Community by dilsemonk (@dilsemonk).</description>
    <link>https://dev.to/dilsemonk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1951330%2F05716741-bb38-414e-9d54-17964d96d98d.png</url>
      <title>DEV Community: dilsemonk</title>
      <link>https://dev.to/dilsemonk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dilsemonk"/>
    <language>en</language>
    <item>
      <title>Attempt #20 - Lazy Loading</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Sun, 08 Sep 2024 11:47:35 +0000</pubDate>
      <link>https://dev.to/dilsemonk/attempt-20-lazy-loading-24gg</link>
      <guid>https://dev.to/dilsemonk/attempt-20-lazy-loading-24gg</guid>
      <description>&lt;h1&gt;
  
  
  Understanding Lazy Loading: A Thematic Approach
&lt;/h1&gt;

&lt;p&gt;In my recent exploration of &lt;strong&gt;lazy loading&lt;/strong&gt;, I decided to take a step back and look at the concept in a more framework-agnostic way. Instead of focusing on how lazy loading is implemented in specific frameworks like React, Vue, or Angular, I wanted to break down my understanding into high-level themes that can be applied universally. &lt;/p&gt;

&lt;p&gt;Lazy loading is a powerful technique for optimizing web applications by deferring the loading of certain components or modules until they are actually needed. This approach can significantly improve the &lt;strong&gt;performance&lt;/strong&gt; and &lt;strong&gt;user experience&lt;/strong&gt; of web applications, especially as they grow in complexity. Here's what I learned, organized into key themes:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Lazy Loading Fundamentals
&lt;/h2&gt;

&lt;p&gt;At its core, lazy loading is about &lt;strong&gt;loading on demand&lt;/strong&gt;. This means that instead of loading every component or feature upfront, we only load parts of the app when the user actually needs them. This reduces the initial bundle size and speeds up the app's load time.&lt;/p&gt;

&lt;p&gt;Key questions I asked myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the benefits of loading components only when they are needed?&lt;/li&gt;
&lt;li&gt;How does this improve the initial load performance of an app?&lt;/li&gt;
&lt;li&gt;When is it most beneficial to apply lazy loading?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Code Splitting
&lt;/h2&gt;

&lt;p&gt;Lazy loading is closely tied to &lt;strong&gt;code splitting&lt;/strong&gt;, which breaks down the application into smaller, more manageable chunks. Each chunk is loaded independently, allowing the app to load faster and run more efficiently.&lt;/p&gt;

&lt;p&gt;Key questions I considered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What does it mean to break the app into smaller code chunks?&lt;/li&gt;
&lt;li&gt;How does code splitting optimize performance?&lt;/li&gt;
&lt;li&gt;When should you decide to split your code?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Handling Loading States
&lt;/h2&gt;

&lt;p&gt;While components are being lazily loaded, it’s important to handle the &lt;strong&gt;user experience&lt;/strong&gt; properly. Providing feedback, like a loading spinner or placeholder content, ensures that users aren’t left wondering if the app has frozen or stopped working.&lt;/p&gt;

&lt;p&gt;Key considerations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why is showing a loading state essential for user experience?&lt;/li&gt;
&lt;li&gt;How can we effectively manage loading indicators while a component is being fetched?&lt;/li&gt;
&lt;li&gt;What should we display to users during component loading?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Granularity of Control
&lt;/h2&gt;

&lt;p&gt;When implementing lazy loading, there’s a balance between loading individual components versus entire modules. This is the &lt;strong&gt;granularity of control&lt;/strong&gt;—whether to apply lazy loading to small, isolated components or to larger sections of the app.&lt;/p&gt;

&lt;p&gt;Key reflections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When is it better to lazy load individual components vs. entire modules?&lt;/li&gt;
&lt;li&gt;How can finer control over lazy loading improve performance in smaller apps?&lt;/li&gt;
&lt;li&gt;What are the trade-offs between component-level and module-level lazy loading?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Routing and Lazy Loading
&lt;/h2&gt;

&lt;p&gt;Many applications use &lt;strong&gt;routing&lt;/strong&gt; to navigate between different views or pages. Lazy loading routes allows the app to only load the necessary code for a specific route when the user navigates to that page, improving overall performance.&lt;/p&gt;

&lt;p&gt;Key insights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How does lazy loading routes reduce the initial bundle size in large apps?&lt;/li&gt;
&lt;li&gt;What is the benefit of lazy loading specific routes versus components?&lt;/li&gt;
&lt;li&gt;How does this impact user experience when navigating between different pages?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Scalability of Lazy Loading
&lt;/h2&gt;

&lt;p&gt;As applications grow in size, lazy loading becomes increasingly important for &lt;strong&gt;scalability&lt;/strong&gt;. The ability to load features on demand ensures that even large, complex applications remain performant and responsive.&lt;/p&gt;

&lt;p&gt;Key questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How does lazy loading support the scalability of web applications?&lt;/li&gt;
&lt;li&gt;When is lazy loading most beneficial for large-scale apps with many features?&lt;/li&gt;
&lt;li&gt;How does lazy loading balance the load across the application’s lifecycle?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Developer Experience and Complexity
&lt;/h2&gt;

&lt;p&gt;While lazy loading provides performance benefits, it also adds complexity to the &lt;strong&gt;developer experience&lt;/strong&gt;. Managing lazy-loaded components, handling loading states, and ensuring smooth transitions between loaded and unloaded parts of the app can require careful planning.&lt;/p&gt;

&lt;p&gt;Key thoughts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the complexities lazy loading introduces to the development process?&lt;/li&gt;
&lt;li&gt;How can developers manage loading states effectively across different frameworks?&lt;/li&gt;
&lt;li&gt;What tools or patterns can help simplify the implementation of lazy loading?&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;By organizing my understanding into these high-level themes, I was able to see lazy loading not just as a framework-specific feature, but as a broader architectural concept that enhances the performance and scalability of web applications. Regardless of whether you're using React, Vue, or Angular, the core ideas behind lazy loading remain the same—&lt;strong&gt;load only what’s necessary, when it’s necessary&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These themes helped me clarify how to approach lazy loading in any application, regardless of the framework, and showed me the real value in thinking about &lt;strong&gt;when and how&lt;/strong&gt; to load components in a way that optimizes both performance and user experience.&lt;/p&gt;

</description>
      <category>ui</category>
      <category>1000attempts</category>
    </item>
    <item>
      <title>Attempt #19 - Compile-Time Safety with `never` in TypeScript: A Quick Comparison with C#</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Mon, 02 Sep 2024 10:59:38 +0000</pubDate>
      <link>https://dev.to/dilsemonk/compile-time-safety-with-never-in-typescript-a-quick-comparison-with-c-2l9c</link>
      <guid>https://dev.to/dilsemonk/compile-time-safety-with-never-in-typescript-a-quick-comparison-with-c-2l9c</guid>
      <description>&lt;p&gt;TypeScript offers a powerful feature that languages like C# often miss: &lt;strong&gt;compile-time safety&lt;/strong&gt;. The &lt;code&gt;never&lt;/code&gt; type in TypeScript plays a crucial role in ensuring that all possible cases in a union type are handled, catching errors early—before your code even runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  C# Example
&lt;/h2&gt;

&lt;p&gt;In C#, if you have an enum and a &lt;code&gt;switch&lt;/code&gt; statement, unhandled cases are caught at runtime:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;ShapeType&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Circle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Square&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Rectangle&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="nf"&gt;GetArea&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ShapeType&lt;/span&gt; &lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;ShapeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Circle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;// ...&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;ShapeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Square&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;// ...&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;ShapeType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;// ...&lt;/span&gt;
        &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ArgumentOutOfRangeException&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TypeScript’s never Example&lt;/p&gt;

&lt;p&gt;TypeScript enforces exhaustiveness at compile-time, using the never type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Shape&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;circle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;square&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rectangle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getArea&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Shape&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;circle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;// ...&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;square&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;// ...&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rectangle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;// ...&lt;/span&gt;
        &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;_exhaustiveCheck&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;_exhaustiveCheck&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Compile-time error if a case is missed&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By catching unhandled cases during compilation, TypeScript’s never type helps you write more robust and error-free code, reducing the chances of runtime surprises common in C#.&lt;/p&gt;

</description>
      <category>ui</category>
      <category>1000attempts</category>
    </item>
    <item>
      <title>Attempt #18 - Exploring Web Performance Metrics: FCP, LCP, and TTI</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Mon, 02 Sep 2024 09:50:08 +0000</pubDate>
      <link>https://dev.to/dilsemonk/attempt-18-exploring-web-performance-metrics-fcp-lcp-and-tti-28dd</link>
      <guid>https://dev.to/dilsemonk/attempt-18-exploring-web-performance-metrics-fcp-lcp-and-tti-28dd</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;Today, I spent some time digging into three key web performance metrics: &lt;strong&gt;First Contentful Paint (FCP)&lt;/strong&gt;, &lt;strong&gt;Largest Contentful Paint (LCP)&lt;/strong&gt;, and &lt;strong&gt;Time to Interactive (TTI)&lt;/strong&gt;. These metrics were new to me, and I found them fascinating in terms of how they relate to the user experience on a web page.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 First Contentful Paint (FCP): The First Visual Feedback
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What I learned:&lt;/strong&gt; FCP measures the time it takes for the first piece of content—like text or images—to be rendered on the screen. It’s the first moment users start to see something on the page, which makes it pretty important for the initial user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🖼️ Largest Contentful Paint (LCP): When the Main Content Appears
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What I learned:&lt;/strong&gt; LCP tracks the time it takes for the largest element in the viewport (think of a big image or headline) to fully load. This metric was particularly interesting to me because it gives insight into when the most significant part of the page is visible to the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🕒 Time to Interactive (TTI): Ready for Action
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What I learned:&lt;/strong&gt; TTI measures how long it takes before the page becomes fully interactive—when users can reliably click around without lag. I hadn’t thought much about this before, but it’s crucial for ensuring that users can start engaging with the content quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;These metrics opened up a new perspective for me on how to measure and think about web performance. If you’re curious about these metrics too, it might be worth checking them out!&lt;/p&gt;

</description>
      <category>ui</category>
      <category>1000attempts</category>
    </item>
    <item>
      <title>Attempt #17 - Asked ChatGPT to give me a reality check on my understanding of React useEffect hook</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Sun, 01 Sep 2024 08:05:50 +0000</pubDate>
      <link>https://dev.to/dilsemonk/attempt-17-asked-chatgpt-to-me-a-reality-check-on-my-understanding-of-react-useeffect-hook-4m2h</link>
      <guid>https://dev.to/dilsemonk/attempt-17-asked-chatgpt-to-me-a-reality-check-on-my-understanding-of-react-useeffect-hook-4m2h</guid>
      <description>&lt;p&gt;Well, it asked me some good questions and I am working on these.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;What is the purpose of the useEffect hook, and how does it differ from lifecycle methods in class components like componentDidMount, componentDidUpdate, and componentWillUnmount?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How does the dependency array in useEffect work? Can you explain what happens when you pass different types of dependencies, such as an empty array, a specific state variable, or leave the array undefined?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Describe a scenario where forgetting to include a dependency in the useEffect hook’s dependency array might lead to bugs. How would you debug such an issue?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How can you prevent the useEffect hook from running on the initial render, but only run on updates? Can you provide an example of this?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Explain how you can handle asynchronous operations within a useEffect hook. What potential issues can arise when dealing with async functions, and how can you manage them?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the significance of the cleanup function in useEffect? Provide an example of when and why you would use it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How would you implement polling (repeatedly fetching data at intervals) using the useEffect hook? What considerations must you keep in mind to avoid potential issues like memory leaks?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Imagine you’re working with a useEffect hook that depends on a value from useContext. How would you handle scenarios where the context value changes frequently? What strategies can you employ to optimize performance?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What challenges might arise when using useEffect to sync state with local storage? How would you ensure that the effect runs consistently across different environments, such as server-side rendering or during hydration?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can you think of any scenarios where you would intentionally leave the dependency array of useEffect empty or undefined? What are the risks involved, and how do you mitigate them?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How would you test a component that heavily relies on useEffect using tools like Jest or React Testing Library? What specific strategies or tools would you use to mock asynchronous operations or side effects?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Discuss a situation where you might want to cancel a network request inside a useEffect hook. How would you implement that cancellation in React?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How can useEffect be used to update the document title based on component state? What should you consider to ensure that the title is updated correctly and doesn’t lead to unnecessary performance issues?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have you encountered any common anti-patterns when using useEffect? How would you refactor code that misuses useEffect to follow best practices?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Imagine you have a complex component with multiple useEffect hooks, each handling different side effects. How do you manage and organize these effects to maintain readability and reduce potential bugs?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>1000attempts</category>
      <category>ui</category>
    </item>
    <item>
      <title>Attempt #16 - Learnt about routing - Continued the React Crash Course</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Sat, 31 Aug 2024 11:55:44 +0000</pubDate>
      <link>https://dev.to/dilsemonk/attempt-16-learnt-about-routing-continued-the-react-crash-course-4iin</link>
      <guid>https://dev.to/dilsemonk/attempt-16-learnt-about-routing-continued-the-react-crash-course-4iin</guid>
      <description>&lt;p&gt;Had a good productive learning about routers and I am  done with about 60% of the course today.&lt;/p&gt;

</description>
      <category>ui</category>
      <category>1000attempts</category>
    </item>
    <item>
      <title>Attempt #15 - Continued the React Crash Course</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Fri, 30 Aug 2024 04:44:18 +0000</pubDate>
      <link>https://dev.to/dilsemonk/attempt-15-continued-the-react-crash-course-55m8</link>
      <guid>https://dev.to/dilsemonk/attempt-15-continued-the-react-crash-course-55m8</guid>
      <description>&lt;p&gt;I extracted the remaining components from the main page and added state to job listing component, learnt about propTypes.&lt;/p&gt;

</description>
      <category>ui</category>
      <category>1000attempts</category>
    </item>
    <item>
      <title>Attempt #14 - Continued the React Crash Course</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Thu, 29 Aug 2024 05:50:59 +0000</pubDate>
      <link>https://dev.to/dilsemonk/attempt-14-continued-the-react-crash-course-5gfk</link>
      <guid>https://dev.to/dilsemonk/attempt-14-continued-the-react-crash-course-5gfk</guid>
      <description>&lt;h3&gt;
  
  
  Today I extracted more components and also added properties and learnt the template literal syntax.
&lt;/h3&gt;

&lt;p&gt;Latest commit is here: &lt;a href="https://github.com/dilsemonk/react-crash-learning/commit/cf6bee4bdac7839439896619b771a00276c5ed49" rel="noopener noreferrer"&gt;https://github.com/dilsemonk/react-crash-learning/commit/cf6bee4bdac7839439896619b771a00276c5ed49&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ui</category>
      <category>1000attempts</category>
    </item>
    <item>
      <title>Attempt #13 - Continued the React Crash Course</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Wed, 28 Aug 2024 15:02:21 +0000</pubDate>
      <link>https://dev.to/dilsemonk/attempt-13-continued-the-react-crash-course-1j18</link>
      <guid>https://dev.to/dilsemonk/attempt-13-continued-the-react-crash-course-1j18</guid>
      <description>&lt;h2&gt;
  
  
  React Crash Course Progress: Day 2
&lt;/h2&gt;

&lt;p&gt;I've just completed 20% of the React crash course on YouTube, which you can check out &lt;a href="https://www.youtube.com/watch?v=LDB4uaJ87e0" rel="noopener noreferrer"&gt;here&lt;/a&gt;. It's been an exciting journey so far, diving into the fundamentals of React and getting hands-on with some practical examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Worked on Today
&lt;/h3&gt;

&lt;p&gt;Today, I made some significant progress in understanding and applying key React concepts. My changes are now available on GitHub, where you can see the evolution of my project.&lt;/p&gt;

&lt;p&gt;📂 &lt;strong&gt;Today's Changes:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You can view the specific changes I made today by checking out my latest commit on GitHub:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/dilsemonk/react-crash-learning/commit/b3d7c3eab6d2cbe0e37ce0153f67769af2f5b7e8" rel="noopener noreferrer"&gt;View Commit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>1000attempts</category>
      <category>ui</category>
    </item>
    <item>
      <title>Attempt #12 - Learnt few new concepts in React</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Tue, 27 Aug 2024 13:24:23 +0000</pubDate>
      <link>https://dev.to/dilsemonk/attempt-12-learnt-few-new-concepts-in-react-207l</link>
      <guid>https://dev.to/dilsemonk/attempt-12-learnt-few-new-concepts-in-react-207l</guid>
      <description>&lt;h1&gt;
  
  
  Today I Learned: SSR and SSG with Next.js
&lt;/h1&gt;

&lt;p&gt;Today, I explored &lt;strong&gt;Server-Side Rendering (SSR)&lt;/strong&gt; and &lt;strong&gt;Static Site Generation (SSG)&lt;/strong&gt; in Next.js. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSR&lt;/strong&gt;: Renders pages on the server for each request, ideal for dynamic content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSG&lt;/strong&gt;: Pre-renders pages at build time, leading to faster load times for static content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also compared these concepts with Angular's approach and found React offers more flexibility in choosing between SSR, SSG, and Client-Side Rendering.&lt;/p&gt;

&lt;p&gt;Additionally, Watching &lt;a href="https://www.youtube.com/watch?v=LDB4uaJ87e0" rel="noopener noreferrer"&gt;this React JS course&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ui</category>
      <category>1000attempts</category>
    </item>
    <item>
      <title>Attempt #11 - Adding a Sanity Test with Playwright to Tic-Tac-Toe</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Mon, 26 Aug 2024 11:56:52 +0000</pubDate>
      <link>https://dev.to/dilsemonk/attempt-11-adding-a-sanity-test-with-playwright-to-tic-tac-toe-5aen</link>
      <guid>https://dev.to/dilsemonk/attempt-11-adding-a-sanity-test-with-playwright-to-tic-tac-toe-5aen</guid>
      <description>&lt;p&gt;In my Tic-Tac-Toe project, I’ve integrated a basic sanity test using Playwright. This test automates a simple scenario where the first few moves of the game are played out, and the result is checked to ensure the game logic is functioning correctly.&lt;/p&gt;

&lt;p&gt;You can view the exact changes in &lt;a href="https://github.com/dilsemonk/tic-tac-toe/commit/98d0a38316ab6ac0591dffef34d6975d3e14528b" rel="noopener noreferrer"&gt;this commit&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ui</category>
      <category>1000attempts</category>
    </item>
    <item>
      <title>Attempt #10 - Refactored Tic-Tac-Toe Initial Version</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Mon, 26 Aug 2024 10:08:36 +0000</pubDate>
      <link>https://dev.to/dilsemonk/attempt-110-refactored-tic-tac-toe-initial-version-lo1</link>
      <guid>https://dev.to/dilsemonk/attempt-110-refactored-tic-tac-toe-initial-version-lo1</guid>
      <description>&lt;p&gt;I spent some time refactoring the Tic-Tac-Toe game today. The focus of this update was on improving the readability of the game logic.&lt;/p&gt;

&lt;p&gt;Check out the commit for the details of the changes: &lt;a href="https://github.com/dilsemonk/tic-tac-toe/commit/0f544e2e7fa9915d0fc6b5fad08c32756afcf357" rel="noopener noreferrer"&gt;Refactoring for Immutability and Robustness&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Feel free to review the changes, and let me know if you have any feedback!&lt;/p&gt;

</description>
      <category>ui</category>
      <category>1000attempts</category>
    </item>
    <item>
      <title>Attempt #9 - Built Tic-Tac-Toe Initial Version with React and Tailwind</title>
      <dc:creator>dilsemonk</dc:creator>
      <pubDate>Sun, 25 Aug 2024 16:04:21 +0000</pubDate>
      <link>https://dev.to/dilsemonk/widget-9-tic-tac-toe-initial-version-with-react-and-tailwind-2jlj</link>
      <guid>https://dev.to/dilsemonk/widget-9-tic-tac-toe-initial-version-with-react-and-tailwind-2jlj</guid>
      <description>&lt;h2&gt;
  
  
  Building Tic-Tac-Toe with React and Tailwind CSS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;As part of my ongoing journey to deepen my understanding of UI development, I recently completed a simple yet fun project: building a Tic-Tac-Toe game using React and Tailwind CSS. This project was a great way to practice state management in React while also experimenting with responsive design using Tailwind CSS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Overview
&lt;/h3&gt;

&lt;p&gt;The Tic-Tac-Toe game features a 3x3 grid where two players take turns placing X's and O's. The game detects when a player has won and displays the result, ensuring a smooth and interactive experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Gameplay:&lt;/strong&gt; Players can click on squares to place their X or O.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Win Detection:&lt;/strong&gt; The game detects when a player has won and displays the winner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive Design:&lt;/strong&gt; The board is styled with Tailwind CSS, ensuring it looks good on various screen sizes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step-by-Step Guide
&lt;/h3&gt;

&lt;p&gt;Here's a brief overview of how I built the Tic-Tac-Toe game:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Setting Up the Project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I started by creating a new React project using &lt;code&gt;create-react-app&lt;/code&gt; and configuring Tailwind CSS for styling.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dilsemonk/tic-tac-toe" rel="noopener noreferrer"&gt;Link to the project setup guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Creating the Components:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The game consists of two main components: &lt;code&gt;Square&lt;/code&gt; and &lt;code&gt;Board&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Square&lt;/code&gt; component represents each cell on the board, while the &lt;code&gt;Board&lt;/code&gt; component manages the overall game state.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Implementing the Game Logic:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I implemented the game logic to detect a win condition by checking all possible winning combinations after each move.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dilsemonk/tic-tac-toe" rel="noopener noreferrer"&gt;View the code on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Styling with Tailwind CSS:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tailwind CSS was used to style the board and squares, making the game visually appealing and responsive.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;State Management:&lt;/strong&gt; Managing state at the &lt;code&gt;Board&lt;/code&gt; level allowed for efficient game logic implementation and UI updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS:&lt;/strong&gt; Using Tailwind made it easy to apply consistent styling across components without writing custom CSS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What’s Next?
&lt;/h3&gt;

&lt;p&gt;Moving forward, I plan to add more features, such as a reset button, and possibly implement an AI opponent for single-player mode. &lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Building this Tic-Tac-Toe game was a valuable learning experience that reinforced key concepts in React and Tailwind CSS. You can check out the full project on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dilsemonk/tic-tac-toe" rel="noopener noreferrer"&gt;View the Tic-Tac-Toe Project on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to fork the repository, try out the code, and suggest improvements!&lt;/p&gt;

&lt;h3&gt;
  
  
  Let’s Connect
&lt;/h3&gt;

&lt;p&gt;I’d love to hear your thoughts, feedback, or suggestions. If you’re working on similar projects, feel free to share them with me!&lt;/p&gt;

</description>
      <category>1000attempts</category>
      <category>ui</category>
    </item>
  </channel>
</rss>
