Обновить
714.93

Python *

Высокоуровневый язык программирования

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

Notte CLI: автоматизация браузера и развёртывание функций прямо из терминала

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

Notte — платформа для автоматизации браузера. Недавно мы выпустили CLI, который позволяет управлять браузерными сессиями, запускать AI-агентов, извлекать структурированные данные и развёртывать функции автоматизации — всё это прямо из терминала.

В этой статье разберём, что он умеет и как устроен.

Какую проблему мы решали

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

Notte CLI подключается напрямую к облачным браузерным сессиям. Браузер запущен не у вас — он работает у нас. Это означает, что то, что вы делаете в терминале, в точности совпадает с тем, что будет работать в продакшне.

Как работают сессии

Весь CLI построен вокруг сессий. Сессия — это живой экземпляр браузера (headless или headed), запущенный в облаке.

Запустить её можно так:

notte sessions start --headless

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

При запуске сессии поддерживается широкий набор настроек: кастомные viewport'ы, user agent'ы, ротация прокси, решение капч, файловое хранилище, переопределение CDP URL и сохранение профиля браузера.

Видимость

При запуске headless-сессии в выводе появляется viewer URL. Откройте его в браузере — и вы наблюдаете за живой сессией в реальном времени, пока команды выполняются в терминале. Удобно для отладки без переключения в отдельный интерфейс.

Читать далее

Новости

Генерация лабиринтов с использованием алгоритма Recursive backtracker

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

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

Читать далее

Как устроены задачи (Task) в asyncio

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

В прошлой статье мы разобрали механику событийного цикла asyncio.

В этот раз поговорим о задачах, объектах класса asyncio.Task (они же по‑простому «таски»). Тема важная, потому что по сути вся работа событийного цикла сводится к постоянному жонглированию задачами: запустить, приостановить, разбудить, завершить. Если понять, как устроена таска изнутри, изрядная доля магии asyncio (как и нелюбви к нему) исчезнет.

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

Погружаемся

Как я сделал автоматический перевод постов у себя в блоге с помощью ChatGPT

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

Я регулярно выкладываю посты в блог НормЦРМ. На двух языках: русском и английском.

Написал пост, придумал заголовок. Тут всё просто. А дальше неприятный процесс. С помощью ИИ перевести пост на английский — и перенести перевод в блог. А ещё сгенерировать мета-данные и og-данные (это для поисковиков и мессенджеров), тоже перевести их на английский и руками поставить в нужные поля.

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

Сейчас расскажу во всех деталях, как именно это реализовано. Вдруг вы тоже так захотите?

Читать далее

Я дал 100 AI-агентам равный бюджет — они изобрели кредиты под 15%

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

Дал 100 AI-агентам по 1000 токенов и одну цель — набрать максимум очков. Не программировал ни торговлю, ни кредиты, ни специализацию. Через двое суток агент №23 попросил у агента №91 займ под 15%. К 72-му часу — три банкира, 12 банкротов и коэффициент Джини 0.71. Внутри — код на Python, логи, распределение ресурсов. И честный разбор того в чем я до сих пор не уверен.

Читать далее

AutoCraft 1.1.8: веб-панель для управления ПК и сервисами без привязки к Telegram

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

Как запустить веб-панель в AutoCraft-Bot 1.1.8
Ниже простой сценарий запуска без обязательной настройки Telegram. Это удобно, если нужна именно веб-панель и вы хотите сначала проверить её отдельно.
Запустите AutoCraft-Bot 1.1.8.
Данные для работы с Telegram можно сразу не заполнять.
Откройте раздел «Функции».
Зайдите в «Настройки веб-панели».
В поле пароля администратора задайте свой пароль и нажмите «Сменить пароль».
При необходимости включите галочку автозапуска веб-панели.
Нажмите «Запустить панель».
Нажмите «Показать адрес» и откройте указанный адрес в браузере.
Есть и второй вариант: в основном окне AutoCraft есть кнопка «Открыть панель». Если панель уже запущена, браузер откроется сразу. Если не запущена, сначала нужно запустить её из настроек веб-панели.
Логин и пароль
По умолчанию логин администратора:
admin
Пароль:
либо сгенерированный системой;
либо тот, который вы установили вручную в настройках веб-панели.
Почему я сделал отдельный веб-интерфейс
Telegram-управление в AutoCraft никуда не делось, но на практике мне пришлось развивать отдельный веб-контур. Одна из причин это нестабильная ситуация с доступом к Telegram в России и связанные с этим ограничения по рабочим сценариям.
В итоге веб-интерфейс оказался не просто «обходным вариантом», а в ряде задач даже удобнее:
лучше подходит для длительной работы;
удобнее для ролей и разграничения прав;
проще для аудита и просмотра журналов;
естественнее для многосекционного интерфейса (таблицы, разделы, формы, администрирование).
Ограничения и текущие нюансы

