Обновить
512K+

Python *

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

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

Трилемма Святого Грааля типизации: почему нельзя всё сразу

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

Все мы знаем, что языки делятся на динамические и статические: Python или JS позволяют молниеносно прототипировать, но расплачиваться нестабильностью в продакшене приходится потом, тогда как C++, Java или C# требуют прописывать типы сразу, оплачивая монументальную надежность замедлением разработки.

В 2006 году Джереми Сиек предложил разрешить этот конфликт концепцией постепенной типизации в работе «Gradual Typing for Functional Languages»: язык остается динамическим по умолчанию, однако разработчик может аннотировать типами отдельные модули или функции, не покрывая ими всю кодовую базу, а типизированный и нетипизированный код взаимодействуют через специальный динамический тип Dyn. Звучит как сказка — быстрое прототипирование с постепенным наращиванием стабильности. Однако при детальной проработке вскрылись фундаментальные нюансы: в серии последующих работ Сиек, Таха, Вадлер и другие показали, что стыковка типизированного и нетипизированного кода требует операции приведения типа (cast), а дизайн этого каста упирается в противоречие между тремя желаемыми свойствами — надёжностью системы типов (soundness), собственно постепенностью (gradual typing) и отсутствием рантайм-обёрток на границах (no wrappers).

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

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

Читать далее

Почему умирают торговые роботы: дрейф рынка, переобучение и охота на альфу

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

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

На это есть несколько причин!

Давайте разберём, какие из них реальны, а какие — упрощение, пусть и корректное.

Ознакомиться

Логарифм для аналитика: где он спасает отчет, а где его ломает

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

Помесячный прогноз выручки стабильно недобирает, не скачет, а именно недобирает: факт всегда выше прогноза, из месяца в месяц, примерно в одну и ту же сторону.
Стабильное смещение — это уже не шум, это баг, поэтому я полезла в модель.
Модель прогноза выручки занижала цифры вдвое.
Ошибка была в одной строке – np.exp() вместо честного возврата из логарифмов.
Разбираю этот кейс и всё остальное, что аналитику нужно знать про логарифм: декомпозиция роста, эластичность, A/B-тесты и поправка Дуана.
С кодом и цифрами.

Читать далее

Shorts Maker v2: как я превратил AI-генератор видео в возобновляемый production pipeline на Python

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

Как превратить работающий AI-прототип в надёжный production pipeline? Разбираю архитектуру Shorts Maker v2 — генератора коротких видео на Python с DDD, возобновлением после сбоев, checkpoint’ами после каждой сцены, ограниченной конкурентностью и заменяемыми AI-провайдерами

Читать далее

Как мы построили IAM для Telegram поверх Telethon и автоматизировали управление сотней корпоративных Telegram-чатов

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

В этой статье расскажу, как мы построили отдельный модуль управления корпоративными чатами и каналами на Django, PostgreSQL и Telethon. Без привязки к нашей внутренней инфраструктуре — только архитектура, технические решения и несколько выводов, которые могут пригодиться при решении похожей задачи.

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

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

Обо всём этом в статье!

Читать далее

Как проверить все Python‑окружения на опасные пакеты без запуска Python

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

Вредоносная зависимость может годами лежать в забытом проекте, а обычная команда pip freeze — запустить оставленный злоумышленниками код. Разберём, как собрать реестр виртуальных окружений и с помощью uv безопасно проверить версии пакетов во всех локальных проектах.

Проверить пакеты

Интеграция Asterisk с веб‑интерфейсом и управление звонками через WebSocket: кейс имплементации под ключ

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

Привет! Меня зовут Андрей Нелюбин, я руководитель функции фронтенд-разработки.
В рамках проекта для заказчика требовалось доработать сценарий работы колл-центра: связать телефонию на Asterisk с операторским интерфейсом, где рядом со звонком доступны данные клиента, заказы, статусы и действия управления.

Для этого в 2022 году была реализована собственная прослойка поверх Asterisk: backend на Python/Django, обработка событий через Django Channels, WebSocket для передачи изменений в интерфейс и frontend на Vue. В статье расскажу, как устроили архитектуру решения, как обрабатывали события звонков, зачем понадобился BFF-слой на Django и почему в рабочей конфигурации аудио осталось в SIP-клиенте, а контекст и управление — в операторском интерфейсе

Читать далее

Книга: «Python. Экспресс‑курс. 4-е изд.»

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

Привет, Хаброжители! Автоматизация систем. Высокопроизводительные веб‑приложения. Облачные и серверные службы. Передовые технологии искусственного интеллекта. Чем бы вы ни занимались, умение читать и писать на Python всегда пригодится!

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

Читать далее

Автоматизируем первую линию диспетчерской службы на примере управляющей компании

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

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

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

