htmlshit | Unsorted

Telegram-канал htmlshit - Будни разработчика

14544

Блог Lead JS-разработчика из Хельсинки Автор: @bekharsky По рекламе: https://telega.in/channels/htmlshit/card?r=GLOiHluU или https://t.me/it_adv Чат: https://t.me/htmlshitchat

Subscribe to a channel

Будни разработчика

#заметка дня

Тут в нашем чатике aka @htmlshitchat человек задал вопрос: «Как заставить событие произойти только после долгого нажатия на кнопку?»

И, вроде, очевидный ответ: ставь таймаут да отменяй его:

Осторожно, псевдокод jQuery


let r = null;

$button.on("mousedown", function(e) {
e.preventDefault();
e.stopPropagation();
r = window.setTimeout(function() {
$button.html('Clicked');
}, 3000);
});

$button.on("mouseup", function() {
$button.html('Hold me');
window.clearTimeout(r);
});


Но это было бы скучно и недостаточно для поста, не правда ли?

И тут я вспомнил, что в 2017 году уже делал нечто подобное. Тогда не обошлось без погружения в Three.js и математику шестиугольников. Я об этом уже рассказывал: /channel/htmlshit/2639

Немного покопавшись в вебархиве, я нашёл тот проект. Итак, что же мы делали?

А вот на видео видно.

Анимация была оформлена на Tween.js, который всё ещё очень и очень популярен. Правда, название их последнего релиза ну прям удручает. End of the end — серьёзно?

С 2017 года API их, конечно же, поменялся. Мне хотелось одновременно и последний вариант API вам показать, и сетку заставить работать... как хорошо, что мы в вебе, где можно вообще всё!

Итак, кодпен: https://codepen.io/alinaki/pen/KwPwVPr?editors=1100

Весь современный код упихан в секцию с HTML, в script type="module", где импортированы нужные модули и константы из ESM-версии Tween.js, он же является нашим скоупом.

Это вообще очень удобный паттерн чтобы быстро накидать пример без бандлинга.

По зажатию кнопки мыши запускаем анимацию forward, по отпусканию кнопки — запускаем reverse. Из breaking changes — раньше можно было просто вызвать start(), а теперь нужно вызывать startFromCurrentValues(), иначе красоты не получится.


function forward() {
tween.stop().to({
value: 2000
}, 3000).startFromCurrentValues();
}

function reverse() {
tween.stop().to({
value: 1000
}, 3000).startFromCurrentValues();
}


Достаточно просто и эффектно.

#js #animation #tween #бородач

Читать полностью…

Будни разработчика

#статья дня

Тут Google недавно внедрил в Chrome насколько давно напрашивающийся, настолько же пока что неудобно реализованный режим разделённого просмотра. Split view, если по-русски.

Если добавят оверлейные кнопки — станет, конечно, чуть удобнее.

И всё бы ничего, но вот вскрыл он одну интересную проблему. И проблему эту в своей новой статье Ахмад Шадид обозначил как ранний брейкпоинт.

Статья вот: https://ishadeed.com/article/too-early-breakpoint/

И суть-то проблемы довольно ясна: мобильная вёрстка — очевидно, будучи удобной не только для мобильных устройств, не должна вставать между пользователем и контентом. В качестве примера — журнал Time.

Заняли половину экрана сайтом — и уже непонятно, что и почему происходит.

Ну и, конечно, это всё не имело бы смысла, не приведи Шадид несколько чуть более разумных примеров адаптивности.

P. S. Кто-то использует Notepad++? Их сервер был атакован и пребывал скомпрометированным до декабря 2025. Разработчик теперь заверяет в том, что проблема устранена, и призывает обновиться до последней версии. Будьте внимательны!

https://notepad-plus-plus.org/news/hijacked-incident-info-update/

#css #media #adaptive

Читать полностью…

Будни разработчика

Вас добавили в чат «Первые шаги в JavaScript»

💯 Прокачайте навыки в веб-разработке на бесплатном курсе

