Книга «Стек MEAN. Mongo, Express, Angular, Node»

Книга «Стек MEAN. Mongo, Express, Angular, Node»

Обычно при веб-разработке на всех уровнях стека используются разные языки программирования. База данных MongoDB, фреймворки Express и AngularJS и технология Node.js вместе образуют стек MEAN — мощную платформу, на всех уровнях которой применяется всего один язык: JavaScript. Стек MEAN привлекателен для разработчиков и бизнеса благодаря простоте и экономичности, а конечные пользователи любят MEAN-приложения за их скорость и отзывчивость.

JavaScript достиг зрелости. Благодаря ему теперь можно создать веб-приложение от начала до конца с помощью всего одного языка программирования. Стек MEAN включает в себя лучшие в своем классе технологии в данной области. В качестве БД вы получаете MongoDB, в качестве серверного фреймворка веб-приложений — Express, в качестве клиентского фреймворка — AngularJS, а в качестве серверной платформы — Node.

Эта книга познакомит вас с каждой из этих технологий, а также с тем, как заставить их работать вместе в качестве стека. На протяжении этой книги мы создаем работающее приложение, сосредотачиваясь по очереди на каждой технологии, наблюдая, как она вписывается в общую архитектуру приложения. Так что эта книга ориентирована на практику, на то, чтобы вы освоились со всеми перечисленными технологиями и их совместным использованием.

Через всю книгу красной нитью проходит понятие «рекомендуемое решение». Издание — своеобразный трамплин для создания с помощью стека MEAN замечательных приложений, так что в нем мы концентрируемся на выработке хороших привычек, умения делать все правильно и планировать все заранее.

Эта книга не учит тому, как использовать HTML, CSS или базовый JavaScript, — предполагается, что читатель уже знаком с ними. Она включает очень краткое изложение основ CSS-фреймворка Twitter Boo tstrap. Кроме того, бонусом к ней идет отличное приложение по JavaScript — его теории, рекомендуемым решениям, советам и глюкам. Не помешает заглянуть туда пораньше.

Дорожная карта
Эта книга приглашает вас в путешествие по 11 главам.
Глава 1 рассматривает преимущества изучения разработки full-stack и анализирует компоненты стека MEAN.
Глава 2 основывается на приобретенном знании компонентов и обсуждает варианты их совместного использования для создания различных вещей.
Глава 3 знакомит с Express и помогает быстро освоить создание и настройку проекта MEAN.
Глава 4 дает более глубокие познания в Express посредством построения статической версии приложения.
Глава 5 использует уже имеющиеся знания о приложении и применяет MongoDB и Mongoose для проектирования и построения требующейся нам модели данных.
Глава 6 охватывает преимущества и процессы создания API данных. Мы создадим API REST с помощью Express, MongoDB и Mongoose.
Глава 7 связывает API REST с приложением путем его получения из нашего статического приложения Express.
Глава 8 является введением в стек AngularJS: мы увидим, как использовать его в создании компонентов для существующей веб-страницы, в том числе как обращаться к API REST для получения данных.
Глава 9 излагает основы создания одностраничных приложений с помощью Angular, демонстрируя разработку удобного в сопровождении модульного масштабируемого приложения.
Глава 10 базируется на материале главы 9, в ней продолжается разработка одностраничного приложения. При этом излагаются некоторые важные концепции и повышается сложность приложения Angular.
Глава 11 затрагивает все части стека MEAN, так как связана с добавлением в приложение аутентификации, позволяющей пользователям регистрироваться и заходить в приложение.

Отрывок из книги
2.3. Разработка гибкой архитектуры MEAN
Если работа с AngularJS похожа на обладание Porsche, то остальная часть стека соответствует наличию в гараже дополнительного Audi RS6. Множество людей обратят внимание на спортивную машину перед домом и не заметят автомобильуниверсал в гараже. Но если все-таки зайти в гараж и полюбопытствовать, то окажется, что под его капотом двигатель Lamborghini V10. Этот автомобиль-универсал может предложить гораздо больше, чем кажется на первый взгляд!

Использование MongoDB, Express и Node.js вместе только для создания API REST подобно использованию Audi RS6 лишь для того, чтобы возить ребенка в школу. И они и он обладают отличными возможностями и выполнят эту работу очень хорошо, но при этом способны на большее.

Мы уже кратко обсуждали, что можно получить с помощью этих технологий, в главе 1, но вот несколько отправных точек.

— MongoDB может хранить и обрабатывать потоковым образом двоичную информацию.
— Node.js особенно хорош для подключений в режиме реального времени с помощью веб-сокетов.
— Express — фреймворк веб-приложений со встроенными применением шаблонов,
маршрутизацией и управлением сеансами.

