Обновить
256K+

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

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

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

Атомарность в реактивных системах

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

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

Читать транзакцию

SEO‑поиск в Next.js App Router, индексируемые landing pages из фильтров и URL

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

Поиск в Next.js App Router связывает несколько механизмов — Server Components, dynamic routes, searchParams, metadata и клиентские фильтры. Если в проекте одна форма и несколько результатов, состояние можно держать в useState. В каталоге или агрегаторе каждый фильтр меняет URL, набор данных и правила индексации.

В статье на примере учебного проекта EventMap — агрегатора событий, разберем, как спроектировать систему фильтрации, которая генерирует чистые, индексируемые URL для поисковых роботов и обновляет выдачу при изменении фильтров. Страницы вроде «Концерты в Москве» или «Выставки в Петербурге» могут работать как отдельные landing pages. Для них нужны серверный HTML, постоянный URL, свой title, description, h1, canonical и отдельная политика index или noindex. Произвольные запросы, сортировки и глубокая пагинация остаются частью поиска и не попадают автоматически в индекс. Поиск построен через App Router, optional catch‑all route, серверный рендер результатов и общий набор функций для URL, metadata, canonical и sitemap.

Поиск по каталогу создаёт отдельное состояние для каждой комбинации фильтров. Категория, город, дата, сортировка, поисковая строка и номер страницы попадают в URL. При десяти категориях, пятидесяти городах и пяти вариантах сортировки получается 2500 комбинаций без учёта пагинации и свободного текста. Интерфейс должен обработать все допустимые комбинации. В поисковый индекс обычно попадает только часть из них. Страница категории music, страница города london и сочетание music/london могут содержать устойчивую подборку. Запрос ?q=free+jazz+tonight, сортировка по цене и восьмая страница выдачи относятся к текущему действию пользователя. Фильтры без отдельной политики создают большое пространство URL. Google описывает эту проблему в документации по faceted navigation. Изменение каждого параметра создаёт новый адрес, краулер тратит запросы на многочисленные комбинации и позже обнаруживает, что многие из них не содержат самостоятельного материала. (Google for Developers)

Читать далее

Армия в терминале

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

Как coding agents превратили разработчика в диспетчера машин — и запустили гонку оркестраторов, песочниц и ИИ‑фабрик.

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

Читать далее

Платформа плагинов в Трекере, или Как мы пустили сторонний код в продукт с 600 000 пользователей

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

За последние годы аудитория Трекера выросла до 600 000 пользователей — пропорционально выросло и количество запросов на новые функции. Бэклог разросся до уровня ответов «внесли в список, но обещать ничего не можем». При этом рынок трекеров очень конкурентный, и останавливать развитие core‑продукта ради разбора кастомных запросов нельзя.

В какой‑то момент мы пришли к выводу: сколько бы ни увеличивали команду разработки, запросов от пользователей всегда будет больше. Это не проблема планирования, а скорее структурное свойство зрелого продукта с большой аудиторией. Единственный способ масштабироваться в этой точке — не делать всё своими руками. 

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

Привет, Хабр! Меня зовут Женя Успенский, я руковожу разработкой фронтенда в Яндекс Трекере и отвечаю за архитектуру платформы плагинов. Со статьёй мне помогал мой коллега Дима Куприк, который отвечает за весь проект целиком. Он расскажет, почему мы вообще решили дать возможность пользователям самим модифицировать Трекер, как плагины помогают решать специфические задачи команд и какие сценарии мы автоматизировали первыми. 

В технической части я подробно разберу, какие задачи перед нами стояли и как мы их решили: изоляция стороннего кода, разрешения, proxy для внешних API и всё, что позволяет пускать чужой код в B2B‑продукт и спать спокойно.

Читать далее

По обе стороны антибота: как я имитирую Chrome при скрейпинге и ловлю ботов по тем же сигналам

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

Я собираю афишу города в одну карту из пяти источников. Два из них — Яндекс.Афиша и afisha.ru — собирать себя не хотят. И режут не так, как ждешь: ни логина, ни капчи на входе, ни «подтвердите, что вы не робот». Мой requests.get(...) ловит 403 — даже когда заголовки скопированы из Chrome один в один.

Первая мысль была дурацкая: где-то не хватает куки или очередного sec-ch-ua. Оказалось — проблема раньше. К тому моменту, когда сервер читает мой браузерный User-Agent, он уже успел посмотреть, как именно клиент открыл защищенное соединение. Питоновский клиент палится ровно тем, как он здоровается.

