<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Monica Mateiu</title>
    <description>The latest articles on Forem by Monica Mateiu (@metamoni).</description>
    <link>https://forem.com/metamoni</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%2F253427%2F7537e6db-4687-44b2-8c43-b4db81fb373a.jpeg</url>
      <title>Forem: Monica Mateiu</title>
      <link>https://forem.com/metamoni</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/metamoni"/>
    <language>en</language>
    <item>
      <title>Improving Skip Navigation on DEV</title>
      <dc:creator>Monica Mateiu</dc:creator>
      <pubDate>Wed, 16 Jun 2021 07:15:38 +0000</pubDate>
      <link>https://forem.com/metamoni/improving-skip-navigation-on-dev-2bca</link>
      <guid>https://forem.com/metamoni/improving-skip-navigation-on-dev-2bca</guid>
      <description>&lt;p&gt;As a career changer, DEV has played a big part in my development as a Software Engineer. The DEV Community Bug Smash seemed like the perfect opportunity to give something back to the community that helped me so much over the past two years.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My Open Source Background&lt;/li&gt;
&lt;li&gt;About The Bug&lt;/li&gt;
&lt;li&gt;How I Smashed It&lt;/li&gt;
&lt;li&gt;Lessons Learned&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a&gt;My Open Source Background&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;My open source journey started with Hacktoberfest 2020 and with some small contributions to &lt;a href="https://github.com/rubyforgood" rel="noopener noreferrer"&gt;RubyForGood&lt;/a&gt; and &lt;a href="https://github.com/aitchiss/up_your_a11y" rel="noopener noreferrer"&gt;upyoura11y&lt;/a&gt;. I wrote about that &lt;a href="https://dev.to/metamoni/how-to-start-contributing-to-open-source-as-a-junior-1c9l"&gt;here&lt;/a&gt;. I found it very rewarding, and since then I've been trying to stay active and keep up the open source work.&lt;/p&gt;

&lt;p&gt;But, to be honest, digging around in a large codebase like DEV's sounded pretty intimidating. So I took my time. I read through the open issues, looking for something that would speak to me. And then I found it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a&gt;About The Bug&lt;/a&gt;
&lt;/h3&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/forem/forem/issues/13505" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Skip links are not the first focused element on internal navigation
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#13505&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/aitchiss" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F20773163%3Fv%3D4" alt="aitchiss avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/aitchiss" rel="noopener noreferrer"&gt;aitchiss&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/forem/forem/issues/13505" rel="noopener noreferrer"&gt;&lt;time&gt;Apr 26, 2021&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      

&lt;p&gt;&lt;strong&gt;Describe the bug&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Under #1153 we added skip links to all pages in the app. A skip link should be the first element focused on a page when the user presses the Tab key - however, this is only the case in a Forem if you land directly on a URL, and not if you navigate internally, e.g. by a link click.&lt;/p&gt;
&lt;p&gt;There are several strategies available to managing focus on route change, but I would suggested the approach Marcy Sutton has written about following user testing with Fable: &lt;a href="https://www.gatsbyjs.com/blog/2019-07-11-user-testing-accessible-client-routing/" rel="nofollow noopener noreferrer"&gt;What we learned from user testing of accessible client-side routing techniques with Fable Tech Labs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The recommendation in that article is to send focus immediately to the skip link on the new page. We will need to experiment with &lt;code&gt;:focus-visible&lt;/code&gt; to ensure that for users who navigated by mouse click, the skip link isn't visible. If this isn't possible, I think an acceptable fallback would be to focus an empty element directly before the skip link, so that once on the new page, the skip link is the first item focused on Tab press.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To Reproduce&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Load the home page, and press Tab. You should see the skip link appear&lt;/li&gt;
&lt;li&gt;Activate the skip link by clicking or pressing Enter&lt;/li&gt;
&lt;li&gt;Select a post using the Tab key and press enter to view it&lt;/li&gt;
&lt;li&gt;On the new page, press Tab again&lt;/li&gt;
&lt;li&gt;Notice that the skip link is not the first item focused, and if you want to get to the main post content you have to press Tab multiple more times&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Expected behavior&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I select an article by keyboard on the home page&lt;/li&gt;
&lt;li&gt;On the new page the skip link is visible and focused&lt;/li&gt;
&lt;li&gt;If I repeat these actions but use the mouse, the skip link is not visible when I arrive on the new page&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/forem/forem/issues/13505" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Navigation can be tricky in an SPA. The DEV team have done well to implement skip links across the website, but there was some work left to do: making sure that they display when the user navigates to a new link using a keyboard. &lt;a class="mentioned-user" href="https://dev.to/s_aitchison"&gt;@s_aitchison&lt;/a&gt; did an excellent job of describing the problem and the expected result in the &lt;a href="https://github.com/forem/forem/issues/13505" rel="noopener noreferrer"&gt;GitHub issue&lt;/a&gt;, so all I had to do was follow her helpful instructions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a&gt;How I Smashed It&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The team had already started a conversation around the issue and I wanted to make sure I fully understood the problem before I committed to smashing this bug. First I got the app running locally, then I took some time to explore it with a screen reader and reproduce the bug.&lt;/p&gt;

