Обновить
512K+

Python *

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

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

Посмотрел недавно видосик про «убийцу Rust» — Гуся. Там заявления, что он быстрее Rust и плюсов, бенчмарки, всё такое. Автор прогнал свои тесты — Гусь у него проиграл, как и ожидалось, можно было даже не проверять 😂

И мне стало интересно: а как это всё будет работать на Питоне?

В первом примере числа генерируются через xorshift, а потом считается их сумма. Написал свой вариант на Питоне, запустил — очень медленно.

Сначала подумал, что это я где-то накосячил. Написал отдельный бенч, погонял разные разрядности. Оказалось, всё я делаю правильно. Питон действительно медленный (хотя чего я ожидал). Я-то думал: бл*дь, ну хотя бы такая числодробилка должна работать побыстрее. Но… нет.

Ладно, пошёл смотреть, на что он вообще тратит время. Прогнал через perf, открыл флеймграф — long_bitwise сжирает больше 60% времени моего бенча. И это на сборке с PGO и LTO, если что.

Полез в исходники. Заглянул в long_bitwise, а там временные аллокации, лишние проходы по разрядам — в общем, есть что убирать. Решил поковырять.

Сделал первый фикс. На остальных бенчах всё стало быстрее, на xorshift для 32 бит — наравне с main. А вот на 64, 128 и 256 бит результаты плавали и местами были чуть хуже. Совсем чуть-чуть, но медленнее — это всё равно медленнее. Так оставлять не хотелось.

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

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

И помогло. На xorshift для 32, 64, 128 и 256 бит теперь тоже быстрее: от 1,01× до 1,05×, то есть примерно на 1–5%. Немного, но уже в нужную сторону. На остальных бенчах ускорение сохранилось, регрессий в моих прогонах не осталось.

В итоге открыл ишак в CPython

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

Очередной вайбкодинг-проект. С небольшим нюансом.

Для начала — немного о моём бэкграунде. Я сервисный инженер с 18-летним стажем. Инженер не в том значении, которое стало особенно популярным в последнее время, а тот самый, такой слесарь Михалыч с завода, только с двумя незаконченными высшими и техническим английским. Инструментарий у меня — не Python, venv и VS Code, а вполне осязаемые ключи, отвёртки, мультиметры и прочие осциллографы.

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

Вообще у Михалычей это любимое развлечение — делать себе специальные инструменты. Рекомендую старые выпуски Доктора Дью: в них раскрывается вся глубина таких развлечений. А раз появилась идея, надо её реализовать.

Пойти я решил следующим путём: подключить к ESP32 набор датчиков, собирать с них данные и отображать всё через веб-интерфейс. Каких датчиков и что собирать — в данном контексте не важно, потому что подключить датчик не проблема, разобраться, как он работает, тоже. Получить работающую прошивку — в теории… так же. Но, как всегда, есть нюанс, причём неожиданный: описание платы у продавца на Алиэкспресс.

ESP32-S3 имеет несколько типов, отличающихся конфигурацией Flash и внешней PSRAM. Если неправильно указать параметры памяти — прошивка улетает в циклическую перезагрузку. И вы думаете, я об этом знал? Нет, конечно, откуда? В результате потратил пару дней, переписывая прошивку и пытаясь понять, что, собственно, происходит. А тут ещё у Хабра эти курсы про прикладной ИИ.

В какой-то момент психанул и навайбкодил вот это:

WEP — Wepwawet ESP32 Profiler — утилита для диагностики плат ESP32

Интерфейс.
Интерфейс.

Задача: подключить случайную ESP32 и вытащить информацию об её аппаратной конфигурации.

Что хотелось получить:

  • определить модель микроконтроллера и его ревизию;

  • выяснить размер Flash-памяти;

  • определить наличие, объём и конфигурацию PSRAM;

  • подобрать корректные параметры для PlatformIO;

  • сформировать platformio.ini.

Что умеет приложение сейчас?

  • обнаружение портов с подключёнными устройствами;

  • получение аппаратной информации с платы;

  • сбор доступных сведений о микроконтроллере и Flash-памяти;

  • формирование отчётов в JSON и CSV;

  • генерация конфигурации platformio.ini для PlatformIO.

