Обновить
256K+

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

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

429,7
Рейтинг
Сначала показывать
Порог рейтинга

Третий день Летнего ТехФеста — в нашем новом влоге

Мы заглянули в офис Okko, чтобы посмотреть, как устроена AI-кухня. Было технично, честно и очень вдохновляюще.

Смотри видео, чтобы погрузиться в событие.

Ещё больше о мероприятиях — в нашем TG-канале.

Теги:
+3
Комментарии0

Новый закон об ИИ вступает в силу 1 сентября: что изменится для владельцев сайтов

Привет! Я Александр Бондаренко, руководитель проектной группы в Далее. Мы делаем сайты и плотно работаем с их комплаенсом, поэтому новые законы я изучаю не как новости, а как список требований к проектам. 

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

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

Сначала напомню, о каком законе идет речь👇

Федеральный закон № 243-ФЗ «О поддержке развития технологий искусственного интеллекта в Российской Федерации»

Рамочный закон, который регулирует большие фундаментальные модели вроде ГигаЧата или Алисы. Они имеют от 1 миллиарда параметров и способны выполнять интеллектуальные задачи на уровне человека или выше. Если компания просто использует готовые модели в своих сервисах, закон на нее напрямую не распространяется.

Полный текст

Основная часть закона вступает в силу с 1 сентября 2026 года, отдельные нормы — с 1 марта 2027-го.

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

Суверенные модели смогут использовать контент с сайтов без согласия авторов

Национальный статус дает два преимущества: можно свободно обучаться на объектах авторского права и получить доступ к государственным данным. 

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

Это классический механизм opt-out: нейросеть по умолчанию может парсить и анализировать контент, если владелец заранее не ограничил это право. Пока непонятно, какой именно технический сигнал признают достаточным ограничителем — это открытый вопрос и в российской, и в европейской практике, где действует похожая логика.

Обязательная маркировка ИИ-контента — просто слух

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

Разработчики моделей с аудиторией до 500 000 могут опционально добавить функцию маркировки для пользователей. Для платформ с посещаемостью выше — это обязательное требование. Если ваш сайт или сервис близок к этому порогу аудитории и работает с генеративным контентом, стоит заранее продумать, как это реализовать.

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

Правительство сможет регулировать объекты и сферы, где разрешено применять только суверенные модели. Подробностей пока нет, но мы знаем, что будет поблажка. Если система уже работает к 1 марта 2027 года и данные хранятся в России, владельцы смогут использовать иностранный ИИ до сентября 2032 года. 

Отдельно закон выделяет финансовый сектор. Здесь решения Правительства должны приниматься по согласованию с Банком России. Поэтому банкам и финтех-компаниям стоит следить не только за подзаконными актами Правительства, но и за будущими требованиями ЦБ.

Некоторые вопросы остаются открытыми

  1. Какие государственные данные откроют для обучения? 

  2. Как будет работать opt-out и каким будет технический механизм отказа правообладателя?

  3. Где будут разрешены только суверенные модели и насколько широким будет этот список?

  4. Что такое достаточная «техническая возможностью маркировки»?

Если подытожить, то сейчас закон задал общую рамку, но мы все еще ждем конкретики. Пока подписывайтесь на канал «Согласен на обработку»: там я разбираю новые законы о данных, рекламе и ИИ.

Теги:
+4
Комментарии0

Возможно я не открою Америку. Но для меня это было сюрпризом. Хочу поделиться тут, чтобы для кого-то другого это не стало неприятным сюрпризом.

Купил домен, залил сервис на vps, и обнаружил, что прямое обращение возможно только через зарубежный vpn. Проверил домен через сервис РКН и с удивлением узнал, что на него наложены санкции аж с 2016 года.

Пришлось писать обращение, через форму того же РКН. Теперь ждать ответа максимум 30 дней.

Не будьте как я. Проверяйте будущий домен через сервис чёрного листа РКН.

Теги:
+3
Комментарии5

Много лет висело без откликов у меня на hh.ru резюме на вакансию «Web-реаниматор старых сайтов» и вдруг прилетела «подработка»…

У небольшой организации занимающейся разработкой очень специфичной техники есть в интернете несколько информационных сайтов на Joomla 3 и уже года 4 без каких-либо изменений, и, соответственно без необходимости иметь сотрудника для их поддержки.
И что примечательно, у этих сайтов в среднем около 1 посещения в неделю..

