Your trial period has ended!
For full access to functionality, please pay for a premium subscription
HT
Будни разработчика
https://t.me/htmlshit
Channel age
Created
Language
Russian
1.87%
ER (week)
7.08%
ERR (week)

Блог Lead JS-разработчика из Хельсинки

Автор: @bekharsky

По рекламе: https://telega.in/channels/htmlshit/card?r=GLOiHluU или https://t.me/it_adv

Messages Statistics
Reposts and citations
Publication networks
Satellites
Contacts
History
Top categories
Main categories of messages will appear here.
Top mentions
The most frequent mentions of people, organizations and places appear here.
Found 188 results
#такое дня

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

Но вот один вопрос, который задавал автор треда, прям немного покоробил: "Какие новые технологии в разработке вас вдохновляют?" И большинство просто отвечало: "RSC". И это автора очень расстраивало.

Речь шла, конечно, о фронтенд-собеседованиях.

Что не так с этим вопросом?

Да, вроде, всё так, пресловутая "искра в глазах". Вот только всегда есть нюансы.

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

Давайте посмотрим в качестве примера на такую простую штуку, как contenteditable.

Не так давно Firefox 136, наконец, присоединился к поддержке contenteditable="plaintext-only". Это значит, что при вставке какого-либо rich format куска, ну, грубо говоря, оформленного текста из HTML или Microsoft Word, он вставится обычным текстом, оберегая нас всех от лишних тегов.

Крутая фича, не правда ли? Так удачно легла на везде рекламируемый разными инфлюенсерами baseline!

Но вообще, нам что, textarea не хватает? Вот, кстати, не хватает. Например, сделать авторесайз textarea довольно непросто, и CSS Custom Highlight API тоже не накатить. А div всё сделает сам.

Вот только при редактировании такого текста Firefox вставит
на каждый перевод строки, а Chrome — нет.

Бадум-тсс.

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

Плохо ли это? Да нет, наверное. Особенно, если ты разработчик браузера.

Но восхищаться этим становится как-то... трудозатратно.

#textarea #contenteditable
04/26/2025, 12:02
t.me/htmlshit/3584
1
2
1.1 k
Как заговорить с сетевиками на одном языке? 👍
 
Эксперты одного из ведущих провайдеров IT-инфраструктуры Selectel подготовили бесплатный курс «Погружение в компьютерные сети».
 
Всего за час вы сможете разобраться в принципах работы сетей, освоить ключевые термины и на конкретных примерах освоить две основные модели.
 
Курс будет интересен как джунам, так и более опытным разработчикам.
 
➡️ Убедитесь в этом, начав обучение в Академии Selectel

Реклама. АО «Селектел», ИНН 7810962785, ERID: 2Vtzqvo5XTG
04/25/2025, 17:13
t.me/htmlshit/3583
26
40
1.4 k
#такое дня

Если этим утром вы проснулись с диким синдромом самозванца и считаете, что уж вас-то точно переоценили, помните.

Где-то в Google есть фронтенд-разработчик, PM и QA, которые не осилили скелетоны и скроллбары. И получают они сильно больше денег чем вы, котаны.

Синдром самозванца, вроде, стал полегче, но в целом стало гораздо хуже, не правда ли? :)
04/25/2025, 12:26
t.me/htmlshit/3582
16
19
1.3 k
#статья дня от подписчика

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

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

Впрочем, слово автору!

🔥 Slow SPAs Kill Conversions — и я знаю, как это исправить.

Привет! Я Олег, занимаюсь фронтендом и люблю разбираться, как сделать веб быстрее, легче и умнее. Когда SPA начинает тормозить, страдает не только UX, но и бизнес - падает конверсия, растёт отток

В своей новой статье «Улучшаем производительность SPA» я разложил по полочкам:
— Где именно тормозит ваше приложение (спойлер: не только в бандле)
— Как грамотно внедрить ленивую загрузку и код-сплитинг
— Зачем вам Web Workers и виртуализация, если хочется отзывчивости даже на слабых устройствах

p.s спасибо всем, кто даёт фидбэк, шарит и просто читает - вы крутые

Читай гайд по оптимизации
https://dev.to/oltrenin/improving-spa-performance-2k2g
04/24/2025, 11:24
t.me/htmlshit/3581
10
5
1.4 k
👋 Lama — это проект с самыми мощными нейросетями:

⚡️ o3, o4, ChatGPT-4.1, Gemini 2.5 Flash, DeepSeek R1 и парочка других
⚡️ Kling, Dall-E 3 HD, Flux Dev - лучшие генераторы изображений
⚡️ Суммаризатор видео Nova
⚡️ Бесплатно доступны GPT-4.1 mini , Gemini 2.0 Flash, и Flux Schnell
Свой web-site с тем же функционалом, что и в телеграм

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

Подписывайтесь на канал Lama AI и окунитесь в мир ИИ.
04/24/2025, 10:01
t.me/htmlshit/3580
13
55
1.3 k
#шпаргалка дня

Уникальное предложение!

Берёте короче эту пирамиду код-ревью и ваши пулл-реквесты станут не только вкусными, но и полезными: https://www.morling.dev/images/code_review_pyramid.svg

Такая себе пирамида Маслоу, но для обсуждения качества кода. От базовых вещей (но не опускаясь до того, что можно сделать автоматически) до того, что сделает ваш код действительно красивым.

#pr #process #work #бородач
04/23/2025, 23:03
t.me/htmlshit/3579
1
5
1.3 k
Последний шанс попасть в Летние школы Яндекса — набор закроется 27 апреля

Летние школы — это бесплатные интенсивы, где начинающие специалисты могут погрузиться в реальные задачи и углубить знания в определенном направлении разработки и не только. В этом году к уже пяти существующим школам добавились ещё две: школа обеспечения качества (для будущих инженеров по тестированию) и школа КИТ (для DevOps- и SRE-инженеров).

Для специалистов из Москвы и Санкт-Петербурга обучение пройдет очно в офисах Яндекса, а для других городов — онлайн в распределенных командах. Участников ждут занятия с опытными экспертами из разных сервисов Яндекса. Более 50% выпускников школ становятся стажерами или сотрудниками компании.

Успейте решить тестовое задание и подать заявку.
04/23/2025, 18:22
t.me/htmlshit/3578
13
4
1.4 k
#фишка дня

Когда-то давно я слышал о таком свойстве, как text-align-last.

Что оно делает? Ну, думаю, всё понятно из иллюстрации :)

Работает с последней строкой индивидуально, позволяя сделать более приятные глазу переходы текста, соответствующие остальной стилистике. Вот хорошая статья на тему: https://www.stefanjudis.com/today-i-learned/how-to-align-the-text-of-the-last-paragraph-line/

С интерактивным примером, как вы любите.

Почему я акцентировал на нём внимание?

Да просто я знал о нём ещё тогда, когда оно толком нигде не поддерживалось. Вот в IE работало, буквально, а в Chrome нет. И как-то все на него забили в итоге.

В этом есть небольшая беда так нами любимых «the future CSS tip». Наиграешься, разочаруешься, и забудешь :(

Но есть же наш уютный канальчик, мы тут всё вспомним :)

#css #thefuturepast #бородач
04/23/2025, 15:39
t.me/htmlshit/3577
10
4
1.4 k
Небольшое уточнение: за границы распространения фона отвечает не background-origin, а background-clip, просто в шортхенде значение брксовой модели устанавливает сразу их оба (абзац после первого Note в https://drafts.csswg.org/css-backgrounds/#background) 😳

Скоро можно будет и с прозрачными фонами — через background-clip: border-area (пока только в Сафари). Зато с недавних пор как минимум в Хроме можно задавать сплошной цвет градиентом без повторения и лишних цифр, просто *-gradient(red) и т.п.
04/23/2025, 08:36
t.me/htmlshit/3576
21
21
1.3 k
#фишка дня

Итак, сегодня я спросоня долго смотрел на этот пример от Джея и никак не мог понять, какого фига тут происходит.

Не, ну я вижу, что в итоге получается градиентная граница, но... но почему?

И тут до меня дошло: оказывается, при настройке фона можно фактически указывать боксовую модель! Ну то есть называется-то оно background-origin, но по факту работает по тем же принципам, что и box-sizing.

Итак, три значения: border-box, padding-box и content-box.

Выходит, border-box заполнит фон, включая границы, padding-box — до полей, a content-box — по контенту.

Ну и для градиентных границ (к сожалению, только с непрозрачным фоном), получается так:

article {
background: // layer them up with different origin!
linear-gradient(var(--bg), var(--bg)) padding-box,
var(--gradient) border-box;
border: 4px solid transparent;
}

Обратите внимание, котаны, такое прокатывает только с фоном-изображением или градиентом, для сплошного заполнения просто указать цвет не выйдет!

Ну и пример, конечно же: https://codepen.io/alinaki/pen/QWYoPpx

#css #background #origin #бородач
04/23/2025, 08:15
t.me/htmlshit/3575
29
1
1.4 k
"Почему 80% разработчиков НИКОГДА не получат топовые офферы? Шокирующая правда..."

🧑‍💻Забудьте мифы про "гениальный опыт". Даже классные кодеры не могут пройти собес, потому что не знают главного: успех — это умение ПРОДАТЬ свои навыки

❗️Всего 20% получают топовые позиции, потому что понимают, чего хотят компании, как подать себя и вести переговоры.

❓Хотите узнать, как выделиться среди сотен кандидатов и получить оффер мечты? Всё это — в канале «MAD iOS | From Code to Cash». Только работающие фишки.

✅ Не упустите шанс — присоединяйтесь

🆕 Сейчас новый цикл статей о том, как кандидаты совершают ошибки в самом начале реального отбора.
04/22/2025, 15:04
t.me/htmlshit/3574
20
9
1.2 k
#баг дня

Преамбула

Некий сервис, назовём его Doodle Lampolytics, заставил всех своих клиентов переползти с модели подсчёта просмотров страниц на модель подсчёта событий.

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

И если раньше мы в нагрузку к «просмотру» передавали так называемые индивидуальные размерности и метрики, привязанные к сессии, то теперь — каждое событие может нести индивидуальный их набор.

Не в последнюю очередь это связано с ужесточением запретов на слежку за посетителями сайтов.

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

Суть

Суд да дело, приходим мы к идее передачи события с неким контекстом:

trackEvent('event_name', context) {}

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

Передаём туда, например, productId и orderId — и получаем трекинг истории конкретного продукта или заказа. Удобно, когда продукт сильно кастомизированный. Можно накинуть туда optionId и следить, какие продукты какими опциями нашпиговывают.

Таким образом, мы отсылаем объекты вида:

productId,
optionId,
orderId,
locale,
}


Потом объект из camelCase конвертируется в snake_case, как того требует документация, и дёргается некий API. Запомните этот момент.

И всё, поехали в продакшен. События уходят, счастье. Заодно, те же самые события, за некоторым исключением, можно пихать в сервисы вроде Sentry.

И всё бы ничего, но интерфейс Doodle Lampolytics настолько проклят, что оказалось намного проще выгружать данные оттуда сразу в Doodle LargeQuery и SQL-ем их запрашивать.

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

Я почитал документацию, нашёл где создавать свои размерности и метрики на основе передаваемых параметров — в админке — захожу туда и наблюдаю следующую картину:

product_ıd,
option_id,
option_ıd

