tgindex
Vadik | The Architect

Vadik | The Architect

Статистика
@vadik_the_architectрусский

👾 Архитектор Вадик рассказывает про веб-разработку, ворчит о новых технологиях, отговаривает идти в IT. 👾 ——————— Подписывайся, если единственное, чем ты душишься на повседневе - это техническая документация 🥴

Последний пост
18 февр.
Последнее чтение
13 авг.
Постов за неделю
0
Всего постов
20
Тип
открытый
Язык
русский
В каталоге с
13 авг.
Подписчики
135
+1 за 4 дн.
Сутки
0
0,00%
Неделя
 
Месяц
 
Просмотров на пост
678
20 постов
Вовлечённость
502,2%
к подписчикам
Постов в день
0,0
всего 20
Упоминаний
1
каналов
Охват размещения
оценка
1/24сутки в ленте
1/48двое суток
1/72трое суток

Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.

Посты

  • Есть у меня тут владельцы steamdeck? Ироничная история: на новый год купил приставку, чтобы играть в игрушки, пока слежу, чтобы мой малолетний сын во сне не задушился в одеяло, а в итоге не заметил как написал плагин, описание которого вам надо почитать в источнике 😉 Вам требуется только vless ссылка на конфигурацию и желание чувствовать вкус свободы в любой wi-fi сети на территориях, где не всё так однозначно с доступом в интернет Всё по-взрослому: - лучший UX (честно, я так за деньги даже никогда удобно для людей не делал) - установка в 2 клика - kill-switch режим работы для особо мнительных и скрытных Дока тут 👉 Напоминаю, что конечно же доступ к исходному коду предоставляется только в образовательных целях, и чтобы в нашей стране было больше образованных сетевых инженеров

  • Как обещал: ссылка на видео с доклада Если есть компетенции касаемо Линукса, буду рад, если вы мне напихаете, потому что, как сейчас модно говорить – «всё не так однозначно»

  • Привет! Давно не виделись 🥰 За последнее время в моей жизни было много изменений: - Сменил работу (теперь я эффективный менеджер) - Стал отцом А сегодня уже через час выступаю на Frontend Conf 2025 с докладом про отлов любой утечки памяти в Nodejs приложениях. Как только будет возможность, скину вам сюда запись доклада. Его содержание сделал максимально полезным для middle+ / senior разработчиков. А пока просто пожелайте удачи, во второй части доклада настолько жесткая техничка, что боюсь наговорить лишнего в потоке мыслей 🔫

  • TDD + Агенты: сокращаем баги и сюрпризы со старта Я последнее время очень много инвестирую времени в изучение того, как работать с нейронками, потому что если можно что-то не делать руками – я первый в очереди, чтобы это не делать 🙂‍↕️ Сегодня разберём, почему тест‑дривен девелопмент (TDD) — один из самых мощных способов писать код вместе с AI‑агентами. TDD превращает ваши тесты в чёткий контракт и цель для AI: вместо абстрактных “сделай красиво” вы даёте конкретные проверки, которые нужно пройти. Плюс вновь можно в мини-начальника поиграть. ⸻ Вот как это работает в 3 простых шага: 1. Генерируем тесты Просим AI написать тесты по ожидаемым входам/выходам и прямо говорим: “Мы делаем TDD, не пиши реализацию, только тесты”. 🧪 2. Оцениваем, полноту Ответственность с нас никто не снимает, поэтому тут придётся напрячь мозг и провалидировать сценарии на соответствие ТЗ 3. Пишем код по тестам Просим цифрового раба писать код, чтобы все тесты были зелёные, не трогая сами тесты. Итерации “код → запуск тестов → правки” обычно занимают 2–3 цикла. 😁 ⸻ Почему это работает? • Чёткая цель. Тесты выступают визуальным мокапом для AI, давая конкретную цель, которую необходимо достигнуть. • Меньше багов. AI сразу закроет корнер-кейсы, ведь они есть в наших тестах. • Стабильность будущих итераций. Наличие тестов для кода гарантирует, что агент не сломает свой же код при написании будущих фичей. ⸻ 🤓 Что думаете, господа? Сами так пробовали уже?

  • 💵Джентльменский (Нищий) набор вайбкодера 💵 Если ты всё ещё сидишь только на одном сервисе для работы с нейронками, то поздравляю – ты успешно лишаешь себя массы возможностей ускорить свой рабочий процесс и сэкономить кровно заработанные три хандред бакс. 💸 Сегодня поделюсь своим набором инструментов, которые использую ежедневно практически за бесценок. 🏅 В конце поста бонус для начинающего вайбкодера. Учитывая, какая мясорубка творится на рынке нейросервисов в 2025 году, платить 20 баксов за ChatGPT – я считаю, это оверпрайс, и вот тебе аргументы почему: ⸻ 🔍 Поиск по интернетам: Perplexity Бесплатного тира хватает за глаза. Лично я больше 20 запросов в день не делаю, поэтому не переплачиваю. 🤯 Глубокие “размышления”: Grok 3 В день доступно: - 2 глубоких ресёрча (это когда нейронка шерстит порядка 100 источников и собирает акутальную статью по теме без особого вранья) - 5 обычных «подумать», аналог GPT-o1 из Pro подписки 💻 Терминал на стероидах: Warp Мак-юзеры оценят. Удобная и стильная оболочка с ai-подсказками. Представь, что рядом с тобой сидит линукс-админ уровня middle и помогает тебе вводить команды. Бесплатного тарифа хватит, чтобы пройти собес на девопса в твою контору. 🎙 Голос в текст без боли: SuperWhisper Я много работаю с текстом, и эта тулза ускорила мою жизнь примерно в 3 раза. Распознаёт речь идеально, ставит пунктуацию как филолог, и самое главное – работает полностью оффлайн! Даже бесплатная модель огонь, правда с русскими окончаниями иногда косячит, если ты мямлишь (и да, этот пост я на 80% надиктовал именно через эту штуку). 🤔 Большой контекст: Gemini Pro 2.5 У Гугла есть отдельная площадка с доступом ко всем их моделям и реально большими контекстами. Можно доить их без проблем и бесплатно. 🚀 All-in-one комбайн: Langdock Это ChatGPT на максималках. Один инструмент со всеми популярными моделями и настолько щедрым free-уровнем, что потратить его сложно даже специально. Киллер-фича: - можно шарить проекты с преднастроенными промтами, - создавать свои мини-базы знаний для команды, - выдавать API-ключи без привязки банковской карты (идеально для пет-проектов). ⚠️ ВАЖНО: с российского IP моментальный бан, так что юзайте строго через ПППТ (программа по перенаправлению трафика). ⸻ 🔒 Напоминаю, все эти интернет-тулзы надо юзать только через ПППТ, иначе бан или геоблок! ⸻ А теперь обещанная халява: ▶️ По этой ссылке ◀️ можешь прямо сейчас урвать годовую подписку Perplexity Pro по цене одной чашки кофе в Москве. Я активировал сегодня через чешский IP – всё чётко завелось даже на существующий аккаунт. Дерзайте, пока лавочка не прикрылась!

  • Лайф-хак как с позором проебать демо своей работы: 1. Арендуйте коворкинг рядом с Минобороны 2. Подключитесь на встречу с мобильного интернета 😐

  • А?синхронный рендеринг в NextJS – криминальная функциональность Так вышло, что демо моего нового проекта совпало с нашим альфа-релизом библиотеки, которая очень эффективно работает с env переменными. Мой кореш в команде завёз одну очень крутую фичу для того, чтобы можно было не париться с переменными Next.js, а указывать их на уровне конфига CI, чтобы собирать образ только 1 раз и деплоить в какие угодно окружения, но это совершенно другая история. (Я думаю, что когда он закончит, он обязательно с вами поделиться этой экспертизой, да @trash.js?) Библиотечка тестировалась в 14 версии фреймворка, но я в своем проекте использую уже 15-й Next. И вот значит какой казус произошёл: Представьте ситуацию – вы отрефачили уже под 80 файлов, написали и переделали под это дело тесты, всё бегает, всё зелёное, красота делишес мякотка! 👦 И тут ты, гордый своей работой, пытаешься запустить проект в среде разработки и... Консоль захлёбывается в количестве ошибок с содержанием «Что ты, лысый? Твоя переменная недоступна!». Для контекста: Библиотека работает так, что скриптом размещает публичные переменные окружения в служебное поле window, и далее все потребители этой переменной могут к ней обращаться. Когда ты пытаешься найти проблему, чаще всего самый эффективный способ – это отключать модули вниз по дереву, которые используют нерабочую зависимость. В итоге, чтобы стартануть проект, из контента на странице у меня осталось только «Hello World!». Мы потратили где-то полдня, чтобы отладить либу, докрутить, проверили – работает, поздравили друг друга с успешной сессией парного программирования, и пошли заниматься своими делами дальше. 🍗 Но как только я раскомментировал весь функционал приложения, обнаружил один очень неприятный момент: переменные были доступны только в том месте, где мы их проверяли (а делали мы это на уровне Layout). Пришлось стешить 2 дня работы в долгий ящик, пока не придумаем как побороть проблему особенности рендеринга… «Так в чём проблема, я не понял?!» Особенность нового ассинхронного рендеринга заключается в том, что теперь у вас все компоненты подготавливаются на сервере в непредсказуемом порядке, потому что каждая операция рендеринга асинхронного компонента откладывается в EventLoop, а в какой очередности Нода её туда положит? Мы не знаем. То есть вековое знание предков из 2016 года о том, что компоненты, расположенные вниз по дереву, гарантированно рендерятся позже своих родителей, теперь не совсем актуально, живите с этим, хорошего дня. 😡 P.s. приложение задеплоил по-старинке, со мной всё норм

  • Записывал сегодня для вас давно обещанный ролик про эргономику рабочего места в домашних условиях, так что скоро ждите на ютубе 🚀 Моя комната выглядит так, будто мне по знакомству предоставили порно-студию под запись 😧

  • Оптимизатор Оптимизатора Дамы и господа! Вашему вниманию предоставляется уникальная возможность воспользоваться новой утилитой для экономии денежек при развёртывании NextJS! Встречайте: элегантный и миниатюрный скрипт по очистке кэша изображений модуля Image Optimizer, который вы можете запустить в отдельном контейнере вашего кубернетис (и не только) кластера, чтобы избавить ваш мониторинг ресурсов от неверных показателей! 💣 next-image-cache-cleaner 💣 Часть расследования «а зачем вообще потребовалось данное решение?» я описывал в предыдущих постах. И сейчас самое время подытожить, куда же *течёт на самом деле память фреймвока NextJS? Барабанная дробь… ответ: «никуда» 🥱 . Как бы странно это не звучало, но это горькая правда. Картина, которую мы с вами наблюдали - это ни что иное, как накопление файлового кэша в памяти ОС Linux. Как оказалось, при создании новых файлов/директорий ОС Linux в дополнение к файлу также создаётся index node (Inode - это метаданные о файле: права доступа, владелец, размеры, временные метки и прочее, подробнее на kernel.org) Далее записываемые данные попадают сначала в page cache — буфер памяти, управляемый ядром, для временного хранения данных, прежде чем они будут сброшены на диск. И этот буфер памяти будет поглощать место под кэш настолько много, насколько это возможно. Видите ли, таким образом достигаются оптимизации по чтению и записи (чтобы не дрочить ваш физический накопитель каждый раз, когда вы совершаете множество CRUD операций в файловой системе 😐 ). В обычном «домашнем» использовании, когда запущены десятки программ и сервисов, мы не ощущаем этого эффекта накопления на персональных компьютерах, потому что на оперативную память всегда оказывается конкурентное давление других процессов. А в кластере у нас чаще всего приложение изолировано и ничего не мешает ему раздуваться, картину портит ещё то, что контейнер видит всю память кластера, а не ту, которую вы указали в лимитах пода. Ну и представьте — что такое лишние 500-1000 Мб оперативы, когда в запасе ещё 100+ Гб? Да, в ядре есть флажки, которыми можно в хост-системе переопределить правила, как утилизировать этот кэш, но есть большая вероятность, что вы просто выстрелите себе в ногу этими экспериментами и жёстко уроните производительность всей тачки. 🔫 Подробнее про использование RAM в Линус можете прочитать в статье "Help! Linux ate my ram!" Дело закрыто! 🧑‍⚖️ Если эта информация вам было полезна, то расчехлите свою звёздочку на GitHub в моём репозитории со скриптом (если будут вопросы, как оно работает, приходите в комментарии, всё расскажу) Давайте продвинем эту тему и поможем бедолагам, которые столкнулись с такой же проблемой 🚀

  • 🤯 Удалось достать интересную статистику из закрытых HR чатов: на диаграмме изображено соотношение планируемых трат в IT секторе на 2025 год. (Как заверяют авторы опроса, сбор данных проводился среди 50+ компаний от среднего уровня и выше) Дальтоники, извините сразу, вы не выкупите 😁

  • Оптимизация без регистрации и смс Доброй ночи всем, кто не спит! Дядя Вадим закончил реализацию скрипта, который спасёт денюжки вашей компании, заложенные в бюджет облачной инфры 😏 Можете потратить их, чтобы заказать певцов себе на летний корпоратив. Что скрипт умеет: 1. Чистить кэш при достижении указанных лимитов. 2. Чистить аутдейтед кэш в фоновом режиме по расписанию. Что по плану: - покрыть тестами корнеркейсы; - покрыть код jsdoc'ом, чтобы омериканцам не стыдно было показывать; - скормить всё в искусственный ум, чтобы написал на всё это дело шикарную документацию для вас. Мотивацию и как лучше использовать в вашем конкретном кейсе тоже постараюсь описать. 😇 Так что ждите ссылку на репу тут! 😇 С вас потом ожидаю волну звёзд и респекта, а пока пойду посплю чуть-чуть 🤏

  • Ребята! Финал истории: • истиную проблему утечек нашли • эту недельку тестим, первый кейс дал 100% результат • ждите меня на всяких холиджиэсах в этом году 💪 спойлер: виноват не JavaScript

  • Чуда не случилось, вместо повышения иду просить микрозайм 🤯 p.s. знаний сейчас собрано достаточно: стреляет встроенный пакет fs/promises, про него вот что вообще написано в доке API-интерфейс fs/promises используют базовый пул потоков Node.js для выполнения операций файловой системы вне потока event loop. Эти операции не синхронизированы и не потокобезопасны. ваш покорный слуга на этапе чтения дампов листов операционки (со стороны выгляжу так, будто что-то в этом понимаю)

  • Если до утра синий график не превысит 650мб – иду просить повышение! ☺️

  • Здравствуйте, а вы точно фронтендер? Сейчас занимаюсь исследовательской работой по утечкам памяти в NextJS, а именно пытаюсь найти дыру в кэше модуля оптимизатора картинок NextImage. Временное решение есть: мой коллега написал патч для NextJs, который отключает кэш, но сохраняет оптимизацию. Минус такого подхода: увеличенное потребление CPU, так как оптимизатор работает на каждый запрос изображения. Если у вас нет S3 корзинки - вашим денежкам на счёте в клауде кранты 🔫 (у нас корзинка есть, поэтому «хилимся — живём!») Кратко о механизме работы оптимизатора: прилетает GET запрос /_next/image*, картинку прогоняет через библиотеку Sharp, новая картинка сохраняется на диск с хитрым именем папки и файла и далее возвращается клиенту. Имя содержит срок жизни кэша, расширение и какой-то etag в формате base64. Это нужно, чтобы не держать в памяти процесса некста мапу ссылок на файлы. (URL на изображение у вас на сайте персистентный во времени, значит можно восстановится по значению ссылки через хэш-функцию). Звучит здраво, технологично, но эта мразь где-то течёт! Причём обычным Heap Profiler’ом вы эту утечку не поймаете. У меня на графике потребления ресурсов сожрало уже гигабайт, а куча (heap) как была 100 мегабайт, так и осталась. После нескольких суток безуспешных попыток собрать хоть какие-то полезные метрики, берём таймаут на вечер, чтобы прийти в себя, выпить пивка и признаться, что десятки часов были потрачены впустую и надо менять методику исследования. 🤨 Важно! Если вы уже на этом моменте столкнулись с отчаянием, напоминаю, что курьером сегодня можно заработать столько же, сколько мы получаем в айтишке, так что вы точно ещё пригодитесь этому миру и не помрёте с голода. Далее мы заходим внутрь докер контейнера, где запущен сервер и начинаем эксперименты по снятию дампов памяти в ОС Linux, а также с различными утилитами по типу htop, видим кучу непонятных значений, которые описывают состояние оперативной памяти. Среди них только одно значение растёт характерно нашим графикам и оно называется RES. RES/RSS (Resident Set Size) — это объём физической памяти (RAM), который процесс фактически занимает в данный момент. Он включает: 1. Страницы памяти, которые в настоящее время загружены в RAM. 2. Память, используемую разделяемыми библиотеками, при условии, что эти библиотеки всё ещё находятся в памяти. Это может означать, что ту память, которую я выделял для чтения и записи буфера на диск, могут использовать какие-то другие процессы, а не только сервер NextJs. (Напоминаю, что патч, сохраняющий оптимизацию, решает проблему утечек). Методом исключения можно предположить, что возможно у нас накапливаются незакрытые дескрипторы для оптимизированных файлов изображений, так как это не процессы. А если удалить папку с кэшем, то буквально через минуту график потребляемой памяти летит вниз до нормальных ожидаемых значений. 📉 История обрывается на самом интересном месте, потому что на текущий момент это всё что я могу рассказать, моих знаний сейчас недостаточно, чтобы быстро вкурить, как это всё работает на самом деле. 😠 Желаю вам всем хорошего дня, а я ушёл читать документацию и статьи о работе Linux систем! Клянусь, если я смогу разобраться, то подамся на все конференции в этом году, чтобы рассказать про этот инженерный ад! Может даже и pr в next сделаю, если получится фикс изящный придумать. Фух блять, а я ведь просто когда-то хотел красить кнопки и пить смузи из чертополоха… видите, я уже даже забыл, что там рядовые работяги употребляют на обеде 😐

  • Как модель GPT-o1 помогла мне не суициднуться Бывает сталкиваешься с ситуацией, когда разработчики откровенно хуево поработали над документацией, а фичу с интеграцией их творения делать надо. Со мной такая история произошла в прошлую пятницу. Дело в том, что я столкнулся с интеграцией OIDC сервиса SberID. Вроде сайтик для разработчиков красивый, а толку – ноль. Поставляют только подключаемый скрипт со своего CDN в минифицированном виде и дают примеры с настройкой SDK под разные кейсы авторизации. Если вы делаете свою аппку на typescript, то никакой типизации вы не получите! Они оставили это дело в далёком 2023, когда забросили поддержку своего GitHub аккаунта, тогда старую версию можно было установить через npm (мы понимаем, по каким причинам это было сделано, но неужели не нашлось никакой площадки для размещения сорсов??? В конце концов можно было рядом с продакшен скриптом положить архив, и дать возможность загрузить их его по отдельной ссылке) Я до последнего не понимал какая у меня сейчас версия активна в приложении, в связи с чем не мог понять, что я делаю не так. Масла в огонь подлил их механизм обработки ошибок: вместо того, чтобы сообщить мне прямым текстом, что было не так с моим запросом, они мне дают код ошибки формата «73b800hwa871lop» и предлагают написать им на почту!!! 💩 «Ладно, хер с ним!» – подумал я, и мне в голову пришла авантюра: • Загружаем всё содержимое страниц документации в модель chat-gpt o1 • Загружаем содержимое минифицированного скрипта sdk Далее просим выступить в роли разработчика ПО и провести реверс-инжиниринг работы кода, после полученную информацию соотнести с содержимым документации, которую я ему предоставил. Первый раз анализ благополучно погиб через 7 секунд анализа (возможно у них был перегруз инфры и случилась внутренняя ошибка). Но дальше произошло невообразимое… Модель рассказала мне, как работает скрипт, какие есть потенциальные неточности в документации, и написала исправленные примеры использования. Я попробовал их, и, «о чудо!», у меня всё заработало! После я попросил оформить содержимое файла sberid.d.ts. Чат даже любезно расписал куда мне его добавить в конфиг, чтобы в IDE был автокомплит. Возможно, с нейронками мы деградируем со временем в ряде задач как специалисты, но подобные кейсы показывают, насколько эти инструменты могут быть полезны в работе! Это спасло мои нервные клетки, ведь теперь я смогу закрыть задачу почти в срок 🦍 Делитесь вашими историями в комментариях, какие нейронки используете и для чего, мб вы тоже были в похожей ситуации?

  • Цитата дня: настоящий Senior – это не годы опыта, это когда пишешь рантайм проверки typeof поверх TS. Чтобы точно ничего не сломали 😳

  • без подписи

  • Меня порядка 4 друзей на каникулах спросили, как оборудовать рабочее место дома, чтобы ближе к 30 годам не вывалился позвоночник и не пришлось делать операцию на глаза 👨‍🦯 Скажите, для вас это тоже актуальная тема? Кажется что пора делать видео про то, почему пора выбросить игровое кресло на помойку и сменить тёмную тему на светлую 😎

  • Какой язык учить разработчику в 2025 году? Если тебя интересует только ответ на вопрос: то английский или китайский и БАЗУ COMPUTER SCIENCE 😵‍💫 Серьёзно, как бы это абсурдно не звучало, но я считаю, что актуальность такого пункта в индивидуальном плане развития как «выучить новый язык программирования» к следующему перфоманс ревью в твоей компании катастрофически теряет актуальность в сегодняшнем мире и вот почему: 1. ИИ инструменты реально созрели писать код как разработчики с окладом в 100 тысяч рублей. Корректность и полнота реализации напрямую зависит от качества промта, который ты ему скормишь. 2. Языки программирования по своим возможностям и назначению сегодня практически сравнялись. Поэтому чаще всего наплевать: какую технологию и на каком языке брать, лишь бы команда умела с этим работать. Исключая кейсы, когда вы разрабатываете Систему Быстрых Платежей и подобное (моё уважение такому дикому хайлоаду) 3. Жизненный цикл продуктов за последнее десятилетие заметно сократился, что позволяет в какой-то момент выбросить всё на помойку и написать с нуля (не все могут себе позволить так распоряжаться ресурсами, тем более в текущей экономической ситуации) 4. Начала преобладать модульная + микросервисная архитектура, что позволяет вам всегда быть в тренде и использовать лучшие решения под ваши задачи, не влияя на качество продукта и поддерживать все участки системы по мере необходимости. Беря во внимание эти пункты, можно сделать вывод, что в таком мире больше всего будет цениться грамотная естественная речь и ваши человеческие качества (как минимум сделайте так, чтобы с вами было просто приятно работать: писать рабочий код код уже умеют все, а писать его так, чтобы вас не хотели порезать в переходе – единицы) Если у вас куча свободного времени – лучше подтягивайте базовые знания Computer Science, так как они никогда не устаревают и помогают делать красиво 😎