Академия Selectel выпустила новый курс по JavaScript. Если вы хотите освоить синтаксис и базовые конструкции языка — первые три модуля для вас.

После обучения вы сможете:

🔹 работать с переменными let, var и const,
🔹 создавать простые функции и работать с DOM,
🔹 писать логические конструкции и тернарные операторы if/else.

Получите промокод на бесплатную работу с сервисами Selectel, а после финального теста — сертификат о прохождении.

Изучите основы JavaScript и создайте свой первый пет-проект →

Реклама. АО "Селектел". erid:2W5zFJ4GZwW

Читать полностью…

Будни разработчика

Проект от подписчика!

Напоминаю, что я выкачу любую статью или проект от вас, не стесняйтесь писать.

Презентация? Выступили на митапе? Хотите поделиться интересной статьёй — добро пожаловать!


Привет! Меня зовут Игорь

Хочу поделиться расширением, которое я изначально сделал для себя, а потом решил выложить публично - AI Chat Messages Toolkit. Еще сделал лендинг для продвижения и связи с будущими пользователями

Мой юзкейс
Часто использую AI-чаты для ресерча: в транспорте, перед сном, просто накидать идеи.
Проходит время - и я уже не помню, *где именно* задавал нужный вопрос. Начинается бесконечный скролл длинного чата

Я решил это упростить

Что делает расширение
• Парсит DOM страницы чата локально
• Находит мои сообщения
• Показывает их списком в боковой панели
• Клик по сообщению > чат скроллится к нужному месту
• работает в ChatGPT, Claude, Perplexity, Gemini и Copilot

Важно
Никакие данные не собираются, не сохраняются и никуда не отправляются - всё происходит прямо в браузере на открытой странице

Дальше думаю про Pro-версию. Например, шаринг полезных Q&A-пар в Notion или куда-нибудь еще

Если вы тоже используете AI-чаты для ресерча - буду рад фидбеку, идеям и юзкейсам в комментариях

Читать полностью…

Будни разработчика

14 февраля Яндекс проводит свою главную фронтенд-конференцию — «Я 💛 Фронтенд».

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

В программе много тем про ИИ, и лично для меня самая интересная — про безопасное использование LLM в разработке. Сейчас LLM уже используют почти все, но чаще всего это выглядит как «прикрутили — и поехали». А вот разговор про безопасность, ограничения и реальные сценарии применения — это как раз то, чего сильно не хватает в публичных обсуждениях. Тема важная, потому что от этого напрямую зависит, не превратится ли ИИ в источник техдолга и странных багов через полгода.

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

Отдельно упомяну Code in the Dark. Это тот самый формат, где нужно верстать без превью, инспектора и подсказок — только редактор, HTML и CSS. Хорошая штука и для участников, и для зрителей — сразу видно, кто правда чувствует вёрстку.

Кроме докладов будут и другие активности: CSS арт-челлендж, сборка TravelTech-приложения, разбор практических кейсов и другие интерактивы от команд Яндекса. Можно не только послушать, но и руками попробовать.

Участвовать можно онлайн или офлайн в Москве. Программа и регистрация — по ссылке.

Читать полностью…

Будни разработчика

#видео дня

Решил сохранить эту нестареющую классику прямо на канале. Где-то доступен и оригинал на ютубе, но я чот не смог его найти...

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

Поменялось ли что-то с тех пор?

Ну, нет.

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

P. S. в докладе есть не только описания неопределённого поведения, но и хрестоматийные примеры. Это теперь они хрестоматийные, конечно.

Читать полностью…

Будни разработчика

#заметка дня

Вот то самое откровение, которое я обещал в новости о jQuery 4.0.

В Chrome 145 будет изменено поведение 100vw. Браузер будет учитывать ширину скроллбара, исключая горизонтальную прокрутку.

Ссылка: https://www.bram.us/2026/01/15/100vw-horizontal-overflow-no-more/

И да, это будет ломающее изменение.