— Какого хера?! — заорал я, я же был в офисе.

Но параметры с ı вместо i исчислялись десятками, в то время как остальные — десятками тысяч. И я зачем-то успокоился. Подумал, что это косяк ламполитики, с которым можно разобраться попозже.

Но сегодня я зашёл в наш прекрасный чат, зачем-то ткнул в аватарку одного из подписчиков и увидел у него в истории некую песню с названием Bakı.

И тут до меня резко дошло, какой я идиот.

Прежде чем читать дальше, вы можете посмотреть на код функции, которой мы преобразуем camelCase в snake_case: https://github.com/jonschlinkert/snakecase/blob/master/index.js

Особо внимательные, наверное, уже догадались, в чём проблема. А ведь мы даже тесты написали.

Поскольку не все пройдут по ссылке, я приведу кусочек:

const lowercase = (input = '', options) => input.toLocaleLowerCase(options?.locale);

Ничего не смущает? Я подожду.

...

Да, правильно. Если забыть передать локаль (язык клиента, сервера в нашем случае), то будет взята переменная среды.

И для кого-то из наших клиентов в этой переменной оказался турецкий (или узбекский) язык.

В которых нет буквы i, вместо неё — ı.

Вы все правильно поняли, мы не полностью контролируем среду выполнения. Это так называемый Doodle AppsScript. Он исполняется на языке, в котором открыт офисный инструмент посетителя.

Естественно, мы локаль передать забыли. Хороший вопрос, почему мы вообще не проверили это поведение изначально... но тут как есть.

Стыдно? Стыдно. Зря я винил Doodle Lampolytics.

#бородач
04/21/2025, 20:46
t.me/htmlshit/3573
4
1
1.4 k
Проект для СТО, создайте курс для Яндекс Практикума!

Сервис онлайн-образования Яндекс Практикум в поисках автора для курса Chief Technology Officer.

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

Роль автора спокойно можно совмещать с основной работой благодаря удалёнке и гибкому графику. Обратите внимание на это предложение, если у вас есть от 10 свободных часов в неделю.

От кандидата ожидают опыт работы СТО/зам СТО от 3х лет и знания на высоком уровне в одной из тем:
▪︎управление развитием команды и личное целеполагание,
▪︎эффективные коммуникации с командой и стили лидерства,
▪︎разделение зон ответственности, эффективные коммуникации внутри команды и управление конфликтами,
▪︎аудит процессов взаимодействия со стейкхолдерами.

Узнать подробности и откликнуться
04/21/2025, 16:35
t.me/htmlshit/3572
4
17
1.4 k
У Фигмы была интересная статья про то, как они это делали и почему они отошли о чистого CRDT

https://www.figma.com/blog/how-figmas-multiplayer-technology-works/
04/21/2025, 12:17
t.me/htmlshit/3571
11
59
1.5 k
#статья дня

Ох, что тут принесло!

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

Далеко ходить не надо: Google Sheets, Google Docs, Miro, да даже Microsoft в онлайн и не очень офисных пакетах это позволяет. И, кстати, онлайн игры это тоже самое что ни на есть приложение для совместной работы. Особенно это интересно в файтингах, но об этом потом.

Общее название структур данных для организации подобного это CRDT. Conflict-free Replicated Data Type, или, по-русски, бесконфликтная репликация данных.

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

Встречайте: https://jakelazaroff.com/words/an-interactive-intro-to-crdts/

Статью не назвать простой, а реализацию — промышленной, но оно работает и очень впечатляет! Всем рекомендую, котаны.

#crdt #algorithm #бородач
04/21/2025, 10:33
t.me/htmlshit/3570
20
8
1.2 k
#фишка дня

Селекторы атрибутов штука довольно удобная если правильно их использовать. Особенно хорошо они раскрываются с aria-атрибутами вроде aria-hidden, aria-pressed и так далее.

Да даже элементарные кнопки соцсетей весьма неплохо выглядят в виде data-social=“twitter”, чтобы не замусоривать пространство классов. Или вообще a[href*=“twitter.com”], если собрались на символах экономить.

В React строить API компонента на data-атрибутах тоже выходит весьма и весьма элегантно.

Вот только есть нюанс: селекторы атрибутов — регистрозависимы. Чтобы сделать их независимыми — стоит добавить модификатор i, то есть:

[data-social=“twitter” i]

Свалидирует





…ну и если хотите ровно наоборот — есть модификатор s. Но оно совсем новое и для частных случаев, которые по-умолчанию и так регистронезависимы (вроде type, checked, disabled).

#attribute #css #case #бородач
04/19/2025, 15:36
t.me/htmlshit/3569
22
31
1.3 k
#инструмент дня

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

ntfy.sh — минималистичный и мощный сервис пуш-уведомлений, который идеально справляется с этой задачей.

Отправить уведомление можно одной строкой:


curl -d "Бэкап завершён успешно ✅" ntfy.sh/my-topic


А теперь представь: ты ставишь это в конце крон-джоба или CI-пайплайна, и тебе тут же прилетает пуш на телефон, в браузер или куда угодно.

Особенности:

> Поддержка Web, iOS и Android (через приложения)

> Подписка на топики через браузер или curl

> Можно отправлять заголовки, приоритеты, вложения

> Есть self-hosted режим (на Go, легко разворачивается)

> Поддерживает MQTT и WebSockets

🔐 Безопасность? Можно настроить basic auth и TTL сообщений. Но важно понимать, что в бесплатной версии сервиса топики не резервируются, являясь по факту паролями. Security over obscurity, но что делать.

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

Пример с заголовком и высоким приоритетом:


curl -H "Title: Внимание!" \
-H "Priority: urgent" \
-d "На сервере заканчивается место!" \
ntfy.sh/my-topic


Открытый исходный код, лёгкий в использовании и отлично документирован.

👉 Официальный сайт: https://ntfy.sh/

#push #notification
04/19/2025, 10:12
t.me/htmlshit/3568
11
6
1.3 k
Yandex Cloud выкатил сервис по аренде выделенных серверов в открытый доступ. Он подходит в качестве тестовых стендов или дополнительных мощностей для развития текущих и разработки новых сервисов.

Серверы можно настроить «под себя»: установить нужную виртуализацию, операционку и ПО. И работать через SSH, консоль KVM или по API. Серверы не подвержены влиянию действий других пользователей — все ресурсы полностью выделены для задач одного клиента.

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

Хотите ставить свою виртуализацию? Пожалуйста. Нужна поддержка облака? Она тут как тут. Безопасность данных на серверах Yandex BareMetal обеспечивается за счёт гранулярного разграничения прав доступа, резервного копирования и мониторинга. При этом сами серверы размещены в защищённых дата-центрах на территории РФ, а SLA составляет 99,9%.

Сервер выдаётся быстро быстро, настраивается понятно, а если вдруг что — поддержка на связи 24/7.
04/18/2025, 19:31
t.me/htmlshit/3567
28
19
1.6 k
#нытьё дня

Неожиданно, пост дедовского нытья!

Раньше мы сами выбирали библиотеки. Скачивали архивы, клали их в vendor, подключали в коде. Всё было сложно, но понятно: ты знал, что именно ты ставишь, откуда оно, и зачем.

Потом появились Bower, npm, yarn — и стало проще. Одной командой можно было добавить любую зависимость. Но с этой простотой пришла и новая проблема: стало слишком легко установить что-то не то.

Теперь в игру вступил ИИ. Он подсказывает код, генерирует функции, предлагает решения. Иногда вместе с ними — и зависимости: import x from 'some-lib'. Всё бы ничего, но...

1. LLM генерирует код, который подключает внешние пакеты — это ожидаемо.
2. Иногда эти пакеты вымышленные, они не существуют.
3. Злоумышленники это поняли и публикуют настоящие пакеты с такими "выдуманными" именами.
4. Теперь LLM генерирует код, который подключает вредоносное ПО — и оно успешно устанавливается.

ИИ не различает добро и зло. Он просто делает то, что, по его модели, «похоже на правильное решение». А злоумышленники подстраивают реальность под эту модель.

Когда всё слишком легко, слишком удобно — легко забыть, что ты ставишь, откуда и зачем. И тогда vendor заполняется не тобой, а кем-то другим.

Естественно, это не только о фронтенде. Проблеме в том или ином виде подтверждена любая система пакетов. И даже операционные системы! Кастомные репозитории не вчера придумали.

Понятное дело, что проблему частично можно исправить, добавив в промпты реальные списки пакетов или проведя хоть какой-то анализ сферы. Но это же надо думать :)

Осторожнее, котаны.

#ai #vulnerability
04/18/2025, 17:03
t.me/htmlshit/3566
18
46
1.3 k
#инструмент дня

Вы только посмотрите на эту красоту!

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

И не только для React! Vue и Svelte тоже там.

Итак, встречайте: NumberFlow от Максвелла Барвиана.

GitHub: https://github.com/barvian/number-flow
Документация и демо: https://number-flow.barvian.me/

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

Прекрасное.

#react #number #transition #бородач
04/18/2025, 10:28
t.me/htmlshit/3565
24
7
1.4 k
✅ Имба: в сети обнаружили мегашпаргалку с самыми полезными нейросетями на все случаи жизни.

Сохраняем самое крутое:
🤩Claude 3.7 Sonnet — мастхев для программистов
🤩Same New — быстрая копия интерфейса сайта
🤩Openrouter — доступ ко всем ИИ
🤩Suno AI — своя музыка с нейросетью

Подпишись и находи для себя крутые нейросети бесплатно: https://t.me/+9ctf35SNV3k0MTBi
04/17/2025, 17:02
t.me/htmlshit/3564
30
69
1.3 k
#инструмент дня

partysocket — это миниатюрная (всего ~2 КБ!) обёртка над WebSocket, которая делает их использование гораздо приятнее.

📦 Что это такое?

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

💬 Как выразился автор:
"A tiny abstraction (like, 2kb) on top of websockets that adds reconnections/buffering/resilience + optional React hooks. Doesn’t even need PartyKit or Cloudflare!"


🚀 Особенности:
- Поддержка в браузере и Node.js
- Нативное API (`onmessage`, send, onopen, и т.д.)
- Работает с любым WebSocket-сервером (не только с PartyKit)
- Встроенные переподключения и буферизация
- Есть React-хуки
- Весит всего около 2 КБ

🛠 Пример:

import { PartySocket } from "partysocket";

const socket = new PartySocket({
host: "example.com",
room: "main-room", // опционально — удобно для namespace'ов
});

socket.addEventListener("message", (evt) => {
console.log("📨", evt.data);
});

socket.send("Hello, world!");


📈 Уже более 100K скачиваний в неделю.

🔗 Подробнее и установка:
https://www.npmjs.com/package/partysocket

Буду пробовать в следующем #проект-е дня.

#websockets
04/17/2025, 14:39
t.me/htmlshit/3563
16
44
1.3 k
#статья дня

Итак, перед тобой задача: поставить заглушку, пока грузится основное изображение.

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

И все такие: «Ну чот...»

Наверное, есть же что-то получше?

Да, есть. LQIP-техники вида, собственно, LQIP, SQIP и BlurHash. Вот, писал тут: https://t.me/htmlshit/2565

Ну или генерация всенаправленного градиента по фото: https://t.me/htmlshit/3517

Но это всё как-то муторно... вот бы что попроще.

