pythonl | Unsorted

Telegram-канал pythonl - Python/ django

52808

по всем вопросам @haarrp @itchannels_telegram - 🔥 best it channels @ai_machinelearning_big_data -ML @ArtificialIntelligencedl -AI @datascienceiot - ml 📚 @pythonlbooks -📚books

Subscribe to a channel

Python/ django

🖥 Как масштабировать Python Task Queue — подробный гайд

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

🎯 Основные проблемы:
• Даже при низком CPU задачи могут выполняться с задержкой
• Очередь может казаться «тихой», но задачи копятся
• Масштабирование вручную по метрикам CPU/памяти — неэффективно
• Часто “один жирный воркер” не решает проблему — надо менять подход

⚙️ Как масштабировать: пошагово

1) 🔌 Выбор брокера сообщений

• Redis — прост в настройке, отлично работает с Celery и RQ
• RabbitMQ — надёжнее (повторы, подтверждения), подходит для критичных задач

2) ⚙️ Настройка воркеров

• *Вертикальное масштабирование*
— больше процессов внутри одного воркера (в Celery можно concurrency)
• *Горизонтальное масштабирование*
— запуск множества воркеров на разных инстансах, читающих из одной очереди
— универсальное и гибкое решение

3) 📈 Авто-скейлинг по latency, а не CPU

• Частая ошибка: масштабировать по CPU
• Правильный подход: масштабировать по времени ожидания задач в очереди
• Judoscale позволяет автоматизировать масштабирование именно по queue latency
• При росте задержки запускаются новые воркеры, при снижении — отключаются

4) 🧠 Fan-Out: разбивай большие задачи

Вместо:
Одна задача: обработать 10 000 пользователей

Правильно:
10 000 задач: по одной на каждого пользователя

Преимущества:
• Параллельность
• Надёжность (ошибки локализуются)
• Легче масштабировать обработку

📊 Результаты после внедрения:
• Время ожидания задач сократилось с 25 минут до 30 секунд
• Масштабирование стало динамичным
• Инфраструктура стала дешевле — меньше простаивающих воркеров

Рекомендации:
• Используй Redis или RabbitMQ в зависимости от требований
• Отдавай предпочтение горизонтальному масштабированию
• Следи за latency, а не за CPU
• Используй Judoscale для авто-масштабирования
• Применяй fan-out для повышения надёжности и скорости

🖥 Ссылка на статью

@pythonl

Читать полностью…

Python/ django

🪬 Boto3 — мост между Python и AWS. Эта официальная Python-библиотека предоставляет удобный интерфейс для взаимодействия с сервисами AWS — от простых операций с S3 до управления кластерами EC2.

После недавнего прекращения поддержки Python 3.8 проект сосредоточился на современных версиях языка. Особенность Boto3 в двухуровневой архитектуре: низкоуровневые клиенты для точного контроля и ресурсные объекты для упрощённого синтаксиса. Документация от AWS включает примеры для всех основных сервисов, что делает интеграцию почти безболезненной.

🤖 GitHub

@pythonl

Читать полностью…

Python/ django

🤖 ACI.dev — Унифицированный доступ AI-агентов к 600+ инструментам

ACI (Agent Capability Interface) — это открытая платформа, которая позволяет AI-агентам подключаться к более чем 600 внешним инструментам и API, используя единую инфраструктуру доступа. Система включает поддержку многоарендной архитектуры (multi-tenant), гибкие разрешения и несколько режимов вызова — как через MCP-сервер, так и напрямую через SDK.

🎯 Цель проекта — предоставить ИИ-доступ к реальным действиям в цифровой среде: от отправки писем и управления календарём до взаимодействия с CRM, базами данных, DevOps-инструментами и даже пользовательскими функциями.

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

- 🔌 600+ готовых интеграций
Поддержка популярных платформ: Notion, Slack, Google Calendar, GitHub, Discord, Twilio, PostgreSQL и многих других.

- 🔐 Разграничение доступа и безопасность
Поддержка granular-permissions, токенов доступа, ролей, и подписанных вызовов с проверкой подлинности.

- 🧠 Интеграция с AI-агентами
Разработано для работы с open-source AI-платформами, включая AutoGen, CrewAI, LangGraph, OpenDevin, Devika и т.д.

- 🛠️ Два способа использования
1. MCP Server — единая точка входа, через которую агент может выполнять действия.
2. ACI SDK — локальное подключение и вызов возможностей напрямую из кода.

- 🌐 Webhooks и Plugin support
Поддержка обратных вызовов и подключения как внешнего плагина к другим системам (например, для LLM-агентов).