Хотя, если честно, я не очень понимаю людей, которым вообще нужно было значение 100vw, это же дефолт блочных структур.

Старое поведение по факту годами создавало баг, с которым разработчики либо мирились, либо прятали его костылями — через calc.

Самый показательный момент — реальные цифры.

Через HTTP Archive было проанализировано 12 089 606 корневых страниц. Из них 324 866 сайтов, то есть примерно 2.7%, в принципе использовали calc() рядом с 100vw. При этом явные попытки компенсировать ширину скроллбара встречаются крайне редко: порядка 4 000 сайтов принудительно задают overflow: scroll на <html>, и всего несколько десятков страниц используют calc(100vw - …) именно для учёта скроллбара.

Вот комментарий в PR спеки: https://github.com/w3c/csswg-drafts/issues/6026#issuecomment-1919428550

Это хорошо показывает реальную картину: подавляющее большинство разработчиков никогда не «считали скроллбар». Они либо избегали 100vw, либо жили с лишним горизонтальным скроллом, либо просто добавляли overflow-x: hidden. То есть проблема была массовой, а осознанно решали её — доли процента.

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

Хороший пример того, сколько инженерной работы уходит на полировку вещей, которые пользователи, возможно, и не заметят напрямую, но которые годами раздражали фронтендеров.

И хороший вопрос, какой процент разработчиков морочится с чем-то менее видным, если даже на возможные скроллбары всем пофигу...

#css #scroll

Читать полностью…

Будни разработчика

#молния дня

А пока вы читали сообщение выше, оказалось, что вышел jQuery 4.0: https://blog.jquery.com/2026/01/17/jquery-4-0-0/

Кто-нибудь ещё использует jQuery для новых проектов? Или по-инерции?

С другой стороны, эта инерция всё ещё драйвит 70% веб-сайтов в мире... есть у меня интересная инфа на тему, попозже сегодня выкачу 🙂

Читать полностью…

Будни разработчика

#статья дня

Зачем писать код, если можно сгенерировать, правда? Такие нынче правила игры. Но нужно идти дальше.

Зачем писать код, если можно украсть? Особенно, когда сам в руки идёт. Ведь если даже генерировать что-то, нужно, как минимум, учитывать требования по работе, дизайну... никто не отменял понимание сути задачи.

Так вот, сегодня на поветске дня — как украсть любой React-компонент!

И в этом нам поможет React DevTools, любая сносная LLM-ка и вот эта инструкция: https://fant.io/react/

TL;DR
React-приложение хранится не только в DOM-представлении, но и в виде React Fiber — внутреннего дерева (тот самый виртуальный DOM), где видно, какой компонент и с какими пропсами создал разметку.

Все экземпляры одного компонента ссылаются на один и тот же т. н. type, поэтому можно сгруппировать их и собрать реальные примеры прямо из продакшена.

Эти примеры вместе с минифицированным кодом компонента скармливаются LLM, которая восстанавливает чистый React. Дальше идёт проверка: компонент рендерится с теми же пропсами, HTML сравнивается с оригиналом, а расхождения отправляются обратно модели. Компоненты собираются снизу вверх, от простых к составным. Анимации и сложные состояния чуток могут замедлить процесс, но для статичного UI он работает прям хорошо.

Дивный новый мир. А чтобы понимать внутренности Fiber, можно использовать инструмент со странным названием bippy: https://github.com/aidenybai/bippy, когда, что и почему отрендерилось.

#react

Читать полностью…

Будни разработчика

#статья дня

Ну что же, пора просыпаться от зимней спячки, котаны! Салаты съедены, сериалы отсмотрены. Плавно готовимся к неизбежному.

В моей предыдущей компании были очень популярны турниры по настольному футболу, aka foosball. Не до драк, конечно, но со своим лором, правилами и даже традициями. Например, проигравший увековечивал своё имя под столом.

Так вот, к чему это я.

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

Как вам такое: отрисовка дерева с помощью... списков!