И таки есть! Лин Рада — разработчик из Canva — придумал новую технику LQIP, основанную на CSS. Заключается она в кодировании цветных тёмных/светлых участков короткой последовательностью символов.

Ну, типа:





И пример того, что получается, можно посмотреть на иллюстрации.

А сама статья шикарный пример умного использования различного рода координат: https://leanrada.com/notes/css-only-lqip/

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

Конечно, математики там сильно больше, чем я сейчас описал, потому очень рекомендую хотя бы пролистать её.

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

#css #lqip #math
04/17/2025, 09:46
t.me/htmlshit/3562
8
1
1.2 k
«А хватит ли моего английского, чтобы работать за границей?»

Этот вопрос не даёт покоя многим айти- и диджитал-специалистам.
🟠Кто-то не понимает, какой у него сейчас уровень.
🟠Кто-то вроде занимался с репетитором, но не может пройти интервью.
🟠А кто-то просто боится звучать «непрофессионально» — из-за акцента, нехватки словарного запаса и неестественных пауз.

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

📆 24 апреля в 19:00 мск
Ведёт Настя Алексюк — senior-преподаватель AgileFluent, 8 лет в бизнес- и тех-английском, параллельно работает PM в американском стартапе.

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

Вебинар бесплатный и с пользой: ты выйдешь с чётким пониманием, что прокачивать и как.

🎁 А еще всем участникам — бонус: полезные материалы + скидка на занятия в AgileFluent!

Регистрируйся по ссылке вот тут 👉 https://agilefluent.ru/web-240425

Реклама. ООО «Эджайл», ИНН 7810964334, erid: 2VtzqvfboC6
04/16/2025, 17:02
t.me/htmlshit/3561
39
26
1.7 k
#новость дня

Figma зарегистрировала словосочетание Dev Mode на себя!

Никогда такого не было и вот опять.

Кроме шуток, Figma направила официальное письмо компании Lovable, которые разрабатывают визуальную AI IDE, c требованием прекратить называть их средство просмотра сгенерированного исходного кода Dev Mode.

Всего у Figma 13 зарегистрированных торговых марок, кроме Dev Mode там ещё есть, например, Schema и слоган "Nothing great is made alone". И слово Config!

Подали они заявку летом 2023, а получили одобрение в ноябре 2024.

Словосочетание Dev Mode, хоть и подразумевается во многих приложениях, до этого момента никем не регистрировалсь и, кстати, нигде в общем-то кроме Figma напрямую и не применяется.

Хотя тут с полей сообщают, что Atlassian применяла ещё в 2021.

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

P. S. Надо бы проверить Google DevTools :)

#trademark #devmode
04/15/2025, 21:09
t.me/htmlshit/3560
14
12
1.4 k
#такое дня

Очень неожиданная информация всплыла в комментариях к одному из предыдущих постов.

Теперь в Chrome дефолтные стили для тегов b и strong не bold, а... bolder!

Пруф: https://github.com/chromium/chromium/commit/0f34660cbc02352d5deabbf135c4b07303979df5

Судя по дате изменения, это как раз улетело в последнюю (135) версию Chromium и Chrome, соответственно.

Казалось бы, какое мелкое изменение, но уже принесло людям проблем :) А главное, посмотрите сколько тестов!

Да-да, тестов там сильно больше, чем в твоём PR, который меняет вообще всё в проекте.

Ладно, а что кроется-то за этим изменением?

А кроется имплементация последних изменений в спеке: https://html.spec.whatwg.org/multipage/rendering.html#phrasing-content-3

Ведь задача strong и b — выделить текст во что бы то ни стало. А если он уже полужирный? То-то и оно.

Или ещё хуже, глядите, на span стоит font-weight: 100: https://codepen.io/alinaki/pen/XJJrEPo

Видите отличия? Я — нет.

Ладно, кроме шуток, объяснение на MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#meaning_of_relative_weights

Если 700 на родителе — то 800 на strong/b и так далее.

Чудны дела твои, HTML. Упёрлось же кому-то...

Да, кстати, ещё существует lighter :)

P. S. Safari всё ещё использует bold, а Firefox — тоже bolder. Но когда конкретно Firefox внёс это изменение я пока не знаю.

P. P. S. normalize.css тоже всё приводит к bolder.

#html #bolder #bold
04/15/2025, 09:14
t.me/htmlshit/3559
21
1
1.4 k
В новом выпуске yet another podcast обсуждают, как и зачем Яндекс нанимает стажёров круглый год. Почему компания делает на это такую большую ставку, что ценят начинающие спецы и как олимпиадное программирование может помочь при старте карьеры.

Говорят не только про задачи и процессы, но и про подход — как стажёры становятся полноценной частью команды, получают офферы, иногда даже отложенные, и переезжают на лето в «Айтиобщагу». Делятся цифрами (в 2025 году хотят нанять 2800 человек, в прошлом — было 2300) и объясняют, чем стажёры лучше «готовых» специалистов. Спойлер: стажёры растут быстрее, так как приходят в компанию с «чистого листа».

Из интересного: самые популярные направления для стажировки — бэкенд, ML, аналитика и Data Science, причём спрос на машинное обучение в этом году вырос в полтора раза.

Выпуск будет полезен тем, кто рассматривает стажировку, только готовится к первой работе или вообще думает, стоит ли идти в ИТ. А для тех, кто готов систематизировать скиллы в определенном направлении уже доступны Летние школы. Ежегодные интенсивы начнутся летом, но подать заявку нужно уже сейчас.
04/14/2025, 17:38
t.me/htmlshit/3558
21
27
1.4 k
#статья дня

Когда-то давно я в качестве демо накладывания ячеек грида друг на друга сделал табло аэропорта: https://t.me/htmlshit/2814

Очень схематичное, конечно, но сделать что-то более симпатичное руки не дошли.

Задо дошли у всем известного нам Jhey!

У него получилось трёхмерное табло, которое выглядит и ведёт себя как настоящее. И, более того, он выпустил прекрасную статью со всеми аспектами имплементации!

От построения модели ячейки, с лепестками и осью, до анимации этой модели: https://craftofui.substack.com/p/time-travel-with-javascript

И, более того, анимация выполнена в двух вариантах: GSAP и WAAPI aka Web Animation API, а это значит, можно обойтись без зависимостей вообще.

Горячая рекомендация, в общем.

#css #gsap #waapi
04/14/2025, 09:56
t.me/htmlshit/3557
11
20
1.1 k
#фишка дня

Как контролировать прозрачность фоновых изображений?

Первое, что приходит в голову: «Никак».

Точнее, как — никак. Можно сымитировать фоновую картинку через наложение фона на псевдоэлемент или любой другой элемент вообще, и уже его прозрачность и контролировать.

Но может, как-то ещё?

И таки да!


background-image: url(image.jpg);
background-color: rgba(255, 255, 255,0.2);
background-blend-mode: lighten;


или


background-image: url(image.jpg);
background-color: rgba(0, 0, 0,0.2);
background-blend-mode: darken;


...в зависимости от нужного эффекта.

А в случае с несколькими фонами одновременно, background-blend-mode позволяет делать мультиэкспозицию, как на иллюстрации.

Собственно, пример с lighten: https://codepen.io/alinaki/pen/dPyxdPe

P. S. а в Safari можно через функцию cross-fade.

#css #blend
04/12/2025, 20:33
t.me/htmlshit/3556
25
2
1.2 k
78.mp4
Как ворваться в IT и начать зарабатывать на вёрстке с нуля?

Проведи 1 неделю на бесплатном интенсиве по вёрстке сайтов с куратором и получи:
- Реальный опыт;
- Сайт в портфолио;
- Пошаговый план выхода на доход от 100 000₽/мес.

За 7 дней ты:
- Сверстаешь современный лендинг (HTML + CSS);
- Добавишь интерактив на JavaScript;
- Соберёшь проект на Angular;
- Свяжешь сайт с backend'ом и выложишь его в сеть;
- Узнаешь, как использовать ChatGPT и Giga в работе;
- Получишь пошаговый план по поиску заказов и работы.

🎁 Бонус: гайд «Как пройти собеседование в IT-компанию, если у тебя нет опыта».

🕒 Старт уже завтра!

👉 Успей записаться — и к лету выйдешь на стабильный доход в IT.
04/12/2025, 10:01
t.me/htmlshit/3555
16
6
1.2 k
#статья дня

7 апреля 2025 года системе контроля версий Git исполнилось 20 лет!

По этому поводу GitHub (а кто же ещё) провели с автором — Линусом Торвальдсом — интервью.

Выдержки:

– Он не хотел писать систему контроля версий — это казалось скучным. Но BitKeeper перестал быть вариантом, и пришлось самому.

– У него не было «плана» или видения. Всё делал на ходу, по мере необходимости. Даже не знал, насколько всё это станет популярным.

– Git задумывался не как «инструмент для всех», а как «инструмент для меня». И, по мнению Линуса, именно в этом причина успеха.

– Его подход: «не делать предсказаний», особенно в open source. Он сам не ожидал, что Git проживёт 20 лет.

– Команду git bisect называет «одной из умных штук», но уклоняется от выбора любимой команды: «это как выбирать любимого ребёнка».

А прочитать целиком рекомендую тут: https://github.blog/open-source/git/git-turns-20-a-qa-with-linus-torvalds/

Кстати, интервью скоро обещают выложить в формате видео!

#git #anniversary
04/11/2025, 18:33
t.me/htmlshit/3554
18
8
1.2 k
С начала 2000-х браузеры предоставляли пользователям удобную возможность видеть, какие ссылки они уже посещали, используя CSS-псевдокласс :visited.

Однако это удобство обернулось уязвимостью.

С помощью анализа стилей отрисованных ссылок можно было выяснить, какие страницы были посещены, что открывало путь для скрытых атак. Эта техника называется Visited Link Sniffing.

Как браузеры защищали от этого?

Для борьбы с такой угрозой браузеры внедряли различные меры:

✅ Ограничение доступа к вычисляемым стилям для :visited
✅ Игнорирование некоторых стилей вообще

Но эти подходы оставались полумерами, так как информация о посещённых ссылках оставалась глобальной, и её всё ещё можно было использовать для скрытого отслеживания. Например, буквально считая миллисекунды парсинга стилей: https://codepen.io/alinaki/pen/ogNrVoj

Примечание: это будет работать только на Firefox и Safari и только на достаточно старых машинах.

Что теперь предлагает Google?

В Chrome 123 появился новый подход — Partitioned Visited Links History. Теперь ссылки считаются посещёнными только в пределах определённого контекста. Например, для одного сайта или даже внутри конкретного iframe.

Это значит:

✅ Один сайт не будет знать, какие страницы вы посетили на другом.
✅ История посещений разделена на изолированные части (partition'ы).

Псевдокласс :visited больше не работает глобально — он зависит от контекста.

Собственно, смотрим на иллюстрацию: пока вы не посетили ссылку на каком-то сайте, она подсвечиваться не будет. А вот в каком-нибудь поисковике или соцсети, куда вы заходите постоянно — будет. Что буквально нивелирует суть атаки.

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

👉 Подробности:
https://github.com/explainers-by-googlers/Partitioning-visited-links-history

#history #security #safety
04/11/2025, 09:40
t.me/htmlshit/3553
5
2
1.3 k
⚡️Поступите в магистратуру ИТМО без экзамена с помощью хакатона DevWeek!

Вас ждут:
✅ Реальные проекты от Газпром нефти, Самолета, Альфа банка и YADRO
✅ Менторы — специалисты из компаний-партнеров
✅ Лекции практиков по разработке ПО и управлению проектами
✅ Призы от партнеров
✅ Шанс стать студентом магистратуры ИТМО без экзаменов

🔗 Узнать больше и подать заявку можно здесь:


Поторопитесь, дедлайн для регистрации – 20 апреля

Реклама. Университет ИТМО ИНН:7813045547
04/10/2025, 16:01
t.me/htmlshit/3552
21
16
1.2 k
#заметка дня

Вчерашний день начался с лёгкой тряски из-за неспособности некоторых разработчиков правильно обрабатывать такую простую вещь, как аналитику ссылок:

Каждый веб-разработчик, который блокирует открытие ссылки в новой вкладке по нажатию Ctrl/Cmd или средней кнопкой мышки — мой личный враг. Этому нет ни единого разумного объяснения.

Собственно, код вы видите на иллюстрации. Прекрасно видно, что поведение по-умолчанию уничтожено, взамен ничего не предложено. При этом я всё ещё могу кликнуть по ссылке правой кнопкой мыши и выбрать "Открыть в новой вкладке".

Спасибо хотя бы на этом.

Итак, но намерения-то ясны: хотят получить аналитику. HSCO — это неймспейс компании, а DataLayer это — ну кто бы мог подумать — буквально Google Analytics gtag.

Впрочем, эту же аналитику они теряют, если я кликаю правой кнопкой мыши.

Чем же заменить подобное? Ну, во-первых, а надо ли вам это делать? Чем проход по ссылке и событие "select item" там отличается от непосредственного клика? Ведь чтение referrer никто не отменял. И, очевидно, для SPA и островных приложений это вообще проблемой не является.

Но если очень надо собирать данные именно в момент клика куда-то на странице, можно воспользоваться navigator.sendBeacon().

Да, нужно будет настроить Measurement API в Google Analytics, но в итоге всё сведётся к простой функции:


function trackEventWithBeacon(eventName, params = {}) {
const measurementId = 'G-XXXXXXX'; // ← замени на свой GA4 ID
const apiSecret = 'YOUR_API_SECRET'; // ← замени на свой API Secret
const clientId = getClientId(); // читаем из _ga cookie

const payload = {
client_id: clientId,
events: [{
name: eventName,
params
}]
};

const url = `https://www.google-analytics.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`;
const blob = new Blob([JSON.stringify(payload)], { type: 'application/json' });

navigator.sendBeacon(url, blob);
}


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

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

В общем, вряд ли был какой-то злой умысел, скорее, банальный skill issue. Но честное слово, не надо так. Не ломайте дефолтное поведение элементов, пожалуйста.

#analytics #js
04/10/2025, 10:57
t.me/htmlshit/3551
5
1
1.3 k
Многие тимлиды рано или поздно сталкиваются с одними и теми же вопросами:
— Как наладить доверие в команде?
— Почему разработчики не всегда говорят о проблемах вовремя?
— Как замечать, когда человек выгорает, если он всё время “окей”?
— И как вообще не теряться в рутине и продолжать развивать людей?

Часто решение начинается с простой регулярной практики — 1-1 встреч. Но и тут возникают трудности:
— Зачем они, если всё и так работает?
— О чём говорить, кроме задач?
— Как не скатиться в формальность или, наоборот, в дружескую болтовню?

1-1 — это не про контроль. Это про внимание. К человеку, к тому, что важно, но не видно в таск-трекере.

Разобраться в этом можно на вебинаре «1-1 — победа или ничья?», где вместе с HR BP из Selectel Ириной Лаксовой обсудим:

— зачем эти встречи нужны не только лидеру, но и каждому участнику команды;
— как их проводить осмысленно;
— и какие темы действительно стоит поднимать.

Формат спокойный, без лозунгов. В фокусе — коммуникация и то, как с её помощью сделать команду сильнее.

Вебинар бесплатный. Будет полезно и тем, кто уже практикует 1-1, и тем, кто пока только к ним приглядывается.

Зарегистрироваться на вебинар
04/09/2025, 20:45
t.me/htmlshit/3550
8
4
1.3 k
дополнительные выводы:
- контрактная разработка позволяет уменьшить риски
- динамические схемы валидации с бэкэнда позволяют сохранить источник истины
- стандартизация обработки ошибок всегда дополнит контекст пользователя и избавит службу поддержку от дополнительной нагрузки
- в случае ошибки всегда следует предлагать посмотреть рекомендации по заполнению, а не оставлять пользователя наедине с иконками i в полях ввода (да-да, я тоже редко кликаю на них чтобы посмотреть попап с каким-то текстом)
04/09/2025, 18:04
t.me/htmlshit/3549
23
16
1.2 k
#история дня от подписчика

Сегодня столкнулся с частым огрехом - неявная обработка серверных ошибок.

У альфа банка это безусловное отображение блока с ошибкой вместо кнопки "Оплатить".

А теперь моя история.

Нужно было оплатить таможенную пошлину по реквизитам из квитанции.

Заполняю все поля и обязательное КБК (код бюджетной классификации).

Однако, как обыватель, не знал о том что обязательно к заполнению поле УИН (уникальный идентификатор начисления) и, если не указано в квитанции, ему можно смело присвоить значение 0.

Важное дополнение - пока не заполнено или неправильно заполнено поле УИН, апи альфа банка всегда будет присылать ошибку и клиент никогда не узнает что он сделал не так.

На UI никакой валидации с подсветкой полей нет и догадаться можно только... правильно, во вкладке Network консоли разработчика.

Иду смотреть запросы с ошибкой и вижу запрос с 500-м статусом, а там чудо:


{
"errorId": "afb38dc005f03ee3",
"application": "multistep-router-api",
"errorCode": "INVALID_UIN_FIELD",
"level": "ERROR",
"messages": {
"ru": "УИН или код НПА введены с ошибкой. Проверьте данные ещё раз"
},
"errorPath": "INVALID_UIN_FIELD"
}


Лишь спустя час общения со службой поддержки нашлась прекрасная девушка, которая правильно ответила на вопрос по УИН (где искать и что с ним делать) за 3 минуты.

Таким образом, ошибка UX может стоить компании очень дорого, так как функционал исключительно "бизнесовый".

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

Такой опыт позволяет со стороны посмотреть на работу с ошибками и проверить как это происходит в поддерживаемых приложениях.
04/09/2025, 16:45
t.me/htmlshit/3546
04/09/2025, 16:45
t.me/htmlshit/3548
04/09/2025, 16:45
t.me/htmlshit/3547
12
7
1.3 k
Выиграй стажировку в IT и стартуй в карьере!

Pulpy и SuperJob запустили проект “Карьера шаг за шагом”. Его участники могут выиграть индивидуальную карьерную консультацию и стажировку в топовых компаниях.

У каждого направления (маркетинг, ИТ, бизнес, большие данные) есть свой эксперт. В вопросах ИТ своим опытом поделилась Наталия Давыдова, разработчица и автор канала “Наташа пишет про IT”. На сайте вы найдете видео-интервью и гайд: там много дельных советов и личный опыт Наташи по поиску работы.

Что делать?
Зайди на сайт, посмотри видео и скачай гайд
Отправь резюме — первым 200 участникам эксперты SuperJob бесплатно дадут обратную связь!

В мае эксперты выберут нескольких ребят, которых пригласят к себе на карьерную консультацию. А самый сильный участник получит стажировку в ИТ-департаменте SuperJob.

🔗 Ссылка на проект

Реклама АО “Мултон”, ИНН 7810249327, erid: 2W5zFK9uByA


#карьера #стажировка #IT #вайб
04/09/2025, 14:43
t.me/htmlshit/3545
30
47
2.0 k
#фишка дня

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

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

Так вот, вашему вниманию:

touch-action: manipulation;

...и его друзья!

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

Но также!

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

Всё это тоже можно! Да ещё и в разных комбинациях. Например:

#element {
touch-action: pan-right pinch-zoom;
}

...разрешит скроллить направо и зумить, но отключит обработка тапов и вертикального скролла.

Статья на CSS-Tricks по теме: https://css-tricks.com/almanac/properties/t/touch-action/

Демо оттуда же: https://codepen.io/team/css-tricks/pen/PXbPXL

Кстати, на мобильном сафари (а значит, и в хроме на iOS) присутствует офигенный баг!

При указании touch-action: pan-x; элемент можно скроллить только по вертикали, но пока он движется по инерции, его можно и горизонтально скроллить. После чего скролл успешно в последнем положении блокируется вновь.

Apple как обычно, конечно

В общем, полезно.

#css #touch
04/09/2025, 09:35
t.me/htmlshit/3544
8
6
1.4 k
Яндекс снова запускает Баттл вузов — турнир по программированию, где можно выиграть 1 млн рублей!

В этом году участвовать смогут не только студенты и выпускники вузов, но и 11-классники. Опыт в программировании не так важен, главное — ваша страсть к кодингу.

Победителей ждет:

— 1 млн. рублей
— кубок чемпиона
— набор умных устройств для 30 финалистов

200 лучших участников выйдут в финал, который пройдет на фесте Young Con.

Решайте задачи быстрее соперников и станьте легендой своего вуза! Первый этап стартует в онлайне 14 мая, но зарегистрироваться лучше уже сейчас!
04/08/2025, 19:53
t.me/htmlshit/3543
25
51
1.3 k
#фишка дня

Я долгое время не понимал, нафига нужен background-attachment: fixed;. Но потом в моду вошли скелетоны для загрузки (терпеть их не могу), и существование fixed стало чуть более понятным.

Но тут же появилась такая штука, как CSS-переменные... Это привело к тому, что буквально парой строк JS можно установить координаты этому самому фону и практически бесплатно получить эффект "фонарика". Вот демо от DX-инженера Vercel Джея: https://codepen.io/alinaki/pen/poYyNbB

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

Теперь давайте перейдём к эффекту посложнее, на видео. Там подключен реакт, чтобы можно было добавлять карточки и управлять параметрами эффекта.

Впрочем, хоть сам эффект и кажется сложным, реализация его хорошо раскладывается на шаги: https://codepen.io/alinaki/pen/jOJqVmR

1. Применяем всё тот же радиальный градиент для "фонарика".
2. Цвета меняем через функцию hsl, передавая в неё градусы поворота цветового колеса:

[data-glow] {
background-image: radial-gradient(
var(--spotlight-size) var(--spotlight-size) at
calc(var(--x, 0) * 1px)
calc(var(--y, 0) * 1px),
hsl(var(--hue) 100% 70% / 0.25), transparent
);
background-attachment: fixed;
}

3. Накладываем маску из псевтоэлементов так, чтобы подсветить границу чуть сильнее:


mask:
linear-gradient(transparent, transparent),
linear-gradient(white, white);
mask-clip: padding-box, border-box;
mask-composite: intersect;

4. Вы великолепны.

#css #mask #var #бородач
04/08/2025, 15:35
t.me/htmlshit/3542
📥 Разработчики, больше никаких ложных срабатываний при анализе сторонних библиотек. Positive Technologies выпустила новую версию сканера PT Application Inspector.

