<?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>Forem: Charlie Say</title>
    <description>The latest articles on Forem by Charlie Say (@charliesay).</description>
    <link>https://forem.com/charliesay</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%2F629423%2F135170a3-91b2-4fb2-a62c-9f385473b5dd.png</url>
      <title>Forem: Charlie Say</title>
      <link>https://forem.com/charliesay</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/charliesay"/>
    <language>en</language>
    <item>
      <title>Building GitHub Airlines</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Wed, 27 Nov 2024 12:04:35 +0000</pubDate>
      <link>https://forem.com/charliesay/building-github-airlines-d02</link>
      <guid>https://forem.com/charliesay/building-github-airlines-d02</guid>
      <description>&lt;h1&gt;
  
  
  Building GitHub Airlines: A Fun Side Project in 2 Hours ✈️
&lt;/h1&gt;

&lt;p&gt;G'day folks! Today I want to share a fun little project I whipped up in just a couple of hours - GitHub Airlines, a web app that turns your GitHub profile into a proper fancy boarding pass. Because why should your GitHub stats be boring when they could be aviation-themed? 🛩️&lt;/p&gt;

&lt;h2&gt;
  
  
  The Inspiration ✨
&lt;/h2&gt;

&lt;p&gt;You know those moments when you're procrastinating on GitHub, looking at your stats for the millionth time? Well, I thought, "Wouldn't it be brilliant if these numbers looked more like a boarding pass?" And thus, GitHub Airlines was born!&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Built 🏗️
&lt;/h2&gt;

