uz
Feedback
igrishaev

igrishaev

Kanalga Telegram’da o‘tish

Ivan Grishaev on everything // grishaev.me

Ko'proq ko'rsatish
672
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
+230 kunlar
Postlar arxiv
Шестая глава: Язык JSON Path https://grishaev.me/pg-book-json-ch06/

Уже писал: у ребят, подсевших на AI, со временем пропадает всякая эмпатия. Можете спорить, доказывать обратное, но я вижу все больше этому подтверждений. Например, есть внутренняя система, которая уведомляет об ошибках. Сообщение об ошибке выглядит примерно так: "что-то сломалось". Никаких деталей, стектрейса, вообще ничего, за что можно зацепиться. Смотрю исходник – все эти данные есть, нужно их только показать. Спрашиваю: ребят, ну вот получили вы фразу "что-то сломалось". Какие ваши действия? Ответ просто убил. Они копируют ее в форму на внутреннем сайте, а там агент или какая-то модель, я не разбираюсь. Агент сканирует те самые логи, которые были под рукой у скрипта и пишет, в чем ошибка. Потрясающе, да? Все данные в контексте, но мы их не покажем. Сходи к агенту, и он криво-косо вытащит те же логи, что были у нас. Никто не видит проблемы. Оказывается, поправить питон-скрипт сложнее, чем дергать агента, жечь токены и тупить в монитор. Буквально в тот же день аналогичная проблема: плохо сделанная работа, ничего не понятно. Спрашиваю: как с этим работать? Разработчик шарит экран и показывает: вот у меня тут Клод, здесь такой агент, сякой агент и три плагина в редакторе. Вбиваю сообщение об ошибке, и агенты мне все подсказывают. Рад за тебя! Но беда в том, что не у всех такой сетап. У меня лично нет клодов-агентов. Неужели в голову не пришла мысль, что нужно сделать удобно всем, а на расчитывать, что каждый полезет в AI? И такого становится все больше: зачем делать работу хорошо, если всегда есть AI? Подсевший на AI разработчик напоминает хорька в норе: главное, чтобы мне было удобно, а остальное неважно. Иногда от подобных ответов накатывает такое отчаяние, что хочется кататься по полу – а собеседник даже не понимает, что происходит. Ну и что, что соощение непонятно? Можно ведь спросить у агента, так что какая разница? Это обескураживает.

how_to_deal_with_these_keyboard_marks_on_my_macbook_screen_v0_s59rqo0nawvc1.webp3.59 KB

how_can_i_get_rid_of_keyboard_marks_please_tell_me_screen_v0_kb3nqpun4tyf1.webp1.63 KB

how-to-prevent-keyboard-marks-on-macbooks-v0-j7rsfhzscn3e1.jpg1.17 MB

keyboard_marks_on_my_macbook_screen_does_applecare_cover_v0_w9juwk2d7f1g1.webp3.34 KB

IMG_0921 copy2.jpg8.65 KB

npYeC.jpg1.90 MB

Накидаю еще картинок, чтобы было понятно, о чем речь.

photo content