Но месяц назад на двух сайтах вдруг появились вместо заглавных страниц сообщения «Взломан CoupDeGrace» и «Взломан ANTONKILL».
Так у меня появилась хоть какая-то работа за последние 4 года.
Убрать заставки взломщиков оказалось достаточно просто, сложнее перекрыть дальнейшие возможности для подобных хулиганств – не представляю как удалить из работающего сайта модули Helix и Sppagebuilder, через которые происходит основной вход «хулиганов»… частично их «деактивировал».  Но наверняка есть и другие способы, про которые я тогда не знал.
Обновлять Joomla до актуальной версии занятие долгое и непредсказуемое, а потому один сайт остался жить просто почищенным от заставок «Взломан …», а их там оказалось несколько десятков, а другой достаточно быстро перелопачен в статичные html страницы.
Первый этап «реанимации» закончен и очень постепенно начался второй – поиск нового движка для сайтов. Желательно отечественного производства, с активной поддержкой, чётким MVC, а ещё и бесплатным… в общем – проблематичные условия, но несколько кандидатов нашлось, и даже лидер образовался с самым маленьким количеством проблем на входе.

Но опять возникло «НО»!
Тот сайт, что остался крутиться на Joomla был заселён несколькими бэкдорами и это обнаружилось совершенно случайно только потому, что развили очень активную деятельность и буквально подвесили виртуальный сервер с очень скромными ресурсами.

За прошедшие выходные я понял, что мои возможности уже сильно устарели и резюме на вакансию «Web-реаниматор» надо бы убрать…
Мало того, что «искусство обфусцирования» вышло за уровни моего понимания, но как можно перехватывать пересылаемый по ftp на сайт index.php и класть его в корень с уже вписанным «вирусом» - мне уже видимо не осознать.

В прошлом году на секции «Слабое звено ИБ» один выступающий рассказал о своём эксперименте по «взлому» - всего $10 долларов на оплату токенов и ВСЁ!
Про миллион за взлом «белым хакерам» можно забыть – нейросети обесценили труд этих специалистов на несколько порядков.

Любая известная и популярная CMS со средствами «web-администрирования» и самообновления уже имеет в себе «парадные ворота» для взлома и заселения всем чем захочется.

На мой «устаревший» взгляд, самым эффективным вариантом решения проблемы для подобных информационных сайтов, мне видится CMS с полным функционалом по управлению сайтом на локальном компьютере, а в «публичное пространство» выгружаются только html страницы. И только 555 для папок и 444 для файлов.

А может не всё так грустно?
Может есть уже простые решения, про которые всем кроме меня всё давно известно?

 

Теги:
+6
Комментарии5
UI
UI

Сделал S3-браузер в один HTML-файл (S3Feather)

TL;DR: один index.html, открываешь в браузере, работаешь с бакетом. Без установки и сервера. AWS, MinIO, Cloudflare R2 и вообще любой S3-совместимый. Потыкать, код.

Почему AWS Console медленная и перегруженная. Cyberduck надо ставить, на телефоне не работает. А хотелось просто открыть вкладку в браузере и перекинуть файлы, где бы ни был. Веб-приложение с бэкендом не хотел, потому что надо где-то хостить и думать про ключи. В итоге пришёл к тому, что вся логика живёт в браузере. SigV4 подписывается на клиенте, CORS настраивается на бакете, никакого прокси нет.

Как устроено Один файл: HTML, JS, CSS, логика подписи запросов. Открываешь локально или хостишь чоб было доступно везде, ну или уже захосченый - линк выше.

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

Что умеет

  • Листинг, загрузка, скачивание, удаление

  • Несколько файлов сразу в ZIP прямо в браузере

  • Presigned-ссылки для шаринга

  • Drag and drop

  • Адресная строка с s3:// и командная палитра по Ctrl+K

  • Flatten-режим: показывает всё рекурсивно плоским списком, когда помнишь имя файла но не помнишь папку

На Android качал файлы пакетами по несколько гигабайт, работает нормально.

Буду рад фидбеку, особенно от тех кто использует нестандартные S3-совместимые хранилища.

Теги:
+8
Комментарии1

Переопределение макета НЕ в шаблоне Joomla.

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

И так же мы знаем, что по классике эти переопределения кладутся в папку html активного шаблона Joomla (не важно, для админки или для пользовательской части).
Макет blog.php и blog.xml к нему из JPATH_SITE/components/com_content/tmpl/category/ мы помещаем в templates/<ВАШ_ШАБЛОН>/html/com_content/category и творим там всё, что захотим:

  • любая вёрстка в blog.php и субмакетах

  • любое название для типа пункта меню (гаражи, дачи, самолёты — каталог чего вы делаете на материалах) — в blog.xml (или samolet.php + samolet.xml).

  • любые дополнительные параметры для пункта меню на этот тип — добавьте нужные кнопки и инпуты в blog.xml

Да, это всё классика. Удобно то, что мы создаём нужный нам тип пункта меню таким образом и можем выбрать его в админке: список самолётов, список гаражей.