&lt;p&gt;GitHub Airlines is a React app that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetches your GitHub stats using the REST API&lt;/li&gt;
&lt;li&gt;Generates a snazzy boarding pass with your data&lt;/li&gt;
&lt;li&gt;Includes different themes (or "ticket classes" as we're calling them)&lt;/li&gt;
&lt;li&gt;Works on both mobile and desktop&lt;/li&gt;
&lt;li&gt;Includes a proper QR code linking to your profile&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Tech Stack 🛠️
&lt;/h2&gt;

&lt;p&gt;We kept it simple but modern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vite + React (Because ain't nobody got time for slow builds)&lt;/li&gt;
&lt;li&gt;TypeScript (For catching those pesky bugs)&lt;/li&gt;
&lt;li&gt;Tailwind CSS (Making things pretty without the faff)&lt;/li&gt;
&lt;li&gt;GitHub REST API (The source of all our lovely data)&lt;/li&gt;
&lt;li&gt;Lucide React (For those snazzy icons)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Build Process 🚀
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Setting Up the Foundation
&lt;/h3&gt;

&lt;p&gt;First things first, we got our Vite + React + TypeScript project up and running. Vite's brilliant for quick development - it's proper fast!&lt;/p&gt;

&lt;h3&gt;
  
  
  2. GitHub API Integration
&lt;/h3&gt;

&lt;p&gt;We kept it simple with the REST API - no need for authentication, just straight public data fetching:&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;const&lt;/span&gt; &lt;span class="nx"&gt;fetchGitHubData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;userResponse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reposResponse&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://api.github.com/users/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://api.github.com/users/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/repos`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;
  &lt;span class="c1"&gt;// Transform the data into boarding pass format&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. The Boarding Pass Design
&lt;/h3&gt;

&lt;p&gt;This was the fun bit! We used Tailwind CSS to create a proper airline ticket look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Moving banner at the top (because why not?)&lt;/li&gt;
&lt;li&gt;QR code linking to your profile&lt;/li&gt;
&lt;li&gt;Different sections for various GitHub stats&lt;/li&gt;
&lt;li&gt;Multiple themes to choose from&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Making it Responsive
&lt;/h3&gt;

&lt;p&gt;Because nobody likes a boarding pass that doesn't fit on their phone, right?&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned 📚
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep It Simple&lt;/strong&gt;: We could've added loads more features, but sometimes less is more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design First&lt;/strong&gt;: Having a clear vision of the design made development much smoother&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile First&lt;/strong&gt;: Always think about mobile users from the start&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try It Yourself! 🎮
&lt;/h2&gt;

&lt;p&gt;Want to see your GitHub profile as a boarding pass? Check out the &lt;a href="https://github-airline-pass.vercel.app/" rel="noopener noreferrer"&gt;live demo&lt;/a&gt; or grab the &lt;a href="https://github.com/CharlieSay/github-airline-pass" rel="noopener noreferrer"&gt;source code&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next? 🤔
&lt;/h2&gt;

&lt;p&gt;This was just a 2-hour build, but there's so much more we could add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More ticket classes (themes)&lt;/li&gt;
&lt;li&gt;Animated transitions&lt;/li&gt;
&lt;li&gt;Achievement badges&lt;/li&gt;
&lt;li&gt;Flight history (commit history)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Involved! 🤝
&lt;/h2&gt;

&lt;p&gt;The project is completely open source, and we'd love your contributions! Whether it's adding new features, fixing bugs, or just giving feedback - every bit helps!&lt;/p&gt;




&lt;p&gt;Have you built any fun projects with the GitHub API? Or got any ideas for making GitHub Airlines even better? Drop a comment below - I'd love to hear your thoughts! &lt;/p&gt;

&lt;p&gt;And remember, the sky's not the limit when you're coding! ✈️&lt;/p&gt;

&lt;h1&gt;
  
  
  webdev #typescript #react #github #opensource
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Turbopack vs Webpack: Has Webpack’s Creator Built Its Own Replacement?</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Wed, 09 Oct 2024 23:00:00 +0000</pubDate>
      <link>https://forem.com/charliesay/turbopack-vs-webpack-has-webpacks-creator-built-its-own-replacement-al4</link>
      <guid>https://forem.com/charliesay/turbopack-vs-webpack-has-webpacks-creator-built-its-own-replacement-al4</guid>
      <description>&lt;p&gt;Turbopack, from the creators of Webpack, claims to be 10x faster than its predecessor. But does that mean we’re all abandoning Webpack soon? It’s still early days, but if Turbopack delivers on its speed promises, Webpack could finally be dethroned. Have you tried it? Is Turbopack the future?&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>react</category>
    </item>
    <item>
      <title>Deno vs Node.js: Is Deno Really the Better Node?</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Wed, 02 Oct 2024 23:00:00 +0000</pubDate>
      <link>https://forem.com/charliesay/deno-vs-nodejs-is-deno-really-the-better-node-2fcf</link>
      <guid>https://forem.com/charliesay/deno-vs-nodejs-is-deno-really-the-better-node-2fcf</guid>
      <description>&lt;p&gt;Deno promised a secure, modern runtime with a built-in TypeScript compiler and no dependency hell. But is it really ready to topple Node.js, which is still powering most of the web? Deno has some cool ideas, but the ecosystem is still maturing, while Node has a decade of libraries and frameworks. What do you think? Has Deno earned a spot in your stack, or is it just hype?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>useActionState: Streamlining React Form State Management 🔄</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Sat, 28 Sep 2024 08:00:00 +0000</pubDate>
      <link>https://forem.com/charliesay/useactionstate-streamlining-react-form-state-management-f1e</link>
      <guid>https://forem.com/charliesay/useactionstate-streamlining-react-form-state-management-f1e</guid>
      <description>&lt;h1&gt;
  
  
  useActionState: Streamlining React Form State Management 🔄
&lt;/h1&gt;

&lt;p&gt;Hello, fellow React developers! Today, we’re diving into &lt;code&gt;useActionState&lt;/code&gt;—a powerful new hook that could change the way we handle form state in React. 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  What is useActionState? 🤔
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;useActionState&lt;/code&gt; is one of React’s latest hooks, created to simplify form state management. It’s particularly useful when combined with Server Components, bridging the gap between client-side interactivity and server-side processing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Syntax 📝
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;formAction&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useActionState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;permalink&lt;/span&gt;&lt;span class="p"&gt;?);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This hook takes three parameters:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;fn&lt;/code&gt;: Your action function&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;initialState&lt;/code&gt;: The initial state value&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;permalink&lt;/code&gt;: (Optional) A URL for progressive enhancement&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It returns:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The current state&lt;/li&gt;
&lt;li&gt;A new action to use with your form&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why It Matters 💡
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Boosts Server-Side Rendering&lt;/strong&gt;: When paired with Server Components, it allows forms to be interactive before the client fully loads JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplified State Management&lt;/strong&gt;: It automatically handles form state updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progressive Enhancement&lt;/strong&gt;: The optional &lt;code&gt;permalink&lt;/code&gt; parameter supports functionality even when JavaScript is disabled.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Practical Example: Before and After 🛠️
&lt;/h2&gt;

&lt;p&gt;Let’s see how &lt;code&gt;useActionState&lt;/code&gt; compares to the traditional approach when updating a user profile.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before: Traditional Approach
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateProfile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updates&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Simulating an API call&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;apiUpdateProfile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updates&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ProfileForm&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setEmail&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setMessage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;isSuccess&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setIsSuccess&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&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;handleSubmit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;updateProfile&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
      &lt;span class="nf"&gt;setIsSuccess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Profile updated successfully!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;setIsSuccess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to update profile. Please try again.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;
        &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
        &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;
        &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
        &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Update&lt;/span&gt; &lt;span class="nx"&gt;Profile&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;isSuccess&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;green&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="p"&gt;)}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/form&lt;/span&gt;&lt;span class="err"&gt;&amp;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;h3&gt;
  
  
  After: Using useActionState
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useActionState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateProfile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prevState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;updates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromEntries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Simulating an API call&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;apiUpdateProfile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updates&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Profile updated successfully!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to update profile. Please try again.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ProfileForm&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;formAction&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useActionState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updateProfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formAction&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Update&lt;/span&gt; &lt;span class="nx"&gt;Profile&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;success&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;green&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="p"&gt;)}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/form&lt;/span&gt;&lt;span class="err"&gt;&amp;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;h3&gt;
  
  
  Key Differences 🔑
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;State Management&lt;/strong&gt;: The traditional approach requires multiple &lt;code&gt;useState&lt;/code&gt; hooks and manual updates, while &lt;code&gt;useActionState&lt;/code&gt; automates this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form Submission&lt;/strong&gt;: Instead of a custom &lt;code&gt;onSubmit&lt;/code&gt; handler, &lt;code&gt;useActionState&lt;/code&gt; uses the &lt;code&gt;action&lt;/code&gt; prop with &lt;code&gt;formAction&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Handling&lt;/strong&gt;: &lt;code&gt;useActionState&lt;/code&gt; automatically provides the form data, whereas the traditional method requires manual data handling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Simplicity&lt;/strong&gt;: The &lt;code&gt;useActionState&lt;/code&gt; version is more concise, requiring less boilerplate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server Integration&lt;/strong&gt;: &lt;code&gt;useActionState&lt;/code&gt; is designed to work with Server Components, improving performance and the user experience.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Considerations 🧐
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useActionState&lt;/code&gt; is available in React's Canary and experimental channels.&lt;/li&gt;
&lt;li&gt;The action function gets an extra first argument (the previous state), so its signature differs slightly from standard form actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping Up 🎁
&lt;/h2&gt;

