Обновить
512K+

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

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

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

Сегодня я для себя открыл: Pony ORM

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

Читатели хабра знают меня как автора статей о django. Например, в предыдущем посте я писал о том, как собирался переписывать django на async/await. Кстати, первые эксперименты подтвердили, что подход рабочий, и что django отлично поддаётся переписыванию. А также - что он хорошо расширяем и содержит код высокого качества.

Однако, я пришёл к выводу, что несмотря на эти достоинства, django сильно уступает Pony ORM, которая, в отличие от django и других ORM, ещё и спроектирована правильно - способом, дружественным к оптимизациям. Не случайно в статьях, которые есть о ней на хабре, её хвалят именно за производительность.

В этой статье речь пойдёт о Pony ORM, но не о фичах для пользователя, которых много (о которых можно узнать в этих видео 1, 2), а о её внутренней архитектуре.

Читать далее

Новости

Как сделать типобезопасный клиент для Strapi: разбираем вывод типов из populate на уровне компилятора

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

У любого запроса к Strapi есть неприятное свойство: форма ответа зависит от того, что вы попросили. Запросили статью без populate — в ответе только скалярные поля. Добавили populate: { category: true } — появилась вложенная категория. Добавили fields: ['name'] внутри populate — категория пришла обрезанной. Один и тот же эндпоинт возвращает десятки разных форм, и статический TypeScript-интерфейс ни одну из них честно не описывает: он либо врёт (обещает поля, которых в этом конкретном ответе нет), либо бесполезен (any).

В этой статье я разберу, как решить эту проблему кодогенерацией: как достать схему из работающего Strapi, сгенерировать по ней TypeScript-клиент и — самое интересное — как заставить систему типов вывести форму ответа прямо из аргумента populate на этапе компиляции. Подход Prisma-подобный: возвращаемый тип метода зависит от того, что вы передали в вызов. Код — на TypeScript; клиент, на примере которого я всё показываю, open-source под MIT, ссылка в конце.

Как это устроено

История Linux.org

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

Известный в Linux-сообществе автор технической литературы Роб Кеннеди опубликовал историю создания Linux.org — одного из первых веб-сайтов, посвящённых Linux, — а также рассказал о его недавнем возрождении.

Читать далее

С июля за вход через Google и Apple штраф до 700 тысяч рублей. Кого это касается

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

Несколько лет назад в закон «Об информации...» (149-ФЗ) добавили требования к способам авторизации пользователей.

Многие тогда обратили внимание на новость, но практических последствий почти не было — ответственности за нарушение не существовало. Если не штрафуют, значит скорость +19,9 км/ч разрешена ;)

Теперь ситуация изменилась - с июля 2026 года появилась административная ответственность, а штраф для юридических лиц 700 000 рублей.

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

Например мы обсуждали:

Читать далее

pkg-cache — простой локальный кеш пакетов

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

Пример реализации простого кэширующего прокси для пакетов npm, composer и pip на базе node.js для Windows и Linux.

Читать далее

Как мы делали три консоли для киберигры: опыт разработки новой версии тренажера

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

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

Читать далее

Docker Fundamentals: хранение данных в Docker

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

Docker и хранение данных: тома, bind mount, tmpfs и не только

Разбираемся, какие способы хранения данных есть в Docker, чем они отличаются друг от друга и что выбирать в реальных сценариях. В статье — тома, подключение хост-каталогов, tmpfs, нюансы docker compose, SELinux, volume-subpath, --volumes-from, драйверы хранения и бэкап томов на практике.

Читать далее

Пользователь сменил пароль и потерял доступ. Что проворонил тестировщик?

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

Одноразовая ссылка сработала только один раз, старый пароль больше не подходил, а все проверки прошли. И всё же пользователь снова потерял доступ к аккаунту.

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

Читать далее

Агрегатор новостей заработал, когда я перестал доверять ИИ

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

С чего всё началось

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

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

Дальше по привычке открываю Телеграм. Там у меня десятки каналов и в каждом события дублируются раз восемь в восьми разных пересказах. А по‑настоящему важного среди всего этого набирается три‑четыре штуки в лучшем случае.

Мне не хватало не ещё одного источника — их и так достаточно. Не хватало того, чтобы кто‑то прошёлся по всему этому за меня: убрал повторы, выкинул лишнее и выдал короткий список по важности. Без экспертов, желтухи, рекламы, баннеров — чистая событийная лента.

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

Читать далее

Попробовали подключить ИИ-агента к бизнесу и посмотреть на процесс через призму UX

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

Можно ли подключить AI-агента за минуту? Смоделировали путь клиента по самостоятельному подключению известного агента без помощи менеджера и специалиста, и вот что у нас получилось.

Читать далее

Почему фронтенд съедает больше времени, чем бэкенд

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

Статья про то, как построить приложение с AI-ассистентом и не застрять на самом неприятном месте, когда бэк готов, а интерфейс внезапно съедает недели.

Почему современный фронтенд сложнее, чем кажется снаружи. Особенно если вы идёте через spec-driven development, пишете требования вместо кода и ждёте, что Claude, Cursor или Kiro быстро соберут работающий продукт.

👀 Внутри: перекос фронта и бэка по объёму кода, состояние кнопок и форм, дизайн-системы, локализация, accessibility, тысячи npm-зависимостей, скучные интерфейсы от LLM, Playwright MCP, Figma MCP, визуальные тесты и планирование проекта с нормальным запасом на UI-грабли.

Заходите, читайте и делитесь своим опытом AI-разработки ❤️

Читать далее

От расшифровки звонков до собственных приложений: как ИИ взрослеет внутри CRM

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