Читать далее

Первые мысли питониста о Си на примере игры «камень-ножницы-бумага»

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

Привет, Хабр! Недавно я задумался: Python — не единственный инструмент, которым я хочу оперировать в своих инструментах. Python, понятно, легко освоить и он применяется везде, но язык-то не идеальный! Ресурсов требует много, да и время выполнения не ахти, а учитывая нынешние темные времена... Мне нужно что-то получше. В общем, тут я вздумал попробовать Си.

Читать далее

Три аккаунта ChatGPT и один прокси: как перестать следить за лимитами

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

У меня три ChatGPT-аккаунта. На каждом свои лимиты, своя история, свои причины существовать. И на каждом они кончаются в самый неподходящий момент.

Переключаться вручную то ещё удовольствие. Особенно когда работаешь через Codex CLI или OpenCode и хочешь просто писать код, а не следить за тем, на каком аккаунте сейчас крутится запрос.

Именно под эту боль и написан codex-lb.

Читать далее

Авторизация 2026: Почему вам больше не нужна форма регистрации (и как внедрить Яндекс ID, VK и Google)

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

На дворе 2026 год. Нейросети пишут за нас тесты, холодильники сами заказывают продукты, а пользователи... пользователи всё так же ненавидят придумывать пароли.

Давайте честно: если ваш пет-проект или стартап сегодня встречает юзера формой Email + Пароль + Повторите пароль, вы теряете конверсию. Никто не хочет запоминать очередной набор символов для "очередного сервиса". Все хотят одну кнопку: "Войти как...".

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

Читать далее

3D-Packing на стероидах: как запихнуть 200 000 объектов в «Левиафана» и не вылететь по MemoryError

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

Если вы следили за моими предыдущими статьями, то знаете, что я одержим скоростью в задачах оптимизации.Сначала была «точка»: мы приручили задачу коммивояжера (TSP), решив её векторным способом — 10 000 точек за 0.4 секунды. Затем была «топология»: мы усложнили мир, победили злую спираль и упрямый трилистник, научились работать с графами (искать тупики) и упаковали 45 000 стандартных контейнеров в трюм, учитывая LIFO, весовые лимиты и еще 4 критических параметра. Тогда наш воркер на FastAPI + Redis справлялся за 2 минуты. И вот подошли к царь-задаче Упаковка разногабарита. Результатом этой работы станет публичный API. Логика простая: вы отправляете JSON с параметрами груза и склада (нужен ли обсчет крена, лимиты по весу, LIFO), а на выходе получаете готовый план загрузки. Но чтобы этот API не «висел» под нагрузкой, мне нужно было решение, которое работает не минуты, а доли секунды. Результатом этой работы станет публичный API. Логика простая: вы отправляете JSON с параметрами груза и склада (нужен ли обсчет крена, лимиты по весу, LIFO), а на выходе получаете готовый план загрузки.

Читать далее

Внутреннее устройство веб-сервера. Часть 1: От syscalls до WSGI

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

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

Читать далее

Связывание абстрактных классов со свойствами в python

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

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

В материале можно посмотреть, как изящно связать свойства  и абстрактные классы с реализацией принципа DRY .

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

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

Абстрактные методы - методы с декоратором @abstractmethod, которые обязаны быть реализованы в дочерних классах.

Абстрактный класс может содержать как обычные, так и абстрактные методы.

Свойство - реализуется через декораторы @property (для чтения) и @<name>.setter (для изменения и валидации) обеспечивая инкапсуляцию, делая API удобным, при этом позволяя менять внутреннюю реализацию без изменения внешнего кода.

Читать далее

CDC Consumer с криптографической подписью: от Kafka до Hive

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

Шестая статья цикла о построении CDC-пайплайна с нуля. Данные уже текут из PostgreSQL в Kafka, но дальше просто исчезают по retention. Сегодня пишем Consumer на Python, реализуем криптографическую верификацию сообщений и строим трёхслойную архитектуру данных.

Читать далее

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

FastAPI на AMD FX-8320: оптимизация P99 latency в условиях ограниченных ресурсов (HDD, DDR3)

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

В 2026 году асинхронный Python уже никого не удивляет. Мы привыкли к автоскейлингу в облаках, но что делать, если ваш бюджет на инфраструктуру равен нулю, а в распоряжении есть только «печка» из 2012 года? Рассказываю про личный опыт выжимания максимума из FastAPI на AMD FX-8320: от тюнинга ядра Linux и PostgreSQL до миграции на Ed25519 и использования Rust-сервера Granian.

Читать далее

От RLHF к DPO и дальше: как мы разучились бояться и полюбили выравнивание LLM

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