Из чего собрал?

Технологический стек:

  • Python 3.11, Textual, pySerial, esptool, JSON и CSV, pytest и Ruff.

ИИ в разработке: Copilot и ChatGPT

Ссылка на репозиторий: GitHub — Wepwawet ESP32 Profiler

А теперь вернёмся к низкому порогу входа в разработку.

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

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

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

Но есть и другая сторона.

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

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

Я не стал программистом. Я не могу самостоятельно написать такой проект с нуля. Но в итоге я его получил. И появляется вопрос: низкий порог входа в разработку — это действительно плохо?

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

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

Представлен открытый проект Aura Autopilot (сайт проекта) — это ИИ‑агент Autopilot для тестирования игр. Решение поддерживает Unreal Engine 5, Unity 6 и Godot 4 на Windows и macOS, сохраняет знания о проекте между запусками.

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

Для установки рекомендуется использовать аккаунт Aura. Пользователям доступны как тарифные планы Aura, так и подключение через собственные API-ключи. Стоит учесть, что сборка Autopilot из исходного кода на данный момент поддерживается только для Unreal Engine.

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

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

При разметке выдачи и ответов нейросетей нужно считать, где назван бренд и где стоит ключ. Поиск подстрокой даёт ложные срабатывания: nord находит «nordwind», основа мар\w* для имени «Мария» находит «маршрут». В обратную сторону подстрока теряет склонения: «авторских туров на Бали» не совпадает с ключом «авторский тур бали».

Бренд латиницей ищется как целое слово, с границами по буквам и дефису (просмотр назад и вперёд из модуля re):

python

import re

def has_brand(text, brand):
    return re.search(rf'(?<![\w-]){re.escape(brand)}(?![\w-])', text, re.I) is not None

>>> bool(re.search('nord', 'перелёт nordwind, туры на север', re.I))
True
>>> has_brand('перелёт nordwind, туры на север', 'nord')
False
>>> has_brand('Nord Travel: туры на север', 'nord')
True

Русские ключи и имена сравниваются по начальным формам слов. Для этого подходит pymorphy3, морфологический анализатор для русского языка, продолжение pymorphy2 (документация):

python

import pymorphy3

morph = pymorphy3.MorphAnalyzer()

def lemmas(text):
    return {morph.parse(w)[0].normal_form
            for w in re.findall(r'[а-яёa-z0-9-]+', text.lower())}

def has_key(text, key):
    return lemmas(key) <= lemmas(text)

>>> has_key('авторских туров на Бали', 'авторский тур бали')
True
>>> has_key('тур на Бали', 'авторский тур бали')
False
>>> bool(re.search(r'\bмар\w*', 'маршрут по острову'))
True
>>> has_key('маршрут по острову', 'Мария')
False
>>> lemmas('Марией Марию Марии')
{'мария'}

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

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

python

def conflicts(keys, minus):
    m = {morph.parse(w)[0].normal_form: w for w in minus}
    return [(k, m[l]) for k in keys for l in lemmas(k) if l in m]

>>> conflicts(['котельная под ключ', 'блочные котельные цена'], ['ключи', 'бесплатно'])
[('котельная под ключ', 'ключи')]

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

Источники:

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

В каких сферах пишут на Python в 2026?

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

Одним из главных преимуществ Python, которое часто отмечают эксперты, является огромное количество фреймворков и библиотек, созданных сообществом. На Python можно сделать буквально всё! Хотите десктопное приложение? Используйте PyQt, который использует реализацию Qt из C++. Python медленнее компилируемых языков? Сообщество уже создало решения для компиляции Python в нативный код. Эти и многие другие примеры показывают, почему язык так популярен.

Давайте разберёмся конкретнее, что пишут на Python сегодня.

DevOps и автоматизация

В контексте DevOps Python выступает в роли «клея», который скриптами соединяет подзадачи в рамках большой архитектурной цели. На нём можно как описывать инфраструктуру (например, с помощью Pulumi), так и создавать кастомные пайплайны. При оркестрации приложений часто пишутся отдельные Python-скрипты, которые последовательно выполняют процессы развёртывания.

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

