Сила комментария

Сила комментария

Комментарий в интерфейсе — это необязательное текстовое поле. В комментарии человек указывает любую дополнительную информацию, которая кажется ему важной:

— На карточке клиента: за что предоставили скидку 20%
— На форме заказа: что в дверь звонить не надо
— В тикете техподдержки: ссылка на обсуждение в багтрекинге

Комментарии в интерфейсах недооценены. Аналитики, дизайнеры, программисты — все мы любим и умеем систематизировать информацию. Поэтому любой объект в интерфейсе представляем как набор полей с конкретным назначением: наименование, почтовый индекс, стоимость.

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

Например, на «Дадате» мы используем систему защиты от сетевых атак. У нее есть интерфейс, где можно заблокировать конкретный IP-адрес. Указываешь IP, жмешь «добавить в черный список», злодей получает бан. Что может быть проще?

Проблема в том, что непонятно, кто заблокировал IP и почему. В большинстве случаев это и неважно, но иногда пригодилось бы для разбора. Решить проблему элементарно — добавить поле «комментарий».

Но постойте, можно же сделать нормальные поля «сотрудник» и «причина блокировки»? Да, можно, но непонятно:

— точно ли нужны именно эти поля?
— действительно ли они нужны?

Добавлять поля просто «чтобы были» — так себе идея. А выяснить реальные сценарии как раз и поможет поле «комментарий». Потом, если что, можно заменить его на поля с конкретным назначением.

Комментарий — элемент хаоса. Но с ним система устойчивее.

Впечатления от станции

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

Самое главное отличие Яндекс Станции от конкурентов — её можно подключить к телевизору, и если опыт общения с голосовым помощником у нас уже есть (Siri, Google Assistant), то как будет выглядеть взаимодействие с голосовым ассистентом, который в тоже время имеет визуальный интерфейс? Очень интересно.

Итак, интерфейс подключенной к телевизору Алисы внешне очень напоминает интерфейс любого умного телевизора, все что показано на экране и не является контентом — это и есть кнопки. Если можно листать далее, то на кнопке так и написано «далее», получается, это даже не кнопка — а подсказка к вашей команде. Например, если мне нужно выбрать третий фильм в списке, то на карточке с фильмом так и будет написано — «3».

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

Во время демонстрации мне особенно интересно было узнать, как Алиса обрабатывает ошибки, ведь если по голосу она меня не поняла, то ввести более точный запрос у меня никак не получится. Парень, проводящий демонстрацию, показал это на примере вопроса о погоде на марсе — Алиса просто не смогла ответить, сказала, что не знает. Тогда я спросил у неё «а в москве?» и она поняла контекст — дала прогноз погоды по Москве. Это здорово.

Дальше, я хотел выяснить как она понимает, где показывать мой запрос — на ютубе, на кинопоиске или амедиатеке. Парень попросил Алису показать котиков, и она открыла ютуб. Но я решил дать запрос посложнее и попросил показать мне видео Усачева — Алиса также открыла ютуб, но выборка была не самой очевидной — какие-то рандомные видео из ютуба с непонятными людьми (хотя по идее канал Руслана Усачева один из топовых). А если я имел в виду писателя? По итогу, мне было не очень понятно, как Алиса выбирает место поиска, и как мне уточнить какой-нибудь сложный запрос.

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

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

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

А как вам Яндекс Станция?

Чтобы обратиться к какому-либо узлу, его сначала надо найти

Для этого есть разные методы, но в современном прототипировании чаще всего применяются два метода:

let el = document.querySelector(selector)
и
let elems = document.querySelectorAll(selector)

Оба метода получают на вход CSS-селектор элемента. Например:

let el = document.querySelector(".someClass b");

Отличие их в том, что querySelector вернёт один узел, который попался первым, а querySelectorAll вернёт список всех узлов на странице, соответствующих селектору.

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

Если же вам всё-таки нужен метод map, то вы можете преобразовать список узлов в массив при помощи конструкции [...nodeList]:

let arr = document.querySelecroAll("a");
[...arr].map(el => el.innerText);

Подробнее в видео: https://youtu.be/KIBv7QMToP4
И в примере с кодом: https://codepen.io/detepr/pres/mQqKZO

7 важных факторов PHP-приложения

7 важных факторов PHP-приложения

