Pull to refresh
4
0
Александр Чудеснов @AlexChudd

Разработчик доступных интерфейсов

Send message

Желание автоматизировать рутинные проверки, как и готовность контрибьютить в опенсорс - это прекрасно, рад, что вы решили поделиться своим решением с другими.

Не могу, однако, не отметить некоторые моменты, которые меня смутили:

  • Отдельное правило для обработки декоративных изображений — по спеке HTML для этого атрибут alt можно оставить пустым (но все равно указать, так как он обязательный у img), и изображение будет убрано из дерева доступности, jsx-a11y уже это поддерживает и рекомендует делать вместо ручного переопределения ARIA роли в presentation https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/91e39b45ade789c86ae14df869a86b0ea468ed95/src/rules/alt-text.js#L57

  • Проверка aria-labelledby и других атрибутов, использующих ID, на уровне линтера верстки - элементы совсем не обязательно будут в одном файле, плюс реально проверить, что атрибут указывает на нужный нам элемент (а не на другой элемент с таким же ID) можно только в тесте реальной страницы.

В целом идеально было бы найти подходящие по контексту правила в существующем jsx-a11y (или i18next) плагине и попробовать законтрибьютить улучшения туда, так намного больше шансов, что люди этим воспользуются. Готов посодействовать в этом, если есть интерес.

Не знаю, чем конкретно руководствовались дизайнеры стандартной библиотеки компонентов андроида, но полагаю, что основная причина в том, что текстовые поля или вот такие вот spin buttons просто-напросто покрывают больше сценариев использования, и уровень доступности дают наивысший — работают и с тачем, и с клавиатурой, и с чем угодно ещё, и не требуют ни инструкций для пользователя, ни дополнительного дизайна/тестирования.

Хорошо бы иметь возможность добавить циферблат (или вот календарь) в тех редких случаях, когда они действительно нужны (для планирования дат поездок или быстрой установки будильника) в конкретное приложение или как вариант кастомизации, но в большинстве случаев компактный набор полей работает хорошо.

Но на практике VoiceOver не воспринимает списки, если тегу списка не продублировать соответствующую роль: 

Это не совсем правда :) VoiceOver отлично воспринимает списки, таблицы, и многие другие HTML-элементы без дополнительных атрибутов. Логика зашита конкретно в WebKit / Safari, которые убирают семантические роли с элементов, у которых убраны стили, соответствующие ожидаемой семантике. Можно называть такое решение команды разработки Safari спорным, и иногда оно реально требует хаков, как у вас, но сделано это примерно по тем же причинам, из-за которых не озвучиваются теги типа b, i, s — из-за того, что разработчики злоупотребляют некоторыми тегами (с помощью таблиц, например, до сих пор многие верстают имейлы).

Safari, кстати, не единственный браузер, который так делает: большинство браузеров те же таблицы не считает таблицами, если в них нет заголовков (th). Для списков же в том же Safari есть другая эвристика: если список находится внутри навигации (nav), роль сохраняется независимо от стилей

https://www.scottohara.me/blog/2019/01/12/lists-and-safari.html

Человек растянул на несколько тысяч знаков мем “There are No Girls on the Internet” вперемешку с нытьем про «повесточку» в фильмах. Ставлю класс.

Ох, ответ на этот вопрос стоит отдельного поста (или даже нескольких) от людей, которые эту систему сбора и визуализации аналитики строили, и не все из них до сих пор работают в Райке, а я там скорее мимо проходил, поэтому в самых общих чертах опишу, как всё работает.

Начну с самого простого, сложности компонента: это просто выдуманное число наподобие оценки задачи в story points для условной кросс-функциональной команды. Мы примерно, опираясь на опыт нашей платформенной команды, оцениваем, что сделать гибкий и доступный с клавиатуры компонент Select стоит 80 попугаев, а переиспользуемую директиву для закрытия попапов по Escape всего 16. Таким образом, команда, подключившая себе наш готовый компонент, сэкономила эти 16 или 80 попугаев (если возможности компонента не используются на 100%, то меньше).

Про процентное соотношение и список используемых компонентов: мы берем все упоминания наших компонентов в HTML-шаблонах (для Angular, во всяком случае, для React-стека пока эта фича не реализована) и делим на общее количество элементов верстки. Эта метрика не является целевой, и мы не ожидаем, что она где-то будет существенно превышать 50%, верстка по месту — это нормально.

Теперь про то, что есть "фича" вроде той же канбан-доски с точки зрения кода. Райк состоит из большого числа пакетов в формате npm или же pub (пакетного менеджера Dart), и фичи продукта обычно представляют из себя один или несколько пакетов с кодом UI-компонентов и бизнес-логики, которые называются как-нибудь в духе wrike_featurename_app, wrike_featurename_components, etc. Это позволяет верхнеуровнево понять, из каких пакетов / реп та или иная фича состоит. Мы, однако, пошли намного дальше: каждый файл с кодом (или папка целиком) размечается специальной аннотацией, в которой конкретно указано, к какой фиче код относится, без этой аннотации код в мастер не попадает. Попутно это позволяет не держать в уме или каких-то отдельных табличках, кому какой код принадлежит и кто отвечает за разбор инцидентов, информация о владельцах прописана прямо в самой фиче.

Мне не плевать. Не надо, плиз, решать за всех читателей.
Хорошо, что автор статьи сформировал для себя «правила хорошего тона» в чатах и делится ими с сообществом.

Меня очень расстраивает, что изложены эти правила с непроверенной орфографией и пунктуацией, и притом отвратительно канцелярским языком.

Вдобавок ко всему автор умудряется, утверждая о недопустимости оскорбительно-оценочных суждений в одном из правил, использовать эти же самые оскорбительно-оценочные суждения (с совершенно эталонными исключениями для «начальников и людей, от которых вы материально зависимы»), иллюстрируя другое правило.
Пожалуйста, исправьте ссылку на этот чат:
> pro.js.noobs — Чат про JavaScript (для новичков)

К сожалению, овнер этого и других pro.чатов больше не выходит с остальными админами на связь, поэтому мы решили пересоздать его. Чат называется JavaScript Noobs и расположен по адресу t.me/js_noobs_ru

Это был бы очень остроумный комментарий, если бы не тот факт, что разработка ATM была анонсирована на VC за полгода до публикации ролика этих чудаков.

Процессы внесения средств и инкассации максимально автоматизированы, в этом случае намного вероятнее решение проблем клиента, если они возникают. Пополнение через [оператора денежных переводов] или кассу в отделении [банка какого-нибудь другого цвета] за комиссию, возможно, ощущается более надежным из-за присутствия за стеклом живого материально ответственного человека, но не всегда таковым является.

Так почему зарёкся-то, раз всё вернули?
Смотрели/думали/делали, подробности будут в докладе Димы Королёва на moscowcss 15 мая.
Не путаете с Shutdown'ом? Restart как раз полностью перезагружает систему.
все решается введением кармы и модерацией
Правильно сделали, что не продались. И дело тут не в деньгах (хотя и тут не прогадали), а в том, что Dropbox стал бы эксклюзивной фичей Apple-экосистемы, и остальным бы вообще ничего не досталось.
Но Live Mesh — это надстройка над SkyDrive.
У меня или у моих друзей эппловских компьютеров нет, но я почему-то это знаю. Думал, что на Хабре это нормально.
Мне кажется, что грандиозную презентацию с трансляцией не стали устраивать именно поэтому.
1
23 ...

Information

Rating
7,236-th
Date of birth
Registered
Activity

Specialization

Frontend Developer, UI Accessibility Engineer
Senior
Semantic layout
React
TypeScript