Machine Learning и Data Science

Анализ рынка вакансий показывает, что практически весь Machine Learning реализуется на Python. Благодаря своей простоте Python позволяет писать понятный код, который вызывает «тяжеловесные» ML-библиотеки, такие как TensorFlow или PyTorch. В машинном обучении инженерам часто важнее думать о концепциях ML/AI, чем о тонкостях языка.

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

Backend-разработка

В своё время для бэкенд-систем на Python был невероятно популярен фреймворк Django. Однако сейчас всё активнее используется современный асинхронный подход с фреймворком FastAPI. Построенный на библиотеках Starlette, Pydantic и Uvicorn, он позволяет добиться высокой производительности для API.

Для более простых синхронных задач по-прежнему часто выбирают Flask. Таким образом, несмотря на наличие Global Interpreter Lock (GIL), у Python есть несколько сильных и востребованных фреймворков для backend-а.

Тестирование

Тестировщики по всему миру используют библиотеку pytest для создания автоматизированных проверок любого уровня сложности. На Python можно тестировать веб-интерфейсы (с помощью Selenium или Playwright), backend-логику и работу с базами данных. Для тестирования десктопных приложений можно создать собственную прослойку, например, через telnet или другие протоколы.

Такие автоматизированные проверки интегрируются в CI/CD-пайплайны для контроля качества кода и поддержания стабильности продакшен-среды. Результаты тестов затем удобно визуализируются в виде отчётов с помощью инструментов вроде Allure.

В этой статье опущены некоторые прикладные направления, например, создание Telegram-ботов или использование скриптов в GameDev. Это уже дело вкуса и выбора оптимального решения для конкретной задачи. В любом случае, Python открывает перед разработчиком целый спектр возможностей — остаётся только выбрать своё направление.

P.S. А ещё на Python можно писать почти по-русски! (Но лучше так не делать в продакшене 😉)

Хотите глубже погрузиться в мир Python и применить его на практике в реальных инженерных задачах? Записывайтесь на наш курс Основы языка программирования Python

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

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

PyTorch установлен. А GPU точно работает?

Когда устанавливаете PyTorch, сразу определитесь, где будете запускать вычисления: на процессоре или видеокарте. От этого зависит выбор сборки: CPU, CUDA для NVIDIA или ROCm для AMD. С конфигурацией лучше разобраться заранее, чтобы потом не искать причину, по которой фреймворк не видит GPU. 

Перед установкой стоит проверить несколько вещей 👇🏻

1. Выберите сборку под свой ускоритель

  • CPU — для разработки, тестов и небольших моделей

  • CUDA — для совместимых видеокарт NVIDIA

  • ROCm — для поддерживаемых ускорителей AMD. Официальные сборки PyTorch с ROCm рассчитаны на Linux

  • MPS — для GPU компьютеров Mac с Apple Silicon

2. Проверьте совместимость CUDA и драйвера

Например, для CUDA 12.x нужен драйвер NVIDIA версии 525 или новее, а для CUDA 13.x — 580 или новее. Перед установкой стоит сверить требования выбранной сборки с конфигурацией сервера.

3. Изолируйте окружение

Docker позволяет зафиксировать версии Python и библиотек, чтобы проект воспроизводимо запускался на разных машинах. Для Mac с Apple Silicon есть отдельный нюанс: GPU через MPS работает непосредственно в macOS, поэтому Linux-контейнер Docker для этих вычислений не подойдет.

4. Проверьте, какое устройство действительно использует PyTorch

Для NVIDIA можно выполнить:

python -c "import torch; print(torch.cuda.is_available())"

Если команда возвращает True, PyTorch видит CUDA-устройство. Если False — стоит проверить драйвер, установленную сборку и доступ контейнера к видеокарте.

В полной инструкции в блоге Рег.облака разобрали установку PyTorch 2.14 через Docker, настройку CUDA 13.0 для NVIDIA, работу с MPS на Apple Silicon и решение типичных ошибок. Внутри — Dockerfile, готовый скрипт проверки и команды для запуска. Пользуйтесь!

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

