PHP Intl. Правильная транслитерация кириллицы

PHP Intl. Правильная транслитерация кириллицы

Современные фреймворки предоставляют готовый функционал в составе библиотек или хелперов для работы с библиотекой ICU (http://site.icu-project.org/home) через API Intl.

Такой функционал необходим для поддержки интернационализации разрабатываемого веб-сервиса. На основе указанной локали могут устанавливаться форматы отображения валют, времени и даты, а также подбираться настройки для инициализации транслитераторов (https://www.php.net/class.transliterator).

В разделе «Телеграм-каналы (https://chulakov.ru/notes)» сайта Студии во время автоматического импорта постов из наших каналов производится транслитерация названий заметок для формирования ЧПУ (https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BC%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_URL).

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

Например, уникальная часть URL заметки (https://chulakov.ru/notes/development/php-8-pocti-novogodnij-podarok) про релиз PHP 8 после транслитерации имела вид php-8-pocti-novogodnij-podarok. Замена некоторых букв произошла некорректно.

Для того чтобы транслитерация кириллицы производилась по традиционным правилам, необходимо произвести конфигурацию объекта-транслитератора (https://www.php.net/manual/ru/transliterator.create.php), передав следующее значение параметра $id:

Russian-Latin/BGN; Any-Latin; Latin-ASCII; NFD; [:Nonspacing Mark:] Remove; NFC;

После такой конфигурации результат преобразования наименования заметки изменится на php-8-pochti-novogodniy-podarok.

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

Принцип «Направляй, а не ругайся»

Если клиент совершил ошибку, не стоит на него ругаться. Ошибки совершаются по невнимательности, но когда за них получешь — чувствуешь себя дураком. Никто не любит чувствовать себя дураком.

Если клиент не заполнил поле и жмёт на кнопку «далее» — направьте его: поставьте фокус на это поле, откройте клавиатуру. Можно написать аккуратное «Укажите» под полем ввода. Главное — не скатываться в нахально-безразличное «Обязательно для заполнения». Звучит, будто тётка на почте нахамила.

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

Семантика и синтаксис интерфейса

Семантика — то, как элементы интерфейса сочетаются, группируются и как их воспринимает человек.

Cемантика опирается на ожидания от продукта и привычки. Например, что в форме регистрации есть кнопка «Зарегистрироваться», а в соцсетях — лента новостей.

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

Элементы без текста — чаще всего просто иконки и фреймы. С них не так-то легко считать информацию.

К чему это я? Круто, когда UX-писатель умеет писать. Но ещё круче, когда разбирается в семантике. Это уже хай левел.

Открытые семинары и митапы для проф.сообщества и клиентов

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

Два года назад мы искали для Nimax новый офис и оставили в нем 50 м.кв под лекторий. Купили проектор, звук, стулья и запустили событийную программу, о которой давно мечтали и даже придумали название — Brainshare.

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

Периодически мы делаем открытые семинары и митапы для проф.сообщества и клиентов. Формируем программу, находим спикеров и собираем гостей. На самое большое событие пришло более 200 человек — офис чуть не разорвало 🙁

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

Основная идея — сделать Nimax открытой компанией, частью социума и профессиональной среды.

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

Нам бы хотелось делиться знаниями напрямую, чтобы приносить пользу большему числу клиентов/партнеров/сотрудников, с меньшими затратами для них и возможностью заработывать самим. Причем не только в зоне наших прямых услуг: брендинг, разработка, реклама. У нас накоплено много знаний в нетипичных для агентства областях: менеджмент, публичные выступления, HR, обучение, ОКР-планирование и т.д.

Очные семинары и курсы для нас — это полигон. Мы провели множество своих событий и сотни раз выступали на чужих, организовывали обучение для клиентов, вели целый курс в одном из универсистетов Финляндии. Но все это события малого охвата.

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

Кратко про решение

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

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

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

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

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

Идеальное решение, когда инструмент сделает всю работу сам: сфотографирует, укажет геопозицию, поможет определиться с классификацией проблемы, чтобы пользователю осталось только добавить краткий комментарий.
Как сделать все эти шаги минимальными усилиями... конечно же при помощи дополненной реальности!
Наводим камеру на неправильно припаркованный автомобиль, ставим виртуальный пин, тем самым указываем точное местоположение проблемы, камера телефона угадывает, что это автомобиль, предполагает доступные варианты ошибок: при этом пользователь не видит огромный чеклист всех возможных вариантов, а лишь один или парочку близких по смыслу категорий; пользователь выбирает подходящую ошибку тапая по экрану.
Таким образом, после выбора нужной категории ошибки, телефон уже знает её геопозицию, автоматически делает фотографию и помогает определиться с категорией, то есть 3 из 4 обязательных шагов заполняются автоматически. Пользователю остается только написать комментарий к ошибке, а ещё лучше, сказать его голосом.
За счет того, что большую часть нагрузки берет на себя телефон, всё внимание наблюдателя может быть сосредоточено на исследуемой улице.

Но что делать с проблемами, которые не укажешь одной только точкой? Например, отсутствие тротуара на протяжении всей улицы, или область с повышенным трафиком пешеходов?

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

Краткосрочная близорукость

Краткосрочная близорукость

Я думаю, что все мы рано или поздно оказываемся в ситуации, когда погрузившись в проблему и предлагая просто отличное решение, мы слышим: «Отлично! Но вот пока, как-то сложно это все реализовать... Может мы сможем что-то с этим сделать? А то долго просидим, а метрики упадут»

И что мы делаем в такой ситуации? Либо идём на поводу, изобретая компромисс. Либо режем все до MVP, а остальное уезжает в светлые будущие релизы. Но давайте откровенно, из этих светлых будущих релизов ещё ничего не возвращалось.

Автор следующей статьи называет этот феномен «краткосрочной близорукостью». И что при ней происходит с долгосрочными целями? Они просто уходят из вида.

И как бороться с подобной одержимостью краткосрочного скачка показателей на дашборде? Просто:

1) Задайтесь вопросом, а стоит ли вообще заниматься этой задачей? Я не шучу. Если задача вообще не соотносится с долгосрочной стратегией, то она попросту не стоит затрачиваемых усилий.

2) Что произойдёт, когда задача будет сделана? Что-то хорошее или всем будет все равно? Я как-то месяц работал над задачей, чтобы через полгода обнаружить, что после релиза функциональность физически не работает... И всем пофиг. Значит идея явно не стоила пота.

3) Держите в голове конечный результат и задайтесь вопросом: что я прямо сейчас могу сделать, чтобы все остальное стало проще или совсем ненужно?

4) Почитайте статью: https://uxdesign.cc/tackling-chronic-short-termism-f9058f04f8db там много интересного :)