Читать далее

AI-краулеры в 2026: кого пускать в robots.txt, чтобы попадать в ответы ИИ

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

Полгода назад ко мне постучался один из будущих клиентов с вопросом, почему ChatGPT не знает про его компанию, хотя сайт в топ-3 Google по нужному запросу. Индексация была нормальной, ссылки — тоже. Проблема нашлась за пять минут в логах: в robots.txt висел Disallow: / для всех user-agent, кроме Googlebot и YandexBot. GPTBot, ClaudeBot, PerplexityBot получали 403 ещё на первом запросе. Полгода сайт был невидим для трёх из четырёх крупных AI-поисковиков, и никто об этом не знал — в Search Console и Вебмастере всё выглядело зелёным.

Случай типовой. Проверка индексации показывает, видит ли сайт поисковик. Попадёт ли страница в ответ модели, которая формирует его вместо поисковой выдачи, — вопрос отдельный. Это две разные аудитории ботов, и вторая почти никогда не попадает в стандартный SEO-чеклист.

Читать далее

Симулятор дальтонизма для сайта, Figma и Chrome: как девять чисел из статьи 2009 года разошлись по четырём инструментам

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

Девять чисел из научной статьи 2009 года сегодня работают у меня в четырёх местах: на HTML-странице, в canvas, в двух плагинах Figma и в чужом расширении для Chrome. Разбираю, как одна и та же матрица цветовосприятия ведёт себя в четырёх средах, где каждая среда сопротивляется по-своему — и почему честные ограничения инструмента важнее его возможностей.

Читать далее

Один файл, одна команда: как мы упростили запуск dev-окружения с помощью Runium

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

Локальный запуск dev-окружения в крупном проекте может превратиться в отдельный квест: несколько процессов, Docker-контейнеры, переменные окружения, порядок старта, ожидание готовности сервисов и отличия между ОС. Даже если у вас есть подобный опыт, это может быть неудобно, долго и утомительно. Новичку же обычно не обойтись без длинной подробной инструкции.

Привет, Хабр! На связи Сергей Зверьков, старший разработчик в «Лаборатории Касперского». Хочу рассказать, как мы решили эту проблему, написав собственный open-source-инструмент — Runium. Суть его в том, что он позволяет описать dev-окружение в JSON-файле. После этого проект можно запускать, останавливать и проверять одной командой.

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

Читать далее

То, что только что произошло с TheNumbers.com, должно нас всех обеспокоить

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

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

Читать далее

AI‑тренер по CS2 на DeepSeek: где LLM выдумывает и почему семь недель стоили $1,45

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

Всем привет. Я много лет играю в Counter-Strike и тренируюсь, как большинство: захожу в Deathmatch «размяться», играю три катки, тильтую, выхожу. Сервисы статистики при этом исправно сообщают, что у меня просела точность и выросло время реакции. Спасибо, а делать-то что?

Весной я решил собрать себе тренера сам. Сразу пара слов для контекста: я самоучка, в команде никогда не работал, основной опыт — десктопные утилиты и автоматизация, из веба до этого были только админки под собственные инструменты. В CS тоже звёзд с неба не хватаю, Premier в районе трёх тысяч, на FACEIT вообще первый уровень. Так что история будет не про успешный успех, а про то, где я наступил на грабли и что из этого вынес.

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

Проект мой, ссылка будет одна и в конце. Статья состоит из трёх частей: сколько это всё стоит в токенах, где модель выдумывает и как я это ловлю кодом, ну и подводные камни DeepSeek API и связки EF Core + SQLite.

Читать далее

Один поток, а всё успевает: как работает цикл событий в JavaScript

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

Promise, setTimeout и async/await часто работают совсем не в том порядке, которого ждёшь по коду, а тяжёлая синхронная функция способна заморозить весь интерфейс. Разберём модель цикла событий, которая объясняет эти эффекты и помогает понимать, где возникают блокировки, гонки запросов и лишние задержки.

Читать далее

Почему сайт невидим для роботов: проблемы вайб-кодинга

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

Вайб-кодинг уронил порог входа до плинтуса: Lovable, Bolt или v0 соберут лендинг за вечер. А потом сайт неделями болтается на дне выдачи, и даже ChatGPT про него не знает. Спрашиваешь у нейронки, почему SEO хромает, — она валит на «непродающие тексты». Причина обычно глубже: для поисковых роботов ваш сайт буквально пустая страница.

