Обновить
256K+

Веб-разработка *

Делаем веб лучше

339,38
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Антиспам для WordPress, часть 2: что успело поменяться

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели4.7K

В прошлой статье я рассказывал, почему в какой-то момент пришлось делать собственный Анти Бот для WordPress: Cloudflare для части клиентов стал недоступен, а платные альтернативы вроде облачных WAF просят от 10 тысяч рублей в месяц за один сайт – и это при том, что задача у большинства клиентов скромная: отсеять спам-регистрации, спам в комментариях и мусор в формах обратной связи.

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

Читать далее

Новости

Встречаем Grok 4.6

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели5.9K

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

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

Grok 4.6 демонстрирует передовой уровень возможностей в ряде бенчмарков, оценивающих агентное программирование и интеллектуальные рабочие задачи. В Artificial Analysis Intelligence Index — сводном рейтинге, объединяющем результаты девяти бенчмарков, — модель показывает результат на уровне GPT-5.6 Sol.

Читать далее

Реалтайм на WebSocket со сквозной типизацией: TypeScript, Bun, React, Point0

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели5.4K

Бывает так: есть фулстек проект, и в нём всё хорошо. Откуда-то есть сквозные типы (tRPC, генерация из OpenAPI), есть авторизация, есть основной функционал. А потом вы решаете добавить реалтайм: уведомление о новом посте в ленте, чат между пользователями, интерактивную доску. И появляется целый новый слой абстракций, в котором надо заново изобрести всё, что в проекте уже есть, только на новый лад. И дальше поддерживать две разные системы.

В своём фреймворке Point0 я добавил четыре новых реалтайм-поинта (структурные единицы наравне со страницами, лэйаутами, квери, мутациями): канал, спейс, клиентский хэндлер, серверный хэндлер. На них собирается практически любая реалтайм-функциональность, кода получается мало, и читается он интуитивно. Эти поинты несут те же свойства, что и все остальные:

код сервера и клиента живут в одном файле, компилятор вырезает клиентский код из серверной сборки, а серверный из клиентской

типизация сквозная и выводится из дженериков самого фреймворка, без генерации типов

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

Читать далее

SOP & CORS

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели6.5K

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

Читать далее

Формула «идеального enterprise» для open-source

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели7.1K

Как отделить платные enterprise-функции от open-source кода так, чтобы их нельзя было взломать с помощью ИИ — показываю на примерах Dokploy и Pangolin.

Читать далее

Кадры вместо видео: как индустрия обходит вес scroll‑scrub анимаций

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели3.5K

Продуктовые сайты любят анимацию «крутишь колесо мыши — объект меняется на глазах». Первый инстинкт: сделать это видео с currentTime. Вот почему это почти всегда неправильный первый инстинкт, и что вместо этого используют на практике.

Читать далее

Создаём свой BI-дашборд с ИИ-редактором в Битрикс24

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели4.5K

Создаём отдельный BI-дашборд на данных Битрикс24, в котором можно менять визуализацию и поддерживаемые настройки отчёта запросами к ИИ.

В статье — ссылка на готовый редактор, описание принципов его работы и промпты для самостоятельного повторения.

Читать далее

Анатомия HTTP Request Smuggling

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели4.1K

Чтобы разобраться в HTTP Request Smuggling, надо сначала честно ответить на вопрос, который в обычной жизни может прозвучать абсурдно: а как сервер понимает, где заканчивается один HTTP-запрос и начинается следующий? Кажется, что ответ очевиден — запрос это запрос, отправил и отправил. Но эта очевидность держится ровно до тех пор, пока запрос один и сервер один. Как только их становится много, а серверов в цепочке хотя бы два, выясняется, что «границу запроса» надо где-то явно записать, и способов записать её оказывается не один, и вот в этом зазоре и живёт вся уязвимость.

Читать далее

Убежище книги

Время на прочтение5 мин
Охват и читатели8K

У меня дома зоопарк устройств: Android, iPhone, MacBook, Windows. На каждом стоит своя читалка: когда‑то на андроиде был CoolReader (отличная штука, я им вдохновлялся), на маке — платный BookReader, на айфоне — Eboox, на винде — десктопный CoolReader

Я решил написать веб‑читалку для домашнего сервера.

Читать далее

Hexnome: моя первая игра, 245 промптов и один выброшенный бэкенд

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели7.8K

Тридцать лет я собирался написать игру, а потом за десять рабочих сессий довёл до продакшена браузерную Hexnome: 3D-поле, одиночный режим, онлайн-мультиплеер и серверный журнал команд. Получилось 245 промптов и 99 коммитов в основной ветке. Ещё 30 коммитов пришлось выбросить, когда первая архитектура мультиплеера оказалась «играбельной, но ненадёжной». Рассказываю, что именно ускорил AI — и какие решения он за меня не принял.

Читать далее

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

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели8.5K

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

Читать далее

3 хорошие привычки начинающего фронтендера

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.9K

Привет, Хабр!

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

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

Давайте посмотрим, что я вам подготовил.

Читать далее

История одного архитектурного круга: реактивность Vue

Время на прочтение13 мин
Охват и читатели6.9K

