<?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: Rita Correia</title>
    <description>The latest articles on DEV Community by Rita Correia (@ritaxcorreia).</description>
    <link>https://dev.to/ritaxcorreia</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%2F407623%2Fc2f3e3d1-d1d8-4c68-8fd6-58275a106900.jpg</url>
      <title>DEV Community: Rita Correia</title>
      <link>https://dev.to/ritaxcorreia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ritaxcorreia"/>
    <language>en</language>
    <item>
      <title>How I Landed My First Tech Role: A Practical Guide</title>
      <dc:creator>Rita Correia</dc:creator>
      <pubDate>Wed, 17 Feb 2021 15:09:38 +0000</pubDate>
      <link>https://dev.to/ritaxcorreia/how-i-landed-my-first-tech-role-a-practical-guide-3f32</link>
      <guid>https://dev.to/ritaxcorreia/how-i-landed-my-first-tech-role-a-practical-guide-3f32</guid>
      <description>&lt;p&gt;As per my last post, I have recently landed my first role in tech (!) and since then I’ve had a few people asking me for tips and advice on how to make that happen too. So I thought of writing a blogpost to share my learnings, hoping it helps you in your job search. &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Find your stack
&lt;/h2&gt;

&lt;p&gt;Although this is not directly tied to getting a role, it’s important to understand where your strengths lie before thinking about applying for jobs. In my case, I always knew I leaned more towards frontend engineering rather than backend.&lt;br&gt;
I carefully picked the tech stack I was going to specialise in and invested all my time learning certain languages and frameworks. Certainly there are people who disagree with me, but when you know exactly what you want for your career, it’s easier to set a clear, strategic path. Ultimately, do what feels right for you.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. The job search
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; is my preferred job search tool. For the past 11 years all my jobs have come through LinkedIn, whether it’s directly applying to companies or getting leads from recruiters.&lt;br&gt;
You can set up job alerts based on your desired location and specific keywords, and get daily or weekly email alerts so you can apply straight away. Bear in mind this might not apply to other countries, where the use of LinkedIn isn’t common practice. In that case, try to find what’s the number one job board for the tech industry where you live.&lt;/p&gt;

&lt;p&gt;It’s also handy to keep a spreadsheet with the status of your job applications. Notion have a really good Job Applications template, if you’re looking into getting more organised.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. GitHub and personal portfolio
&lt;/h2&gt;

&lt;p&gt;You’ve likely been building your own projects to put into practice your coding skills. Make sure to have your code on &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; on public repositories. Your prospective employer can take a look at your code, what languages and frameworks you use and see how well structured your code is.&lt;/p&gt;

&lt;p&gt;When applying to jobs, it’s very important to have your own personal portfolio on top of your GitHub repos. See it as your own shopfront, showcasing the skills you have with a splash of your own personality. Choose a design style that reflects your character stands out. Ultimately, as well as featuring a collection of your best projects, your personal portfolio should be a reflection of you as an individual. This ties with my next point…&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Tell your story
&lt;/h2&gt;

&lt;p&gt; As well as technical skills, a company looks for culture fit. You’re a unique human being with an incredible life story. At the end of the day, we work with and for other people with personal interests and quirky facts. It’s what makes us &lt;em&gt;us&lt;/em&gt;. People buy into people, so make sure to craft your personal pitch. Sell it. Think of what makes you unique and how can that help your prospective company.&lt;br&gt;
My pal &lt;a href="https://twitter.com/AnnaJMcDougall" rel="noopener noreferrer"&gt;Anna&lt;/a&gt; recently put out this great video on how to craft your story:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/nV6rXd_vtNY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Leverage your past work experience 
&lt;/h2&gt;

&lt;p&gt;This might not apply to everyone, but if you’ve held other jobs or come from a totally different industry and have a few years of experience under your belt, it’s smart to leverage the skills you’ve harnessed along the way.&lt;br&gt;
We’re multidisciplinary beings and there are a lot of transferrable skills. Have you led meetings? Do you have great people skills? Highlight your achievements to make you stand out.&lt;/p&gt;
&lt;h2&gt;
  
  
  6.  Interviewing as a software engineer 
&lt;/h2&gt;

&lt;p&gt;The interviewing process for a software engineering role is regarded as extremely difficult and it takes practice. The process can range from a take-home project with a designated tech stack, timed or non-timed kata-style challenges and technical interviews. I personally like the take-home project better because you can show off your skills and creativity without the pressure of a timed challenge. &lt;br&gt;
It’s likely that you’ll have a few interviews before landing your role. Learn from each one of them. See them as an opportunity to improve for the next one.&lt;br&gt;
Interviewing is definitely a skill that takes practice, and it can become emotionally overwhelming. Be kind to yourself, and remember that that "Yes" will come soon - it's only a matter of time.&lt;/p&gt;



&lt;p&gt;Good luck on your job search! I got my fingers crossed for you 🤞&lt;/p&gt;



&lt;p&gt;If you're interested in reading a more personal post sharing my journey, you can find it here:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/ritaxcorreia" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F407623%2Fc2f3e3d1-d1d8-4c68-8fd6-58275a106900.jpg" alt="ritaxcorreia"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/ritaxcorreia/changing-careers-into-tech-why-perseverance-and-mindset-matters-3g6j" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Changing Careers Into Tech: Why Perseverance and Mindset Matter&lt;/h2&gt;
      &lt;h3&gt;Rita Correia ・ Feb 12 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#womenintech&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devjournal&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>beginners</category>
      <category>career</category>
      <category>devjournal</category>
      <category>womenintech</category>
    </item>
    <item>
      <title>Changing Careers Into Tech: Why Perseverance and Mindset Matter</title>
      <dc:creator>Rita Correia</dc:creator>
      <pubDate>Fri, 12 Feb 2021 16:39:36 +0000</pubDate>
      <link>https://dev.to/ritaxcorreia/changing-careers-into-tech-why-perseverance-and-mindset-matters-3g6j</link>
      <guid>https://dev.to/ritaxcorreia/changing-careers-into-tech-why-perseverance-and-mindset-matters-3g6j</guid>
      <description>&lt;p&gt;2020 was the year of &lt;em&gt;change&lt;/em&gt; for all of us. We had to adapt to a new reality, where draconian words like “lockdown” and “pandemic” became the new normal. It was also the year I decided to turned my life around and change careers…  &lt;/p&gt;

&lt;p&gt;What in Summer 2020 seemed to be a huge mountain to climb, it became a reality in early February 2021 and I still have to pinch myself that I actually pulled this off, and &lt;strong&gt;landed my first role and a Frontend Engineer&lt;/strong&gt;! 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  It's true what they say, it ain't easy
&lt;/h2&gt;

&lt;p&gt;I must say that changing careers in your early 30’s with a young child in tow sure is challenging, although having a lot of self-discipline and focus definitely helped keeping me in the right track.&lt;/p&gt;

&lt;p&gt;If you’re on the same path and pursuing a career in tech, please don’t give up! Stepping out of our comfort zone and trying something new requires a level of mental strength that we might not be used to anymore, especially as adults.&lt;br&gt;
The uncertainty and self-doubt can be hard to manage at times, and in these moments a new mindset must come into play: the &lt;strong&gt;growth mindset&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  My mindset had to change
&lt;/h2&gt;

&lt;p&gt;Whether I liked or not, I grew up both being moulded by or fighting against what the people around me thought would be the best for me. Good intentions, of course. But it was always implicit that because I wasn’t getting straight As in Maths, pursuing studies or a career in STEM wouldn’t be the best option for me. Unfortunately, lots of girls and young women go through these exact same feelings of inadequacy, having invisible barriers put up in front of them.&lt;br&gt;
I developed my personality under the assumption I wasn’t good enough or smart enough, and with that came a fixed mindset that lasted throughout my early adulthood. Although I always considered myself hardworking and goal-driven, this mindset eventually led me to follow the path of least resistance. I always tended to dedicate time to things I was comfortable with, where it was easy to see what was on the other side of the tunnel.&lt;/p&gt;