Это далеко не полный список, и я определенно не смогу рассмотреть все возможности всех этих технологий в данной книге. Мне бы понадобилось несколько книг для этого! Все, что я могу сделать, — привести простой пример и показать, как можно соединить воедино части стека MEAN для проектирования наилучшего решения.

2.3.1. Требования к движку блога
Взглянем на уже знакомую нам идею движка блога и посмотрим, как можно наилучшим образом спроектировать стек MEAN для его создания.

Движок блога обычно включает две части. Это ориентированная на публику интерфейсная часть, выдающая читателям статьи, которые, хочется надеяться, будут перепродаваться и распространяться по Интернету. У движка блога имеется также интерфейс администратора, в который владельцы блогов входят для написания новых статей и управления своими блогами. Некоторые из основных характеристик этих двух частей демонстрирует рис. 2.2.


Глядя на списки на рис. 2.2, легко увидеть высокий уровень конфликтования между характеристиками этих двух частей. Вам нужна насыщенная контентом и слабоинтерактивная среда для статей блогов и богатая возможностями высокоинтерактивная среда для административного интерфейса. Статьи блога должны быть быстрозагружаемыми — для снижения показателя отказов, тогда как административная область должна быстро реагировать на действия пользователя и вводимые им данные. Наконец, пользователи обычно задерживаются на записи в блоге ненадолго, но могут захотеть поделиться ею с другими, тогда как административный интерфейс необщедоступен и отдельный пользователь может работать в нем длительное время.

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

Так что же делать? Возможно, самым важным будет удержание читателей блога — если их впечатления от вашего блога были негативными, они просто не вернутся и не будут делиться записями. Если блог не привлекает, то блогер просто прекратит в него писать или перейдет на другую платформу. Опять-таки медленный и плохо реагирующий административный интерфейс станет причиной того, что владельцы блогов начнут «убегать с корабля». Как можно добиться того, чтобы все были довольны, а движок блога был при деле?

2.3.2. Архитектура движка блога
Ответ заключается в том, что не надо искать одно решение на все случаи жизни. Пусть у вас будет два приложения. У вас есть ориентированный на публику контент, который нужно доставлять непосредственно с сервера, и интерактивный необщедоступный административный интерфейс, который вы хотите выполнить в виде SPA. Давайте рассмотрим каждое из этих приложений по отдельности, начав с административного интерфейса.

Административный интерфейс: SPA на AngularJS
Мы уже обсуждали, что для административного интерфейса идеально подходило бы SPA, построенное на основе AngularJS. Так что архитектура этой части движка будет выглядеть очень знакомо: API REST, построенный на MongoDB, Express и Node.js, с одностраничным приложением на AngularJS в интерфейсной части. Рисунок 2.3 демонстрирует, как это будет выглядеть.


Записи в блоге: что делать?
Если задуматься о записях в блоге, то все оказывается несколько сложнее.

Представьте себе стек MEAN только как одностраничное приложение на AngularJS, обращающееся к API REST, и вы окажетесь в дураках. Вы можете в любом случае создать интерфейсную часть в виде SPA, раз хотите использовать JavaScript и стек MEAN. Но это не лучшее решение. Вы можете счесть, что стек MEAN просто не подходит для данного случая, и выбрать другой стек технологий. Но вам ведь этого не надо! Вам нужен просто сплошной JavaScript.

Так что взглянем на стек MEAN повнимательнее и подумаем обо всех его компонентах. Вы знаете, что Express — фреймворк веб-приложений. Вы знаете, что Express может использовать шаблонизаторы для создания HTML-кода на сервере. Вы знаете, что Express может использовать маршрутизацию URL и паттерны MVC. Вам стоит задуматься: а не в Express ли заключается ответ?

Записи в блоге: используем Express
В данном сценарии с блогом доставка HTML-кода и контента непосредственно с сервера — именно то, что вам нужно. Express выполняет это особенно хорошо, даже с самого начала обеспечивает выбор шаблонизаторов. HTML-содержимое потребует данные из БД, так что вы снова используете для этого API REST (подробнее мы рассмотрим, почему это наилучший подход, в следующем подразделе). Основу такой архитектуры демонстрирует рис. 2.4.


Вы получаете подход, при котором можете использовать стек MEAN или по крайней мере его часть для доставки основанного на базе данных контента непосредственно от сервера к браузеру. Но этим дело не ограничивается. Стек MEAN еще более гибок.

Записи в блоге: используем стек полнее
Вы видели приложение Express, выдающее контент блога посетителям. Если вам нужно, чтобы посетители могли заходить на сайт, возможно, для добавления комментариев к статьям, вам необходимо отслеживать сеансы пользователей. Для этого можно использовать MongoDB вместе с вашим приложением на Express.

