Будни разработчика
СтатистикаБлог Lead JS-разработчика Автор: @bekharsky По рекламе: https://telepost.pro/ch/id2415 или https://t.me/it_adv Чат: https://t.me/htmlshitchat №5001017849, https://www.gosuslugi.ru/snet/679b74f8dad2d930d2eaa978
- Последний пост
- 11:07
- Последнее чтение
- 12:46
- Постов за неделю
- 11
- Всего постов
- 433
- Тип
- открытый
- Язык
- русский
- Категория
- Технологии
- В каталоге с
- 12 авг.
- 1/24сутки в ленте
- 918
- 1/48двое суток
- 1 052
- 1/72трое суток
- 1 134
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
Верстаешь? Оцени 7 причин пройти наш бесплатный интенсив по Frontend-разработке: 1. Без опыта сделаешь реальный сайт сервиса доставки с нуля; 2. Добавишь JavaScript-логику, расчёты и трекинг; 3. Подключишь карты и маршрут доставки через API; 4. Превратишь сайт в Angular-приложение; 5. Подключишь backend и выложишь проект в продакшен; 6. Научишься использовать ChatGPT и Giga во Frontend-разработке; 7. Узнаешь 9 способов найти первый заказ на фрилансе даже без опыта. А главное, ты проведёшь 7 дней в приятной компании Fullstack-разработчика с 12-летним стажем – Романа Чернова и получишь живую помощь по проекту. 👉 Проскочить на интенсив бесплатно Начинаем уже завтра. 🔥 С нас обучение, практика и помощь с выходом на фриланс или собеседованием.
Проект от подписчика! Напоминаю, что я выкачу любую статью или проект от вас, не стесняйтесь писать. Презентация? Выступили на митапе? Хотите поделиться интересной статьёй — добро пожаловать! Всем привет! Меня зовут Василий, я разработчик из Хельсинки. В свободное время занимаюсь проектами на стыке веба, C++ и криптографии. Один из них это AmethystXMR: https://amethystxmr.github.io/ Это браузерный Monero-кошелёк: нативный C++ код Monero собран в WebAssembly, а вокруг него сделан интерфейс на React. Ключи остаются у пользователя в браузере, там же приложение сканирует блокчейн и формирует транзакции. На скриншоте кошелёк называется [object Promise] - это не баг, а мое чувство юмора: люблю вписывать в формы значения вроде undefined, null, NaN, Invalid Date, ReferenceError, TypeError, [object Object], Cannot read properties of undefined. Смешно же. AmethystXMR полностью рабочий: можно создать или восстановить кошелёк, отправлять и получать XMR, подключаться к своей ноде, использовать QR-коды. Можно запускать и в Tor Browser, в том числе с onion-нодами. Еще есть поддержка multisig. В Monero он устроен довольно интересно и не совсем так как в Bitcoin. Я рассказывал об этом на MoneroKon, а по мотивам доклада вышел подробный пост со схемами: https://coin.space/how-does-monero-xmr-multisig-work Недавно еще разбирался с неприятным багом: платеж отображался как потерянный, хотя в итоге оказалось, что деньги никуда не пропали. Всю историю расследования и того, как удалось найти проблему, описал здесь: https://www.reddit.com/r/MoneroMeansMoney/comments/1v5dsx2/the_story_of_a_lost_and_found_payment/ Еще с MoneroKon есть запись моего второго доклада - про Lightning Network: https://www.youtube.com/watch?v=obFwB_KA7pk Исходники проекта: https://github.com/amethystxmr/amethystxmr.github.io Если появятся какие-то вопросы по проекту, WebAssembly, Monero или докладам - спрашивайте, отвечу.
#фишка дня Каждому смотрящему сериалы известно, что один из самых лучших способов сделать текст субтитров видимым на практически любом фоне — это добавить инверсную обводку. Белый контур для чёрного текста, чёрный — для белого (внезапно). Есть ли что-то подобное в CSS? Ну, конечно, есть! Как минимум, можно бросить тень aka text-shadow. Правда, синтаксис не очень интуитивный да и выглядит иногда странненько. Какие ещё варианты? SVG text, очевидно, но там свои нюансы с доступностью и стилями. И есть ещё! -webkit-text-stroke-color Несмотря на префикс, Firefox тоже его поддерживает (спорное решение, но уж как есть). Вот только как всегда есть нюанс. По-умолчанию, обводка будет нарисована перед слоем с текстом. Это очевидно, если понимать разницу между штрихом (stroke) и обводкой (outline), но всё же. Поэтому paint-order: stroke нам в помощь! Таким образом, штрих будет отрисован первым, натуральным образом превратившись в обводку (при достаточной толщине, конечно же): -webkit-text-stroke-color: white; -webkit-text-stroke-width: var(--stroke); paint-order: stroke; #css #stroke #outline #бородач
😤 Включил VPN — и вместо удобства получил новые проблемы? 💳 Банк требует дополнительные подтверждения. 🏛 Госуслуги перестают работать. 🛒 Ozon не открывается даже через раз. 🎮 В играх пинг взлетает до небес. Попробуйте другой подход! ⚡️ WarpVPN — быстрое подключение к нужным сервисам без постоянных неудобств. 🌍 Стабильный доступ к нужным ресурсам 📱 Поддержка популярных устройств 🔒 Простая настройка — всего один клик. Попробуйте бесплатно в один клик 👇 https://warpvpn.space/?utm_source=telegram&utm_medium=post&utm_campaign=budni_dev&utm_content=tg_post_1 — именно так VPN и должен работать.
#история дня 30 лет назад вышел Internet Explorer 3.0. 13 августа 1996 года появилась версия для Windows, а 8 января 1997 — для Mac OS (да-да, она тогда не macOS называлась). Было же время... Что же такого в нём примечательного? Ну, помимо того, что это первый IE с легендарной вселяющей ужас во всех верстальщиков иконкой, это ещё и первый браузер вообще с поддержкой CSS. В то время CSS использовался чтобы помечать посещенные ссылки фиолетовым. Эта самая поддержка была даже по тем скромным меркам неполной. Microsoft, впрочем, надолго решила продолжать в том же духе. А ещё была своя реализация JavaScript: JScript. И предлагалась поддержка VBScript... я свой первый веб-проект на нём писал, не особенно содрогаясь. Работал браузер на 386 с Windows 3.1, требовал от 4 MB оперативной памяти, 12 MB — если хотелось Java 🤯 Посмотреть скриншоты и видео можно в музее веб-дизайна: https://www.webdesignmuseum.org/old-software/web-browsers/internet-explorer-3-0 Взгрустнулось, котаны? 😅 #css #ie #history
#статья дня Прекрасный рефрешер знаний по таблицам от Мишель Баркер: https://piccalil.li/blog/styling-tables-the-modern-css-way/ Таблицы получили много незаслуженного хейта из-за лихих нулевых. Мобильные устройства тоже не добавили удобства, в итоге многие положили болт на семантику и начали верстать таблицы гридами. Во имя чего — непонятно. А люди потом в эксель не могли ничего скопировать. Но вместе с этим, ничего более универсального для двумерного представления данных пока не придумали, поэтому имеет смысл обновить знания по существующим фишкам и посмотреть, нет ли чего нового. Статья хороша тем, что посвящена не трюкам, а просто сводит воедино базу по доступности и удобству. Да, sticky columns там тоже описываются. Ну и тут уместно напомнить о моём тейке про доступные таблицы: https://t.me/htmlshit/2981 #css #table #бородач
Ваш бизнес есть на карте. Но знает ли об этом кто-нибудь, кроме вас? 13 августа эксперты Рег.Решений и Rocket Business расскажут о локальном SEO — Яндекс.Картах, 2ГИС и других способах привести клиентов из поиска в офлайн-бизнес. На вебинаре вы узнаете: — как продвигаться в локальной выдаче; — что действительно влияет на видимость бизнеса; — как работать с Яндекс.Картами и 2ГИС; — как оценивать результат, а не просто радоваться красивым позициям. Это первая встреча из серии бесплатных вебинаров «Как превратить поиск и нейросети в канал стабильных продаж» от Рег.Решения и Rocket Business. 🗓 13 августа, 14:00 (Мск) Регистрация здесь
Ваш бизнес есть на карте. Но знает ли об этом кто-нибудь, кроме вас? 13 августа эксперты Рег.Решений и Rocket Business расскажут о локальном SEO — Яндекс.Картах, 2ГИС и других способах привести клиентов из поиска в офлайн-бизнес. На вебинаре вы узнаете: — как продвигаться в локальной выдаче; — что действительно влияет на видимость бизнеса; — как работать с Яндекс.Картами и 2ГИС; — как оценивать результат, а не просто радоваться красивым позициям. Это первая встреча из серии бесплатных вебинаров «Как превратить поиск и нейросети в канал стабильных продаж» от Рег.Решения и Rocket Business. 🗓 13 августа, 14:00 (Мск) Регистрация здесь
#видео дня Если фамилия Корольковой вам ничего не говорит, то её шрифты почти наверняка говорят. Александра Королькова — шрифтовой и книжный дизайнер, арт-директор Paratype, автор «Живой типографики» и один из авторов PT Sans, PT Serif, Circe и других известных гарнитур. А вот её свежая лекция — «Шрифтовая магия»: https://www.youtube.com/watch?v=76P5P9agcHc Королькова показывает нестандартную вариативность, оптические размеры, то, как один шрифт может буквально «переодеваться» под разные задачи, разбирает внимание к мелким деталям и всякие странные штуки, которые вообще можно зашить внутрь шрифта. А потом отдельно доходит до более практичного вопроса: что из всего этого реально полезно дизайнеру в повседневной работе и где это можно попробовать бесплатно. И заодно несколько ссылок по теме из архива канала: — бесплатная «Живая типографика» — оптическое выравнивание — минус и дефис #video #fonts #talk
🔴 Тестовое собеседование на Frontend-разработчика со старшим разработчиком ex. Сбер 13 августа(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Frontend-разработчика. Как это будет: 📂 Даниил Дмитриев, старший разработчик в R-Vision, ex. Сбер, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Даниил будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Даниилу Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Frontend-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_front_bot Реклама. О рекламодателе.
#статья дня Я тут в нашем продукте всё пытаюсь сделать идеальные всплывающие уведомления, aka тосты. Потому что выскакивают, как хлеб из тостера. Поначалу они были сугубо императивные, вызвали уведомление вручную, вручную же скрыли все разом или по некому id. Потом я решил объединить уведомления и некоторые виды модальных окон (например, подтверждение или отмену действия). Параллельно я начал переписывать императивные уведомления на React, потому что на тот момент приложение стало гибридным. Получалось вроде неплохо. Но в какой-то момент... В какой-то момент я на полную познал, что такое гипотеза Чёрной Королевы (забавно, что в английском языке — Красной Королевы). В простейшем варианте она звучит так: "Нужно бежать, чтобы оставаться на месте". Непомерно много усилий требуется, чтобы лишь чуть-чуть двигаться вперёд. В мире разработки она же значит, что на один закрытый баг — получаешь пятнадцать новых :) Да, пришло время признать, что я со своей реализацией уведомлений зашёл в тупик, и надо смотреть в сторону альтернатив. И тут попадается нечто прекрасное, компонент Sonner: https://emilkowal.ski/ui/building-a-toast-component И сразу ссылка на репозиторий: https://github.com/emilkowalski/sonner Статья буквально на острие взаимодействия CSS и JS, объяснены принципы построения анимаций на CSS-переменных и управления ими из React-приложения. Сами же тосты реализованы на простой шине событий, что весьма надёжно. В общем, я ещё свой поиск идеальной реализации не завершил, но Sonner — максимально к ней близок. #react #toasts #notification #animation #бородач
КИТАЙ vs ЗАПАД: Kimi K3 vs Claude 16 июля вышла новая китайская модель Kimi K3. У неё бесплатный доступ, контекст до 1 000 000 токенов и вполне конкурентное качество на задачах, где обычно используют закрытые модели. Раньше мы уже пробовали искать интересные Telegram-каналы через Claude. Теперь решили повторить тот же эксперимент с Kimi. Проанализировали несколько тематических подборок Telegram-каналов, посмотрели, какие авторы и ресурсы чаще всего пересекаются в рекомендациях, и на этой основе собрали свою базу. После этого около недели вручную читали найденные каналы. В итоге оставили те, где действительно есть собственный контент, а не пересказ одних и тех же новостей. В подборке получились каналы про ИИ и нейрогенерацию, автоматизацию рабочих процессов, разработку, собственные проекты и карьеру в IT. Если интересно, можно забрать готовую подборку или попробовать таким же способом собрать свою. • ИИ: фишки нейрогенерации, библиотеки промптов и вайб-кодинг. • Автоматизация: как внедрять нейросети в бизнес-процессы и экономить время. • IT и карьера: как развивать свои проекты, расти в грейде и выходить на топовые офферы. Подписка в один клик: 👉 https://t.me/addlist/EKLFOB3vse5lNmUy
#тред дня Забытое воровство из X! Лонгрид от Димы Рожкова: «Собес — не место для советов». Сразу ссылку, ну и копия. Спасти компанию за 5 минут Ваши вопросы к представителям компании на собеседовании - очень важный этап. Он же может стать решающим. Я как то на собеседовании в Мету на менеджера спросил могу ли я уволить всю команду в один день и нанять новую. В те далекие долэйофные годы следующего этапа не последовало. Это был один из вопросов Бугаенко "на менедждера", в Лондон я переезжать не планировал поэтому ради прикола решил спросить. Один раз живем. Так вот. По следам треда @beshkenadze решил написать, что стоит спрашивать, а какие вопросы стоит задавать когда уже пройдете испытательный срок. Во-первых: совершенно точно нужно задавать вопросы! Особенно если вы идете на сеньорную позицию. Если у вас нет вопросов - это очень плохой сигнал: • Вы читали про компанию и ее бизнес? • Вам совсем не важно как с кем и с чем вы будете работать? • Ничего не хотите добавить к своим ответам? Что точно не стоит спрашивать Давать непрошеные советы и критиковать выбор людей. Даже если мягко. Во-первых у тебя околонулевой контекст. Даже если ты изначально спросил какая у них платформа (хороший вопрос), а потом начинаешь критивовать и сокрушаться, что они все выбрали не правильно. Тебе скорее всего ответили прямым ответом: У нас технология Х. У тебя нет необходимых данных, метрик и причин почему у них так. И за одну минуту ответа ты не сможешь открыть тупым глаза на их ошибки и заработать авторитет. Но ты можешь показать, что ты с порога несогласен. Начинаешь давать советы неразобравшись. Зачем тебя брать если ты уже недоволен с чем тебе придется работать? На собеседовании ты продаёшь не только экспертизу, но и предсказуемость. Компания (особенно если это уже работающий бизнес, а не совсем зелёный стартап) хочет понять: • Ты сможешь встроиться в существующую систему? • Ты будешь решать их проблемы или создавать новые? • Ты уважаешь чужой контекст или сразу начинаешь мерить всё своей меркой? Критиковать само собеседовение тоже не стоит. Особенно в лицо людям, которые к дизайну собеседования не имеют отношения. Как например спрашивать, пишут ли программисты алгоритмы каждый день на работе? Кому что кроме своей раздражительности ты этим вопросом хочешь показать? Особенно если ты НЕ МОЖЕШЬ решить задачу. Что стоит спрашивать На собесе ты исследователь и дипломат. Молчать совершенно точно нельзя, а задавать качественные вопросы, которые показывают сеньорность. Если ты молчишь и только киваешь, ты выглядишь как исполнитель, а не как человек, который будет влиять на архитектуру. Хороший баланс — задавать вопросы, которые раскрывают ситуацию, а не оценивают её. 1. Про нагрузку и масштаб «Какая сейчас нагрузка? Какие планы по росту на год-два?» 2. Про текущие боли «Какие самые болезненные проблемы прямо сейчас в инфре/деплое/костах?» 3. Про структуру команды «Как устроена команда? Кто принимает архитектурные решения? Как выглядит процесс изменений?» 4. Про бизнес-контекст «Какие требования бизнеса сейчас важнее всего: скорость фич, косты, надёжность?» 5. Про квалификацию и процессы «Какой уровень экспертизы в команде по платформе/куберу/терраформу?» 6. Про историю развития «Это первая версия системы? Как бы выглядела идеальная система для этой задачи? Какие риски в текущей архитектуре вы видите?» 7. Можно урвать эти 5 минут и наоборот уточнить свой ответ, если вы осознали, что что-то недосказали. Этой возможностью вообще довольно редко пользуются. Самый сильный сигнал сеньорности — это когда ты: задаёшь точные вопросы; демонстрируешь, что понимаешь компромиссы; оставляешь пространство для того, что у них могут быть на все веские причины о которых тебе не рассказали. На собеседовании твоя главная задача — собрать максимум информации и показать, как ты думаешь, а не «спасти» компанию от страшной ошибки за 5 минут. А уже после офера (или испытательного срока), когда ты внутри и у тебя есть полный контекст и выстроены отношения блядь, — можно и нужно спорить, отстаивать свою точку зрения. #cv #interview #собеседование #x
#инструмент дня Вы, наверное, уже наслышаны от обладателей айфонов про AirDrop и дикпики. Кроме шуток, передать файлы по локальной сети между двумя своими устройствами должно быть максимально просто же! Без ковыряний в Network Discovery, настроек Samba и так далее. И такое решение есть, даже с открытым кодом: LocalSend. Сайт: https://localsend.org/ Написано на Dart и Flutter, работает на всех разумно доступных платформах: Windows, Linux, MacOS, Android, iOS. Не опирается на один протокол, а перебирает все доступные и даже может запустить свой собственный сервер по необходимости. В крайнем случае, можно донастроить. Никаких облаков, всё по локальной сети. Поддержка нескольких получателей, поддержка буфера обмена. В общем, если у вас дома зоопарк устройств и пока не хватило времени настроить что-то иное, или лучше Samba вы ничего в жизни не видели — вот это самое то. #flutter #localsend #airdrop #network #бородач
Есть довольно простая ловушка: чем больше у тебя ответственности, тем легче перепутать количество работы с движением вперёд. Когда задач мало, всё понятно. Сделал — молодец. А потом появляется продукт, команда, маркетинг, несколько направлений роста, операционка, и почти любая задача начинает выглядеть важной. В итоге проблема уже не в том, как всё успеть, а в том, что из этого вообще не надо делать. У Константина Сухачева есть несколько хороших текстов ровно про это. Например, про стратегию как отказ. Не в смысле очередного «умей говорить нет», а буквально: если компания выбрала направление, остальные хорошие возможности тоже приходится сознательно хоронить. Иначе стратегия превращается просто в список пожеланий. Рядом — тема фокуса и постоянного переключения. Можно весь день быть занятым, отвечать, решать, созваниваться и даже чувствовать себя очень продуктивным. Но если каждые полчаса меняется контекст, к вечеру часто оказывается, что ничего действительно важного далеко не уехало. С управлением примерно та же неприятная механика. Хороший менеджмент — это далеко не всегда про мотивацию и развитие людей. Иногда это про отказ, увольнение, смену структуры или признание, что человек отлично работает, но находится не на своём месте. Мне в целом нравится такой взгляд на бизнес: не через отдельные инструменты и «хаки роста», а через выбор, ограничения и цену решений. Если это близко, можно начать с текстов про стратегию и отказ, про фокус и про цену управления. Остальное уже рядом.
#инструмент дня Вчера писал про try и в последний момент засомневался, какую картинку поставить к посту. В итоге сдался и прилепил нейрослоп. А можно было просто открыть Boron. Это редактор скриншотов терминала. Вставляешь туда настоящий вывод консоли — вместе с ANSI-цветами — и дальше можно уже нормально собрать картинку: поменять тему, фон, размер окна, поправить текст, перекрасить отдельные куски и вообще привести всё в аккуратный вид. Причём редактируется именно содержимое терминала, а не картинка поверх картинки. Можно выделять текст, печатать свой, менять цвета отдельных фрагментов. Есть даже прямоугольное выделение через Alt/⌥ — удобно, например, чтобы перекрасить целую колонку таблицы или кусок вывода tree. Boron сам отличает команды от вывода: строки с $, ❯, > или ➜ делает ярче, остальное немного приглушает. Тем сейчас восемь: от VS Code Dark+ и Dracula до Tokyo Night, Nord и Catppuccin. На выходе PNG, SVG, JPEG или WebP, плюс картинку можно сразу скопировать в clipboard. Но самая интересная функция — всё нарисованное можно скопировать обратно как настоящий терминальный текст: plain text, ANSI escape sequences или код на chalk. То есть можно не только оформить существующий вывод, но и мышкой набросать, как должен выглядеть CLI, а потом забрать это обратно в код. В общем, вчера вместо нейрослопа можно было просто красиво снять try в работе. Видимо, Boron попался мне примерно на сутки позже, чем нужно. boron.sh GitHub #tool #terminal
#инструмент дня У меня регулярно есть код, который вроде бы не проект. Проверить библиотеку, накидать PoC, воспроизвести баг, попробовать какой-нибудь API, проверить идею на десяти строках. Обычно всё это заканчивается одинаково: test, test2, tmp, new-test, какая-нибудь папка на Desktop, ещё одна в /tmp, а через пару недель уже непонятно, где именно лежал тот эксперимент, который внезапно понадобился снова. Для этого есть try. Идея простая: все такие одноразовые штуки живут в одной директории, по умолчанию ~/src/tries. Когда создаёшь новую, try добавляет дату: 2026-08-07-redis-pool Потом достаточно написать: try redis и получишь fuzzy search по всем своим экспериментам. Он ещё учитывает, насколько недавно ты открывал директорию, поэтому свежие штуки поднимаются выше. Если ничего подходящего нет, из того же интерфейса можно сразу создать новую папку. То есть try одновременно заменяет мне кусок из mkdir, cd, find и попыток вспомнить, как я назвал папку три недели назад. Короче, можно посмотреть интерактивную презентацию: https://asciinema.org/a/ve8AXBaPhkKz40YbqPTlVjqgs Ещё полезная штука: try . Если запустить это внутри git-репозитория, он создаст для текущего репо отдельный worktree в tries. Нормальный вариант для «хочу быстро что-то попробовать, но текущую рабочую копию трогать не хочу». Можно и сразу клонировать чужой репозиторий туда же: try https://github.com/foo/bar.git А если какой-то такой эксперимент внезапно вырос во что-то настоящее, его можно перенести из tries в обычные проекты. try уберёт дату из имени, перенесёт директорию, а на старом месте оставит симлинк, чтобы старый путь не умер. В общем, штука довольно узкая, но хорошо попадает в конкретную проблему: временный код почему-то почти никогда не оказывается временным. Написана на Ruby, ставится через gem или Homebrew. https://github.com/tobi/try #experiment #tool
Проект от подписчика! Напоминаю, что я выкачу любую статью или проект от вас, не стесняйтесь писать. Презентация? Выступили на митапе? Хотите поделиться интересной статьёй — добро пожаловать! Привет! Меня зовут Артём Несколько недель назад заинтересовался созданием собственного AI-бота внутри Telegram, который бы вел календарь, финансы, помогал что-то быстро проанализировать, не выходя из мессенджера, и обходился бы достаточно дешево. Для этого уже есть готовые решения (openclaw или hermes), но у них есть 2 проблемы: они избыточны и их неудобно масштабировать на несколько пользователей. Хотелось сделать одного бота для себя, друзей и тех, кому это было бы полезно. Пришлось создать собственное решение, которое было бы масштабируемым, дешевым, но достаточно качественным. Написал свой harness для работы LLM, указал её возможности, а в качестве основной модели, после нескольких тестов и попыток удешевить работу нейросети, добился отличной работы на модели deepseek-v4-flash. Так появился vaka-assistant. Бот-ассистент бесплатный и пока работает в тестовом режиме, но уже может: • ставить напоминания, записывать задачи • учитывать финансы и устанавливать лимиты трат • понимать голосовые сообщения • запоминать факты о пользователе, можно настроить личность ассистента и его стиль общения • есть удобное представление данных в Telegram Mini Apps Думаю, что многим такой бот может быть полезен: как в рабочих делах, так и в обычной жизни. Внутри чата можно оставить фидбек, буду рад услышать пожелания по улучшению и развитию проекта. Ссылка на ассистента
#заметка дня В npm нашли ChainDrop — червя, который успел выпустить 2212 заражённых версий в 444 пакетах. Стартовой точкой стал keyv@6.0.0. После установки пакет искал npm-токены и, если находил, публиковал заражённые версии других пакетов, к которым у владельца токена был доступ. Так заражение пошло дальше по экосистеме и затронуло, среди прочих, flat-cache, file-entry-cache и cache-manager. Код запускался через preinstall. Пакет скачивал Bun с GitHub и выполнял обфусцированный скрипт, который собирал токены GitHub, npm, PyPI, AWS, GCP, Azure, Docker, Kubernetes, Vault и других сервисов. В GitHub Actions он ещё и пытался достать секреты из памяти runner-процесса. Заодно менялись конфиги Claude Code и VS Code. Поэтому заражённый репозиторий мог сработать не только при npm install, но и просто при открытии проекта или запуске агента. С keyv есть отдельный нюанс. Вредоносная версия была опубликована через официальный GitHub Actions workflow, с npm Trusted Publishing и валидной SLSA provenance. То есть provenance не была подделана. Она честно подтверждала, что пакет собран официальным workflow из конкретного коммита. Просто сам коммит уже содержал вредоносный код, потому что аккаунт мейнтейнера был скомпрометирован. Поэтому наличие attestation здесь ничего не гарантировало. Она подтверждает происхождение сборки, но не авторизованность изменений в репозитории. Если одна из заражённых версий попала в CI или локальное окружение, откатить пакет недостаточно. Токены и секреты, доступные этому окружению, придётся перевыпустить. StepSecurity #npm #attack
#статья дня В CSS предлагают добавить роутинг Сейчас без JS кастомные анимации перехода по страницам практически невозможны: ловить переход, смотреть исходный и конечный URL, определять, по какой ссылке кликнули, и уже после этого выбирать нужный View Transition. В черновике CSS Route and Navigation Matching предлагают описывать эту логику прямо в CSS. Всё можно описать декларативно, если ты достаточно смел. Ну вы поняли. Например, сначала объявить маршруты: @route --home { pathname: url-pattern("/"); } @route --article { pathname: url-pattern("/articles/:id"); } А потом задать отдельную анимацию для перехода с главной на статью: @navigation (from: --home) and (to: --article) { @view-transition { navigation: auto; types: slide-left; } } Для перехода назад можно использовать другой тип анимации. Кроме @route и @navigation, в черновике есть :nav-source — селектор элемента, с которого начался переход, и :link-to() — селектор ссылок, ведущих на определённый маршрут. Самый понятный пример — список карточек. Пользователь нажимает на изображение, открывается отдельная страница, а именно эта картинка плавно превращается в большое изображение статьи. Сейчас для такого обычно нужен JavaScript, который найдёт нажатый элемент и назначит ему view-transition-name. Здесь это хотят сделать без ручной обвязки. Роутер это, конечно, не заменяет. CSS не будет загружать страницы или управлять историей браузера. Он просто сможет выбирать стили и анимации с учётом того, между какими адресами происходит переход. Пока это ранний Editor’s Draft, поэтому синтаксис ещё вполне может измениться. Попробовать можно в Chrome Canary с включённым Experimental Web Platform Features. Подробный разбор — у Ван Дамма нашего Брамуса, сам черновик — на сайте CSSWG. #route #css #view #transition