Я сменил несколько макбуков, и у всех одна и та же беда: на экране отпечатывается клавиатура. Поначалу это выглядит невинно: видны только уголки, но затем они собираются в квадратики. Если не принять мер, со временем отпечатывается контур тачпада. Пишут, что отпечатки можно оттереть, но это не так. Часть следов пропадает, однако со временем отпечатки образуют физические повреждения, которые можно тереть до дыр в экране – никуда они не денутся. Я сменил три макбука, плюс параллельно пользуюсь корпоративным. Заметил, что чем раньше модель, тем устойчивей она к опечаткам. Например, на ноуте 2014 года они появились чуть ли не через три года; на ноуте 2020 года – через два, на ноуте 2025 года – через несколько месяцев. Почему это так, понять нетрудно. Ноутбуки стараются ужать, и расстояние между экраном и клавишами становится меньше. Я не измерял, но по ощущениям оно меньше миллиметра. Достаточно надавить пальцем, чтобы экран коснулся клавиш. Что уж говорить о переносе ноута в рюкзаке, когда на него давят другие вещи. На корпоративный ноут я боюсь дышать и за все время носил его в рюкзаке раз десять. Однако и на нем уже появился нестираемый дефект. Ну а самая жесть – это нанотекстура. Напомню, что в последний раз я брал ноут с нанотекстурой. Мне нравится матовый экран и тот факт, что видишь картинку вместо своего отражения. Однако такой экран очень нежный, любой тык пальцем заметен сильнее. Как следствие, он уязвим для отпечатков клавиш. Не прошло и нескольких месяцев, как на экране появились контуры кнопок и тачпада. Это именно физические повреждения, и никакие салфетки-тряпочки не помогут. Насколько я понял, единственный способ избежать порчи экрана – это подкладывать что-то между ним и клавиатурой, когда ноут закрыт. Вопрос – что именно? В интернете советуют резиновую накладку или тряпочку, но на мой взгляд это опасно: то и другое толстые, а расстояние между экраном и кнопками – доля миллиметра. Помните, когда в первый раз открываешь ноут, в нем постелена хрустящая тонкая бумага? Это и есть верное решение. Разумеется, та бумага сразу идет на помойку, и только потом потом понимаешь, что она не просто так. Поэтому берем обычный лист А4 и кладем в ноут. Делаю так уже какое-то время и заметил, что помогает: экран чище, следы перестали разрастаться. Как правильно заметили на Reddit, по-хорошему надо подать на Эпл в суд. Путь ноут будет толще на пару миллиметров, зато не испортится экран и не придется ходить с прокладкой. И я ни за что не поверю, что в самом Эпле не в курсе проблемы. Прикладываю картинку из интернета.

Когда говорят о кэшировании, для меня это тревожный знак. Да, я понимаю, что порой кэширование необходимо. Однако у меня возникает вопрос: понимает ли тот, кто говорит о кэшировании, весь набор проблем, что оно несет? Напомню, что проблем с кэшем довольно много. Когда-то его нужно сбрасывать, когда-то — прогревать. Кэш должен быть транзакционным: если кто-то взялся его обновлять, другие клиенты должны ждать. Сюда же — проблема сериализации и походы в сеть. Вместо сериализации я предпочитаю материализацию. Термин я взял из Постгреса, но его можно применить и к другим системам. В Постгресе материализация работает так. Предположим, есть тяжелый запрос: много джоинов и сложных условий. Из него делают мат-вьюху и сбрасывают ее в таблицу по расписанию. Выборка из готовой таблицы быстрее на порядки. Важно, что эта таблица доступна всегда. Даже если мы не обновим вьюху, то все равно получим данные. Обновление вешают на крон или событие. Другой пример: есть апишка, которая возвращает список отделений фирмы. Отделения появляются редко, поэтому ходить за ними в базу нет смысла. Проще выгрузить отделения в json-файл и раздавать его Nginx-ом. Задача выгрузки тоже ставится на крон. Еще пример материализации — мой блог. Он устроен на Jekyll — генераторе статичных сайтов. При запуске Jekyll обходит md-файлы и производи файлы html. Далее они раздаются как статика; нет обращения к базе, Редису или очереди задач. Задачу обновления сайта — или материализации — обычно ставят на гит-хук или Github action, но я запускаю ее вручную. Таким образом собранный сайт есть всегда, пусть и с отставанием. И еще пример: скажем, есть у вас в фирме тормозная CRM. Ее апишка держит не более полутора запросов в секунду и огорчает всех клиентов. Тут же находится обезьянка, которая предлагает Редис. А решение простое: реплицировать базу данных CRM в другую базу (частично или полностью). В реплицированной базе завести мат-вьюхи, которые собирают нужные проекции; вьюхи обновляются по крону. Даже если CRM отвалится, у вас будет копия базы, и что-то вы покажете. Может быть, данные будут не самые свежие, но это лучше, чем вечный спиннер или "попробуйте еще раз". Идея материализации в том, что данные есть всегда, и показать их очень легко. В идеале — отправить файл или прочитать плоскую таблицу. Нет такого, что данные собираются по трем микросервисам, а потом еще обрабатываются. Наоборот — все готово, нужно только показать. И есть фоновая задача, которая готовит данные: лезет в сервисы, очереди и другие малоприятные места. Эта задача отвечает за то, чтобы данные были актуальны. Если она отвалится, мы покажем устаревшие данные, что почти всегда лучше, чем свалиться с ошибкой. Не всегда материализация полезна; возможно, она не решит какие-то из ваших задач. Но лично я рассматриваю ее как более разумный шаг по сравнению с кэшированием. Иногда материализация оказывается очень и очень в тему.