Скрипт работает в терминале, а под systemd не находит файл. Почему?

Представим: app.py и config.json лежат в /opt/mybot. При запуске из этого каталога всё работает, а системный сервис падает с FileNotFoundError.

Причина может быть в такой строке:

with open("config.json", encoding="utf-8") as file:
    ...

Относительный путь отсчитывается от рабочей директории процесса. Даже абсолютный путь к app.py в ExecStart не означает, что systemd перейдёт в каталог скрипта.

У обычного системного сервиса без WorkingDirectory рабочая директория по умолчанию — /. У пользовательского сервиса, управляемого через systemctl --user, — домашний каталог пользователя. Указание User= в системном сервисе само по себе рабочую директорию не меняет.

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

from pathlib import Path
import logging

logging.warning(
    "cwd=%s; config=%s",
    Path.cwd(),
    Path("config.json").resolve(),
)

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

Если приложение должно запускаться из своего каталога, укажите его в существующем unit-файле:

[Service]
WorkingDirectory=/opt/mybot
ExecStart=/opt/mybot/.venv/bin/python /opt/mybot/app.py

После изменения системного unit-файла:

sudo systemctl daemon-reload
sudo systemctl restart mybot.service

Другой вариант — привязать путь к файлу скрипта, если конфигурация по устройству проекта лежит рядом с ним:

from pathlib import Path

config_path = Path(__file__).resolve().parent / "config.json"

with config_path.open(encoding="utf-8") as file:
    ...

Это устраняет зависимость данного пути от рабочей директории. Если ошибка остаётся, нужно проверить существование файла, права пользователя сервиса и ограничения доступа в unit-файле.

Итог: расположение скрипта и рабочая директория процесса — разные вещи. Явная точка отсчёта для путей делает запуск предсказуемее. Расскажите, продолжат ли работать ваши скрипты, если запустить их из другого каталога?

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

Представлен открытый проект Zero Breach Toolkit для поиска на смартфонах шпионских программ. Проект использует 12,4 тыс. индикаторов слежки из 29 источников. С таким набором инструмент способен отыскать Pegasus, Predator, Graphite и Candiru — это самый известный хакерский софт во всём мире.

Решение не просто выдаёт «угроза обнаружена», а показывает подозрительные следы в коде и программах, оценивает достоверность находок и объясняет, что именно удалось проверить. Причём сам смартфон взламывать не нужно. Для Android понадобится подключение к компьютеру по USB, для iPhone — создание локальной резервной копии.

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

Скрипт обновил JSON, а читатель получил половину файла

Рассмотрим домашний сервер: один скрипт собирает показания датчиков в status.json, другой читает этот файл для страницы состояния.

Обновление выглядит привычно:

with open("status.json", "w", encoding="utf-8") as f:
    json.dump(data, f)

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

Для небольшого снимка данных на локальной файловой системе Linux удобно сначала подготовить новый файл рядом с основным, закрыть его и затем заменить основной через os.replace. Пример рассчитан на Python 3.8 и новее:

import json
import os
import tempfile
from pathlib import Path

def save_snapshot(path, data):
    target = Path(path)
    fd, name = tempfile.mkstemp(
        dir=target.parent,
        prefix=f".{target.name}."
    )
    temp = Path(name)

    try:
        with os.fdopen(fd, "w", encoding="utf-8") as f:
            json.dump(data, f, ensure_ascii=False, allow_nan=False)
        os.replace(temp, target)
    finally:
        temp.unlink(missing_ok=True)

save_snapshot("status.json", {"temperature": 23.7})

Каталог должен существовать, а у пользователя должны быть права на создание и замену файлов в нём. В примере читатель и писатель работают от одного пользователя: временный файл создаётся с правами 0600. При замене права прежнего status.json автоматически не сохраняются.

allow_nan=False заставляет сериализацию завершиться ошибкой при значениях NaN и бесконечности. Они не входят в стандарт JSON, поэтому прежний корректный снимок в этом случае лучше сохранить.

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

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

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

При исключении в Python блок finally удаляет временный файл. После SIGKILL или отключения питания он может остаться в каталоге: finally в таких случаях не выполняется.