Можно также рядом с вашими сообщениями в блоге динамически отображать какие-либо данные, например связанные сообщения или поисковое поле с автодополнением, опережающим ввод с клавиатуры. Их можно реализовать с помощью AngularJS. Помните: AngularJS предназначен не только для SPA, его можно использовать также для добавления каких-нибудь интерактивных данных на страницу, которая иначе была бы статической. Рисунок 2.5 показывает, как эти необязательные части MEAN добавляются в архитектуру компонента блога.


Теперь вы можете организовать взаимодействие приложения, выдающего посетителям контент и основанного на полном стеке MEAN, с вашим API REST.

Движок блога: гибридная архитектура
На этой стадии у нас имеется два отдельных приложения, использующих API REST. Если немного спланировать, это может быть общий API REST, применяемый обеими частями приложения. Целостность архитектуры с одним API REST, взаимодействующим с двумя приложениями клиентской части, демонстрирует рис. 2.6.


Это простой пример демонстрации возможности соединения разнообразных частей стека MEAN в различные архитектуры для удовлетворения требований, которые предъявляет к вам проект. Возможные варианты ограничиваются лишь вашим знанием компонентов и изобретательностью при их сочетании. Не существует какой-то одной правильной архитектуры для стека MEAN.

» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок

Для Хаброжителей скидка 25% по купону — Стек

На рынке корову мужик продавал

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

Итак, задача вполне себе житейская.

Некий Мужик занимается перепродажей коров: он скупает их за фиксированную небольшую цену a рублей у местного населения и пытается продать с наценкой посетителям рынка. Предположим для простоты, что покупатели по своей платежеспособности делятся на n классов, и, что любому, подошедшему к Мужику покупателю из k -го класса, он продает любую из имеющихся у него коров с наценкой xk-тое рублей. Будем считать, что появление покупателя каждого класса описывается пуассоновским процессом с неким, характерным для этого класса нагрузочным параметром lk-тое. Если в момент появления покупателя у Мужика нет коров, то первый не становится в очередь, а удаляется восвояси и обратно уже не возвращается. Задачи бы попросту не было, если бы не два правдоподобных условия:

1) Каждая корова, купленная Мужиком у населения проедает за единицу времени корма на u рублей, поэтому держать большой запас коров не выгодно;
2) Мужик может всегда отправить с попутчиком в деревню просьбу привести еще коров, однако выполнение этой просьбы хотя и бесплатно, но требует T времени;
3) Ввиду сделанных оговорок, Мужик может и не продать корову, если их у него мало, а шанс встретить клиента побогаче достаточно велик или наоборот продать в убыток из излишков запаса — лишь бы зря не кормить.

Какова оптимальная на длительном периоде стратегия Мужика при почти бесконечном начальном капитале?

Как работают ИТ-специалисты. Павел Клепинин, ИТ-директор центра НИПИГАЗ

Как работают ИТ-специалисты. Павел Клепинин, ИТ-директор центра НИПИГАЗ

Мы продолжаем расспрашивать специалистов о режиме труда и отдыха, профессиональных привычках, об инструментарии, который они используют, и многом другом. Будет интересно выяснить, что их объединяет, в чем они противоречат другу другу. Возможно, их ответы помогут выявить какие-то общие закономерности, полезные советы, которые помогут многим из нас.

Сегодня наш гость — Павел Сергеевич Клепинин, директор по ИТ НИПИГАЗа, ведущего российского центра по управлению проектированием, поставками, логистикой и строительством, входящего в СИБУР.

В 2003 году окончил Московский государственный университет им. М. В. Ломоносова по специальности «Управление проектами».

С 2001 года работал в ЗАО «Фронстеп», где прошел путь от стажера до заместителя генерального директора по консалтингу. С 2008 года по 2012 год занимал должность директора по ИТ в АО «Автодизель» (Ярославский моторный завод — ЯМЗ). В 2013 начал работать в Функции ИТ группы СИБУР, с конца 2014 года по лета 2016 работал ИТ-директором группы.

Летом 2016 года был назначен на должность ИТ-директора НИПИГАЗа.

  • Учредитель клуба ИТ-директоров «я-ИТ-ы».
  • Разработчик общероссийского профессионального стандарта «Системный администратор».
  • Руководитель регионального проекта по созданию рейтинга ИТ-компаний глазами заказчиков «Череда».
  • Член правления Союза ИТ-директоров России.


Чем занимаетесь в компании?