&lt;p&gt;Software engineering wasn’t even an option for me while growing up in countryside Portugal, especially as a young female. For some time I wanted to be a journalist while my family tried hard to convince me I should study Law. I wasn't having it. I enjoyed being creative and ended up studying New Communication Technologies in University, which thankfully gave me a good mix of user-centric design, coding and computer science fundamentals. I learnt HTML, CSS, ActionScript&lt;br&gt;
(you know Flash was all the rage in 2005) and some PHP (which I now remember absolutely nothing about), with some 3D modeling and video in the mix.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Perseverance is your most powerful weapon when it comes to learning new skills.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I did finish my Bachelor's Degree but I didn’t even consider pursuing a technical role because &lt;em&gt;again&lt;/em&gt; I didn’t think I was smart enough, good enough or that i could possibly succeed in the tech world. My Uni experience definitely felt like a "boys club", where the men were into programming and I once again leaned towards the creative aspects of my degree, finding comfort hanging out with other like-minded females, who highly likely felt a bit lost like me.&lt;/p&gt;
&lt;h2&gt;
  
  
  A career path doesn't have to be linear
&lt;/h2&gt;

&lt;p&gt;Being professionally stagnated to a point of having no real sense of direction was consuming me. With age and increasing dissatisfaction in regards to my choice of career, I eventually stopped caring about what people expected of me.&lt;br&gt;
I stopped believing in the notion that you are born with only one talent, and that you are expected to stay in what will likely be a fifty-year work-life.&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;We are multidisciplinary beings with a plethora of interests and capabilities and we can find ways to channel them, if we're audacious enough to step outside our own box. &lt;/p&gt;

&lt;p&gt;Being a mother, I also wanted to set a good example for my daughter, hoping to become someone she can look up to as she grows.&lt;/p&gt;
&lt;h2&gt;
  
  
  Persevere and believe in yourself
&lt;/h2&gt;

&lt;p&gt;You can be anything you want to be, if you work hard enough and keep persevering.&lt;/p&gt;

&lt;p&gt;Our talents can be developed through hard work, good strategies and discipline. People with a growth mindset tend to achieve more than those who believe their talents are innate gifts, and because of this they will put more energy into learning.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For the first time, I stuck with something I was inherently both fascinated and scared by.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Countless times I considered giving up and taking a U-turn, but I am glad I persevered and kept at it. If changing careers into tech is something you're currently attempting, &lt;strong&gt;DO NOT GIVE UP!&lt;/strong&gt;&lt;br&gt;
Sharing goals with close family and friends will help massively as they will likely be rooting for you, while making you accountable.&lt;/p&gt;

&lt;p&gt;It was also extremely important having some badass role models and an incredible sense of support from the &lt;a href="https://twitter.com/" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; community, where I could share my journey with other folks like me.&lt;br&gt;
There are great initiatives to help you stick to your goals such as #100DaysOfCode, #Javascript30, #7Days7Projects or even #30Days30Projects. &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%2Fi%2Fb72e0dijbavzhndt12xs.jpg" 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%2Fi%2Fb72e0dijbavzhndt12xs.jpg" alt="if-we-persevere"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;I have also shared some tips and advice based on my experience in landing my first tech role on this article below:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/ritaxcorreia" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F407623%2Fc2f3e3d1-d1d8-4c68-8fd6-58275a106900.jpg" alt="ritaxcorreia"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/ritaxcorreia/how-i-landed-my-first-tech-role-a-practical-guide-3f32" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How I Landed My First Tech Role: A Practical Guide&lt;/h2&gt;
      &lt;h3&gt;Rita Correia ・ Feb 17 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devjournal&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#womenintech&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>career</category>
      <category>beginners</category>
      <category>womenintech</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>5 CSS Tricks I Used This Week</title>
      <dc:creator>Rita Correia</dc:creator>
      <pubDate>Thu, 04 Feb 2021 19:15:25 +0000</pubDate>
      <link>https://dev.to/ritaxcorreia/5-css-tricks-i-used-this-week-1m7d</link>
      <guid>https://dev.to/ritaxcorreia/5-css-tricks-i-used-this-week-1m7d</guid>
      <description>&lt;p&gt;Mastering CSS has a lot to do with understanding its capabilities and getting familiar with the range of properties available.&lt;br&gt;
While working on a couple of projects this past week, I looked up a few and did a little round-up of 5 helpful CSS tricks I used this week:&lt;/p&gt;
&lt;h2&gt;
  
  
  Selecting specific children
&lt;/h2&gt;

&lt;p&gt;This is an interesting trick, that can be adapted depending on how many or which exact elements you want to target.&lt;/p&gt;

&lt;p&gt;Imagine you have a list of items and you only want to select all but the first 3 children. You would use Example 1, with &lt;code&gt;n + 4&lt;/code&gt;, which means it will only start at the 4th item.&lt;/p&gt;

&lt;p&gt;To select a specific item, you can simply target the specific &lt;code&gt;nth-child&lt;/code&gt;. So if you want to select the 2nd list item, you'd use Example 2.&lt;/p&gt;

&lt;p&gt;If you want to select all but the first, you can simply use Example 3, with the &lt;code&gt;:not(:first-child)&lt;/code&gt; selector.&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%2Fi%2Fazlbiganncsfao4yfrth.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%2Fi%2Fazlbiganncsfao4yfrth.png" alt="carbon (1)"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Touch-action property  
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;touch-action&lt;/code&gt; property is super helpful when developing for mobile devices as it gives you control over the effect of touchscreen interactions with an element. This can be compared to the &lt;code&gt;pointer-events&lt;/code&gt; property used to control mouse interactions.  There's quite a few values that you can use. You can read more about them on &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action" rel="noopener noreferrer"&gt;MDN&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;auto:&lt;/strong&gt; Allows the browser to handle all pan and zoom interactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;manipulation:&lt;/strong&gt; Enables pinch and zoom interactions, but disables others you might find on some devices, like double-tap to zoom. It is shorthand for the combination of pan-x pan-y pinch-zoom.&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%2Fi%2Fuhz947z4arbzv55ky4ti.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%2Fi%2Fuhz947z4arbzv55ky4ti.png" alt="carbon (3)"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Accessibility when using Emojis
&lt;/h2&gt;

&lt;p&gt;It’s incredible how emojis are now so engrained in our digital communication. However, when content is accessed via a screen reader, some systems may not notice this content is there.  &lt;/p&gt;

&lt;p&gt;The best practice in this case is to wrap the emoji in a &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;, giving it the &lt;code&gt;role="img"&lt;/code&gt;, and providing a useful description in &lt;code&gt;aria-label&lt;/code&gt;. The screenreader will treat the emoji as an image in the accessibility tree with an accessible name for the end user.&lt;/p&gt;

&lt;p&gt;Thankfully, most modern screen readers will read the emoji's default description, although these are not consistent across systems. To safeguard consistency, it's wiser to provide this in the &lt;code&gt;aria-label&lt;/code&gt;. This is important when wanting to convey emotional value, for 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%2Fi%2Fv4bximrd4w7icao55lv1.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%2Fi%2Fv4bximrd4w7icao55lv1.png" alt="carbon"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How to disable horizontal scroll on mobile
&lt;/h2&gt;

&lt;p&gt;An oldie, but goodie. You know that pesky little horizontal scroll that keeps on showing when you're developing your responsive website? Ugh!&lt;br&gt;
Let's get rid of it, shall we? BYE FELICIA.&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%2Fi%2Fy1njxzlxvsjnql281xfv.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%2Fi%2Fy1njxzlxvsjnql281xfv.png" alt="disablescroll"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Wrapping text around shapes with shape-outside
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;shape-outside&lt;/code&gt; property controls how the content wraps around a floated element’s bounding-box, meaning we can reflow text over a shape such as a circle, ellipse or a polygon.&lt;/p&gt;

&lt;p&gt;The caveat is that this property only works on floated elements for the time being, as per the CodePen example below. This will likely get updated in the near future.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/ritacorreia/embed/yLVNZLN?height=600&amp;amp;default-tab=js,result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>css</category>
      <category>todayilearned</category>
      <category>webdev</category>
      <category>html</category>
    </item>
    <item>
      <title>Web Accessibility: Improvements on the White House Website</title>
      <dc:creator>Rita Correia</dc:creator>
      <pubDate>Thu, 21 Jan 2021 19:00:12 +0000</pubDate>
      <link>https://dev.to/ritaxcorreia/web-accessibility-improvements-on-the-white-house-website-5bgk</link>
      <guid>https://dev.to/ritaxcorreia/web-accessibility-improvements-on-the-white-house-website-5bgk</guid>
      <description>&lt;p&gt;It’s a new day for the United States of America! On Day 1 of the new presidency, an updated &lt;a href="https://www.whitehouse.gov/" rel="noopener noreferrer"&gt;White House website&lt;/a&gt; was released with a lot of thought put into &lt;a href="https://www.w3.org/WAI/fundamentals/accessibility-intro/" rel="noopener noreferrer"&gt;Web Accessibility&lt;/a&gt;. It’s clear that they want to ensure functionality and all content is fully accessible to all its users, regardless of their hearing, movement, sight, and cognitive abilities, as well as cultural heritage. &lt;/p&gt;