Vue снова меняет способ обновления интерфейса: теперь на горизонте Vapor и рендеринг без Virtual DOM. Зачем очередная архитектурная перестройка и что не устраивает команду Vue в нынешнем подходе?

Чтобы ответить, проследим путь Vue от Object.defineProperty до Proxy  и зачем теперь понадобился Vapor. Это поможет лучше понимать поведение ref, reactive и computed, вникнуть в причины архитектурных изменений Vue и подготовиться к дальнейшим изменениям.

Читать далее

Ближайшие события

Go-juggler и протокол Juggler

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели9.1K

ИИ-агентам нужно ходить по настоящему вебу. Но настоящий веб враждебен к автоматизации: Playwright блокируют, headless-версия Chrome палится по отпечаткам, а стелс-плагины просто становятся частью отпечатка. Если вы когда-нибудь писали скраперы или инструменты для агентов, вы знаете, как это бывает - всё работает локально, а потом продакшен разваливается за Cloudflare-челленджем.

Несколько проектов пытались решить эту проблему со стороны браузера. Проект https://camoufox.com патчит Firefox на уровне C++, так что navigator.hardwareConcurrency, WebGL-рендереры, AudioContext, геометрия экрана и WebRTC подменяются ещё до того, как JavaScript их увидит. Браузер https://github.com/jo-inc/camofox-browser оборачивает этот движок в REST API, заточенный под агентов: снимки доступности вместо раздутого HTML, стабильные ссылки на элементы для кликов и изоляция сессий.

Остаётся только одна дыра: инструментарий вокруг этой экосистемы завязан на JavaScript/Python. Если вы живёте в Go - а весь стек Go-агентов, взорвавшийся за последние пару лет, весомый аргумент в его пользу - вам оставалось писать сырые вызовы curl.

Пакет https://github.com/yvv4git/go-juggler исправляет это. Это Go-клиент для протокола автоматизации Juggler (того самого, который патчит и расширяет Camoufox) под лицензией MIT. Он управляет Firefox/Camoufox из Go с единственной зависимостью и чистым, слоистым API.

Читать далее

Пишем логи в journald с помощью Logback и FFM API

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.3K

Разворачивать бэкенды для личного использования с помощью systemd удобно, но stdout плохо интегрируется с journald, а устанавливать софт только для просмотра логов не хочется. В статье - простой пример, как можно писать логи из Java-приложения в journald так, чтобы их потом удобно просматривать

Читать далее

Немного про «утечки» памяти: почему PM2 перезапускал Next.js-воркеры и при чём здесь gcTime TanStack Query

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.5K

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

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

И я пошёл искать причину.

Читать далее

Ваш кэш в Redis неэффективен, что с этим делать?

Уровень сложностиСредний
Время на прочтение21 мин
Охват и читатели7.7K

Однажды в проде контейнеры одного из сервисов начали падать по OutOfMemory. Контейнерам было выделено по 4 ГБ оперативной памяти, нагрузка была вполне обычной: десятки страниц в секунду.

Расследование показало, что проблема была в JSON-конфиге.

Схема была стандартная. В базе данных хранился JSON. При запросе приложение доставало его из базы, выполняло дополнительную обработку — заполнение вычисляемых полей, обогащение справочниками — и сохраняло результат в Redis. Подавляющее большинство пользователей запрашивало один и тот же JSON и ходило за ним в Redis.

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

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

Но всё оказалось интереснее…

Читать далее

Размытая граница между состояниями CSS и событиями JavaScript

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели8.6K

CSS «слушает» нас. Нет, не в буквальном смысле. Суть в том, что в CSS появляется все больше псевдоклассов, которые позволяют реагировать на события JS без необходимости писать сам JS. Формально псевдоклассы отслеживают состояния, а не события, но порой они настолько похожи на обработчики событий, что разница становится почти незаметной (хотя в контексте CSS это не так уж важно).

Читать далее

Как детектили фрод, а получили Джонни и Джулию: история одной браузерной разминки

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели6.8K

В Древнем Риме говорили: «Mens sana in corpore sano» - в здоровом теле здоровый дух. Два тысячелетия спустя мы, айтишники, превратили эту мудрость в её полную противоположность: здоровый дух, сидящий в нездоровом теле перед монитором. Наш позвоночник принимает форму вопросительного знака, а шея начинает напоминать ржавый механизм - повернуть голову можно только всем корпусом, издавая при этом характерный хруст.

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

- Да это же готовый трекер движений. Дай ему интерфейс и он превратится в игру. Осталось только придумать, во что играть…

Попробовать разминку с Джонни и Джулией

Бесплатно, без смс, без регистрации и без подвоха. Под музыку или без! Мне не жалко. Задача просто шею размять!

Читать далее

Joomla-дайджест. 2-й квартал 2026 года

Время на прочтение16 мин
Охват и читатели7.1K

Все главные новости из мира Joomla за апрель, май и июнь 2026 года в одной статье. Традиционно дайджест собирает новости сообщества, релизы, расширения, интеграции, видео и статьи из мира Joomla. Прошлый выпуск доступен на Хабре.

Читать далее
1
23 ...