• Евреи в СССР

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

    Например, идут титры, и написано: композитор А. Шпильман. Взрослые такие с легкой улыбкой – еврей! Как будто раскрыли агента, который тщательно скрывался.

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

    Помню как прочел фантастический рассказ “Песок” о космонавтах, которые потерпели бедствие на планете-пустыне. Одного из них звали Шапиро. Когда я пересказывал рассказ пожилому родственнику, это звучало так: Шапиро сказал своему другу (“Шапиро? Это еврейская фамилия!”), что они падают, потом Шапиро вышел из корабля (“Шапиро – это еврей!”) и увидел пустыню, затем Шапиро пошел (“Тот самый еврей?”)…

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

    Еще одна кулстори на тему евреев случилась в школе. Урок истории, тема – приход к власти фашистов и преследование евреев. Историк – маленький неженатый мужчина, который делал сомнительные комплименты девочкам и просил их фотографии. И вот он объясняет, за что преследовали евреев: вы понимаете, у них нет своей страны, они везде образуют диаспоры, строят заговоры И ВООБЩЕ — они же Иисуса распяли!

    Как вы думаете, что́ мы, дети, запомнили из этой тирады?

    Следующий урок замещает другая учительница, спрашивает – за что преследовали евреев? Весь класс хором – потому что они Иисуса распяли! У учительницы глаза из орбит, она тихим голосом спрашивает: кто вам это сказал? Отвечаем — Константин Батькович. Она: понятно, я с ним поговорю.

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

  • Настройка uBlock Origin

    Заметка самому себе как настроить uBlock Origin.

    1. На закладке Filters отметить все галочки кроме “Block Outsider Intrusion into LAN”. С ней отваливаются картинки на Ютубе и в других музыкальных сервисах. Почему – пока не разобрался.

    2. Во вкладке My filters добавить такую строку:

    ||accounts.google.com/gsi/*$xhr,script,3p
    

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

    Поражает, сколько фильтров нужно ставить, чтобы просто смотреть интернет. Пользуясь случаем, шлю Гуглу лучи добра за то, что запретили uBlock в последнем Хроме. Я так понимаю, кроме форков Файерфокса вариантов нет?

    Еще одна мысль: обидно, когда в консоли написано “Blocked by uBlock”, но нет информации о том, какой фильтр сработал. Имя фильтра и номер строки были бы спасением. Эти данные по-любому есть в контексте и нужно только добавить их в сообщение. Или я плохо смотрел?

    На закладке Settings включить “Block media elements larger than” и задать свой размер. Полезно, чтобы отключать большие обложки к статьям. Все равно они сгенерены нейронкой.

    Там же: опция “Block remote fonts”. Полезно для сайтов, чьи дизайнеры любят поиграть со шрифтами.

  • Метод Сократа

    В комментариях упомянули диалог методом Сократа. Вспомнил, что хотел написать на эту тему.

    Что такое метод Сократа? Это когда собеседник не возражает напрямую, а задает серию вопросов, чтобы направить другого к истине. “Истина”, “направить” – как благородно звучит!

    К счастью, сегодня есть точное и емкое слово, чтобы описать метод Сократа — это троллинг. В античные времена такого слова не было — как, к примеру, не было термина “пассивная агрессия”. Но явление было, а Сократ стал его мастером.

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

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

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

    Я давно научился узнавать троллей, косящих под Сократа. Высказал какую-то мысль, и подобно мухе к тебе пристал человек. Задает наводящие вопросы: что ты имел в виду, а что ты скажешь на то, на се… Как будто не очевидно: тролль собирает базу высказываний, чтобы сказать: ага, сначала ты заявил X, а потом Y! Ты противоречишь, иди разберись.

    Поэтому если от человека следует поток вопросов, я быстро его прерываю. Либо проходи мимо, либо пиши у себя опровержение. Я даже дам ссылку, мне не жалко.

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

    То же самое применимо к Сократу. Он был гением и абсолютным троллем. Но подражая Сократу, пожалуйста, держите курс на гения. Троллей и без вас хватает.

  • Оригинальная озвучка (2)

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

    Оригинал:

    Переозвучка:

    Обратите внимание, что в оригинале тетя говорит негромко. Она начинает чуть ли не шепотом от негодования и плавно повышает голос. При этом она не кричит, а больше играет интонацией. И конечно, за счет того, что обе актрисы (на съемках и в озвучке) говорят на одном языке, попадание в губы идеальное. В русской озвучке она говорит громче и с каким-то придыханием.

    Ну и сравните голоса Гарри. В оригинале говорит ребенок ровно того возраста, что и актер в фильме. Это голос мальчика 8-10 лет до пубертата. В русской версии это голос студента театрального училища.

    Когда годами смотришь фильмы в переозвучке, это не парит. Но потом раз — нет-нет да услышишь оригинал, и возникает диссонанс. Почему в оригинале не то что другие голоса, а вообще иные громкость и манера речи?

    Короче, просто посмотрите эти два куска.

  • Оригинальная озвучка (1)

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

    Я не знаю, как устроена русская озвучка в целом – я имею в виду общие принципы, – но она довольно странная. Там, где в оригинале персонаж шепчет, перводчик орет, словно над ухом. Русская озвучка до неприличия громкая как в маршрутке: громко, четко и заранее.

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

    Послушайте персонажей из “Омерзительной восьмерки” Тарантино. Там каждый голос – праздник. Южный выговор, северный, мексиканский акцент, оттяжки, проглатывание слогов и целых слов. Красота!

    То, что пропадают игра слов и различные отсылки, нет смысла писать. Видимо, на их адаптацию не остается времени.

    Теряются акценты речи. Например, босс называет чернокожего подчиненного “black cunt” – в переводе мы получаем “урод”. Конечно, я бы не хотел слышать дословный перевод, но вместе с тем и не должно быть беззубого сглаживания. Это же бандиты! Персонаж высказался грубо и уничижительно, и нужно как-то это передать.

    Приведу пример, который особенно меня расстроил. В игре Resident Evil 4 Remake есть дополнение за второстепенного персонажа. Это полноценная кампания, которая называется Separate ways – раздельные пути. В русской версии она называется “Два пути”. Казалось бы, довольно близко. Не все ли равно?

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

    I think we both know this is where we go our separate ways.

    Полагаю, мы оба знаем, что теперь наши пути – врозь.

    То есть речь идет о разобщении, о том, что альянсу конец.

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

    Скажите на милость, как русский перевод “Два пути” все это передаст? Ответ – никак, игрок просто проезжает мимо.

    Ясно, что не всегда уровень английского позволяет все понять без пауз и перемоток. Но результат того стоит. То же самое касается книг: в свободное время почитываю Остров сокровищ и Гарри Поттера на английском. Попадаются отличия, но об этом – в другой раз.

  • Гугл и Эпл

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

    Насколько я понял из комментариев, на самом деле будет так: приложения из .apk все-таки можно поставить, но только если они подписаны ключом разработчика. Чтобы получить этот ключ, нужно пройти верификацию Гугла, и, возможно, заплатить (последнее – неточно). Разумеется, если разработчик проштрафится, Гугл отзовет его ключ и все .apk, им подписанные, превратятся в тыкву.

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

    Особым приложениям новое правило навредит. Это некая серая зона: софт, который полезен людям, но не пройдет модерацию Гугла. Например, приложение для диабетиков, которое дает указания по приему инсулина и других лекарств. Рекомендация лекарств запрещена в Гугле, поэтому люди выкладывают самосборный .apk. Что им теперь делать – не знаю.

    Я тоже получил письмо от Гугла с предложением пройти верификацию. Все потому, что лет пятнадцать(!) назад выкладывал в стор приложение – личный кабинет Читинского Энергосбыта. Им даже пользовались, а однажды какая-то УК хотела его купить.

    Вторая новость – Эпл создаст внутренний магазин приложений для России. Там смогут публиковаться те, кто под санкциями: всякие сберы-тиньковы и так далее. Пока что магазина нет, но Эпл сам идет навстречу.

    Я пишу это не для того, чтобы сказать: Гугл плохой, а Эпл – хороший. Дело в другом: принципы айти-гигантов всегда оказываются соглашением в моменте. Многие выбирали Андроид только затем, чтобы ставить ломанные приложухи с 4pda. Яблочников стыдили: у вас рабство. А теперь ситуация если не переменилась, то близка к этому: один гигант закручивает гайки, другой – ослабляет, хотя оба били себя пяткой в грудь и заявляли, что никогда такого не будет.

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

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

  • ИИ-выжимка

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

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

    Полезным упражнением может быть вот что. Загуглите что-нибудь, над чем работали только вы. Например, библиотеку на Гитхабе с осмысленным readme. У меня есть такие, где в readme написано много. Скажем, “clоjure github deed” или “clоjure github pg2”. В результате Gemini покажет пересказ твоего же текста.

    Может быть, не совсем ясен смысл моего сообщения, но постараюсь объяснить. Большинство пользователей интернета – потребители. Они смотрят обучающие видео, статьи, подключают чужой код. Алгоритм, который собрал сотню источников и выдал их сжатую версию, кажется чудом. Но чудо пропадает, когда у какого-то кусочка знания один источник и работал над ним один человек – особенно если это вы.

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

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

    Если бы такой кусочек был, они бы увидели, как сильно заблуждаются.

  • A fake Clojure Object equals to what you want

    Imagine you write a unit test where you compare two maps:

    (is (= {:some {:nested {:id ...}}}
           (get-result)))
    

    Turns out, this map has a random UUID deep inside so you cannot blindly compare them with the “equals” function:

    (defn get-result []
      {:some {:nested {:id (random-uuid)}}})
    
    (is (= {:some {:nested {:id ???}}}
           (get-result)))
    

    This won’t work because the nested :id field will is random every time.

    What to do? Most often, people use libraries for fuzzy matching, DSLs, etc. Well, a single case still doesn’t mean you should drag in another library. Apparently, it could be solved with a dummy object that equals to any UUID:

    (def any-uuid
      (reify Object
        (equals [_ other]
          (uuid? other))))
    
    (= any-uuid (random-uuid))
    true
    
    (= any-uuid 42)
    false
    

    Now replace the value in your map, and the test will pass:

    (is (= {:some {:nested {:id any-uuid}}}
           (get-result)))
    

    It works the same for numbers:

    (def any-number
      (reify Object
        (equals [_ other]
          (number? other))))
    
    (= any-number 42)
    true
    
    (= any-number -99)
    true
    

    The only caveat is, this dummy object must be the first one in the = function. It does equal to any object on the left but the opposite is false: a normal UUID doesn’t equal to a fake UUID.

    For the rest, it short and trivial, and no other libraries are needed.

  • Индекс по created_at

    Маленькая техническая заметка про SQL. Такая: если в таблице есть поле created_at, по нему должен быть btree-индекс. Если поля нет, его нужно добавить вместе с индексом.

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

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

    Я хотел выбрать события по времени, благо интервал небольшой, всего неделя. Но оказалось, что у поля created_at нет индекса. В таблице 400 миллионов записей, и отбор по нему работает страшно медленно: limit 10 занимает 8 минут.

    Добавить индекс в такую таблицу – страшно дорого. Это нужно делать ночью на выходных, кто на это пойдет?

    Скажете: используй create index CONCURRENTLY. А я скажу, что конкурентный индекс не работает для партицированных таблиц, а наша именно такая. Нужно делать либо обычный индекс в лоб, либо создавать конкурентный индекс для каждой партиции. Все сложно.

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

    Время – ключевой фактор при расследовании инцидентов. Даже если в таблице миллиард записей, границы времени известны хотя бы примерно. Можно выбрать срез и дальше обработать его вручную. А если индекса нет, мы лишили себя такой возможности. Сами себе Буратины.

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

  • Собеседования (2)

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

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

    Недавно на Хабре была отличная статья: человек собеседовался в разные бигтехи: тиньковы, озоны и прочее. Если коротко – половина мест не отвечает, другая половина запускает бесконечный цикл собесов. Автор очень хотел в Тиньков, но когда ему назначили восьмой(!) собес, ушел в 2Гис.

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

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

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

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

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

    Ребята, которые собеседуют в тиньках-озонах-яндексах по 8 раз – у вас все плохо. Вы безответственные и трусливые. Давайте подтягивайтесь.

Страница 2 из 100