Привет, Хабр! В этом материале делимся подробным гайдом, как собрать голосового робота и автоматизировать первую линию диспетчерской с помощью сервиса API МТС Exolve. Так срочные звонки будут мгновенно попадать на линию, а несрочные — в очередь для обработки в рабочие часы. 

Читать дальше

Почему C++ или Rust никогда не смогут заменить Python

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

На Хабре периодически появляются статьи с анализом феномена Python - как один из самых медленных языков программирования стал королём нейросетей, и ответ всегда один: за счёт простого синтаксиса и развитой экосистемы. Но экосистема у C++ значительно больше и богаче, значит, дело не в ней и остаётся только синтаксис. А если проблема действительно в синтаксисе, тогда должен быть ответ и на другой вопрос: почему C++ не стал основой для исследований в этой (или любой другой) области?

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

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

Читать далее

Excel в HTML: сервер для публикации Excel‑отчётов

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

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

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

Но сотрудники всё равно продолжали пользоваться Excel.

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

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

Читать далее

Соленоид без иллюзий: считаем поле честно и визуализируем результат

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

   Рассмотрим следующую задачу: Пусть соленоид имеет следующие размеры:высота 2h, внешний радиус R2, внутренний R1<R2.В полость вставлен цилиндрический стальной сердечник  радиуса R1, высоты 2h.На него равномерно, очень плотно и под прямым углом намотана медная проволока круглого сечения  диаметра d, причём d очень мало по сравнению с размерами соленоида. По обмотке течёт постоянный ток I(рассмотреть возможность переменного тока I(t)) , направленный по часовой стрелке. Требуется определить магнитное поле B (x,y,z, t) внутри, снаружи соленоида и в сердечнике.

Читать далее

Автоматизация реверс‑инжиниринга через локальную LLM

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

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

Читать далее

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

Архитектурный паттерн «LangGraph, гибридный RAG + Сигнатурный движок»: универсальный граф для потоковых данных

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

Мы попытались автоматизировать первую линию SOC. Захотелось объединить гибкость ЛЛМ и надежность сигнатурных движков. Поместилось все это в один асинхронный граф.

Под капотом гибридный RAG (Vector + BM25), zero‑cost фича для экономии токенов и параллельный сигнатурный анализ.

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

Читать далее

Claude Code в Telegram голосом: свой мост, когда официальный канал выключен

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

MCP-сервер отвечает Connected. Инструменты работают: бот сам присылает мне сообщения. Мои сообщения до бота доходят, я вижу их в очереди Telegram. А в сессию Claude Code они не попадают. Ни ошибки, ни предупреждения.

Полтора часа я искал не там.

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

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

Читать далее

Ваш парсер .evtx молча прочитал 4% журнала — и не считает это ошибкой

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

Скрипт на python-evtx отработал без единой ошибки, с кодом возврата 0, и вернул 94 записи. В файле их было 2309, и вся атака — от создания админской учётки до запуска шифровальщика — оказалась в потерянных 96%. Разбираемся, почему два байта в заголовке .evtx нельзя принимать на веру и почему проверка непрерывности EventRecordID в этом случае отвечает «пропусков нет».

Читать далее

Как я искал идеальный промпт для сопроводительных писем (и что оказалось важнее модели)

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

Хотел понять, потянет ли маленькая локальная модель сопроводительные письма или без облака никак. Оказалось, главный рычаг не модель, а промпт: переписал инструкцию, и отправляемость прыгнула с 0% до 88%, а рекрутёр вслепую принял 6 писем-генераций из 8 за живые.

Читать далее

Ешь, молись, люби своё облако: как Dogfooding помогает развивать продукт

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

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

Читать далее

По обе стороны антибота: как я имитирую Chrome при скрейпинге и ловлю ботов по тем же сигналам

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

Я собираю афишу города в одну карту из пяти источников. Два из них — Яндекс.Афиша и afisha.ru — собирать себя не хотят. И режут не так, как ждешь: ни логина, ни капчи на входе, ни «подтвердите, что вы не робот». Мой requests.get(...) ловит 403 — даже когда заголовки скопированы из Chrome один в один.

Первая мысль была дурацкая: где-то не хватает куки или очередного sec-ch-ua. Оказалось — проблема раньше. К тому моменту, когда сервер читает мой браузерный User-Agent, он уже успел посмотреть, как именно клиент открыл защищенное соединение. Питоновский клиент палится ровно тем, как он здоровается.

Читать далее

Python: как создавался язык и какие патенты связаны с ним сейчас?

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

Python — один из известнейших мировых языков программирования. Его создатель — Гвидо ван Россум из Нидерландов. О том, как был придуман язык, и кто патентует разработки, связанные ним, — об этом в нашей статье.

Читать далее