&lt;p&gt;As the examples show, &lt;code&gt;useActionState&lt;/code&gt; streamlines form state management in React. It reduces boilerplate code, integrates well with server-side logic, and can improve performance, especially when used with Server Components.&lt;/p&gt;

&lt;p&gt;By using &lt;code&gt;useActionState&lt;/code&gt;, you can write more concise, maintainable, and efficient forms. Try it out in your next project and see the benefits for yourself!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>programming</category>
    </item>
    <item>
      <title>BiomeJS vs ESLint: Is the New Kid on the Block Worth the Switch?</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Wed, 25 Sep 2024 20:30:56 +0000</pubDate>
      <link>https://forem.com/charliesay/biomejs-vs-eslint-is-the-new-kid-on-the-block-worth-the-switch-1710</link>
      <guid>https://forem.com/charliesay/biomejs-vs-eslint-is-the-new-kid-on-the-block-worth-the-switch-1710</guid>
      <description>&lt;p&gt;ESLint has been the tried and true tool for keeping JavaScript codebases clean. But now we’ve got BiomeJS, a fresh tool combining formatting and linting. It's faster and built on Rust, making it appealing for those looking to reduce tooling overhead. But can it really replace ESLint in a larger setup? &lt;/p&gt;

&lt;p&gt;Have you made the switch, or are you sticking with the ESLint/Prettier combo? Let's discuss.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Are you or are you not worried about ChatGPT and its capabilities?</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Thu, 16 Mar 2023 09:36:52 +0000</pubDate>
      <link>https://forem.com/charliesay/are-you-or-are-you-not-worried-about-chatgpt-and-its-capabilities-49n0</link>
      <guid>https://forem.com/charliesay/are-you-or-are-you-not-worried-about-chatgpt-and-its-capabilities-49n0</guid>
      <description>&lt;p&gt;With ChatGPT-4's release just around the corner and its rumoured capabilities - are you worried about it and your future as developers?&lt;/p&gt;