В 2022 году существовал ровно один способ сделать языковую модель «хорошей» — RLHF. Один. Если вы хотели, чтобы ваша LLM отвечала адекватно и хотя бы делала вид, что понимает вопрос, — вам нужны были армия аннотаторов и бюджет уровня OpenAI.

Четыре года спустя у нас зоопарк из десятка методов выравнивания, половину из которых можно запустить на одной RTX 4090 за выходные. DPO убрал reward model. SimPO убрал reference model. GRPO и DeepSeek R1 доказали, что RL жив — но в новой форме. Anthropic опубликовала конституцию Claude на ~80 страниц в открытом доступе и сменила парадигму: от правил к причинам.

Мир изменился. Разбираемся, как именно.

В статье — полная история пост-обучения от RLHF до Constitutional AI, математика ключевых методов (в спойлерах, без боли), рабочий код на TRL + QLoRA с гиперпараметрами, большие сравнительные таблицы и дерево решений «что выбрать для вашей задачи». Плюс честный разговор о проблемах, о которых не пишут в туториалах: distribution mismatch, reward hacking, catastrophic forgetting и почему модели умеют «притворяться» выровненными.

Для разработчиков, ML-инженеров и всех, кто хоть раз открывал Hugging Face и думал: «а что если я это fine-tune...»

Читать далее

M23-Spectrum: инициализация весов нейросети через теорию групп Матьё

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

Когда мы говорим об обучении глубоких нейронных сетей, первое, о чём думают — это архитектура, функция потерь, learning rate. Инициализация весов кажется скучной технической деталью: «ну Xavier/He поставил и забыл». Но за этой простотой скрывается фундаментальная проблема.

Xavier (Glorot, 2010) и He (2015) инициализируют веса из случайных распределений с дисперсией, масштабированной под размер слоя. Это работает хорошо для неглубоких сетей, но с ростом глубины возникает системная проблема: спектральный радиус матрицы весов отклоняется от 1, и сигнал либо затухает, либо взрывается при прохождении через десятки слоёв.

Динамическая изометрия — концепция, которая говорит: чтобы сигнал сохранялся, нужно $\rho(W) \approx 1$ на каждом слое. Добиться этого статистически сложно, особенно стабильно. Но что если взять структуру, где это гарантировано алгебраически?

Читать далее

Как я снизил WER с 33% до 3.3% для русской речи на CPU: сравнение GigaAM, Whisper и Vosk

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

За два месяца я перепробовал три ASR-движка, шесть моделей Whisper, адаптивное чанкование, T5-коррекцию и ансамблевое голосование — и большая часть идей оказалась тупиком. В статье — подробный разбор шести тупиков и одной находки: почему GigaAM от Сбера на обычном CPU показывает 3.3% WER на русском, обходя Whisper large-v3-turbo на RTX 4090 (7.9%) в 2.4 раза. С бенчмарками, кодом и честными оговорками.

Читать далее

Метрики для задач NLP. Часть 2. Генерация текста: BLEU, ROUGE, METEOR, BERTScore

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

В этой статье будет рассказано о популярных метриках оценки для задач генерации текста: BLEU, ROUGE, METEOR, BERTScore. Рассказ будет сопровождаться визуализацией, примерами и кодом на Python.

🔥 Начинаем 🔥

Garbage Collector: жизнь без иллюзий

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

Когда мы говорим о сборщике мусора, мы часто ограничиваемся фразой «он удаляет неиспользуемые объекты», однако в реальности GC — это сложнейшая система, которая взаимодействует с виртуальной памятью, потоками, стеком, регистрами и графом ссылок, и без понимания этих взаимодействий невозможно осознанно писать высоконагруженные приложения. В этом материале мы сосредоточимся именно на GC, рассматривая его не как магию runtime, а как конкретный набор алгоритмов и инженерных компромиссов. За каждой строкой new, за каждой локальной переменной и за каждым вызовом функции стоит конкретная архитектура процессора, виртуальная память операционной системы и довольно агрессивная инженерная математика сборщика мусора. Чтобы действительно понимать GC, необходимо начать не с него, а с того, на чём он стоит — с регистров, стека и кучи, поскольку именно они формируют корневую модель, на которую опирается любой современный runtime.

Перед тем как мы начнем давайте разберемся в типах хранилищ памяти и как они работают:

Читать далее

Область видимости в Python: LEGB и подводные камни

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

Работа с переменными в Python кажется очевидной до тех пор, пока код не начинает вести себя неожиданно. Ошибки с UnboundLocalError, странное поведение замыканий или некорректная работа global и nonlocal - всё это следствие непонимания области видимости.

В Python действует чёткое правило разрешения имён - LEGB. Разберёмся, как оно работает и какие ловушки скрываются под капотом.

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