Проверка простая: вызвать ошибку сериализации до os.replace и убедиться, что старый снимок читается, а временный файл удалён. Затем выполнить успешное обновление и проверить новый JSON.

Для файла состояния полезное свойство именно такое: пока новый снимок не готов, читателям доступен предыдущий.

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

Мне давно не хватало простого gui пингера, на подобии Netmap под виндой, который бы работал из коробки и без танцев с бубном в wine. Приложение, которое можно было бы свернуть в трей, не требовало тонну зависимостей, и не имело не нужного функционала, типа веб интерфейса (это уже другой уровень мониторинга)

QPing — написан на Python с использованием библиотеки PyQt6. Для мониторинга доступности сетевых хостов по ICMP или TCP-портов. Предоставляет визуальное отображение статуса хостов в виде графиков с latency и министатистикой. Поддерживает группировку хостов для удобства, и всплывающие уведомления через системный трей.

Основные возможности:

  • Мониторинг хостов через ICMP или TCP-проверки.

  • Визуализация результатов пинга в виде графиков с масштабируемой временной шкалой.

  • Поддержка категорий для группировки хостов.

  • Фильтрация хостов по статусу (показ только недоступных).

  • Уведомления в системном трее при недоступности хоста.

  • Локализация интерфейса (русский и английский по умолчанию).

  • Импорт хостов из текстового файла (hosts, ansible inentory, txt).

  • Перетаскивание хостов для изменения порядка.

  • Сохранение истории проверок и настроек.

Для проверки хостов использует стандартный ping. При наличии fping - появляется возможность проверять хосты пачками.

В версии 2.5:
- Добавление хоста: если в поле ввода указан порт (например, example.com:443 или «example.com 443»), хост сразу создаётся с типом проверки TCP на указанном порту.

- Автоматическое определение типа проверки при добавлении хоста (ICMP → TCP). Настраивается в Settings → General, три режима:

  • Off

  • Только для хостов, добавленных в текущей сессии (по умолчанию)

  • Всегда

    Логика: если ICMP-хост не имеет ни одного успешного ответа и набрал 5 неудач подряд (при условии, что хост добавлен не менее 10 секунд назад), в фоне последовательно проверяются TCP-порты 443, 80 и 22. Если хотя бы один стабильно отвечает, появляется диалог с предложением переключить хост на TCP. Тип меняется только после подтверждения пользователем; предусмотрена кнопка «Больше не спрашивать».

- История загружается посуточно, а не вся сразу.

- Добавлена возможность задать время ожидания ответа.

- Добавлен режим Mute — для конкретного хоста: проверка продолжается, но уведомления о проблемах не отправляются.

- Тёмная тема (для ценителей).

- Кликабельные Down/Warn — клик переключает фильтр filter_failed.

- Трей и уведомления:

• Бейдж с числом недоступных хостов на иконке в трее.

• Группировка уведомлений: если подряд упали 5 хостов, отправляется одно уведомление.

Установка

Способ 1: PPA (Ubuntu 22.04+)

Для пользователей Ubuntu 22.04, 24.04 и новее доступна установка через PPA с автоматическими обновлениями:

sudo add-apt-repository ppa:zersh/qping
sudo apt update
sudo apt install qping

Запуск: qping из терминала или через меню приложений.

Удаление:

sudo apt remove qping
sudo add-apt-repository --remove ppa:zersh/qping

Для работы batch-режима ICMP установить fping:

sudo apt install fping

Способ 2: Из исходников через git

  1. Клонировать репозиторий:

    git clone https://github.com/zersh/QPing.git
    cd QPing
  2. Установить зависимости:

    sudo apt install python3 python3-pyqt6
    # опционально — для batch-режима
    sudo apt install fping
  3. Установить ярлык в меню и на рабочий стол:

    chmod +x install.sh uninstall.sh run.sh
    ./install.sh

После этого QPing появится в меню приложений и на рабочем столе (работает в Gnome и Xfce). Ярлыки устанавливаются относительно текущего каталога.

Удаление ярлыков:

./uninstall.sh