&lt;p&gt;If so why? &lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>discuss</category>
      <category>programming</category>
    </item>
    <item>
      <title>Need another side project idea?</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Tue, 31 Jan 2023 09:33:20 +0000</pubDate>
      <link>https://forem.com/charliesay/need-another-side-project-idea-5ekp</link>
      <guid>https://forem.com/charliesay/need-another-side-project-idea-5ekp</guid>
      <description>&lt;h2&gt;
  
  
  ⚠️ There has been alot of traffic since this post! If you see a bug, or there isnt a project you want - please feel free to help out! We are open source and would love more developers involved! ⚠️
&lt;/h2&gt;

&lt;p&gt;As a developer, you are constantly on the lookout for ways to improve your skills, learn new technologies and build something meaningful. But sometimes, inspiration can be hard to come by. This is where &lt;a href="https://100projects.dev" rel="noopener noreferrer"&gt;100Projects.dev&lt;/a&gt; comes in - a resource for developers looking to find their next side project idea.&lt;/p&gt;

&lt;p&gt;This website is a curated collection of over 100 project ideas, categorised by type (Full-stack, games, desktop, backend, etc.), language (Java, Rust, etc.) and difficulty level. Whether you're a seasoned developer or just starting out, you'll find something to suit your skills and interests.&lt;/p&gt;

