Все потоки
Поиск
Написать публикацию
Обновить
434.01

Python *

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

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

«Мой код не работает!» или как я превратила баг в фичу (почти случайно)

Время на прочтение2 мин
Количество просмотров2.5K

Всем привет.

Я — разработчица, которая пришла в IT не из классического CS-бэкграунда, а из гуманитарной сферы. Python покорил меня своей читаемостью, и вот уже третий год я работаю в продакшене, где сталкиваюсь с самым сложным противником — багами. Особенно теми, которые я сама случайно создаю.

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

Читать далее

SonarQube: базовая настройка и анализ качества кода с помощью FastAPI

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

Ошибки в коде— не всегда вопрос невнимательности. Часто они кроются в архитектурных решениях, устаревших практиках и банальном отсутствии инструментов контроля качества. В этой статье — практический разбор того, как настроить и использовать SonarQube с FastAPI, чтобы находить баги, уязвимости и «запахи» ещё до запуска приложения. Разберёмся, как выглядит процесс статического анализа кода на практике, как развернуть SonarQube через Docker и интегрировать его в рабочий цикл через CI/CD.

Читать далее

Автотесты как документация: «чистый» код и генератор на Regex

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

Привет, Хабр! Проблема рассинхронизации автотестов и тестовой документации знакома многим. Код постоянно меняется, а кейсы в Confluence — нет. В итоге документация становится бесполезной, а время команды тратится на выяснение того, что же на самом деле проверяет тот или иной тест.

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

Читать далее

Разработка браузерного расширения: путь от идеи до публикации в web store

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров2.7K

Разработка браузерного расширения началась с простой идеи: упростить поиск по закладкам и открытым вкладкам, а также попробовать свои силы в создании проекта с элементами монетизации. В этой статье я расскажу, как за две недели прошёл путь от прототипа до публикации в Chrome Web Store и Firefox Add-ons, какие технологии использовал и с какими трудностями столкнулся. Надеюсь, мой опыт вдохновит других разработчиков попробовать свои силы в создании подобных проектов. Полный код проекта доступен на GitHub.

Читать далее

Тесты не лгут — прислушивайтесь к ним. Часть 1

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

(Статья — результат со вместной работы с Максимом Степановым)

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

Связанный код, который сложно поддерживать и расширять, сложно и тестировать. Как сказал Боб Мартин

«Тестируемый код — синоним разъединённого кода»

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

Мы напишем тесты для примитивного скрипта на Python, который проверяет IP пользователя, определяет их регион и сообщает текущую погоду в регионе. Нас будет интересовать, как эти тесты заставят нас изменить код. Они, как расчёска, помогут нам методично разобрать проблемные места, чтобы код (как и волосы) стал гладким и послушным. Полный пример доступен здесь, каждый основной шаг находится в отдельной ветке.

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

Читать далее

За неделю от ночных кошмаров до спокойного сна: как я автоматизировал защиту от AI-хакеров

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

Никто не любит быть тем парнем, который говорит «а давайте еще и защиту поставим». Особенно когда речь идет о блестящем новом AI‑продукте, который должен был запуститься «еще вчера». Но когда твой корпоративный чат‑бот начинает выдавать системные промпты направо и налево, а в 2 ночи тебе в Telegram прилетают сообщения «СРОЧНО! Хакеры взломали бота!» — понимаешь, что без брони в бой идти нельзя.

Читать далее

Автоматизация миграции структуры БД с Firebird 2.5 на PostgreSQL

Время на прочтение2 мин
Количество просмотров857

Миграция с устаревающих СУБД — частая задача в ИТ. При переходе с Firebird 2.5 на PostgreSQL одной из первых становится необходимость переноса структуры базы данных. Ручной перенос сложных схем с множеством таблиц, индексов, процедур и функций — трудоёмкий и ошибко подверженный процесс. В этой статье я хочу поделиться инструментом, который берёт на себя большую часть рутинной работы.

Читать далее

Практическое руководство по атакам на IPv6 в локальной сети

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

Отключение IPv6 на шлюзе давно перестало быть надежной защитой. Протокол по умолчанию активен на большинстве клиентских машин, которые периодически отправляют в сеть служебные запросы вроде Router Solicitation. Именно эта «скрытая» активность открывает двери для целого класса атак, позволяющих перехватить трафик, подменить DNS или провести NTLM-Relay.

В этой статье мы подробно, с примерами кода на Python/Scapy и командами для настройки, рассмотрим самые распространенные векторы атак на IPv6 в локальном сегменте:

RA Spoofing: Как навязать себя в качестве шлюза по умолчанию.

RDNSS Spoofing: Как стать DNS-сервером для современных ОС без DHCPv6.

DHCPv6-атаки: Механика работы mitm6 и ее ручная реализация.

Пассивный сбор данных: Как составить карту сети, просто слушая эфир.

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

Читать далее

Anchor Optical TrackeR Update: Улучшенная система трекинга с адаптивной стабилизацией при ветре

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров986

Спустя время после публикации первой версии Anchor Optical TrackeR, провел значительное улучшение системы трекинга, добавив адаптивные механизмы, повышающие устойчивость к внешним воздействиям, особенно к ветровым нагрузкам. В новой версии реализована интеллектуальная система управления путевыми точками по принципу «верёвочной лестницы» и адаптивное увеличение плотности точек при обнаружении сильного ветра.

Читать далее

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

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

Привет! Меня зовут Дима, я Backend-разработчик в Doubletapp. В этой статье расскажу про кеширование API (на примере Django Ninja): чем оно полезно бизнесу и когда его стоит внедрять.

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

