Обновить
256K+

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

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

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

Как соцсеть для Егоров превратилась в автономный город на Node.js и SQLite

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

11 недель назад я начал делать социальную сеть, в которой гражданство зависело только от имени.

Если тебя зовут Егор, Георгий или одной из форм имени, происходящего от Georgios, то это место для тебя, 100%! Остальные становятся Наблюдателями: могут читать, реагировать, писать в личку, жить в своих районах — что-то вроде ВНЖ.

На этом месте проект вполне мог закончиться хорошей шуткой, которой и являлся ИЗНАЧАЛЬНО. Но пользователи начали спрашивать, кто здесь главный.

Так в Егороде появился мэр. Потом люди спросили, кто выбирает мэра. Появились выборы.

Затем — партии, депутаты, кабинет, указы, вето и импичмент, а социальная сеть начала подозрительно напоминать государство, состоящее преимущественно из Node.js, SQLite и людей по имени Егор.

Сейчас в проекте около 11,9 тысячи регистраций, обычный DAU — примерно 30–35 человек, кодовая база выросла примерно до 210 тысяч строк, 176 таблиц и 2625 тестов.

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

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

Читать далее

Новости

Как разрабатывать фронтенд без готового бэкенда: инструменты перехвата трафика, мокирования и принцип их работы

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

Всем привет, на связи Дима Котиков! Я все еще люблю разрабатывать под Android/KMP, разбираться с инструментами для упрощения работы и латте на фундучном молоке. За пять лет мобильной разработки я неоднократно сталкивался с ситуацией, когда бэкенд запаздывает, а дедлайн горит. 

Зимой 2026 мы получили задачу: новый финансовый инструмент, дедлайн через три месяца, готовность бэкенда — через полтора. Команда начала работу на моках и успела. В статье я расскажу, какие инструменты перехвата и мокирования трафика помогли нам выпустить фичу в срок без готового бэкенда, как настроить их за один вечер и почему понимание принципов работы TLS и MITM-атаки экономит часы отладки.

Читать далее

Как я строил zero-knowledge менеджер паролей: три архитектуры, модель угроз и восемь багов

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

Привет, Habr.

Я разрабатываю менеджер паролей "Сэйфком" для личного и командного использования.

Почти все серьёзные проблемы, которые я находил, были не в самих криптографических примитивах. Они появлялись рядом с ними: в авторизации, сериализации ключей, rate limit, SMTP, WebAuthn и обычной бизнес-логике.

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

Читать далее

Маркировка товаров в 2026 году: чек‑лист готовности для оптовой компании

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

До нового этапа маркировки меньше месяца. Компания зарегистрирована в «Честном знаке», ЭДО подключён, сотрудники знают, что товары маркируются. На первый взгляд основные приготовления уже закончены.

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

Читать далее

Polymorpheus: очень нужная деталька пазла Angular

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

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

Сегодня я хочу поговорить об одном таком случае и показать инструмент, который я создал много лет назад и с тех пор считаю абсолютной базой для Angular. Речь пойдёт о маленькой библиотеке Polymorpheus, которую мы в Taiga UI используем буквально повсюду, когда нужно отобразить какой-нибудь динамический контент.

Читать далее

Зачем я добавил диван в калькулятор ремонта

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

У ремонта есть неприятная привычка: ответ на один вопрос почти сразу порождает следующий.

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

С этих вопросов мой «Мастерок» и начал обрастать раскладками, объёмными комнатами и другими инструментами. С 17 августа по 16 сентября на сайте было 6 536 посетителей. В сравнении, которое показывает Метрика, это рост на 26,32%. Платное продвижение я не запускал. Большинство посетителей приходит из поиска.

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

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

Читать далее

Сделал себе вышибалу для VPS: кто стучится в.env и в ssh — тот сидит за баном…

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

Устал смотреть в логи: опять подбор пароля к ssh, опять лезут в несуществующие файлы сайта. Fail2ban ставил — утонул в настройках. Написал своё: обходит свой сайт, запоминает нормальные адреса, по лишним 404 и по ssh режет IP в nftables. Рассказываю — зачем и как ставил. Код покажу там, где самому было интересно.

Читать далее

«Обратная змейка», часть 2: читаю комментарии, чиню баги и добавляю босса

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

Когда я выкладывал первую часть, я, если честно, рассчитывал на десяток лайков и тишину в комментариях: ну кто будет всерьёз разбирать змейку, слеплённую за два вечера. Не угадал — комментариев набралось прилично, и добрая половина оказалась не «мило, годно», а разбором полётов: кто-то поймал баг, кто-то — нечестный спавн змей вплотную к игроку, кто-то сравнил игру то с Pac-Man, то с Asteroids. И вот сижу я, читаю это всё по второму кругу и понимаю: технически игра работала, но местами работала не на 100 процентов своей идеи, а это не то же самое, что работала хорошо. В общем, решил пройтись по всему списку, а не отделаться сердечком в ответ.

Читать далее

Можно ли собрать работающий интерфейс на ИИ за час?

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

«Закину промпт в ИИ, а через секунду получу готовый интерфейс, свой сайт или дашборд» — такая идея наверняка приходила каждому, кто не связан с дизайном или разработкой. ИИ-инструменты для этих сфер активно распространяются и обещают такие фантастические результаты, что закрадывается мысль: а что, если скоро дизайнеры будут не нужны?

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

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