&lt;p&gt;Best of all, &lt;a href="https://100projects.dev" rel="noopener noreferrer"&gt;100Projects.dev&lt;/a&gt; is open-source, so anyone can contribute. Whether you want to add a new project idea, contribute code or help fix a bug, there's a place for you. The community is growing and it's a great way to get involved and give back to the developer community. Check out the &lt;a href="https://github.com/CharlieSay/100-projects-web" rel="noopener noreferrer"&gt;web repository&lt;/a&gt; and &lt;a href="https://github.com/CharlieSay/100-projects-content" rel="noopener noreferrer"&gt;project content repository&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;p&gt;So, what are you waiting for? Unleash your creativity with &lt;a href="https://100projects.dev" rel="noopener noreferrer"&gt;100Projects.dev&lt;/a&gt; and discover your next side project idea today.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: If you want to give back to the open-source community and work on an easy interesting project that helps grow developers, check out the open GitHub issues on the &lt;a href="https://github.com/CharlieSay/100-projects-web" rel="noopener noreferrer"&gt;100Projects.dev repository&lt;/a&gt;. Help make the platform even better for developers everywhere.&lt;br&gt;
P.s - literally no catch here, lets just make developing a better world for everyone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9i98tf2eh5v03wnkvagr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9i98tf2eh5v03wnkvagr.png" alt="GitHub repository" width="800" height="439"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupvho8g84vy688p0fuk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupvho8g84vy688p0fuk7.png" alt="100Projects homepage" width="800" height="661"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwm7oba36slbjrampceb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwm7oba36slbjrampceb1.png" alt="100Projects project page" width="800" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AWS Amplify - your first app</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Sat, 07 Jan 2023 09:36:18 +0000</pubDate>
      <link>https://forem.com/charliesay/aws-amplify-your-first-app-3aan</link>
      <guid>https://forem.com/charliesay/aws-amplify-your-first-app-3aan</guid>
      <description>&lt;p&gt;Welcome to your first app with &lt;em&gt;&lt;strong&gt;AWS Amplify&lt;/strong&gt;&lt;/em&gt;! In this article, I’ll introduce you to the powerful set of tools and services that make up AWS Amplify, and guide you through the process of getting started with them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is AWS Amplify?
&lt;/h2&gt;

&lt;p&gt;AWS Amplify is a collection of tools and services that makes it easy for you to build, deploy, and manage mobile and web applications on the AWS cloud. It provides a range of features and services that help you develop, test, and deploy your applications with ease, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A command-line interface (CLI) for building and deploying your applications&lt;/li&gt;
&lt;li&gt;A set of libraries for accessing AWS services from your app&lt;/li&gt;
&lt;li&gt;A range of pre-built UI components for building user interfaces&lt;/li&gt;
&lt;li&gt;Tools for testing and debugging your applications&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why or Why not AWS Amplify?
&lt;/h2&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ease of use: AWS Amplify makes it easy for developers to build, deploy, and manage applications on the AWS cloud. With a simple command-line interface and a range of pre-built UI components and libraries, Amplify takes care of much of the heavy lifting involved in cloud development, allowing developers to focus on building great experiences for their users.&lt;/li&gt;
&lt;li&gt;Scalability: Amplify applications can automatically scale to meet the needs of your users, whether you have a few hundred or millions of them. This makes it easy to build apps that can handle heavy traffic and grow with your business.&lt;/li&gt;
&lt;li&gt;Integration with other AWS services: Amplify integrates seamlessly with other AWS services, such as Amazon S3, Amazon Cognito, and Amazon DynamoDB. This makes it easy to build apps that take advantage of the full range of AWS features and capabilities.&lt;/li&gt;
&lt;li&gt;Cost-effective: Amplify provides a pay-as-you-go pricing model, which means that you only pay for the resources you use. This can be a cost-effective way to build and deploy apps, especially if you are just starting out or don't have a lot of resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Limited to AWS: Amplify is designed specifically for building applications on the AWS cloud. If you are looking for a more general-purpose development platform, you may want to consider other options.&lt;/li&gt;
&lt;li&gt;Learning curve (until you’ve read this article!) : While Amplify is generally easy to use, there is still a learning curve involved in getting started with the platform. You will need to become familiar with the various AWS services and tools that Amplify provides, as well as the Amplify CLI and libraries.&lt;/li&gt;
&lt;li&gt;Dependency on AWS: Because Amplify is tightly integrated with AWS, you will need to have an AWS account and be familiar with the AWS ecosystem in order to use it. If you are not already familiar with AWS, you may need to spend some time learning about the platform before you can get started with Amplify.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting started with AWS Amplify
&lt;/h2&gt;

&lt;p&gt;Getting started with AWS Amplify is easy! The first step is to install the Amplify CLI on your machine. This is a simple process that involves downloading the CLI and running a few commands to set it up.&lt;/p&gt;

