Обновить
512K+

Python *

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

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

Как я автоматизировал выдачу ТСД на складе: от бумажных талонов до Python‑приложения

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

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

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

Ссылка на исходный код

Читать далее

Новости

Взлом городского мессенджера: разбор цепочки атаки на машину Messenger на платформе Standoff 365

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

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

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

Читать далее

Zero Downtime Deploy: как обновлять production, не роняя пользователей

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

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

Настал момент релиза.

Вы радуетесь, что пользователи вашего приложения станут ещё счастливее. Они доверяют вашему сервису свои важные задачи, а вы расширите их возможности и сделаете их жизнь ещё немного лучше.

И вот момент.

3, 2, 1…

Релиз состоялся.

Вы рады. Ваши коллеги тоже рады. Всё прошло успешно.

Но спустя некоторое время к вам заходит начальство с максимально неприятным выражением лица...

Чем недовольно начальство?

Один `settings.py` на всё больше не работает: наводим порядок в настройках Django

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

Один settings.py удобен только в начале проекта. Когда появляются несколько окружений, Celery, Redis, внешние API и объектное хранилище, настройки быстро превращаются в источник скрытых ошибок. Разбираю практическую структуру django-split-settings: без магии, неявных переключений и случайного запуска с production-конфигурацией.

Читать далее

Картинка загрузилась, но API вернул images: [] — ловушка relationship в SQLAlchemy

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

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

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

Файл сохранялся. Строка появлялась в базе. Повторный GET тоже находил изображение. Но ответ самого запроса загрузки выглядел так:

Читать далее

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

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

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

Читать далее

Восемь аниме-плееров рунета изнутри: шифр Цезаря, пустой параметр и домен, который увели

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

Я взял за основу популярную опенсорсную библиотеку парсеров аниме-плееров, запустил её — и получил от Kodik 500 Internal Server Error. Не «токен протух», не «IP заблокирован», а именно 500 на каждый запрос. Разбор занял вечер, а причина оказалась в одном символе: библиотека отправляла параметр ref пустым, а сервер требует его заполненным и раскодированным.

Дальше выяснилось, что это не единичная поломка, а норма жанра. Один плеер полгода назад переехал на другой формат страницы. Другой отвечает бесконечным редиректом на самого себя. У третьего домен просто увели — сейчас там индонезийский интернет-магазин, а не аниме. Четвёртый прячет ссылки в WebSocket из обфусцированного бандла на 600 КБ, и его я честно не осилил.

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

Читать далее

Купил ИБП, а его программа недоступна для NVDA. Пришлось написать дополнение

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

Я незрячий и пользуюсь NVDA. После покупки ExeGate LLB-3000 выяснилось, что работать с PowerManagerII с клавиатуры и на слух неудобно. Вместе с Codex я разработал дополнение: разобрали графические кнопки, наладили навигацию, добавили текстовые показания и проверили управление. Рассказываю, как устроено решение и что в этой работе делал я.

Как устроено дополнение

Сканер альткоинов на Python: данные пяти бирж и Telegram Mini App

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

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

Пользователь отправляет тикер и получает три результата: направление активность и итоговый статус.

Читать далее

Месяц тюнил поиск по памяти, а починила всё одна строка в промпте

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

Поднял Recall@5 поиска по памяти на 17%, померил качество самих ответов и получил прирост, неотличимый от шума: тест Макнемара, p = 0.79. Месяц работы впустую. Потом посмотрел в промпт, поправил там одну формулировку и получил плюс 16 процентных пунктов за вечер. Модель отказывалась отвечать, когда ответ лежал прямо перед ней.

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

Читать далее

Как я сделал и запустил ГрузоБот: Python, MAX API, SQLite и первые пользователи

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

Несколько месяцев назад я начал делать небольшой сервис для контейнерной логистики.

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

Так появился ГрузоБот это сервис для грузоотправителей, экспедиторов и перевозчиков, работающий через мессенджер MAX.

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

Читать далее

Смерть сабагентов в Claude и Codex

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

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

Но если честно проще в вашем стиле попросить кодекс/клод объяснить как оно все работает, чем читать эту статью, она для неленивых.