Вот, глядите: https://codepen.io/alinaki/pen/ZYOOWOL

Не, ну буквально. У автора четыре статьи, от горизонтальных и вертикальных деревьев до более сложных конструкций вроде центрально-ориентированной диаграммы (вот то, что на иллюстрации, к таким как раз относится) и прочих экспериментов.

Начало тут: https://fractaledmind.com/2018/03/05/css-tree/

Ну что, будем таки писать такой сервис? Или максимально гибкая отрисовка на холсте наше всё?

#css #html #tree #list

Читать полностью…

Будни разработчика

#ссылка дня

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

Когда я был частью веб-студии/галеры, мы просто дубасили по готовому дизайну и техзаданию (когда таковое было, *звук горьких слёз*), не особо задумываясь, почему было принято то или иное решение. В лучшем случае можно было пост-фактум указать на проблему.

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

Количество Google Docs- и вики-материалов в такой работе зашкаливает. Вопросы «почему?» и «зачем?», повторяемые раз за разом… Метрики.

Отсюда интересно посмотреть, что же творится в других компаниях. И тут — на удивление — Microsoft нам такую возможность даёт. Теперь можно взглянуть на каталог explainers (сопровождающих документов, документации, расшифровывающих заметок) браузера Edge: https://github.com/MicrosoftEdge/MSEdgeExplainers

Почему что-то является проблемой? Как выявили? Почему было принято то или иное решение? Как команда объяснила себе какие-то новые концепты? Какой состав команды? И так далее.

Довольно погружающее чтиво. Особенно в разделе про DevTools, на которые разработчики Edge в принципе делают упор (да-да, я в курсе, что там тот же Chromium, но дело же в мелочах).

#docs #explainers #process #бородач

Читать полностью…

Будни разработчика

#фишка дня

Тут Jh3y опять по красоте исполняет. Итак, поступил вопрос из аудитории: «Как сделать эффект подсвеченной стеклянной фаски, как на новых иконках в iOS?»

Ответ интереснее и одновременно проще, чем может показаться: https://codepen.io/jh3y/pen/WbwyGBb

Весь секрет в наложении маски в виде градиента под элемент:


&::after {
mask: linear-gradient(calc(var(--pointer-angle) * 1deg), #ffffff80, #ffffff30 30% 60%, #fff);
}


И всё, дальше просто вращаем по желанию. Техника не нова, даже блендинг не нужен. Ну а весь JS-код — он просто для обработки позиции курсора и для фирменного эффекта взрыв-диаграммы, ставшей визитной карточкой Джея.

Работает, кстати, во всех современных браузерах.

#css #gradient #mask

Читать полностью…

Будни разработчика

Разверните свою облачную среду за несколько минут: виртуальные машины, S3-совместимое хранилище, Managed Kubernetes, базы данных.

▪️Быстрый старт, прозрачный биллинг, российские дата-центры.
▪️Удобные интерфейсы управления: веб-консоль, CLI, API, Terraform.
▪️Собственная разработка: развиваем облако так, как нужно пользователям, а не ждём решений от вендоров.

Развивайте свои IT-продукты. Об инфраструктуре позаботится облако.

Попробуйте MWS Cloud Platform бесплатно с грантом для новых пользователей.

Читать полностью…

Будни разработчика

#заметка дня

Вам всем наверняка знакома раскладка masonry — «кладка каменщика». Собственно, название она получила от Masonry.js, библиотеки сетки, влияние которой на веб сложно переоценить.

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

Собственно, в 2020 Firefox стал первым браузером, внёс масонри в display: grid под флагом и так и сидел все эти годы. А Chrome 140 (и соответствующий Edge) так и назвалиdisplay: masonry.

Масонам это не понравилось.

Потому в стандарт пошло название grid-lanes. Да-да, display: grid-lanes, частью grid это так и не стало (и очень хорошо).

Короче, к чему это я. Буквально три недели назад команда WebKit смёрджила в стабильную базу PR, который включает поддержку grid-lanes. И, соответственно, выпустила Safari Technology Preview 234 под соответствующую новость в блоге: https://webkit.org/blog/17660/introducing-css-grid-lanes/

Там очень подробная статья о том, как и когда применять, какие режимы есть, какие настройки.

Chrome и Firefox тоже уже вносят изменения в свой код, так что Masonry в Baseline не за горами!

P. S. кстати, скачивать разные ранние версии WebKit задолго до выхода очередной версии Safari TP можно отсюда: https://webkit.org/build-archives/

#css #masonry

Читать полностью…

Будни разработчика

#статья дня, даже две

Похоже, команды браузеров всё-таки пришли к общему пониманию, как должен выглядеть безопасный способ вставки HTML.

Речь про Sanitizer API — нативную замену innerHTML, которая сразу учитывает XSS и не оставляет это на совести разработчика. Вместо работы со строками используется setHTML(): HTML парсится один раз, очищается и сразу вставляется в DOM.

Это снижает риск обходов безопасности, возникающих при раздельном парсинге и сериализации строк.

API по умолчанию намеренно жёсткий. Удаляются <script>, <iframe>, <object>, <embed>, SVG-элементы, style, link, все form-теги, кастомные элементы, комментарии и любые on*-атрибуты — по факту остаётся минимум безопасного HTML, остальное надо разрешать вручную через конфигурацию. Подробности: https://olliewilliams.xyz/blog/sanitizer/

Первая реализация появилась в Chrome, но её удалили, потому что спецификация сильно изменилась и текущая версия API её не отражает. Команды решили не фиксировать «устаревший» API в движках и сейчас переписывают его в соответствии с обновлённым стандартом.

И вот, собственно, статья о том, как все вместе приходили к упрощению API: https://frederikbraun.de/why-sethtml.html

Ссылки на ишью с намереними релизнуться:
https://groups.google.com/a/chromium.org/g/blink-dev/c/iu3VwMotMBc
https://groups.google.com/a/mozilla.org/g/dev-platform/c/9ddjRQbYKuk

Актуальный Sanitizer API в соответствии с новой уже есть в Firefox Nightly и в Chrome Canary за флагом. Ожидаем в 145 Хроме и 148 Лисе.

А вот Safari как обычно. Полифиллим, котаны?

Ах, да! MDN: https://developer.mozilla.org/en-US/docs/Web/API/HTML_Sanitizer_API/Using_the_HTML_Sanitizer_API

#sanitizer #xss

Читать полностью…

Будни разработчика

#инструмент дня

Монорепозитории имеют неприятное свойство разрастаться. Сюрприз-сюрприз.

Со временем файловая структура перестаёт что-то говорить: папок много, вложенность глубокая, понять где живой код, а где мёртвый — сложно.

Git Truck решает эту проблему через визуализацию репозитория. Он строит интерактивную «карту» проекта на основе git-истории: видно размеры файлов и директорий, активность изменений, вклад разных авторов, а также как структура менялась со временем.

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

https://github.com/standardgalactic/git-truck

#git #dev #tool

Читать полностью…

Будни разработчика

#фишка дня

Использование position: sticky уже так-то стало обыденностью.

А что если можно было бы обращаться к элементам прилипшего родителя и что-то странное с ними вытворять?

Так можно! Для этого у нас буквально не так давно появились скролл-запросы, как часть контейнерных запросов. Так и называются: Container scroll-state queries.

Например, хотите сделать картинку в картинке? Ну, чтобы, например, не блокировать чтение статьи?

Или, наоборот, не прерывать просмотр рекламы? :)

Запросто: https://codepen.io/alinaki/pen/WbvMOPB


@container scroll-state(stuck: top) {
.pip {
width: 200px;
transform: translate(-50%, 0%)
translate(calc(50vw - (50% + 1rem)), calc(100vh - (100% + 1rem)));
}
}


Обратите внимание, translate можно складывать, получая интересную математику в итоге :)