Если наше переопределение лежит в шаблоне, то URL при создании пункта меню будет вида index.php?option=com_content&view=category&layout=yourtemplate:samolet.

Именно так, через двоеточие: layout=yourtemplate:samolet. Joomla будет знать, что нужно залезть в нужный шаблон и взять нужное переопределение. Если мы НЕ создаём свой тип пункта меню таким образом, а просто переопределяем — то всё ок.

❓ А что будет с сайтом, если мы переключили шаблон на другой?

На старых долгоживущих проектах нередко структура пунктов меню большая и запутанная. Если мы сделали новый шаблон сайта и переключили его в админке — у нас послетают все наши переопределения. И они не будут работать до тех пор, пока мы не прощёлкаем все пункты меню и не пересохраним их. Так, чтобы в их url теперь был new-template:samolet в параметре layout.

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

Если макет лежит в папке с модулем.

  • Он работает

  • Его можно переопределить в шаблон (хотя зачем, это же наш макет)

  • Он не изменится при смене шаблона

  • ⛔️ Минус — неудобно в работе, когда все макеты разложены по своим модулям и нужно прыгать по папкам в проекте

Макеты лежат в папке html шаблона.

  • всё рядышком

  • типовой подход Joomla (хотя и предыдущий тоже типовой)

  • удобно для типовых шаблонов — сделал комплект переопределений в своём шаблоне и таскаешь из проекта в проект

  • ⛔️ неудобно, когда впереди большая работа по смене шаблона и нельзя, чтобы сразу послетало всё из‑за смены шаблона.

Я решил провести мини‑эксперимент, в целом заранее зная его результат: положить «переопределение» материала не в html/com_content шаблона, а в папку с компонентом. Точь‑в-точь как с модулями.

Оно работает. Мы создаём собственный тип вывода контента, не привязанный к конкретному шаблону. URL нашего пункта меню будет без двоеточия и имени шаблона. Просто index.php?option=com_content&view=category&layout=samolet.

И знаете, это повод задуматься о применении этой возможности, хотя раньше я бы первым закричал: «Вы что‑о-о?!?! Нельзя‑а-а!»

Когда у нас проект, где:

  • не сложная структура

  • переопределения макетов в шаблоне делаются один раз на несколько лет.

  • их (переопределений и новых типов пунктов меню) МАЛО...

..здесь положить всё в шаблон сам Бог велел.

Когда же:

  • сложная структура меню

  • в ней много разных ТИПОВ пунктов меню

  • и все они норовят зависеть от шаблона...

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

Риски есть — когда‑нибудь кто‑нибудь добавит в ядро файл с совпадающим именем. Но это решается брендированным префиксом в именах файлов.

При обновлении эти файлы не затираются — проверил сценарий обновления.

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

Теги:
+3
Комментарии0

WEB-прокси Telegram помогает клиенту, но не инфраструктуре бота

В Telegram Desktop 7.1.0 появился новый тип подключения — WEB proxy. Его уже успели описать как способ, с помощью которого Telegram может выглядеть для сети как обычный HTTPS-сайт.

Если сильно упростить официальное описание архитектуры, работает это так:

  1. Клиент сохраняет обычный MTProxy framing и шифрование.

  2. Соединения проходят через скрытый WebView внутри приложения.

  3. WebView передаёт несколько логических потоков через один или несколько HTTPS- либо WebSocket-соединений с тем же доменом.

  4. Серверный relay разделяет потоки и передаёт каждый локально запущенной официальной реализации MTProxy.

При этом relay видит только непрозрачный поток данных: он не расшифровывает содержимое и не выбирает Telegram-сервер назначения.

Указанный домен продолжает работать как обычный HTTPS-сайт. Если запрос не содержит корректного capability, вычисленного из домена и секрета WEB-прокси, посетитель получает публичную страницу. Bridge открывается только клиенту с правильными параметрами подключения.

Сейчас готовая реализация работает в Telegram Desktop. Для Android существует экспериментальный клиент, а поддержка iOS пока описана только в планах проекта.

Что это меняет для разработчика бота

Сам WEB-прокси обслуживает соединение Telegram-клиента с инфраструктурой мессенджера. Он не становится общим туннелем для всех компонентов продукта.

По-прежнему существуют отдельные сетевые контуры:

  • Telegram Desktop пользователя → WEB-прокси → Telegram;

  • сервер бота → api.telegram.org;

  • Telegram → webhook endpoint бота;

  • Mini App → домен, на котором размещено веб-приложение.

Если сервер бота потеряет доступ к api.telegram.org, результат будет зависеть от способа получения обновлений.

При long polling бот перестанет и получать обновления, и вызывать методы Bot API.