&lt;p&gt;Designing in a more inclusive way should be at the forefront of priorities in the world of UX and product design. Ensuring accessibility guarantees that your content is seen by EVERYONE, and brings a sense of humanness to tech. &lt;br&gt;
Thinking of all your users and their needs when shipping a product  or website creates an impactful experience that is meaningful in ways that the majority of us (thankfully) won’t realise.  &lt;/p&gt;

&lt;p&gt;Let’s go through these new accessibility improvements.&lt;br&gt;
 &lt;/p&gt;
&lt;h1&gt;
  
  
  Contrast theme switcher
&lt;/h1&gt;

&lt;p&gt;A snazzy new light / dark mode theme switcher was added, giving the users the choice of opting between a light or a dark theme.&lt;br&gt;
It is known that bright, white backgrounds on a screen increases eye strain, especially during lengthy periods of time. “Long-term reading in light mode,” according to this &lt;a href="https://www.nngroup.com/articles/dark-mode/" rel="noopener noreferrer"&gt;Nielsen Norman comparison of dark mode and light mode&lt;/a&gt;, “may be associated with myopia.”&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/RiDkhmwaDQw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Larger font size toggle
&lt;/h1&gt;

&lt;p&gt;Some people need larger text in order to be able to read and perceive letter shapes. Increasing font size is a common way to tackle this, ensuring there is no loss of content or functionality. &lt;br&gt;
It’s important to give users an option though, as some people with tunnel vision and the majority of users with generally good visual acuity may prefer smaller letters in order to be able to see more words at a time.  &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Uuw8EH__6sQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Mobile version
&lt;/h1&gt;

&lt;p&gt;The mobile version also shows some thought as the menu is easily accessible by being positioned in the bottom right corner.&lt;br&gt;
It’s regarded that 90% of people are right-handed, with the remaining 10% being either left-handed or ambidextrous. This provides easier access to the menu, as you can easily reach it with your stronger thumb.&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%2Fraw.githubusercontent.com%2Fritaxcorreia%2Fimages%2Fmaster%2Fwh_mobile.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%2Fraw.githubusercontent.com%2Fritaxcorreia%2Fimages%2Fmaster%2Fwh_mobile.png" alt="Mobile version"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;/p&gt;

&lt;h1&gt;
  
  
  Spanish version
&lt;/h1&gt;

&lt;p&gt; The US is home to 41m native Spanish speakers, according to census data - which results in 13% of its population. There are nearly 12 million bilingual Spanish speakers, making the US the second largest Spanish-speaking country in the world.  &lt;br&gt;
Back in 2017, Spanish was removed as a language translation on the White House website. There was a disclaimer stating the feature would be back soon, although that ended up being 4-year long wait! A Spanish version is now available, promoting inclusivity regardless of cultural background.&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%2Fraw.githubusercontent.com%2Fritaxcorreia%2Fimages%2Fmaster%2Fwh_spanish.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%2Fraw.githubusercontent.com%2Fritaxcorreia%2Fimages%2Fmaster%2Fwh_spanish.png" alt="Spanish version"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Accessibility Statement and eagerness to improve
&lt;/h1&gt;

&lt;p&gt;A new accessibility statement was added stating that there is real commitment to make the White House website as accessible as possible to all Americans. &lt;em&gt;“Our ongoing accessibility effort works towards conforming to the Web Content Accessibility Guidelines (WCAG) version 2.1, level AA criteria.”&lt;/em&gt;, they state. &lt;/p&gt;

&lt;p&gt;What also stands out is the eagerness to improve. Having an open channel of communication with your actual users asking for feedback on accessibility shows a commitment to them. Quite a few options are offered as well, including for hearing impairment scenarios, which is great to see.&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%2Fraw.githubusercontent.com%2Fritaxcorreia%2Fimages%2Fmaster%2FScreenshot%25202021-01-21%2520at%252018.37.51.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%2Fraw.githubusercontent.com%2Fritaxcorreia%2Fimages%2Fmaster%2FScreenshot%25202021-01-21%2520at%252018.37.51.png" alt="Accessibility statement"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  There are probably more accessibility features worth pointing out, though these are the ones I could identify at a glance.
&lt;/h4&gt;

&lt;p&gt;Do mention in the comments if you manage to find more, especially for visually impaired users. &lt;/p&gt;




&lt;p&gt;&lt;em&gt; Disclaimer: By all means, this is not a political post. Only a case study on Whitehouse.gov’s new Web Accessibility stance.&lt;/em&gt; &lt;/p&gt;

</description>
      <category>a11y</category>
      <category>discuss</category>
      <category>showdev</category>
      <category>ux</category>
    </item>
    <item>
      <title>Understanding Rendering in Next.js</title>
      <dc:creator>Rita Correia</dc:creator>
      <pubDate>Tue, 19 Jan 2021 22:32:49 +0000</pubDate>
      <link>https://dev.to/ritaxcorreia/understanding-rendering-in-next-js-1m1b</link>
      <guid>https://dev.to/ritaxcorreia/understanding-rendering-in-next-js-1m1b</guid>
      <description>&lt;p&gt;Next.js is a React framework for developing single page Javascript applications. There are quite a lot of  benefits when it comes to choosing this framework, one of the highlights being how &lt;strong&gt;incredibly performant&lt;/strong&gt; Next.js is. This is due to its Server Side Rendering (SSR).&lt;/p&gt;

&lt;h1&gt;
  
  
  Understanding pre-rendering in Next.js
&lt;/h1&gt;

&lt;p&gt;React uses client-side rendering by default, and the user is required to have JavaScript enabled on their browser.&lt;/p&gt;

&lt;p&gt;With Next.js, HTML is generated for each page in advance, instead of having it all done by client-side JavaScript. &lt;em&gt;I must admit I initially found this odd not seeing any HTML files in my codebase!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This results in better performance and a more indexable and crawlable website, essential for Search Engine Optimisation (SEO).  It pre-renders the application into static HTML, allowing the user to see the UI without having to run JavaScript. &lt;/p&gt;

&lt;p&gt;It also only loads the Javascript and CSS files that are needed for that specific page, which is called &lt;strong&gt;automatic code splitting&lt;/strong&gt;. This gives the users a much faster experience with a nearly instant page load. Because there is less for the user’s browser to download, it increases performance.&lt;/p&gt;

&lt;p&gt;As soon as a page is loaded by the browser, the JavaScript will run on the client-side to give it full interactivity. This process is called hydration.&lt;/p&gt;

&lt;h1&gt;
  
  
  Two forms of pre-rendering
&lt;/h1&gt;

&lt;p&gt;In fact, Next.js gives us two methods of pre-rendering:&lt;br&gt;
&lt;strong&gt;Static Generation&lt;/strong&gt; and &lt;strong&gt;Server-side Rendering&lt;/strong&gt;. The difference lies in when the HTML is generated for a page.&lt;/p&gt;

&lt;p&gt;With Static Generation the HTML is generated at build time. As it's been pre-rendered, the HTML is then reused on each request.&lt;/p&gt;

&lt;p&gt;We also have the option of Server-side Rendering is the pre-rendering method that generates the HTML on each request.&lt;/p&gt;

&lt;p&gt;This choice can be done on a per-page basis, meaning you can create a hydrid Next.js project by choosing which pages will use Static Generation and which ones will use Server-side rendering.&lt;/p&gt;

&lt;p&gt;Although we have that option, Static Generation is the recommended method by Vercel since your page can be built once and served by CDN, resulting in a much faster experience. This would be the best option for when you have static content, as you won't have to wait for the server to render the page on every request.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>javascript</category>
      <category>performance</category>
    </item>
    <item>
      <title>React 101: A Quick Intro</title>
      <dc:creator>Rita Correia</dc:creator>
      <pubDate>Sat, 16 Jan 2021 20:18:21 +0000</pubDate>
      <link>https://dev.to/ritaxcorreia/react-101-a-quick-intro-5e7b</link>
      <guid>https://dev.to/ritaxcorreia/react-101-a-quick-intro-5e7b</guid>
      <description>&lt;p&gt;If you're curious about what makes React the most popular JavaScript framework, or feel hesitant about learning React, this article is for you. We'll go through &lt;em&gt;React fundamentals&lt;/em&gt; in simple terms covering the following topics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React in a Nutshell &lt;/li&gt;
