#статья дня
Гитаристы тут? Нужно ваше мнение!
Вот человек заморочился и сделал (почти, потому что не контейнировал) кастомный компонент для отображения... гитарных аккордов: https://dev.to/madsstoumann/guitar-chords-in-css-3hk8
Ну и кодпен для ясности: https://codepen.io/stoumann/pen/qEEKJYq
Запись получается примерно такая:
JS тут нужен, чтобы распределить кастомные атрибуты по CSS-переменным. После чего в дело вступают гриды.
Очевидно, аккорды можно записывать для чего угодно: от балалайки и укулеле до десятиструнного монстра от Марченко.
Ну, котаны, у кого тут свои гитарные курсы?
#css #guitar
Гитаристы тут? Нужно ваше мнение!
Вот человек заморочился и сделал (почти, потому что не контейнировал) кастомный компонент для отображения... гитарных аккордов: https://dev.to/madsstoumann/guitar-chords-in-css-3hk8
Ну и кодпен для ясности: https://codepen.io/stoumann/pen/qEEKJYq
Запись получается примерно такая:
<fret-board frets="4" strings="6" chord="E Major" class="dusty-blue">
<string-note string="6" open></string-note>
<string-note string="5" fret="2" finger="2"></string-note>
<string-note string="4" fret="2" finger="3"></string-note>
<string-note string="3" fret="1" finger="1"></string-note>
<string-note string="2" open></string-note>
<string-note string="1" open></string-note>
</fret-board>
JS тут нужен, чтобы распределить кастомные атрибуты по CSS-переменным. После чего в дело вступают гриды.
Очевидно, аккорды можно записывать для чего угодно: от балалайки и укулеле до десятиструнного монстра от Марченко.
Ну, котаны, у кого тут свои гитарные курсы?
#css #guitar
👍19❤5
7 декабря в Петербурге — большая практическая конференция про искусственный интеллект: «Питерский промпт. Вторая серия».
Более 1000 специалистов соберутся обсудить, как внедрять ИИ в задачи бизнеса уже сейчас:
— от маркетинга и продаж до аналитики, автоматизации и контента.
Среди докладов конференции:
— Как автоматизировать бизнес-процессы продаж и контроля качества с помощью AI-технологий, доступных каждому уже сегодня AI в маркетинге: от промптов к процессам.
— Как мы за 2 года перешли от точечной работы с промптами к выстраиванию всех процессов в маркетинге с учётом ИИ
— Как сохранить и увеличить прибыль в 2026 году при росте расходов с помощью искусственного интеллекта (на примере доставки рационов, фитнес-клуба)
— 10 практических решений для повышения эффективности с помощью ИИ, которые работают «здесь и сейчас»
— Хакни нейросети: личный ассистент по любым вопросам 24/7. Мастер-класс по созданию агента, который напишет качественный промпт вместо вас для любой нейросети
— Как связать Google Таблицы и ChatGPT и автоматизировать рутину (ну или вообще что захочется)
💡 Форматы участия: офлайн и онлайн.
Подробности и билеты
по моему промокоду htmlshit скидка 10%
Более 1000 специалистов соберутся обсудить, как внедрять ИИ в задачи бизнеса уже сейчас:
— от маркетинга и продаж до аналитики, автоматизации и контента.
Среди докладов конференции:
— Как автоматизировать бизнес-процессы продаж и контроля качества с помощью AI-технологий, доступных каждому уже сегодня AI в маркетинге: от промптов к процессам.
— Как мы за 2 года перешли от точечной работы с промптами к выстраиванию всех процессов в маркетинге с учётом ИИ
— Как сохранить и увеличить прибыль в 2026 году при росте расходов с помощью искусственного интеллекта (на примере доставки рационов, фитнес-клуба)
— 10 практических решений для повышения эффективности с помощью ИИ, которые работают «здесь и сейчас»
— Хакни нейросети: личный ассистент по любым вопросам 24/7. Мастер-класс по созданию агента, который напишет качественный промпт вместо вас для любой нейросети
— Как связать Google Таблицы и ChatGPT и автоматизировать рутину (ну или вообще что захочется)
💡 Форматы участия: офлайн и онлайн.
Подробности и билеты
по моему промокоду htmlshit скидка 10%
#фишка дня
Как сделать вывод консоли красивеньким?
Очень просто, использовать спецификаторы преобразования!
Прямо как sprintf в Си, ну как вы можете этого не знать?
Короче, всё внимание на иллюстрацию. Adobe настолько оборзели, что свой логотип даже вам в консоль пихают, если у вас получится открыть девтулзы на веб-версии Фотошопа.
А делается это буквально так: https://codepen.io/alinaki/pen/PoXrejX
Для тех, кто по ссылкам не ходит, сокращённая версия:
Как можно догадаться, %c это спецификатор, указывающий, что сюда надо подставить CSS, переданный соответствующим аргументом.
Полный список спецификаторов есть на MDN.
Красота спасёт мир, котаны!
#console #js #sprintf #бородач
Как сделать вывод консоли красивеньким?
Очень просто, использовать спецификаторы преобразования!
Прямо как sprintf в Си, ну как вы можете этого не знать?
Короче, всё внимание на иллюстрацию. Adobe настолько оборзели, что свой логотип даже вам в консоль пихают, если у вас получится открыть девтулзы на веб-версии Фотошопа.
А делается это буквально так: https://codepen.io/alinaki/pen/PoXrejX
Для тех, кто по ссылкам не ходит, сокращённая версия:
console.info(
"%c %cAdobe %cPhotoshop Web%c %c2023.20.0.0%c %c1bba617e276",
"padding-left: 36px; line-height: 36px; background-image: url('data:image/gif;base64,R0lGODlhIAAgAPEBAAAAAPw==');"
)
Как можно догадаться, %c это спецификатор, указывающий, что сюда надо подставить CSS, переданный соответствующим аргументом.
Полный список спецификаторов есть на MDN.
Красота спасёт мир, котаны!
#console #js #sprintf #бородач
👍8❤3
#инструмент дня
Ты тоже верстать умеешь лучше, чем рисовать? Say no more!
Библиотека Satori от небезызвестной компании Vercel умеет конвертировать почти любой HTML-макет в SVG: https://github.com/vercel/satori
Зачем это надо?
Ну, например, автоматически генерировать OG-изображения для соцсетей. Или быстро сверстать — буквально — визитку и внедрить ее в ваш дизайн-макет. К слову, тут у кого-то из подписчиков была задача сгенерировать изображения таблиц. Или на карте точки расставлять и потом экспортировать в отчёт.
Короче, крутая штука же.
#svg #html #бородач
Ты тоже верстать умеешь лучше, чем рисовать? Say no more!
Библиотека Satori от небезызвестной компании Vercel умеет конвертировать почти любой HTML-макет в SVG: https://github.com/vercel/satori
Зачем это надо?
Ну, например, автоматически генерировать OG-изображения для соцсетей. Или быстро сверстать — буквально — визитку и внедрить ее в ваш дизайн-макет. К слову, тут у кого-то из подписчиков была задача сгенерировать изображения таблиц. Или на карте точки расставлять и потом экспортировать в отчёт.
Короче, крутая штука же.
#svg #html #бородач
❤9👍5
#такое дня
Насмотревшись на миллион способов отцентрировать текст в нашем рабочем репозитории, я почему-то вспомнил о том, что есть способы сильно проще.
🎉
Извините.
#imagemagick #terminal
Насмотревшись на миллион способов отцентрировать текст в нашем рабочем репозитории, я почему-то вспомнил о том, что есть способы сильно проще.
magick -background lightblue -fill black -font Helvetica -size 800x200 -gravity center caption:"CSS is a scam" -extent 1200x600 text.png
🎉
Извините.
#imagemagick #terminal
🤩9🤡6
This media is not supported in your browser
VIEW IN TELEGRAM
#ссылка дня
Интерактивный... кликер (?) для изучения типов в TypeScript: Visual Types.
Показывает всё то, что, в общем, есть в хендбуке, но гораздо нагляднее. Где-то просто на примере объектов, где-то — в виде диаграмм и кругов Эйлера.
Дело, конечно, не ограничивается только типами. Есть и объяснение unknown против any, есть условные типы, есть паттерны и даже мапы.
В общем, есть что покликать на вечер, чтобы потом вспоминать :)
#typescript #tool
Интерактивный... кликер (?) для изучения типов в TypeScript: Visual Types.
Показывает всё то, что, в общем, есть в хендбуке, но гораздо нагляднее. Где-то просто на примере объектов, где-то — в виде диаграмм и кругов Эйлера.
Дело, конечно, не ограничивается только типами. Есть и объяснение unknown против any, есть условные типы, есть паттерны и даже мапы.
В общем, есть что покликать на вечер, чтобы потом вспоминать :)
#typescript #tool
👍19
#библиотека дня
Я тут такое нашёл, закачаешься. Очередные выкрутасы с Shadow DOM. На сей раз — метаязык для описания паттернов.
Короче говоря, можно шикарные фоны делать не ограничивая себя возможностями градиентов.
Называется это всё <css-doodle/>: https://css-doodle.com/
Описываем нужный нам паттерн используя правила CSS и простые функции типа flip, reverse, shape, random и так далее, там полновесный декларативный язык.
Огромное число примеров, большое сообщество. Вот, например, автор описывает как сделать классический китайский орнамент на простых flip-invert-reverse функциях: https://yuanchuan.dev/flip-invert-reverse
В общем, потрясающая штука.
#css #pattern #doodle #бородач
Я тут такое нашёл, закачаешься. Очередные выкрутасы с Shadow DOM. На сей раз — метаязык для описания паттернов.
Короче говоря, можно шикарные фоны делать не ограничивая себя возможностями градиентов.
Называется это всё <css-doodle/>: https://css-doodle.com/
Описываем нужный нам паттерн используя правила CSS и простые функции типа flip, reverse, shape, random и так далее, там полновесный декларативный язык.
Огромное число примеров, большое сообщество. Вот, например, автор описывает как сделать классический китайский орнамент на простых flip-invert-reverse функциях: https://yuanchuan.dev/flip-invert-reverse
В общем, потрясающая штука.
#css #pattern #doodle #бородач
❤5
#дайджест недели
Понедельник
Вариативные шрифты: напоминание, что осей вариативности куча — не только жирность. Забавный шрифт Cheee с пачкой настроек, пример на CodePen, разбивка — через GSAP SplitText.
https://www.tgoop.com/htmlshit/3897
Вторник
Кастомный веб-компонент для гитарных аккордов: атрибуты → CSS-переменные, дальше гриды. Работает для любого числа струн и любых инструментов.
https://www.tgoop.com/htmlshit/3899
Среда
Красивый вывод в консоль: спецификатор
https://www.tgoop.com/htmlshit/3901
Четверг
Satori от Vercel превращает HTML в SVG — удобно для OG-картинок, отчётов, визиток, карт.
https://www.tgoop.com/htmlshit/3903
ImageMagick: простой способ центрировать текст через
https://www.tgoop.com/htmlshit/3904
Пятница
Visual Types — интерактивный «кликер» для изучения TypeScript: типы, unknown/any, условные типы, паттерны, диаграммы.
https://www.tgoop.com/htmlshit/3905
Суббота
https://www.tgoop.com/htmlshit/3906
Понедельник
Вариативные шрифты: напоминание, что осей вариативности куча — не только жирность. Забавный шрифт Cheee с пачкой настроек, пример на CodePen, разбивка — через GSAP SplitText.
https://www.tgoop.com/htmlshit/3897
Вторник
Кастомный веб-компонент для гитарных аккордов: атрибуты → CSS-переменные, дальше гриды. Работает для любого числа струн и любых инструментов.
https://www.tgoop.com/htmlshit/3899
Среда
Красивый вывод в консоль: спецификатор
%c + CSS-стили. Именно так Photoshop Web пихает свой логотип прямо в devtools.https://www.tgoop.com/htmlshit/3901
Четверг
Satori от Vercel превращает HTML в SVG — удобно для OG-картинок, отчётов, визиток, карт.
https://www.tgoop.com/htmlshit/3903
ImageMagick: простой способ центрировать текст через
-gravity center и -extent.https://www.tgoop.com/htmlshit/3904
Пятница
Visual Types — интерактивный «кликер» для изучения TypeScript: типы, unknown/any, условные типы, паттерны, диаграммы.
https://www.tgoop.com/htmlshit/3905
Суббота
<css-doodle/> — язык для генеративных паттернов на CSS: flip, reverse, random, shape. https://www.tgoop.com/htmlshit/3906
👍7
This media is not supported in your browser
VIEW IN TELEGRAM
#ссылка дня
Сupercookie — https://github.com/jonasstrehle/supercookie
— показывает почти абсурдный рабочий (но в 2025 году лишь частично) способ отслеживать людей через обычную фавиконку.
Браузер хранит эти маленькие иконки так упорно, что по одному только факту: «запросил он её повторно или нет», можно собрать устойчивый идентификатор.
Кстати, поскольку тема не новая, я решил проверить.
Итак:
1. В Chrome стабильно устойчиво, даже после перезапуска браузера
2. В Chrome Incognito устойчиво в пределах сессии, новая сессия — новый айди.
3. В Firefox устойчиво в пределах сессии. Перезапуск бораузера — новая сессия, новый айди.
4. В Firefox Private Window аналогично инкогнито в Chrome: новое окно — новый айди.
5. В Safari вообще определить не смогло — постоянный редирект :)
Фавиконка уже давно время от времени выстреливает в самых неожиданных местах. Когда-то находили утечки приватного режима в Firefox — браузер сохранял фавиконки даже там, где вообще не должен был ничего помнить. Были случаи, когда соединение, открытое ради favicon, не закрывалось даже после того, как вкладку закрыли.
То есть сама механика суперкуки не падает с неба. И теперь это оформлено в аккуратный POC: заходишь на демо в репозитории, а оно спокойно узнаёт тебя, потому что favicon-кэш живёт своей отдельной жизнью.
И самое ироничное во всём этом: автор сидит и пишет диссертацию, как превратить такую пустяковую деталь интерфейса в стабильный механизм идентификации.
А какова была тема вашей диссертации, котаны? Я вот Шазам копировал.
Если что, есть перевод: https://habr.com/ru/companies/itsumma/articles/542734/
#favicon #security
Сupercookie — https://github.com/jonasstrehle/supercookie
— показывает почти абсурдный рабочий (но в 2025 году лишь частично) способ отслеживать людей через обычную фавиконку.
Браузер хранит эти маленькие иконки так упорно, что по одному только факту: «запросил он её повторно или нет», можно собрать устойчивый идентификатор.
Кстати, поскольку тема не новая, я решил проверить.
Итак:
1. В Chrome стабильно устойчиво, даже после перезапуска браузера
2. В Chrome Incognito устойчиво в пределах сессии, новая сессия — новый айди.
3. В Firefox устойчиво в пределах сессии. Перезапуск бораузера — новая сессия, новый айди.
4. В Firefox Private Window аналогично инкогнито в Chrome: новое окно — новый айди.
5. В Safari вообще определить не смогло — постоянный редирект :)
Фавиконка уже давно время от времени выстреливает в самых неожиданных местах. Когда-то находили утечки приватного режима в Firefox — браузер сохранял фавиконки даже там, где вообще не должен был ничего помнить. Были случаи, когда соединение, открытое ради favicon, не закрывалось даже после того, как вкладку закрыли.
То есть сама механика суперкуки не падает с неба. И теперь это оформлено в аккуратный POC: заходишь на демо в репозитории, а оно спокойно узнаёт тебя, потому что favicon-кэш живёт своей отдельной жизнью.
И самое ироничное во всём этом: автор сидит и пишет диссертацию, как превратить такую пустяковую деталь интерфейса в стабильный механизм идентификации.
А какова была тема вашей диссертации, котаны? Я вот Шазам копировал.
Если что, есть перевод: https://habr.com/ru/companies/itsumma/articles/542734/
#favicon #security
👍14
Yet Another Frontend Night: глубже про AI в реальных проектах Яндекса
Бизнес-группа Поисковых сервисов и ИИ Яндекса приглашает на Yet Another Frontend Night 29 ноября. Главная тема — практическая интеграция AI в фронтенд. Команда Яндекса поделится своими инсайтами, какие нейросетевые инструменты помогают им в работе, как меняется процесс разработки и какие вызовы возникают при решении реальных задач.
Доклады топовых экспертов Яндекса:
— Иван Артамонов, руководитель группы конверсионных инструментов в Яндекс Бизнесе, расскажет про преимущества AI-ассистентов
— Павел Осташкин, старший разработчик интерфейсов в международной Рекламе, объяснит, как он со своей командой написал и встроил MCP в рабочие процессы и что из этого получилось
— Валерий Баранов, AI-оптимист и тимлид группы технологий фронтенда в Яндекс 360, разберет инструменты управления контекстом во фронтенде и покажет, как MCP-серверы снижают галлюцинации и делают дизайн-систему AI-ready
— Александр Иванков, руководитель группы развития инфраструктуры поисковых интерфейсов в Яндекс Поиске, поделится опытом разработки AI-помощника и подходами промпт-инжиниринга под разные роли
— Андрей Дегтярев, разработчик интерфейсов в Яндекс Браузере, рассмотрит в докладе агентские сценарии по частям, чтобы наглядно показать, какие реальные задачи пользователя они решают
Где и когда: 29 ноября, 15:00, Москва, офис Яндекса на Льва Толстого
Yet Another Frontend Night пройдет только в offline-формате, трансляция не планируется.
Подробности и регистрация
Бизнес-группа Поисковых сервисов и ИИ Яндекса приглашает на Yet Another Frontend Night 29 ноября. Главная тема — практическая интеграция AI в фронтенд. Команда Яндекса поделится своими инсайтами, какие нейросетевые инструменты помогают им в работе, как меняется процесс разработки и какие вызовы возникают при решении реальных задач.
Доклады топовых экспертов Яндекса:
— Иван Артамонов, руководитель группы конверсионных инструментов в Яндекс Бизнесе, расскажет про преимущества AI-ассистентов
— Павел Осташкин, старший разработчик интерфейсов в международной Рекламе, объяснит, как он со своей командой написал и встроил MCP в рабочие процессы и что из этого получилось
— Валерий Баранов, AI-оптимист и тимлид группы технологий фронтенда в Яндекс 360, разберет инструменты управления контекстом во фронтенде и покажет, как MCP-серверы снижают галлюцинации и делают дизайн-систему AI-ready
— Александр Иванков, руководитель группы развития инфраструктуры поисковых интерфейсов в Яндекс Поиске, поделится опытом разработки AI-помощника и подходами промпт-инжиниринга под разные роли
— Андрей Дегтярев, разработчик интерфейсов в Яндекс Браузере, рассмотрит в докладе агентские сценарии по частям, чтобы наглядно показать, какие реальные задачи пользователя они решают
Где и когда: 29 ноября, 15:00, Москва, офис Яндекса на Льва Толстого
Yet Another Frontend Night пройдет только в offline-формате, трансляция не планируется.
Подробности и регистрация
🤡5👍2
This media is not supported in your browser
VIEW IN TELEGRAM
#фишка дня
Таблица до сих пор превосходит все попытки её имитировать по очень простой причине:
если скопировать её из браузера, она спокойно вставится в Excel или Google Sheets как нормальный диапазон.
Но вот обратное направление не работает. Скопировал диапазон из Sheets — а в браузере всё рассыпалось в текст, будто ничего и не было.
Иногда это мешает: есть форма с табличкой на сайте, есть данные в Google Sheets, и единственное желание — просто вставить их туда, не перепечатывая по ячейке. Чтобы привычный Ctrl+V вёл себя так же естественно, как в Excel.
Для таких случаев можно сделать маленькую, но удобную вещь — ловить событие вставки и парсить табличные данные из буфера, распределяя их по нужным полям:
Так можно взять диапазон в Google Sheets, нажать Ctrl+V в браузере — и данные разложатся по ячейкам формы, словно это штатная функция.
Я пример забыл, а вы и молчите: https://codepen.io/alinaki/pen/KwzvEeX
#js #table
Таблица до сих пор превосходит все попытки её имитировать по очень простой причине:
если скопировать её из браузера, она спокойно вставится в Excel или Google Sheets как нормальный диапазон.
Но вот обратное направление не работает. Скопировал диапазон из Sheets — а в браузере всё рассыпалось в текст, будто ничего и не было.
Иногда это мешает: есть форма с табличкой на сайте, есть данные в Google Sheets, и единственное желание — просто вставить их туда, не перепечатывая по ячейке. Чтобы привычный Ctrl+V вёл себя так же естественно, как в Excel.
Для таких случаев можно сделать маленькую, но удобную вещь — ловить событие вставки и парсить табличные данные из буфера, распределяя их по нужным полям:
document.addEventListener("paste", function (e) {
const text = e.clipboardData.getData("text");
const rows = text.trim().split(/\r?\n/).map(r => r.split("\t"));
const inputs = [...document.querySelectorAll("input")];
let index = 0;
for (const row of rows) {
for (const cell of row) {
if (inputs[index]) {
inputs[index].value = cell;
index++;
}
}
}
e.preventDefault();
});
Так можно взять диапазон в Google Sheets, нажать Ctrl+V в браузере — и данные разложатся по ячейкам формы, словно это штатная функция.
Я пример забыл, а вы и молчите: https://codepen.io/alinaki/pen/KwzvEeX
#js #table
1👍19❤1
#новость дня
Если нужно превратить HTML в картинку, приходится пользоваться утилитами разной степени кривизны — ведь нужно имитировать DOM. Cтабильного решения не было вообще (наверное, только Playwright и скриншот).
Теперь начинает появляться что-то вменяемое.
WICG выкатили идею под названием HTML-in-Canvas: холст учат рисовать обычные HTML-элементы: https://github.com/WICG/html-in-canvas
Прямо так, как браузер их и так рисует в DOM — со стилями, размерами, текстом, вложенностями. Только вместо того, чтобы показывать их на странице, он превращает элемент в картинку внутри <canvas>.
На самом деле, выглядит весьма проклято, вот пример с иллюстрации:
Почему нельзя просто API для DOM? Потому что там целая плеяда сесурити-специалистов выступает против.
Работает это пока только в Chrome Canary от 138 и выше, и включать надо отдельный флаг. Плюс есть ограничения: рендерятся только те элементы, которые лежат внутри самого канваса, и некоторые штуки браузер сознательно блокирует — типа чужих iframe или странных SVG. Но в целом — оно работает.
Флаг, кстати, такой:
И выглядит это как первый нормальный шаг к тому, чтобы больше не страдать с ручной отрисовкой текста и HTML внутри канваса. Если всё доедет до обычных браузеров, можно будет наконец-то спокойно выдохнуть.
#html #canvas
Если нужно превратить HTML в картинку, приходится пользоваться утилитами разной степени кривизны — ведь нужно имитировать DOM. Cтабильного решения не было вообще (наверное, только Playwright и скриншот).
Теперь начинает появляться что-то вменяемое.
WICG выкатили идею под названием HTML-in-Canvas: холст учат рисовать обычные HTML-элементы: https://github.com/WICG/html-in-canvas
Прямо так, как браузер их и так рисует в DOM — со стилями, размерами, текстом, вложенностями. Только вместо того, чтобы показывать их на странице, он превращает элемент в картинку внутри <canvas>.
На самом деле, выглядит весьма проклято, вот пример с иллюстрации:
<canvas id="canvas" width="638" height="318" layoutsubtree="true">
<div id="drawElement" style="width: 550px;">
Hello from <a href="https://github.com/WICG/html-in-canvas">html-in-canvas</a>!
<br>I'm multi-line, <b>formatted</b>,
rotated text with emoji (😀), RTL text
<span dir=rtl>من فارسی صحبت میکنم</span>,
vertical text,
<p style="writing-mode: vertical-rl;">
这是垂直文本
</p>
an inline image (<img width="150" src="wolf.jpg">), and
<svg width="50" height="50">
<circle cx="25" cy="25" r="20" fill="green" />
<text x="25" y="30" font-size="15" text-anchor="middle" fill="#fff">
SVG
</text>
</svg>!
</div>
</canvas>
Почему нельзя просто API для DOM? Потому что там целая плеяда сесурити-специалистов выступает против.
Работает это пока только в Chrome Canary от 138 и выше, и включать надо отдельный флаг. Плюс есть ограничения: рендерятся только те элементы, которые лежат внутри самого канваса, и некоторые штуки браузер сознательно блокирует — типа чужих iframe или странных SVG. Но в целом — оно работает.
Флаг, кстати, такой:
--enable-blink-features=CanvasDrawElement.И выглядит это как первый нормальный шаг к тому, чтобы больше не страдать с ручной отрисовкой текста и HTML внутри канваса. Если всё доедет до обычных браузеров, можно будет наконец-то спокойно выдохнуть.
#html #canvas
❤6👍3
#дайджест недели
Понедельник
Supercookie — демонстрация того, как обычная favicon может работать как устойчивый идентификатор. Старый трюк, но теперь есть аккуратный POC, который узнаёт вас по иконке.
https://www.tgoop.com/htmlshit/3909
Четверг
Как вставлять табличные данные из Google Sheets прямо в форму на сайте: ловим paste, парсим табы, раскладываем по input’ам.
https://www.tgoop.com/htmlshit/3911
Пятница
HTML-in-Canvas: эксперимент, который позволяет
https://www.tgoop.com/htmlshit/3912
Короткая неделя вышла, котаны.
Понедельник
Supercookie — демонстрация того, как обычная favicon может работать как устойчивый идентификатор. Старый трюк, но теперь есть аккуратный POC, который узнаёт вас по иконке.
https://www.tgoop.com/htmlshit/3909
Четверг
Как вставлять табличные данные из Google Sheets прямо в форму на сайте: ловим paste, парсим табы, раскладываем по input’ам.
https://www.tgoop.com/htmlshit/3911
Пятница
HTML-in-Canvas: эксперимент, который позволяет
<canvas> рисовать настоящий HTML со стилями и вложенностями. Пока сыро, но выглядит как первый нормальный путь к HTML-в-картинку без костылей.https://www.tgoop.com/htmlshit/3912
Короткая неделя вышла, котаны.
❤6👍1
This media is not supported in your browser
VIEW IN TELEGRAM
#codepen дня
Jhey стал очень редко радовать нас новыми дропами — готовится к изданию своего курса по эффектной вёрстке, потому кодом делиться — увы — почти перестал.
Но надо отдать должное, когда идея не полностью исходит от него — он всё ещё продолжает демонстрировать уровень!
Итак, помните мы с вами пытались делать эффект Ambilight? Как оказалось, ту же идею можно применить чтобы подсветить края карточек!
Немного JS для передачи координат курсора в CSS, немного SVG-фильтров для размытия продублированного контента — и вы неотразимы!
Собственно, пример: https://codepen.io/jh3y/pen/WbwZaNa
Не забудьте потыкать настройки, чтобы понять реализацию.
#svg #css #ambilight
Jhey стал очень редко радовать нас новыми дропами — готовится к изданию своего курса по эффектной вёрстке, потому кодом делиться — увы — почти перестал.
Но надо отдать должное, когда идея не полностью исходит от него — он всё ещё продолжает демонстрировать уровень!
Итак, помните мы с вами пытались делать эффект Ambilight? Как оказалось, ту же идею можно применить чтобы подсветить края карточек!
Немного JS для передачи координат курсора в CSS, немного SVG-фильтров для размытия продублированного контента — и вы неотразимы!
Собственно, пример: https://codepen.io/jh3y/pen/WbwZaNa
Не забудьте потыкать настройки, чтобы понять реализацию.
#svg #css #ambilight
❤13👍1
Заказчик кинул с деньгами? Отправьте его в суд.
Чаще из-за ошибок в договоре правда может быть не на вашей стороне. 8 пунктов для безопасного договора — проверьте прямо сейчас.
В 2026 году требования к IT-компаниям и фрилансерам станут жёстче. Разберитесь с налогами, сайтами и договорами уже сейчас.
Подписывайтесь на LAWLEGKO — канал практикующего юриста Инны Вялковой. Новости от государства и юридические тонкости простым языком.
Или передайте всё юристам: договоры, налоги, реклама — юридическое абонентское сопровождение.
Вы занимаетесь работой, юристы LAWLEGKO — вашим спокойствием.
Чаще из-за ошибок в договоре правда может быть не на вашей стороне. 8 пунктов для безопасного договора — проверьте прямо сейчас.
В 2026 году требования к IT-компаниям и фрилансерам станут жёстче. Разберитесь с налогами, сайтами и договорами уже сейчас.
Подписывайтесь на LAWLEGKO — канал практикующего юриста Инны Вялковой. Новости от государства и юридические тонкости простым языком.
Или передайте всё юристам: договоры, налоги, реклама — юридическое абонентское сопровождение.
Вы занимаетесь работой, юристы LAWLEGKO — вашим спокойствием.
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
#инструмент дня
Кому адекватной современной виртуализации списков?
Как-то так повелось, что задача отрисовки десятков, и даже сотен тысяч строк или ячеек на экране решается... волнами. Появляется решение, принимается всеми, а потом — буквально забрасывается. И вот мы годами ждём обновления того же react-window просто чтобы получить возможность рендерить строки разной высоты из коробки. А react-window сам по себе был и является рекомендованной заменой react-virtualized.
В других фреймворках и ванильных средах ситуация ещё веселее.
При этом разработчики, например, мобильных приложений на тех же Flutter и SwiftUI в принципе лишены этой проблемы, просто потому что им надо заботиться о рендере элементов самостоятельно, заранее объявляя, что тут должен быть скролл. Насильная виртуализация, так сказать.
Если вы были застигнуты врасплох моими утверждениями и не понимаете вообще, о чём я, то вкратце поясню: чтобы дать возможность человеку поскроллить тысячи и сотни тысяч объектов на экране, совсем не обязательно отрисовывать их все разом. Можно отрисовать штук 10-20 строк, заполнив экран, и просто переиспользовать эти элементы раз за разом. Виртуальные списки, буквально.
Итак, для чего я всё это пишу? А вот: вашему вниманию предъявляется универсальная библиотека виртуализации списков virtua.
GitHub: https://github.com/inokawa/virtua
Умеет в динамические высоты строк из коробки! Умеет в бесконечный скролл. Умеет занимать всю высоту окна. Умеет в RSC.
Ну и не ограничивается одним только React: Vue, Solid и Svelte тоже поддерживаются.
Отличное современное решение.
#scroll #virtual #бородач
Кому адекватной современной виртуализации списков?
Как-то так повелось, что задача отрисовки десятков, и даже сотен тысяч строк или ячеек на экране решается... волнами. Появляется решение, принимается всеми, а потом — буквально забрасывается. И вот мы годами ждём обновления того же react-window просто чтобы получить возможность рендерить строки разной высоты из коробки. А react-window сам по себе был и является рекомендованной заменой react-virtualized.
В других фреймворках и ванильных средах ситуация ещё веселее.
При этом разработчики, например, мобильных приложений на тех же Flutter и SwiftUI в принципе лишены этой проблемы, просто потому что им надо заботиться о рендере элементов самостоятельно, заранее объявляя, что тут должен быть скролл. Насильная виртуализация, так сказать.
Если вы были застигнуты врасплох моими утверждениями и не понимаете вообще, о чём я, то вкратце поясню: чтобы дать возможность человеку поскроллить тысячи и сотни тысяч объектов на экране, совсем не обязательно отрисовывать их все разом. Можно отрисовать штук 10-20 строк, заполнив экран, и просто переиспользовать эти элементы раз за разом. Виртуальные списки, буквально.
Итак, для чего я всё это пишу? А вот: вашему вниманию предъявляется универсальная библиотека виртуализации списков virtua.
GitHub: https://github.com/inokawa/virtua
Умеет в динамические высоты строк из коробки! Умеет в бесконечный скролл. Умеет занимать всю высоту окна. Умеет в RSC.
Ну и не ограничивается одним только React: Vue, Solid и Svelte тоже поддерживаются.
Отличное современное решение.
#scroll #virtual #бородач
❤11
#инструмент дня
Зачем писать
Ответ на эти и другие вопросы прост: «Потому что не подумал».
Но думать — сложно. И не всегда нужно. Поэтому в IDE от JetBrains встроен преобразователь логических вырадений по законам де Моргана.
А тем, кто предпочитает быть свободным, приходится искать иные решения.
Иногда — даже думать.
И тут есть вариант, откуда не ждали: правило для ESLint!
ESLint Plugin De Morgan: https://github.com/azat-io/eslint-plugin-de-morgan
Запросто преобразует ваши const value = !(a || b !== c) в const value = !a && b === c.
В плагине два правила:
- no-negated-conjunction
- no-negated-disjunction
Все правила имеют автофикс. У плагина нет зависимостей. Поддерживает как современный, так и легаси формат ESLint конфигов.
Твиттер автора с анонсом: https://x.com/azat_io/status/1888874193007132762
Пользуемся, котаны!
#boolean #eslint #logic #бородач
Зачем писать
!(a && !b && c >= 10 && d !== e), если можно !a || b || c < 10 || d === e?Ответ на эти и другие вопросы прост: «Потому что не подумал».
Но думать — сложно. И не всегда нужно. Поэтому в IDE от JetBrains встроен преобразователь логических вырадений по законам де Моргана.
А тем, кто предпочитает быть свободным, приходится искать иные решения.
Иногда — даже думать.
И тут есть вариант, откуда не ждали: правило для ESLint!
ESLint Plugin De Morgan: https://github.com/azat-io/eslint-plugin-de-morgan
Запросто преобразует ваши const value = !(a || b !== c) в const value = !a && b === c.
В плагине два правила:
- no-negated-conjunction
- no-negated-disjunction
Все правила имеют автофикс. У плагина нет зависимостей. Поддерживает как современный, так и легаси формат ESLint конфигов.
Твиттер автора с анонсом: https://x.com/azat_io/status/1888874193007132762
Пользуемся, котаны!
#boolean #eslint #logic #бородач
1👍15❤4🤩1
Раньше зарплаты разработчиков росли вместе с опытом. Сейчас все иначе: пока ребята со стажем 10+ лет получают меньше 150 тысяч, зумерочки зарабатывают по 400+ тысяч.
Сегодня больше зарабатывает тот, кто знает, сколько стоят его навыки, а не тот, кто 15 лет пишет идеальный код.
Что это значит для нас? То, что нужно знать рыночек и понимать, на какие деньги сейчас реально можно претендовать. Чтобы не зарабатывать в два раза меньше, когда можно зарабатывать в два раза больше!
Следите за ситуацией на рынке в канале «зэпэшки в разработке». Здесь разработчики, DevOps-инженеры, тестировщики и техлиды рассказывают, сколько они зарабатывают и что конкретно делают за эти деньги:
• 450 000 ₽ у iOS-разработчика в 24 года
• 60 000 ₽ у Fullstack-разработчика
• 330 000 ₽ у DWH аналитика в 27 лет
Подписывайтесь на «зэпэшки в разработке» и становитесь осведомленнее → @sweetsalaryD
Сегодня больше зарабатывает тот, кто знает, сколько стоят его навыки, а не тот, кто 15 лет пишет идеальный код.
Что это значит для нас? То, что нужно знать рыночек и понимать, на какие деньги сейчас реально можно претендовать. Чтобы не зарабатывать в два раза меньше, когда можно зарабатывать в два раза больше!
Следите за ситуацией на рынке в канале «зэпэшки в разработке». Здесь разработчики, DevOps-инженеры, тестировщики и техлиды рассказывают, сколько они зарабатывают и что конкретно делают за эти деньги:
• 450 000 ₽ у iOS-разработчика в 24 года
• 60 000 ₽ у Fullstack-разработчика
• 330 000 ₽ у DWH аналитика в 27 лет
Подписывайтесь на «зэпэшки в разработке» и становитесь осведомленнее → @sweetsalaryD
🤡11🫡5❤1
#инструмент дня
История от подписчика!
На иллюстрациях — время прогона тестов, стало и было. Как добиться подобного?
Сменой тулинга, конечно же!
Переход с ts-jest на @swc/jest даёт ощутимый прирост скорости. ts-jest завязан на стандартный TypeScript-компилятор. Он работает в одном потоке, выполняет полноценную проверку типов и в целом довольно медленно трансформирует файлы. В больших проектах это приводит к заметной задержке перед запуском любого тестового набора.
@swc/jest использует SWC — транспайлер, написанный на Rust. Его ключевые особенности:
* трансформация работает в нативном коде без виртуальной машины;
* парсер и трансформер многопоточные;
* типы не проверяются, а просто удаляются;
* преобразование максимально близко к «быстрому проходу».
Для тестов это идеальный сценарий: типизация проверяется отдельно, а от тестового раннера требуется лишь быстрое преобразование модулей.
Дополнительно ускорить прогон помогает параллелизация. В GitLab CI достаточно указать:
...и тесты будут запускаться одновременно в нескольких процессах.
Результаты после перехода на @swc/jest:
* 54 тестовых набора, 1018 тестов, 100 снапшотов — 4.48 секунды.
* Меньшая выборка — 13 наборов, 258 тестов — 4.23 секунды.
Ускорение достигается только заменой трансформера: многопоточная трансформация в SWC + отсутствие тайпчекера даёт сразу заметный выигрыш без изменений в самих тестах.
Какой тулинг у вас, котаны?
#swc #jest #typescript
История от подписчика!
На иллюстрациях — время прогона тестов, стало и было. Как добиться подобного?
Сменой тулинга, конечно же!
Переход с ts-jest на @swc/jest даёт ощутимый прирост скорости. ts-jest завязан на стандартный TypeScript-компилятор. Он работает в одном потоке, выполняет полноценную проверку типов и в целом довольно медленно трансформирует файлы. В больших проектах это приводит к заметной задержке перед запуском любого тестового набора.
@swc/jest использует SWC — транспайлер, написанный на Rust. Его ключевые особенности:
* трансформация работает в нативном коде без виртуальной машины;
* парсер и трансформер многопоточные;
* типы не проверяются, а просто удаляются;
* преобразование максимально близко к «быстрому проходу».
Для тестов это идеальный сценарий: типизация проверяется отдельно, а от тестового раннера требуется лишь быстрое преобразование модулей.
Дополнительно ускорить прогон помогает параллелизация. В GitLab CI достаточно указать:
parallel: 3
...и тесты будут запускаться одновременно в нескольких процессах.
Результаты после перехода на @swc/jest:
* 54 тестовых набора, 1018 тестов, 100 снапшотов — 4.48 секунды.
* Меньшая выборка — 13 наборов, 258 тестов — 4.23 секунды.
Ускорение достигается только заменой трансформера: многопоточная трансформация в SWC + отсутствие тайпчекера даёт сразу заметный выигрыш без изменений в самих тестах.
Какой тулинг у вас, котаны?
#swc #jest #typescript
1👍6
