Минутка просвещения

Читать в телеге. Когда-то там были посты не только от меня.

Асинхронная коммуникация вместо встреч

Довольно неплохая статья про организацию асинхронного общения.

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

На мой взгляд, культура компании очень сильно на это влияет. У многих большие трудности с тем, чтобы сделать повестку встречи и понять, что вообще от встречи требуется. Заметки по итогам встречи (да и вообще какие-то артефакты) оставляют единицы. Готовиться ко встрече, на которую тебя пригласили? “Да ну, зачем” или “я очень занят, мне некогда”. Плюс встреча это практически набор голосовух со всеми минусами. В итоге встреча превращается в какое-то коллективное бессознательное: собрались, поговорили, а вот зачем, с каким итогом и что вообще обсуждали ­— пес его знает.

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

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

СсылкаКомментировать

Markdown в Google Docs

В гугл-доках можно включить распознавание (автозамену) Markdown. Забавно, что это в русской версии указано как “автоматически распознавать разметку”, как будто других видов разметок нет. Поддержка довольно урезанная:

  • Всякие преобразования текста (жирно, курсивом, моноширинно и т.п.) поддерживаются.
  • Блоки кода с ``` — только в платной версии (потому что блоки кода в принципе только в ней и доступны). Но они не очень полезны в любом случае (и там только 4 языка: C++, Java, JS и Python).
  • Заголовки работают.
  • Ссылки [ty](http://id.or) не работают, так что только выделение + Ctrl+K в помощь. Картинки тоже не работают.
  • Цитаты > не работают.
  • Списки — вроде как да, но у меня иногда багает.
  • Разделители --- — не поддерживаются, но с другой стороны в документах они и не нужны особо.
  • Таблицы — мимо.
  • Сраные смайлики — выпрыгивают после :. К счастью, можно это отключить там же, где и Markdown включается.
  • Подстрочный или надстрочный текст — тоже не работает (поставьте LaTeX уже наконец).

Еще можно поставлять всякой дичи при автодополнении @, например, даты, людей, эмодзи для голосования (sic!) и т.п.

СсылкаКомментировать

Приоритизация продуктовых задач

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

Чаще всего встречался подход “делаем, потому что надо” и HiPPO (Highest Paid Person Opinion). Это кстати не такой уж и плохой вариант, если ответственное лицо адекватное, да и меньше времени требует. Есть чуть более формальные вариации (например, MoSCoW, Kano model), но это примерно то же самое в итоге.

Но мы же сейчас в бигдате, надо data-driven! (И телеметрия!) Тут легко обмазаться метриками в комбинации с экспертными оценками и “предсказывать”, как эти метрики улучшатся при добавлении фичи. И из всего этого получить для каждой фичи какое-нибудь число, например, линейной комбинацией нескольких параметров (так еще некоторые студенты в дипломе делают, чтобы обосновать превосходство своего решения). Коэффициенты обычно рожаются “экспертной оценкой” и соответствуют текущей стратегии. Есть несколько стандартных шаблонов для этого — например, RICE с кучей вариаций. У такой формализации есть преимущество, что можно “поиграться” с коэффициентами при смене стратегии, и тяжелее ошибиться в раздробленных экспертных оценках, но все равно экспертность никуда не делась.

С другой стороны, упарываться data-driven тоже не стоит: если ориентироваться на прибыль, то пользователю обычно от этого только хуже. Вообще, о конечном пользователе часто забывают (хотя тут можно отрицать все по методике, предписываемой Форду) или, что еще хуже, превращают его в тупую метрику.

Возвращаемся к простым экспертным оценкам…

СсылкаКомментировать

API телеграма и баны

Чтобы публиковать посты в канал, я почти сразу написал скриптик, чтобы решить проблемы с markdown (например, до сих пор в телеге markdown не поддерживает ссылки). Скрипт использовал Telethon, который подключается с использованием моего аккаунта.

Перед новым годом телеграм решил мне выдать бан — разлогинил со всех устройств и долго (больше часа) не давал попасть в аккаунт. Хотя я делал сколько, 10 запросов в неделю? К счастью, помогла переустановка клиента. Было достаточно стрессово: с некоторыми людьми прямая связь только в телеге.

Ладно, давайте попробуем сделать все “правильно”: создаем бота, добавляем его в админы канала, используем python-telegram-bot… и обнаруживаем, что в API ботов нет возможности делать отложенные сообщения -_-.

У Telethon есть аналоги — Pyrogram и MadelineProto. На беглый взгляд при их использовании будет та же проблема с банами. Один раз попал в черный список — и привет:)

Я дошел даже до того, чтобы посмотреть на альтернативные клиенты для веба — A и K. В одном та же проблема с разметкой, а вот второй вроде смог распарсить ссылку, но блоки с кодом поломал: было смещение на 1 символ. Код открыт — отлично, можно сделать PR с исправлением и делать отложки вручную! Вот только в исходниках ноль тестов на парсинг разметки… Ладно, видимо не вариант.

Попробовал пару “советов” по Telethon — перебор диалогов, sleep понаставить, какие-то хаки с system_version — не помогло. В итоге решил-таки попробовать pyrogram (терять особо нечего) — и все заработало :/ Парсит markdown он хуже (у него вообще своя версия), но хотя бы работает.

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

СсылкаКомментировать

Отличие конкурентности от параллелизма

Доклад от создателя Go. Несмотря на то, что докладу уже больше 11 лет, он достаточно простой и фундаментальный, чтобы не потерять актуальности.

Основное отличие — это иметь дело с несколькими вещами против делать несколько вещей. Разобран хороший и забавный пример, как одну и ту же задачу (сжигание старых стандартов в печи) можно сделать по-разному. Кроме этого, разобраны базовые структуры для композиции в Go, но их аналоги есть в других языках, например в Котлине. В конце чуть-чуть напрягло, что в примере с балансировщиком нагрузки была использована “сырая” куча, а не очередь с приоритетом.

Отдельный кек — если вы находитесь на странице Concurrency и перейдете на русский перевод, то попадете… на страницу Параллелизм. Справедливости ради, там есть раздел про различие.

СсылкаКомментировать

Отладка GitHub Actions

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

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

act -j action_job

или чего-то вроде

act issue -s GITHUB_TOKEN=... -j action_job -e event.json

Еще можно отлаживать action, которое в процессе разработки (правда надо убедиться, что оно есть в каком-то коммите и “загрузить” его):

...
  steps
  - uses: actions/checkout@v4
  - uses: ./my-action
СсылкаКомментировать

Премии

Исследование более чем 30-летней давности про влияние премий на производительность труда и мотивацию сотрудников. Понятно, что многое могло поменяться, но все равно многое вроде применимо и сегодня.

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

  • Если премия привязана к KPI, то будет типичная проблема любого KPI;
  • Премии поощряют хорошо работать в рамках текущей системы, но не улучшать ее;
  • Почти все сотрудники считают себя хорошими работниками (но все премию не получат);
  • Если выполнены условия для премии, то почти нет мотивации делать что-то сверх этого;
  • Некоторые виды премий могут привести к внутренней конкуренции, которая обычно контр-продуктивна;
  • Сложные работы делаются командой, а премии обычно выдают индивидуально — нестыковочка;
  • Премии вроде как должны повышать производительность труда, но исследования показывают, что проблемы обычно в системе, а не в конкретных людях;
  • Премии в основном сфокусированы на краткосрочных вещах.

В целом тяжело построить что-то объективное, не основанное на KPI/метриках, поощряющее командную работу и при этом воспринимаемое как справедливое.

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

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

СсылкаКомментировать

Mermaid

Недавно попробовал Mermaid-диаграммы. В целом ощущения похожи на markdown — прикольно делать что-то простое; хорошо, что это простой текст, который легко хранить в гите; генерируется SVG, в котором можно выделять текст.

Однако как только что-то не работает, то начинаются трудности. Например, у меня в схеме процесса образовалось много пересекающихся линий (хотя при этом граф планарный) и нет какого-то нормального способа это исправить, только случайная перестановка строк, пока не получится что надо. Другая проблема, с которой столкнулся — очень маленькое изображение из-за ограничения по ширине, а какой-то нормальной раскладки или “построчного” переноса нет. Нет и возможности увеличения по клику (из коробки). Поковырявшись почти час с разными настройками ширины на уровне CSS, графа и глобальных настроек в итоге плюнул, сменил направление с горизонтального на вертикальное и получил приемлемый результат. Ко всему этому можно добавить довольно нерегулярный синтаксис.

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

graph TD
    *>*] --x  **[/"_____"\]
    ** --- ***{{.}} --- _{{_}} --- .{{*}} 
    ** --- ****{{.}} --- _ --- ..{{*}}
    ** --- ***{{.}} --- __{{_}} --- ...
    ** --- ****{{.}} --- __ --- .
%% *** --- ****
    *** --- ___{{_}} --- .
    **** --- ___ --- ..
    *** --- _{{_}} --- ...{{*}}
    *** --- __{{_}} --- ..
    *** --- ___{{_}}
    **** --- _ --- ....{{*}}
    **** --- __ --- ....
    **** --- ___ --- ....
    ___ --- ...
СсылкаКомментировать

cgi-bin

Есть что-то притягательное в том, чтобы иногда делать что-то “как в старину”.

Я повелся на шальную мысль и написал cgi-скрипт. Прямо на “проде”. По SSH, редактируя в nano. Без тестов, VCS и СМС. И теперь любое посещение специальной (публичной!) ссылки будет приводить к исполнению питоновского скрипта. С URL-параметрами, передаваемыми в переменные окружения без фильтрации и экранирования. С возвратом полной копии стандартного потока вывода пользователю. “Это безопасно. Дэвид, эксперт по безопасности”.

Больше всего времени я потратил на борьбу с правами доступа (и узнал, что бит исполнения в директории влияет на то, можно ли в нее по символической ссылке переходить). Но если отбросить это, то поменять консольный скрипт на “веб-сервер” — дело на пару минут.

Такая простота искушает. На настоящей работе такого конечно в жизни уже не сделаешь (да и никто и не даст). Сама возможность запускать скрипт на сервере по запросу от пользователя без кучи прослоек сейчас звучит диковато.

СсылкаКомментировать