&lt;p&gt;To download the Amplify CLI, visit the &lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/amplify/latest/userguide/cli.html" rel="noopener noreferrer"&gt;AWS Amplify documentation&lt;/a&gt;&lt;/strong&gt;. Follow the instructions provided there to install the CLI on your system.&lt;/p&gt;

&lt;p&gt;Once you have the Amplify CLI installed, you can use it to create a new Amplify project. This will create a new folder on your machine with a basic file structure and some starter code. To create a new project, open a terminal and navigate to the folder where you want to create your project. Then, run the following command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This will prompt you to provide some information about your project, such as its name and the region where you want to host it. Once you have provided this information, the Amplify CLI will create a new project for you and set up the necessary files and directories.&lt;/p&gt;

&lt;p&gt;With your Amplify project set up, you can use the CLI to add the AWS services that you want to use in your application. For example, you might want to add a database or authentication service. To add a service to your project, run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;amplify add &amp;lt;service&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;strong&gt;&lt;code&gt;&amp;lt;service&amp;gt;&lt;/code&gt;&lt;/strong&gt; with the name of the service that you want to add. For example, to add a database service, you would run &lt;strong&gt;&lt;code&gt;amplify add database&lt;/code&gt;&lt;/strong&gt;. The Amplify CLI will then guide you through the process of setting up and configuring the service for your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building your first app with AWS Amplify
&lt;/h2&gt;

&lt;p&gt;Great! Now that you have your Amplify project set up, it's time to start building your first app. As I mentioned earlier, Amplify provides a range of libraries and UI components that make it easy to build scalable applications quickly.&lt;/p&gt;

&lt;p&gt;To get started, let's create a new component for our app using the Amplify CLI. In your terminal, navigate to your Amplify project folder and run the following command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This will prompt you to select a type of component to create. For this example, let's choose a "Form" component. The Amplify CLI will then ask you to name your component and provide a few additional details. Once you have provided this information, the CLI will generate a new file for your component in your project folder.&lt;/p&gt;

&lt;p&gt;The file that the Amplify CLI generates for your component will contain some basic code and a template that you can use to build your component. Here is an example of what the file might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Form&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@aws-amplify/ui-react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MyForm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Field&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"First Name"&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Field&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Last Name"&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Field&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Email"&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Field&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Phone Number"&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"phoneNumber"&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"tel"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Submit&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;MyForm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code creates a simple form with four input fields and a submit button. The &lt;strong&gt;&lt;code&gt;Form&lt;/code&gt;&lt;/strong&gt; component is provided by the &lt;strong&gt;&lt;code&gt;@aws-amplify/ui-react&lt;/code&gt;&lt;/strong&gt; library, which is a collection of pre-built UI components that you can use to build your app's user interface.&lt;/p&gt;

&lt;p&gt;You can customize this form by adding your own HTML, CSS, and JavaScript as needed. For example, you might want to add some additional fields or validation to the form, or style it to match your app's branding.&lt;/p&gt;

&lt;p&gt;Once you have your component set up the way you want it, you can use the Amplify CLI to deploy it to the cloud. This will create a new instance of your app on AWS, making it available to users around the world.&lt;/p&gt;

&lt;p&gt;To deploy your component, simply run the following command in your terminal:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This will build your app and upload it to AWS, where it will be hosted and served to users. You can then access your app by visiting the URL provided by the Amplify CLI in your browser.&lt;/p&gt;

&lt;p&gt;When you run the &lt;strong&gt;&lt;code&gt;amplify publish&lt;/code&gt;&lt;/strong&gt; command to deploy your app, the Amplify CLI will output a URL that you can use to access your app in a web browser. The exact format of this URL will depend on the specific hosting provider that you are using with Amplify, but it will typically look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://&amp;lt;your-app-id&amp;gt;.aws-amplify.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, if your app's ID is "my-amplify-app", the URL to access your app would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://my-amplify-app.aws-amplify.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also use the Amplify CLI to view a list of your deployed apps and their URLs by running the following command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This will output a list of all the apps that you have deployed with Amplify, along with their URLs and other relevant information. You can then use these URLs to access your apps in a web browser.&lt;/p&gt;

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