Заталкиваю инновационную автоматизацию в компанию с целью повысить производительность труда, параллельно образовывая/просвещая бизнес-подразделения в ИТ. Если же не хотят просвещаться – отстаю, пусть сидят круглосуточно в Excel и прочих продуктах Майкрософта. А я переключаюсь на тех, кто более заинтересован в повышении эффективности своей работы за счет ИТ.

Одно слово, лучше всего описывающее как вы работаете?

Поршень.

Сколько часов в сутки вы уделяете работе?

12 часов.

Сколько часов вы спите?

6 часов.

Как вы завтракаете?

Чай с бергамотом и ложечкой кокосового масла, а также свежие перепелиные яйца и рыбий жир (Омега-3). По выходным ем яичницу с томатами, беконом и базиликом.

Что делаете по пути на/с работы?

В пробках играю на губной гармошке – решил освоить.

Каким todo-менеджером пользуетесь лично вы?

MS Outlook.

Каким таск-менеджером / issue-tracker’ом / репозиторием пользуетесь в компании?

MS Outlook.

Какие еще инструменты и ПО используете в работе?

Системы документооборота, ERP, BI, кадровые системы, семейство Майкрософта.

Что вас раздражает больше всего, когда вы работаете?

На совещаниях раздражают люди, копающиеся в гаджетах.

Не соблюдают ключевое правило – будь здесь и сейчас. Не готовы обсуждать профильный вопрос.

Какую профессиональную литературу вы бы могли порекомендовать?

Голдратт «Цель 1,2,3» — обязательны к прочтению. «Цель 3» — про ИТ.

Что предпочитаете: электронные читалки или бумажные книги?

Бумажные, пахнущие, как в детстве.

Какую технику и почему вы предпочитаете на работе и дома?

Эволюционировал так: сначала был стационарный ПК, ноутбук, планшет, перешел на смартфон. Сейчас 90% работы веду в смартфоне. Для работы с документами включаю рабочий ноутбук.

Кстати, планшет как гаджет умер, видимо, этому рынку пришел конец.

Что вы слушаете, когда вы работаете?

Свои мысли.

Какой лайфхак позволяет вам быть эффективнее?

  • Делегировать;
  • Записывать;
  • Не лениться ставить себе напоминания.

Что бы вы порекомендовали человеку, пытающемуся пройти тот же путь?

Если хочешь стать большим менеджером – вообще не работай за других.

MBLT17: первые спикеры, последние early bird билеты

MBLT17: первые спикеры, последние early bird билеты

25 апреля в Москве состоится Международная мобильная конференция MBLT17.

За шестилетнюю историю MBLT стала знаковым событием в российском мобайле. В этом году мы продолжаем знакомить участников конференции с топовыми представителями индустрии, рассказывать о мобильных тенденциях и изучать успешные стратегии.
Под катом — подробности о программе и последние early bird билеты!

Доклады
Более десятка докладчиков уже подтвердили участие в MBLT17.

С ключевым докладом выступит Руди де Вейле, футуролог, консультант и стратег в области инноваций. Руди прогнозирует технологические тренды, анализирует идеи по достижению успеха в новых экономических условиях. Среди его клиентов — BMW, IBM, Coca-Cola, Google, Intel, Louis Vuitton и другие мировые бренды.

Клемен Чанг, CEO и основатель сингапурского стартапа Spiking, расскажет о трендах азиатского финтеха и поделится опытом создания приложения для трейдинга.

Как добиться интенсивного роста бизнеса с помощью мобильных приложений расскажет Алексей Вставский из App Annie. Доклад будет посвящен эффективному использованию мобильного канала, вместе с Алексеем рассмотрим кейсы мировых брендов, чьи стратегии стоит взять на заметку.

Артём Кейдунов, сооснователь успешного стартапа Statsbot, расскажет, как conversational UI меняет наше взаимодействие с компьютерами и почему чат-боты сначала найдут своё применение в бизнесе, а уже потом выйдут в потребительский сегмент.

С докладами также выступят:
— Мэтт Джонс, Manning Gottlieb,
— Максим Евдокимов и Анна Михина, Тинькофф Банк,
— Энди Змолек, Google,
— Дмитрий Измайлов, Uber,
— Арсений Косенко, Lifepay,
— Роман Кумар Виас, Qlean.

Основными темами MBLT17 станут:
— стратегии монетизации мобильных приложений и мобильный маркетинг,
— новинки и будущее IoT, VR, AI,
— применение чат-ботов,
— тренды в проектировании и дизайне мобильных интерфейсов,
— успешные мобильные кейсы для разных сфер бизнеса.