При webhook входящие обновления ещё могут приходить, если endpoint доступен извне. Однако обычные исходящие обращения к Bot API работать не будут. Есть редкое исключение: Telegram разрешает передать один метод Bot API прямо в HTTP-ответе на webhook. Но узнать результат выполнения такого метода бот уже не сможет.

WEB-прокси также не восстановит недоступный webhook и не поможет загрузить Mini App, если проблема возникла с доменом самого веб-приложения.

Это не недостаток новой технологии. Просто WEB-прокси решает задачу доступности клиента, а не отказоустойчивости сторонней инфраструктуры.

Что по-прежнему остаётся на стороне разработчика

Для long polling нужно отдельно контролировать доступность Bot API и задержку получения обновлений.

Для webhook полезно отслеживать через getWebhookInfo как минимум:

  • pending_update_count;

  • last_error_date;

  • last_error_message.

Обработку обновлений лучше делать идемпотентной: если webhook отвечает кодом вне диапазона 2xx, Telegram повторяет доставку. А слепой повтор исходящих методов вроде sendMessage, наоборот, способен создать дубли.

Получается, фраза «Telegram у пользователя открылся» ещё не означает, что бот, webhook и Mini App тоже работают.

Подскажите, держите ли для Bot API резервный egress или HTTPS-прокси? И состояние webhook вы контролируете через getWebhookInfo или ограничиваетесь метриками самого приложения?

Теги:
+3
Комментарии0

Всем привет! Меня зовут Роман, я фронтенд разработчик. Недавно обзавелся участком и столкнулся с большим объемом данных/документов.

Пример проблем:

  • Выписка ЕГРН, ГПЗУ, данные по скважине/септику/щитку, планы, договора, все данные были разбросаны по телефону: фото, файлы, заметки и т.д.

  • Какой фильтр стоит на скважине (дата установки, инструкция по обслуживанию, параметры)

  • Кто и когда ставил ВРУ/трубостойку (контакты)

Решив заняться сортировкой понял: заметки/папки в телефоне это неудобно, а приложения, которое бы точечно решало проблему - не нашел. Поэтому решил создать свое.

Критерии приложения:

  • для мобильных устройств

  • не требует подключения к интернету

  • закрывает все разделы по хранению данных касательно дома/участка.

Критерии по разработке - простота и скорость, отсюда следующее:

  • Стек - ts, zustand, expo.

  • Архитектура - feature first.

  • БД - sqlite + drizzle (indexedDB для web)

  • Бэк не делаю, все данные храню локально.

Релиз

После создания MVP и всех своих «хотелок» решаю открыть приложение для всех. Для этого добавляю аналитику Aptabase, формы обратной связи, создаю фотокарточки тут (много шаблонов, бесплатно 1 или 3 экспорта в месяц), придумываю название/лого. Иду публиковать в Google Play и App Store и сталкиваюсь с ограничениями, которые сильно усложняют публикацию при регистрации в Крыму. Расстраиваюсь. Изучаю проблему и ищу обходные пути. Понимаю, что безопаснее и проще будет перейти на PWA. После рефактора под PWA, публикую web версию, публикую Android версию в RuStore, а для iPhone..., инструкцию по созданию ярлыка.

Бизнес-план

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

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

Состояние приложения на данный момент

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

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

Спасибо за прочтение!

Теги:
+4
Комментарии3

Wildberries выпустила собственный мессенджер WB Chat

У Wildberries появился собственный мессенджер WB Chat. Приложение уже доступно пользователям на Android и iOS, а авторизация проходит через WB ID.

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

Набор функций тоже постепенно расширяется. Сейчас WB Chat позволяет:

  • отправлять сообщения, фото, видео и файлы;

  • пересылать сообщения и отвечать на них;

  • использовать реакции, эмодзи и стикеры;

  • создавать публичные и приватные группы и каналы;

  • закреплять важные сообщения;

  • искать людей, чаты и сообщения;

  • совершать аудиозвонки;

  • расшифровывать голосовые сообщения в текст.

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

При этом проект пока активно развивается. Например, в последних версиях разработчики отдельно сообщают об исправлениях синхронизации, работе контактов, медиафайлов, звонков и повышении стабильности приложения.

В Google Play приложение опубликовано компанией WB FZE, зарегистрированной в Hamriyah Free Zone в эмирате Шарджа, ОАЭ. На момент проверки там указано 1 тыс.+ скачиваний.

Есть и отдельный момент, на который стоит обратить внимание перед регистрацией: в информации Google Play разработчик указывает, что приложение может собирать фотографии и видео, файлы и документы, а также передавать некоторые категории данных третьим сторонам. При этом передача данных заявлена как шифруемая.