Напомните, откуда взялось мнение, что можно встать на самокат и поехать куда хочешь? Ничего, что прокатный самокат весит под 20 килограммов, а человек на нем — в среднем 60? Суммарная масса 80 кг разгоняется до 20-30 км в час, что опасно для всех: и самокатчика, и тех, кто рядом. Самокату, как и любому транспорту, нужна инфраструктура. Поезжай по велодорожке или ступай в особое место в парке, где тусуются самокатчики. Нет велодорожек? Увы, ты пролетаешь. Пиши в управу, голосуй на госуслугах и так далее. Но почему надо ездить по тротуару? Это место для пешеходов. Не решайте свои проблемы за счет других. То, что самокатчики сбивают друг друга как кегли, меня не волнует. Может быть, потеряв несколько зубов, они поймут, что не нужно опережать поток движения в три раза. Но они очень опасны для детей. Скажем, идет ребенок, а сзади его обгоняет самокатчик. Ребенок увидел бабочку, рванулся вбок — и чуть не попал под 80 кило на огромной скорости. Та же самая ситуация с доставщиками. Как-то раз я подслушал их разговор, и тезисы примерно следующие. Если ездить по проезжей части, нужно соблюдать ПДД для легких мотоциклов (самый правый ряд и правая сторона). Соблюдая правила, курьер не успевает доставить заказ. Вдобавок менты устраивают засады, штрафуют, задерживают под разными предлогами на час, чтобы добиться взятки. Поэтому проще ездить по тротуарам. Вот и получается, что обеим сторонам — доставщикам и ментам — удобней, когда курьеров выдавливают с дороги на тротуар. Это проще, чем действительно следить за безопасностью. В оправдание курьеров можно сказать только то, что по тротуарам он стали ездить очень медленно. Хватило всего пары случаев самосуда, как курьеры все поняли. Любой электротранспорт на тротуаре можно обозначить как решение личных проблем за счет других. Нет велодорожек? Ничего, поеду между детьми. Не успеваю доставить заказ? Ничего, срежу через парк. Причины в каждом случае одинаковы: нет онфраструктуры, нет желание ее развивать, лчиное безразличие к окружающим и ноль эмпатии.

Когда меня спрашивают, куда впадает Волга, я спрашиваю в ответ: куда впадает Янцзы? Начинается кудахтанье и хлопанье крыльями, мол, не наша река. А что значит "не наша"? Расстояние на глобусе между Волгой и Янцзы — пятнадцать сантиметров. Не вижу причины, по которой нельзя чуть-чуть повернуть его. Или что: "наши" реки учить надо, а "чужие" не надо? Странная логика: в географии таких терминов нет. Разницы между Волгой и Янцзы я не вижу. Есть и другие реки, и все они куда-то впадают. Незнание отдельной одной реки ни о чем не говорит. Чтобы вам не гуглить: Янцзы впадает в Южное китайское море. Я узнал это случайно из туристического справочника, когда ездил в Китай. Просто запомнилось.