🌀 В релизе объединили технологии анализа сторонних компонентов и статического анализа кода приложения — в продукте появились возможности анализа достижимости и поиска транзитивных зависимостей.

Результаты тестирования новой версии на 193 открытых проектах на GitHub, использующих уязвимые компоненты, впечатляют: количество ложноположительных срабатываний снизилось на 98–100%. Теперь можно сэкономить время на анализе срабатываний и сосредоточиться на исправлении реальных дефектов безопасности.

❌ Надоело копаться в ложных срабатываниях? Оставьте заявку на тестирование PT Application Inspector.
04/08/2025, 14:02
t.me/htmlshit/3541
34
46
1.4 k
#заметка дня

Как мы все знаем, в JavaScript есть две формы «пустоты»: undefined и null.

Но почти весь современный фронтенд давно выбрал сторону.

null — это ошибка на миллиард долларов, о которой пожалел даже его создатель, Тони Хоар. Он добавляет путаницу, ломает API и заставляет писать лишние проверки.

Почему null — плохая идея:
Разные API возвращают то null, то undefined, то оба.

Это неясно, это ошибки.

✅ TypeScript-гайд от Microsoft прямо говорит: используйте undefined, избегайте null.

✅ В TSLint null запрещён по умолчанию (`no-null-keyword`).

✅ Правила ESLint Unicorn (да, название неслучайное) — тоже пропагандируют борьбу с null в пользу чистого, предсказуемого кода.

✅ В крупных экосистемах, например, как у Prisma, null создаёт баги и недопонимание в API (issue #572)

✅ undefined — поведение по умолчанию в JS для необъявленных свойств и пустых объектов.

✅ undefined выигрывает даже в JSON. Когда ты сериализуешь данные:

null остаётся в объекте:


{ "a": null }


а undefined просто исчезает:


{ "a": undefined } → { }


В реальных системах это даёт выигрыш в размере и читаемости. Пример из продакшена: объект с миллионом null весил 13.9 MB, а с undefined — всего 21 байт. И если ты работаешь с Node.js и хорошо контролируешь свои API — undefined тебе только на руку.

❌ Да, из-за того, что множество систем до сих пор оперирует null, и даже DOM API возвратит null при отсутствии элемента (ноды), выбор становится не настолько простым. К счастью, мы можем использовать optional chaining (?.) и nullish coalescing (??) чтобы снизить вероятность конфуза.

Кстати, даже столь любимый мной Effector ещё не так давно пропагандировал null для пустых сторов, но с недавнего времени разрешил undefined (в своей манере, там сложная концепция).

Итак, null — это рудимент. Он создаёт больше проблем, чем решает. undefined уже делает всё, что нужно — чище, предсказуемей и легче.

Пора выбрать сторону 🦄

P. S. человек, который заставил меня принять сторону сейчас, наверное, сидит и хихикает. Но в целом, единственное, что у меня есть в защиту null — это наш бакенд на PHP и MySQL 🤷

#js #ts #eslint #null
04/08/2025, 10:22
t.me/htmlshit/3540
29
10
1.3 k
#ссылка дня

Я исчезающе мало пишу о Vue.js, потому что в своей жизни использовал его лишь в одном проекте.

Поэтому, если кто-то хочет присоединиться и периодически писать в канал что-то о Vue.js — милости просим.

Тем не менее, нельзя пройти мимо ставшего поулярным в последние несколько лет тренда State of...

И сегодня это — кто бы мог подумать — State of Vue.js Report 2025.

1. Почти все, кто попробовал Vue.js, остаются с ним: в одном из отчётов сообщалось, что 96% разработчиков, использующих Vue.js, планируют продолжать его использовать в будущем. Людям нравится!

2. Документация Vue.js получила высокую оценку: 60% опрошенных отметили качество документации как одно из главных преимуществ фреймворка. Тут, кстати, да. До появления новой версии, документация по React отставала от Vue.js на световые десятилетия.

3. Широкая интеграция с различными бэкенд-технологиями: Vue.js часто используется вместе с PHP (53% случаев) и Node.js (45% случаев). Это, кстати, забавно. У нас все internal tools — на Vue и пишутся бакенд-разработчиками.

4. Быстрый рост популярности: в 2022 году, после того как Vue 3.0 стал стандартом, количество загрузок npm увеличилось в 4 раза, достигнув в среднем 800 000 в неделю. Ну, заслуженно.

5. Постоянное развитие экосистемы: в 2024 году были отмечены значительные улучшения в инструментах разработки, таких как официальное расширение для VS Code и DevTools для Vue и Nuxt, что значительно улучшило DX.

State of Vue — это не просто отчёт. Это способ собрать обратную связь, понять, как меняются потребности разработчиков, и построить будущее фреймворка вместе с сообществом. Именно благодаря таким инициативам Vue остаётся живым, активно развивающимся проектом.

Читая весь отчёт, можно, теоретически, даже узнать что-то новое! Например, какой нынче самый модный способ для менеджмента стейта.

В общем, на самом деле, такие отчёты — это прекрасный способ уложить состояние индустрии в голову.

#vuejs #stateof
04/07/2025, 10:23
t.me/htmlshit/3539
15
15
1.2 k
#заметка дня

Не знаю, как вас, но меня очень раздражает то, что в React Router состоянием скролла надо управлять самостоятельно.

Перемещаешься по роутам, а скролл на месте остаётся. Ну типа, што.

К счастью, решение что для v5 React Router, что для v6 одинаковое:


function ScrollToTop() {
const { pathname } = useLocation();

useLayoutEffect(() => {
document.documentElement.scrollTo(0, 0);
}, [pathname]);

return null;
}


И потом вставляете его в контекст роутинга:



...





Но вот я это всё по привычке написал и решил всё-таки посмотреть документацию. Ну бывает. И вот что там: https://reactrouter.com/en/main/components/scroll-restoration

Восстановление скролла теперь поставляется из коробки! И умеет гораздо больше, чем просто скроллить наверх. Правда, требует изменения корневого роутера. Благо, это несложно.

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

По-моему, очень круто. И хорошо, что решение официальное.

#react #router #бородач
04/05/2025, 12:09
t.me/htmlshit/3538
4
3
1.3 k
Станьте востребованным специалистом в SE, ML, CS или биоинформатике в магистратуре института прикладных компьютерных наук ИТМО!

Весь апрель проходят дни открытых дверей программ, среди которых корпоративные магистратуры Яндекса, VK, Альфа Банка, YADRO, Самолет. Преподаватели – разработчики IT- компаний. А еще есть возможность учиться онлайн и много проектной работы на каждой программе.

Вас ждет:
✅ Разбор особенностей поступления в 2025 году
✅ Презентация всех программ магистратуры института
✅ Ответы от руководителей, менеджеров и студентов программ на ваши вопросы

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

Реклама. Университет ИТМО ИНН:7813045547
04/04/2025, 17:33
t.me/htmlshit/3537
20
20
1.2 k
#статья дня

Что делать, если ну очень хочется выпендриться, но времена кейгенов и демосцены ты уже не застал, или вообще — начать с чего-то надо?

И желательно бы при этом не сильно бесить посетителей и пользователей твоих проектов. То бишь, выпендриваться для своих.

И решение на самом деле очевидно! Засирать консоль браузера!

Ну серьёзно, если человек туда попёрся — наверное, он что-то хотел увидеть? Так давайте предоставим такое удовольствие!

А секрет прост: консоль браузера поддерживает CSS. А значит, можно сделать всё, что угодно. Включая анимирование SVG. Или даже буквально анимированные SVG.

То есть представьте, что наше сообщение — это некий блок. В него можно вставить фоновый SVG, как анимированный, так и обычный. А уже в SVG можно писать свои стили в теге style.

Какой-то глитч на бесконечные стили. Вот бы с деньгами так.

Как-то так:

console.info(
'%c ',
`padding-left:750px;padding-top:200px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 750 200'%3E%3Cstyle%3E text %7B font-family: sans-serif; font-weight: 100; fill: %23d8eaff; %7D %23stop1 %7B animation: recolor 40s linear infinite alternate %7D %23stop2 %7B animation: recolor 40s -32s linear infinite alternate %7D @keyframes recolor %7B 0%25 %7B stop-color: %23388bee; %7D 20%25 %7B stop-color: %2324c6dc; %7D 40%25 %7B stop-color: %23af74fd; %7D 60%25 %7B stop-color: %23c020d9; %7D 80%25 %7B stop-color: %23514a9d; %7D 100%25 %7B stop-color: %23053ece; %7D %7D %3C/style%3E%3Cdefs%3E%3ClinearGradient id='grad'%3E%3Cstop id='stop1' offset='0%25' stop-color='%23388bee'%3E%3C/stop%3E%3Cstop id='stop2' offset='100%25' stop-color='%23514a9d'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='750' height='500' fill='url(%23grad)'%3E%3C/rect%3E%3Ctext text-anchor='end' font-size='50' x='725' y='125'%3E thanks for %3C/text%3E%3Ctext text-anchor='end' font-size='50' x='725' y='175'%3E stopping by %3C/text%3E%3C/svg%3E")`
);


Вы любите простыню кода в сообщениях, я знаю :)

Статья на тему: https://frontendmasters.com/blog/console-delight/

Демо, сконвертировал из обычного кодпена: https://codepen.io/alinaki/pen/BaXPmoV

Естественно, можно просто на файл сослаться, не обязательно столько кода упихивать :)

Если хотите делать своё, вам пригодится конвертер от Йоксель: https://yoksel.github.io/url-encoder/

#css #svg #devtools #console #fun #бородач
04/04/2025, 12:46
t.me/htmlshit/3536
17
5
1.3 k
#красивое дня

Microsoft — а точнее, Билл Гейтс собственной персоной — опубликовали исходный код Altair BASIC — своей первой программы!

4 апреля 1975 года Билл Гейтс и Пол Аллен основали Microsoft, а их первым продуктом стал интерпретатор BASIC для компьютера Altair 8800.

Эта программа стала ключевым моментом в истории персональных компьютеров: она позволяла энтузиастам писать код на понятном языке, а не программировать в машинных кодах.

Проект появился благодаря объявлению в журнале Popular Electronics, которое вдохновило Гейтса и Аллена написать интерпретатор, ещё даже не имея самого компьютера. Код был дописан в буквальном смысле в полёте в Альбукерке, где находилась компания MITS, производитель Altair 8800. Там же состоялась и первая демонстрация программы, которая, к счастью, заработала сразу.

В честь 50-летия Microsoft Билл Гейтс решил поделиться этим историческим кодом.

Эффекты на тексте, конечно, потрясающие. Надо бы потырить :)

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

Но фиг бы с ним, повозюкайте и потыкайте в блоки текста мышкой! Красота же.

Да и сам процесс создания Altair BASIC хорошо задокументирован, и даже телефильм «Пираты Кремниевой долины» отлично передаёт атмосферу той эпохи, так что этот проект можно просто рассматривать как эстетический жест, дань уважения истории.

Визуализация и статья: https://www.gatesnotes.com/microsoft-original-source-code

Ах, да. Сами исходники даны в, простите, PDF! Но это даже забавно.