Внутри: почему нейронки по умолчанию лепят SPA, как на JavaScript смотрят Google и Яндекс, почему GPTBot и ClaudeBot скачивают ваши скрипты, но никогда их не запускают, работает ли llms. txt и какая одна строчка в промпте все чинит.

Читать далее

Как исследования пользователей помогают создавать инновационные сервисы

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

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

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

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

Читать далее

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

Docker Fundamentals: что внутри compose.yaml и как там всё устроено

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

В прошлой части я разобрал хранилища — тома, bind mount, tmpfs. В третьей части (в этой) планировалось добраться до сети. До неё дойдём, но прежде чем разбирать, как сервисы общаются друг с другом, стоит на секунду остановиться и разобрать сам файл, в котором мы всё это описываем. Потому что compose.yaml — это спецификация со своими top-level разделами, правилами слияния, подстановкой переменных и кучей мелких нюансов, которые легко упустить, если читать документацию по верхам.

Эта часть, по сути, большой справочник по структуре Compose-файла: держите статью под рукой и возвращайтесь к ней, когда понадобится конкретный атрибут.

Читать далее

Карточки из музыкальной студии 1975 года против продуктовых тупиков

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

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

Всё уже обсудили, аргументы есть — а решение почему-то снова переезжает на следующую неделю.

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

Читать далее

Ленивая загрузка — не лекарство: почему ваш main.js всё равно весит 2 МБ

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

Вы разбили Angular‑приложение на ленивые модули, включили production‑сборку и всё равно получили main.js весом почти 2 МБ. Причина часто скрывается в общих модулях, тяжёлых зависимостях и импортах, которые мешают tree‑shaking.

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

Читать далее

Как искать проблемы производительности в Python

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

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

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

Читать далее

Текстовая MMO RPG на движке форума Invision 5 с PWA приложением и кубиками

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

Привет, Хабр! Текстовые браузерные MMO вроде старой «Тюряги онлайн» — жанр древний, но до сих пор живой, особенно среди фанатов олдскульных вселенных. В сообществах готоманов нашу игру уже смело окрестили «Тюрягой онлайн 2.0», и сходство тут прямое: и там, и там на бэкенде крутится суровый выживач на зоне. Только в Тюряге ты обычный зэк на нарах, а Миненталь — это колония под магическим барьером, где каждый кусок мяса падальщика на счету. Игрок либо ходит на охоту и пашет на фракцию, либо быстро отбросит коньки в канаве от голода или первого же каторжника.

Когда мы на Бесте с нашими технарями задумали сделать эту тактическую RPG «Путь Героя», пришлось выбирать платформу для серверной части. В итоге мы решили использовать наш старый форум ещё времён 2004 года, обновив его с древней версии 3.4.6 до свежего каркаса IPS 5. Из коробки у него есть всё, что нужно: нормальная система прав, готовая база пользователей и вменяемое API. Но чтобы превратить обычный форум в нормальную игру, пришлось знатно поковыряться под капотом и в базах. Первым делом нужно было решить две главные проблемы: как упаковать всё это дело в легкое мобильное приложение и раз и навсегда отвадить игроков от читерства с кубиками.

Читать далее

Почему AI не заменит разработчиков. Или заменит

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

Уже куча народу высказалась по этому поводу - было и “мы все умрём, мы мамонты с лапками, нас заменят роботы”, было и “я сверхсущество, а эта машина лишь инструмент”.

Но я не встретил честной экспертной точки зрения с позиции бизнеса и разработки вместе. Были либо технарские, либо бизнесовые. 

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

А вот про риски никто не говорит! А это суть предпринимательства - работа с рисками. Сколько крупных игроков откатывают свои ИИ-стратегии сейчас? А ваш бизнес может позволить себе работать пару лет в дикий убыток ради эксперимента?

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

И где TRUE/FALSE?

Читать далее

Четыре месяца с Claude Code: что в итоге осталось лежать в .claude/

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

За четыре месяца работы в паре с Claude Code вокруг проекта наросла инфраструктура, которой в первый день не было и в помине: пять скиллов, четыре хука, 2066 строк собственных скриптов. Разбираю четыре проблемы, которые пришлось решать не промптом, а кодом — и три случая, когда агент уверенно врал.

Читать далее