Дискуссии
В формате живой дискуссии обсудим тренды финтеха. Модератор круглого стола Игорь Костырев соберет представителей банков, чтобы говорить о трендах в создании продвижении мобильных финансовых продуктов.
Еще один круглый стол будет посвящен привлечению пользователей в мобильные приложения. Какие инструменты и тренды вышли на первый план за последний год, расскажут представители крупных мобильных продуктов, модератором выступит Алексей Писаревский.

MBLT Talks
В прошлом году на конференции MBLT мы опробовали формат открытого интервью, получилось живо, интересно и откровенно. На этот раз копнём глубже. Ведущий MBLT Talks Иван Козлов из Aviasales поговорит начистоту с топ-менеджерам известных мобильных продуктов. Никаких ярких презентаций и успешных кейсов, лишь честный разговор о достижениях и ошибках, об отрасли и конкуренции, о планах и сомнениях.

Нетворкинг
MBLT — это площадка для эффективного нетворкинга. Рассказывайте о своих проектах, знакомьтесь с лидерами мобильной индустрии и находите единомышленников и партнёров. Ежегодно конференция объединяет более 700 участников: CEO, продукт-менеджеры, маркетологи, дизайнеры, евангелисты, которые работают в мобильных продуктах, digital-агентствах, заказной разработке, стартапах, все, кто уже имеют собственные мобильные продукты или только готовятся к их запуску.
Предвкушаем встречи со старыми друзьями, знакомство с новыми, бурные дискуссии и фан — после официальной программы мы по традиции ждём всех на грандиозную after-party.

До 15 марта стоимость билета составляет 3000 руб. Зарегистрируйтесь прямо сейчас на сайте конференции.

Как это было в 2016-м
В 2016 году на MBLT выступили с докладами более 30 представителей всемирно известных компаний, таких как Facebook, Google, Alibaba Mobile Buisness Group, QuantaCorp, The Economist. Рекомендуем вдохновиться видеоотчётом прошлого года и зарегистрироваться на MBLT17:

Список спикеров постоянно обновляется, следите за новостями на странице конференции в Facebook.

Организаторы: e-Legion и РАЭК
Генеральный партнёр: AppMetrica
Партнёры: Google, Scorocode, Lifepay

[Перевод] Правила использования ARIA в HTML

The Web Accessibility Initiative’s Accessible Rich Internet Applications Suite (WAI-ARIA, или просто ARIA) — это набор инструментов и указаний для того, чтобы сделать веб-контент и приложения более доступными.
В частности, он включает в себя набор атрибутов, которые мы можем добавлять к HTML-элементам для придания им семантической информации, которая может быть прочитана с помощью специальных возможностей (assistive technologies).

Хотя ARIA может быть достаточно полезной, нам стоит быть осторожными в вопросах, как и когда её использовать. Вот 5 правил, которые необходимо учитывать при использовании ARIA в HTML.


1. Используйте семантический HTML в пользу ARIA
Если вы вы можете использовать нативный HTML-элемент или атрибут с заложенными семантическим значением и поведением, используйте его вместо того, чтобы добавлять ARIA-роли, состояния или свойства для того, чтобы сделать его доступным.

Правило номер один — не пытайтесь использовать ARIA, если в этом нет необходимости. HTML5 предоставляет нам широкий спектр семантических элементов.

Поэтому, по возможности, нам стоит использовать семантический HTML-элемент, а не ARIA-атрибут.

Вместо того, чтобы создавать <div> элемент и добавлять ARIA-роль:

<div role="button">Click Me</div>

Неправильный подход

Нам следует использовать элемент <button>:

<button>Click Me</button>
2. Не изменяйте значения семантических элементов ARIA-ролями
Не изменяйте нативную семантику элемента, если вам это не необходимо.

Как я уже замечала, многие семантические HTML-элементы имеют свой смысл. Когда мы используем <button>, например, это указывает юзер-агентам, что это — интерактивный элемент (с ним можно взаимодействовать при помощи клика мыши, клавиши Enter или пробела), что вызовет какое-либо действие на странице. С другой стороны, если мы используем элемент <a>, это указывает юзер-агентам, что интерактивное взаимодействие с таким элементом (посредством клика или нажатии клавиши) приведёт к тому, что пользователь будет направлен на другую страницу или в другую часть этой же самой страницы.

<h1 role="button">Heading Button</h1>

Неправильный подход

Вместо переопределения семантического значения элемента, нам следует использовать соответствующий элемент:

<h1><button>Heading Button</button></h1>

Предпочтительный подход

Или, в крайнем случае, мы можем добавить ARIA-роль к элементу, который не несет такого смысла.

<h1><span role="button">Heading Button</span></h1>
3. Интерактивные элементы ARIA должны быть доступны для всех сред
Все интерактивные элементы управления ARIA должны быть пригодны для работы с клавиатуры.