Не полениться и прочитать

Один Telegram‑бот, три сервиса, один 301: как я сделал webhook‑router вместо монолита

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

У Telegram-бота может быть только один активный webhook. У меня при этом появились три независимых сценария: поддержка пользователей, управление небольшим магазином и внутренние административные команды. Склеивать их в один процесс не хотелось, заводить отдельного бота под каждый сервис — тоже.

Пока я выбирал архитектуру, переезд панели с одного домена на другой неожиданно провёл бесплатный chaos test: Telegram продолжил отправлять updates на старый адрес, получил 301 Moved Permanently и перестал доставлять сообщения. В очереди зависло шесть updates, а со стороны пользователей бот просто замолчал.

В статье разберу диагностику этого инцидента и устройство небольшого open-source router на FastAPI и Redis: с декларативными правилами, дедупликацией, надёжной очередью, retry и HMAC-подписью внутренних запросов.

Читать далее

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

Как использовать облачные AI модели внутри контура компании и не получить по шее от ИБ?

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

Или пример того, что будет, если роль пакетного менеджера доверить AI.

[ Перед прочтением ознакомьтесь с политикой безопасности в вашей компании ]

Читать далее

Один пользователь зарегистрировался у вас четыре раза, и все четыре легально

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

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

В базе четыре учётные записи: Ivan.Petrov@gmail.com, ivanpetrov@gmail.com, ivan.petrov+shop@gmail.com, IVAN.PETROV@gmail.com. С точки зрения кода это четыре разных строки. С точки зрения почты - один и тот же ящик, все письма придут в одно место.

Дальше начинается интересное: акции «только для новых пользователей», лимиты на бесплатный период, «одна заявка на человека» - всё это обходится без единой уловки, просто точкой в адресе.

Читать далее

Claude Code взломали просьбой пересказать сайт

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

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

И самое интересное: агент не нарушал прямой запрет. Наоборот, в ключевой момент он поступил "безопасно" — отказался запускать неизвестный бинарный файл и написал собственный декодер на Python. Именно это решение и стало частью атаки.

Такую цепочку продемонстрировал исследователь безопасности Иоганн Ребергер на Claude Code с моделью Opus 5 в Auto Mode. В его небольших сериях тестов атака срабатывала в трёх или четырёх запусках из пяти. Это не означает, что "Claude взламывается с вероятностью 80%", но хорошо показывает более важную проблему: безопасный на вид отдельный шаг ничего не гарантирует, если вся цепочка строится в среде, которую контролирует атакующий.

И чего он там наломал?

От парсинга постов к сбору данных: что на самом деле можно достать из Telegram

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

Я бы сделал начало более естественным и менее похожим на презентацию продукта. Например:

В прошлой статье я разбирал, как с помощью Python и Telethon автоматизировать сбор публикаций из Telegram‑каналов. Тогда мы фактически решали задачу первого уровня: получили сообщения, забрали текст и сохранили результат.

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

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

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

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

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

Читать далее

Гонка за исключением или как один except Exception может лишить сна на неделю

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

Сервис зависает, контейнер не отвечает, а в логах — только «обработанные» ошибки. Часто причина таких инцидентов скрывается в слишком широком except Exception, который мешает приложению корректно завершаться. Разберем, как правильно обрабатывать исключения в production‑воркерах и избежать подобных проблем.

Читать разбор

Измерительные приборы под контролем — универсальный SCPI-драйвер управления: Python + Keysight, АКИП, R&S

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

Привет! В предыдущей статье https://habr.com/ru/articles/1042328/ я рассказал о математической оценке коэффициента шума (КШ) методом отношения сигнал-шум. Сегодня перейдем от теории к практике - к автоматизации радиоизмерений. Покажу, как построить гибкую систему управления измерительными приборами на Python, которая не боится разношёрстного парка оборудования в лаборатории.

Читать далее

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

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

Вечером 02.09 у нас не вышел плановый пост в TenChat. В логе задачи планировщика — ничего осмысленного, просто ненулевой код возврата и алерт «слот не закрыт». Разбор растянулся на весь вечер, потому что там оказались не одна поломка, а три, и каждая маскировала следующую.

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