<?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: AllStackDev 👨‍💻</title>
    <description>The latest articles on Forem by AllStackDev 👨‍💻 (@allstackdev).</description>
    <link>https://forem.com/allstackdev</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%2F178195%2F7305e71b-39a6-4d42-bbc5-88e386509d24.jpeg</url>
      <title>Forem: AllStackDev 👨‍💻</title>
      <link>https://forem.com/allstackdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/allstackdev"/>
    <language>en</language>
    <item>
      <title>Open to Hire</title>
      <dc:creator>AllStackDev 👨‍💻</dc:creator>
      <pubDate>Tue, 06 Aug 2024 16:36:40 +0000</pubDate>
      <link>https://forem.com/allstackdev/open-to-hire-36ep</link>
      <guid>https://forem.com/allstackdev/open-to-hire-36ep</guid>
      <description>&lt;p&gt;I am currently looking for job opportunities, if you can refer me, that would be great.&lt;/p&gt;

&lt;h2&gt;
  
  
  CHINEDU EKENE OKPALA
&lt;/h2&gt;

&lt;p&gt;Email: &lt;a href="mailto:allstackdev@gmail.com"&gt;allstackdev@gmail.com&lt;/a&gt; | Website: &lt;a href="https://allstackdev.netlify.app/" rel="noopener noreferrer"&gt;https://allstackdev.netlify.app/&lt;/a&gt; LinkedIn: &lt;a href="https://www.linkedin.com/in/chinedu-ekene-okpala/" rel="noopener noreferrer"&gt;chinedu-ekene-okpala&lt;/a&gt; | Stack Overflow: &lt;a href="https://stackoverflow.com/users/7895724/allstackdev" rel="noopener noreferrer"&gt;7895724/allstackdev&lt;/a&gt; GitHub: &lt;a href="https://github.com/allstackdev1" rel="noopener noreferrer"&gt;allstackdev1&lt;/a&gt; | Phone: +233237280716&lt;/p&gt;

&lt;h2&gt;
  
  
  PROFESSIONAL SUMMARY
&lt;/h2&gt;