Недавно купил уши AirPods Pro 3. Было бы странно писать на них обзор, потому что в сети их тысячи. Ограничусь лишь одним фактом. В ушах классное шумоподавление, и покупать их следует только их-за этого. Ощущения трудно передать словами: надел — и словно провалился в другой мир. Не слышно кипящего чайника и льющейся воды. Совершенно пропадает шум машин с улицы. Испытывал в поезде и даже самолете, и это просто поразительно: гул самолета становится едва слышным, словно жужжание насекомого. Поэтому покупку я рассматриваю только с позиции подавления шума. AirPods — это такие электронные беруши, которые полностью устраняют шум. Подойдет тем, кто не любит громких звуков и предпочитает тишину. Пару раз я даже спал в них, и это был замечательно. Разве что девайс великоват, так что со временем я откатился на обычные затычки. Может быть, это личное, но я не люблю громких звуков: когда кто-то громко говорит или музыка играет выше адекватного уровня. Особенно этим страдают бары: зашел — а тем ревет магнитофон. Как мне разговаривать с друзьями? Склоняться через весь стол и кричать в ухо? Спасибо, мне такого отдыха не нужно. Другой случай — каток. Зимой мы всей семьей ездим на крытый каток и катаемся по часу. Одна беда — иногда попадаем на "диджей-сеанс". Это когда какой-то уродец врубает музыку так громко, что раскалывается голова. В таких случаях я ношу с собой затычки, а вот теперь мне помогут уши. Испытать это чувство — погружение в полную тишину — я бы посоветовал каждому. Оно напоминает, как редко вокруг нас бывает тишина. Знаете выражение — звенящая тишина? Оно происходит из того факта, что мы постоянно что-то слышим, и когда звуки пропадают, мозг начинает судорожно их нащупывать. С AirPods привыкаешь к том, что абсолютная тишина — это нормально. Само собой, не следует носить их за рулем и при ходьбе по улице: повышается риск несчастного случая. Надевайте их только за рабочим местом. С подключением по Блютузу все по-прежнему: полная задница. Если достать уши, и рядом несколько яблочных устройств, они начнуть подключаться к каждому и прерывать звук. Все это без какой-либо системы и понимания. Чтобы не трепать родственникам нервы, отключил на их устройствах блютуз. Но повторюсь, подавление шума — это нечто, по крайней мере для меня. Удивительное открытие.

Поговорим о явлении под названием "сайты образовательных заведений". Не знаю, обращали вы внимание или нет, но эти сайты довольно меметичны и представляют вещь в себе. Каждый раз, посещая их, я закусываю щеку, чтобы не рассмеяться. Итак, сайты учебных заведений строятся по одному и тому же паттерну. Прежде всего это главная страница, за которой более-менее следят. На ней все современное: контент появляется из пустоты, верстка идет этажами (слоями), везде карточки с тезисами и фотографиями с фотостоков. В большинстве случаев используется Реакт, а не jQuery. Видно, что работу поручили грамотному, современному фронтендеру. Следует, однако, понимать, что эта страница — ширма, прикрывающая срам. Стоит кликнуть на сайт кафедры или факультета, как вы улетите на поддомен. Там крутится ублюдочная CMS на PHP вроде Вордпресса или Друпала. Возникает ощущение, что вернулся в нулевые. Макет поддомента делится строго на шапку, контент и сайдбар. В сайдбаре — опрос "Как вам новая версия сайта?" (новая, блин). Поиск не работает и выдает техническую страницу Апача. Содержимое не уступает технической части. Все данные устарели; актуальные данные выкладывают в виде сканов. Прочитайте это предложение еще раз: данные выкладывают в виде сканов. С подписью ректора, между прочим. Чтобы найти расписание занятий или учебную программу, нужно скачать скан на 10 мегабайт, сделанный на убитом железе. Далее просмотреть десять страниц, чтобы найти нужную информацию. На сайте нет ни одной формы. Чтобы отправить заявление, качаешь вордовский файл docx, заполняешь и шлешь на почту. А, не так. Файл сжат архиватором rar, то есть имя примерно такое: zajavka_na_dopolnitelnye_kursi_2026_(2)_final.docx.rar Заведует сайтом кафедры админ Валера, который то в отпуске, то на пересдаче сессии, то просто в пьяном загуле. Сайт может лежать месяц, прежде чем это в принципе заметят. Посещая сайты университетов, я обращаю внимание не на главную, а на поддомены факультетов и кафедр. Именно их состояние говорит о том, насколько в заведении следят за бардаком. Главная страница, где фрондендер подключил Реакт, увы, не отвечает на этот вопрос. Ровно как ни на один другой.

Вскоре после этой истории Никита нас покинул. Это было ожидаемо: после истории с медведем он уже не мог повысить накала. Никита примкнул к другой компании, средней возраст которой тоже был младше его. Как-то раз, проходя мимо, я издали увидел его в окружении новых поклонников. Знакомая картина: взгляды прикованы к нему одному; Никита картинно растопырил руки, изображая то ли гопника, то ли милиционера из своих похождений. Интересно, они уже дошли до медведя? Вряд ли, но все еще впереди. Иногда я вспоминаю эту историю. Интересно, какая все же истинная причина этих шрамов? Случай с медведем, скажем прямо, маловероятен, зато отлично подходит для пьяных выступлений. Может быть, все гораздо прозаичнее: либо на Никиту напала бешеная собака, либо ее натравили на него за какую-то провинность, например кражу. Такие обстоятельства не тянут на рассказ, поэтому пришлось сочинить про медведя, кровь и кишки. Вот так. Эх, Никита! Каким колоритным и харизматичным ты был, как врезался в мою память! Где бы ты ни был, желаю тебе уберечься от невзгод, прожить долгую и счастливую жизнь. Храни тебя бог, случай, фортуна – во что там веришь. Надеюсь, так и случится – несмотря на твое упорное желание добиться обратного.