&lt;p&gt;And thats it you have completed and made your first AWS amplify app…&lt;/p&gt;

&lt;p&gt;I hope you found this article helpful and are now well on your way to becoming an expert in building and deploying mobile and web applications on the AWS cloud.&lt;br&gt;
if you ever get stuck, the AWS Amplify documentation is always there to help. And hey, if you're feeling especially confident now that you're an AWS Amplify expert, you might even try your hand at building a cloud-powered magic 8-ball. Who knows, it might just become the next big thing!&lt;/p&gt;

</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>Impostor Syndrome in software engineering</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Wed, 04 Jan 2023 10:09:15 +0000</pubDate>
      <link>https://forem.com/charliesay/impostor-syndrome-in-software-engineering-28ke</link>
      <guid>https://forem.com/charliesay/impostor-syndrome-in-software-engineering-28ke</guid>
      <description>&lt;h2&gt;
  
  
  Impostor syndrome in software - and how to get over it.
&lt;/h2&gt;

&lt;p&gt;Hey there! If you're reading this, you may have experienced impostor syndrome at some point in your career. Don't worry, you're not alone. Impostor syndrome is a common experience among software professionals, and it can be a real hindrance to your success and well-being.&lt;/p&gt;

&lt;p&gt;Now I am not claiming to be an expert in this, there are MILLIONS of way more qualified people out there than me to talk about it, however as someone who’s experienced it in past and to this day still does - I just want to give my 2 cents in this article before pointing you towards some REALLY good resources.&lt;/p&gt;

&lt;p&gt;So, what exactly is impostor syndrome? Simply put, it's the feeling that you're not as competent or qualified as others believe you to be. It's the fear that you'll be exposed as a fraud or an impostor, despite evidence to the contrary.&lt;/p&gt;

&lt;p&gt;Impostor syndrome can show up in a variety of ways. You might feel like you're not smart enough or skilled enough to do your job, or that you don't deserve the recognition or success you've achieved. You might also have a hard time accepting compliments or believing in your own abilities.&lt;/p&gt;

&lt;p&gt;Impostor syndrome can be especially common in the software industry, where the pace of change is fast and there's always something new to learn (especially with a new javascript every 2 minutes, hey yooooo). It's easy to feel like you're falling behind or that you don't measure up to your peers.&lt;/p&gt;

&lt;p&gt;So, how did I overcome impostor syndrome? Here are a few strategies that might help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recognize that impostor syndrome is a common experience. &lt;strong&gt;It's not just you&lt;/strong&gt;! Knowing that you're not alone can help you feel less isolated and more able to cope with your feelings.&lt;/li&gt;
&lt;li&gt;Seek out mentors and role models. Surrounding yourself with supportive, accomplished people can help you see that success is possible and that you're on the right track.&lt;/li&gt;
&lt;li&gt;Practice self-compassion. &lt;strong&gt;Be kind to yourself&lt;/strong&gt; when you make mistakes or feel unsure of yourself. Remember that everyone makes mistakes and that it's okay to ask for help.&lt;/li&gt;
&lt;li&gt;Reframe your thinking. Instead of telling yourself that you're not good enough, try saying things like &lt;strong&gt;"I'm learning and growing"&lt;/strong&gt; or &lt;strong&gt;"I'm doing the best I can."&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Take care of yourself. Make sure you're getting enough &lt;strong&gt;rest, exercise, and healthy food.&lt;/strong&gt; Taking care of your physical and mental health can help you feel more resilient and better able to cope with stress.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're still struggling with impostor syndrome, you might find it helpful to listen to podcasts or read articles by people who have experienced it and overcome it. Here are a few resources you might find useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://impostorsyndromepodcast.com/" rel="noopener noreferrer"&gt;The Impostor Syndrome Podcast&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://hbr.org/2019/09/feeling-like-an-impostor-heres-how-to-overcome-it" rel="noopener noreferrer"&gt;Feeling Like an Impostor? Here's How to Overcome It&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.psychologytoday.com/us/blog/the-science-success/201907/the-science-impostor-syndrome" rel="noopener noreferrer"&gt;The Science of Impostor Syndrome&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://syntax.fm/show/236/mental-health-and-dev-ft-dr-courtney-tolinski-depression-anxiety-imposter-syndrome-focus-motivation-burnout" rel="noopener noreferrer"&gt;Engineer specific - &lt;strong&gt;Mental Health and Dev ft Dr. Courtney Tolinski - Depression, Anxiety, Imposter Syndrome, Focus, Motivation, Burnout&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Heres the thing, I'm still struggling with this daily. I recently started a new job and feel out of my depth. But &lt;strong&gt;it's okay to be uncomfortable&lt;/strong&gt;. It's okay to feel like you don't know everything. In fact, it's a normal part of learning and growing. The important thing is to keep pushing yourself, to keep asking for help when you need it, and to be kind to yourself along the way.&lt;/p&gt;