Недостаточно использовать ARIA-роль на элементе, чтобы по-настоящему изменить его роль. Если мы попытаемся изменить, например, <div> на <buton>, мы должны вручную добавить возможности взаимодействия, подходящие для кнопки.

В руководстве ARIA имеется список возможностей, которые должен иметь каждый элемент. Например, настоящая кнопка должна удовлетворять следующим требованиям:

  • Должна быть кликабельной с помощью курсора
  • Должна быть кликабельной с помощью клавиши Enter
  • Должна быть кликабельной с помощью клавиши пробела

При использовании ARIA-ролей нам необходимо учитывать эти требования. Создание элемента похожего на кнопку — не делает его кнопкой. Нам нужно учитывать, как пользователи во всех средах взаимодействуют с элементом.

4. Используйте соответствующие роли для видимых фокусируемых элементов
Не используйте role="presentation" или aria-hidden="true" на видимых фокусируемых элементах.

ARIA-атрибут role="presentation" подразумевает, что элемент предназначен для визуального взаимодействия и не является интерактивным. Атрибут aria-hidden="true" говорит о том, что элемент не должен быть видим. Когда мы используем эти атрибуты, нам нужно знать, к каким элементам они применяются и являются ли эти элементы видимыми и интерактивными. Например, обе эти кнопки приведут к тому, что некоторые пользователи будут фокусироваться на элементе, который для них не существует.

<button role="presentation">Click Me</button>
<button aria-hidden="true">Click Me</button>

Неправильный подход

Эти атрибуты должны применяться только к элементам, которые не являются интерактивными или являются невидимыми.

<button role="presentation" tabindex="-1">Don’t Click Me</button>
<button aria-hidden="true" style="display: none;">Don’t Click Me</button>
5. Интерактивные элементы должны иметь Доступное описание
Все интерактивные элементы должны иметь Доступное описание.

Элементы, с которыми можно взаимодействовать, например кнопки и ссылки, должны иметь «доступное описание».

Доступное описание (accessible name) — имя элемента пользовательского интерфейса.
Очень просто объяснить это на пример кнопки «OK». Текст «OK» — доступное описание (accessible name). (прим. переводчика)

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

<label>
Username
<input type="text">
</label>

<label for="password">Password</label>
<input type="password" id="password">

Другие элементы, например кнопки и ссылки, могу получить своё Доступное описание из их контента или label-атрибута (подробнее).

Есть ли у вас ещё шанс достичь успеха

Есть ли у вас ещё шанс достичь успеха

Сколько вам надо времени, чтобы превысить показатель 140 баллов по IQ тесту? Полгода усердной работы с утра до ночи хватит? Наверняка. А это значит, вы станете лучше 99% тестируемых. Это примерно 2,5 тысячи часов — после вычета перерывов на сон, еду и другие мелочи. А ведь Малкольм Гладуэлл в своей известной книге «Гении и аутсайдеры» привел другую цифру достижения уровня мастерства — 10 000 часов. Он её не придумал, а вывел из статистики шведского психолога Андерса Эрикссона, опубликовавшего в 1993 году исследование, что мастерами скрипки и пианино не рождаются, а становятся. Важный нюанс — он сравнивал группы музыкантов, а не самые талантливые единицы.

Мастерам скрипичного дела требовалось в среднем именно столько часов практики, чтобы отличаться от профессионалов (в среднем 5000 часов) и хороших любителей (2000 часов). Гладуэлл популяризировал эту цифру, расширил умозрительно на другие сферы деятельности и преподнёс её читателям как гарантию успеха. Работай только 5 лет упорно и всё будет. Среди доказательств он ещё привел примеры бизнесменов-программистов от Билли Джоя до Билла Гейта. С тех пор его регулярно критикуют как за величину цифры, так и за подход — мол у каждого свои мозги и свои методики обучения.

В исследовании Эрикссона расчет 10 тысяч часов сделан на примере супер-профессионалов, но и мы сами можем легко прикинуть, что 5 лет в нормальном режиме на рабочем месте дают ощутимые профессиональные результаты. И если отбросить мелкие придирки, основная мысль Гладуэлла понятна, хотя и банальна — «без труда не вытащить и рыбку из пруда». Откуда столько споров?

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

Критика идеи ведётся с 3 сторон. Первая — все решают гены, вторая — окружение и поведение в детстве (семья), третьи говорят о методике обучения и особенностях изучаемой профессии или отрасли. В свежей статье авторы озвучили итоги обработки метаданных в 88 наиболее подходящих публикациях на эти темы.