Сюжет истории закручивался даже с несвойственной Никите лихвой. Перепившись сверх всякой меры, компания пошла смотреть на зверей. К тому времени была поздняя ночь. Никита потерял сознание, и заботливые приятели воспользовались этим, чтобы пошутить. Никиту втащили в вольер с медведицей, решив, что ему будет забавно проснуться рядом с ней, и ушли. Пробуждение Никиты было кульминацией рассказа. Трудно выразить всю ту театральность, что он вложил в речь, жесты, мимику. Передать его старания может лишь картина Перова "Охотники на привале": тот же взгляд, глаза на выкате, растопыренные пальцы, изображающие зверя. Все взгляды прикованы к рассказчику, и у него абсолютная власть над аудиторией. Никита вещал следующее: "Просыпаюсь я такой, короче, башка болит, перед глазами круги. На каких-то, короче, досках, все мокрое. И какая-то туша передо мной в шубе. Кто это и что это – не понимаю. Тут я привстал и присмотрелся, а это, сука, медведь! Огромный как диван, рядом лежит, чуть ли не обнимает. Наверное, думал, что я мертвый. Тут он увидел, что я очнулся, и морду ко мне придвинул. Я такой как заору! Встать не могу, тело не слушается, так я начал от него ногами отталкиваться и все ору! А он, короче, тоже заревет да как полоснет меня когтями по животу! Продрал майку и весь живот! Пошла кровь, чую – из меня кишки вываливаются! Кругом чьи-то крики, топот. Сторож вбежал в вольер, отбил меня от медведя, выволок из вольера. Из живота кровища, сука, льет как из крана. Потащили они меня в машину и отвезли в больницу. Там я и пролежал три месяца, пока лечили живот." Закончив историю, рассказчик сплюнул, закурил которую по счету сигарету – за час он выкуривал больше, чем мы за день – и приготовился ждать вердикта. А мы, обалдевшие от такого развития, молча сидели с открытыми ртами. Всякое рассказывал нам Никита, но чтобы медведь и кишки… это был новый уровень. Нужно было время, чтобы прийти в себя. А Никита курил, сплевывал и спокойно ждал. Мало помалу мы вернулись в реальность и стали робко высказывать мнение, что хотя рассказ и поразительный, но он мало похож на правду и вообще, может быть, ты что-то выдумываешь… Никита ждал. Не дождавшись его возражений, мы вконец осмелели и сказали, что все-таки не верим: этого быть не могло. Получив такой вердикт (на который, впрочем, он и рассчитывал), Никита не просто нас уничтожил, а втоптал в грязь и растер каблуком. Отложив полторашку пива, которую он, словно младенца, нянчил на коленях, Никита встал и задрал майку до подбородка. Под ней обнаружилось когда-то мощное тело (байки про рестлинг могли быть правдой), заплывшее пивным жиром. А сверху вниз через весь живот, от груди до паха, шли восемь глубоких шрамов: четыре слева и четыре справа. Без сомнения, эти шрамы были оставлены хищником – получить такие в быту невозможно. Шрамы были неровные; те, что посередине, были шире и глубже. Особенно меня поразила их глубина: словно канавки, они вдавались в тело на полсантиметра, а где и глубже. Какой же глубины тогда была рана? Полагаю, сантиметра два, не меньше. Разглядывая шрамы, я смутно подумал, что пивной жир спас Никите жизнь. Будь он тощим как я в пятнадцать лет, когти обязательно задели бы внутренности. И не доехал бы Никита до больницы, а если бы и доехал, оказался бы в отделении, которое чаще всего устроено в подвале. Да, эффект быть просто уничтожительным. Если до этого мы были ошарашены рассказом, то демонстрация "пруфов" просто лишила нас слов. Шрамы были, и оспорить их было невозможно. Очевидно, Никита тщательно планировал свое выступление и, скорее всего, уже не раз исполнял его. Но даже не смотря на постановку и театральность, я не мог не оценить его мастерства.