Способ 3: Ручной запуск без установки

  1. Установить зависимости (см. выше).

  2. Запустить приложение напрямую:

    ./run.sh

    или

    python3 qping

Требования

  • Python 3.10+

  • PyQt6

  • Операционная система: Linux (Ubuntu 22.04+ рекомендуется), Windows, macOS

Обратная связь, предложения и аргументированная критика приветствуются :)

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

CVE-2026-111497: критическая уязвимость в декодере Google Brotli

Опубликована критическая уязвимость CVE-2026-111497 — out-of-bounds write в C-декодере Google Brotli (c/dec/decode.c). Уязвимы версии 1.0.3–1.2.0: специально сформированный Brotli-поток может вызвать повреждение памяти, утечку данных, отказ в обслуживании и потенциально удалённое выполнение кода. security.paloaltonetworks

Риск существует для сервисов, распаковывающих Brotli-данные из недоверенных источников: HTTP-прокси, API-шлюзов, Node.js- и Python-приложений, а также систем с встроенными копиями libbrotlidec. rapid7

Компонент Уязвимые версии Исправленные версии Google Brotli / libbrotlidec 1.0.3–1.2.0 1.0.10, 1.1.1, 1.2.1 security.paloaltonetworks Node.js 22.x / 24.x / 26.x до 22.23.4 / 24.22.1 / 26.12.1 22.23.4 / 24.22.1 / 26.12.1 rapid7 Debian 12 brotli до 1.0.9-2+deb12u1 1.0.9-2+deb12u1 Debian 13 brotli до 1.1.0-2+deb13u1 1.1.0-2+deb13u1 Ubuntu 24.04 LTS brotli до 1.1.0-2ubuntu0.1 1.1.0-2ubuntu0.1

Remediation

sudo apt update
sudo apt install --only-upgrade brotli libbrotli1

Для Node.js обновите runtime до исправленной ветки и перезапустите production-сервисы. Важно учитывать backports: решение принимайте по версии дистрибутивного пакета и security tracker, а не только по upstream-версии Brotli. axonius

Автоматизация

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

Репозиторий: paulmann/CVE-2026-111497

Ключевые слова: CVE-2026-111497, Brotli, уязвимость, информационная безопасность, Linux, Debian, Ubuntu, патч, remediation, C.

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

Nvidia представила открытый проект SkillSpector. Сервис сканирует любой навык для ИИ перед установкой и ставит ему оценку безопасности и уровень риска от 0 до 100. Проект помогает найти в навыках для ИИ ощибки в ИБ, включая публикацию ключей API, пересылку данных на чужие адреса, запуск вредоносных скриптов со сторонних сайтов.

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

Разработчик Денис Ширяев представил открытый скилл ex-USSR Kinship Research для Codex и Claude Code, который помогает исследовать семейную историю на территории бывшего СССР. Внутри — инструкции по работе с метрическими книгами, военными документами, делами о репрессиях и депортациях. ИИ-агент учитывает старые границы, переименования деревень и варианты фамилий на разных языках. Для каждой находки сохраняет источник, а однофамильцев проверяет по родственникам, датам и даже номерам домов.

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

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

Представлен открытый проект FacePlugin (Open Source Face Recognition SDK). который позволяет создать собственный Face ID и ставить систему распознавания лиц в своих проектах и приложениях:

  • можете создать пропуск в приложение, для умного дома или Face ID для ПК;

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

  • система работает локально.

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

От первого мотора до робота, который учится по демонстрациям: открытая дорожная карта по робототехнике на русском.

Robotics Roadmap 2026 предлагает план на 24 недели при занятиях по 2–3 часа в день. Обучение начинается с электроники и постепенно переходит к управлению и машинному обучению.

Внутри шесть модулей:

- Электроника, Python и Git - базовые схемы и инструменты.

- Arduino и ESP32 — моторы, датчики, линейный робот и балансир.

- CAD и 3D-печать — сборка робота-манипулятора.

- ROS 2 — симуляция, построение карты и автономная навигация.

- Управление и компьютерное зрение — регуляторы, кинематика, работа с камерой.

- LeRobot — сбор демонстраций и обучение робота.

Есть схемы подключения, примеры кода, списки компонентов, справочник по отладке и 30 идей проектов.

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

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