А для браузеров, которые в скролл-запросы пока не умеют, всегда можно написать короткий IntersectionObserver (он, кстати, есть в примере).

#css #scroll #state #бородач

Читать полностью…

Будни разработчика

#игра дня

Давненько не было чего-то необычного.

Впрочем, если вы не фанат Dwarf Fortress, конечно.

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

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

Игру сложно назвать обучающей, но если вы когда-то писали на JavaScript и у вас осталась эта мышечная память for (var i = 0; i < ...), будет ощущение, что вы просто продолжаете работу, только теперь в компании ASCII-графики и странного профессора.

🎮 https://untrustedgame.com/
📂 https://github.com/AlexNisnevich/untrusted

#game #js #бородач

Читать полностью…

Будни разработчика

#ссылка дня

Вчера — впервые за шесть лет — побывал на местном JS-митапе, aka HelsinkiJS.

Не надо на меня так смотреть, я не ходок по митапам. Но на нескольких конференциях, впрочем, был.

И как-то так получилось, что помимо пива и пиццы были и доклады. И вот один из них — «Как нарисовать карту?» — был весьма интересен и его результат прекрасно подходит под формат канала.

Автор — Скотт Стрит — постарался объяснить и показать, как работают библиотеки отрисовки карт. Какие форматы, какие решения. Ну и, собственно, шаг за шагом рассказал и показал процесс конвертации мировых координат в координаты элементов сетки и отрисовки их в SVG.

Например, как из описания линии формата MapLibre (там protobuf, но в виде текста как-то так):


{
"layers": [
{
"version": 2,
"name": "roads",
"extent": 4096,

"features": [
{
"id": 42,
"type": "LINESTRING",

"tags": [0, 0],

"geometry": [
9,
1024, 2048,
26,
2048, 0,
1024, 1024,
2048, 0
]
}
],

"keys": ["class"],
"values": [
{ "string_value": "primary" }
]
}
]
}


Путем прямого чтения команд:

9 → MoveTo, count=1
1024, 2048 → dx, dy

26 → LineTo, count=3
2048, 0 → dx, dy
1024, 1024 → dx, dy
2048, 0 → dx, dy


...получается описание кривых в SVG. Тут надо понимать, что сами плитки — тайлы — кодируются как квадрат 4096*4096, а, стало быть, координаты — относительно тайла.

К сожалению, слайдов доклада в наличии нет, но есть, собственно демо и репозиторий.

Конечно, там сейчас всё достаточно минималистично — дороги, парки, дома — но если вам было интересно, как это всё работает — подойдёт прекрасно.

#svg #maplibre #map

Читать полностью…

Будни разработчика

#такое дня

Я уже как-то участвовал в нескольких спорах на тему того, что TUI — text-based ui interface — это не больше чем фишечка, такой себе ретрофутуризм.

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

Впрочем, как мне справедливо заметили: «А минусы будут?», — да может и нет их...

Но что бы вы думали, взорвавший популярность TUI в последние пару лет Claude Code будет написан на условном C или Python?

Наверное, как сорок лет назад Vim, Emacs и среды Borland Turbo? Ну или ncurses на худой конец там, ведь проблема вывода текста кажется давно решённой?

Нет, там React :) Они рендерят сцену целиком, а потом процессят вьюхи чтобы вывести их текстом, предварительно сравнивая с предыдущим рендера.

Зачем? Да никто не знает, захотелось парням, кто мы такие, чтобы их судить.

Просто экран клода так и будет продолжать мерцать. Обещают, что чуть поменьше, чем раньше. Ведь 16ms на фрейм им теперь хватает с трудом.

Выводов не будет, нет никаких сил. Просто по ссылкам в посте пройдите, там достаточно интересно.

#claude #react

Читать полностью…

Будни разработчика

#такое дня

А вот вам и пример, почему важно знать и понимать наследие веба. Написал я, понимаете ли, пост про тег <plaintext> — /channel/htmlshit/3955 — и он сломал вёрстку на агрегаторе каналов Telemetr. В комментариях написали, спасибо :)

