Трудно быть Коротаевым – Telegram
Трудно быть Коротаевым
661 subscribers
135 photos
132 videos
254 links
🎨 Генеративное искусство, сложные алгоритмы визуализации
🔍 Разбор графики в играх и как это работает,
🎮 Свежие проекты из мира креативного кодинга
😎 Сообщества и конференции о которых стоит знать.

Автор: @lekzd
Download Telegram
Забытое искусство обтекания текстом: журналы

Когда-то давно я любил вглядываться в микрокартинки вставленные между текстовых столбцов, где буквы плавно обтекали контуры чего угодно: от ромбика-врезки с цитатой до обтравленного фото героя заметки. Место в журнале/газете тогда стоило денег, потому использовали буквально каждый квадратный сантиметр. Когда я еще искал кем мне стать, я взял InDesign и попробовал сверстать страницу журнала и как раз столкнулся с тем, что готовый текст и иллюстрации просто так не вставить, надо и текст подкоротить или удлинить, картинку покрутить чтобы не осталось пустого места, а еще не забыть по переносы, И использовать верные спецсимволы, дизайнеры-верстальщики те еще душнилы когда дело касается разницы между x и × (да, да, говорили "кого это ты там на Х послал?").

Как это делалось в «докомпьютерную» и раннюю компьютерную эпоху

В металлической верстке — физически перемещали строки текста, подгоняя их вокруг клише.

С появлением настольных издательских систем (как Adobe PageMaker, QuarkXPress, а затем InDesign) — дизайнер создавал контур обтекания вокруг изображения, часто вручную расставляя точки, чтобы текст огибал именно нужные части рисунка (например, волосы модели или сложный предмет).

Почему сейчас это реже встречается

Сложность чтения: Сильно «рваный» правый край ухудшает читаемость, особенно для больших объемов текста.
Адаптивный дизайн: Техника плохо масштабируется для мобильных экранов и веб-верстки. Ранее каждый такой текстовый блок создавался вручную, теперь разработчики скорее делают системы разметки любого контента, а не штучные страницы.
Минимализм: Современный дизайн склоняется к более простым, строгим сеткам с четким разделением текстовых и графических блоков.

А вам вак?
🔥72💘2
https://web.dev/blog/webgpu-supported-major-browsers

🎉 WebGPU теперь поддерживается во всех современных браузерах!

Раньше мы с WebGL жили как в старом браке: сложно, но хотя бы знали все его косяки. Писали шейдеры, молились на драйверы, а артефакты называли «фичей» и ставили на артхаус. Но мы терпели, ведь альтернативы не было.

А теперь будет WebGPU! Говорят, это быстрее, современнее и «ближе к металлу».

Теперь вместо "почему не работает?" будем спрашивать:

😳 "Почему ничего не рисуется?" – а потому что теперь самому нужно синхронизировать пайплайн рендеринга. WebGL за вас это тихо делал. Теперь держите асинхронность и горсть командных буферов.

😤 "Три года все кричали 'WebGPU в Three.js!'..." – а на деле оказалось, что для перехода нужно не обновить версию, а переписать половину проекта с ShaderMaterial и кастомными рендер-пассами. Спасибо, что предупредили заранее.

🤯 "Это баг или я просто не понимаю workgroup size?" – классика. Грань между ошибкой в коде и фундаментальным непониманием концепций теперь ещё тоньше. Добро пожаловать в мир параллельных вычислений, где ваш код может просто молча не работать.

Готовьтесь: эра красивых демок с 1000 FPS, которые вы соберёте за вечер, а потом неделю будете дебажить рассинхрон между очередями, уже наступила! 🚀
🔥131😁1🎉1💘1
Forwarded from 8BitJS
​​Что пошло не так в React Server Components и чему из этого стоит научиться

Последние пару дней во всех фронтенд-пабликах пролетела новость: в React нашли критическую уязвимость с оценкой CVSS 10.0. Она позволяет получить удаленное выполнение кода на сервере. В списках пострадавших оказались все кто используют и/или поддерживают React Server Components (RSC).

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

Небольшое отступление.

В рамках PR с закрытием уязвимости было решено сделать рефакторинг. И справедливо было подмечено

With this combined commit, people now have to go through a >1500 line patch to try to understand the security relevant changes.

Что за уязвимость

CVE-2025-55182 - критическая уязвимость в React Server Components, которая позволяет, отправив специально сформированный запрос, добиться удаленного выполнения кода на сервере.

В коде было обнаружены три основные причины уязвимости:

1. Несимметричность в плане защиты между кодом клиентской и серверной реализацией
2. Небезопасная десериализация данных Flight-протокола на сервере
3. Незащищенное разрешение модулей и экспортов

Немного контекста

React Server Components

Основная идея состоит в том, что сервер может сам рендерить дерево компонентов, может делать запросы в БД и API. Клиент же получает поток (stream) данных о дереве, а не готовый HTML. React на стороне клиента постепенно собирает готовый результат из данных от сервера и клиентских компонентов.

Flight-протокол

Внутренний протокол React для передачи данных в RSC между клиентом и сервером. Простыми словами, сервер кодирует состояние дерева, ссылки на компоненты, промисы в поток байтов. Со стороны клиента поток читает декодер ReactFlightClient и восстанавливает исходные данные. Аналогично со стороны сервера есть декодер ReactFlightReplyServer, который обрабатывает обратные данные от пользователя.

Разберемся в коде

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

Prototype pollution в ReactFlightReplyServer

Внутри серверного декодера есть функция reviveModel в связке с getOutlineModel, которые рекурсивно обходят данные и "оживляет" их в обычные JS структуры.

Упростим:

function reviveModel(...) {
...
if (typeof value === 'object' && value !== null) {
...
for (const key in value) {
// hasOwnProperty проверка для защиты от вызова унаследованных ключей
if (hasOwnProperty.call(value, key)) {
...
// добавили проверку на __proto__
if (newValue !== undefined || key === '__proto__') {
value[key] = newValue;
}
}
}
}


requireModule и доверие к экспорту

В RSC есть функция requireModule(metadata) для бандлеров, которая по metadata.id находит модуль и по metadata.name выбирает нужный экспорт.

export function requireModule<T>(metadata: ClientReference<T>): T {
const moduleExports = parcelRequire(metadata[ID]);
return moduleExports[metadata[NAME]];
}


Сервер слишком доверяет экспортируемому модулю, поэтому могут сработать запросы вида:

{
"id": "foo",
"name": "__proto__"
}


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

Для закрытия уязвимости для экспорта добавили проверку

if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
return moduleExports[metadata[NAME]];
}


Итого

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

Что важного мы можем вынести для себя:

Никогда не доверяйте структуре данных от пользователя. Для защиты фильтруем все опасные ключи из прототипирования (__proto__, constructor, prototype) и/или добавляем подход allowlist для ключей. Для конструкции for...in используем hasOwnProperty.

#8BitJS #React #CVE #security #RSC
8😱2❤‍🔥1💘1
Меня позвали поругать и похвалить всякие опенсорсные библиотеки для фронтенда. Буквально наше первое появление в одном кадре с Лешей, с которым много лет отбирали доклады для топовой конференции по JS —HolyJS. И вот мы опять спорим...
🔥6❤‍🔥3💘1
Forwarded from МойОфис
🎬 Новое интерактивное шоу «АйТир Лист» от МойОфис

Мы запускаем новое шоу, в котором эксперты оценивают технологии, компании, фреймворки и ИТ-решения по шкале от 1 до 4. Каждый выпуск — это 14 табличек от модератора, жаркие дискуссии и итоговый рейтинг, который поможет зрителям разобраться в актуальных трендах и сделать собственные выводы.

В первом выпуске мы обсудим опенсорсные решения для фронтенда.
Гости выпуска:
Александр Коротаев, эксперт фронтенда и креативного кодинга
Алексей Золотых, тимлид команды веб-редакторов в МойОфис

🎥 Смотрите наш юбилейный первый выпуск там, где вам удобно:
VK | YouTube | RuTube
🔥6💘1
Media is too big
VIEW IN TELEGRAM
На что способны нейросети... ну и я

Насытились генеративными картинками и видео от нейросетей? Тогда ловите немного приятной 3D-графики для разгрузки глаз!

На этом видео — не рендер и не игра, а 3D-сцена, созданная с помощью Gaussian Splatting.

📌 Что это?

Это техника, которая превращает обычное видео (например, с 360-камеры) в реалистичное облако точек-«сплатов». Каждая точка — это полупрозрачная текстура. Вместе они создают потрясающий объемный эффект, почти как голограмма.


Моя часть работы:

Я взял траекторию движения человека с камерой (она записана как набор точек) и превратил её в гладкий, полупрозрачный «рельс». Теперь по нему можно прокатиться, как на аттракционе!

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

Ramer–Douglas–Peucker — для упрощения исходной траектории.

Chaikin's Algorithm — для начального сглаживания.