Первый вывод заслуживает реакции «спасибо кэп» — он о том, что практика помогает результатам. Но целью авторов была корреляция, в значениях которой они увидели много странного для себя. Например, одному шахматисту потребовалось 26 лет для достижения гроссмейстерского уровня, а другому — всего 2 года. О каком шахматисте в исследовании идёт речь, не приводится; опущено также, что считать стартом карьеры. Но для справки — самым молодым гроссмейстером стал в 12 лет Сергей Карякин. Сегодняшний лидер шахматного мира Магнус Карлсен добился звания в 13 лет. Бобби Фишер получил звание гроссмейстера в 15,5 лет. К моменту получения званий они играли: Карякин — 7 лет, Карлсен — 8, Фишер — 9. В часах оценить не представляется возможным — это к их родителям или биографам. Надо только отметить, что вышеприведенные 2 года — свидетельство условности многих исследований.

Шахматисты, спортсмены и музыканты начинают практиковаться, как правило, в раннем возрасте. Мозг ребенка очень гибок, нейронные связи активно формируются до 12 лет, и любые условные рефлексы в таком возрасте становятся безусловными на всю жизнь. В более зрелом возрасте учиться гораздо тяжелее. То есть у ребенка практика по эффективности обучения идет «год за два, а то и за три». В раннем старте есть и ещё одно достоинство — на тебя выпадает больше всего внимания и этот процесс приобретает характер нарастающей прогрессии. Чем больше у тебя успехов, тем больше о тебе пишут, тем больше у тебя наставников, доступа к инвентарю и оборудованию, заказов и иных ресурсов, позволяющих оттачивать мастерство. Сам успех мотивирует, конечно, тоже.

Если почасовые сравнения профессиональных достижений во многом притянуты за уши, что с объективными факторами? Например с генами. Роль генов никто не ставит под сомнение. Способности однояйцевых близнецов, например в рисовании, демонстрируются ими одинаково стабильно через 10 лет. Среди разнояйцевых близнецов одни сохраняют способности больше, другие меньше. Налицо влияние генов. Вопрос только, какой вес определяет наследственность в успехе человека. Консенсусное мнение ученых сегодня таково, что гены задают широкие границы возможностей, но достаточно гибко. Условно говоря, если длина всей шкалы IQ составляет 90 единиц — от 55 до 145 баллов, то разброс способностей конкретного человека (и его однояйцевого близнеца, при наличии) составляет 70 баллов — чуть выше или чуть ниже средней, то есть от 55 до 125 или от 75 до 145 соответственно. Конкретные результаты определяются практикой.

Отдельные исключения только подтверждают правило и чаще всего обусловлены методикой оценки. Как например, исследование Каролинского института в Швеции. Команда Мириам Мосинг обнаружила в 2014 году, что абсолютно идентичные генетически однояйцевые близнецы имеют одинаковый музыкальный слух при разном объеме практических занятий. Практика не дает никаких дополнительных успехов именно в этой сфере. В других сферах практика по-прежнему необходима. По-моему, врожденность музыкального слуха очевидна и шведские ученые такими исследованиями приближаются к британским.

В выпячивании исключительной роли наследственности или детского опыта «возмутительна» не мысль, что помимо труда есть иные факторы успеха. Это понятно. Невыносима мысль, что труд можно заменить чем-то нам недостижимым, а тем более предположение, что этот фактор обеспечивает успех сильнее, чем труд. Гладуэлл и Эрикссон уравняли шансы людей на достижение успеха, а Мосинг их разрушает. Зря, как уже выше сказано, юные гроссмейстеры трудились хоть и меньше взрослых на пути к славе, но тоже весьма прилично поработали.

Эрикссон однозначно писал, что факторы влияют разные, но а) без труда успеха не достигает никто и б) упорный труд точно даст успех каждому. Как бы вам не повезло с генами или семейной поддержкой, но у вас есть все шансы догнать счастливчиков. А счастливчикам тоже придется потрудиться, халявы не будет. Первый миф регулярно опровергают примеры гениев, второй пока устойчив.

Авторы статьи в Business Iinsider констатируют, что толерантная идея про равенство возможностей уже пережила пик расцвета — расовое и половое неравенство в социальной сфере почти достигнуто, и евгеника потихоньку отвоевывает позиции. На смену индивидуальному равенству приходит равенство возможностей по конкуренции внутри групп. Условно говоря, белый американский программист всегда сможет стать лучше среднего русского программиста, хотя как группа американские программисты уступают нашим весьма значительно. Он может оказаться и изначально генетически талантливее, и впоследствии быстрее развиваться благодаря большей практике. Таланты есть в каждой группе, просто встречаются реже. Не надо только обобщать. С учетом этого факта исследование Эрикссона может быть одновременно и истинным, и ложным — 10 000 нужно отнюдь не каждому, но в среднем этот объем практики потребуется.