&lt;p&gt;Remember, you're not an impostor. You're a talented, capable software professional, and you deserve to be where you are. Keep believing in yourself and you'll go far.&lt;/p&gt;

</description>
      <category>mentalhealth</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>What side-project are you currently working on?</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Fri, 16 Dec 2022 15:00:42 +0000</pubDate>
      <link>https://forem.com/charliesay/what-side-project-are-you-currently-working-on-2e4f</link>
      <guid>https://forem.com/charliesay/what-side-project-are-you-currently-working-on-2e4f</guid>
      <description>&lt;p&gt;Side projects, we are working on them here and there&lt;/p&gt;

&lt;p&gt;Im working on a resource for developers to be able to get inspiration as to what 'side-project' to do next to keep learning.&lt;/p&gt;

&lt;p&gt;So what is your &lt;strong&gt;current&lt;/strong&gt; side-project that you are working on?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>discuss</category>
      <category>programming</category>
    </item>
    <item>
      <title>Do you contribute to OSS (&amp; if so/not why?)</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Mon, 11 Jul 2022 12:56:11 +0000</pubDate>
      <link>https://forem.com/charliesay/do-you-contribute-to-oss-if-sonot-why-3p8o</link>
      <guid>https://forem.com/charliesay/do-you-contribute-to-oss-if-sonot-why-3p8o</guid>
      <description>&lt;p&gt;You use OSS projects everyday. VS Code, TensorFlow, React-Native, most NPM packages etc.&lt;/p&gt;

&lt;p&gt;And as it is in the name, is changeable (within reason obviously) by anyone. Report bugs, solve bugs, new features, suggest new features...&lt;/p&gt;

&lt;p&gt;All for the common good of improving software. &lt;/p&gt;

&lt;p&gt;I personally don't have as much time as I use to therefore do not contribute anymore, but I use to!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So do you contribute to OSS and if so/not why?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>discuss</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Oh no! All languages are being erased - you can only save one - what is it?</title>
      <dc:creator>Charlie Say</dc:creator>
      <pubDate>Tue, 05 Jul 2022 15:06:39 +0000</pubDate>
      <link>https://forem.com/charliesay/oh-no-all-languages-are-being-erased-you-can-only-save-one-what-is-it-3eo0</link>
      <guid>https://forem.com/charliesay/oh-no-all-languages-are-being-erased-you-can-only-save-one-what-is-it-3eo0</guid>
      <description>&lt;p&gt;And before you say “binary” and try to catch me out 👀&lt;/p&gt;

&lt;p&gt;I am talking top level languages, so binary and assembly still exist and yes this is trivial I know they do different things.... &lt;/p&gt;

&lt;p&gt;i'd pick JS for obvious reasons, cause I love it and hate it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