#microsoft
04/04/2025, 07:33
t.me/htmlshit/3535
04/03/2025, 18:01
t.me/htmlshit/3532
04/03/2025, 18:01
t.me/htmlshit/3531
04/03/2025, 18:01
t.me/htmlshit/3527
04/03/2025, 18:01
t.me/htmlshit/3529
04/03/2025, 18:01
t.me/htmlshit/3533
13
1
1.3 k
Насыщенная программа на 12 часов, 5 треков докладов и тусовка с экспертами в IT

Приглашаем на Яндекс Яндекс Dev Day&Night — конференцию о технологиях для мобильных и бэкенд-разработчиков, продактов и аналитиков. Она пройдет в Москве уже 19 апреля.

В программе 5 треков докладов, множество активностей и тусовка до 2 ночи со знакомствами, коктейлями, диджеями и дискуссиями не под запись.

В карточках лишь некоторые из докладов, подробная программа и регистрация на сайте!

Реклама. Рекламодатель: ООО «Яндекс.Такси» ИНН 7704340310
04/03/2025, 18:01
t.me/htmlshit/3526
04/03/2025, 18:01
t.me/htmlshit/3530
04/03/2025, 18:01
t.me/htmlshit/3534
04/03/2025, 18:01
t.me/htmlshit/3528
28
23
1.5 k
#фишка дня

Поменяли какую-то настройку в VS Code, и теперь всё сломалось?

Вообще не проблема! Вводим в поиск @modified и — вуаля — видим все настройки, отличные от дефолтных!

Да, вторым вариантом, конечно же, будет нажать иконку с переворачиванием листа и, буквально, увидеть изнанку настроек — JSON-файл. Тоже отличный вариант.

#vscode #settings #json
04/03/2025, 11:28
t.me/htmlshit/3525
11
21
1.4 k
#новость дня

Я терпел с 26 марта! Потому что именно 26 марта Google должны были объявить о запуске Google Chrome 135, в котором поддержка кастомизации нативного select перестаёт быть экспериментальной!

Но 26 марта, несмотря на помпу новости, они раскатили обновление лишь на малый процент пользователей.

И вот, наконец, долетело и мне! Срочно тестирую: https://developer.chrome.com/blog/a-customizable-select

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

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

Впрочем, на этом преимущества заканчиваются.

А вот в новом селекте можно даже HTML писать в option!

Есть даже дока на MDN: https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Forms/Customizable_select

Поддерживается, правда, пока только в Chrome, потому что реализован новый селект на CSS anchor positioning API.

Крайне рекомендую сначала с этим API ознакомиться, потому что ни одна из демок гугла не умеет правильно определять границы экрана :)

Мы в @htmlshitchat попробовали собрать демо: https://jsbin.com/yizawexeyi/edit?html,css,output

Ну такое, если честно. Могли бы хоть для презентации постараться и применить position-try на выпадающий список.

А, и да. В неподдерживаемых браузерах селект просто фолбэчится до нативного. И все счастливы.

Кроме заказчиков.

#select #custom
04/02/2025, 16:09
t.me/htmlshit/3524
15
3
1.3 k
🧠 Коуч, которая раньше искала баги в коде, а теперь помогает находить баги в мышлении

Хочу дать рекомендацию, которая не про код, а про то, что стоит за ним.

Наталья Голубева — коуч ICF и в прошлом QA-инженер. Она помогает тем, кто застрял в карьерных или личных задачах.

К ней приходят айтишники, которые:
– хотят уйти из найма, но боятся;
– выгорели, но продолжают тащить проекты на силе воли;
– мечтают о чём-то своём, но саботируют;
– сомневаются в себе, несмотря на 10+ лет опыта.

Если чувствуешь, что сам не вывозишь, мысли закольцевались, настроение падает с ошибкой 500, а понимание, что делать — с ошибкой 404, рекомендую попробовать коучинг с Натальей.

Также она ведёт свой канал 👉 @golubeva_online👈, где делится постами и заметками о мышлении. Например, её посты:

На чём на самом деле держится ваша сила воли?
Как найти нужный ответ внутри себя?
Всё равно всё будет через ЖОПП

Подпишись, чтобы не потерять полезный контакт!

Реклама. О рекламодателе
04/02/2025, 09:01
t.me/htmlshit/3523
201
5
1.5 k
Не ожидал, что телега не останется в стороне от 1 апреля.

Вы уже видели эту офигительную анимацию лайка?

#1апреля
04/01/2025, 09:00
t.me/htmlshit/3522
54
44
1.5 k
#фишка дня

Применяя position: sticky к заголовку таблицы, мы получам прекрасную и понятную реализацию прилипшего заголовка.

Вот только есть одна проблема: последняя строка таблицы при скролле скрывается под этим самым заголовком и выглядит это, ну, странно. Особенно в случае, когда в таблице не просто текст, а условия сравнения, изображения и так далее.

А решение простое!

Добавляем margin-bottom на thead размером во всю высоту строки:


margin-bottom: calc(1lh + 20px);


Обратите внимание, 1lh — это буквально единица измерения, позволяющая обратиться к значению интерлиньяжа, aka высоте строки. Ну а складывать удавов с попугаями мы умели всегда.

Да, совсем не очевидно, зато выглядит таблица теперь бомбически: https://codepen.io/alinaki/pen/JojeGMY?editors=0100

#table #sticky #position
03/31/2025, 14:30
t.me/htmlshit/3521
03/30/2025, 14:51
t.me/htmlshit/3520
36
3
1.5 k
В айти давно поменялась философия рабочей среды. Спецы выбирают место работы не по формальным критериям, а по ощущению — «моё/не моё». То есть это не про «привлечение талантов» корпоративными методами, а про ценности, которые мэтчатся с личными.

Яндекс на фестиваль New Star Camp в горах Сочи перенес лучшие практики из своих офисов в три разные зоны. Они все про простые, но очень важные идеи:
— доступность — любой гость попробовать себя в роли сотрудника и перенести свою фотографию на большой «бейдж», а еще потестировать бенефиты сотрудников, получить приглашения на мероприятия или сделать кастомный мерч
— активности — в отдельном селфбуст-пространстве проходили воркшопы, дискуссии про ИИ и даже D&D игры
— атмосфера — уютная терраса в стиле офисных крыш компании, где можно взять чай, послушать музыкальные вечера, и просто неформально пообщаться

Выглядело это как естественное продолжение фестиваля. Когда компании становятся не работодателем, а местом для единомышленников — это совершенно другой уровень вовлеченности.
03/30/2025, 14:51
t.me/htmlshit/3518
03/30/2025, 14:51
t.me/htmlshit/3519
10
29
1.3 k
#инструмент дня

Дизайнеры в последнее время очень полюбили градиенты. Особенно ненаправленные.

Градиенты как элемент оформления. Градиенты как плейсхолдеры. Градиенты как идея.

И вот вроде есть у нас продукты, исповедующие идеологию LQIP (Low Quality Image Preview), о которых я писал не так давно, но многим этого мало и охота точной настройки. Особенно если дело касается mesh-градиентов (по сетке, или, проще говоря, ненаправленных).

И тут нашёлся такой инструмент для генерации и настройки градиента по фото! Буквально, так и называется: https://photogradient.com/

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

Но для нагруженного проекта я предпочту LQIP или SQIP, ссылку на которые дал выше.

#gradient #tool #mesh #бородач
03/29/2025, 09:44
t.me/htmlshit/3517
17
15
1.2 k
#инструмент дня

Охренеть какая штука!

https://react-explorer.com/

Это обозреватель зависимостей. Я бы даже сказал, созвездия завимимостей и сейчас вы поймёте, почему.

Потому что помимо простого дерева, которое в целом умеет строить кто угодно, тут имеется мини-карта!

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

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

Проект пока не открыт, но находится в открытом тестировании.

#react #analyze #dependencies
03/27/2025, 10:34
t.me/htmlshit/3516
7
9
1.3 k
#видео дня

Прямо сейчас идёт трансляция Epic Web Conf 2025. Конкретно в этот момент — рассказ об фронтенд-инфраструктуре компании ByteDance (стоящей за TikTok). А именно, о RSpack (моя любовь), RSBuild, Lynx. Большое влияние уделено микрофронтендам и Module Federation.

Срочно подключаемся: https://www.youtube.com/watch?v=SDuvi5eUqp0
03/26/2025, 18:57
t.me/htmlshit/3515
4
1
1.3 k
Яндекс вновь проведет масштабный фестиваль Young Con для всех, кто интересуется сферой IT

25 июня во второй раз пройдет фестиваль про технологии и карьеру в IT — Young Con. В этом году он будет доступен не только студентам, выпускникам и начинающим специалистам, но и школьникам 9-11 классов. Участники смогут познакомиться с IT-профессиями, посетить интерактивные зоны ведущих вузов, попробовать сервисы Яндекса, пообщаться со специалистами и пройти пробное собеседование.

Подробнее — на сайте Young&&Yandex и в Телеграм-канале.
03/25/2025, 19:51
t.me/htmlshit/3514
12
24
1.3 k
#инструмент дня

Мой самый любимый виджет из всех — Modal Bottom Sheet. Это как в построении маршрута на Google Maps. Шторка, по-нашему. Дёргаешь её туда-сюда, забавно.

Так вот, в мобильных фреймворках вроде того же Flutter и SwiftUI шторка реализована из коробки, а для веба — приходится изгаляться.

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

Так вот, собственно, к чему это я: https://silkhq.co/

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

Множество примеров, нативные анимации, жесты. Одна проблема: платная для коммерческого использования. И не открытая.