Скачать WB Chat для Android можно через Google Play, для iPhone и iPad — через App Store. Также заявлена веб-версия WB Chat.

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

✔ Код — журнал о технологиях https://t.me/kodjournal подпишитесь на наш Telegram-канал! 😎

Теги:
0
Комментарии2

Регистрацию на иностранных сайтах по номеру телефона убрали из «Антифрод 3.0»

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

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

Что планировали изменить

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

Если бы норма сохранилась, такие платформы должны были бы:

  • использовать номер телефона как обязательный способ авторизации пользователей в России;

  • хранить сведения о регистрации, входе и удалении аккаунтов в течение трёх лет;

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

Теперь этих положений в новой редакции проекта нет.

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

Почему от требования могли отказаться

Главная проблема — техническая и юридическая реализация такой схемы на иностранных платформах.

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

Гендиректор Telecom Daily Денис Кусков считает исключение нормы разумным именно по этой причине. Независимый аналитик Алексей Бойко также обращает внимание на риск, что зарубежной платформе может оказаться проще ограничить работу в России, чем создавать отдельную систему авторизации для российских пользователей.

«Антифрод 3.0» ещё меняется

О подготовке третьего пакета мер против кибермошенничества объявили в апреле 2026 года. Законопроект планируют внести в Госдуму осенью.

Причём требования к иностранным ресурсам уже успели измениться: ещё в конце июля «Ведомости» сообщали о проекте, в котором обязательная авторизация по номеру телефона присутствовала.

Пока окончательный набор мер не утверждён, поэтому пользователям иностранных сайтов не стоит воспринимать исключённую норму как уже принятое решение или окончательную отмену каких-либо требований. Финальная редакция «Антифрод 3.0» может ещё измениться.

Теги:
+3
Комментарии1

Как мы провели второй день Летнего ТехФеста

На площадке Nexign был максимально инженерный день. Ни грамма AI, только бэкенд, цифры и оптимизация. Слушали два доклада про экономику кода и производительность, а потом разбирали реальные кейсы на живом круглом столе.

Смотри влог, чтобы погрузиться с головой в этот вечер.

P.S. В нашем TG-канал рассказываем о технических мероприятиях и конференциях, делимся выступлениями экспертов, обсуждаем подборки на технические и ИБ темы.

Теги:
+3
Комментарии0

Какие уникальные фичи есть в django-modern-rest?

Иногда, когда я добавляю какие-то фичи в мой https://github.com/wemake-services/django-modern-rest (можно ставить ⭐), то я думаю про себя: почему таких фичей больше нет нигде? 

Давайте сегодня посмотрим на них. А вы мне расскажите свое мнение в комментах.

Семантическая схема 

Допустим, вы навесили на какой-то свой endpoint auth: 

class UserController(Controller[MsgspecSerializer]):
      @modify(auth=[JWTAsyncAuth()])
      async def get(self) -> User: ...

В OpenAPI автоматически появятся все коды ошибок, которые могут случиться в auth (401).
Ничего не надо допом писать. И так происходит со всеми частями фреймворка: добавил throttling=[SyncThrottle(1, Rate.minute)]? Теперь у тебя в ответах автоматом 429. Если нужно, можно отключить любые семантические статусы. 

Не должно ли такое быть дефолтом везде?

Умные типы ошибок

Не уходя далеко: как кастомизировать формат ошибки, например, в FastAPI? Через боль. Как поменять в спеке формат? Руками.

В DMR мы просто добавили везде error_model как параметр. Можно заменять любые ошибки, все автоматом сконвертится и покажет правильную схему. Зачем? Хочешь Problem Details - используешь. Хочешь свой формат - реализуешь. Можно даже content negotiation на ошибки навесить.

Почему никто о таком не думает в других фреймворках?

Нормальный throttling

Фича, которая принесла мне больше всех боли. Я прочитал throttling реализации во всех фреймворках. В Litestar даже фиксы присылал

1. Почти нигде из коробки нет поддержки разных алгоритмов, бекендов, иногда даже cache-keys. Очень жаль, есть только обычный counter с бекендом в памяти
2. Нигде (пришлите в комменты контр-пример) нет разделения на throttling до auth и после. Почему такое вообще важно? Чтобы не заддосить auth. И чтобы иметь возможность выдавать per-user правила. Нужны и важны оба варианта
3. Кастомизация заголовков ответа? Ха!

Что? Почему?

Простое переиспользование кода

Когда я смотрю на АПИ разных DRF проектов или FastAPI, мне становится больно. FastAPI строит все на view функциях, которые нельзя нормально кастомизировать. А DRF строит все на импортах строк внутри настроек. А как на счет классов и наследования?

У нас подобное сделано как абстрактные generic классы. Например: получить JWT. Можно выбрать любой сериализатор, можно выбрать любые модели для запроса и ответа:

class RequestPayload(pydantic.BaseModel):
     username: str
     password: str

class ResponsePayload(pydantic.BaseModel):
     access: str
     refresh: str

class ObtainAccessAndRefreshSyncController(
    ObtainTokensSyncController[
        PydanticSerializer,
        RequestPayload,
        ResponsePayload,
    ],
): ...  # надо еще переопределить 2 метода

Все типизировано, документировано, очевидно. 
Как вы думаете, почему так больше никто не делает?

Внешние вьюхи

Интегрировать один фреймворк в другой - крайне сложно. Вот мы недавно даже стрим проводили, потому что не могли использовать dj-rest-auth из DRF. Так быть не должно.

Теперь в DMR можно использовать любые внешние Django View. Хоть DRF, хоть django-ninja, хоть ванильные вьюхи. И отображать любой внешний OpenAPI. Вот настолько просто:

raw_schema = read_openapi_yaml('openapi.yml')
router = Router(
    urls=[
        external_path(
            'number/', number, name='number',
            openapi=load_schema(raw_schema['paths']['/api/number'], PathItem),
        ),
    ],
)

Почему другие фреймворки не стараются вписать существующие решения?

Одной строкой

- Больше подобного у меня в тегеграм канале "Находки в опенсорсе": https://t.me/opensource_findings
- У нас есть еще куча других крутых фичей! Заглядывайте в наш чатик по DMR
- Релизнули django-stubs@6.1 с поддержкой django@6.1
- Сделали папку с крутыми каналами ребят из нашего Python сообщества. Смело можно закидывать коллегам как базовую папку "на кого подписаться в тг по питону". Внутри все мои друзья и коллеги, советую!

Теги:
+10
Комментарии2

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

oishiso.jp — иллюстрации в стиле вкусной еды и кулинарии;

irasutoya.com — бесплатные иллюстрации на самые разные темы;

enpitsu-sozai.com — тёплые иллюстрации в стиле карандашных рисунков от руки;

nawmin.stores.jp — сельхозпродукты, фермерство и деревенская жизнь;

vectorshelf.com — качественные векторные иллюстрации в стиле ручной рисовки, есть AI, PNG и SVG;

loosedrawing.com — простые линейные рисунки с возможностью менять цвет прямо на сайте;

storyset.com — векторные иллюстрации для презентаций и веба с настройкой цвета и анимации;

openpeeps.com — рисованные персонажи, которых можно собирать в разных комбинациях;

undraw.co — чистые векторные персонажи в стиле IT и стартапов с настройкой цвета;

illustrations.run — наборы открытых векторных иллюстраций на разные темы

Теги:
+3
Комментарии0

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

Совет по Joomla: Как сделать ссылки на списки сущностей Joomla с фильтрацией?

Стандартная форма фильтрации в админке Joomlа
Стандартная форма фильтрации в админке Joomlа

В Joomla в любом списке сущностей есть параметры поиска, которыми мы привыкли пользоваться руками в админке. Но что если вам нужно сделать ссылку на список в админке с заранее заданными параметрами фильтрации?

Например:

  • разработчик хочет дать ссылку на плагин для быстрого перехода к настройкам;

  • разработчик хочет в документации для контент-менеджера дать ссылку на нужные модули, плагины, о которых идёт речь;

Админка Joomla поддерживает фильтры в URL-адресе, а названия GET-параметров для фильтрации можно посмотреть в названиях полей фильтров админки.

Например, в списке плагинов поле фильтра:

  • выбор состояния - filter[enabled]=1 или 0

  • выбор типа (группа плагинов) - filter[folder]={название группы плагина, например content или system}

  • element плагина (уникальное систеное имя) - filter[element]={element}

  • уровень доступа, с которым работает плагин - filter[access]={числовой-код-уровня-доступа}

  • строка поиска - filter[search]={любой%20текст%20для%20поиска}

Таким образом, чтобы дать ссылку на свой плагин в админке можно сделать следующий url:

https://your-joomla-site.ru/administrator/index.php?option=com_plugins&view=plugins&filter[element]=wtotpravkapochtaru&filter[folder]=system

Аналогичным образом работает список модулей, контактов, материалов и т.д. Найти имена параметров можно либо в HTML-коде страницы, либо в XML-форме опций фильтра нужного компонента. Для списка плагинов используется компонент com_plugins, а форма фильтра лежит в administrator/components/com_plugins/forms/filter_plugins.xml. Для списка материалов Joomla - в administrator/components/com_content/forms/filter_articles.xml. Другие компоненты - ищем по анналогии.

Чат русскоязычного Joomla-сообщества в Telegram и в Max.