ACI — это своего рода "операционная система" для ИИ-агентов, позволяющая им действовать в реальном мире с контролем, безопасностью и масштабируемостью.

🔗 Полезные ссылки:
- GitHub
- Документация

Читать полностью…

Python/ django

Второй язык программирования для карьерного роста

Навык работы с Go — это хорошее дополнение к скиллсету опытного программиста. Освоить язык можно на курсе Нетологии. Это актуальная программа 2025 года, которую мы разработали с учётом последних трендов отрасли.
На курсе вас ждёт много практики: 4 проекта для портфолио, 32 задания и хакатон. За 6 месяцев вы освоите язык на продвинутом уровне и научитесь:

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

Практикующий эксперт проведёт для вас 3 персональные консультации. Центр развития карьеры поможет упаковать весь опыт в сильные резюме и портфолио. Освойте Go как второй язык программирования и растите в карьере

Реклама. ООО "Нетология". ИНН 7726464125 Erid 2VSb5xBerBJ

Читать полностью…

Python/ django

❓Зачем Data Scientist изучать ML?

Машинное обучение — это не просто модное словосочетание. Это основа Data Science, без которой успешная карьера в этой области невозможна. Вы не сможете работать с большими данными и обучать ИИ, если не освоите методы ML.

На открытом вебинаре 19 мая в 18:00 мск вы узнаете, зачем вам ML, и научитесь решать реальную задачу: классифицировать изображения с помощью машинного обучения.

📣 Спикер Мария Тихонова – PhD Computer Science, Senior Data Scientist и преподаватель в одном из крупнейших университетов России.

➡️ Записывайтесь на открытый вебинар и получите скидку на большое обучение «Специализация Machine Learning»: https://otus.pw/49Fa3/?erid=2W5zFHaP9np 

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

Python/ django

⚡️Создаём свою нейросеть в PyTorch

Хотите быстро разобраться в PyTorch и написать свою нейросеть? Мы подготовили для вас вебинар, где на практике разберём все этапы создания ML-модели.

Вебинар проведет Владислав Агафонов — ML-инженер, ранее работал в Yandex и Huawei.

Что будет на вебинаре?
🟠Установим PyTorch в Google Colab и настроим работу на бесплатном GPU;
🟠Поймём, что такое тензоры и почему они — фундамент всех нейросетей;
🟠Скачаем готовый датасет, разберём его структуру и подготовим для обучения;
🟠Научимся использовать DataLoader для эффективной загрузки данных;
🟠Пошагово соберём облегчённую версию классической свёрточной нейронной сети (CNN);
🟠Обучим и протестируем модель.

🕗 Встречаемся 14 мая в 18:30 по МСК, будет много практики, ответы на вопросы и полезные инсайты от эксперта.

😶Зарегистрироваться на бесплатный вебинар

Читать полностью…

Python/ django

Как найти аномалии в данных с помощью машинного обучения?

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

На открытом вебинаре 13 мая в 18:00 мск мы подробно разберем, как эффективно искать аномалии в данных с использованием популярных методов, от простых статистических до продвинутых, таких как Isolation Forest и OneClassSVM.

📣 Спикер Мария Тихонова – PhD Computer Science, Senior Data Scientist и преподаватель в одном из крупнейших университетов России.

➡️ Запишитесь на вебинар и получите скидку на большое обучение «Специализация Machine Learning»: https://otus.pw/YfwA/?erid=2W5zFH7af1a 

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

Python/ django

🖥 Шпаргалка по RegEx в Python

📦 Импорт:


import re

🔍 Основные функции модуля re


re.search(pattern, string) # Ищет первое совпадение (где угодно в строке)
re.match(pattern, string) # Ищет совпадение только в начале строки
re.fullmatch(pattern, string) # Проверяет, соответствует ли вся строка шаблону
re.findall(pattern, string) # Возвращает все совпадения в виде списка
re.finditer(pattern, string) # То же, но как итератор Match-объектов
re.sub(pattern, repl, string) # Замена по шаблону
re.split(pattern, string) # Разбиение строки по шаблону


# 🧠 Основы синтаксиса шаблонов

| Шаблон | Что значит |
|---------|-------------------------------------|
| . | Любой символ, кроме \n |
| ^ | Начало строки |
| $ | Конец строки |
| * | 0 или больше повторений |
| + | 1 или больше |
| ? | 0 или 1 повторение |
| {n} | ровно n раз |
| {n,} | n или больше |
| {n,m} | от n до m |
| [] | Символьный класс |
| [^] | Отрицание символьного класса |
| | | Или (`a|b`) |
| () | Группа (захват) |
| \ | Экранирование спецсимвола |

💡 Примеры