&lt;p&gt;Once I understood what the expected behaviour should be and why, adding the code was easy. It took a few iterations, but the reviewers were very supportive, gave me lots of useful pointers, and helped me get around the mysterious behaviours of Safari. You can view the pull request below.&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/forem/forem/pull/13828" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        autofocus Skip Link on keyboard navigation
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#13828&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/metamoni" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F22390758%3Fv%3D4" alt="metamoni avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/metamoni" rel="noopener noreferrer"&gt;metamoni&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/forem/forem/pull/13828" rel="noopener noreferrer"&gt;&lt;time&gt;May 23, 2021&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;What type of PR is this?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Refactor&lt;/li&gt;
&lt;li&gt;[ ] Feature&lt;/li&gt;
&lt;li&gt;[x] Bug Fix&lt;/li&gt;
&lt;li&gt;[ ] Optimization&lt;/li&gt;
&lt;li&gt;[ ] Documentation Update&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Description&lt;/h2&gt;
&lt;p&gt;This PR aims to fix an issue where Skip Links only functioned when landing on a URL, not when using the keyboard to access internal links. With the added changes we are now sending focus immediately to the Skip Link when visitors are using a keyboard, and hiding it when a mouse is used.&lt;/p&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;QA Instructions, Screenshots, Recordings&lt;/h2&gt;
&lt;p&gt;Tested manually with keyboard and mouse on Edge, Chrome and Firefox. Ran checks using Axe DevTools and ANDI to ensure no unwanted behaviours have been introduced.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;QA steps&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;go to the homepage&lt;/li&gt;
&lt;li&gt;use the keyboard to navigate between pages and check that Skip Link appears on every link&lt;/li&gt;
&lt;li&gt;use your mouse to navigate between pages and ensure that Skip Link does not appear&lt;/li&gt;
&lt;li&gt;refresh the page and make sure Skip Link does not appear&lt;/li&gt;
&lt;li&gt;press Tab and make sure Skip Link appears&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Additional notes if you can't see the Skip Link in Firefox:&lt;/em&gt;
On a Mac, making the Skip Link appear on Mozilla Firefox requires additional configuration. &lt;a href="https://stackoverflow.com/questions/11704828/how-to-allow-keyboard-focus-of-links-in-firefox" rel="nofollow noopener noreferrer"&gt;This post&lt;/a&gt; describes what you need to do, although there are a few missing steps. Follow the instructions on StackOverflow for setting up the keyboard behaviour on your Mac, then type &lt;code&gt;about:config&lt;/code&gt; in Mozilla's URL bar. When you see the following message: &lt;code&gt;Changing these preferences can impact Firefox performance or security&lt;/code&gt;, click 'Show all' at the top, type &lt;code&gt;accessibility.tabfocus&lt;/code&gt; in the search bar, click the &lt;strong&gt;+&lt;/strong&gt; icon to the right and update the number from 0 to 7, then click the &lt;em&gt;tick&lt;/em&gt; icon on the right to save your changes. You should now be able to see the Skip Link on tab.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Demo&lt;/strong&gt;
&lt;a href="https://user-images.githubusercontent.com/22390758/119253376-e53fde00-bba8-11eb-96e0-d17175d96ec0.mov" rel="nofollow noopener noreferrer"&gt;https://user-images.githubusercontent.com/22390758/119253376-e53fde00-bba8-11eb-96e0-d17175d96ec0.mov&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Added tests?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Yes&lt;/li&gt;
&lt;li&gt;[x] No, and this is why: This PR only includes a CSS update and a small change to &lt;code&gt;base.js.erb&lt;/code&gt;. I couldn't find any specs for this file, so I assumed the decision was to not test the behaviour defined here.&lt;/li&gt;
&lt;li&gt;[ ] I need help with writing tests&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;[Forem core team only] How will this change be communicated?&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Will this PR introduce a change that impacts Forem members or creators, the
development process, or any of our internal teams? If so, please note how you
will share this change with the people who need to know about it.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] I've updated the &lt;a href="https://docs.forem.com" rel="nofollow noopener noreferrer"&gt;Developer Docs&lt;/a&gt; and/or
&lt;a href="https://forem.gitbook.io/forem-admin-guide/" rel="nofollow noopener noreferrer"&gt;Admin Guide&lt;/a&gt;, or
&lt;a href="https://storybook.forem.com/" rel="nofollow noopener noreferrer"&gt;Storybook&lt;/a&gt; (for Crayons components)&lt;/li&gt;
&lt;li&gt;[ ] I've updated the README or added inline documentation&lt;/li&gt;
&lt;li&gt;[X] I will share this change in a &lt;a href="https://forem.dev/t/changelog" rel="nofollow noopener noreferrer"&gt;Changelog&lt;/a&gt;
or in a &lt;a href="http://forem.dev" rel="nofollow noopener noreferrer"&gt;forem.dev&lt;/a&gt; post&lt;/li&gt;
&lt;li&gt;[ ] I will share this change internally with the appropriate teams&lt;/li&gt;
&lt;li&gt;[ ] I'm not sure how best to communicate this change and need help&lt;/li&gt;
&lt;li&gt;[ ] This change does not need to be communicated, and this is why not: &lt;em&gt;please
replace this line with details on why this change doesn't need to be
shared&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/forem/forem/pull/13828" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;Apart from the warm, fuzzy feeling that you've done something nice, the most valuable thing you'll get from open source contributions are the lessons you'll learn. Here's what smashing this bug taught me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how to &lt;a href="https://github.com/forem/forem/pull/13828/files" rel="noopener noreferrer"&gt;use CSS&lt;/a&gt; to adapt behaviour for both keyboard and mouse users&lt;/li&gt;
&lt;li&gt;on a Mac, Safari and Firefox need tweaking to &lt;a href="https://stackoverflow.com/questions/11704828/how-to-allow-keyboard-focus-of-links-in-firefox" rel="noopener noreferrer"&gt;enable keyboard navigation properly&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;don't be afraid to work on new projects - poking around in a large codebase can be fun!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devbugsmash</category>
      <category>a11y</category>
    </item>
    <item>
      <title>How to start contributing to open source as a junior</title>
      <dc:creator>Monica Mateiu</dc:creator>
      <pubDate>Tue, 03 Nov 2020 08:08:47 +0000</pubDate>
      <link>https://forem.com/metamoni/how-to-start-contributing-to-open-source-as-a-junior-1c9l</link>
      <guid>https://forem.com/metamoni/how-to-start-contributing-to-open-source-as-a-junior-1c9l</guid>
      <description>&lt;p&gt;When you're a junior, keeping up with everything you need to learn on the job can be intimidating enough. So how do you get started with open source, when you've only just started your software developer career?&lt;/p&gt;