Теги:
+3
Комментарии0

Пользователь заработал $120 тыс., размещая рекламу на виртуальном унитазе. Он взял 3D‑модель обыкновенного унитаза, повесил там счётчик донатов и добавил рекламу всякого криптоскама на крышку и ободок (там им и самое место). При этом собранных денег автору проекта оказалось мало — он планирует получить за такой перфоманс миллион долларов.

Теги:
+2
Комментарии0

ElegantGPT

Начал значительно чаще пользоваться ChatGPT, так как на GPT-5.6 Sol High качество ответов стало меня устраивать. Вдобавок, он по умолчанию работает примерно в том же стиле, что и Perplexity Computer. Только нет никаких дурацких кредитов.

Единственное, что меня серьёзно напрягало – это то, как выглядел чат. Чёрный фон, полная депрессия. Поэтому сделал свою тему. Естественно, частично наследовал Base16 Dark и поставил любимое семейство IBM шрифтов.

Читаемость повысилась. С чатом стало приятнее работать. Кстати, предыдущую тему для Habr я тоже переработал.

Тема бесплатная, устанавливается через Stylus (Firefox / Chrome).

Теги:
+3
Комментарии1

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

Привет! Я Рома Игнатович, лид фронтенд-разработки в Далее. Обычно задача «ускорить сайт» без конкретики превращается в перебор гипотез вслепую. PageSpeed тут не спасет, потому что он показывает только симптомы — например, низкую скорость загрузки, нестабильную вёрстку, задержку кликов, — но не причины. За одинаковыми цифрами может стоять что угодно, от тяжёлых картинок до медленного бэкенда. Поэтому вместо точечных проверок я использую аудит фронтенда — он сразу сужает область поиска и помогает быстро составить план по доработкам.

Как проходит аудит

Смотреть можно без доступа к коду, во вкладке Performance в DevTools. Берём ключевой сценарий (например, флоу покупки) и записываем performance trace: скролл, клики, переходы, ввод — ищем долгие таски, блокировки потока, просадки анимаций. Параллельно смотрим Network waterfall (какие запросы блокируют остальные), рантайм и три метрики Web Vitals: LCP, TTFB, CLS. Для мультирегиональных продуктов пригодится WebPageTest — показывает поведение сайта из разных точек и с разным качеством соединения.

В Performance можно отслеживать пропущенные фреймы, тяжелые анимации и нагруженность каждого участка флоу
В Performance можно отслеживать пропущенные фреймы, тяжелые анимации и нагруженность каждого участка флоу

Проверять стоит не только на мощной машине: CPU throttling (4–6x) имитирует медленное устройство и вскрывает лаги, а network throttling на 3G/4G показывает, насколько критичны тяжёлые изображения и порядок загрузки. Сценарии прогоняем дважды — в норме и с throttling; если с throttling сайт деградирует критично, это уже не техдолг, а прямые потери конверсии.

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

Типичные проблемы и варианты их решений

Загрузка и контент:

  • весь код в одном бандле → браузер грузит и парсит всё сразу, плюс изображения по 20–30 МБ. Фикс: разбить на смысловые чанки, грузить по страницам и сценариям;

  • устаревшие форматы вместо WebP/AVIF, нет адаптивных размеров (srcset), грузятся элементы за пределами вьюпорта. Фикс: современные форматы + lazy loading;

  • высокий TTFB значит, что тормозит бэкенд, высокий LCP может быть где угодно. Фикс: проверяем бэкенд, настраиваем отправку первичного запроса при монтировании страницы.

Интерфейс и рендеринг:

  • расчёт анимаций на CPU вместо GPU, свойства вроде width/height/top/left вместо transform — браузер пересчитывает layout. Фикс: transform/opacity, но без перебора с will-change;

  • main thread перегружен синхронными операциями и тяжёлыми вычислениями. Фикс: распределять задачи параллельно, выносить тяжёлые операции из основного потока;

  • layout shift — не зарезервировано место под контент, не заданы размеры изображений и блоков. Фикс: фиксировать размеры заранее, skeleton-заглушки.

От аудита к бэклогу

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

  • интерфейс подвисает при открытии карточки → долгие JS-задачи → разбить выполнение;

  • анимация лагает → расчёты идут на CPU → перевести на GPU через transform;

  • страница долго грузится → тяжёлые изображения → оптимизировать формат и размер.

У любой оптимизации — измеримая цель: например, LCP < 2.5 с, CLS < 0.1, снижение веса страницы на 30–40% и т. п.

Из действий собираю план: задачи ранжирую по эффекту и затраченным ресурсам — в приоритете то, что влияет на ключевые сценарии, конверсию и быстро чинится.

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

Подробнее обо всех этапах пишу в большой статье на Workspace: читать здесь.