re.search(r'\d+', 'ID=12345') # Найдёт '12345' (одно или больше цифр)
re.match(r'^\w+$', 'hello_world') # Вся строка — только буквы/цифры/_
re.findall(r'[A-Z][a-z]+', 'Mr. Smith and Dr. Brown') # ['Smith', 'Brown']
re.sub(r'\s+', '-', 'a b c') # 'a-b-c'
re.split(r'[;,\s]\s*', 'one, two;three four') # ['one', 'two', 'three', 'four']


🎯 Захват групп


text = 'Name: John, Age: 30'
match = re.search(r'Name: (\w+), Age: (\d+)', text)
if match:
print(match.group(1)) # John
print(match.group(2)) # 30


Группы можно называть:


pattern = r'(?P<name>\w+): (?P<value>\d+)'
match = re.search(pattern, 'score: 42')
match.group('name') # 'score'
match.group('value') # '42'


🧱 Комбинированные шаблоны


pattern = r'\b(?:https?://)?(www\.)?\w+\.\w+\b'
text = 'Visit https://example.com or www.test.org'
re.findall(pattern, text) # [['www.'], ['www.']]


⚠️ Полезные советы

• Всегда используйте r'' перед шаблоном, чтобы не экранировать \
re.compile(pattern) ускоряет повторное использование
• Старайтесь избегать re.match — чаще нужен re.search

✅ Быстрая проверка шаблонов

📍 Онлайн-проверка:
- https://regex101.com/
- https://pythex.org/

Хочешь отдельную шпаргалку по re.sub с лямбдами, заменами и функциями внутри, ставь лайк 👍

@pythonl

Читать полностью…

Python/ django

📡 FISSURE — фреймворк для анализа и реверс-инжиниринга радиосигналов.

Этот open-source проект объединяет инструменты для работы с RF-сигналами: от обнаружения и классификации до атак и автоматизированного тестирования.

Инструмент поддерживает популярное SDR-оборудование и возможность развертывания распределённых сенсорных узлов для задач радиомониторинга. Проект активно развивается, в 2024 году добавили Z-Wave-анализ и автоматические триггеры для атак.

🤖 GitHub

@pythonl

Читать полностью…

Python/ django

🛠 Werkzeug — набор утилит для WSGI-приложений на Python

Пока все говорят о Flask, его мозги — библиотека Werkzeug, остается в тени. Этот инструмент уровня middleware лежит в основе многих Python-фреймворков, предоставляя базовые механизмы работы с HTTP-запросами, маршрутизацией и сессиями без навязывания архитектуры.

В Werkzeug нет ORM или шаблонизатора, но зато есть:
▪️Интерактивный дебаггер с REPL прямо в браузере
▪️Гибкая система роутинга (которую позже заимствовал Flask)
▪️WSGI-сервер для разработки с горячей перезагрузкой

🤖 GitHub

@pythonl

Читать полностью…

Python/ django

🔐 Что такое DES - шифрование и как работает?


💡 DES (Data Encryption Standard)
DES — симметричный алгоритм шифрования, разработанный в 1970-х. Он использует один и тот же ключ для шифрования и дешифрования, поэтому ключ нужно хранить в секрете.

Длина ключа: 56 бит

Блоки данных: 64 бита

Основан на 16 раундах перестановок и подстановок

Хотя DES считается устаревшим из-за своей уязвимости (его можно взломать брутфорсом за считанные часы), он до сих пор используется в учебных целях и в некоторых устаревших системах.

🐍 Пример использования DES на Python
Для работы с DES в Python можно использовать библиотеку PyCryptodome.
Пример простого шифрования текста:


from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad

# Ключ должен быть ровно 8 байт
key = b'8bytekey'
cipher = DES.new(key, DES.MODE_ECB)

data = b'HelloWorld123' # Длина должна быть кратной 8, иначе нужно дополнить
padded_data = pad(data, 8 )

encrypted = cipher.encrypt(padded_data)
print("Зашифрованные данные:", encrypted)

# Дешифрование
decrypted = unpad(cipher.decrypt(encrypted), 8 )
print("Расшифрованные данные:", decrypted)


Важно:

Ключ должен быть ровно 8 байт (DES = 64-битный ключ, но 8 бит используются для контроля чётности).

Данные должны быть кратны 8 байтам, поэтому часто используется padding (дополнение пустыми байтами).

⚠️ Почему DES больше не рекомендуют?
Маленький размер ключа → легко перебрать с помощью современных вычислительных мощностей.

Уязвим к атакам (например, differential cryptanalysis).

Сегодня вместо DES чаще используют AES (Advanced Encryption Standard), который безопаснее и быстрее.