Centripetal Catmull–Rom spline — чтобы получить идеально плавную и красивую кривую.

Нейросети — это мощно, но когда они дают нам сырой материал, всегда приятно добавить в него немного ручной магии и математики. Что думаете? 🤔
🔥92😍1💘1
Разработчики на Three.js в этом году ждали только двух событий: когда выйдет TSL и когда Бруно Симон допишет свой новый сайт. Теперь все это случилось =)
🔥4💯2💘1
Media is too big
VIEW IN TELEGRAM
Shopify и ренИИсанс раздали стиля, это надо видеть

Сколько анимаций, сколько пасхалок, на видео показал только одну, го искать остальные!

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

Кликать сюда и смотреть самостоятельно:
https://www.shopify.com/editions/winter2026
🔥8💘2
Присоединяюсь к поздравлениям Ане (@it_wildlife), много раз встречались на разных конференциях и митапах и в отличие от меня, который организовывал что-то просто про принципу что кажется больше некому, она как будто всегда знает как надо и как правильно. Сообщества продолжают жить благодаря тем кто их организует, кстати в Питере остро не хватает организаторов взамен выбывающих, в том числе и меня.
3💘1
Forwarded from Дима
Когда-то в далеком сентябре 2021-го на MoscowJS впервые пришла девушка, которую почти никто из нас тогда еще не знал. Она пришла просто гостем, слушателем, и никто тогда не понимал, что на самом деле это только пролог гораздо более длинной истории.

Потом была деврел-конфа, где она подошла к нам с Димой Шмаковым познакомиться — с осторожной прямотой человека, который еще не знает, что вскоре будет двигать горы. Потом — постучалась еще раз, уже в телеграме. Такой у неё стиль: если дверь нужно открыть — она постучит столько раз, сколько потребуется, не больше и не меньше.

В мае 23-го она достучалась. Несколько прогонов докладчиков — легкий пробный шар. А уже через месяц она конферансье. Уверенно проводит митап, как будто всю жизнь к этому готовилась. Еще совсем немного времени — и подготовка докладчиков, управление расписанием, коммуникации, сцена, тон, вайб — всё собирается вокруг неё. Не по назначению, не формально — просто потому что она та, на ком всё держится лучше всего.

Она выступает сама. Она прокачивает других. Ведет свой канал (@it_wildlife, подписывайтесь!). Она человек с миллионом талантов и увлечений, и она держит планку выше, чем большинство людей считает возможным.

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

По твоим словам, MoscowJS 50 стал для тебя «катализатором внутреннего бура». Но теперь уже очевидно: ты сама стала тем стержнем, на котором держится MoscowJS.

С Днём рождения, @numbingmist.

И помни: твой бур создан, чтобы пронзить небо, землю и само будущее!
9💘2
Media is too big
VIEW IN TELEGRAM
У сайта отчета Shopify есть целое второе изменение

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

Но что если не делать этого и пойти прогуляться по копии сайта? Оказывается для каждого экрана специально для этого окошка сделан свой визуальный фильтр и отдельная золотая моделька главного предмета раздела.

Я нашел там эффекты отражения всей сцены в воде, дизернига, скрытые иллюстрации. Ну и, конечно, тот самый синий инвертирующий цвета фильтр, с граффити поверх всего, который включается при нажатии.
🔥21🤯1🥴1💘1
Ну все, мы с Лешей начали холивар, как в старые добрые!

Если ютуб разработчики не очень смотрят, то после статьи на Хабре нас с Лешей прямо начали атаковать в чатиках, мол как так посмели, jQuery хвалить в 2025 году! Так же спорят с тем что Express.js плох, давайте объясню:

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

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

Ну и конечно мораль: Nokia 3310 была конечно во всем хороша, но не используйте ее больше! Все, буквально все требования к разработке изменились и старые инструменты просто не могут уже дать ответ на новые вызовы времени. Выбор устаревших (не старых, а устаревших) технологий на проекте часто окунает его в техдолг, который вроде и не мешает, но как только помешает...

https://habr.com/ru/companies/ncloudtech/articles/975012/
👍82👏1💘1
Обновился сайт Genuary

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


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

Этот блог начался с того, что я начал выкладывать сюда свои работы для прошлого Genuary. Можете тыкнуть на ссылку и мотать ниже: https://news.1rj.ru/str/korotaev_to_hard/15

Промпты на сайте сейчас рандомные, но 1 января должны определиться постоянные, ждем

Спасибо что вы еще и тут и нас тут стало так много 😍
5💘1