Рассказ "Никита и медведь" Это было в Чите, когда мне стукнуло пятнадцать или около. Летними вечерами я несколько ребят собирались в условленном месте. Обычно мы курили сигареты и пили пиво – то и другое дешевое, максимально низкого качества. В то время купить табак и алкоголь несовершеннолетним не представляло труда: магазины никто не проверял, а предупреждения на дверях были фикцией. Под курево и алкоголь шли беседы: сплетни, душевные разговоры и похвальба всех мастей. Мы не были бунтарями или несчастными подростками: по большей части мы притворялись, играли роль. Ребята происходили из хороших семей, посещали школу и хорошо учились. У всех были карманные деньги. Редко кто приходил домой после полуночи, чтобы не ссориться с родителями (телефонов тогда не было, только пейджеры). Такие темы, как тяжелые наркотики или уход из дома или бродяжничество, были для нас табу. Как-то раз мы столкнулись с настоящим бездомным подростком, и это было жутко: все равно что встретить африканского аборигена-людоеда. Его неразвитость и бедная речь контрастировали с резкими, воровскими повадками, когда речь шла о каких-то грошах. После общения с ним мы все были подавлены. Поэтому, потребляя сигареты и пиво, мы делали это по-детски, оставаясь цивилизованными детьми, пусть даже с дурью в голове. Со временем в нашей компании появился новый участник. Звали его Никита, а уж фамилию я не вспомню. Никита был старше нас лет на пять, высокий и здоровый, с бородой. Вся его наружность говорила, что он – первый парень на деревне. Характер не уступал внешности: он говорил быстро и громко, много смеялся, на каждый случай знал анекдот. Он театрально играл голосом, отчего эффект шутки, пусть даже не смешной, усиливался многократно. Мир Никиты была эгоцентричным. В центре, как столп, был Никита, а остальные участники вращались вокруг него. Когда Никита приходил, вопрос о том, чем заняться, автоматически снимался. Все рассаживались как малые дети, а Никита восседал в центре и рассказывал истории – разумеется, о себе. Рассказывал Никита много и красочно. О том, как путешествовал автостопом. О том, как был ударником в группе (в рюкзаке у него были барабанные палочки, и он эффектно крутил их пальцами). Как занимался рестлингом, где и с кем пил. Как прятался в поезде от милиции, тусил с байкерами, укладывал в постель замужних женщин и многое другое. В каждой истории на него, казалось, ополчился весь белый свет: милиционеры, бабушки, гопники, ревнивые мужья – но Никита неизменно выходил сухим из воды. Шли дни. Новый гость часто посещал наши встречи. На тот момент мне не казалось странным, что Никита был в нашей компании. Однако совсем скоро, буквально через год, сама идея об этом стала неприятной. Предположим, хотя бы часть из рассказанного была правдой. Разве стал бы человек, бывавший в стольких ситуациях, просиживать штаны с малолетками? Как-то не вяжется: милиция, байкеры, женщины, а слушатели – пятнадцатилетняя шпана. Много позже, когда я повзрослел и стал разбираться в типажах, стало ясно: у Никиты были проблемы со сверстниками и, судя по всему, сверстницами. Не смотря на обилие женщин в его рассказах, нашего героя никогда не видели с девушкой – хотя, казалось бы, от желающих не должно быть отбоя. Недостаток внимания от сверстников Никита компенсировал тем, что понизил уровень окружающих – другими словами, предпочел нас. В какой-то момент Никита решил, про уже достаточно прогрел публику, и она готова для финальной – ультимативной! – истории. Дождавшись дня, когда пришли все, герой уселся в центр, закурил и поведал нам ее. Начиналась история весьма невинно: Никита опять с кем-то пил. Сменив то и другое место, компания оказалась в ночном зоопарке – один из участников работал в нем сторожем. На мой взгляд, зоопарк и вправду подходит для распития алкоголя. Территория огорожена и, так сказать, близка к природе. А тот факт, что где-то рядом спит лев или тигр, приятно щекочет нервы.