&lt;p&gt;Results-oriented full-stack software developer with extensive experience in the JavaScript ecosystem. Proficient in developing and maintaining web applications using modern frameworks and tools. Strong technical expertise in React, Node.js, and various JavaScript frameworks, with intermediate proficiency in Python, Go and Rust. Adept at enhancing user experiences, optimizing application performance, and continuously learning new technologies such as machine learning, and large language models (LLM) with Python and Web3 Blockchain. Passionate about contributing to team success through collaboration and knowledge sharing. I'm language agnostic and willing to explore any other programming languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  LANGUAGES / SKILLS / TOOLS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Programming Languages&lt;/strong&gt;: JavaScript, TypeScript, Python, Go (intermediate), Rust (intermediate)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frameworks and Libraries&lt;/strong&gt;: Node.js, Express.js, Django, Flask, React.js, Nest.js, Next.js, Angular,
Astro, React Native (Android and iOS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Databases&lt;/strong&gt;: MongoDB, MySQL, PostgreSQL, Redis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt;: Mocha, Jest, Nock, React Testing Library, Storybook, Playwright, Cypress, Django.test&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps&lt;/strong&gt;: Netlify, Heroku, AWS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Analysis/Visualization&lt;/strong&gt;: MsExcel, Tableau&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other Skills/Tools&lt;/strong&gt;: Docker, Jenkins, Microservices, CI/CD, GitLab, GitHub, REST API, Agile
Methodologies, Technical Writing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  PROFESSIONAL EXPERIENCE
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech Lead, Buyer Product
&lt;/h3&gt;

&lt;p&gt;Complete Farmer LTD | Greater Accra, Ghana&lt;br&gt;
August 2023 - May 2024&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I was committed to achieving project milestones using Agile methodologies, ensuring on-time deliverables, and launching the new Buyer product.&lt;/li&gt;
&lt;li&gt;I provided leadership and guidance to team members, facilitating task delegation and fostering collaboration.&lt;/li&gt;
&lt;li&gt;Technologies used: Nodejs, React.js, Astro.js, Docker, Jira, GitHub, Jenkins, Mocha, Chai, SonarQube&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Senior Full Stack Software Developer
&lt;/h3&gt;

&lt;p&gt;Complete Farmer LTD | Greater Accra, Ghana&lt;br&gt;
January 2020 - August 2023&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I spearheaded the creation of a bootstrap codebase structure used within the organization, enhancing collaboration, productivity, and speed by 50%.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mentored junior/new colleagues, bringing them up to speed, and increasing team efficiency by 10%.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I conducted code reviews and code quality checks to maintain high standards.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Technologies used: Nodejs, Express.js, MongoDB, React.js, Next.js, React Native, Mocha, Chai, Docker&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Software Developer III
&lt;/h3&gt;

&lt;p&gt;ThisDot, Inc | USA (Remote)&lt;br&gt;
August 2022 - July 2023&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I developed in-house projects using various JavaScript frameworks, showcasing adaptability and technical expertise.&lt;/li&gt;
&lt;li&gt;Authored technical blog posts, sharing insights on emerging technologies and frameworks, enhancing company visibility and thought leadership.&lt;/li&gt;
&lt;li&gt;I collaborated with cross-functional teams to deliver client projects.&lt;/li&gt;
&lt;li&gt;Technologies used: React.js, Astro.js, React Native, Solid, Qwik, Vue, Svelte, React Testing Library,
Vitest, Netlify serverless functions,&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Full Stack Developer
&lt;/h3&gt;

&lt;p&gt;Complete Farmer LTD | Greater Accra, Ghana&lt;br&gt;
September 2018 - January 2020&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I maintained and optimized existing applications.&lt;/li&gt;
&lt;li&gt;Redesigned the frontend, and backend application and migrated db, while maintaining no loss of data,
increasing scalability and robust performance, driving an increase in user satisfaction.&lt;/li&gt;
&lt;li&gt;Technologies used: Handlebars, React.js, Redux, Redux-Saga, Express.js, MongoDB&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Frontend Developer Intern
&lt;/h3&gt;

&lt;p&gt;iKolilu | Greater Accra, Ghana&lt;br&gt;
March 2017 - July 2018&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I spearheaded the development and deployment of a new company website.&lt;/li&gt;
&lt;li&gt;I developed the parent portal interface, used by more than 1,000 parents/guardians from different
schools to monitor their wards' progress, increasing demand for the company's main product (SMS) by
50%.&lt;/li&gt;
&lt;li&gt;Technologies used: Angular 4, PHP 7, Ext JS, FTP&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  EDUCATION
&lt;/h2&gt;

&lt;p&gt;B.Sc Information Technology&lt;br&gt;
Sikkim Manipal University India November 2014 to September 2018&lt;/p&gt;

</description>
      <category>whoishiring</category>
      <category>typescript</category>
      <category>node</category>
      <category>react</category>
    </item>
    <item>
      <title>How I *Mistakenly* Learnt and Used React Hooks(useState and useReducer)</title>
      <dc:creator>AllStackDev 👨‍💻</dc:creator>
      <pubDate>Mon, 10 Jun 2019 16:49:34 +0000</pubDate>
      <link>https://forem.com/allstackdev/how-i-mistakenly-learn-and-used-react-hooks-usestate-and-usereducer-3m7b</link>
      <guid>https://forem.com/allstackdev/how-i-mistakenly-learn-and-used-react-hooks-usestate-and-usereducer-3m7b</guid>
      <description>&lt;p&gt;&lt;strong&gt;Here I will be showing how I got to make use of React Hooks (useState and useReducer), to reduce the size of my code, applying the react law of &lt;em&gt;reusing components&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I was trying to figure out a way to toggle password visibility for user preference in my recent project, this was to be in the signup and login forms.&lt;/p&gt;

&lt;p&gt;Before I kick off(football/Soccer lover here!!!), dependencies used:&lt;br&gt;
&lt;em&gt;react&lt;/em&gt; &lt;br&gt;
&lt;em&gt;react-dom&lt;/em&gt; &lt;br&gt;
&lt;em&gt;reactstrap&lt;/em&gt;&lt;br&gt;
&lt;em&gt;bootstrap&lt;/em&gt;&lt;br&gt;
&lt;em&gt;material-icons&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So my basic design thought was to assign the toggling effect to a state which will be responsible for changing the input type of the password field from password to text and vice versa, remember that in most signup forms we have two password input field (password and confirm password), which I have to keep their password toggling state independently, so now I have showPassword and showConfirmPassword as the state variables.&lt;/p&gt;

&lt;p&gt;Let us now focus on the form display,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_yfACHad--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/evs2247s80mqxu4us8v0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_yfACHad--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/evs2247s80mqxu4us8v0.png" alt="" width="486" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is how it look&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CCOP1wf_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/mo9acg0d74xbwef3509x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CCOP1wf_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/mo9acg0d74xbwef3509x.png" alt="" width="401" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I need to add a visual item which the user can click to toggle the password visibility state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3JU6z0Th--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/h5302zxwrnqctps93xfd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3JU6z0Th--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/h5302zxwrnqctps93xfd.png" alt="" width="448" height="44"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'll use two icon types (visibility and visibility_off), and I will be switching between them by adding and removing the bootstrap class &lt;strong&gt;d-none&lt;/strong&gt; when a user clicks on the icon using vanilla JavaScript &lt;em&gt;document.getElementById.classList&lt;/em&gt; add and remove functionality.&lt;br&gt;
I then create a single function which will handle the onClick event in all the icons(4, 2 for each password field), then assigned unique ids to the icons, which we will use to determine with part of the function to process by checking the &lt;em&gt;event.target.id&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ck-PAjeg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/rpj2ssgq36103ibvk6n2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ck-PAjeg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/rpj2ssgq36103ibvk6n2.png" alt="" width="626" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Current look of the form&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c3m9wvDW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/58lt9z5a2nu42m88jxeb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c3m9wvDW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/58lt9z5a2nu42m88jxeb.png" alt="" width="456" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TNqEwtv6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/qvxjokfszpwzpmi9bb7c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TNqEwtv6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/qvxjokfszpwzpmi9bb7c.png" alt="" width="480" height="96"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't worry, I have not forgotten the main reason for all this, i.e changing the input type of the password field from password to text and vice versa. For now our vanilla JavaScript code is doing just fine and it is changing our state, so we need to add ternary if-else to change the input type depending on what our showPassword and showConfirmPassword is, i.e either true or false.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CoRKx7nx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/r5gdrp8lz9761oib07l9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CoRKx7nx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/r5gdrp8lz9761oib07l9.png" alt="" width="296" height="24"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All done and my code is working perfect and as expected, but after the excitement of achieving this fit, I thought to myself and said, &lt;em&gt;This code is too lengthy and full of vanilla **ice cream&lt;/em&gt;**, is there a way I could take out the logic from the main class component to a functional stateful component and not make use of vanilla JS, hmm...&lt;/p&gt;

&lt;p&gt;A co-worker suggested react &lt;strong&gt;HOOK&lt;/strong&gt; &lt;em&gt;useState&lt;/em&gt;, then I read up some document on useState and watch a little video tutorial talking about when to use useState and useReducer, this gave me a better understanding of what useState and useReducer is. So how do I apply it to my previous logic?&lt;/p&gt;

&lt;p&gt;What I want to achieve now, is to reduce the size of my code and be able to reuse them independently(password or confirmPassword). So I set out to use useReducer hook, I have to create a higher order component of a password input field to achieve what I want.&lt;br&gt;
useReducer uses the actions and reducers approach of redux.&lt;/p&gt;

&lt;p&gt;initalState just like in redux;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fynmk6dW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/apvcxdh0yhqrkbrp9nwe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fynmk6dW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/apvcxdh0yhqrkbrp9nwe.png" alt="" width="253" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reducers;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2RbQBM4b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/io7rvoit90l76w93daro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2RbQBM4b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/io7rvoit90l76w93daro.png" alt="" width="392" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Current Form code and look&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o8Y-QcsT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/a21uwjdwlwhyp79vtefu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o8Y-QcsT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/a21uwjdwlwhyp79vtefu.png" alt="" width="461" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tCqyGqFX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/pqhokhmpb16wrc0q9id3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tCqyGqFX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/pqhokhmpb16wrc0q9id3.png" alt="" width="579" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code still works great and perfect, reducing the amount of repeating of logic, but I still feel unease with having to clear the initalState and reducer funtion, let me see how useState could solve this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A0vH3Orw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/n90au0wu2mu8o6uyqis2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A0vH3Orw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/n90au0wu2mu8o6uyqis2.png" alt="" width="513" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hTkwO6Yn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/nlv40rlxzpvlkr9jv8hz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hTkwO6Yn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/nlv40rlxzpvlkr9jv8hz.png" alt="" width="598" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My code still works and I do not have to repeat most of the code logic I did with the Vanilla JS and using redux like functionality(useReducer).&lt;/p&gt;

&lt;p&gt;Full code can be found: &lt;a href="https://codepen.io/mrceo63/pen/agovYN"&gt;https://codepen.io/mrceo63/pen/agovYN&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  React Hooks is &lt;strong&gt;cool&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;ps: This is my first ever article in my life, please be kind and thank you for reading&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