✍️ Вывод
Шифрование — важнейший инструмент защиты данных. DES — классический пример симметричного шифрования, но сегодня он больше используется в учебных целях или для совместимости с устаревшими системами. Если нужна настоящая защита, выбирайте современные алгоритмы, такие как AES.

Читать полностью…

Python/ django

🚀 Jittor фреймворк, использующий JIT-компиляцию и мета-операторы для оптимизации вычислений прямо во время выполнения.

Проект сочетает простоту Python-интерфейса с низкоуровневой компиляцией на C++/CUDA. В отличие от традиционных графовых подходов, он динамически компилирует операции под конкретную модель, что потенциально может ускорить выполнение сложных сетей.

🤖 GitHub

@pythonl

Читать полностью…

Python/ django

🖥 Задача (с подвохом). Что выведет этот код?


def extend_list(val, lst=[]):
lst.append(val)
return lst

# Первый вызов: используем список по умолчанию
list1 = extend_list(10)
# Второй вызов: передаём новый пустой список
list2 = extend_list(123, [])
# Третий вызов: снова используем список по умолчанию
list3 = extend_list('a')

print('list1 =', list1)
print('list2 =', list2)
print('list3 =', list3)

🧩 Решение

Механика дефолтного списка
В сигнатуре функции lst=[] создаётся один список при определении функции и затем переиспользуется во всех вызовах, где lst не передан.

Первый вызов

```python
list1 = extend_list(10)
lst не передан → берётся дефолтный список.

Добавляем 10.
⇒ list1 становится [10].
```p
Второй вызов

```python
list2 = extend_list(123, [])```

Передаём новый пустой список [].

В него добавляется 123.
⇒ list2 становится [123].

Третий вызов

```python
list3 = extend_list('a')```

Опять не передан
lst → используется тот же дефолтный список, куда уже был добавлен 10.

Добавляем 'a'.
⇒ дефолтный список становится [10, 'a'], и list3 тоже ссылается на [10, 'a'].

Итоговый вывод программы:

```python
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']```

Обратите внимание, что
list1 и list3 — это один и тот же дефолтный список, поэтому изменения сохраняются между вызовами.

@pythonl

Читать полностью…

Python/ django

🖥 Microsoft: до 30 % кода уже пишет AI

На конференции LlamaCon CEO Microsoft Сатья Наделла объявил, что от 20 % до 30 % кода в репозиториях компании сегодня «написаны программным обеспечением», то есть с использованием искусственного интеллекта.

## Ключевые моменты

- Зависимость от языка. Лучшие результаты при генерации — на Python, более слабые — на C++.
- Интеграция на всех этапах. AI применяется не только для генерации чернового кода, но и для его ревью.
- Сравнение с конкурентами. Google уже сообщает о более 30 % AI-сгенерированного кода, Meta прогнозирует до 50 % при разработке своих языковых моделей.
- Долгосрочная перспектива. По прогнозам CTO Microsoft, к 2030 г. доля AI-генерируемого кода может вырасти до 95 %.
- Ограничения метрик. Пока не до конца ясно, что именно учитывается в «AI-коде» (автодополнение, шаблоны, бизнес-логика), поэтому цифры стоит воспринимать с осторожностью.

## Почему это важно

1. Ускорение разработки. Рутинные задачи автоматизируются, разработчики получают больше времени на архитектуру.
2. Новый уровень качества. Автоматическое ревью помогает быстрее находить ошибки, но требует строгой проверки.
3. Риски безопасности. Сгенерированный код нуждается в дополнительном анализе на уязвимости.
4. Эволюция ролей. Разработчики всё больше становятся архитекторами и аудиторами, а не «создателями» кода.

@pythonl

Читать полностью…

Python/ django

Что выведет этот код при запуске на Python 3.10+ (например, 3.11)?


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

Ответ:

Automatic mode
Mode manual, other keys: ['threshold', 'debug']
Low threshold 0
Краткое пояснение:

Для первого объекта (mode="auto", threshold=10) срабатывает первый case Config(mode="auto") → Automatic mode.

Для второго (mode="manual", threshold=5, debug=True) первый не совпадает, второй с threshold<5 не проходит (5 < 5 → False), зато третий case Config(mode=mode, **others) — биндинг mode='manual', остальные ключи (threshold и debug) попадают в others → Mode manual, other keys: ['threshold', 'debug'].

Для третьего (threshold=0) первый и третий не подходят (нет mode), а второй — case Config(threshold=threshold) if threshold<5 — срабатывает (0<5) → Low threshold 0.


@pythonl

Читать полностью…

Python/ django

🧠 Как клонировать голос с помощью Open Source (Coqui TTS)

