<?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: Hidde de Vries</title>
    <description>The latest articles on DEV Community by Hidde de Vries (@hidde).</description>
    <link>https://dev.to/hidde</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%2F407439%2Fd33fa76c-56b8-455b-8a4e-b341c850e508.jpeg</url>
      <title>DEV Community: Hidde de Vries</title>
      <link>https://dev.to/hidde</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hidde"/>
    <language>en</language>
    <item>
      <title> Minimum Viable Data Collection </title>
      <dc:creator>Hidde de Vries</dc:creator>
      <pubDate>Fri, 12 Jun 2020 08:22:51 +0000</pubDate>
      <link>https://dev.to/hidde/minimum-viable-data-collection-2efj</link>
      <guid>https://dev.to/hidde/minimum-viable-data-collection-2efj</guid>
      <description>&lt;p&gt;The gist of the EU's &lt;a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation"&gt;General Data Protection Regulation&lt;/a&gt; (GDPR) is simple: protect citizens from data-hungry corporations. It gives people control over how their personal data is collected, as it requires website-owners to stick to a set of rules when dealing with people's data (I'm paraphrasing). In short: it gives &lt;em&gt;rights&lt;/em&gt; to citizens and &lt;em&gt;duties&lt;/em&gt; to (digital) businesses.&lt;/p&gt;

&lt;p&gt;Most websites in Europe have taken action to comply with parts of their duties, by implementing cookie consent banners. In the least bad scenario, the response of such website-owners was: let's find out which cookies we set and which ones we allow others to set. Then ask users for permission and set cookies if permitted. So, basically,  business as usual, but with a banner for explanation.&lt;/p&gt;

&lt;p&gt;Of course, cookies themselves are not the problem per se. It is the broader strategy, which hardly requires cookies. It is to try and get as much information from users as possible and combining everything you can find, to create detailed profiles of website visitors. This is enabled by  and helps enable &lt;a href="https://shoshanazuboff.com/book/about/"&gt;surveillance capitalism&lt;/a&gt;, which threatens our societies and people in many ways.&lt;/p&gt;

&lt;p&gt;What if website-owners used the logical opposite of that strategy? What if our industry championed… &lt;strong&gt;Minimum Viable Data Collection&lt;/strong&gt;? This strategy would collect the minimum information from users. Maybe it would actively destroy and anonymise any &lt;a href="https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en"&gt;personal data&lt;/a&gt;. You would find out what kind of tracking you &lt;em&gt;do&lt;/em&gt; or &lt;em&gt;enable&lt;/em&gt; (via third-parties) and reduce it. Ideally to zero. This strategy respects citizen's rights much better. &lt;/p&gt;

&lt;p&gt;Does this idealist blogger need more realism? Well, maybe. Let's still explore this idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  The current state of affairs
&lt;/h2&gt;

&lt;p&gt;How do websites currently deal with their privacy-related obligations? Well, many ask permission to set cookies. Some use pointy formulations like ‘would you mind some cookies?’, completed with a picture of a cookie jar. Oatly, a company that makes vegan milk (yay!), is just of many going down this route:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Cookies go nicely with oat drinks. As it happens, the digital kind do too. So is it okay with you if we use cookies on this site?”&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;These are sometimes funny and original, but, also, they indicate these companies do not see online tracking as a serious problem. That's understandable, it's a complex problem, maybe we can't expect marketeers to do their homework. But isn't this too important to be turned into a joke?&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do websites track?
&lt;/h2&gt;

&lt;p&gt;The amount of cookie banners in the wild may lead us to conclude: websites really need tracking to function. Yet they don't. So why &lt;em&gt;do&lt;/em&gt; websites track?&lt;/p&gt;

&lt;p&gt;From the perspective of surveillance capitalist companies, the need for tracking is clear: their business is built upon it. Again, see Shoshana Zuboff's &lt;a href="https://shoshanazuboff.com/book/about/"&gt;The Age of Surveillance Capitalism&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What I'm interested in: why do website owners wilfully &lt;em&gt;welcome&lt;/em&gt; bad trackers on their web properties? Surely, it would be easier to comply with data collection regulations by not collecting data at all? Minimum Viable Data Collection seems to be the most straightforward solution (&lt;a href="https://en.wikipedia.org/wiki/Occam%27s_razor"&gt;Ockham's razor&lt;/a&gt;!). &lt;/p&gt;

&lt;p&gt;I think these are some of the common reasons why sites don't focus on minimising data collection yet: &lt;/p&gt;

&lt;h3&gt;
  
  
  Unaware of the harm
&lt;/h3&gt;

&lt;p&gt;Some organisations may not have read up the consequences of using whatever part of their tools come with naughty trackers. This is not a valid excuse, but it may explain a majority of cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  User research
&lt;/h3&gt;

&lt;p&gt;Often, website owners want to track users to inform their design decisions. Through A/B tests (which &lt;a href="http://drjasondavis.com/2013/09/12/eight-ways-youve-misconfigured-your-ab-test/"&gt;aren't trivial to get right&lt;/a&gt;, or other &lt;a href="https://www.nngroup.com/articles/quantitative-user-research-methods/"&gt;quantitative UX research&lt;/a&gt; on live websites.&lt;/p&gt;

&lt;h3&gt;
  
  
  Social media
&lt;/h3&gt;

&lt;p&gt;A lot of websites embed content from third-parties, like videos from YouTube. Some also include buttons that allow social sharing, like &lt;em&gt;Tweet This&lt;/em&gt; buttons. All of these  come with tracking code more often than not. It's &lt;a href="https://ia.net/topics/sweep-the-sleaze-reactions"&gt;unclear if people actually use them (but it seems some do)&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data collection for marketing
&lt;/h3&gt;

&lt;p&gt;Some websites, especially those in the business of sales (like hotel or flight booking sites), collect user data so that they can make better (automated) decisions on offers and pricing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instead of maximising consent, minimise collection
&lt;/h2&gt;

&lt;p&gt;The question all website owners should be asking, is: do we really, really need these trackers to exist on our pages? Can’t we do the things we want to do without trackers?&lt;/p&gt;

&lt;p&gt;I think in many cases we can: &lt;/p&gt;

&lt;h3&gt;
  
  
  Unaware of the harm
&lt;/h3&gt;

&lt;p&gt;More awareness is needed. As people who make websites and know how tracking works, we have to tell our clients and bosses.&lt;/p&gt;

&lt;h3&gt;
  
  
  User research
&lt;/h3&gt;

&lt;p&gt;Maybe prioritise qualitative research? Or urge vendors of this software to design privacy-first?&lt;/p&gt;

&lt;h3&gt;
  
  
  Social media
&lt;/h3&gt;

&lt;p&gt;Social sharing buttons could just be regular links (&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;) with information passed via parameters. Video embeds could be activated only when clicked.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data collection for marketing
&lt;/h3&gt;

&lt;p&gt;Maybe just don't? If trust is good for business, &lt;a href="https://www.darkpatterns.org/types-of-dark-pattern"&gt;dark patterns&lt;/a&gt; are not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The no tracking movement
&lt;/h2&gt;

&lt;p&gt;Excitingly, some websites choose to avoid or minimise tracking already.&lt;/p&gt;

&lt;h3&gt;
  
  
  The mission statement
&lt;/h3&gt;

&lt;p&gt;Privacy and accessibility expert Laura Kalbag describes why she chose not to have trackers on her site:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For me, “no tracking” is both a fact and a mission statement. I’m not a fan of tracking. (…) That means that you will not find any analytics, article limits or cookies on my site. You also won’t find any third-party scripts, content delivery networks or third-party fonts. I won’t let anyone else track you either.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(From &lt;a href="https://laurakalbag.com/i-dont-track-you/"&gt;I don’t track you&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Laura was inspired by designer and front-end engineer Karolina Szczur, whose &lt;a href="https://thefox.is"&gt;personal website&lt;/a&gt; sports ‘No tracking’ in the footer. So cool, and very thoughtful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dutch public broadcasters go cookie-less
&lt;/h3&gt;

&lt;p&gt;I was pleasantly surprised to see STER, the department that runs advertising for Dutch public broadcasters on tv, radio and internet, decided to &lt;a href="https://www.ster.nl/nieuws/ster-start-nieuwe-jaar-volledig-cookieloos/"&gt;go cookieless for all of their web advertising in 2020&lt;/a&gt;. Instead of profiling users, they profile their own content. STER classifies their content into 23 “contexts” (like “sport/fitness” and “cooking/food”). They then allow advertisers to choose in which context they want to promote their brand. Cool, they can be in the advertising business, offer contextual advertising spots, without the need for tracking all the things.&lt;/p&gt;

&lt;h3&gt;
  
  
  NRC: “our journalism is our product”
&lt;/h3&gt;

&lt;p&gt;Dutch newspaper NRC also stopped using third party cookies, and takes a clear stance:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Our journalism is our product. You are not. So we do not sell your data. Never. To nobody. We do not collect data for collection's sake. We only save data with a tangible goal, like dealing with your subscription.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From &lt;a href="https://www.nrc.nl/privacy/"&gt;NRC privacy&lt;/a&gt; (translation mine)&lt;/p&gt;

&lt;p&gt;I like the stance, but should note my tracker blocker still has to filter 5 known trackers out when I read the news (also goes for paying users).&lt;/p&gt;

&lt;h3&gt;
  
  
  New York Times: less targeting, more revenue
&lt;/h3&gt;

&lt;p&gt;Last year, The New York Times swapped behavioural targeting for targeting based on location and context. This did not decrease their revenue. Jean-Christophe Demarta, Senior Vice President for global advertising at the paper: “We have not been impacted from a revenue standpoint, and, on the contrary, our digital advertising business continues to grow nicely.”&lt;/p&gt;

&lt;p&gt;Digiday editor Jessica Davies: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The publisher’s reader-revenue business model means it &lt;strong&gt;fiercely guards its readers’ user experience&lt;/strong&gt;. Rather than bombard readers with consent notices or risk a clunky consent user experience, it decided to drop behavioral advertising entirely.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(Emphasis mine; both quotes from: &lt;a href="https://digiday.com/media/gumgumtest-new-york-times-gdpr-cut-off-ad-exchanges-europe-ad-revenue/"&gt;After GDPR, The New York Times cut off ad exchanges in Europe - and kept growing ad revenue&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Again, my tracker blocker found 3 trackers when I visited &lt;code&gt;nytimes.com&lt;/code&gt; this morning. &lt;/p&gt;

&lt;p&gt;For large scale websites, it seems minimising data collection is easier said than done. Currently, there may not be any large sites that are truly tracker-free (besides &lt;a href="https://wikipedia.org"&gt;Wikipedia&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;It is a concept for mostly inspirational purposes, but really… I think &lt;em&gt;minimum viable data collection&lt;/em&gt; can be a great strategy for businesses who want to comply with the duties of privacy regulations. The advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you need to build less complex cookie consent mechanisms&lt;/li&gt;
&lt;li&gt;users stay on your site as they are less frustrated&lt;/li&gt;
&lt;li&gt;you can serve customers that use tracking protection (see below)&lt;/li&gt;
&lt;li&gt;your company gets hundreds of internet points&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To users who need to browse today's web, I strongly recommend using a browser with strong tracking protection, like Firefox (has &lt;a href="https://support.mozilla.org/en-US/kb/enhanced-tracking-protection-firefox-desktop"&gt;Enhanced Tracking Protection&lt;/a&gt;) or Safari (has &lt;a href="https://www.apple.com/safari#security"&gt;Intelligent Tracking Prevention&lt;/a&gt;. For nerds who want to read more, check out the intelligent tracking posts on the WebKit blog, including &lt;a href="https://webkit.org/blog/9661/preventing-tracking-prevention-tracking/"&gt;Preventing Tracking Prevention Tracking&lt;/a&gt; or the &lt;a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Privacy/Tracking_Protection"&gt;Firefox Tracking Protection section on MDN&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>privacy</category>
    </item>
    <item>
      <title>Meaning without markup: Accessibility Object Model</title>
      <dc:creator>Hidde de Vries</dc:creator>
      <pubDate>Fri, 12 Jun 2020 08:19:18 +0000</pubDate>
      <link>https://dev.to/hidde/meaning-without-markup-accessibility-object-model-3hgf</link>
      <guid>https://dev.to/hidde/meaning-without-markup-accessibility-object-model-3hgf</guid>
      <description>&lt;p&gt;Meaningful markup is essential for accessibility, because it brings semantics. In short, it tells the browser what things are. Proposals for the Accessibility Object Model include a new way to convey semantics: without markup, directly in JavaScript. In this post, we will look at the proposals and their current status.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond the scope of HTML
&lt;/h2&gt;

&lt;p&gt;To get a more detailed overview of how the quality of our markup impacts end users, see my previous post &lt;a href="https://dev.to/en/blog/2019-06-27-how-accessibility-trees-inform-assistive-tech"&gt;How accessibility trees inform assistive tech&lt;/a&gt;. To summarise: our markup gets used to construct accessibility trees, which inform assistive technologies (AT) about what things are on our pages. With this information, AT can offer features like ‘browse by heading’ and advanced table navigation.&lt;/p&gt;

&lt;p&gt;There are plenty of semantic elements to choose from when we build a component. &lt;a href="https://html.spec.whatwg.org/dev/semantics.html#semantics"&gt;The set of HTML elements&lt;/a&gt; is enormous. Even if you build a new thing for which no semantic element exists, custom components that &lt;a href="https://dev.to/en/blog/2017-10-19-web-components-as-compositions-of-native-elements"&gt;combine existing HTML elements&lt;/a&gt; let you have at least some of your semantics for free. &lt;/p&gt;

&lt;p&gt;Sometimes the set of HTML elements really does not cut it. You’ve created an interface concept for which reasonably no semantic tag exists in HTML. This is where WAI-ARIA comes in: it lets you provide accessibility-relevant information to the browser using standardised attributes, including semantics, states and labels. &lt;/p&gt;

&lt;p&gt;Some examples of effective ARIA:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;with &lt;code&gt;aria-expanded="true|false"&lt;/code&gt;, you can set the state of a button that expands/collapses content&lt;/li&gt;
&lt;li&gt;with &lt;code&gt;role="alert"&lt;/code&gt; you can turn an element into a live region: when content is updated, the update is announced to AT users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also ARIA that can turn elements into elements for which there are already existing HTML equivalents, such as buttons and links. This is not recommended, because apart from changing semantics, it also makes affordances like keyboard behavior the developer’s responsibility. For instance, instead of &lt;code&gt;&amp;lt;span role="button"&amp;gt;&lt;/code&gt;, it is much safer to use &lt;code&gt;&amp;lt;button type="button"&amp;gt;&lt;/code&gt; and get the keyboard behaviour for free. In 2019, styling native buttons is no longer a problem. Certainly not one that warrants accessibility bugs like reduced keyboard support. &lt;/p&gt;

&lt;h2&gt;
  
  
  How AOM will help
&lt;/h2&gt;

&lt;p&gt;So, let’s say you are making something that passes the first rule of ARIA (paraphrased: “don’t use ARIA if it is not needed”). You could use markup for this: just add the appropriate attributes. Once the Accessibility Object Model is implemented, you could also apply ARIA without markup.&lt;/p&gt;

&lt;p&gt;The proposed &lt;a href="https://github.com/WICG/aom/"&gt;Accessibility Object Model&lt;/a&gt; (AOM) will be “a JavaScript API to allow developers to modify (and eventually explore) the accessibility tree for an HTML page”. In other words: it gives developers direct access to the accessibility tree. In a way, that’s a bit like what Service Workers do for the network and Houdini for style: give developers control over something that was previously done only by the browser. All in the name of an &lt;a href="https://extensiblewebmanifesto.org/"&gt;extensible web&lt;/a&gt;: control over these low-level features enables developers to experiment and create new things without waiting for the standards process. Perhaps, with AOM, people could define Web Components that don’t exist in HTML just yet. &lt;/p&gt;

&lt;p&gt;Having access to low-level features like these, gives developers power (yay!). But at the same time, they also give developers more direct responsibility, regarding aspects like security, performance and accessibility. It can be tricky and time-consuming to implement best practices and fulfill all those responsibilities. Admittedly, is it easier, and often sensible, to use browser defaults. Extending the web like this is probably most practical  for teams that are able to invest the time.&lt;/p&gt;

&lt;p&gt;AOM is currently developed by people from across Mozilla, Google and Apple. They’ve defined four phases for the project. Let’s look at some of the plans and how they help.&lt;/p&gt;

&lt;h3&gt;
  
  
  No more ‘sprouting’
&lt;/h3&gt;

&lt;p&gt;Interfaces with a lot of advanced controls can quickly become a sea of attributes, which &lt;a href="https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-autonomous-drawbacks"&gt;the HTML spec calls “sprouting”&lt;/a&gt;. Even a simple disabled button might require &lt;code&gt;role&lt;/code&gt;, &lt;code&gt;aria-label&lt;/code&gt; and &lt;code&gt;aria-disabled&lt;/code&gt; attributes. That’s a lot of attributes, not just to add, but also to maintain (in markup). To solve this, AOM will let developers set accessibility attributes of an element directly in JavaScript.&lt;/p&gt;

&lt;p&gt;For example, to set &lt;code&gt;aria-expanded&lt;/code&gt; on an element, you could do it on the element directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ariaExpanded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Previously, we could only set this attribute to expanded by switching the value of the attribute in the markup. With AOM, the set of ARIA attributes will also exist as properties that DOM nodes can have, so called &lt;a href="https://heycam.github.io/webidl/#idl-attributes"&gt;IDL&lt;/a&gt; (Interface Definition Language)  attributes. The IDL attributes are said to reflect attributes in the markup. In the above example, that means that upon setting &lt;code&gt;el.ariaExpanded&lt;/code&gt; to true, an attribute (if it does not yet exist) is added to &lt;code&gt;el&lt;/code&gt; and it is set to &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The mapping of ARIA attributes to IDL attributes is defined in the &lt;a href="https://www.w3.org/TR/wai-aria-1.2/#idl-interface"&gt;ARIA 1.2 specification&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note that in applications that have some form of virtual DOM, like those built with frameworks including React and Vue, best practices prescribe “don’t touch the DOM, let the framework deal with DOM changes”. In those applications, defining semantics in the markup or a template will probably still be the go-to approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Relationships without IDs
&lt;/h3&gt;

&lt;p&gt;In HTML, the &lt;code&gt;id&lt;/code&gt; attribute uniquely identifies an element. Form labels make use of this: we associate &lt;code&gt;label&lt;/code&gt; attributes with their corresponding input by pointing the &lt;code&gt;label&lt;/code&gt;’s &lt;code&gt;for&lt;/code&gt; to the &lt;code&gt;input&lt;/code&gt;’s &lt;code&gt;id&lt;/code&gt;. In ARIA, there are a number of properties that need to point to an &lt;code&gt;id&lt;/code&gt; (or multiple &lt;code&gt;id&lt;/code&gt;s), like &lt;code&gt;aria-controls&lt;/code&gt; (&lt;em&gt;this element controls that element&lt;/em&gt;) and &lt;code&gt;aria-describedby&lt;/code&gt; (&lt;em&gt;this element is described by this element/these elements&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;With AOM, one can associate elements with other elements directly, by assigning them like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;formField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ariaLabelledBy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;formLabel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Non-DOM nodes in the accessibility tree
&lt;/h3&gt;

&lt;p&gt;In some very specific cases, a web application may contain content that does not exist as DOM nodes. For instance: drawing a train station’s map of available elevators on a &lt;code&gt;canvas&lt;/code&gt;. Each elevator has a label, and also a informational popup that can be expanded. This information would currently be lost to assistive technologies. With AOM, you could define an accessibility tree containing all the labels and expanded states. These would then be conveyed to AT, so that users can understand them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Good for testing
&lt;/h3&gt;

&lt;p&gt;The AOM also aims to bring reading accessibility attributes. The intended use case: testing! With AOM, you would be able to access the names, roles and states of your HTML nodes directly in tests.&lt;/p&gt;

&lt;p&gt;Tests can already access an element’s ARIA information by reading out attributes today. With AOM, they would read out what something has actually computed to in the browser’s accessibility tree. This functionality has the potential to  make tests better.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility Events
&lt;/h3&gt;

&lt;p&gt;In JavaScript, we have a number of useful events that let us act on user input like clicks, keyboard presses and touch. In some cases, there is a discrepancy between such events and input from users of assistive technologies.&lt;/p&gt;

&lt;p&gt;In her talk &lt;a href="https://www.youtube.com/watch?v=ZMZMMuXRFcE"&gt;Web Components and the AOM&lt;/a&gt; at JSConf Asia 2019, Léonie Watson explained that actions like “swipe up” and “swipe down” mean different things to users of VoiceOver on iOS:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When you have a screenreader running on a touch screen, the flick up and flick down gestures [developers] would probably use for adjusting the value of a slider, are already used for screenreader specific commands.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because screenreader users already use  “swipe up” and “swipe down” gestures to trigger screenreader specific commands, it would be impossible for them to use the same gestures for something else in the app you’re developing. &lt;/p&gt;

&lt;p&gt;This is why AOM aims to bring events that are specific to assistive technologies, so that AT can design consistent ways to let the user perform certain actions. Apple calls these &lt;a href="https://support.apple.com/en-us/HT209655"&gt;semantic events&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Some examples of accessibility events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;increment&lt;/code&gt; and &lt;code&gt;decrement&lt;/code&gt; for going to the next item in a custom slider (like using up and down arrow keys)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;dismiss&lt;/code&gt; for closing a modal overlay (like pressing &lt;code&gt;ESC&lt;/code&gt; key)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a large privacy concern associated with AT-specific events: malicious site owners could use them to detect if someone has a visual or mobility impairment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current status
&lt;/h2&gt;

&lt;p&gt;The specifications for AOM are still in progress, and so are implementations. Various browsers have implemented (parts of) AOM).  The part that seems to have most implementations is attribute reflection. This feature works for most attributes in Chrome and Edge (enable via &lt;code&gt;about:config&lt;/code&gt;) and Safari (pick ‘Accessibility Object Model’ from Experimental Features setting in Developer menu). There is currently no AOM support not in Firefox. &lt;/p&gt;

&lt;p&gt;If you look at the &lt;a href="https://w3c-test.org/wai-aria/idlharness.window.html"&gt;IDL tests&lt;/a&gt; with AOM flags enabled, you can see how much your browser supports of the attribute reflection part of the specification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Simple solutions are often the easiest way to get your product to work for as many people as possible. For example, when for a date of birth field, you decide against a fancy, complex datepicker and rely on a clearly labelled &lt;code&gt;input[type=text]&lt;/code&gt; instead. Standard, boring HTML goes a long way. Chances are it will work well for users and make your accessibility auditors happy. But if your product has custom controls that just don't exist in HTML, you will want to convey the right accessibility properties to assistive technologies. &lt;/p&gt;

&lt;p&gt;AOM is an interesting new proposal in which accessibility information gets its own APIs beyond existing DOM methods like &lt;code&gt;setAttribute&lt;/code&gt; and  &lt;code&gt;getAttribute&lt;/code&gt;. Those methods set and get out values that compute into properties of accessibility trees, but they don’t deal with those properties directly. It’s a subtle difference. With direct access to accessibility info, we could set accessibility properties without markup, we could  create accessibility trees for things that don’t exist in the DOM (like for contents of &lt;code&gt;canvas&lt;/code&gt; elements) and testing accessibility may improve.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>javascript</category>
      <category>html</category>
    </item>
  </channel>
</rss>
