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

Автор: @lekzd
Download Telegram
3Dекабря - всемирный день компьютерной графики.
Поздравляем всех причастных!
20😁12🌚1💘1
Забытое искусство формовки текста

Уже 4-й день в Генклубе обсуждают обтекание текстом разных форм, все началось с работ, выложенных @Yan_LS, который взял и просто на чистом C написал отбивание текста пробелами, рисуя текстом абстрактные формы и самостоятельно реализовав всю математику. Завязалось горячее обсуждение, где другие участники чата начали брать InDesign, Pages (аналог Word в MacOS) и сравнивать результаты, но все они были мягко говоря не очень по сравнению с тем, что я и многие мои сверстники помнили из детства: журнальную верстку.

О ней — далее
🔥8💘2
Забытое искусство обтекания текстом: журналы

Когда-то давно я любил вглядываться в микрокартинки вставленные между текстовых столбцов, где буквы плавно обтекали контуры чего угодно: от ромбика-врезки с цитатой до обтравленного фото героя заметки. Место в журнале/газете тогда стоило денег, потому использовали буквально каждый квадратный сантиметр. Когда я еще искал кем мне стать, я взял 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, которые вы соберёте за вечер, а потом неделю будете дебажить рассинхрон между очередями, уже наступила! 🚀
🔥121😁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. И вот мы опять спорим...
🔥5❤‍🔥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 и когда Бруно Симон допишет свой новый сайт. Теперь все это случилось =)
🔥3💯1💘1