Теги:
+4
Комментарии0

Открытый проект .MD this page позволяет преобразовать веб-страницу в чистый Markdown, готовый для ChatGPT, Claude, Gemini и других нейросетей. Решение очищает код сайта от рекламы, баннеров и другого мусора для отправки на обработку в ИИ. Есть предпросмотр, экспорт в .md и опция для мгновенного копирования сайта.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии1

Перенёс пет-проект с хоумсервера в облако. Что удивило:

Года два держал несколько ботов и сервисов на старом ноуте. Работало. Но надоело: отключение света, перегрев летом, динамический IP, ngrok который иногда падал.

Решил переехать в Яндекс Облако. Думал займёт выходные. Занял три выходных.

Не потому что сложно. Потому что пришлось разобраться с вещами которые дома работали сами собой.

Secrets. Раньше у меня токены лежали в .env файле. В облаке сразу захотелось сделать через Lockbox. Потратил конечно же время, но теперь не страшно что репозит случайно станет публичным.

CI/CD. Дома деплой был «зашёл по SSH, git pull, перезапустил». В облаке настроил GitHub Actions: пуш в main - автоматически собирается образ и обновляется сервис. Первый раз в жизни сделал нормальный пайплайн. Оказалось не так страшно как казалось.

Мониторинг. Дома я узнавал что бот упал когда кто-то писал «почему не работает». Теперь есть алерты. Мелочь, но разница ощутимая.

Стоимость для пет-проекта маленькая, несколько сотен рублей в месяц на небольшой инстанс. Для хоббийных вещей вполне ок.

Какие ещё подобные решения есть?

Теги:
Всего голосов 2: ↑2 и ↓0+5
Комментарии0

Как я устал от бардака в «Избранном» Telegram и за два вечера запилил бесплатную интерактивную доску (без регистраций и СМС)

Всем привет!

Хочу поделиться историей о том, как лень и раздражение в очередной раз победили систему и заставили меня сесть за код.

Думаю, у многих из вас Telegram давно превратился в помойку из сотен каналов. Полезные статьи, гайды, рецепты, мемы, рабочие задачи — всё это мы обычно скидываем в «Избранное» (Saved Messages). И что происходит дальше? Правильно, «Избранное» превращается в черную дыру. Найти там что-то через неделю — это квест уровня «Индиана Джонс».

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

Мне это надоело. Я хотел простой инструмент: нашел на смартфоне -> скинул боту -> открыл на компе в виде красивых карточек. Посмотрел готовые сервисы — везде просят регистрацию, привязку карт, вылезает реклама или ограничения на 10 постов.

В итоге я психанул, выделил два вечера и написал свой костыль, который неожиданно превратился в отличный инструмент — TG-drop.ru.

Как я это устроил (без заумной архитектуры)

Система работает на связке «бот + база данных + веб-интерфейс». Всё гениальное просто:

  1. Вы листаете Telegram на телефоне и видите важный пост (гайд, чек-лист, статью).

  2. Пересылаете его моему боту. Бот мгновенно подхватывает его и сохраняет в изолированную таблицу.

  3. Вечером вы садитесь за ПК, открываете сайт, вводите свой Telegram ID (он нужен только как ключ, чтобы сайт понял, чьи посты показать) — и перед вами удобная интерактивная доска.

Почему это удобнее, чем просто Telegram?

Я делал проект для себя, поэтому сразу вырезал всё, что меня бесит в современном вебе:

  • Никаких регистраций вообще. Никаких вводов почты, подтверждений по SMS и придумывания паролей «с одной заглавной буквой и спецсимволом». Ввел ID — работаешь.

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

  • Личные заметки прямо на карточках. Можно дописать к посту дедлайн, свои мысли или вычеркнуть выполненные пункты. Текст сохраняется автоматически, как только вы убираете курсор из поля.

  • Конфиденциальность. Ваши посты подгружаются динамически. Никто другой вашу доску не увидит.

Кому это пригодится?

Изначально я думал о ребятах из крипты (охотники за Airdrop, тестнеты, DeFi-инвесторы), которым нужно по пунктам выполнять сложные активности с ПК, найдя их в мобильном телефоне.

Но в процессе понял, что штука закроет боли многих:

  • Контент-мейкеров и исследователей: собирать выжимки, инсайты и референсы в одном месте.

  • Студентов: скидывать материалы для курсовых и дипломов, чтобы потом структурировать на десктопе.

  • Да и вообще всех, кто использует Telegram как базу знаний и устал от хаоса в «Избранном».

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

Буду рад здоровой критике в комментариях! Чего вам не хватает в таком функционале? Что стоит добавить в первую очередь?

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии13
1
23 ...