Сейчас это просто plaintext, а завтра — XSS? 😱

Не надо так, котаны.

P. S. пофиксили по моей просьбе.

Читать полностью…

Будни разработчика

Изучаете программирование? Хотите стать классным айтишником с высокой ЗП?

Пока все в спячке после Нового Года, вы можете стремительно войти в сферу IT при помощи сборки "IT в деле" которую мы составили.

Что внутри сборки:

- Каналы о программировании и разработке: Python, C++, C#, Java

- GameDev каналы, создание игр, подсказки для ваших проектов и реальный опыт в создании игр 💍

- Аналитика и базы данных, всё по теме работы с данными от А до Я, авторские лайфхаки и простые заметки с проектов 🔤

- Каналы о QA-тестировании, опытные тестировщики делятся с вами знаниями и помогают в комментариях 👨‍💻

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

Читать полностью…

Будни разработчика

#статья дня

Если вы не читали адвент-календарь HTMHell, то могли и пропустить интересности!

Во втором дне календаря 2025 года речь идёт о теге <plaintext>. Это устаревший элемент, который запрещён стандартами, но до сих пор поддерживается браузерами.

Штука гениальная: как только браузер встречает <plaintext>, он прекращает разбор HTML. Всё, что идёт дальше, воспринимается как обычный текст, независимо от того, что там написано.


<body>
<h1>Заголовок</h1>
<plaintext>
<div>Этот div не станет элементом</div>
<script>alert('xss')</script>
</body>


В браузере и <div>, и <script> будут выведены как текст. DOM на этом месте обрывается, ошибок в консоли нет, с точки зрения браузера всё произошло корректно.

Существенная часть статьи посвящена тому, как <plaintext> ведёт себя при санитайзинге HTML. Разные санитайзеры обрабатывают его по-разному: кто-то удаляет, кто-то экранирует, кто-то оставляет в форме, которая всё равно влияет на парсинг. В результате один и тот же входной HTML после «очистки» может либо работать нормально, либо полностью ломать страницу.

Например, обнулить CSP.

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

#html #sanitize

Читать полностью…

Будни разработчика

cursor: ew-resize;

Читать полностью…

Будни разработчика

#новый год дня

С Новым годом, котаны! Пусть всё… дополняйте!

Читать полностью…

Будни разработчика

Общий искусственный интеллект появится в новом году: миф или реальность? 🤔

Представьте искусственный интеллект, способный решать любые задачи как человек. Пока такого не существует — это лишь концепция под названием AGI.

Илон Маск утверждает, что его компания xAI может достичь уровня AGI, равного или превосходящего человеческий интеллект, уже в ближайшие годы. Возможно даже, в 2026 году.

Так насколько реальны эти прогнозы и стоит ли ожидать появления AGI в ближайшее время?

🙂 Дмитрий Григоров, директор по искусственному интеллекту и данным, старший вице-президент Альфа-Банка:

Прогнозы появления AGI в 2026 году выглядят чересчур оптимистично, это миф. Сегодня мы видим значительные успехи в развитии AI для широкого спектра задач — модели уже умеют генерировать профессиональные подсказки для юристов и врачей, писать код, анализировать данные и многое другое. Для перехода на уровень AGI искусственному интеллекту всё ещё не хватает универсального понимания мира, ему нужно научиться оперировать логикой, выходящей за пределы статистики.

Безусловно, движение в этом направлении стремительно. Показателен недавний результат модели GPT 5.2 в тесте на «человечность» ARC-AGI-2: модель набрала 52,9%, приблизившись к человеческому показателю в 66%.

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

Этот разрыв пытаются закрыть на практике: интегрируют искусственный интеллект в «мозги» гуманоидных роботов для обучения через сенсорный опыт, создают целые AI-симуляций мира. Всё это требует многих лет научно-инженерной работы.

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


@alfa_trends

Читать полностью…

Будни разработчика

#инструмент дня

На связи Глеб, который принес немножечко странного.