Хочешь, чтобы ИИ говорил твоим голосом? Без подписок, платных API и ограничений? Вот подробная инструкция, как клонировать свой голос с нуля с помощью open-source инструментов:

🔧 Установка


sudo apt install ffmpeg
pip install TTS soundfile torchaudio gradio

git clone https://github.com/coqui-ai/TTS.git
cd TTS
pip install -e .

🎙️ 1. Подготовка записи голоса

Тебе нужен файл .wav:
- продолжительность: от 1 минуты
- формат: моно, 16 кГц, 16-bit

Пример конвертации:

ffmpeg -i input.mp3 -ac 1 -ar 16000 output.wav


🧬 2. Генерация эмбеддинга твоего голоса


from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import Xtts

config = XttsConfig()
model = Xtts.init_from_config(config)
model.load_checkpoint("tts_models/multilingual/multi-dataset/xtts_v2")

voice_sample = "your_voice.wav"
speaker_embedding = model.get_speaker_embedding(voice_sample)

📤 3. Генерация речи с твоим голосом


text = "Привет! Я теперь могу говорить твоим голосом."
wav = model.tts(text, speaker_embedding=speaker_embedding)
model.save_wav(wav, "output.wav")


💻 4. (Опционально) Интерфейс с Gradio


import gradio as gr

def speak(text):
wav = model.tts(text, speaker_embedding=speaker_embedding)
path = "generated.wav"
model.save_wav(wav, path)
return path

gr.Interface(fn=speak, inputs=gr.Textbox(), outputs=gr.Audio()).launch()


✅ Быстрый способ (через CLI)


tts --model_name "tts_models/multilingual/multi-dataset/xtts_v2" \
--text "Привет, мир!" \
--speaker_wav path/to/your.wav \
--out_path output.wav


⚠️ Важно


- 💻 Работает на CPU, но лучше с GPU.
- 🌐 Поддерживает русский язык.

@pythonl

Читать полностью…

Python/ django

🎮 Oh My ~God~ Git — необычная и полезная игра с открытым исходным кодом, которая помогает разобраться с GIT не через скучные туториалы, а с помощью наглядных карточек и геймплея.

🧠 В процессе ты:
• Поймёшь, как устроен GIT под капотом
• Научишься работать с ветками, коммитами, merge и rebase
• Запомнишь команды на практике, играя

