-
Евреи в СССР
Я не застал толком советский союз, но запомнил некоторые его рудименты. Один из них заключался в том, чтобы, увидев еврейскую фамилию, обязательно это подчеркнуть.
Например, идут титры, и написано: композитор А. Шпильман. Взрослые такие с легкой улыбкой – еврей! Как будто раскрыли агента, который тщательно скрывался.
Я, маленький, долго не понимал, что это за еврей такой и почему он появляется во всех титрах. Я думал, это конкретный человек и удивлялся его продуктивности.
Помню как прочел фантастический рассказ “Песок” о космонавтах, которые потерпели бедствие на планете-пустыне. Одного из них звали Шапиро. Когда я пересказывал рассказ пожилому родственнику, это звучало так: Шапиро сказал своему другу (“Шапиро? Это еврейская фамилия!”), что они падают, потом Шапиро вышел из корабля (“Шапиро – это еврей!”) и увидел пустыню, затем Шапиро пошел (“Тот самый еврей?”)…
Короче, то, что Шапиро – еврей, я услышал раз десять, но так и не понял, что это значит. По сюжету он был нормальным чуваком, так что я не нашел связи между тегом и поведением. И вообще, в эпоху межпланетных путешествий мало кого волновало, кем он был: русским, мексиканцем, французом.
Еще одна кулстори на тему евреев случилась в школе. Урок истории, тема – приход к власти фашистов и преследование евреев. Историк – маленький неженатый мужчина, который делал сомнительные комплименты девочкам и просил их фотографии. И вот он объясняет, за что преследовали евреев: вы понимаете, у них нет своей страны, они везде образуют диаспоры, строят заговоры И ВООБЩЕ — они же Иисуса распяли!
Как вы думаете, что́ мы, дети, запомнили из этой тирады?
Следующий урок замещает другая учительница, спрашивает – за что преследовали евреев? Весь класс хором – потому что они Иисуса распяли! У учительницы глаза из орбит, она тихим голосом спрашивает: кто вам это сказал? Отвечаем — Константин Батькович. Она: понятно, я с ним поговорю.
А потом прошли годы, и гнилая привычка выявлять евреев как-то выветрилась. Сегодня это считается моветоном, и очень хорошо. На этом примере мы видим, что еще 30 лет назад люди не знали кое-что из элементарной этики. Поэтому брать пример с прошлого поколения нужно очень осмотрительно.
-
Настройка uBlock Origin
Заметка самому себе как настроить uBlock Origin.
-
На закладке Filters отметить все галочки кроме “Block Outsider Intrusion into LAN”. С ней отваливаются картинки на Ютубе и в других музыкальных сервисах. Почему – пока не разобрался.
-
Во вкладке 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 раз – у вас все плохо. Вы безответственные и трусливые. Давайте подтягивайтесь.