&lt;li&gt;Key Concepts of React&lt;/li&gt;
&lt;li&gt;create-react-app&lt;/li&gt;
&lt;li&gt;React Components&lt;/li&gt;
&lt;li&gt;React Props&lt;/li&gt;
&lt;li&gt;React State&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;In this article, it's assumed you know the basics and concepts of JavaScript.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  React in a nutshell 
&lt;/h2&gt;

&lt;p&gt;React (also known as React.js or ReactJS) is a JavaScript framework created by Jordan Walke and maintained by a small team part of Facebook, led by Dan Abramov in London.  React is open source and you can contribute to their &lt;a href="https://github.com/facebook/react"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It's used for building user interfaces specifically for single-page applications, that are fast to load and faster to build. React is a component-based framework with the core principle of reusing UI components.&lt;/p&gt;

&lt;p&gt;Instead of creating DOM elements, we create React elements. react-dom will handle the events and turn them into DOM elements. This is done through React components.&lt;br&gt;
React isolates the components, and re-renders that specific component which makes an app/website incredibly faster to render.&lt;/p&gt;
&lt;h2&gt;
  
  
  The 3 key concepts of React are:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Passing data (unidirectional data flow)&lt;/li&gt;
&lt;li&gt;Returning data&lt;/li&gt;
&lt;li&gt;Return JSX&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Unidirectional Data Flow
&lt;/h3&gt;

&lt;p&gt;In React, data can only flow in one direction. As the underlying data changes, the view will update, but in order for the view layer to affect the data, an action must be triggered. There is no automatic updating. This helps to reduce overhead and makes managing data simpler.&lt;/p&gt;

&lt;p&gt;A component can manage its own data (known as state), or can have data passed to it from another component (known as props). When either state or props changes, React will re-render the component which in turn updates the view.&lt;/p&gt;
&lt;h3&gt;
  
  
  Virtual DOM
&lt;/h3&gt;

&lt;p&gt;React employs a virtual DOM, meaning it has a copy of the DOM in memory at all times. When the view needs to be updated, React will update this virtual DOM first. This is easy to do, because it is already in memory.&lt;/p&gt;

&lt;p&gt;Once the Virtual DOM has been updated, React checks to see what the differences are between the Virtual DOM and the actual DOM. React can then just update the DOM nodes that have changed.&lt;br&gt;
This approach is unique to React and is what made it so much quicker at rendering than its rivals.&lt;/p&gt;
&lt;h3&gt;
  
  
  JSX
&lt;/h3&gt;

&lt;p&gt;JSX is a syntax extension for JavaScript. It was written to be used with React. JSX code looks a lot like HTML. &lt;/p&gt;

&lt;p&gt;What does “syntax extension” mean?&lt;br&gt;
In this case, it means that JSX is not valid JavaScript. Web browsers can’t read it!&lt;br&gt;
If a JavaScript file contains JSX code, then that file will have to be compiled. That means that before the file reaches a web browser, a JSX compiler will translate any JSX into regular JavaScript.&lt;br&gt;
 &lt;br&gt;
Any code in between the tags of a JSX element will be read as JSX, not as regular JavaScript! JSX doesn’t add numbers - it reads them as text, just like HTML.&lt;br&gt;
You need a way to write code that says, “Even though I am located in between JSX tags, treat me like ordinary JavaScript and not like JSX.”&lt;br&gt;
You can do this by wrapping your code in curly braces: &lt;code&gt;{ your code goes here }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In JSX, you need to add slashes to all of the self-closing tags, ie: &lt;code&gt;&amp;lt;Header /&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;Home /&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Event Listeners in JSX
&lt;/h3&gt;

