<?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: Olumide Akinremi</title>
    <description>The latest articles on DEV Community by Olumide Akinremi (@akinmyde).</description>
    <link>https://dev.to/akinmyde</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%2F319191%2F7a993aa5-53a3-4558-b23e-e15a65968ecf.jpeg</url>
      <title>DEV Community: Olumide Akinremi</title>
      <link>https://dev.to/akinmyde</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akinmyde"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Sat, 01 Mar 2025 16:09:40 +0000</pubDate>
      <link>https://dev.to/akinmyde/-3k06</link>
      <guid>https://dev.to/akinmyde/-3k06</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/akinmyde" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F319191%2F7a993aa5-53a3-4558-b23e-e15a65968ecf.jpeg" alt="akinmyde"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/akinmyde/reading-email-data-with-node-js-bjf" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Reading email data with Node.Js&lt;/h2&gt;
      &lt;h3&gt;Olumide Akinremi ・ Jul 24 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#node&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#imap&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#email&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>node</category>
      <category>imap</category>
      <category>email</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Your Best is Not Enough: The Irony of Imposter Syndrome in the Tech World</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Wed, 03 Apr 2024 16:07:25 +0000</pubDate>
      <link>https://dev.to/akinmyde/your-best-is-not-enough-the-irony-of-imposter-syndrome-in-the-tech-world-5d03</link>
      <guid>https://dev.to/akinmyde/your-best-is-not-enough-the-irony-of-imposter-syndrome-in-the-tech-world-5d03</guid>
      <description>&lt;p&gt;In the fast-paced and ever-evolving realm of technology, individuals constantly push their boundaries to stay ahead of the curve. However, a silent adversary often lurks in the shadows, threatening to undermine the accomplishments of even the most talented and hardworking professionals: Imposter Syndrome. Despite the irony embedded in the title, the phrase "Your Best is Not Enough" encapsulates the internal struggle many individuals in the tech industry face as they grapple with feelings of inadequacy and self-doubt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding Imposter Syndrome:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imposter Syndrome is a psychological phenomenon where individuals doubt their accomplishments and fear being exposed as frauds despite evidence of their competence. In the tech industry, where innovation and expertise are highly valued, the pressure to excel can exacerbate these feelings. The constant evolution of technology and the need to adapt to new tools and methodologies can lead even the most seasoned professionals to question their abilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Irony of Perfection:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The pursuit of excellence in the tech world often comes with a relentless pursuit of perfection. However, this unattainable standard can inadvertently fuel Imposter Syndrome. The irony lies in the fact that those who strive for perfection are often the ones most haunted by the fear of not measuring up. The competitive nature of the industry can create an environment where individuals feel the need to be flawless, leading to a perpetual cycle of self-doubt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Learning and the Fear of Falling Behind:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the defining characteristics of the tech industry is its rapid pace of innovation. While staying current is essential, the fear of falling behind can contribute to Imposter Syndrome. Professionals may hesitate to acknowledge gaps in their knowledge or seek help, fearing that their lack of expertise will be exposed. This fear impedes collaboration and knowledge-sharing, hindering both personal and collective growth within the industry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Success and Attribution:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even in the face of undeniable success, individuals battling Imposter Syndrome struggle to internalize their accomplishments. Instead of attributing success to their skills and hard work, they may dismiss it as luck or external factors. This skewed perception of their achievements perpetuates the belief that they are not deserving of their success, further reinforcing feelings of fraudulence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overcoming Imposter Syndrome:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Addressing Imposter Syndrome requires a combination of self-awareness, support systems, and a shift in mindset. Creating a culture that emphasizes collaboration over competition and acknowledges the value of continuous learning can help alleviate the pressure that fuels self-doubt. Encouraging open conversations about insecurities and providing mentorship can empower individuals to navigate the challenges of the tech world with confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The irony of "Your Best is Not Enough" lies in the paradoxical nature of Imposter Syndrome, where high achievers question their worth despite their undeniable success. Recognizing and addressing these feelings is crucial for fostering a healthy and supportive environment in the tech industry. By embracing the imperfections inherent in the pursuit of excellence, professionals can overcome Imposter Syndrome and contribute to a culture of innovation, collaboration, and sustained growth.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Advocating for Yourself: Empowering Your Career</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Sun, 21 Jan 2024 21:48:03 +0000</pubDate>
      <link>https://dev.to/akinmyde/advocating-for-yourself-empowering-your-career-34j9</link>
      <guid>https://dev.to/akinmyde/advocating-for-yourself-empowering-your-career-34j9</guid>
      <description>&lt;p&gt;In the ever-evolving landscape of technology, software engineers hold a pivotal role in driving innovation and progress. Beyond just writing code, advocating for oneself in this field is crucial for career growth, recognition, and personal satisfaction. Whether you're a seasoned professional or just starting, understanding the importance of self-advocacy in software engineering is fundamental. All tech professionals must assert their value, expertise and aspirations. Here's how:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embrace Continuous Learning:&lt;/strong&gt;&lt;br&gt;