Поскольку дети или будущие музыканты Хабр читают редко — какая может быть мораль для всех нас, взрослых в этих исследованиях без четкого ответа на вопрос — какова роль генов, как и сколько именно надо работать для успеха?

Ряд психологов отразили эффект относительной косности мозга в теории двух частей интеллекта — подвижный интеллект и кристаллизовавшийся. Первый — это способность мыслить логически, анализировать и решать задачи независимо от предыдущего опыта; второй — накопленный опыт и способность использовать усвоенные знания и навыки. Первая часть способностей развивается до 30-40 лет, вторая — до 60-70.

Для проверки баланса вашего интеллекта попробуйте простое упражнение: возьмите колоду из 52 карт и перекладывая одну за одной попробуйте по памяти отмечать когда разные карты одного звания/ранга (без учета цвета/масти), повторяются с шагом три. Например в последовательности: 6-8-9-К-8-7-К ими будут восьмерка и король. Потом проверьте себя. Чем больше вы запомните, тем больше у вас кристаллизовавшийся интеллект, частью которого является память. Если у вас память не ахти — это значит, что вы имеете большой простор для творчества. Если конечно у вас не начался склероз…

Чем меньше вы были дисциплинированы, сосредоточены или целеустремленны раньше — тем больше шансов, что вы сохранили пластичность мозга до сего момента. А значит можете освоить любой навык и сейчас. Многие конкуренты впереди и толкаться локтями придется больше, но зато ваши навыки будут свежее.

Авторы исследования агитируют за евгенику, находя в ней 2 неоспоримых достоинства:

  • Зная свои генетические предрасположенности, люди избегут карьер, в которых у нет нет шансов стать выдающимся деятелем. Это выгодно и конкретному человеку, и обществу в целом.
  • Осознание своих пределов снимет часть вины с бесталантных за якобы недостаточное усердие — они всегда смогут сказать: я не лентяй, я просто медленно осваиваю по генетическим причинам. Радость для психотерапевта.

Однако тут с авторами можно поспорить. Во-первых, зная свою неспособность многие просто бросят трудиться — даже там, где у них есть шансы, хотя и меньшие. Во-вторых, природа творит новое из смесей разных способностей, а специализация — эволюционный тупик. Как кошки например.
В-третьих, структура экономики и общества вообще может сильно отличаться от генетического распределения способностей. Может так получиться, что будут миллионы пилотов и только сотни авиационных механиков. Ну пусть авиамехаников заменят роботы, но где взять столько пассажиров?

Использую наблюдения биолога Сергея Савельева, изучающего мозг, его размеры и вариативность. Он утверждает помимо прочего, что специализация на спорте, музыке или любом виде деятельности неизбежно тормозит развитие мозга в иных областях. Биологическое строение мозга определяет фору при рождении в 3 раза (настолько отличаются размеры мозга), но вариативность способностей мозга взрослого (размеры отдельных специализированных зонт неокортекса) отличается в 40 раз и вполне компенсирует эту стартовую разницу. Несмотря на огромное различие в количестве нейронов. Человек может, как Маяковский, не имея особой биологической предрасположенности, сосредоточить все мощности мозга на одной сфере и добиться огромных успехов в ней.

200 лет назад Фрэнсис Гальтон, основатель научного исследования интеллекта и двоюродный брат Чарльза Дарвина, проанализировал генеалогические записи сотен ученых, художников, музыкантов и обнаружил, что мастерство определяется происхождением. Во времена, когда писать умела только аристократия и буржуазия (с простым счетом и чтением дела были получше — в зависимости от страны), а знания были кастовым секретом, такой вывод неудивителен. Где были знания, там были и достижения. Карьерных лифтов тоже было не так много как сейчас, вот родственники и кучковались по отраслям. Пробиться в те века, наверное, было сложнее нынешнего. Настолько, что для многих аристократов и купцов карьерным и социальным лифтом сотни лет были опустошительные войны. Но вернемся к генам, воспитанию и практике.

Сегодня, если рассматривать вероятность успеха как некую функцию от доступности знаний, количества возможных сфер деятельности и скорости распространения информации (заказов и рекламы) можно предположить, что 10 000 часов Эрикссона-Гладуэлла это не константа, а переменная. Во времена Дарвина на поиск книг, практические занятия, накопление стартового капитала или поиск карьерных возможностей требовалось значительно больше 10 лет. Во времена Джонна Леннона и Билла Гейтса уже примерно 5 лет. Сейчас и рынков больше, и знания доступнее.