Сегодня разберём, как ИИ в CRM прошёл путь от расшифровки звонков до выполнения действий.

В конце соберём собственное приложение, которое объединяет эти возможности на платформе для вайбкодинга от Битрикс24.

Читать далее

Point0 — простой, как tRPC, полноценный фулстек-фреймворк

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

Хочу сравнить фреймворк Point0 и библиотеку tRPC. Делаю это, потому что квери и мутации в Point0 очень похожи по DX на tRPC, но более удобны ввиду того, что всё же Point0 это фреймворк и он может обладать возможностями, которыми библиотека не может:

Объявлять квери вместе с серверным кодом прямо в клиентских файлах, или наоборот

Автоматически гидрировать и дегидрировать квери клиент при включении SSR

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

Иметь стабильные индивидуальные урлы для квери и мутаций

Не заставлять зависать редактор кода при увеличении количества эндпоинтов

Возвращать в ответах с сервера на клиент целые серверные компоненты или интерактивные острова

Управлять внешним видом состояний загрузки на страницах и в компонентах

Кроме того, что описано в этой статье, Point0 может много чего ещё, но об этом в других статьях. Сейчас фокусируемся на сравнении с tRPC. Предполагается, что вы с tRPC более менее знакомы, но ниже я всё равно буду показывать примеры реализации на tRPC, чтобы сравнения были видимыми.

Читать далее

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

Как я собрал OmniBot: Discord Activity, локальный ruBERT и модерация без чёрного ящика

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

Когда я начал развивать Discord-сообщество, обычной команды /ban хватило совсем ненадолго. Роли настраивались в одном месте, приветствия — в другом, логи — в третьем, а за уведомления о стримах отвечал отдельный бот.

Подробнее

Просто дайте мне ввести цифры

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

Цифровая идентификация и её значение для веба в последние годы стали темой горячих обсуждений. Они привнесли с собой множество спорных моментов: законы о проверке возраста и их влияние на онлайн-анонимность; Википедия потенциально будет вынуждена верифицировать в Великобритании личность пользователей; привязка к официальным операционным системам iOS и Android стала обязательным форм-фактором для кошельков цифровой идентификации; кроме того, стоит упомянуть ситуацию, когда американские цифровые аккаунты были закрыты потому, что их пользователь был судьёй Международного уголовного суда.

В своей истории я расскажу о швейцарской правительственной системе идентификации AGOV. Этот развёрнутый в 2024 году сервис сегодня насчитывает 1,6 миллиона аккаунтов и становится всё более необходимым: через него можно получать пособие по безработице, предоставлять налоговую декларацию (а это обязательное действие!) и выполнять множество других операций. В кантоне Цюрих это единственная возможность подачи заявления на гражданство.

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

Читать далее

Вы не знаете CSS. Мои вопросы о CSS с ответами. Версия 2026 года

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

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

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

Моя цель — это развлечь вас. Хотя вопросы связаны с практикой, на них не так просто ответить. Если вы не сможете ответить на большинство, то ничего страшного. Но, возможно, они покажутся вам легкотнёй.

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

Читать далее

Веб-портфолио с управлением жестами через камеру: полевой дневник

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

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

Получилось вот что. Страница встречает полем из частиц. Разрешаешь камеру, и частицы собираются в твоё объёмное отражение. Разделы висят вокруг силуэта и открываются рукой: наводишь палец, пункт заполняется и раскрывается. Текст листается щипком, фотографии берутся в кулак и растягиваются двумя руками. Дизайн при этом намеренно тихий: монохром, костяная типографика на чёрном, единственный цвет живёт внутри 3D-формы. Вся выразительность отдана взаимодействию.

Дальше — грабли по порядку наступания.

Читать далее

ИИ убьёт твой проект, а ты и не заметишь. Часть первая: деплой

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

Появилась идея для серии постов про наши вайб-кодерские проблемы. Сегодня я расскажу про шишки, которые набила в самой сложной для меня части — в деплое.

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

Итак. У тебя есть гениальная идея гениального сервиса. Ты обсудил её с ИИ, ИИ выдал код и сулит деньги рекой. Осталась мелочь: этот код пока живёт и, вероятно, работает только на твоём ноутбуке. А надо, чтобы в интернете.

Читать далее

РКН заблокировал CDN интернет-магазина. Партизанское решение через Яндекс CDN за 150 рублей (InSales)

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

Что делать, если системный CDN вашей e-commerce платформы внезапно попал под блокировки, саппорт не помогает, а корзина и галерея на сайте умерли? Рассказываю реальный кейс, как с помощью Яндекс CDN за 150 рублей в месяц, пары сниппетов и MutationObserver удалось ускорить загрузку ядра сайта в сотни раз и вернуть интернет-магазин к жизни. Честный разбор костылей, граблей и результатов в цифрах.

Читать далее

Пишу консольные приложения на iPad с помощью AI-агента и удалённого VPS

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

Консольное приложение - не самая очевидная вещь для разработки на планшете. Ни полноценного терминала, ни файловой системы, к которой привыкли на десктопе, ни нормальной многозадачности - так было ещё пару лет назад. Но если вынести сам процесс исполнения кода на удалённый Linux-сервер, а iPad превратить в тонкий клиент для управления AI-агентом и просмотра результата, картина меняется полностью. Ниже - рабочий процесс, который у меня сложился для разработки CLI-инструментов на Python: VPS + AI Coding Agent (Claude Code) в tmux + Remote IDE как единая точка входа, всё на iPad со Stage Manager. Для такого цикла нужно немного: SSH-доступ к серверу, где крутится агент, и способ параллельно смотреть на файлы и на diff, не теряя сессию агента при переключении между окнами. Дальше - как это выглядит по шагам.

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