Две, получается, проблемы :(

P. S. В комментариях пишут, что так-то три проблемы. Третья — React. Штош.

#react #sheet #widget
03/25/2025, 17:17
t.me/htmlshit/3513
12
6
1.4 k
Основа веб-разработки — это HTML 👀

Изучить этот язык можно на бесплатном онлайн-курсе от экспертов VK. Вы научитесь создавать структуру веб-страниц, подготавливать сайты для SEO, работать с текстом, таблицами, изображениями. Как итог — создадите свою первую веб-страницу.

Формат курса: видеоуроки уже записаны, учитесь в своём темпе.
Стоимость: бесплатно.
Как записаться: перейти на сайт VK Education и зарегистрироваться на курс.
03/25/2025, 13:06
t.me/htmlshit/3512
3
3
1.3 k
#инструмент дня

Серверные компоненты React в Parcel.js уже здесь!

Недавно я писал новость о выходе Parcel 2.14.0, который бросает вызов (нет) Next.js и внедряет у себя поддержку серверных компонентов!

И вот, мы дождались примеров!

Тут: https://github.com/parcel-bundler/rsc-examples

1. С сервером
2. Генерация статики — это, пожалуй, моя любимая и довольно недооценённая возможность
3. Клиентские, когда серверные компоненты рендерятся как обычные, интегрируясь в уже сущестующее приложение.

В общем, наконец-то можно нормально пощупать без того, чтобы тянуть весь Next.js. Я очень рад.

#parcel #rsc #react
03/25/2025, 11:43
t.me/htmlshit/3511
14
12
1.5 k
#глупость дня

Поехали.

Недавно двое вебанутых дегенератов наглядно продемонтрировали мне, что в комменты можно засунуть жабаскрипт, невзирая на фильтр: теги script и object, конечно, в число разрешённых не входят, но до сей поры Таласса фильтровала только теги (по их именам), а все атрибуты оставляла как есть.

Какие мысли приходят в голову, когда мы видим эту цитату?

Наверное, очередной вайбкодер нафигачил свой SaaS и приступил к стрижке бабла с населения, да? Ну, весь интернет уже с неделю угарает над одним персонажем.

Но нет, перед вами — откровения доцента МГУ и автора множества книг по обучению программированию Андрея Столярова.

Дело в том, что он решил написать генератор статичных сайтов на C++, ThalassaCMS. Но тут... но тут в дело вмешался реальный мир: http://www.stolyarov.info/node/428

Там что на русском прекрасно, что на английском: http://thalassa.croco.net/2501201.html

Вы зацените, каков слог:

Между тем комитетская мразь, придумавшая HTML5, впендюрила туда «событийные» атрибуты вроде onlclick, onpageshow и прочее в таком духе, а лишённые, похоже, последних остатков мозга браузерописатели положили с прибором на то, документ какого типа они рендерят

Повторю, человек — доцент и преподаватель в МГУ. Ну ок, был, и ушёл по причинам, не связанным с его профессиональной деятельностью.

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

Но вашу ж мать, как можно быть настолько невежественным в остальных вопросах?! Даже если мы все в курсе комитетских мразей.

Ладно, мы все бомбили на те или иные решения, но не все из нас — обладают неким авторитетом в сфере, а уж тем более — обучают людей.

Так что, выходит, вайб-кодинг — это абсолютно нормально, ещё лет 20 назад это называлось «программированием на пхп».

А тот факт, что в академической среде до сих пор встречаются подобные кадры — нет.
03/24/2025, 11:06
t.me/htmlshit/3510
17
50
1.5 k
#уязвимость дня

Итак, Next.js обосрался. Гремит уже пару дней точно: https://nextjs.org/blog/cve-2025-29927

И уязвимость, если коротко, заключается в следующем: сформировав определённый заголовок, можно пропустить все проверки аутентификации пользователя и выполнить нужный код.

x-middleware-subrequest: middleware

Если значение этого заголовка содержит имя middleware (middlewareInfo.name), то выполнение данного middleware пропускается.

Естественно, должно сойтись несколько условий, например — аутентификация должна проходить в middleware, который мы и можем пропустить. Скриншот очень хорошо показывает суть проблемы.

Так вот, за подробностями-то можете сходить сюда: https://zhero-web-sec.github.io/research-and-things/nextjs-and-the-corrupt-middleware, но вот что очень интересно.

А интересно это:

2025-02-27T06:03Z: Disclosure to Next.js team via GitHub private vulnerability reporting
2025-03-14T17:13Z: Next.js team started triaging the report
2025-03-14T19:08Z: Patch pushed for Next.js 15.x


Две недели! Две недели компания Vercel игнорировала проблему. Да, разные инфлюенсеры, вроде известного Th3o, утверждают, что ни один сайт не был подвержен уязвимости... ну да, а ещё он в Vercel инвестировал.

Очевидно, что уязвимость эта — типичный бэкдор облачно-ориентированной компании для упрощения своих конкретных задач. Но легче от этого не становится.

А, ну и да, официальная рекомендация:

We recommend that all self-hosted Next.js deployments using next start and output: 'standalone' should update immediately.

А остальным — закройте этот заголовок.

#nextjs #vulnerability
03/23/2025, 19:06
t.me/htmlshit/3509
31
2
1.6 k
Как Павел Дуров и Илон Маск перевернут IT-индустрию в 2025 году?

Новости из digital-мира, которые влияют на вашу жизнь и которые интересно обсуждать, отбираются и фильтруются на канале AdBranch.

➡️ Следить за движухой
03/23/2025, 10:03
t.me/htmlshit/3508
19
21
1.5 k
#фишка дня

Надоело угадывать высоту строки, чтобы текст стал высотой ровно в прописную букву? Say no more!


line-height: 1cap;


И вы великолепны.

P. S. ещё более вы великолепны, если Safari версии больше 17.2 включительно.

#css #бородач
03/22/2025, 20:33
t.me/htmlshit/3507
Здесь разрабы не просто двигают кнопки и лутают деньги, а создают шедевры!

Я Никита — frontend-разработчик, любящий свою работу. Я приглашаю тебя в свой канал о фронтенде с душой Frontend For The Soul с вдохновляющим комьюнити, фичами, которых нет в других источниках, регулярными трендовыми идеями и книгами.

Здесь каждый пиксель имеет душу. Присоединяйся — @frontendforthesoul
03/22/2025, 17:29
t.me/htmlshit/3506
14
49
1.6 k
#ссылка дня

Наверное, стоило прислать это сразу после пятничных котов :)

Итак, вашему вниманию: диаграмма разрешения кодов HTTP.

Тут: https://github.com/for-GET/http-decision-diagram?tab=readme-ov-file

Разрешения не в смысле "можно ли", а в смысле процесса принятия решения, когда какой код уместен.

Она довольно большая и основывается на большом количестве RFC: RFC7230, RFC7231, RFC7232, RFC7233, RFC7234 RFC7235.

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

Всё весьма хорошо укладывается в голове.

#http #diagram
03/22/2025, 13:09
t.me/htmlshit/3505
19
7
1.2 k
#такое дня

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

И вот сегодня в девять утра позвонил бывший коллега. С проблемой 🫠

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

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

Ну а памяти-то там кот наплакал. Как крутилось на шаред-хостинге со 128 мегабайтами памяти на PHP 5.3, так и крутится.

Как оказалось, я образца 2012 года, для подсчёта продаж просто грузил в памяти вообще все блоки, а потом их уже фильтровал и считал объёмы.

Казалось бы, какая фигня, скажете вы, ну сколько там тех блоков?

Ну так-то за 13 лет добыли почти 24000 блоков и совершили несколько тысяч продаж. А каждый блок — специфика работы — должен был сохранять историю изменений, распилов, расколов и так далее... Ревизии, короче. Это довольно ощутимый объём данных.

Сначала я предложил просто убрать статистику. Но оказалось, это едва ли не самая нужная фишка — даёт моментальную видимость по контрагенту.

Естественно, код был переписан самым простым способом — пакетной обработкой. Грузим по 5000 блоков, считаем объём. И всё прекрасно заработало.

Это, к слову, о преждевременной оптимизации. Довольно плохой масштабирующийся код прекрасно работал в не самой маленькой компании 13 лет :)

Такой вот blast from the past, ничего не скажешь. Кто бы вообще мог подумать, что это всё будет работать столько лет без проблем.

#php #memory
03/21/2025, 22:10
t.me/htmlshit/3504
21
4
1.2 k
Выиграй стажировку в IT и стартуй в карьере!

Pulpy и SuperJob запустили проект “Карьера шаг за шагом”. Его участники могут выиграть индивидуальную карьерную консультацию и стажировку в топовых компаниях.

У каждого направления (маркетинг, ИТ, бизнес, большие данные) есть свой эксперт. В вопросах ИТ своим опытом поделилась Наталия Давыдова, разработчица и автор канала “Наташа пишет про IT”. На сайте вы найдете видео-интервью и гайд: там много дельных советов и личный опыт Наташи по поиску работы.

Что делать?
Зайди на сайт, посмотри видео и скачай гайд
Отправь резюме — первым 200 участникам эксперты SuperJob бесплатно дадут обратную связь!

В мае эксперты выберут нескольких ребят, которых пригласят к себе на карьерную консультацию. А самый сильный участник получит стажировку в ИТ-департаменте SuperJob.

🔗 Ссылка на проект

Реклама АО “Мултон”, ИНН 7810249327, erid: 2W5zFK9uByA


#карьера #стажировка #IT #вайб
03/21/2025, 15:03
t.me/htmlshit/3503
10
12
1.3 k
#пятница дня

Срочно идём и вводим в консоль traceroute -m 50 bad.horse.

И поём все вместе :)

P. S. а цепочка сертификатов https://signed.bad.horse содержит тот же текст.

#такое
03/21/2025, 12:45
t.me/htmlshit/3502
10
21
1.4 k
#ссылка дня

Пятничных котов вам в ленту! Но просто котов вы можете найти где угодно, тут же — HTTP-коты: https://http.cat/

Знать коды протокола HTTP должен каждый веб-разработчик, чтобы не попадать в глупые ситуации и правильно пользоваться API. А раз их можно выучить, глядя на котов, почему бы и нет.

#http #handbook #бородач
03/21/2025, 10:34
t.me/htmlshit/3501
🚀 Качайте английский за счёт компании для работы в IT!

🌍 Хотите выйти на международный уровень в сфере разработки, аналитики, проектного управления или дата-сайенса?

Яндекс Практикум предлагает курсы, которые помогут уверенно общаться на английском языке в профессиональной среде:

✅ Вместо зубрёжки — симуляции интервью, рабочих созвонов и даже смолтока возле кулера
✅ Вас ждут встречи с иностранными IT‑специалистами и много разговорной практики
✅ Мы взяли за основу опыт работы Яндекса с международными партнёрами, чтобы вы освоили навыки, которые ценят зарубежные работодатели
✅ Поможем эффективно совмещать учёбу с работой
✅ Выдадим сертификат об окончании курса

👉 Курс может оплатить ваш работодатель, заполните форму, расскажем, как это устроено.

Реклама, АНО ДПО “Образовательные технологии Яндекса”, ИНН 7704282033, erid: 2VtzqucjFMA
03/20/2025, 21:02
t.me/htmlshit/3500
16
12
1.3 k
#фишка дня

Когда вызываешь async-функцию, но не обрабатываешь её результат, промис остаётся "висящим" (floating). Это может привести к разным проблемам:

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

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

Неоптимальное использование ресурсов.
Если промис делает сетевой запрос или что-то грузит, но результат нигде не используется, это просто тратит ресурсы впустую.

Ещё, конечно, IDE ругается и бесит.

Чтобы явно указать, что промис можно игнорировать, используй один из этих способов:
void fetchData(); // Показываем, что знаем о промисе, но он нам не нужен
fetchData().catch(() => {}); // Глушим ошибки (осторожно, можно скрыть баги!)
fetchData().then(() => {}); // Запускаем, но не обрабатываем результат
(async () => { await fetchData(); })(); // IIFE, помните ещё такое?