📦 Игра доступна прямо в браузере: [ohmygit.org](https://ohmygit.org/)
💻 Или можно скачать и установить с GitHub: [github.com/git-learning-game/oh-my-git](https://github.com/git-learning-game/oh-my-git)

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

Читать полностью…

Python/ django

🐍 Задача уровня Pro: декоратор с внутренним состоянием

📌 Задача:
Напиши декоратор call_limiter, который:

- ограничивает функцию f максимум до n вызовов
- после n вызова функция больше не вызывается, а возвращает строку "LIMIT REACHED"

Пример использования:


@call_limiter(3)
def greet(name):
return f"Hello, {name}!"

print(greet("Alice")) # Hello, Alice!
print(greet("Bob")) # Hello, Bob!
print(greet("Charlie"))# Hello, Charlie!
print(greet("Dave")) # LIMIT REACHED


🎯 Подвохи:
- Нужно создать декоратор-фабрику с аргументом n
- Внутри должна быть функция с nonlocal, чтобы отслеживать число вызовов
- Часто путаются и используют mutable default, что ломает независимость между декорируемыми функциями

Решение:

```python
def call_limiter(n):
def decorator(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
if count >= n:
return "LIMIT REACHED"
count += 1
return func(*args, **kwargs)
return wrapper
return decorator
```

🧪 **Проверка:**

```python
@call_limiter(2)
def ping():
return "pong"

print(ping()) # pong
print(ping()) # pong
print(ping()) # LIMIT REACHED

@call_limiter(1)
def echo(msg):
return msg

print(echo("hi")) # hi
print(echo("bye")) # LIMIT REACHED
```

🧠 **Что проверяет задача:**

• Понимание функций высшего порядка
• Работа с `nonlocal` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области



@pythonl

Читать полностью…

Python/ django

🎭 Pykka — акторная модель для Python без лишних сложности. Этот проект позволяет организовывать конкурентные вычисления без традиционных проблем с состоянием и блокировками.

Вдохновлённый знаменитым Akka для JVM, Pykka предлагает минималистичный подход — никаких супервизоров или распределённых акторов, только чистые принципы обмена сообщениями между изолированными процессами.
Инструмент имеет продуманную архитектуру: разработчику достаточно определить поведение акторов, а Pykka возьмет на себя всю работу с очередями и потоками.

🤖 GitHub

@pythonl

Читать полностью…

Python/ django

🧠 Как подготовиться к техническому собеседованию с помощью

Если ты готовишься к собеседованию в IT и не знаешь, с чего начать — обрати внимание на бесплатный курс от freeCodeCamp, основанный на знаменитом списке задач NeetCode 150.

⚙️ Что такое NeetCode 150?

• 🟤 Это отобранные 150 задач с LeetCode, покрывающие всё, что нужно знать:
• массивы
• строки
• хеш-таблицы
• деревья и графы
• динамическое программирование
• стек и очередь
• backtracking и двоичный поиск

🎓 Что предлагает курс freeCodeCamp:
• 38 часов подробного видеоконтента
• Каждая задача разбирается пошагово — с объяснением стратегии и кода
• Языки: Python и JavaScript
• Полностью бесплатно

📈 Почему это эффективно:
• Все задачи — реальный опыт с технических собеседований
• Структура курса позволяет идти от простого к сложному
• Удобно учиться в своем темпе

- Стартуй здесь
- Видео с разбором вопросов
- Решения

Не упусти шанс систематизировать знания и уверенно пройти собеседование!

@pythonl

Читать полностью…

Python/ django

📬 BillionMail — автономная платформа для email-маркетинга и почтовых серверов

🧩 Что это такое

BillionMail — это self-hosted open-source платформа, которая позволяет:

• Настроить полноценный почтовый сервер
• Управлять рассылками email
• Отслеживать открытие писем и клики
• Контролировать доставляемость и отклонения
• Работать через браузерный интерфейс без зависимости от облака

🚀 Ключевые возможности

• Управление почтовыми ящиками и доменами
• Email-маркетинг с шаблонами, сегментами и аналитикой
• Встроенный SMTP-сервер и логика ретраев
• Поддержка DKIM, SPF, DMARC
• Мониторинг отправок, спама, bounce-статистики
• API и интеграции с внешними системами

⚙️ Технологии

• Backend: Python
• Web-интерфейс: Vue.js
• СУБД: MySQL
• Mail engine: Postfix + Dovecot
• OS: Linux-серверы (Ubuntu/Debian)

🛠 Установка


1. Установите `Docker` и `docker-compose`
2. Клонируйте репозиторий:
```bash
git clone https://github.com/aaPanel/BillionMail.git
cd BillionMail


Запустите:


docker-compose up -d


🔗 Репозиторий

@pythonl

Читать полностью…

Python/ django

🖥 systemd-pilot — это десктопное приложение для управления сервисами systemd на GNU/Linux системах!

🌟 По сути, это графический интерфейс для команд systemctl. Он позволяет просматривать и управлять системными сервисами, быстро развертывать новые сервисы, а также запускать, останавливать и перезапускать их. Приложение легковесное и использует всего один Python-скрипт. Также предусмотрена поддержка поиска сервисов по имени.

🔐 Лицензия: GPL-3.0

🖥 Github

@pythonl

Читать полностью…

Python/ django

🐍 Задача с подвохом: Декораторы и мутабельные ловушки

Условие:

Что выведет следующий код и почему?


def memoize(fn):
cache = {}
def wrapper(arg):
if arg in cache:
print("Из кэша")
return cache[arg]
else:
result = fn(arg)
cache[arg] = result
return result
return wrapper

@memoize
def add_to_list(val, lst=[]):
lst.append(val)
return lst

res1 = add_to_list(1)
res2 = add_to_list(2)
res3 = add_to_list(1)

print(res1)
print(res2)
print(res3)


Вопрос:
Что будет выведено? Где здесь двойной подвох?

🔍 Разбор:

На первый взгляд кажется, что:

1. add_to_list(1) вернёт [1]
2. add_to_list(2) вернёт [2]
3. add_to_list(1) снова вызовет функцию (или достанет из кэша)

Но тут два подвоха:

Подвох №1: изменяемый аргумент по умолчанию

Аргумент lst=[] создаётся один раз при определении функции. Все вызовы без передачи списка будут использовать один и тот же список.

Подвох №2: кэширование по ключу

Декоратор memoize кэширует результат по ключу arg. Но функция возвращает список, который изменяется при каждом вызове. Даже если кэш сработает, вы получите тот же объект списка, который менялся между вызовами!

🧮 Что реально произойдёт:

- `res1 = add_to_list(1)` → функция вызвана, список становится `[1]`
- `res2 = add_to_list(2)` → функция вызвана снова (новый аргумент), список становится `[1, 2]`
- `res3 = add_to_list(1)` → аргумент `1` есть в кэше, сработает ветка `print("Из кэша")` и вернётся **ссылку на тот же изменённый список**

🔢 **Вывод:**

```
[1, 2]
[1, 2]
Из кэша
[1, 2]
```

Все результаты указывают на один и тот же изменённый список.

💥 **Почему это важно:**

1️⃣ **Изменяемые аргументы по умолчанию** сохраняются между вызовами
2️⃣ **Кэширование мутабельных объектов** может привести к неожиданным результатам: при возврате списка вы возвращаете не "результат на момент вычисления", а ссылку на объект, который может измениться позже

🛡️ **Как исправить:**

1️⃣ Использовать `lst=None` и инициализировать внутри функции:
```python
def add_to_list(val, lst=None):
if lst is None:
lst = []
lst.append(val)
return lst
```

2️⃣ Если кэшировать мутабельные объекты, лучше возвращать **копию**:
```python
import copy
cache[arg] = copy.deepcopy(result)
```

✅ **Вывод:**

Декораторы + мутабельные аргументы = ловушка даже для опытных разработчиков. Особенно, когда мутабельные объекты кэшируются и меняются за кулисами.


@pythonl

Читать полностью…

Python/ django

🖥 История развития Python (1989 – 2025)

1989-12 — Гвидо ван Россум, работая в CWI (Нидерланды), начинает писать новый язык как «лучший ABC».
1991-02 — Публикация Python 0.9.0 в alt.sources; уже есть классы, исключения и базовые коллекции.
1994-01-26 — Выходит Python 1.0.0: добавлены lambda, map, filter, reduce.
1994-02 — Создана группа новостей comp.lang.python, вокруг которой формируется сообщество.
2000-10-16 — Python 2.0: list-comprehensions, сборщик циклического мусора, первая реализация Unicode.
2003-07-29 — Python 2.3: внедрён сортировщик Timsort.
2008-12-03 — Python 3.0 («Py3k»): переход на новый str`/`bytes, print() как функция, разделённый range.
2010-07-03 — Python 2.7: «долгожитель», поддержка продлена до 2020-01-01.
2015-09-13 — Python 3.5: появляется синтаксис async / await.
2018-07-12 — Гвидо объявляет о выходе с поста BDFL после споров вокруг оператора «морж» :=.
2019-10-14 — Python 3.8: тот самый оператор :=, позиционные-только аргументы / и улучшенный typing.
2020-01-01 — Официальный End-of-Life ветки 2.x.
2021-10-04 — Python 3.10: структурное сопоставление match/case.
2023-10-02 — Python 3.12: заметное ускорение интерпретатора (до +25 %), префиксные f-строки.
2024-10-07 — Python 3.13.0: экспериментальная сборка Free-Threaded CPython без GIL (PEP 703).
2025-04-08 — Python 3.13.3 (текущая стабильная версия).
2025-10 (ожидается) — Python 3.14: дальнейшая стабилизация «без-GIL»-сборки, новый `buffer`-API.

---

### Интересные факты

- Название появилось благодаря юмористическому шоу *Monty Python’s Flying Circus*; отсюда мемы «spam / eggs».
- Команда import this выводит Zen of Python — 19 однострочных принципов языка (PEP 20).
- Пасхалка import antigravity открывает комикс xkcd #353; from __future__ import braces выдаёт SyntaxError: not a chance.
- Timsort, написанный для Python 2.3, позже стал дефолтным алгоритмом сортировки в Java 7, Android, Swift и Rust.
- PEP 703 позволяет собирать CPython без GIL, открывая путь к настоящему многопоточному Python без радикального «Python 4».
- В апреле 2025 Python обновил рекорд индекса TIOBE, превысив 25 % и почти втрое обогнав C++.
- Гвидо носил титул BDFL (Benevolent Dictator For Life) почти 30 лет; c 2023 г. он возвращён как *BDFL-Emeritus*.
- PyPI (Python Package Index) превысил 500 000 пакетов, а pip install скачивается около 40 млрд раз в месяц (апрель 2025).
- import __hello__ просто печатает *Hello world!* — напоминание, что «явное лучше неявного».

> Итог: за три с лишним десятилетия Python превратился из рождественского хобби-проекта в язык № 1, оставаясь при этом дружелюбным и легко читаемым .

https://www.youtube.com/shorts/ZDMz1foKKlM?feature=share

@pythonl

Читать полностью…

Python/ django

👩‍💻 datasketch — Python-библиотека, содержащая реализации вероятностных структур данных, которые используются для оптимизации работы с большими объемами данных!

🌟 Среди основных возможностей — оценка схожести Jaccard с помощью MinHash и его взвешенной версии, а также оценка кардинальности множества с помощью HyperLogLog и HyperLogLog++. Эти структуры данных позволяют выполнять операции, такие как поиск схожих элементов или подсчет уникальных объектов, быстро и с минимальными затратами памяти.

🔐 Лицензия: MIT

🖥 Github

@pythonl

Читать полностью…

Python/ django

✍️ novelWriter минималистичный редактор для писателей с поддержкой Markdown. Проект использует облегченный синтаксис на основе Markdown и сохраняет все данные в виде обычных текстовых файлов, что делает его идеальным для работы с системами контроля версий.

Инструмент делает акцент на простоте и надежности. Вместо проприетарных форматов он использует чистый текст с метаданными в JSON. Редактор написан на Python с использованием Qt6 и доступен для всех основных ОС. При этом проект остается полностью открытым и принимает contributions, особенно в части переводов через Crowdin.

🤖 GitHub

@pythonl

Читать полностью…

Python/ django

👣 Pyrefly — это новая, высокопроизводительная система статической типизации и IDE-платформа, написанная на Rust, для Python, разрабатываемая командой Facebook.

Главное:
🔍 Наследник Pyre
Pyrefly задуман как следующая версия проверяльщика типов Pyre от Meta, но с упором на скорость, модульную архитектуру и возможность генерации «типизированного» AST.

🚀 Реализовано на Rust
Большая часть кода написана на Rust для лучшей безопасности памяти и конкурентности. Только ~1 % кода в Python и ~6 % в TypeScript (для интерфейса сайта и LSP).

⚙️ Три этапа проверки
Сбор экспорта каждого модуля (решение всех import * рекурсивно)

Преобразование кода в набор «байндингов» (definitions, uses, anon) с учётом потоковых типов

Решение этих байндингов (flow-types, phi-функции при ветвлениях и рекурсии)

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

🛠️ Интеграция и упаковка

Разработчикам Rust: cargo build, cargo test

Во внутренних проектах Meta: запуск через Buck2 (buck2 run pyrefly -- check file.py)

Для PyPI: сборка колес через Maturin (pip install maturin && maturin build)


📡 IDE-функции и LSP
Включена поддержка Language Server Protocol для автодополнения, перехода к определению и интерактивной отладки в редакторах.

📆 Планы
Полная замена Pyre к концу 2025 года с выпуском стабильных версий на PyPI каждую неделю.

📜 Лицензия
MIT — свободное использование и вклад в проект приветствуются.

🔜 Узнать подробнее и принять участие можно в репозитории: Github

@pythonl

Читать полностью…

Python/ django

🖥 TUIFIManager

Это кроссплатформенный терминальный termux-ориентированный файловый менеджер, предназначенный для использования с проектом Uni-Curses

📌 Как использовать:
Запустите tuifi в терминале, или импортируйте его в один из ваших проектов Uni-Curses как компонент, например:
from TUIFIManager import *

Установка
sudo pip3 install tuifimanager --upgrade
pip3 install TUIFIManager --upgrade

https://github.com/GiorgosXou/TUIFIManager

@pythonl

Читать полностью…

Python/ django

🖥 PyXL — аппаратный процессор, исполняющий Python без интерпретатора

Разработчик представил PyXL — уникальный аппаратный процессор, который исполняет Python-программы без использования традиционного интерпретатора или виртуальной машины.

Архитектура PyXL:

Python → CPython Bytecode → собственный набор инструкций для прямого исполнения на "железе".

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

Бенчмарк GPIO:

PyXL выполняет переключение GPIO с задержкой всего 480 наносекунд.

Для сравнения: MicroPython на Pyboard — 14–25 микросекунд, несмотря на более высокую частоту (168МГц против 100МГц у PyXL).

Разработчик самостоятельно создал:

Компилятор, линкер и генератор кода

Аппаратную реализацию процессора

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

🎬 Демо и подробности: https://runpyxl.com/gpio

@pythonl

Читать полностью…

Python/ django

Хочешь понять, твое ли аналитика — без курсов, затрат и лишнего стресса?

🔍 Пройди кейс-тест на реальной бизнес-задаче — всё, как в работе настоящего аналитика, но без необходимости иметь профильные навыки. Только мышление, логика и внимательность.

⚡️ Всего 10 конкретных вопросов — от постановки цели до финальных выводов. За 60 минут: — получишь реальные вводные от "коллег",
— прокачаешь структурное мышление,
— поймешь, насколько тебе подходит аналитика,
— получишь обратную связь на каждый шаг.

🔥 Это бесплатный шанс примерить новую профессию — вдруг это именно твое?

👉 Нажми, чтобы начать тест прямо сейчас

Читать полностью…
Subscribe to a channel