The tech world thrives on innovation and evolution. Continuous learning isn't just a choice; it's a necessity. Invest in expanding your skill set by staying updated with the latest technologies, tools, and methodologies. Engage in online courses, attend workshops, and participate in industry conferences. Demonstrating your commitment to learning showcases your adaptability and drive for excellence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Own Your Achievements:&lt;/strong&gt; &lt;br&gt;
Remember, collaboration is key in the dynamic realm of software engineering, but it's equally important to own your achievements. As the saying goes, 'In the symphony of collaboration, make sure your solo is heard.' Highlight your contributions to team projects, proudly showcase your skills, and boldly articulate your achievements during performance reviews. Maintaining a record of your successes fortifies your position in performance evaluations and stands as tangible evidence of the meaningful impact you bring to your organization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Effective Communication:&lt;/strong&gt;&lt;br&gt;
In the world of software engineering, being good at the technical stuff is crucial, but being able to talk about it in a way that makes sense to everyone is just as important. Whether you're explaining tricky ideas to your team, pitching concepts to higher-ups, or pushing for a different approach, it's vital to get your point across clearly. If you can express yourself well, people are more likely to trust what you say and get what you're trying to do. So, don't just focus on the code and the technical jargon - work on explaining it in a way that everyone can follow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Seek Opportunities for Growth:&lt;/strong&gt; &lt;br&gt;
Share your career goals and show that you want to grow in your job. Whether it's handling more tasks, leading a project, or trying out new technologies, telling your manager you're interested in these things shows that you're ambitious and ready to do more than just your current job. It's like saying, "I want to learn and do more, and I'm excited to help the team in new ways!"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network and Build Relationships:&lt;/strong&gt;&lt;br&gt;
Networking isn't just about going to events or handing out business cards at events; it's about making real connections with people, both in and out of your workplace. When you build relationships with your colleagues, mentors, and others in your field, you can get useful advice, learn more about your career, and even discover new opportunities. Joining meetups, being part of professional groups, and chatting in online forums are ways to make more friends and expand your network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Advocating for yourself is an ongoing process that involves a blend of technical proficiency, effective communication, and a proactive approach to career growth. By embracing continuous learning, owning your achievements, nurturing relationships, and confidently asserting your value, you pave the way for a fulfilling and successful career. &lt;/p&gt;

&lt;p&gt;Keep in mind that effective self-advocacy isn't solely about the content of your achievements but also about how you present them. Your ability to communicate and highlight your accomplishments matters just as much as the accomplishments themselves. It's possible for someone with fewer achievements to outpace your progress if they adeptly leverage the art of self-advocacy. Success in your career isn't just about what you've done; it's about how well you articulate and showcase your professional journey.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Implementing Wildcard Subdomain (Part 2) - Creating subdomain programmatically</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Mon, 20 Mar 2023 16:42:04 +0000</pubDate>
      <link>https://dev.to/akinmyde/implementing-wildcard-subdomain-part-2-creating-subdomain-programmatically-223i</link>
      <guid>https://dev.to/akinmyde/implementing-wildcard-subdomain-part-2-creating-subdomain-programmatically-223i</guid>
      <description>&lt;p&gt;Hello there! Let's talk about subdomains, those nifty little subdivisions of your website that make organization a breeze and can help with SEO. And if you're like me, you appreciate anything that makes life a little easier.&lt;/p&gt;

&lt;p&gt;But what if you want to create subdomains on the fly, like magic, when your users sign up? That's where things get a little more interesting, and fun! and not just any subdomains, we're talking about programmatically creating subdomains using Netlify APIs. Sounds fancy, right? Don't worry, it's not as complicated as it sounds.&lt;/p&gt;

&lt;p&gt;Just like in &lt;a href="https://dev.to/akinmyde/wildcard-subdomain-on-netlify-part-1-1op5"&gt;Part 1&lt;/a&gt; where we talked about doing it manually, we'll guide you through the steps to make it super easy.&lt;/p&gt;

