A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 19KB

  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the <title>
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>Overcoming my panic towards accessibility (archive) — David Larlet</title>
  13. <meta name="description" content="Publication mise en cache pour en conserver une trace.">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f0f0ea">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f0f0ea">
  26. <!-- Documented, feel free to shoot an email. -->
  27. <link rel="stylesheet" href="/static/david/css/style_2020-06-19.css">
  28. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  29. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  30. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  31. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  32. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <script type="text/javascript">
  36. function toggleTheme(themeName) {
  37. document.documentElement.classList.toggle(
  38. 'forced-dark',
  39. themeName === 'dark'
  40. )
  41. document.documentElement.classList.toggle(
  42. 'forced-light',
  43. themeName === 'light'
  44. )
  45. }
  46. const selectedTheme = localStorage.getItem('theme')
  47. if (selectedTheme !== 'undefined') {
  48. toggleTheme(selectedTheme)
  49. }
  50. </script>
  51. <meta name="robots" content="noindex, nofollow">
  52. <meta content="origin-when-cross-origin" name="referrer">
  53. <!-- Canonical URL for SEO purposes -->
  54. <link rel="canonical" href="https://zellwk.com/blog/overcoming-panic-towards-accessibility/">
  55. <body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>Overcoming my panic towards accessibility</h1>
  59. </header>
  60. <nav>
  61. <p class="center">
  62. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  63. <a href="https://zellwk.com/blog/overcoming-panic-towards-accessibility/" title="Lien vers le contenu original">Source originale</a>
  64. </p>
  65. </nav>
  66. <hr>
  67. <main>
  68. <p>Accessibility is a big part of JavaScript. If you build anything with JavaScript, you need to make them accessible.</p>
  69. <p>I’ve been afraid of touching accessibility for a few years now. This fear magnified when I began writing the accessibility lessons for <a href="https://learnjavascript.today">Learn JavaScript</a>.</p>
  70. <p>Today, I want to share with you why I became afraid of accessibility, and how I overcame this fear.</p>
  71. <h2 id="my-background">My background</h2>
  72. <p>I grew up in an environment where I felt I was constantly scrutinised for my actions. Whenever something goes wrong, it was always my fault; it doesn’t matter whether I actually did anything wrong.</p>
  73. <p>So I grew up being very sensitive towards whether things are “right” or “wrong”. I need to make things “right” in order not to get punished. I also grew up thinking that everyone out there is trying to harm me.</p>
  74. <p>It’s unhealthy, I know. I just realised this a few months ago.</p>
  75. <h2 id="why-i-was-scared-of-accessibility">Why I was scared of accessibility</h2>
  76. <p>I keep track of dev-related conversations on Twitter. I noticed a trend whenever I see anything about accessibility: Someone fucked up.</p>
  77. <p>There are two kinds of fuck-ups.</p>
  78. <h3 id="first-kind%3A-made-by-companies">First kind: Made by companies</h3>
  79. <p>The first kind is where big (and rich) companies refuse to build accessible websites. Developers all around Twitter-verse would talk negatively about these companies.</p>
  80. <p>When I see these conversations, I can’t help but wonder whether I fucked up somewhere. I can’t help but wonder if anyone was angry at me for creating something not accessible.</p>
  81. <p>Yes, the news is not about me. But I can’t help it. I was the kind of person where everything (that’s bad) will always be about me. Because everything is my fault. I grew up that way.</p>
  82. <p>(I’m admitting all my flaws right in this article. It’s so freaking hard to write).</p>
  83. <p>I became guarded against the “Accessibility” topic. I cannot afford to screw up on this topic (I told myself this unconsciously).</p>
  84. <h3 id="second-kind%3A-made-by-individuals">Second kind: Made by individuals</h3>
  85. <p>The second kind of fuck-ups is made by developers who make and share experiments (or discoveries). Accessibility critics will always be there to point out more accessible options. Sometimes, they’ll simply denounce the idea by saying the experiment is not accessible.</p>
  86. <p>I was defensive against such comments because I grew up thinking everyone was scrutinising me for my actions. Everyone was judging me. Everyone was everyone out to get me. I can’t help it.</p>
  87. <p>There was one incident where I created a calendar with CSS Grid. I shared how I made this through <a href="https://zellwk.com/blog/calendar-with-css-grid/" title="How to build a calendar with CSS Grid">an article</a>. I also tweeted about it.</p>
  88. <figure role="figure">
  89. <img src="https://zellwk.com/images/2020/overcoming-panic-towards-accessibility/calendar-fixed.png" alt="Calendar built with CSS Grid."/>
  90. </figure>
  91. <p>Guess what? The only people that jumped on this topic were the accessibility folks. They mentioned I should use a <code>&lt;table&gt;</code> element because it’s more semantically correct.</p>
  92. <figure role="figure">
  93. <img src="https://zellwk.com/images/2020/overcoming-panic-towards-accessibility/rik.png" alt="Rik says he would use table instead of CSS Grid."/>
  94. </figure>
  95. <figure role="figure">
  96. <img src="https://zellwk.com/images/2020/overcoming-panic-towards-accessibility/meduz.png" alt="Meduz says he would use table instead of CSS Grid."/>
  97. </figure>
  98. <p>These weren’t troll-type comments. They were valid replies.</p>
  99. <p>But when I saw these comments, I jumped and got angry. Why? Remember, I was at a point where I took things personally. I believed that everyone out there was trying to harm me. I grew up needing to be “correct”.</p>
  100. <p>These comments pointed out where I was “wrong”. When I was wrong, I get punished. This process was so ingrained in me that I punished myself (by beating myself up psychologically) even when nobody was around to punish me physically. It reinforced the idea that people are out there to get me.</p>
  101. <p>Here’s another incident. It was worse than the previous one.</p>
  102. <p>Back in April 2019, I published an article about <a href="https://zellwk.com/blog/hide-content-accessibly/">a new way to hide content accessibly</a>. This article challenged long-standing conventions in the accessibility field. I was excited about the idea because it was a major discovery for me.</p>
  103. <p>When I published the article, I got this email.</p>
  104. <figure role="figure">
  105. <img src="https://zellwk.com/images/2020/overcoming-panic-towards-accessibility/eric-1.png" alt="Email that asked if I tested this with a full range of assistive technology and browser pairings. If I didn't, then I'm being incredibly irresponsible."/>
  106. </figure>
  107. <p>I wasn’t trying to be irresponsible. I already mentioned explicitly (in the article) that my suggestion was new and not thoroughly tested in the article, but the email came anyway. Once again, this reaffirmed my views that people are out there are watching me and are trying to get me.</p>
  108. <p>I tried to calm down. I understood that accessibility people were immensely concerned about accessibility. So I gave an adult reply to his message. I even added the words “disclaimer” in bold and caps in my article to emphasise the instability of the new method.</p>
  109. <figure role="figure" aria-label="Adding a huge bold disclaimer to my article">
  110. <img src="https://zellwk.com/images/2020/overcoming-panic-towards-accessibility/disclaimer.png" alt=""/>
  111. <figcaption>Adding a huge bold disclaimer to my article</figcaption>
  112. </figure>
  113. <p>What happened next was a productive discussion on Twitter about the pros/cons of this new method. Some people were more aggressive (fuckers, I would call them in my mind). Others were more understanding.</p>
  114. <p>Overall, it was a great learning experience. Here, I realised that Scott O’Hara is probably the most understanding and nicest person in the accessibility field.</p>
  115. <p>I then wrote about my findings and updated the article after the discussion. And I sent another email out to tell my readers about my new findings.</p>
  116. <p>Everything above happened in a day.</p>
  117. <p>Then, I received this in my email. From the same guy.</p>
  118. <figure role="figure">
  119. <img src="https://zellwk.com/images/2020/overcoming-panic-towards-accessibility/eric-2.png" alt="Person stressed curt tone was justified. And if I break accessibility, I deny people of their civil rights."/>
  120. </figure>
  121. <p>I blew up.</p>
  122. <p>I raged at him for pushing my buttons (about being “wrong”, about being “irresponsible”). I raged at him for feeling justified about his crudeness by punishing me with words, and it was all my fault to begin with. (I realised much later that I was the one who punished myself. But the process was so ingrained I felt that dude punished me).</p>
  123. <p>I’m the one who’s wrong here. Yes, even though it’s not my fault. 😡.</p>
  124. <p>So once again, this reaffirmed my world-view that people are out to get me. This is especially prevalent when it comes to accessibility.</p>
  125. <p>I allowed myself to let out my frustrations by writing an article <a href="https://zellwk.com/blog/advocacy/">on Advocacy</a>. I thought I let it all out.</p>
  126. <p>But that wasn’t the end.</p>
  127. <p>Deep down, I wanted nothing to do with accessibility anymore. I don’t want to think about it. I don’t want to touch it. And I retreated.</p>
  128. <p>But I didn’t know I retreated. I didn’t know I would become afraid of touching accessibility.</p>
  129. <p>The damage was done. But I was unaware.</p>
  130. <h2 id="deciding-to-overcome-the-panic">Deciding to overcome the panic</h2>
  131. <p>I was the kind of person who retreated when challenged. It made absolute sense why I was afraid of accessibility if you consider my background and experiences.</p>
  132. <p>But I had a reason to overcome my panic towards accessibility. My reason? I was writing <a href="https://learnjavascript.today">Learn JavaScript</a>. JavaScript is a huge part of accessibility. If I teach people to build things with JavaScript, I need to teach them how to make it accessible for other users. It’s the right thing to do.</p>
  133. <p>So I had to step back out into the accessibility minefield.</p>
  134. <h2 id="overcoming-the-panic-towards-accessibility">Overcoming the panic towards accessibility</h2>
  135. <p>I worked through two things to overcome my panic.</p>
  136. <p><strong>First: I had to allow myself to understand why I panicked</strong>. I did this with the help of a life coach. This was how I discovered the whole background story you read above. (This was for general anxiety/panic related things. I panicked in many other parts of my life too).</p>
  137. <p><strong>Second: I had to understand accessibility</strong>. I ate my own medicine. <a href="https://zellwk.com/blog/figure-it-out/">I sat down and figured it out</a>. I got good enough to know the field.</p>
  138. <p>I spent one month doing these:</p>
  139. <ol>
  140. <li>Reading and understanding the spec</li>
  141. <li>Reorganizing content from the spec</li>
  142. <li>Setting up screen readers on both Mac and Windows</li>
  143. <li>Testing properties and attributes with Voiceover and NVDA</li>
  144. <li>Building accessible components</li>
  145. <li>Testing components with both Voiceover and NVDA</li>
  146. <li>Writing about accessibility</li>
  147. </ol>
  148. <p>In one month, I built 8 accessible components for <a href="https://learnjavascript.today">Learn JavaScript</a>. I also wrote 20+ lessons about accessibility. I figured out enough things to know the accessibility field.</p>
  149. <p>Am I still afraid of accessibility?</p>
  150. <p>Yes. I still get panic attacks when I think about accessibility. Heck, I even get panic attacks when I write CSS and JavaScript. I have not gotten to a point where I can manage all my panic reactions flawlessly.</p>
  151. <p>But I moved on. I’m at a better place compared to where I was a few months ago. I’m more confident. I became a better developer and a better teacher.</p>
  152. <h2 id="why-i%E2%80%99m-writing-this%3F">Why I’m writing this?</h2>
  153. <p>I felt like writing an extremely righteous message here (like saying it’s for you to break out of your panic attacks towards code).</p>
  154. <p>But if I’m honest. I would say I don’t really know.</p>
  155. <p>On one hand, I hope learning about my experiences would help you see yourself in a new light. That it’s okay to panic. And you can continue to learn and improve even if you’re panicking.</p>
  156. <p>I also hope you take the chance to work through any past traumas when you were a child (which led to the panic attacks).</p>
  157. <p>But ultimately, I think I’m telling this story so I can close this panic episode with integrity and honesty. I think I want to tell myself that it’s okay to be weak and imperfect. That it was okay for me to be defensive. That it was okay for me to be angry.</p>
  158. <p>And it’s okay to let the anger go now. Nobody out there is trying to harm me. Nobody out there is trying to force me to admit to mistakes I didn’t make. Nobody out there is trying to make me “wrong”.</p>
  159. <p>Even if I’m wrong, I don’t have to punish myself. It’s okay to make mistakes. I don’t have to stay vigilant against the world. I don’t have to protect myself from the entire world anymore.</p>
  160. <p>I can let go of my defensive barrier and receive the world with a pair of lenses that are less tinted compared to before. I don’t know if how long it would take for me to let this all go. But I’ve started to let go. And that’s a good thing.</p>
  161. </main>
  162. </article>
  163. <hr>
  164. <footer>
  165. <p>
  166. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  167. <a href="/david/log/" title="Accès au flux RSS">🤖</a> •
  168. <a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
  169. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
  170. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
  171. </p>
  172. <template id="theme-selector">
  173. <form>
  174. <fieldset>
  175. <legend>Thème</legend>
  176. <label>
  177. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  178. </label>
  179. <label>
  180. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  181. </label>
  182. <label>
  183. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  184. </label>
  185. </fieldset>
  186. </form>
  187. </template>
  188. </footer>
  189. <script type="text/javascript">
  190. function loadThemeForm(templateName) {
  191. const themeSelectorTemplate = document.querySelector(templateName)
  192. const form = themeSelectorTemplate.content.firstElementChild
  193. themeSelectorTemplate.replaceWith(form)
  194. form.addEventListener('change', (e) => {
  195. const chosenColorScheme = e.target.value
  196. localStorage.setItem('theme', chosenColorScheme)
  197. toggleTheme(chosenColorScheme)
  198. })
  199. const selectedTheme = localStorage.getItem('theme')
  200. if (selectedTheme && selectedTheme !== 'undefined') {
  201. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  202. }
  203. }
  204. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  205. window.addEventListener('load', () => {
  206. let hasDarkRules = false
  207. for (const styleSheet of Array.from(document.styleSheets)) {
  208. let mediaRules = []
  209. for (const cssRule of styleSheet.cssRules) {
  210. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  211. continue
  212. }
  213. // WARNING: Safari does not have/supports `conditionText`.
  214. if (cssRule.conditionText) {
  215. if (cssRule.conditionText !== prefersColorSchemeDark) {
  216. continue
  217. }
  218. } else {
  219. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  220. continue
  221. }
  222. }
  223. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  224. }
  225. // WARNING: do not try to insert a Rule to a styleSheet you are
  226. // currently iterating on, otherwise the browser will be stuck
  227. // in a infinite loop…
  228. for (const mediaRule of mediaRules) {
  229. styleSheet.insertRule(mediaRule.cssText)
  230. hasDarkRules = true
  231. }
  232. }
  233. if (hasDarkRules) {
  234. loadThemeForm('#theme-selector')
  235. }
  236. })
  237. </script>
  238. </body>
  239. </html>