Правило no-floating-promises (https://typescript-eslint.io/rules/no-floating-promises/) в ESLint помогает находить такие промисы и не оставлять их без внимания.

#eslint #async
03/20/2025, 18:57
t.me/htmlshit/3499
14
12
1.4 k
#новость дня

Google переводит рендеринг шрифтов в Chrome на Rust

В Chrome 133 для Linux, ChromeOS и Android по-умолчанию включён новый движок рендеринга шрифтов Skrifa, написанный на Rust. Он заменяет старый C++-код и является частью проекта Fontations.

Почему это важно?

Рендеринг шрифтов — одна из самых уязвимых частей браузера. Ошибки в обработке OpenType-файлов могут приводить не только к некорректному отображению текста, но и к серьёзным уязвимостям. 70% всех багов безопасности в Chrome связаны с управлением памятью, а Rust помогает устранить эту проблему на уровне языка.

Похоже, Google наконец-то заметил, что Firefox уже лет пять как использует Rust, и решил, что пора бы догонять.

📌 Подробнее:
🔗 Статья на русском
🔗 Блог Google

#rust #chrome #opentype
03/20/2025, 17:20
t.me/htmlshit/3498
3
2
1.3 k
Если нужно подтянуть разговорный английский для работы, помочь с этим могут в онлайн-школе Authentic Pigeon.

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

Абсолютно кайфую от подхода ребят. Занятия тут это не потогонка, а крутой дружеский разговор.Студент школы — Иван, QA инженер

Узнать подробнее о занятиях и записаться на бесплатный демо-урок можно в боте.

Реклама. Моисеев Кирилл Владимирович. ERID: 2VtzqwKiQ6b
03/20/2025, 13:18
t.me/htmlshit/3497
33
13
1.5 k
Как выглядит ваше типичное утро четверга? Если там нет DJ Stonik1917 и милых роверов, то даже не зовите. А если серьезно — так утренним кофе-рейвом Яндекс начинает новый сезон образовательных проектов для стажёров.

Кто куда, а я на рейв 🌟 📹
03/20/2025, 10:41
t.me/htmlshit/3496
6
6
1.5 k
#баг дня

Посмотрите на иллюстрацию к посту, ничего интересного не замечаете?

А тут происходит ого-го какая драма!

Да, использование новомодных HDR-цветов и описывание их в OKLCH в Chrome на macOS приводит к неожиданным эффектам, будучи применённым на корневую ноду, aka тег HTML.

Правильный цвет тот, что темнее. Откуда я знаю? В Safari бага нет. В FIrefox, кстати, тоже.

А багу в Chrome на macOS тупо два года уже: https://issues.chromium.org/issues/40064153

Ну, бывает.

#oklch #color #bug
03/20/2025, 08:04
t.me/htmlshit/3495
24
19
1.5 k
#новость дня

Ну что же, скажем Styled Components пока-пока!

https://opencollective.com/styled-components/updates/thank-you

Спасибо им, что показали нам, как можно работать с компонентами. Правда и цена оказалась высока.

Пока коллективный CSS-in-JS динозавр решал проблему экстракции CSS из бандла, растеряв мощь Babel под натиском Rust-решений, подтянулись млекопитающие вроде Tailwind и заняли нишу гораздо быстрее, мощнее и эффективнее.

С бесплатной экстракцией в том числе, да. И не ограниченные фреймворками.

Маятник мощно качнулся. Я не любитель Tailwind и, возможно, предпочту CSS Modules, но надо признать, что работу они проделали прекрасную.

Помянем, в общем.

А вторая новость — кратко: вышел Parcel 2.14.0 c поддержкой React Server Components!

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

Дивный новый мир!

#cssinjs #styled #parcel #tailwind
03/19/2025, 17:22
t.me/htmlshit/3494
В России можно посещать бесплатные IT-мероприятия хоть каждый день: как оффлайн, так и онлайн.

Чтобы не пропустить полезные — сохраните канал @FreeItEvent.

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

Всё публикуют здесь.
03/19/2025, 13:01
t.me/htmlshit/3493
#такое дня

Есть две вещи, которые я очень не люблю в веб-приложениях.

Первая — однокнопочные шорткаты. Например, в Jiira — нажатие на W добавляет тебя в список следящих за таской людей. Зачем? Почему? Непонятно.

Возможно, кому-то и удобно, но моя природная неусидчивость заставляет меня иногда нажимать кнопки на клавиатуре просто так. Ну нравится.

Хабр тоже этим страдает. А в Твиттере — вообще аккордные сочетания клавиш (типа G-T), как будто я в каком-то сраном Emacs.

Не, есть, конечно, приложения, где это возведено в абсолют — вроде Vim. Но это прям идеология. От веб-страниц я такого не жду.

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

Зачем? Почему? У меня всего 3-5 флагов на экране, имейте совесть. А может, я ищу UI-элемент какой-то. Ведь всё, что есть на экране — это текст.

А самое смешное, что они записывают факт предупреждения в LocalStorage, и больше такое не показывают. Я прям не могу представить себе этот диалог между продактом и лидом разработки. Надеюсь, была немая сцена.

А что раздражает вас в UX известных приложений и сайтов?

#ux
03/19/2025, 11:19
t.me/htmlshit/3492
5
27
1.3 k
#статья дня

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

Хочется выделить хотя бы недели две только на изучение нужной математики.

Ладно, хватит нытья. Сегодня у нас прошлогодняя работа Shopify: глобус чёрной пятницы.

Да, глобусы разных вариаций с какими-нибудь рюшками постоянно появляются в ежегодных отчётах разных компаний, то у GitHub, то у Google. Но Shopify добавили nice touch в виде шейдеров фейрверков.

И выкатили об этом статью! Вот: https://shopify.engineering/how-we-built-shopifys-bfcm-2023-globe

Пройдите сразу, насладитесь этой красотой. А уже потом провалитесь в статью и удивитесь, что все эти фейрверки — это просто вершины икосаэдров.

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

Это настоящий подарок.

#webgl #glsl #shaders #бородач
03/19/2025, 09:10
t.me/htmlshit/3491
30
3
1.4 k
Сегодня Яндекс всё меньше ассоциируется исключительно с разработкой софта. В 2017 году появился первый автономный автомобиль, в 2018 — первая Станция, в 2022 — первый робот Маркета. Все эти разработки становятся возможными благодаря людям с инженерным духом — тем, кто не боится экспериментировать и создавать железо.

25-26 апреля пройдет Repair Cafe — два дня для тех, кто любит технологии, железо и запах флюса по утрам.

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

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

Еще из интересного: будет техносвоп для обмена гаджетами разных лет, починка культового ПК «Ленинград» (олды помнят), и передвижная выставка, где можно потрогать роботов, лидары и игровые консоли.

Количество мест ограничено, зарегистрироваться и узнать детали можно тут.
03/18/2025, 20:19
t.me/htmlshit/3490
31
29
1.7 k
#codepen дня

Сайт по продаже пончиков должен быть пончиком и точка!

Пруф: https://codepen.io/narrowdesign/pen/ZYErvWv?editors=1000

Извините, я просто никак больше не могу это прокомментировать.

#threejs #3d
03/18/2025, 10:50
t.me/htmlshit/3489
8
12
1.4 k
#баг дня

Как вы думаете, что обозначает тип {}?

Ну, буквально:


type b = {};


Быть может, пустой объект? Да. А может, объект с любыми свойствами? Тоже да. А может, число или строка? И опять, да. А пустые? Да! А может, булево значение? Невероятно, но тоже да!

А может, null или undefined ? Нет. Вот тут — нет. Песочница.

Поэтому смысла в использовании типов {} или Object (второе лишь псевдоним к первому) довольно мало.

Если вам нужен пустой объект — так и пишите, Record.

Подробнее у Мэтта Покока: https://www.totaltypescript.com/the-empty-object-type-in-typescript.

В чём же баг, спросите вы?

А баг у нас на этот раз в реализации проверки типов в WebStorm/PhpStorm. У JetBrains, короче.

Мы выводим типы из схем Zod, но для целей создания шаблона, мне потребовалось исключить некоторые свойства из проверки:


TemplateQueryDetails = Omit<
z.infer, 'metadata'
>;


И мощно получил в лицо: тип ресолвился за 3 минуты на MacBook Pro M2, вешая интерфейс PhpStorm напрочь. Каждый раз.

Решение пришло откуда не ждали:


TemplateQueryDetails = Omit<
z.infer, 'metadata'
> & {};


Обратите внимание на пустой тип. Обнаружил я это случайно: в первом варианте я ещё и добавлял айди шаблона, но впоследствии — отказался.

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

В VS Code, кстати, проблемы не наблюдается.

После обращения в поддержку, мне было рекомендовано включить настройку Use types from server, что буквально выключает встроенные средства и использует типы от LSP. Что, собственно, мне только в плюс.

А как ваши дни проходят? 🙂

#jetbrains #typescript #lsp
03/17/2025, 14:58
t.me/htmlshit/3488
25
8
1.3 k
#проект дня

Мы прошлым летом проводили отпуск в Валенсии. Целью был более пляжный и гастрономический отпуск, нежели любование музеями и природой, потому поселились в районе, который когда-то представлял из себя рыбацкую деревню — Эль Каваньял (El Cabanyal).

Этот бывший рыбацкий квартал славится домами, украшенными азулежу — расписными глазурованными плитками. Они служили не только украшением, но и защитой стен от влаги и солнца.

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

Меня настолько эти плитки и эта традиция восхитили, что я посвятил несколько прогулок по жаре +40 только их фотографированию.

К сожалению, сфотографировать и сами дома тоже мозгов не хватило.

И так фотографии и лежали с конца июля, но я подумал, что пришло время их оформить в очередной проект!

Итак:
1. Собираем фотографии в каталоге
2. Вычленяем из них геоданные
3. Находим в интернете векторный файл пина на карте, для маски, и готовим картинки маркеров и миниатюры.
4. Выводим всё на карте используя библиотеку React Leaflet.

Ну по пути, конечно, пришлось придумать простой алгоритм, центрирующий карту по фотографиям и отсекающий выбросы. Довольно коротко получилось:


const sortedTiles = [...tiles].sort((a, b) => a.lat - b.lat || a.lng - b.lng);
const majorityStart = Math.floor(tiles.length * 0.3);
const majorityEnd = Math.ceil(tiles.length * 0.7);
const majorityTiles = sortedTiles.slice(majorityStart, majorityEnd);


Код в репозитории:
💻 https://github.com/bekharsky/el-cabanyal-tiles

Ну и сама карта, конечно же!
📌 https://bekharsky.github.io/el-cabanyal-tiles/

Кликаем на маркер, а потом перемещаемся по ним клавиатурой.

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

#spain #valencia #tile #react #leaflet
03/16/2025, 16:52
t.me/htmlshit/3487
Фронтенд с юмором — это "Frontline" 💻😂

Ты кодишь, но не забываешь смеяться? Тогда заходи, тимлид фронтенда рассказывает про все что связано с web-разработкой и не забывает запостить смешных мемасов.

На Frontline соединяются профессионализм и веселье в мире веб-разработки.

Здесь ты найдешь:

👨‍💻 Гайды и советы по HTML, CSS, JavaScript и популярным фреймворкам.

😂 Мемы и шутки про будни разработчика — потому что смех это тоже часть работы!

🔥 Новости и тренды в веб-разработке — чтобы быть на шаг впереди.

💬 Обсуждения и обмен опытом с коллегами по цеху.

🎉 Вдохновение и мотивация — ведь кодить можно с улыбкой (даже на javascript)

🔗 Присоединяйся и и будь в курсе фронтенд-новинок, не забывая про отличное настроение 🚀

#реальноклассныйканал
03/14/2025, 16:01
t.me/htmlshit/3486
9
16
1.3 k
#codepen дня

Как сделать элементы интерфейса... зернистыми? Напоминающими шершавую структуру, например, пластика? Или плёнки...

Для достижения эффекта можно воспользоваться SVG-фильтром! Например, от Аны Тюдор: https://codepen.io/thebabydino/pen/MWBNrZq

К сожалению, на Safari съехали буквы, но сути дела не меняет :)

#svg #grainy #бородач
03/14/2025, 12:40
t.me/htmlshit/3485
Search results are limited to 100 messages.
Some features are available to premium users only.
You need to buy subscription to use them.
Filter
Message type
Similar message chronology:
Newest first
Similar messages not found
Messages
Find similar avatars
Channels 0
High
Title
Subscribers
No results match your search criteria