&lt;p&gt;Step 1: Get yourself a Netlify Personal Access Token. Think of it as your secret password to access all the goodies Netlify has to offer or a golden ticket, but for web development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4w7alnsltei4gwp8oyiz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4w7alnsltei4gwp8oyiz.png" alt="personal-access-token-image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: You'll also need to get your Netlify Site ID. This is like your website's fingerprint, it's unique to your site and helps Netlify identify it. It is like the secret handshake to access all that good stuff we talked about.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fonsb6ek3jvoquldvwceq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fonsb6ek3jvoquldvwceq.png" alt="site-id"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: This is the fun part. To make the magic happen. You will need to make a couple of API calls to get everything up and running.&lt;/p&gt;

&lt;p&gt;Now, I know what you're thinking. "API calls? That sounds intimidating." But fear not, my friends! I am going to break it down and make it so simple, even your grandma could do it (assuming she's a tech-savvy grandma, of course).&lt;/p&gt;

&lt;p&gt;The first API call is to get your site information. Think of it like checking your website's pulse. This will return all the information about your site and the data we need to manipulate. It's called "domain_aliases".&lt;/p&gt;

&lt;p&gt;The second API is to patch the site information after you've manipulated/added the new domainAlias to the list of "domain_aliases". See it as a digital seamstress, but instead of fabric, you're working with code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const getAndUpdateDomainAlias = async newDomainAlias =&amp;gt; {
    const siteId = 'YOUR_NETLIFY_SITE_ID';
    const accessToken = 'YOUR_NETLIFY_ACCESS_TOEKN';
    const url = `https://api.netlify.com/api/v1/sites/${siteId}`;
    const headers = {
        Authorization: `Bearer ${accessToken}`,
        'Content-Type': 'application/json',
    };
    // Get Netlify Site to read existing domain aliases
    const siteInformation = await fetch(url, { method: 'GET', headers });
    const sites = await siteInformation.json();
    //   If Netlify Site does not have the domain alias we want to add
    const currentDomainAliases = sites.domain_aliases;
    if (!currentDomainAliases.includes(newDomainAlias)) {
        // Update the Netlify Site to include the domain alias we want to add
        const newDomainAlias = {
            domain_aliases: [...currentDomainAliases, domainAlias],
        };

        const body = JSON.stringify({ domain_aliases: newDomainAlias }) 
        await fetch(url, { method: 'PATCH',  headers, body });
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complete code can be found &lt;a href="https://github.com/Akinmyde/Netlify-Domain-Alias/blob/main/index.js" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My reflections on Andela's EPIC values</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Thu, 23 Feb 2023 14:36:52 +0000</pubDate>
      <link>https://dev.to/akinmyde/my-reflections-on-andelas-epic-values-33hp</link>
      <guid>https://dev.to/akinmyde/my-reflections-on-andelas-epic-values-33hp</guid>
      <description>&lt;p&gt;Hello everyone,&lt;br&gt;
Being an Andelan is wonderful and there are a lot of EPIC things to say about it and yes, the amazing EPIC tower.&lt;br&gt;
Andelans are known for their EPIC values which acronym means:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E - EXCELLENT.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;P - PASSION.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;I - INTEGRITY.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;C - COLLABORATION.&lt;/strong&gt;&lt;br&gt;
These values can be better emphasized rather than just the acronym.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E for EXCELLENT&lt;/strong&gt;&lt;br&gt;
At Andela, there is a belief that, if you strive for excellence, with the total commitment you will achieve it.&lt;br&gt;
During the onboarding ceremony, excellent was illustrated with a growth mindset session, been open-minded and believe in doing more as well as asking relevant questions.&lt;br&gt;
My experience so far at Andela helped me differentiate between excellent and perfection, with this simple quote "if you strive for perfection you will never find it".&lt;br&gt;
There is a gap between excellent and perfection, excellence is wanting to do and know more but looking for perfection will only lead to a closed mindset&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P for PASSION&lt;/strong&gt;&lt;br&gt;
At Andela, there is a belief that everyone has the ability to do more which has to be unlocked by being passionate and not giving up.&lt;br&gt;
Andela also helps young talent across Africa with the ALC programme meaning (Andela Learning Community). which has helped thousands of young Africans discover themselves. I am proud to say that I'm among the thousand.&lt;br&gt;
As an aspiring Andelan, I understand what it means to be passionate by striving to know more and not giving up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I for INTEGRITY&lt;/strong&gt;&lt;br&gt;
Andela believes in choosing the right people and trusting them to do the right things.&lt;br&gt;
Andela believes in saying the truth always, knowing and doing the right thing, taking responsibility and giving credits when it's required.&lt;br&gt;
I now understood what it means to cherish other people's hard work and also mine, to make sure I stay true to myself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C for COLLABORATION&lt;/strong&gt;&lt;br&gt;
At Andela, there is a saying that "our sum is greater than our part".&lt;br&gt;
Aspiring Andelans should be a good team player by treating everyone with respect, reaching out to people and leveraging on other people's knowledge.&lt;br&gt;
During the onboarding, we are encouraged to solve problems as a team and reaching out to a teammate or anyone available when having issues.&lt;/p&gt;

&lt;p&gt;it's also important to share your knowledge with people so that they can learn from you.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My experience in Bootcamp so far.</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Thu, 23 Feb 2023 14:24:28 +0000</pubDate>
      <link>https://dev.to/akinmyde/my-experience-in-bootcamp-so-far-4ooj</link>
      <guid>https://dev.to/akinmyde/my-experience-in-bootcamp-so-far-4ooj</guid>
      <description>&lt;p&gt;Bootcamps aren't easy, I wanted to give up on the fourth day because it wasn't as easy as I thought and believe me, it has been a challenging and a productive period plus a deliberate moment of learning, unlearning and relearning.&lt;/p&gt;

&lt;p&gt;The Bootcamp had helped me learn the professional way of working as a Developer, unlearning some irrelevant things that I know and relearning values to be part of me.&lt;/p&gt;

&lt;p&gt;I was been pushed to learn new stuff like Deploying on Heroku, Git / Version Control, Linting Code, TDD, Travis e.t.c.&lt;/p&gt;

&lt;p&gt;Also, I learned a lot from the Learning Facilitators Associate (LFA’s); they are very welcoming, always ready to help and give feedback in a manner that doesn’t demoralize me.&lt;/p&gt;

&lt;p&gt;During the course of the bootcamp, the Bootcamp has imbibed in me the following:&lt;/p&gt;

&lt;p&gt;•The growth mindset to work with the aim of achieving excellence&lt;/p&gt;

&lt;p&gt;• The desire to do better than the past with great passion&lt;/p&gt;

&lt;p&gt;•Knowing that I will be held accountable for my own actions thereby doing the right thing — Integrity&lt;/p&gt;

&lt;p&gt;•Collaborating with teammates and leveraging on other people’s knowledge to achieving a better result.&lt;/p&gt;

&lt;p&gt;I am excited that my hardwork pays and as a result, I was successful in the first week of this Bootcamp training and the second week of intensive coding training which made me an Andelan.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Andela Bootcamp challenges and how I adapted.</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Thu, 23 Feb 2023 14:12:12 +0000</pubDate>
      <link>https://dev.to/akinmyde/andela-bootcamp-challenges-and-how-i-adapted-3phj</link>
      <guid>https://dev.to/akinmyde/andela-bootcamp-challenges-and-how-i-adapted-3phj</guid>
      <description>&lt;p&gt;I acquired a lot of knowledge during the Andela bootcamp, learning more than I thought in such a short period of time.&lt;/p&gt;

&lt;p&gt;The Bootcamp was challenging, I have to learn new ways of doing things, the right standard to follow.&lt;/p&gt;

&lt;p&gt;During my first two days at the Boot camp, I struggled with learning new things like git workflow, PT board, writing test e.t.c. I went through the process of learning, unlearning and relearning, and the most encouraging part is that I’m investing more quality time adapting to these changes compared to other things.&lt;/p&gt;

&lt;p&gt;It was really difficult to adapt, but I helped myself by being open-minded, curiously wanting to learn more and asking questions.&lt;/p&gt;

&lt;p&gt;I appreciate the fact that I’m getting better day after day, and I also love the fact that everything I planned to achieve before I started the Boot camp is falling into place even before my projections.&lt;/p&gt;

&lt;p&gt;Learning new things may not come easy, however, I, Olumide Akinremi didn't relent on my laurels and encourage everyone else not to give up.&lt;/p&gt;

&lt;p&gt;Thank you.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Asynchronous Communication for remote teams</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Fri, 26 Aug 2022 11:10:00 +0000</pubDate>
      <link>https://dev.to/akinmyde/asynchronous-communication-for-remote-teams-24o5</link>
      <guid>https://dev.to/akinmyde/asynchronous-communication-for-remote-teams-24o5</guid>
      <description>&lt;p&gt;Communication is very important in every aspect of our life and there is a need to communicate effectively as techies.&lt;br&gt;
This article focuses on two major types of communication that can be applied at work. Synchronous and Asynchronous communication is part of our day-to-day life at work so it's important to know where to apply both of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Synchronous communication?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Synchronous communication is scheduled and they happen in real-time between two or more people on the phone, via video or in person. This type of communication technique requires both parties to be online at the same time.&lt;/p&gt;

&lt;p&gt;Synchronous communication allows us to get an immediate response when messages are sent. It is common in a physical work location where your managers can walk into your office to ask questions about what you are working on. Your subordinate can also work in to request real-time approval on what they are working on.&lt;/p&gt;

&lt;p&gt;Synchronous communication is useful and productive for interview sessions, project discussions, and team bonding. It can also be used during sprint planning and end-of-week meetings. Some examples of synchronous communication are video conferencing, instant messaging and phone conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Asynchronous communication?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Asynchronous communication doesn't happen in real-time and it increases productivity for remote workers. Think of asynchronous communication as when you send an email to your old-time friend or a broadcast email, you can't determine or decide when the person replies to your email. This gives the person the flexibility and time to think about your request.&lt;/p&gt;

&lt;p&gt;In asynchronous communication, interactions are done without real-time conversation. So the next time you need to get an update from your teammates, you don't have to pull everyone into a call or meeting. Instead, you can reach out to the responsible people via the communication channel and you patiently wait to get an update since people working in remote teams have the flexibility to choose their working hours.&lt;/p&gt;

&lt;p&gt;In my experience working in remote teams, I still see people communicating synchronously which is really time-wasting. Take the conversation in the screenshot below as an example.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg4oeatktf3mxf05zxx3a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg4oeatktf3mxf05zxx3a.png" alt="Communication between John and Frank"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the conversation between John and Frank, you should notice the time difference between the two parties and the fact that John didn't practice the core of asynchronous communication. John is in Los Angeles, USA (PDT) while Frank is in Lagos, Nigeria (GMT + 1).&lt;/p&gt;

&lt;p&gt;Based on the lack of asynchronous communication in their conversation, they might lose about 12hrs of quality work because Frank might be asleep most time John is online due to the fact that PDT is 8hrs behind GMT+1. Let's say John getting an update from Frank has a domino effect on the entire team it then means that the whole team will lose more than 12hrs of work due to poor communication.&lt;/p&gt;

&lt;p&gt;The way we communicate affects our time so it's important to communicate in a way that it's clear, specific and actionable. If John had sent "Hey, Frank. I would like to know if you are done designing the mockup for the user onboarding flow" the entire team would have saved a significant amount of time.&lt;/p&gt;

&lt;p&gt;Noticed that I removed "How are you doing?" From John's message but it's totally fine if you send a greeting while reaching out to your colleague but trust me if Franks isn't fine he would have reached out in the general channel to let the team know that he will be out of the office that day.&lt;br&gt;
Now that we have a picture of what asynchronous communication is, some of the tools that can be used in asynchronous communication are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Messaging software:&lt;/strong&gt; (Slack and Microsoft Team) is useful for employees to communicate and collaborate. They provide receipts to let you know when your teammates are online.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Video recording / Cloud Collaboration:&lt;/strong&gt; Let's say you have a team of 3 and you onboard 2 new people every year which can be done manually but when your team grow to the point that you have to onboard 5 - 10 people every month then it's really important to be lazy so that you don't the same thing multiple times by automating the process by recording and documenting the flow. You can try tools like Zoom and Loom for video recording and Notion, Google Drive and Office 360 for your documentation and collaboration tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Management tools:&lt;/strong&gt; When you have a distributed team having a project management tool is a way to track activities and get insights into what your team/teammates are working on. You can also see details about your team's pulse in some project management tools like Jira.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is Asynchronous communication really important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clear and Detailed communication:&lt;/strong&gt; Although asynchronous communication is slower, but you will get detailed and solid responses from your teammates because it gives people enough time to think about their responses and provide clear responses when they are ready. This eliminates a lot of back and forth in the team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transparency:&lt;/strong&gt; Messages are saved on the cloud and different people can react or leave their comments. Anyone can also reference the message anytime in the future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibility and Productivity:&lt;/strong&gt; It allows you to plan your time by splitting your activities into chunks. With this you can determine when to reply to emails, You can block out the time when you want to implement that cutting-edge feature or when you need to do some deep work without disturbance all of this help improves productivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The goal is to be productive and the quality of the communication in the organisation determines the productivity of the team. &lt;/p&gt;

&lt;p&gt;Both asynchronous and synchronous communications are great styles of communication and it's important to know which one works for your team. However, if you are working in a remote team then it's important to communicate asynchronously and to be responsive. In cases where there is a time overlap between you and your teammates, then you might be required to create about 4hrs overlaps where you are required to be online/available for meetings and other synchronous communication with your teammates.&lt;/p&gt;

</description>
      <category>communication</category>
      <category>remote</category>
    </item>
    <item>
      <title>Find your motivation</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Mon, 22 Aug 2022 10:31:28 +0000</pubDate>
      <link>https://dev.to/akinmyde/find-your-motivation-3n7h</link>
      <guid>https://dev.to/akinmyde/find-your-motivation-3n7h</guid>
      <description>&lt;p&gt;A lot of people believe that "money is motivation" and as long as money is involved, they will be motivated but not always. After reading this article, I think you will see what I mean.&lt;/p&gt;

&lt;p&gt;It is important to find what motivates you; this might change as you grow, move up the career ladder or when you are faced with some challenges in life like burnout or depression e.t.c.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Curiosity is motivation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you explore and satisfy your curiosity, your brain releases dopamine (as a reward) into your body which makes you very happy and sometimes it gives you goosebumps, and as long as you are happy, the reward increases which means that you will satisfy your curiosity again to give your brain what it wants (more satisfaction and feelings of happiness)&lt;/p&gt;

&lt;p&gt;We've all been here before, and it is obvious that when you are curious, you are unstoppable. You become obsessed with the object of your curiosity as it constantly preoccupies or intrudes on your mind.&lt;/p&gt;

&lt;p&gt;This is a good starting point for people between the ages of 14yrs and 25yrs who have just begun their careers. This is mostly because at this stage you have little or no distractions, you are more focused on things you can achieve and how you can achieve them. In this phase, you can lay your hands on different things, get your hands dirty and not get distracted because you are most likely dependent on people and no one depends on you for money and shelter.&lt;/p&gt;

&lt;p&gt;When I was studying Computer Science, I pursued my learning from a place of passion having little knowledge of how lucrative the tech industry is. I appeared to have no life because I was so interested in what I could accomplish with Computer Science. I explored various aspects of Computer Science like Networking, Web Design, and Programming. I was convinced about what I wanted to do with my life. My love for programming propelled me to purchase my first Computer for myself having gone months of reading and writing codes on paper while waiting for a promise of a Computer from my Parents which never materialized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Money is motivation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's funny that we are back here right? I am happy to announce to you that money is motivation. After all, 60% - 80% of our day-to-day activities are all about money. If you have a lot of responsibilities that require money then you can channel this energy to learning anything you want to learn.&lt;/p&gt;

&lt;p&gt;Being broke can really motivate you because if you need to "put food on your table" then you will have to develop a skill and ensure that the skill is sufficient to put food on your table. I know a lot of people that learn to write code because they were broke and needed to improve their earnings. If this works for you, feel free to allow this factor to propel you into more productivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Determination is motivation&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you really want something you never had, then you must be ready to do things that you have never done - "Thomas Jefferson"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Generally, when you put in your best effort coupled with the right mindset into a task, the chances of achieving that task increase astronomically. Don't misunderstand this by thinking that you will surely get everything right. Rather, understand that you can achieve whatever you determine to achieve.&lt;/p&gt;

&lt;p&gt;Most of my friends in tech didn't study Computer Science but they were determined to join the tech space and they got what they wanted. I have a friend who studied chemistry and he is currently working as a Frontend Engineer with a company in Europe just because he was determined to learn web development.&lt;/p&gt;

&lt;p&gt;Back then in Andela BootCamp, I have friends whose only and last option was learning software engineering, I mean it was all or nothing for them and with their determination, they got what they wanted without any computer science degree or prior programming experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friends are motivation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The type of friends you keep can add a lot of value to you so it is important to keep friends that your ideas and thought align. In tech, it is important to have friends that challenge you because the industry evolves really fast.&lt;/p&gt;

&lt;p&gt;If you spend a lot of time with someone, then there is a possibility that you start using some of their "trigger words". For example, if you have a friend that likes to say "actually", the probability of you using the words "actually" when you talk is really high. This is because the company we keep unconsciously affects us.&lt;/p&gt;

&lt;p&gt;So if you are in tech or plan to join the tech space, I will strongly advise that you have a lot of friends in tech that keep you abreast of trending technologies.&lt;/p&gt;

&lt;p&gt;When you have friends that trust you and believe in your skills and know that your ideas align with theirs then there is a possibility of them recommending you to join their current or previous company. Personally, I have gotten several jobs and side projects based on recommendations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Different things motivate different people so it is important to find what motivates you so that you can easily channel your energy towards the right thing.&lt;/p&gt;

</description>
      <category>motivation</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>Getting started with Nodejs/Express</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Fri, 19 Aug 2022 17:25:00 +0000</pubDate>
      <link>https://dev.to/akinmyde/getting-started-with-nodejsexpress-o8e</link>
      <guid>https://dev.to/akinmyde/getting-started-with-nodejsexpress-o8e</guid>
      <description>&lt;p&gt;NodeJS is an open-source tools that runs on a JavaScript Engine and can be used to executes Javascript code outside a web browser.&lt;/p&gt;

&lt;p&gt;Having worked with Nodejs, I can undoubtedly say that Nodejs is really an impressive tool and the community behind it is a massive one. Another interesting thing about NodeJS is that it is a backend cross platform Javascript runtime environment.&lt;/p&gt;

&lt;p&gt;To get started with Nodejs we will cover the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Setting up Node.js and NPM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Example Project (writing hello world program)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Installing a package&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;1. Introduction:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;To get started, this is what you need to know.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en/"&gt;_Nodejs&lt;/a&gt; is a JavaScript runtime built on Chrome’s V8 JavaScript engine._&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.npmjs.com/"&gt;NPM&lt;/a&gt; is the package manager for JavaScript and the world’s largest software registry which has over 350,000 packages.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Express.js is a Node.js web application server framework designed for building single-page, multi-page, and hybrid web applications.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Setting Up NodeJs:&lt;/strong&gt;&lt;br&gt;
NodeJS and NPM are two important tools you need to get started and luckily, you can get all in one box by downloading NodeJS. After downloading and installing it, run to code below to be sure that everything is properly installed&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm -v&lt;/code&gt; to know the version of npm you are running currently.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;node -v&lt;/code&gt; to know the version of node you are running currently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Example Project (writing hello world program)&lt;/strong&gt;&lt;br&gt;
Create a folder name node-hello-program on your desktop then open your terminal and run the code below and follow the prompt to generate the package.json file&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;run &lt;code&gt;npm install express&lt;/code&gt; to install express&lt;/p&gt;

&lt;p&gt;create a file called server.js and add the code below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const express = require ('express');

const app = express();

app.get('/', (req, res) =&amp;gt; {
    return res.send('hello world');
});

app.listen(4000, () =&amp;gt; {
    console.log('app listening on port 4000');
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;run &lt;code&gt;node server.js&lt;/code&gt; on your terminal to start the node server.&lt;/p&gt;

&lt;p&gt;open your browser to see the changes on &lt;code&gt;localhost:4000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Yay!&lt;/p&gt;

&lt;p&gt;We are done, kindly drop your feedbacks and also share with your friends.&lt;/p&gt;

&lt;p&gt;Thank you.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>node</category>
    </item>
    <item>
      <title>Implementing Wildcard Subdomain (Part 1)</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Sun, 08 Aug 2021 09:32:00 +0000</pubDate>
      <link>https://dev.to/akinmyde/wildcard-subdomain-on-netlify-part-1-1op5</link>
      <guid>https://dev.to/akinmyde/wildcard-subdomain-on-netlify-part-1-1op5</guid>
      <description>&lt;p&gt;When building a multi-tenant application like slack, most times, there is always a requirement for all tenants to have their subdomain, e.g olumide.slack.com.&lt;/p&gt;

&lt;p&gt;This article explains how to do that with zero cost on Netlify. Based on a Netlify &lt;a href="https://answers.netlify.com/t/wildcard-subdomains-redirects/469" rel="noopener noreferrer"&gt;support&lt;/a&gt; response, this feature is accessible on the Netlify pro plan, which cost about $19/month/user as of the time of writing this article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxoej2efw3ozvorim8sy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxoej2efw3ozvorim8sy.png" alt="Netlify Pricing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will show you an alternative approach to doing that without using a Pro account. Thereby; saving you about $230 per annum.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Get a domain, and use &lt;strong&gt;"let's encrypt"&lt;/strong&gt; for a wildcard SSL certificate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Point your DNS to your &lt;a href="https://docs.netlify.com/domains-https/netlify-dns/delegate-to-netlify/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt; app. it might take a while to propagate. You should see a tag with &lt;strong&gt;“Netlify DNS”&lt;/strong&gt; on that domain when done.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7rjxb280bddmbojyld4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7rjxb280bddmbojyld4s.png" alt="DNS"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new CNAME wildcard DNS record from the Netlify &lt;strong&gt;“DNS Panel”&lt;/strong&gt; if none is created automatically after step 2.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flid8nvu8ap7rb297vhdz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flid8nvu8ap7rb297vhdz.png" alt="New-CNAME"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From your netlify dashboard, go to domain management, and then select &lt;strong&gt;“Add domain alias”&lt;/strong&gt; to manually add a new domain alias. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3beaapk03ndv845s6vx4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3beaapk03ndv845s6vx4.png" alt="Alias"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You should be able to access your new subdomain immediately it’s saved on Netlify.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Watch out for Part2 if you are interested in learning how to create subdomains on the fly, without doing it manually. &lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Reading email data with Node.Js</title>
      <dc:creator>Olumide Akinremi</dc:creator>
      <pubDate>Sat, 24 Jul 2021 13:47:53 +0000</pubDate>
      <link>https://dev.to/akinmyde/reading-email-data-with-node-js-bjf</link>
      <guid>https://dev.to/akinmyde/reading-email-data-with-node-js-bjf</guid>
      <description>&lt;p&gt;Have you ever thought of reading the data of your emails and making decisions like marking it as read or do whatever you choose? Perhaps you are working on a project that requires you to read users emails and then save the data to your database.&lt;/p&gt;

&lt;p&gt;Enough of the talking, let's get to work……&lt;/p&gt;

&lt;p&gt;First, open a connection to the email server using a protocol (SMTP, IMAP, POP) to read email(s) from the email service. The email service can be Gmail, yahoo, outlook. e.t.c.&lt;/p&gt;

&lt;p&gt;This tutorial uses Imap to read emails and will be using two packages to get the magic started.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;imap:&lt;/strong&gt; this helps us connect to the email server and retrieve emails as a stream&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;mailparser:&lt;/strong&gt; we are going to use this to parse the stream data into a readable format.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first step is to run the following command to set up a project and install the necessary packages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir imap-client
npm init -y 
touch index.js
yarn add imap mailparser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Secondly, we need to add our email credentials to our index.js file.&lt;br&gt;
&lt;/p&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="nx"&gt;Imap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;imap&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;simpleParser&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mailparser&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;imapConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;youremail@gmail.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;secret&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;imap.gmail.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;993&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tls&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="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we write a script in the index.js file to read the email and then parse it to get the sender, subject and body.&lt;br&gt;
&lt;/p&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="nx"&gt;getEmails&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="k"&gt;try&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;imap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Imap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;imapConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ready&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openBox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;INBOX&lt;/span&gt;&lt;span class="dl"&gt;'&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="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;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UNSEEN&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SINCE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()]],&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;results&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="nx"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;bodies&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="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;msg&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;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;stream&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;simpleParser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stream&lt;/span&gt;&lt;span class="p"&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;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parsed&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="c1"&gt;// const {from, subject, textAsHtml, text} = parsed;&lt;/span&gt;
                &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="cm"&gt;/* Make API call to save the data
                   Save the retrieved data into a database.
                   E.t.c
                */&lt;/span&gt;
              &lt;span class="p"&gt;});&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;
            &lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;attributes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;attrs&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;uid&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
              &lt;span class="nx"&gt;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addFlags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s1"&gt;Seen&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Mark the email as read after reading it&lt;/span&gt;
                &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Marked as read!&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="p"&gt;});&lt;/span&gt;
          &lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ex&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="p"&gt;});&lt;/span&gt;
          &lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;end&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Done fetching all messages!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="nx"&gt;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;end&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="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;end&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Connection ended&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="nx"&gt;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;connect&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;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;an error occurred&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="nx"&gt;getEmails&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lastly, run and don't forget to turn of "less secure app" for gmail&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Let's do a bit of explanation.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UNSEEN&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SINCE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()]],&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;results&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above function goes through your mailbox and gets all the unseen/unread email for today. You have the liberty of changing the date filter to whatever date you want. Also, you can change the ‘SINCE’ attribute to ‘BEFORE’, ‘ON’. e.t.c.&lt;/p&gt;

&lt;p&gt;You can change the ‘UNSEEN’ attribute to something like ‘ALL’, ‘NEW’. e.t.c.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;simpleParser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stream&lt;/span&gt;&lt;span class="p"&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;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parsed&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The simpleParser function returns a parsed data which contains details of the received email like (from, subject, textAsHtml, text) e.t.c.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;imap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addFlags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s1"&gt;Seen&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also decide to add a flag to the read email like marking it as seen, read.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thats's All!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The entire course code can be viewed &lt;a href="https://github.com/Akinmyde/email-reader"&gt;here&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;References&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/imap"&gt;https://www.npmjs.com/package/imap&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/mailparser"&gt;https://www.npmjs.com/package/mailparser&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>imap</category>
      <category>email</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
