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.

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

Двигать метрики – это не стратегия

За последний год я пообщалась не с одним десятком стартапов на тему роадмапа и стратегии – а точнее, их отсутствия. В лучшем случае, было что-то вроде "+x% DAU" или "+x% conversion to y".

"А почему DAU, а не MAU? – спрашиваешь их. – Почему количество пользователей, а не частота использования? А что если мы нарастим DAU в России, а просядем в Китае, это ок?".

Ответа на эти вопросы, чаще всего, нет. Если у вас их тоже нет, хорошенько подумайте, а есть ли у вас продакт-менеджер, или это проджект/аналитик/разработчик с модным тайтлом. Он/она общается с пользователями, пишет PRD и бесконечно приоритезирует бэклог – и команда вполне логично недоумевает, зачем для этого нужен отдельный человек.

Продакт отвечает за стратегию развития продукта. Что значит "стратегия":

  • понимание текущего состояния продукта;
  • понимание трендов на рынке и текущих/потенциальных проблем;
  • понимание, куда мы хотим прийти через x лет;
  • артикуляция принципов и этических стандартов, которыми мы будем руководствоваться по пути;
  • артикуляция того, что мы делать НЕ будем.

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

  • Но что если мы, например, Avito – количество пользователей растет, но количество покупок не увеличивается;
  • Но что если цикл использования нашего продукта – месяц, а не день;
  • Но что если мы выходим на новый рынок;
  • Но что если мы, например, заспамим всех нотификациями – количество пользователей в краткосрочной перспективе вырастет, удовлетворение от продукта упадет.

Метрики помогают следить за прогрессом; стратегия помогает принимать решения – что, особенно в долгосрочной перспективе, намного важнее.

А пока я хочу обратить твоё внимание на парадокс

А пока я хочу обратить твоё внимание на парадокс

1. Ты часто делаешь работу не к сроку, я бы сказал систематически (ровно так же, как это делают 100% известных мне творческих специалистов).

2. Но всякий раз считаешь это случайностью и объясняешь внешними причинами.

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

Я читал об этом в книге Канемана.

Если коротко: «обычный» человек переоценивает потери и недооценивает выигрыш. Если «обычному человеку» предложить сыграть в игру с подбрасыванием монетки, где «орёл это получить 1200₽, а решка это отдать своих 1000₽», он не согласится, хотя математическое ожидание — положительное. Это «страх потери», который добавляет негативному сценарию дополнительный вес. У «обычного человека» равновесие достигается примерно в точке «выиграть 1500₽ или проиграть 1000₽».

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

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

Как же быть?

Понимать, с кем имеешь дело.

— Если имеешь дело с такими же предпринимателими, творцами и специалистами по неопределённости, то расслабиться, принять своё «несовершенство», делить с ними ответственность, давать больше обещаний про процесс и меньше про результат.

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

Блок продукта. Продолжение

Блок продукта продолжился занятиями с Женей Бондаревым, арт-директором Redmadrobot. С Женей мы провели около 4 занятий. Одна из основных целей его занятий — научить нас выходить за рамки привычных паттернов поиска идей.

Дивергентное мышление

Дивергентное мышление подразумевает, что у задачи нет одного идеально правильного решения, другими словами — творческий подход к решению проблем. Один из самых больших недостатков современного образования заключается как раз в том, что оно подавляет дивергентное мышление — нас учат мыслить по шаблону, с единственно верным решением. Неудивительно, что дивергентное мышление очень развито у детей, так как с возрастом мы обрастаем рамками и запретам. И вообще, способность к дивергентному мышлению — это признак высокого IQ 🤓

Далее мы проверили этот подход на себе:

Шаг первый. Женя попросил нас выписать на бумаге 5 проблем, с которыми мы сталкивались последнее время. Всё что угодно от длинной очереди в магазине, до простуды. Потом из 5 проблем мы выбрали одну наиболее интересную для себя.
Шаг второй. Необходимо было открыть Яндекс Дзен, рандомно проскроллить ленту и остановиться на случайной новости.
Шаг третий. Соединить эти истории вместе.

Приведу в пример вариант, который в итоге получился у меня. 

Проблема, которую я выписал — цена на Uber от метро до дома неприятно повысилась, а Яндекс Дзен выдал мне статью о том, что власти Москвы хотят создать департамент одиночества.

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

как-то так 🙂

Подобные прокачки для мозга Женя проводил в начале каждого занятия — брать неочевидные вещи и соединять их между собой.

Заметки на полях. Из психологии.

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

Общая формула: событие → [автоматическая мысль] → эмоция

П Р И М Е Р

Событие:
прилетает внезапная срочная задача

Автоматическая мысль, которую не замечаем:
«Я не справлюсь» (или «Я могу не справиться»)

Эмоция:
тревога

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

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

То есть ты получил новую задачу, еще даже не узнал детали, не погрузился, но уже испытываешь тревогу. И все из-за автоматической мысли «Я не справлюсь» (или «Я могу не справиться»), которая не основана вообще ни на чем.

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

И понятно, что будет полезно уметь замечать и работать с автоматическими мыслями в обычной жизни. Если вам интересно чуть подробнее покопать для себя эту тему, то можете просто начать хотя бы со статьи на Википедии (https://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D1%8B%D1%81%D0%BB%D0%B8), чтобы как-то сориентироваться. Понимаю, что источник не самый глубокий, но для старта может подойти.

И здесь хочется привести только опросник об автоматических мыслях Джудит Бек, который хоть немного может помочь поработать с автоматическими мыслями:

1. Каковы доказательства, поддерживающие эту идею? Каковы доказательства, противоречащие этой идее?
2. Существует ли альтернативное объяснение?
3. Что самое плохое может произойти? Смогу ли я пережить это? Что самое лучшее может произойти? Каков самый реалистичный исход?
4. Каковы последствия моей веры в автоматическую мысль? Каковы могут быть последствия изменения моего мышления?
5. Что я должен делать в связи с этим?
6. Что я мог бы посоветовать ___ (другу), который находится в такой же ситуации?

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

Адам Сильвер написал о всплывающих подсказках (tooltip).

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

Проблемы:
1. Пользователи не всегда замечают, что подсказки есть.
2. Пользователь должен что-то сделать, чтобы получить подсказку. Плохо, если в ней находятся, например, требования к паролю. Скорее всего, пользователю придётся их посмотреть.
3. Подсказки могут частично закрывать содержимое и элементы интерфейса. Чтобы заполнить поле, пользователю придётся запомнить текст подсказки.
4. Подсказки могут обрезаться на маленьких экранах.
5. Элементом, с которым пользователь взаимодействует для отображения подсказки, может быть иконка без подписи. В этом случае не всегда бывает понятно, как указать на этот элемент при голосовом взаимодействии с интерфейсом. «Нажми на колокол, нажми на уведомления…»
6. Отображение подсказки при наведении курсора — не самый удобный способ взаимодействия: курсора нет на тачскринах, ховер может быть отключен, сложно прицелиться, пользователь может навести курсор случайно, нельзя взаимодействовать с текстом подсказки (например, скопировать).

Решения:
1. Переделайте дизайн. Если для работы с интерфейсом пользователю нужны подсказки, это плохой интерфейс.
2. Подпишите иконки или замените их на текстовые ссылки.
3. Сделайте важные пояснения видимыми по умолчанию.
4. Для подсказок используйте inline toggle, который активируется кликом и не скрывает содержимое с элементами управления.

https://ux.pub/problemy-s-podskazkami-tooltips-kak-ih-razreshit/