&lt;p&gt;JSX elements can have event listeners, just like HTML elements. Programming in React means constantly working with event listeners.&lt;br&gt;
You create an event listener by giving a JSX element a special attribute. Here’s an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img onClick={myFunc} /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An event listener attribute’s name should be something like &lt;code&gt;onClick&lt;/code&gt; or &lt;code&gt;onMouseOver&lt;/code&gt;: the word 'on', plus the type of event that you’re listening for. You can see a list of valid event names &lt;a href="https://reactjs.org/docs/events.html"&gt;here&lt;/a&gt;.&lt;br&gt;
An event listener attribute’s value should be a function. The above example would only work if &lt;code&gt;myFunc&lt;/code&gt; were a valid function that had been defined elsewhere, like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function myFunc() {
  alert('Good morning!');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img onClick={myFunc} /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that in HTML, event listener names are written in all lowercase, such as &lt;code&gt;click&lt;/code&gt; or &lt;code&gt;mousemove&lt;/code&gt;. In JSX, event listener names are written in camelCase, such as &lt;code&gt;onClick&lt;/code&gt; or &lt;code&gt;onMouseOver&lt;/code&gt;.&lt;br&gt;
  &lt;/p&gt;
&lt;h2&gt;
  
  
  create-react-app
&lt;/h2&gt;

&lt;p&gt;create-react-app is a NPM package that installs all necessary packages to create a React application.&lt;br&gt;
Using create-react-app sets up your environment with all we need.&lt;/p&gt;

&lt;p&gt;It comes bundled with a few features including:&lt;br&gt;
ESlint: to polish your code as you write it&lt;br&gt;
Jest: a testing library, for testing your code&lt;/p&gt;

&lt;p&gt;Because its’ an npm package, it’s executed only in the terminal, as such:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-react-app your-react-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also accepts flags to tailor the template to your needs, ie &lt;code&gt;npx create-react-app --typescript&lt;/code&gt;. This will create you a TypeScript project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;npx is the same as npm, but it installs the latest version of npm.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You must import React from ‘react’ in each component file.&lt;br&gt;
At the end, you export each new component you created:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function Hello () {
 return &amp;lt;h1&amp;gt;Hello {username}!&amp;lt;/h1&amp;gt;;
}

export default Hello;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or you can instantly export it when creating the function such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export default function Hello () {
 return &amp;lt;h1&amp;gt;Hello {username}!&amp;lt;/h1&amp;gt;;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you import the created component to the file you want to use it in.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;package.json&lt;/code&gt; comes with create-react-app and it defines dependencies. Dependencies are all the packages that need to be installed for it to run. For debugging, we have “scripts”, and you can add &lt;code&gt;lint:fix&lt;/code&gt; for example.  &lt;code&gt;package-lock.json&lt;/code&gt; defines more packages. &lt;br&gt;
They both get installed when you run &lt;code&gt;npm install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The public folder  holds your HTML file. It takes the usual HTML boilerplate and &lt;code&gt;&amp;lt;div id=“root”&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;.&lt;br&gt;
We build our app, eg: &lt;code&gt;app.js&lt;/code&gt; file, in the src folder.&lt;/p&gt;
&lt;h2&gt;
  
  
  React components 
&lt;/h2&gt;

&lt;p&gt;As mentioned earlier, React is a component-based framework, which means components are created with the purpose of being reused throughout the UI.&lt;br&gt;
You can use several functions to create different reusable components. You basically pass in functions between files, so we can pass values onto different files.&lt;/p&gt;

&lt;p&gt;Components are like JavaScript functions, with a different way of executing them. Components can be created with function declarations or arrow functions.&lt;/p&gt;

&lt;p&gt;Components must be exported: &lt;code&gt;export default ‘ComponentName’  &lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then, we import the component to the file where we want to use it: &lt;code&gt;import ComponentName from “./components/ComponentName”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A component lives on a separate file. The module is the file that holds one of more components.&lt;/p&gt;

&lt;p&gt;A component returns a piece of JSX.   JSX, as explained earlier, is the syntax taken by React.&lt;/p&gt;

&lt;p&gt;We can have the bigger components in the main &lt;code&gt;App.js&lt;/code&gt; file and the smaller components in a components folder. But the structure is ultimately entirely up to the developer.&lt;/p&gt;

&lt;p&gt;This is a React component:&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function MyComponent (props) {
  return ( 
    &amp;lt;&amp;gt; 
     &amp;lt;h1&amp;gt;{props.greeting}&amp;lt;/h1&amp;gt; 
    &amp;lt;/&amp;gt; 
) };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And this is how we call a React component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;MyComponent greeting=“Hello World” /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, passing a variable {myVariable}:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const myVariable = ‘This is a variable’
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you call it by using &lt;code&gt;{myVariable}&lt;/code&gt; in JSX.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fragment&lt;/strong&gt;&lt;br&gt;
When you have more than one line of code to return, you wrap the content of a function inside a fragment: &lt;code&gt;&amp;lt;&amp;gt; &amp;lt;/&amp;gt;&lt;/code&gt;&lt;br&gt;
It replicates a div-like wrapper where you store the code block within your components.&lt;/p&gt;

&lt;h2&gt;
  
  
  React props
&lt;/h2&gt;

&lt;p&gt; This is the React equivalent to function parameters that are passed into functions. Best practice is to call them &lt;em&gt;props&lt;/em&gt; when writing a component.   &lt;em&gt;“You pass a prop”&lt;/em&gt;. This means you pass in the equivalent to a JavaScript argument into a component.   They are grouped together into an object by default.&lt;br&gt;
React naturally takes all the arguments and wraps them in an object. The object is called &lt;em&gt;props&lt;/em&gt; and you can access it by using dot notation, ie: props.name, props.age.&lt;/p&gt;

&lt;p&gt;Props can handle functions and values, and they can have default values (ie, you can set the default to be whatever you want it to be!).&lt;br&gt;
Props can be  destructured in components for better readability.&lt;/p&gt;

&lt;h2&gt;
  
  
  React state
&lt;/h2&gt;

&lt;p&gt;React State is a description of the status of the component and its features.  It's a built-in React object that is used to contain data or information about the component. A component's state can change over time; whenever it changes, the component re-renders.&lt;br&gt;
React developers usually refer to “setting state”, where you can write methods inside your component.   It basically means controlling the state of a component and resets it for each time you call it/use it.&lt;/p&gt;

&lt;p&gt;‘Value’ is a variable so it always returns a state.&lt;/p&gt;

&lt;p&gt;Since the introduction of React Hooks (in 2018) we can use &lt;code&gt;React.useState( )&lt;/code&gt;. It takes an initial value when it renders, which can also take the value of when the value is set/changed.&lt;/p&gt;




&lt;p&gt;I hope this clarifies a little more about the intricacies of React! I've collated some great free resources in the list below:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.glitch.com/post/react-starter-kit"&gt;Glitch: React Starter Kit&lt;/a&gt;&lt;/strong&gt; - A free, 5-part video course with interactive code examples that will help you learn React.&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.codecademy.com/learn/react-101"&gt;Codecademy: React 101&lt;/a&gt;&lt;/strong&gt; - Codecademy’s introductory course for React.&lt;br&gt;
&lt;strong&gt;&lt;a href="https://egghead.io/courses/start-learning-react"&gt;Egghead.io: Start Learning React&lt;/a&gt;&lt;/strong&gt; - This series will explore the basic fundamentals of React to get you started.&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=Ke90Tje7VS0"&gt;React Crash Course 2018&lt;/a&gt;&lt;/strong&gt; - A beginner-friendly crash course through the most important React topics.&lt;br&gt;
&lt;strong&gt;&lt;a href="https://egghead.io/courses/the-beginner-s-guide-to-react"&gt;Egghead.io: The Beginner’s Guide to ReactJS&lt;/a&gt;&lt;/strong&gt; - Free course for React newbies and those looking to get a better understanding of React fundamentals.&lt;br&gt;
&lt;strong&gt;&lt;a href="https://ui.dev/free-react-bootcamp/"&gt;Free React Bootcamp&lt;/a&gt;&lt;/strong&gt; - Recordings from three days of a free online React bootcamp.&lt;br&gt;
&lt;strong&gt;&lt;a href="https://scrimba.com/learn/learnreact"&gt;Scrimba: Learn React for free&lt;/a&gt;&lt;/strong&gt; - 48 hands-on video tutorials building react apps.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Building a geolocation app using Google Maps API in Vanilla JavaScript</title>
      <dc:creator>Rita Correia</dc:creator>
      <pubDate>Thu, 26 Nov 2020 14:09:46 +0000</pubDate>
      <link>https://dev.to/ritaxcorreia/building-a-geolocation-app-using-google-maps-api-in-vanilla-js-484i</link>
      <guid>https://dev.to/ritaxcorreia/building-a-geolocation-app-using-google-maps-api-in-vanilla-js-484i</guid>
      <description>&lt;p&gt;Recently I worked on this geolocation-based app that fetches and maps real-time availability of &lt;a href="https://tfl.gov.uk/modes/cycling/santander-cycles" rel="noopener noreferrer"&gt;London’s Santander Bikes&lt;/a&gt; with &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Navigator" rel="noopener noreferrer"&gt;Navigator&lt;/a&gt;, &lt;a href="https://developers.google.com/maps/documentation/javascript/overview" rel="noopener noreferrer"&gt;Google Maps API&lt;/a&gt;, &lt;a href="https://api.tfl.gov.uk/" rel="noopener noreferrer"&gt;Transport For London API&lt;/a&gt;. All in vanilla JavaScript.&lt;/p&gt;

&lt;p&gt;💻 You can see mine working &lt;a href="https://tfl-bikes.netlify.app/" rel="noopener noreferrer"&gt;here&lt;/a&gt;💻 &lt;/p&gt;

&lt;p&gt;I thought it would be good to share a step-by-step guide on how to build it. This could be easily replicated for your own city, providing the local authorities or the service you want to use have an API. A similar take would be fetching local shops or restaurants from the Google Places API, and getting reviews or any other data.&lt;/p&gt;

&lt;p&gt;First of all, we want to breakdown our plan into small tasks, so here’s what we need to do:  &lt;/p&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;h4&gt;
  
  
  1. Get the users location from the browser
&lt;/h4&gt;

&lt;h4&gt;
  
  
  2. Render a Google map and create a request to Google Maps using the users location
&lt;/h4&gt;

&lt;h4&gt;
  
  
  3. Create a request to Travel For London (TfL) for bike information
&lt;/h4&gt;

&lt;h4&gt;
  
  
  4. Parse the Tfl API responses and add the data to the map
&lt;/h4&gt;

&lt;h4&gt;
  
  
  5. Retrieve specific info and create and InfoWindow
&lt;/h4&gt;

&lt;h4&gt;
  
  
  6. Add bikepoint info and image elements to the InfoWindow
&lt;/h4&gt;

&lt;h4&gt;
  
  
  7. Add custom markers
&lt;/h4&gt;

&lt;h2&gt;
  
  
  1. Get the user's location from the browser
&lt;/h2&gt;

&lt;p&gt;In order for this app to be more relevant to a Londoner, we want to retrieve the user's location and show the bikes available nearby.&lt;br&gt;
"Right, but how on earth do we do that?", you ask. 🧐&lt;/p&gt;

&lt;p&gt;We will use the Navigator object for this. The Navigator object lives under the hood in your browser, and it allows scripts to query state and to register themselves to carry on some activities.&lt;br&gt;
There's a lot of properties in the Navigator object, which you can read more about &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Navigator" rel="noopener noreferrer"&gt;here&lt;/a&gt;, but for this purpose we want to use Geolocation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;Navigator.geolocation&lt;/code&gt; read-only property returns a Geolocation object that gives Web content access to the location of the device. This allows a Web site or app to offer customised results based on the user's location.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once we call &lt;code&gt;navigator.geolocation&lt;/code&gt;, it will prompt the user to allow for their location to be shared. If you're on Google Chrome you will see this alert:&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%2Fi%2F5a1v5n86l1p3cg1h048g.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%2Fi%2F5a1v5n86l1p3cg1h048g.png" alt="user_your_location"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Firefox, for example, you will likely have to change the geolocation sharing permissions in the settings.&lt;/p&gt;

&lt;p&gt;This will be done on pageload so we can handle the success case (as in, getting the user's current position).&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%2Fi%2F2saelfkl46sn7485u75w.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%2Fi%2F2saelfkl46sn7485u75w.png" alt="01_Get_Users_Location"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We take in &lt;code&gt;createMap&lt;/code&gt; as parameter. This will be a function that we'll create in Step 2.&lt;br&gt;
If sharing location was not allowed, we will get an error on the console.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Render a Google map and create a request to Google Maps
&lt;/h2&gt;

&lt;p&gt;For the next step, we want to render a Google map on our page which we'll wrap in a function.&lt;br&gt;
You will have to sign up with Google Maps Platform and get an API key. &lt;a href="https://developers.google.com/maps/documentation/javascript/get-api-key" rel="noopener noreferrer"&gt;Here's how you get started.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have your API key, you'll have to include it in your Maps JavaScript API request as per the documentation. Include the Google &lt;code&gt;script&lt;/code&gt; tag in your html file.&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%2Fi%2Fciw6ktala60qtcg3i4oc.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%2Fi%2Fciw6ktala60qtcg3i4oc.png" alt="02_render_google_map_center_on_location"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, we create a request to Google Maps using the user's location. The &lt;code&gt;position.coords&lt;/code&gt; are retrieved from &lt;code&gt;navigator.geolocation.getCurrentPosition()&lt;/code&gt; from Step 1.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;map&lt;/code&gt; is just an id given to a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; so we can use it as a selector. We want to center the map based in the current location, so we use &lt;code&gt;center: { lat: latitude, lng: longitude }&lt;/code&gt; which store our &lt;code&gt;position.coords&lt;/code&gt;. We also want to tweak the &lt;code&gt;zoom&lt;/code&gt; property so it's more zoomed in than the default value.&lt;/p&gt;

&lt;p&gt;Here's &lt;a href="https://developers.google.com/maps/documentation/javascript/geolocation" rel="noopener noreferrer"&gt;more&lt;/a&gt; on geolocation using the Google Maps API, if you would like to try a different approach.&lt;/p&gt;

&lt;p&gt;Within the &lt;code&gt;createMap&lt;/code&gt; function we also want to invoke the &lt;code&gt;getBikeData()&lt;/code&gt;, which we'll create in the next step.&lt;/p&gt;
&lt;h3&gt;
  
  
  Destructuring objects
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { latitude, longitude } = position.coords;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you've never came across this weird looking syntax this is called &lt;em&gt;destructuring&lt;/em&gt;. This was a feature added to ES6 and you can read more about it &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
Destructuring on objects lets you bind variables to different properties of an object. You specify the property being bound, followed by the variable you are binding its value to.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Create request to Transport for London API for bike information.
&lt;/h2&gt;

&lt;p&gt;Now we'll write our &lt;code&gt;getBikeData()&lt;/code&gt; function, where we'll create a fetch request to Transport for London API for real-time bike data.&lt;/p&gt;

&lt;p&gt;We don't need an API key to fetch data from the TfL API, so we simply use the endpoint provided to retrieve bikepoint data. We'll receive the data in JSON. &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%2Fi%2Fmbe9w03i1uhrbshjkdlj.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%2Fi%2Fmbe9w03i1uhrbshjkdlj.png" alt="03_tfl_getBikeData_Function"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the fetch response is successful, we want to add our bike markers. We'll create a function for that shortly.&lt;/p&gt;

&lt;p&gt;There's several types of data you can get from TfL, which you can access &lt;a href="https://api.tfl.gov.uk/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Parse TfL API response and add bike locations to map
&lt;/h2&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%2Fi%2Fm9zvi7arwa68an1wa9e2.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%2Fi%2Fm9zvi7arwa68an1wa9e2.png" alt="04_parseAPI_addlocationstomap"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We want to parse our TfL API response where we take in bikepoints as our function's parameter.&lt;/p&gt;

&lt;p&gt;We'll have quite a few bikepoints to parse so we'll run a forEach loop on each of them. We want to store the &lt;code&gt;bikeLocation&lt;/code&gt; as a variable, which will store each bikepoint's latitude and longitude.&lt;/p&gt;

&lt;p&gt;Then, for each of them, we want to create a Google marker, so we'll use one of the Google's functions for that. Relevant documentation on markers &lt;a href="https://developers.google.com/maps/documentation/javascript/markers" rel="noopener noreferrer"&gt;here&lt;/a&gt;. The Google marker is in fact an object which has &lt;code&gt;position&lt;/code&gt;, &lt;code&gt;map&lt;/code&gt;, and &lt;code&gt;icon&lt;/code&gt; as properties. Position will take an object with the bikepoint latitude and longitude. Map will refer to the map we've previously created. And lastly, icon refers to the marker image, which will come to on our last step.&lt;/p&gt;

&lt;p&gt;Within our &lt;code&gt;addBikeMarkers&lt;/code&gt; function, we also invoke &lt;code&gt;createBikeInfo()&lt;/code&gt; with bikepoint and marker as parameters. You guessed it, we'll jump onto that now.&lt;/p&gt;

&lt;p&gt;This is how your app should look like at this point, with gorgeous markers for each Santander bike point. Gorgeous!&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%2Fi%2F9k89i63dpxbflvqgeyvb.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%2Fi%2F9k89i63dpxbflvqgeyvb.png" alt="Screenshot 2020-11-11 at 09.09.16"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Retrieve specific TfL info and create an information window for when a user selects a bike point
&lt;/h2&gt;

&lt;p&gt;It's nice to have all the bikepoints mapped, but we need to provide more info to the user. What happens when you click on a marker? We want to display a window with all info such as  number of bikes available, number of spaces available and number of docks in each bikepoint.&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%2Fi%2F5ui4jeme6wo593l0ktox.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%2Fi%2F5ui4jeme6wo593l0ktox.png" alt="05_create_infoWindow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We create a function that retrieves and stores this data so we can then display it in a user-friendly format. This window will be prompted when each marker is clicked on.&lt;/p&gt;

&lt;p&gt;You'll see in the JSON data, that the &lt;code&gt;Place&lt;/code&gt; object has an &lt;code&gt;addtionalProperties&lt;/code&gt; array which contains the &lt;code&gt;nbBikes&lt;/code&gt;, &lt;code&gt;nbDocks&lt;/code&gt; and &lt;code&gt;nbSpaces&lt;/code&gt;. This actaully gives us real-time values, so we can display an accurate status of all bikepoints in London. &lt;br&gt;
If you notice that there's a mismatch in these numbers (i.e. &lt;code&gt;nbDocks - (nbBikes + nbSpaces) != 0&lt;/code&gt;), this indicates broken docks.&lt;br&gt;
In order to find the exact property we want (nbBikes, nbDocks, nbSpaces), we use the &lt;code&gt;find()&lt;/code&gt; array method so it can find the exact key within that object.&lt;br&gt;
I'm logging a few bits here to confirm that the data that is being pulled is correct.&lt;/p&gt;

&lt;p&gt;Finally, we add an event listener to each &lt;code&gt;marker&lt;/code&gt;. Please note, that this is in fact using a Google method that replaces &lt;code&gt;addEventListener&lt;/code&gt;. In here, we use &lt;code&gt;addListener&lt;/code&gt; instead to interact with the Google marker. More on events on the Google Maps API documentation &lt;a href="https://developers.google.com/maps/documentation/javascript/events" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
We call the &lt;code&gt;createInfoWindowForMarker()&lt;/code&gt; function (that we will create in the next step) to where we will pass in &lt;code&gt;marker&lt;/code&gt;, &lt;code&gt;bikepoint&lt;/code&gt; and &lt;code&gt;bikeInfo&lt;/code&gt; as arguments.&lt;/p&gt;
&lt;h2&gt;
  
  
  6. Add bikepoint info and image elements to the InfoWindow
&lt;/h2&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%2Fi%2F8fseuqn0uv1hwbnopjko.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%2Fi%2F8fseuqn0uv1hwbnopjko.png" alt="06_creates_infoWindow_for_marker"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Almost there! In this function we will want to create a InfoWindow to display our bikepoint data.&lt;/p&gt;

&lt;p&gt;InfoWindow is a type of overlay provided by Google Maps. It displays content (usually text or images) in a popup window above the map, at a given location. You can read more on InfoWindows &lt;a href="https://developers.google.com/maps/documentation/javascript/infowindows" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, we declare the &lt;code&gt;infoWindow&lt;/code&gt; variable outside the function so it remains in global scope, which we'll assign with a new.google.maps.InfoWindow inside our function. This Google Maps function will take in an object literal which specifies the parameters for displaying the info window.&lt;br&gt;
The one we will use is &lt;code&gt;content&lt;/code&gt;, which is the equivalent to an &lt;code&gt;innerHtml&lt;/code&gt;/&lt;code&gt;innerText&lt;/code&gt; in JavaScript.&lt;br&gt;
In here, we want to pass in html to the DOM, creating a div that holds an image and the data we fetched from the TfL API (the bikepoint name, number of bikes available, number of spaces available, number of docks and also the bike availability percentage). We calculate this percentage in a separate variable above.&lt;/p&gt;

&lt;p&gt;You'll see that the first line in our code block here tells an existing open infoWindow to close. We only want to show one infoWindow at a time, so this guarantees that if there is already an infoWindow open this will be closed, so a new one can be displayed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;infoWindow.open(map, marker);
map.setCenter(marker.getPosition());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lastly, we want to open a new infoWindow which will display the real-time bikepoint info. We pass in the &lt;code&gt;map&lt;/code&gt; and &lt;code&gt;marker&lt;/code&gt; as arguments so it's linked to the marker trigged by the user click. We also want to center the infoWindow in our map. Again, we use &lt;code&gt;setCenter&lt;/code&gt; which is a built-in method that we can use with the Google Maps map, which then takes &lt;code&gt;getPosition()&lt;/code&gt; chained to &lt;code&gt;marker&lt;/code&gt;. &lt;code&gt;getPosition()&lt;/code&gt; is a Google Maps method associated to &lt;code&gt;marker&lt;/code&gt;. If you'd like to learn more on Google Maps map and marker methods, go &lt;a href="https://developers.google.com/maps/documentation/javascript/reference" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Et voila! What a beaut.&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%2Fi%2Fiz1njapqc7hszd22ch8w.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%2Fi%2Fiz1njapqc7hszd22ch8w.png" alt="Screenshot 2020-11-26 at 10.53.58"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Add custom markers
&lt;/h2&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%2Fi%2Fif0s2t0wmvzzbp0kwabj.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%2Fi%2Fif0s2t0wmvzzbp0kwabj.png" alt="Screenshot 2020-11-26 at 13.20.03"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is entirely optional as we already have a fully-functioning geolocation based app that tells us the availability of public-use bikes in London. 🤩&lt;/p&gt;

&lt;p&gt;For our final step, we just want to give it a little personal touch and add our own custom marker images.&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%2Fi%2Fgo8dqln2k9ec238tte9c.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%2Fi%2Fgo8dqln2k9ec238tte9c.png" alt="07_icon_base"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Remember in Step 4 when we created our marker? One of the properties the marker object takes is &lt;code&gt;icon&lt;/code&gt;. The &lt;code&gt;google.maps.Icon&lt;/code&gt; interface is a structure that represents a Marker icon image. There's quite a few properties associated to &lt;code&gt;icon&lt;/code&gt;, you can learn more on that &lt;a href="https://developers.google.com/maps/documentation/javascript/reference/marker#Icon" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For our InfoWindow we will use &lt;code&gt;url&lt;/code&gt; (pulling an image file of your choice), &lt;code&gt;scaledSize&lt;/code&gt; (instantly scaling the original image to the desired size), and &lt;code&gt;origin&lt;/code&gt; and &lt;code&gt;anchor&lt;/code&gt; (which will position the marker image in correspondence to the location of the marker on the map).&lt;/p&gt;

&lt;p&gt;There we have it, a geolocation-driven app using Navigator, Google Maps API and fetching data from the Transport for London bikes API.&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%2Fi%2F1j94kfbykvslgej6bndw.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%2Fi%2F1j94kfbykvslgej6bndw.png" alt="Screenshot 2020-11-11 at 11.36.24"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is my first ever technical blogpost so would love to know if you found this helpful in any of your projects using the Google Maps API! Your constructive feedback is appreciated.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My Self-taught Programming Journey</title>
      <dc:creator>Rita Correia</dc:creator>
      <pubDate>Thu, 30 Jul 2020 15:52:54 +0000</pubDate>
      <link>https://dev.to/ritaxcorreia/my-self-taught-programming-journey-2a70</link>
      <guid>https://dev.to/ritaxcorreia/my-self-taught-programming-journey-2a70</guid>
      <description>&lt;p&gt;So you want to learn how to code but don’t know where to start?&lt;br&gt;
Or you've already started your learning journey (well done you!), but you're feeling a little lost? &lt;/p&gt;

&lt;p&gt;I personally felt like I needed some sort of structure during my learning journey, so I've been making notes along the way hoping to support anyone who's looking into learning to code.&lt;/p&gt;

&lt;p&gt;This article includes some tips, resources and personal learnings which might help you achieve your coding goals. Please note I'm learning front-end development specifically, so the article will be geared towards that.&lt;/p&gt;
&lt;h1&gt;
  
  
  #100DaysOfCode
&lt;/h1&gt;

&lt;p&gt;Setting yourself goals will set you up for success, whatever success means to you.&lt;br&gt;
Taking part in the #100DaysOfCode on Twitter helped me stick to my goal of staying on a consistent learning journey and also held me accountable as I publicly committed to the challenge. Documenting your journey is important. You can look back and marvel at what you achieved during that specific timeframe.&lt;br&gt;
You can join the #100DaysOfCode conversation, connect with other people who are on the same journey and have the support of other communities such as #CodeNewbies, etc. &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1288534037347344384-263" src="https://platform.twitter.com/embed/Tweet.html?id=1288534037347344384"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1288534037347344384-263');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1288534037347344384&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://www.freecodecamp.org/" rel="noopener noreferrer"&gt;FreeCodeCamp&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;Free&lt;br&gt;
At the beginning I looked for an online bootcamp that was not only free, but could be a good starting point for beginners.&lt;br&gt;
I took the Responsive Web Design to start with, and I think that was a wonderful way to grasp basic HTML/CSS concepts.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://www.codecademy.com/" rel="noopener noreferrer"&gt;Codecademy&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;Free&lt;br&gt;
I started the free version to test it out, and really enjoyed the platform and the engaging content of the courses.&lt;br&gt;
I eventually moved to the Pro version (£15.99-£31.99/month or $19.99-$39.99/month), which I found worth the monthly cost as it lets you apply the concepts you’ve just learned into practical challenges to solidify your newly-acquired knowledge. With Pro, you can also get a certificate at the end of program. There's plenty of paths and courses to choose from. To be completely honest, I tried out the Pro version as I soon found out I much prefer video-based learning.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://www.codecademy.com/" rel="noopener noreferrer"&gt;Codecademy&lt;/a&gt; Go app
&lt;/h1&gt;

&lt;p&gt;Free&lt;br&gt;
The Codecademy Go app is really good for quick reviewing and practicing concepts, on the go. It gives you handy, randomised flash cards on the concepts learned in your chosen course and then fun little quiz style questions. Perfect for catching up while you wait for the bus.&lt;/p&gt;

&lt;h1&gt;
  
  
  Video-based bootcamps
&lt;/h1&gt;

&lt;p&gt;There are plenty of intro to coding bootcamps (HTML / CSS / JavaScript / Python / etc) led by some of the best instructors in the industry... for free!&lt;br&gt;
One of the best out there is the &lt;a href="https://frontendmasters.com/bootcamp/" rel="noopener noreferrer"&gt;Frontend Masters Bootcamp&lt;/a&gt; which is taught by Jen Kramer (Harvard University) and Brian Holt (Microsoft), where you also create some fun projects.&lt;/p&gt;

&lt;h1&gt;
  
  
  Videos
&lt;/h1&gt;

&lt;p&gt;When you’re new to a programming language, especially if you’re still at the beginning of your learning journey, it’s highly likely that you can’t quite grasp the entirety of a language's potential.&lt;br&gt;
Questions such as ‘What can I actually &lt;em&gt;do&lt;/em&gt; with JavaScript?’ might pop to mind which is completely normal. I found that watching videos on YouTube can help you a ton by giving you an overview of how powerful that language is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=PkZNo7MFNFg" rel="noopener noreferrer"&gt;Youtube: Learn JavaScript - Full Course for Beginners&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=hdI2bqOjy3c&amp;amp;t" rel="noopener noreferrer"&gt;Youtube: JavaScript Crash Course for Beginners&lt;/a&gt; &lt;/p&gt;

&lt;h1&gt;
  
  
  Guided projects / tutorials
&lt;/h1&gt;

&lt;p&gt;Before you feel confident enough to jump into your own personal projects, with little guidance, I found that learning through guided projects and tutorials was a great way to build that confidence. Tutorials help you grasp new concepts, and you have those training wheels helping you.&lt;br&gt;
There's a plethora of great tutorials online, so why not learn from the best? Wes Bos is a legend and if you're learning JavaScript, he created the perfect tutorial-driven challenge: &lt;a href="https://javascript30.com/" rel="noopener noreferrer"&gt;JavaScript30&lt;/a&gt;.&lt;br&gt;
It's essentially a 30-day challenge where you build 30 things in 30 days, with video guidance. You can follow up on Twitter with #Javascript30 to connect with other fellow coders on the same journey as you.&lt;/p&gt;

&lt;h1&gt;
  
  
  Jump to non-guided projects when you feel ready
&lt;/h1&gt;

&lt;p&gt;Tutorials can be a blessing and a curse, with the downside being that it's easy to feel trapped in the tutorial-led stage of learning. You'll learn better by crafting your own code and algorithms. I would recommend &lt;a href="https://www.frontendmentor.io/" rel="noopener noreferrer"&gt;FrontEndMentor&lt;/a&gt; for this, as they provide beautifully designed challenges that you can sort by level of difficulty. You can always check out solutions submitted by peers if you're stuck or curious.&lt;/p&gt;

&lt;h1&gt;
  
  
  Online courses
&lt;/h1&gt;

&lt;p&gt;Online courses can go from fundamentals to advanced topics, such as specific frameworks, etc, so there's a lot of choice if you want to take it a step further and tailor your knowledge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://frontendmasters.com/" rel="noopener noreferrer"&gt;Frontend Masters &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/courses/development/" rel="noopener noreferrer"&gt;Udemy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.traversymedia.com/" rel="noopener noreferrer"&gt;Traversy Media&lt;/a&gt;, from Brad Traversy. He creates some of the best courses available in Udemy.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://wesbos.com/courses" rel="noopener noreferrer"&gt;Wes Bos&lt;/a&gt;, possibly my favourite instructor, he created a range of free and paid courses for web developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Debugging / Queries
&lt;/h1&gt;

&lt;p&gt;It can be a lonely ride if you don’t have other programmer buddies, so once again the answer is the internet.&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt; is the holy grail for questions and answers. Just search for similar issues, because it’s likely you’re not the first person asking that question. &lt;br&gt;
Look out for an answer with a green tick ✅ next to it - that will give you the right solution.&lt;/p&gt;

&lt;h1&gt;
  
  
  Emotional resilience
&lt;/h1&gt;

&lt;p&gt;It can be a pretty lonely journey learning something new on your own. &lt;br&gt;
Some days can be tough and you might find yourself doubting everything, yourself and your capabilities. You might get frustrated and wanting to give up, but pleeeeeeease remember that’s all part of the learning journey. Be your own cheerleader. Step back and look and what you’ve accomplished so far. Last week you didn’t know the things you do today. Last month it was inconceivable to think of where you are right now. Just compare yourself to the same day last year. &lt;br&gt;
It’s a long journey, so when you find yourself waddling through the valley of despair, try to refocus and regroup. Gather your strength and persevere.&lt;/p&gt;

&lt;p&gt;These were my learnings during my self-taught programming journey. Would love to hear other recommendations.&lt;/p&gt;

&lt;p&gt;You got this!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How can tech companies take better care of their most valuable assets? </title>
      <dc:creator>Rita Correia</dc:creator>
      <pubDate>Thu, 09 Jul 2020 16:09:43 +0000</pubDate>
      <link>https://dev.to/ritaxcorreia/how-can-tech-companies-take-better-care-of-their-most-valuable-assets-3m9h</link>
      <guid>https://dev.to/ritaxcorreia/how-can-tech-companies-take-better-care-of-their-most-valuable-assets-3m9h</guid>
      <description>&lt;p&gt;For tech companies, the mental and technical capabilities of their teams are their most valuable asset.&lt;/p&gt;

&lt;p&gt;The brain is a muscle. It can get overtired if we don't look after it. Although coding can equally be fun and challenging (which makes it a very enjoyable career for the most part), developers will exert their brain sometimes to a point of mental burnout. Balance is key.&lt;/p&gt;

&lt;h1&gt;
  
  
  What can tech companies do to take better care of their collective brain power?
&lt;/h1&gt;

&lt;p&gt;If you're a team manager, here are a few ideas that could improve your team's mental performance. &lt;/p&gt;

&lt;h2&gt;
  
  
  Realistic project estimation
&lt;/h2&gt;

&lt;p&gt;Agile methodologies and ceremonies are a great way to run projects and have an overview of everyone’s workload. Daily stand ups are key to understanding how work is progressing, and how your team is feeling.&lt;br&gt;
Be reasonable with project estimation and always plan for realistic deliveries. &lt;br&gt;
If the team finishes a sprint early, encourage taking some time for some self-development. Or even better, strategically incorporate downtime into your weekly schedules, so your team can have an afternoon off to decompress and hack around with new technologies or whatever they feel like exploring. Let this time be self-paced. It's also incredibly positive to get the team together afterwards to show off their insights and learnings in a little 'Show &amp;amp; Tell' sort of gathering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Foster a safe and open culture
&lt;/h2&gt;

&lt;p&gt;Create an environment of openness where senior management and team leads lead by example. Imagine how would people react if your CTO casually blurted out that he had had a rough night because their kid didn’t let them sleep. This is just a random example, but team members would likely feel empathetic towards them and possibly be more mindful throughout the day as a consequence.&lt;br&gt;
Simple actions or displays of humanness will open up the door to creating a kinder environment driven by honesty and personal accountability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand the psychology of your team
&lt;/h2&gt;

&lt;p&gt;We all have different personality traits. Do a little reconnaissance exercise and you'll realise your team members will either share similar attributes or have very distinct characteristics amongst themselves.&lt;br&gt;
This will mean a deeper interpersonal understanding of each individual needs, as well as collectively, helping you better identify when people are close to burnout.&lt;br&gt;
Meyers-Briggs theory states that humans can have &lt;a href="https://www.16personalities.com/"&gt;16 different personality types&lt;/a&gt; and this should not only be supported but also celebrated.&lt;br&gt;
A mentally diverse team enriches the projects they’re working on, as well as better understanding and tailoring for the audiences they’re developing for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Take care of your introverts
&lt;/h2&gt;

&lt;p&gt;This is extremely important and intrinsically related to the Team Psychology topic. Introverts recharge their mental energy by spending time alone. They will need periods of solitude in order to be more creative and more productive.&lt;br&gt;
Offices have widely become open space environments with lots of background noise and movement, which is definitely an energy draining environment if you're an introvert. Respect their space, provide breakout areas, and allow them to work from wherever they find more productive to them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Encourage time off
&lt;/h2&gt;

&lt;p&gt;Taking annual leave should be encouraged. It improves productivity and it provides an opportunity to unwind, recharge your brain and spend time with loved ones.&lt;br&gt;
Findings reveal that holiday policy should be at the forefront of company benefits - so a chunkier paid holiday allowance will definitely make everyone happier. A good work-life balance is key for mental health.&lt;/p&gt;

&lt;h2&gt;
  
  
  Care personally
&lt;/h2&gt;

&lt;p&gt;I worked in companies where the cultural stance was all about caring and nurturing a positive and inclusive environment, but they rarely walked the talk. Employers have a duty of care to their employees, and a manager has that direct responsibility.&lt;br&gt;
&lt;a href="https://www.radicalcandor.com/the-book/"&gt;Radical Candor by Kim Scott&lt;/a&gt; is a must-read resource that can help managers better lead their teams in very honest and open ways, and it perfectly addresses the 'caring personally' mentality.&lt;/p&gt;

&lt;p&gt;I’ve seen ex-colleagues being fired for arriving late after admitting they had a panic attack on their way to work. &lt;br&gt;
I’ve witnessed team leads publicly calling out members of another team for not performing as they should, leaving staff embarrassed with their reputation shattered all because of a meaningless issue that could've simply been addressed in a private conversation.&lt;br&gt;
And this happened to me personally... On a first one-to-one meeting with a new manager, they mentioned in a dismissive tone that they were &lt;em&gt;‘told to care about his team’&lt;/em&gt;. That obviously didn't sit very well especially as a first impression.&lt;/p&gt;

&lt;p&gt;These kind of situations will not only leave a sour taste, but will also cause a mental drain which will take away energy that should be ideally be funnelled into happy, productive work.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I believe companies should put a lot of effort into fostering a workplace environment that is based on mutual trust, respect and honesty. Taking care of your company's best assets - your people, their mental health and their brain power - will only bring out positive outcomes that will allow your company to thrive.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>productivity</category>
      <category>mentalhealth</category>
      <category>management</category>
    </item>
  </channel>
</rss>
