Я хочу начать серию статей о том, как я решил разработать залипательную игру. Сразу скажу, что я не гуру геймдева и вообще большая область моих знаний составляет разработка backend на Python, js, system design и тд. Игровой опыт закончился в 15 лет на скромной 3д мобильной игре про добычу биткоинов, где я мучился ради простых моделек в Blender и кода на c#, но это совсем другая история.Главный вопрос - Почему?Почему сейчас? Почему соло? Почему куб? Ах да… вы же еще не знаете идею. Давайте по по…
Зачем?Каждый день мы пишем JSX и используем хуки. Но как это работает под капотом? Чтобы разобраться, мы с нуля напишем собственную версию React.За основу мы возьмем отличный туториал Didact, но пойдем дальше: переведем все на TypeScript, добавим поддержку Фрагментов, реализуем useEffect и useContext. К концу стать React превратится для вас в понятный алгоритм)JSXЧто мы знаем про JSX? Это разметка, которая расширяет возможности JavaScript и позволяет писать в нем разметку, вот пример:const head…
Я делаю браузерный 3D-платформер. Игрок катает красный желейный куб по каменным плитам, парящим в небе. У куба нет полоски здоровья, нет инвентаря с ключами и нет счётчика очков.Не потому что я минималист и не потому что так задумывал с самого начала. А потому что в какой-то момент посмотрел на черновик спецификации и понял, что мне придётся писать, отлаживать и балансировать три отдельные системы. Одну я осилить был готов. Три - не очень.Куб на каменных плитахВот он. Красный, желейный, никаког…
Хайп-цикл фронтенда, кажется, наконец-то выдохся. Мы вышли из фазы бесконечного переизобретения колеса, где каждый месяц появлялся «убийца React», и вошли в эпоху убийцы Fable инженерной зрелости. Сегодня опытного инженера сложно впечатлить очередным фреймворком: ценность сместилась в сторону предсказуемости, скорости поставки (delivery) и снижения когнитивной нагрузки. Привет, меня зовут Паша Востриков, и я — архитектор веб-направления в «Лаборатории Касперского». В этой статье хочу разобрать …
Есть распространённый способ сделать игру красивее: пойти изучать шейдеры. Я так и сделал, потратил на это прилично времени и получил желейный куб, которым доволен.А потом посмотрел на два скриншота рядом и понял неприятное: большую часть разницы дали не шейдеры. Её дали пять довольно тупых правок, каждая из которых занимает от двух до тридцати строк.Ниже они по порядку - от самой выгодной к менее. Игра браузерная, на Three.js и Rapier, но четыре пункта из пяти к движку вообще не привязаны.Было…
Прошлый раз я рассказал, как написал свой калькулятор раскладки плитки, потому что замучился считать ванную в столбик. Тот пост был про версию 1.2 — база, прямая/диагональная раскладка, смета, PDF, нумерация плиток. Комменты были классные, фидбек пошёл сразу, и за месяц я выкатил ещё три версии. Самое заметное — ёлочка и общий план квартиры, где все комнаты лежат на одном полотне. Про это и пишу.## Ёлочка (v1.4.0)Ёлочка — это когда плитка кладётся под углом друг к другу, как паркет. Спросили в …
Привет, Хабр!Я не программист и не разработчик. Мне ближе системное администрирование: развернуть сервис, разобраться с сетью, найти конфликт портов, проверить маршрутизацию и добиться, чтобы всё это пережило повторную установку. Но благодаря нейросетям у людей вроде меня появилась возможность не только описывать идеи, но и доводить их до работающего кода.Так появился AWG-Easy 3 — небольшая Docker-панель для AmneziaWG 3.x с управлением клиентами, изоляцией Home/Guest, IPv6, диагностикой соедине…
В июле я попросил Claude написать мне таймер рабочего дня: 45 минут сидя, две минуты у турника, 45 стоя, обед, и так до вечера. Один HTML-файл, ноль зависимостей, открыл в браузере — работает. Я назвал его «Смена» и честно прожил с ним день. К обеду выяснилось главное: телефон его не будит. Экран погас — вкладка уснула, setTimeout заморозился, никакого сигнала. Web Notifications на мобильном не ринг-тон, а строка в шторке, и то если вкладка жива. Push требует сервер и подписку. PWA на iOS — отд…
Если бот копирует один и тот же пост в десять каналов, в Google Analytics все клики свалятся в одну кучу. URL у скрытой ссылки живёт не в тексте, а в MessageEntity, а copyMessages копирует его как есть. Ниже — как пересобрать пост под каждую площадку, не сломав жирный шрифт, эмодзи и health‑check.Telegram умеет одно очень удобное действие: copyMessages. Берёте сообщение из чата A, кладёте в чат B — форматирование, медиа, альбом, скрытые ссылки, всё на месте. Для рассылок и зеркал это идеальный …