&lt;p&gt;Well... it took me a year and a half, but I finally did it. I started with Hacktoberfest, and found a great community that I can learn from, projects that make a difference, and a rewarding way to spend my free time.&lt;/p&gt;

&lt;p&gt;I did it and so can you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get over those first hurdles
&lt;/h2&gt;

&lt;p&gt;Unless you're lucky enough to already know of a project that's perfect for you (in which case, why are you even reading this? go contribute!), you will almost definitely spend &lt;em&gt;a lot&lt;/em&gt; of time on repos you'll never even begin to contribute to.&lt;/p&gt;

&lt;p&gt;Not all projects have a great set-up and good documentation. I've wasted hours trying to get projects up and running locally, eager to dive in and start fixing one of their open issues, only to hit a wall.&lt;/p&gt;

&lt;p&gt;Sometimes there's a piece missing in the setup instructions. Or the project uses some fancy tech that doesn't play well with your setup. Or the maintainer assumes that everyone's an expert and knows how to debug all the incompatibility issues they'll run into.&lt;/p&gt;

&lt;p&gt;Prepare yourself for this and don't give up. And if you really want to contribute to a project but you've come across these types of issues, let the maintainers know! You might be able to help improve their docs. Once you find the right project for you, it'll all be worth it.&lt;/p&gt;