Думали ли вы когда-нибудь о том, что алгоритмы сжатия строк потребуются для передачи состояния приложения?
Всё когда-нибудь случается впервые, вот и мне потребовалось передавать в ссылке текущее состояние редактора кода (в нашем продукте это один из основных иструментов).

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

Оказывается не так уж это сложно если вспомнить про алгоритмы сжатия.
Сериализуем объект, сжимаем его с помощью библиотеки lz-string и генерируем ссылку с параметрами состояния редактора в одном из параметров.
Попробовать можно в codepen.

Да, можно использовать более эффективный алгоритм LZMA (один из примеров), однако он существенно медленнее. Тем не менее, производительность LZMA в контексте ограниченного числа символов, позволяет вообще не думать о каком-либо существенном влиянии на результат.

В CedrusData (компания, в которой работаю) много интересных задач, в том числе связанных с производительностью. Ждите новых заметок😎

#compression #performance

Читать полностью…

Будни разработчика

#фишка дня

Итак, верстаешь ты страницу с кучей врезок, аккордеонов, вкладок и прочих интерактивных элементов, требующих действия пользователя.

Но у аккордеонов есть один очевидный минус: поиск по странице не подсветит найденное. Ну ещё бы, оно же скрыто.

Так вот, Chrome очень старается это исправить и именно поэтому начиная со 102 версии у атрибута hidden есть уникальное для Chrome значение until-found, говорящее само за себя.

Ссылка на блог разработчиков: https://developer.chrome.com/docs/css-ui/hidden-until-found

Сразу пример, если кому-то в лом на статью лезть: https://codepen.io/web-dot-dev/pen/JjMxmom

Попробуйте поискать слово, которое скрыто в каком-либо из аккордеонов.

Ну и для браузеров, которые не поддерживают этот атрибут, либо для иных UI-виджетов, они предлагают проверять поддержку события onbeforematch:

if (!(‘onbeforematch' in document.body)) {
// expand all hidden content
}

Довольно странное решение, если честно, но очевидно, что проблема существует и делать с ней что-то надо.

#chrome #hidden #бородач

Читать полностью…

Будни разработчика

#фишка дня

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

Всего-то достаточно загрузить свою аватарку или реакцию в HDR и начать выжигать глаза всем обладателям макбуков и вообще ноутбуков с экранами, поддерживающими расширенный динамический диапазон цвета. Вот: /channel/htmlshit/3594

И от этого, кстати, очень страдают соцсети, например, пресловутый твиттер, aka X. Стоит одному умнику загрузить свою аватарку в HDR — всё, вся страница сереет, а он один сверкает.

Но, как оказалось, на это есть решение! В CSS есть правило, которое позволяет в том числе нормализовать динамический диапазон:


dynamic-range-limit: standard;


...X ещё добавляет

filter: brightness(1);.


Забавно, что такая аватарка — у недавно пошедшего войной чуть ли не на весь интернет сооснователя Wordpress.

В общем, если вы не осилили нормализацию изображений в моменте загрузки — пользуйтесь :)

Работает в Chrome 136 и далее и Safari 26 и далее. А пользователи Firefox пока страдают.

#css #hdr

Читать полностью…

Будни разработчика

🔴🔴🔴🔴🔴🔴🔴🔴

🔥 СРОЧНО СКАЧАЙТЕ!!! АЛЬФА-БАНК ВЕРНУЛ ОПЛАТУ АЙФОНОМ В НОВОМ ПРИЛОЖЕНИИ 🔥

СКАЧИВАЙТЕ СКОРЕЕ И ПЛАТИТЕ ЗА ВСЁ БЕЗ КАРТЫ. Просто подключайте Alfa Pay — а мы вернём кэшбэк до 50% за первую покупку.

ПРЯМО СЕЙЧАС СКАЧИВАЙТЕ на айфон приложение Альфото. Кто не успел, тот опоздал 😉

@alfabank

Читать полностью…
Subscribe to a channel