• Вставка текста

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

    На картинке выше пример: я пишу текст и вставляю фразу из другой вкладки. У фразы другой шрифт и цвет, а некоторые слова выделены моноширинным.

    Это поведение везде: в офисе Майкрософта, в офисе Гугла, в Slack, в Teams, в Джире, в Confluence, в почтовых клиентах. Там, где эта фича не поддерживается на системном уровне, вступает в дело Javascript.

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

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

    У меня вопрос: какую проблему мы решаем? Чтобы что? Кто может объяснить, зачем сохранять оформление текста при вставке в другой документ? Оно же ни хрена не совпадает с моим текстом!

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

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

    И пожалуйста, не пишите про Ctrl + Shift + V и аналоги, я в курсе. Оказалось, даже в Teams это есть, нужно всего-то нажать Shift + Option + Command + V, то есть три (!) системные клавиши с одной обычной. Тьфу, пустяки.

    Интересно, кто эти клоуны, которые задали такое сочетание клавиш? Прямо сейчас нажмите на клавиатуре Shift + Option + Command + V — это, блин, что такое? Большой палец и мизинец близко, а указательный тянется к V — сущее издевательство. Теперь проделайте это десять раз, копируя текст из Википедии. Как оно?

    Как же мы оказались в такой ситуации? Базовая вставка задана на Shift + Option + Command + V, а расширенная — на Command + V. Ни у кого не осталось крупицы мозга, чтобы сделать наоборот?

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

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

  • Старье (2)

    Рубрика “Старье”, выпуск второй. В этот раз предлагаю вам мультфильм “Здесь могут водиться тигры” по мотивам рассказа Рея Бредбери:

    На что обратить внимание: во-первых, уникальный стиль рисования а-ля шариковая ручка. Необычно, приятно глазу. Далее контекст: 89 год – время упадка СССР, уже был Чернобыль, идеология не та. Тем не менее страна выпускает мульт на филосовскую тему. Ну и сам мульт относится к категории “для взрослых”. Это когда прочувствовать его можно только в тридцать-сорок лет. Вот такая в нем закваска.

  • Золушка по-немецки

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

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

    Во-первых, не было никакой феи-крестной. Ее роль выполняли три голубки на могиле матери.

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

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

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

    Вот такой трешачок на последних минутах. Как у Тарантино.

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

    Поэтому Мери Поппинс, Карлсон и многое другое из Астрид Линдгрен — это именно пересказы.

  • Проблема XY (2)

    Продолжение недавнего поста о проблеме XY. На этот раз — с конкретным примером.

    В сообществе Кложи кто-то спрашивает: подскажите профайлер, чтобы отладить код. Выкидывает OufOfMemoryException (OOM), потому что утекает память.

    Ему накидали вариантов, я тоже добавил свой. Но меня не покидала мысль, что никакого профайлера не нужно. OOM — довольно специфичная ошибка, и случается она по двум причинам: либо ты пишешь что-то незаурядное вроде интерпретатора, либо полный говнокод.

    Слово за слово, и человека уговорили показать упрощенную версию кода, в котором течет память. А там… как бы вам описать? Идея очень простая: нужно пройтись по строкам файла, сжатого GZIP-ом. В каждой строке лежит джейсончик. Его нужно минимально обработать и записать в базу, а сломанные записи собрать для будущей починки.

    Каждый писал такой код сто раз: это банальный цикл с try/catch. Что же было у автора? Ощущение, что он собрал все выкрутасы, какие только знал. Своя ленивая коллекция через lazy-seq, замкнутая на открытом Reader-e. Глобальный атом, накопление ошибок в иммутальный вектор вместо логов. Функция, которая возвращает функцию. И это только сокращенная версия! Настоящая химера: тело льва, крылья орла, хвост змеи. И где-то здесь течет память. Счастливой отладки!

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

    Во вступительной части я описывал пример: кто-то не может поставить программу из-за ошибки. Той программой является очиститель реестра, подсказанный в курилке. Почистишь — и комп перестанет тормозить. Глупо, но такие истории случаются, и они простительны офисному работнику.

    Чем это отличается от примера с профайлером? На мой взгляд, ничем. Это чистый, незамутненный пример проблемы XY. Автор написал говнокод и надеется, что профайлер каким-то образом его исправит. Нет, не исправит, а только займет лишние пару дней на установку и чтение документации. И пусть даже найдется место, где память течет — как это повлияет на код в целом? Говнокод останется говнокодом.

    Вроде бы автор не офисный работник или таксист, а программист, но не понимает этого.

  • PostgreSQL в браузере

    Пишут, что появился Постгрес для браузера, скомпилированный из сишных исходников в WASM. Размер 3 (три) мегабайта. Работают встроенные расширения, включая триграммы, ts-вектор и прочее. Открыл REPL на сайте и поигрался с командами – работает! Это настолько хорошо, что напоминает сон из детства.

  • Старье (1)

    С вами новая рубрика “Старье”. В ней выходит все то, что можно назвать старьем. Зачем? Потому что новый контент вам и так закинут, а кто же подкинет старый?

    В первом выпуске: короткометражный фильм “Математик и черт”. 20 минут, СССР, 1972 год:

    На что обратить внимание: манера съемок и монтажа, спецэффекты. Детали быта, курение в комнате, слегка пренебрежительное отношение к женщине.

    Ну и главное: СССР не жалел денег на популяризацию науки.

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

  • Феминитивы

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

    Однажды я был в сообществе, где так общались всерьез: дизайнерка Маша закончила макет, ждем фотографку Глашу.

    Подход с суффиксом “ка” мне кажется крайне унылым. Блин, ну нельзя механически добавлять его к слову, чтобы получился феминитив. Редакторки и врачки — настоящее издевательство над языком; произносящим такое должно быть стыдно. Я из принципа не доверю работу редакторке, фотографке, режиссерке и так далее. Подучите сперва русский язык, что ли.

    Как же быть, если все-таки хочется феминитива? Ответ — проявить фантазию. Люда Сарычева подписывается “редакторицей” — разумеется, в Телеграме и только в шутку; на обложке она — редактор.

    Суффикс “ка” хорошо заменяется суффиксом “ша”. Парикмахерша, кассирша, дизайнерша, операторша, редакторша. И звучит привычней, и с толикой юмора. Я старшая дизайнерша отдела!

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

    PS: программисткам и разработчицам не о чем волноваться, все у них хорошо.

  • Расставание с сервисом

    Предположим, вы решили расстаться с каким-то сервисом. Кнопки “удалить аккаунт” в приложении нет, поэтому пишем в поддержку: добрый день, прошу удалить учетку.

    Сотрудник поддержки, получив такое сообщение, спросит “а почему” или “что не устроило”. В результате процесс повиснет, пока не ответишь – а там еще две-три итерации уговоров. К концу процедуры хочется разбить сотруднику лицо.

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

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

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

    В результате я вижу, что процесс не повис на встречном “почему”, и могу поговорить.

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

    PS: Уже после публикации вспомнил, как закрывал подписку у Адоба. Жму на кнопку отмены и получаю: какая жалость, отписка не сработала, переключаю на оператора. Открывается чат, на линии Сулим Кумар. Начинается восточный базар: а почему, а отчего, давай скидку 5, 10, 15 процентов. В лучших традициях “Поля чудес”. Спустя двадцать минут он сдался, но ощущение осталось именно как от боя. Почему Адоб не понимает, что железная хватка только усугубляет желание расстаться?

  • Проблема XY (1)

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

    Пример из жизни: человек пытается поставить программу, но при установке получает ошибку. Он пытается нагуглить решение — это проблема X. Но если спросить, что за программу он ставит, это окажется “Очиститель Реестра Премиум Плюс”, который сливает личные данные рекламным фирмам. Почистить реестр посоветовал коллега в курилке, когда бедняга пожаловался, что комп тормозит.

    “Комп тормозит” и есть проблема Y — и она решается точно не очисткой реестра.

    Вопрос в том, как относиться к проблеме XY с разных сторон. На StackOverflow и в чатах порой случается так, что на вопрос “как мне сделать X” отвечают “зачем тебе делать X?”. Слово за слово, и люди теряют лицо. Отчасти потому, что не всегда ясно, кто с той стороны: любитель погреть уши или специалист. Хотя на том же SO за человека косвенно говорит репутация.

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

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

    Возможен более грубый подход: если видишь, что человек занимается ерундой, сразу сказать ему об этом. Плохо работает с обижульками, можно прослыть “токсичным” — обожаю это слово. Зато экономит время и делает общение линейным, а это много значит. Если человек выслушал критику и не включил обижульку — это замечательный человек. Такая экспресс-проверка на месте.

    К проблеме XY я бы отнес другой случай, который называю дилеммой тренера. Знакомый тренер рассказывал про новичков, которые занимаются по урокам с Ютуба. Делают упражнения, к которым нужно переходить спустя месяц занятий. Берутся за неадекватные веса или положения, от которых только боль и никакой пользы.

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

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

    Эту тягомоту я написал затем, чтобы плавно подойти к одному случаю, но о нем — в следующей заметке.

  • Не было времени

    Иногда что-то сделано плохо, и с той стороны говорят: у меня не было времени. Например, нет детальных логов, сервис валится без понятных сообщений, что-то не заводится.

    Понимаешь, мы торопились, не было времени.

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

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

    Ну а если не помогает и человеку по-прежнему “не хватает времени” — это тревожный знак.

Страница 9 из 89