&lt;h2&gt;
  
  
  But what is "the right project"?
&lt;/h2&gt;

&lt;p&gt;Probably a repo that meets some, if not all of the following criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;its maintainers are active and engage with contributors&lt;/li&gt;
&lt;li&gt;the documentation is decent (contribution guidelines, setup instructions, and test credentials are provided if needed) or open for improvement&lt;/li&gt;
&lt;li&gt;the open issues don't look like complete gibberish to you; they offer enough detail about what needs to be done, and you may have even already found one that you could pick up&lt;/li&gt;
&lt;li&gt;you're familiar with the tech stack or able to pick it up quickly&lt;/li&gt;
&lt;li&gt;you find it interesting!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Overcome your fears
&lt;/h2&gt;

&lt;p&gt;Ignore those voices in your head telling you that you can't do this. Here are my three biggest fears that were stopping me from contributing. They all turned out to be unfounded.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I don't have enough experience to make a valuable contribution"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bullshit! There are plenty of projects out there that need both big and small tasks to be done. If you're struggling to find them, the first step is to look for those &lt;code&gt;beginner-friendly&lt;/code&gt; or &lt;code&gt;good first issue&lt;/code&gt; tags.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I can't just dive into an unknown codebase!"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course you can! You've already done it at work. And if you found a good project, there will be someone there to help when you need it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"People will hate my code and judge me"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unless you've somehow come across a horribly managed mess of a project, this is definitely not true. If your code needs more work (as code often does), you will get valuable feedback on how to make it better and learn something in the process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get contributing
&lt;/h2&gt;

&lt;p&gt;Alright, you've done the prep work, you got your pep talk, and you're finally ready to contribute. Here are some final tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;please &lt;em&gt;please&lt;/em&gt; read the contribution guidelines. It'll make your life easier and it'll get your PR merged quicker.&lt;/li&gt;
&lt;li&gt;maintainers are super busy. Respect that. Be patient while waiting for feedback on your PR.&lt;/li&gt;
&lt;li&gt;try to work on open issues first. Respect the project's priorities.&lt;/li&gt;
&lt;li&gt;don't be afraid to ask questions!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hacktoberfest is a great way to get started, but open source projects need help all year round. If you've been thinking about it for a while but haven't gotten around to it yet, find a project that piques your interest and start contributing today (or, you know, soon). As a junior developer you're guaranteed to get a lot out of it.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