Читать далее

Steam глазами разработчика: OpenID из 2007-го, звёздочка в имени ножа и цена строкой в чужой локали

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

«Просто прикрутить вход через Steam и цены из маркета» — примерно так это выглядит из бэклога. На деле: OpenID 2.0 образца 2007 года вместо OAuth, звёздочка ★ в имени ножа, из-за которой одно и то же название готовится для двух соседних эндпоинтов противоположными способами, и цена, приходящая строкой в чужой локали. Собрал все проблемы в одном месте.

Читать далее

Я написал сайт с кейсами CS2 целиком и выложил под MIT

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

Открыл кейс — получил предмет. Между этими двумя событиями лежат HMAC, миллион тикетов и RTP, который кто-то посчитал заранее. Я написал сайт с кейсами CS2 целиком и выложил под MIT: про то, где в «provably fair» проходит граница между «проверяемым» и «выгодным», и почему 0,023% перекоса я оставил осознанно.

Читать далее

Codex написал рабочий код, но не закрыл задачу: как меняется мой процесс разработки

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

Я всё меньше пишу первую версию кода сам.

Раньше backend-задача чаще начиналась для меня с реализации. Сейчас я могу описать её Codex, получить diff и уже от него идти дальше: разбираться в коде, проверять поведение системы, находить недостающий контекст и отдавать задачу на следующую итерацию.

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

Читать далее

Что изменилось в атаках на API приложений и как сегодня лучше защищаться

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

Еще несколько лет назад большинство инцидентов вокруг API выглядело довольно предсказуемо. Если приложение начинало вести себя подозрительно, специалисты искали ошибки авторизации, проблемы контроля доступа, признаки SQL-инъекций или попытки эксплуатации известных уязвимостей. Логика была простой: есть уязвимость => есть эксплуатация => есть последствия.

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

Читать далее

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

Задача со звёздочкой для фронтенда: выравниваем иконки с текстом

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

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

Тогда почему с ней не могут справиться ни Apple, ни Microsoft, ни Google, ни другие техногиганты? 

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

Читать далее

Любите ли вы кино так, как люблю его я? Версия 2.0: от ручного ввода к автоматизации

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

В январе я рассказал на Хабре, как почти тридцать лет собирал кино, переходил от видеокассет к DVD, от Excel к специализированным программам и в итоге решил разработать собственный сервис — flickollect.

В конце той статьи я написал: «Проект готов».

Сейчас, спустя несколько месяцев, эта фраза вызывает у меня улыбку.

После трёхсот добавленных фильмов я понял, что собственная кинобаза требует слишком много ручной работы. Расскажу, как пересмотрел импорт данных, подключил ChatGPT и обновил интерфейс — и почему теперь карточка фильма обычно создаётся за минуту.

Читать далее

Автоматическая маршрутизация: как оптимизация маршрутов помогает снижать транспортные расходы

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

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

Читать далее

Зря вы не используете эти HTML-элементы

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

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

Я говорю о семантической вёрстке уже десять лет. Только как-то так получилось, что в последнее время я ничего не писал на эту тему. Надо исправляться!

В современных веб-интерфейсах я часто встречаю определённый набор семантических элементов. Это header, main, nav, footer. Даже элемент button встречается. Реже, чем другие, но всё же есть.

Не будем на этом останавливаться! Сегодня мы с вами рассмотрим ещё несколько элементов, которые почему-то редко используются. Хотя с ними ваша вёрстка станет ещё более семантичной, а значит, и интерфейсы станут ещё лучше.

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

Читать далее

Symfony Workflow: как реализовать сложную бизнес-логику через состояния и переходы

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

Заказ в интернет-магазине редко живёт по идеальной схеме «создан → оплачен → доставлен». В реальности жизненный цикл объекта нелинейный: клиент оформляет заказ, но может передумать и отменить его; товар приходит с браком и требуется возврат; часть позиций не успела прийти и нужно отправить их отдельно. Попытка реализовать такие альтернативные сценарии, проверки прав и сопутствующие действия «в лоб» быстро превращает бизнес-логику в хаос из разрозненных if/else, проверок статусов и обработчиков по всему проекту.

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

Читать далее

Как я факторизовал RSA‑ключи центра сертификации… из 90-х

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

В последнее время меня всерьез стала беспокоить безопасность RSA. Криптография RSA держится на сложности факторизации большого полупростого числа, но какое именно число можно считать достаточно «большим» — вопрос интересный. Web PKI отказалась от 1024-битного RSA больше десяти лет назад, и хотя я не знаю никого, кто факторизовал бы ключ такого размера, это вполне по силам какому‑нибудь правительству или другой организации с большим количеством машин. Буквально пару дней назад кто‑то факторизовал 862-битный ключ RSA-260 в рамках конкурса RSA Factoring Challenge. Это самая крупная факторизация, о которой я слышал.

Читать далее

Нужен ли вашему сайту WAF

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

WAF нужен не только крупным порталам и интернет-магазинам, но и любому сайту, доступному из интернета, – вплоть до скромной страницы с услугами или обычной корпоративной визитки. Боты не делят жертв на «достойных атаки» и «слишком маленьких»: они работают массово и автоматически, перебирая всё подряд. Разбираем, как устроен WAF, от каких атак защищает, где его разворачивают и почему он не заменяет базовую гигиену безопасности.

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