А теперь представьте: вы можете обрабатывать одновременно в несколько раз больше запросов пользователей без расширения ресурсов и без переписывания ядра продукта. Как? С помощью кеширования — подхода, который «запоминает» одинаковые запросы и снижает нагрузку на сервер.

Содержание

Серверный кеш (хранилища «ключ-значение»)
Клиентский кеш (браузер, прокси)
Условные HTTP‑запросы
Промежуточное кеширование (CDN, reverse proxy)

Читать далее

PACS и ИИ: от внедрения до интеграции машинного обучения в российском здравоохранении

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров645

PACS (Picture Archiving and Communication System) — это не просто софт. Это нервная система медицинской визуализации, которая собирает, архивирует и распределяет DICOM-данные между всеми участниками медицинского процесса. А внедрение PACS в реальном здравоохранении — это смесь инженерии, логистики, дипломатии и кризис-менеджмента.

Представьте, что вы врач-радиолог. Каждый день вы просматриваете сотни медицинских изображений, ища признаки заболеваний, травм или аномалий. Но как эти изображения попадают к вам? Как они сохраняются и передаются между больницами? Ответ кроется в стандарте DICOM и системе PACS.

DICOM (Digital Imaging and Communications in Medicine) — это не просто формат файлов, это целая экосистема для медицинской визуализации. Представьте его как универсальный язык, на котором говорят все медицинские устройства: от рентгеновских аппаратов до МРТ-сканеров. Каждый DICOM файл — это не просто картинка, а целая история пациента, закодированная в цифровом виде.

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

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

Читать далее

Как я написал современный GUI для yt-dlp на Python

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

Надоело каждый раз лезть в терминал, чтобы скачать видео с YouTube? Мне тоже. Поэтому я сделал нормальный GUI для yt-dlp - без лишних кнопок, с современным интерфейсом и чтобы просто работал. Код на GitHub, готовая сборка тоже есть.

Зачем вообще это делать?

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

Посмотрел на существующие GUI - одни выглядят как из 2005 года, другие напичканы настройками, которые 99% пользователей никогда не трогают. Захотелось сделать что-то простое: вставил ссылку, выбрал качество, скачал. Всё.

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

Простоту - минимум кликов от ссылки до файла

Нормальный вид - тёмная тема, без уродских кнопок из 90-х

Скорость - никаких тормозов и зависаний

Работает везде - Windows точно, остальные ОС в планах

Не требует установки - скачал exe и пользуешься

Читать далее

Когда денег нет, но мы держимся. Резервное копирование на Python

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров4.4K

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

Читать далее

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

Пишем чат-бота для мессенджера MAX на Python

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров21K

Рассказываю как создать эхо-бота для MAX на Python с помощью библиотеки maxapi без проблем для aiogram разработчика!

Получить код

Парсинг российских СМИ

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров2.6K

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

В данной статье мы сфокусируемся на парсинге сайтов российских СМИ, в числе которых Meduza,* как официально запрещенное в РФ и более государственно-подконтрольных RussiaToday и Коммерсанта. Разберемся какой это сделать наиболее эффективно и получим текст и метаданные статей. Как основные инструменты используем классические библиотеки в Python: requests, BeautifulSoup, Selenium.

Читать далее

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

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

Привет! Это команда курса «Python для анализа данных». Собрали для вас подборку бесплатных ресурсов для изучения Python с нуля. Здесь вы найдёте как интерактивные курсы с практическими заданиями, так и теоретические материалы с подробными объяснениями.

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

Читать далее

Фундаментальные шаблоны проектирования на Python

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров15K

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

Читать далее

Зачем я написал очередной велосипед для работы с директориями (спойлер: не совсем велосипед)

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

Вы когда-нибудь сталкивались с плагинами, которые лезут в чужие папки, перезаписывают файлы ядра и превращают git status в ад?

Я — да. И вместо того чтобы мириться с ручным копированием, гигантскими .gitignore и вечными конфликтами, написал dmp — инструмент, который:
 Отслеживает, откуда взялся каждый файл,
 Автоматически разрешает конфликты (или даёт контроль),
 Не ломает IDE (никаких симлинков!),
 Работает с любыми языками и фреймворками.

Для кого:
— Разработчики плагинов/модулей,
— Те, кто устал от git-submodules и rsync,
— Все, кто хочет чистый workflow без монрепозитория.

Читать далее

Как тестировать качество ответов RAG системы?

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

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

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

Иными словами, если на вход LLM дан один конкретный вопрос, то есть шанс близкий к 100%, чтоб будет получен качественный ответ. И наоборот, чем больше данных (вопросов, контекста и прочего) на вход LLM вы даете, тем больше вы понижаете качества ответа.

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

При этом нужно определить качество ответов, то есть определить как мерять качество в конкретной RAG системе.

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

По каждому документу, который есть у нас, и который мы планируем векторизировать, нужно задать два вопроса:

Читать далее

Книга: «RAG и генеративный ИИ. Создаем собственные RAG-пайплайны с помощью LlamaIndex, Deep Lake и Pinecon»

Время на прочтение5 мин
Количество просмотров4.5K

Привет, Хаброжители! Мы представляем вам новую книгу Дэниса Ротмана — «RAG и генеративный ИИ. Создаем собственные RAG-пайплайны с помощью LlamaIndex, Deep Lake и Pinecone». Это практическое руководство для тех, кто хочет освоить передовые технологии искусственного интеллекта и научиться создавать эффективные системы на основе Retrieval-Augmented Generation (RAG).

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

Читать далее

Вклад авторов