Инженеры платформы Heroku (https://www.heroku.com/) на основе собственного опыта создали методологию (https://12factor.net/ru/) для разработки SaaS-приложений.

Эта методология учитывает три важных аспекта:
— расширяемость — развитие кодовой базы и функционала;
— сопровождаемость и возможность командной работы над проектом;
— масштабируемость.

12 факторов приложения стали шаблоном для многих разработчиков и Ops-инженеров, а мы постарались адаптировать самые важные из них для приложений на PHP.

Кодовая база (https://12factor.net/ru/codebase). Забота о коде начинается с принципов его версионирования и хранения. Используйте Git Flow или его адаптацию с учетом специфики работы ваших команд.

Зависимости (https://12factor.net/ru/dependencies). Используйте менеджер зависимостей Composer (https://getcomposer.org/) и его основные операции install и update для манипуляций c composer.json (https://getcomposer.org/doc/04-schema.md) и composer.lock.

Конфигурация (https://12factor.net/ru/config). Предпочтительным методом обработки конфигурации является использование переменных среды. Для работы с ними мы применяем компонент symfony/dotenv (https://github.com/symfony/dotenv).

Параллелизм (https://12factor.net/ru/concurrency). Выполняйте процессы в фоне, тем самым снижая время отклика при взаимодействии с вашим сервисом. Выделяйте веб-процессы в реальном времени и рабочие процессы. Первые принимают http-запросы от клиента, а вторые — выполняют фоновые задачи, например, с помощью брокера сообщений RabbitMQ (https://github.com/rabbitmq).

Паритет разработки/работы приложения (https://12factor.net/ru/dev-prod-parity). Для того чтобы обеспечить схожесть сред разработки, тестирования и продакшена, мы используем виртуализацию на основе Docker и специально подготовленные образы, содержащие одинаковые наборы и версии библиотек. Промышленные и тестовые среды отличаются лишь степенью масштабирования, на основе технологий K8S и Swarm.

Журналирование (https://12factor.net/ru/logs). Фактор утверждает, что приложение должно просто писать в STDOUT и STDERR, а среда должна отвечать за маршрутизацию этих сообщений в хранилище. Технология PHP-FPM позволяет производить вывод логов в STDOUT, что крайне полезно при работе с Docker-контейнерами. Для организации процесса логирования на уровне приложения мы используем сторонние внешние библиотеки, например Monolog (https://github.com/Seldaek/monolog) или компоненты фреймворков.

Задачи администрирования (https://12factor.net/ru/admin-processes). Реализовать сценарии администрирования приложения можно с помощью внешних библиотек, например Symfony Console (https://github.com/symfony/console). Большинство современных фреймворков имеют встроенные средства для организации запуска консольных команд для служебных целей и миграций. Например, в Yii Framework есть понятие консольного приложения (https://www.yiiframework.com/doc/guide/2.0/en/tutorial-console) и команды.

Приходится объяснять хорошим профессионалам своего дела самые базовые вещи о людях.

Если вы преподаете, или занимаетесь проектированием, дизайном, управляете командой, преподаете мышление и дизайн, вы постоянно упускаете главное — воспитание воли. Человек не знает чего хочет, вы сами толком не знаете ответа на этот вопрос. Чего вы хотите от себя?

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

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

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

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

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

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

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

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

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

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

Дизайн-снайпер, [28.06.20 20:53]
Есть секрет, который поймут профессионалы. Задача и назначение воли — воспитать в человеке любовь настолько, чтобы в подключении, вовлечении воли было как можно меньше поводов. Научив человека использовать волю мы учим тайне — долгу любви. Если ты равен самому себе, если нашел любимое дело — тебя не тяготит долг, не тяготит труд и ответственность. мы ведь любимым не даем в долг, мы считаем счастьем быть и принадлежать всецело любимым. Обучать надо этому изначально — воспитанию воли полюбить в себе равное тебе. Равное тебе дело. Равное тебе ценное. Равное тебе любимое. Извините за многословие — но все именно так.

— Чего вы хотите от себя?
— Быть равным самому себе! Больше никому.

Безусловная и непонятная директива

Вот работаете вы над новым интерфейсом, и тут от коллеги прилетает просьба, типа «а давай перенесём эту кнопку наверх». И всё: ни объяснения чем кнопке плохо жилось внизу, ни хода мыслей, ничего не понятно.

Это — безусловная и непонятная директива. Такими директивами обычно общаются непродуктивные ребята, когда приходят с решениями вместо проблем (см. Фичреквесты, которые не стоит выполнять (https://t.me/pmdaily/98)).

Если вы сами начнёте приходить к продуктовым коллегам с решениями вместо проблем — вас начнут валидировать так же, как непродуктовых коллег извне: задавать кучу вопросов о том, что на самом деле у вас болит, проверять болит ли вообще, или может вам просто фичу захотелось.

Будьте подробными: рассказывайте о том, почему пришли к тем или иным решениям. Не «давай перенесём кнопку наверх», а «Эта кнопка — ключевой call-to-action на странице, а я боюсь, что новые пользователи сразу её не увидят» Так вы не только уменьшите количество переписки в трекере, но ещё и опытом с коллегами поделитесь.