https://github.com/justxor/robotics-roadmap-2026/

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

LiteLLM 1.107.0 со стилером ключей: как проверить себя и что менять

21 октября 2026 на PyPI вышел litellm==1.107.0 со стилером учётных данных во всех бинарных wheel-файлах. Образы Docker с тегом v1.107.0 тоже заражены, а теги latest, main-latest и main-stable около трёх часов указывали на заражённый образ. Чистыми названы 1.106.x и ниже.

Инцидент развивается: данные из разбора StepSecurity, сверьтесь с заявлением BerriAI. Релиз загрузили в 11:39 UTC, с PyPI убрали к 13:23.

Чем опасно

В site-packages попадают cook.pth, cook.py и sitecustomize.py. Стилер запускается при каждом старте Python в этом окружении, import litellm не нужен. Уходят SSH- и облачные ключи, .env, переменные окружения, токены AI-инструментов. Если задан DATABASE_URL, дампится база прокси с API-ключами вендоров. Архив зашифрован и отправляется на litellm.dev.

Как проверить

Не запускайте Python на подозрительном хосте: это снова запустит стилер, поэтому pip show не подходит.

grep -rn "litellm.*1\.107\.0" --include="requirements*.txt" --include="*.lock" --include="pyproject.toml" .
find / \( -name cook.pth -o -name cook.py \) 2>/dev/null
ls -l /tmp/remote_code_loader.lock 2>/dev/null
docker images --digests | grep -i litellm

Скомпрометирован любой хост, раннер или контейнер, где ставился 1.107.0 или был образ v1.107.0/latest из того окна. Признак в сети: запросы к litellm.dev.

Что делать

  1. Убить процесс, держащий /tmp/remote_code_loader.lock, и заблокировать litellm.dev на выходе.

  2. Пересобрать контейнеры и переустановить окружения, а не чистить.

  3. Запинить litellm==1.106.2 или образ по дайджесту, удалить 1.107.0 из зеркал.

  4. Сменить всё, до чего хост мог дотянуться: облачные, SSH- и CI-ключи, токены. Для прокси с базой ещё и все ключи вендоров, master key и salt key. Архив зашифрован, поэтому считайте, что данные ушли.

  5. Поискать в логах litellm.dev и проверить расход у вендоров.

Для любого шлюза

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

Для LiteLLM это второй случай: в марте 2026 были скомпрометированы 1.82.7 и 1.82.8. Зависимости можно отравить в любой экосистеме, не только в Python.

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

ChatGPT теперь можно подключить прямо к Blender — представлен открытый проект loopcut, который помогает встроить ИИ‑агента в 3D‑редактор, чтобы управлять сценами обычными текстовыми запросами. Нейросеть может настраивать освещение, редактировать объекты, работать с материалами и писать код на Python.

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

Находим локацию на фото с помощью нейросетей и открытого скилла geo-sleuth. Проект предоставляет ИИ-агентам доступ к спутниковым картам, панорамам местности и данным о рельефе. Нейросеть в итоге выдаёт точные координаты с места съёмки любого фото. А затем рассказывает, как пришла к такому выводу. Решение работает с точностью до одного метра и подойдёт для Claude Code, Codex, Cursor и Gemini CLI.

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

Представлен ИИ-скилл leanrea размером 8 КБ, который помогает Codex, Claude Code, Cursor, Gemini CLI и OpenCode достаточно быстро клонировать сайты и приложения.

Скилл leanrea подсказывает нейросетям, как нужно анализировать сайты, приложения Electron, бинарные файлы, Android APK и прошивки. Для веб-приложений инструмент отдельно учитывает минифицированные сборки и карты исходников.

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

Представлен открытый плагин NPCTalk, который позволяет создавать «живых» (разговаривающих) NPC, реагирующих на игровые события и фразы в игре при контакте с живым игроком. Например, персонажи могут отвечать грубостью или даже начать драку, если им что-то не понравится. Также к плагину можно подключить всех популярных ИИ-агентов: Claude, Codex, Gemini и Cursor.

Теги:
0
Комментарии1
1
23 ...