PythonTalk
4.75K subscribers
1.44K photos
47 videos
7 files
1.3K links
Привет, меня зовут Олег Булыгин 👋

🐍 Здесь я делюсь полезной информацией для тех, кто пишет код на Python: от разработки до Data Science.

По вопросам: @obulygin91
Download Telegram
🎓 Книга по ML от Себастьяна Рашки

Есть такой Себастьян Рашка — если вы в теме, то знаете, что это core-разработчик Scikit-learn и автор нескольких культовых книжек по машинному обучению. Так вот, у него есть отличная книга Machine Learning Q and AI.

Это не очередной талмуд для начинающих, а чтиво для тех, кто уже перерос «Грокаем алгоритмы», но до полноценного чтения пейперов ещё не дорос.

Что внутри:
▫️ 30 глав в формате «вопрос-ответ» по нейросетям, CV, LLM, оценке и деплою.
▫️ Разбор тем вроде multi-GPU обучения, файнтюнинга трансформеров и Vision Transformers.
▫️ Всё с диаграммами, примерами кода на Python и упражнениями.

Книга есть в открытом доступе, а все допматериалы и код лежат в репозитории.
👍54🔥31🙏1🤗1
Очень лаконичное тестовое на позицию дата-сайентиста в МТС 🧑‍💻

По ссылке лежат данные по оттоку абонентов в телекоме. Целевая переменная – churn (показатель оттока). Нужно построить модель, предсказывающую отток абонентов, оценить качество этой модели и гипотетические перспективы её использования в реальном бизнес-процессе. Дополнительной информации об этом датасете нет (ну и не надо), названия столбцов хорошо отражают их содержание, так что справитесь.

#тестовое |⚡️ Забустить канал 🚀
🔥4👍3👨‍💻21🤔1🙏1
🗺 Карта машинного обучения: вся база в одной картинке

Постоянно вижу, как у начинающих в голове полная каша из алгоритмов, методов и терминов. Одни думают, что ML — это только нейронки, другие не отличают классификацию от кластеризации.

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

Сохранить pdf в норм качестве можно по ссылке.

Кстати, по некоторым из этих тем у меня уже есть статьи:

▫️Линейная регрессия и её регуляризация в Scikit-learn — это база из блока «Обучение с учителем». Про полиномиальную регрессию тоже есть отдельный материал.
▫️ PCA или метод главных компонент — мощная штука для «Снижения размерности» из блока «Обучение без учителя».
65👍3🔥322👎1🥰1🙏1
🖼 Собираем нейронку для генерации картинок на коленке

Нейронки, которые рисуют картинки по тексту, сейчас везде. Но большинство просто дёргает API, не имея ни малейшего понятия, что там под капотом условного Stable Diffusion.

Для тех, кто хочет разобраться, есть проект miniDiffusion — это полная перереализация Stable Diffusion 3.5, написанная с нуля на чистом PyTorch.

👉🏻 Всего ~2800 строк кода. От VAE и текстовых энкодеров до самого DiT и скриптов для обучения.
👉🏻 Никаких лишних зависимостей. Только PyTorch и необходимый минимум.
👉🏻 Внутри всё самое важное: архитектура DiT, Joint Attention, энкодеры T5 и CLIP, планировщик шума и даже расчёт метрики FID.

Кому это надо?
▫️ Для тех, кто хочет реально разобраться, как эта магия генерации картинок работает под капотом.
▫️ Для тех, кто хочет поковырять архитектуру или обучить что-то своё, не продавая душу дьяволу за понимание официальной репы.

Заглянуть в код можно здесь 👈🏻
42🙏21👍1🤔1👌1
🗺 Заблудились в технологиях? Для вас есть карта

Многие начинающие (и не только) часто тонут в бесконечном потоке фреймворков, библиотек и технологий, которые «надо знать». В итоге в голове не дорожная карта, а каша из buzzwords.

Для тех, кто хочет хоть как-то структурировать свой путь и понять, сколько всего ему ещё предстоит выучить (и ужаснуться), есть отличный сервис — roadmap.sh.

Там много подробных карты развития по разным направлениям. Вот несколько👇🏻
1️⃣ Python
2️⃣ Backend
3️⃣ DevOps
4️⃣ AI & Data Scientist
5️⃣ SQL

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

Выбирайте свой путь развития и узнавайте, какие навыки нужно прокачивать до конца жизни во время получения lvl up-ов.
Класс, дуал-класс или мультикласс? На всё скилл-поинтов точно не хватит 🧙🏼‍♂️
4👍221
🏋️‍♂️ Миссия: сбалансировать нагрузку!

Представьте, что вы менеджер проекта. У вас есть список последовательных задач nums, каждая со своей оценкой трудоемкости (в часах). Вам нужно распределить все эти задачи между k разработчиками.

Правила распределения:
* Каждый разработчик получает непрерывный блок задач из списка.
* Каждый из k разработчиков должен получить хотя бы одну задачу.

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

🎯 Задача:
Написать функцию split_array(nums: list[int], k: int) -> int, которая разбивает nums на k непустых непрерывных подсписков и возвращает минимально возможную наибольшую сумму среди этих подсписков.

Пример 1:
nums = [7, 2, 5, 10, 8], k = 2
Нужно разделить задачи между двумя разработчиками.

* Вариант 1: [7] | [2, 5, 10, 8]. Нагрузка: 7 и 25. Максимальная нагрузка: 25.
* Вариант 2: [7, 2] | [5, 10, 8]. Нагрузка: 9 и 23. Максимальная нагрузка: 23.
* Вариант 3: [7, 2, 5] | [10, 8]. Нагрузка: 14 и 18. Максимальная нагрузка: 18.
* Вариант 4: [7, 2, 5, 10] | [8]. Нагрузка: 24 и 8. Максимальная нагрузка: 24.

Сравниваем максимальные нагрузки: 25, 23, 18, 24. Самая маленькая из них — 18.
➡️ Результат: 18.

Пример 2:
nums = [1, 2, 3, 4, 5], k = 2
* Оптимальное разделение: [1, 2, 3] | [4, 5].
* Нагрузка: 6 и 9. Максимальная нагрузка: 9.
➡️ Результат: 9.

Присылайте решения в комменты 👇🏻
👨‍💻2👍1🔥1🤔1
AI больше не опция. Теперь это приказ👺

Новость-огонь из стана Microsoft. По данным Business Insider, корпорация добра теперь будет учитывать использование своих же AI-инструментов при оценке перформанса сотрудников.

Президент дев-дивизиона Джулия Льюсон прямо так и написала в письме менеджерам:

> «Использование ИИ больше не является опциональным — это основа для каждой роли и каждого уровня».


Говоря по-простому: не нагенерил в GitHub Copilot положенную норму — жди интересных бесед на ревью.

Причина проста до безобразия: сотрудники не очень-то торопятся использовать внутренние AI-сервисы, а тем временем конкуренты вроде Cursor откусывают долю рынка.

Классический менеджерский ход: когда не можешь сделать продукт, которым хочется пользоваться, — просто введи KPI на его использование 🌝
😁7🤯3😱222👍1🤔1🌚1👨‍💻1👀1
Моржовый оператор в Python: полный гайд от основ до хардкорных трюков 🦭

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

Так где же правда? 🤔

Давайте разложим всё по полочкам и разберём не только каноничные примеры с while и list comprehensions, но и копнём глубже:
- 🔥 трюки с any()/all() и f-строками.
- 🤯 Как «морж» помогает в накопительных вычислениях.
- 👺 И, конечно, тёмная сторона: где можно больно выстрелить себе в ногу, попав в ловушки с областью видимости и «ленивыми» вычислениями.

Обо всём этом читайте в статье 👈🏻
1👍721🔥1🙏1🤓1👨‍💻11
✍️ Решения вчерашней задачи

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

def split_array(nums: list[int], k: int) -> int:
def can_split(capacity: int) -> bool:
developers_needed = 1
current_load = 0
for task in nums:
if task > capacity:
return False

if current_load + task <= capacity:
current_load += task
else:
developers_needed += 1
current_load = task

return developers_needed <= k

left, right = max(nums), sum(nums)
ans = right

while left <= right:
mid_capacity = (left + right) // 2
if can_split(mid_capacity):
ans = mid_capacity
right = mid_capacity - 1
else:
left = mid_capacity + 1

return ans


🤔 Как это работает?

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

1. Определяем границы ↔️
- Минимально возможный ответ не может быть меньше самой большой задачи (left = max(nums)).
- Максимально возможный ответ — это когда все задачи достаются одному разработчику (right = sum(nums)).

2. Проверяем гипотезу 🙋
- Берем среднее значение mid_capacity из нашего диапазона [left, right]. Это наша гипотеза: "А можем ли мы разбить задачи так, чтобы ни у кого не было нагрузки больше mid_capacity?".
- Для проверки пишем жадную функцию can_split: она идет по задачам и формирует группы, не превышая лимит mid_capacity. Если для этого потребовалось k или меньше разработчиков — значит, гипотеза верна.

3. Сужаем диапазон 🔎
- Если can_split(mid_capacity) вернула True, значит, такая нагрузка возможна. Мы запоминаем этот удачный результат (ans = mid_capacity) и пытаемся найти еще лучше (меньше): right = mid_capacity - 1.
- Если False — значит, лимит слишком жесткий. Нужно его ослабить: left = mid_capacity + 1.

Этот цикл продолжается, пока left не станет больше right, а в ans останется наилучший из найденных результатов.

📈 Сложность: Время — O(N * log(S)), где N — количество задач, а S — их суммарная трудоемкость. Пространство — O(1).
👍22🔥1👨‍💻1
Король хакатонов, который не умеет программировать 👑

Знакомьтесь, Рене Турсиос. Этот парень за два года посетил 200+ хакатонов и пачками забирал призовые. Прикол в том, что он сам не написал ни строчки кода.

Его секрет? Вайб-кодинг 👨‍💻 Да, он просто мастерски промптил AI-инструменты задолго до того, как это стало мейнстримом.

Чувак — бывший про-игрок в Yu-Gi-Oh!, он привык искать и абьюзить мету. Сначала в картонках, теперь — в IT.

Сейчас он в соло, без единого нанятого разраба, пилит собственный AI-стартап.

Разработчик? Программист? Или надо какое-то новое слово придумывать?
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔8👍3🏆3🔥2😱21👨‍💻11
Делаем подкасты из репозиториев 🎧

Опенсорсный проект GitPodcast превращает любой GitHub-репозиторий в... подкаст! Просто меняете hub на podcast в URL репы – и вуаля, можно слушать полезное о проекте.

🧑‍💻Технологии под капотом: backend на Python с FastAPI, Frontend – Next.js + TypeScript. База – PostgreSQL.

Можно не разворачивать локально, а просто воспользоваться бесплатно на сайте.
🔥221👍1🙏1
ByteDance снова в деле: новый ИИ-агент для программирования 👨‍💻

Китайцы из ByteDance выкатили в опенсорс Trae Agent — еще одного LLM-помощника для инженегров.

На бенчмарке SWE-bench Verified он показывает лучший результат среди опенсорс аналогов (75,2%).

Что под капотом?

🧠 Мульти-LLM: Жрет почти все — OpenAI, Anthropic, Azure, Doubao и OpenRouter. Можно подцепить хоть Claude 3.5 Sonnet, хоть GPT-4o, хоть Llama 3.1.

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

⚙️ Удобный CLI и тулзы: Работает из консоли (trae-cli run "почини мой баг"), умеет в файлы, баш и даже в sequential_thinking для сложных задач. Все шаги логируются в trajectory-файлы для дебага.

По сути это исследовательская платформа и конструктор для создания своих агентов.


Выглядит любопытно. Особенно на фоне того, что многие подобные инструменты либо платные, либо представляют собой закрытую коробку.

Ссылка на GitHub: тык сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
👍321🔥1🤔1🙏1
Метод print вызывает встроенную функцию print. А сам метод вызывается через класс, а не через объект.

ЧТО БЫЛО ДАЛЬШЕ?😨
👍44🔥1
Что получим при запуске кода?
Anonymous Quiz
22%
<__main__.SomeClass object at …>
21%
AttributeError
7%
None
14%
SyntaxError
36%
42
🔥421👍1💋1
match-case в Python: полный гайд по структурному сопоставлению ↔️

Если ваша первая мысль при виде match-case из Python 3.10 была: "А, ну наконец-то switch завезли!", то стоит сказать, что это на самом деле, это гораздо больше, чем просто синтаксический сахар для замены громоздких if-elif-else. Его настоящая суперсила заключается в работе со структурой данных.

Хватит городить монструозные if-лесенки!
В гайде мы:
▫️ Начнем с основ на простых примерах, чтобы освоить синтаксис.
▫️ Научимся элегантно парсить команды.
▫️ Перейдем к главной "боевой" задаче — разбору JSON-ответов от API.
▫️ И, конечно, разберем антипаттерны — когда match использовать не нужно, чтобы не усложнить код.
👍73🔥2👨‍💻21
🎨 Носорог Дюрера на matplotlib! Когда художник – Python-разработчик, а муза – гравюра 16-го века.

🦏 Есть такая знаменитая гравюра носорога Альбрехта Дюрера, он её создал в 1515 году по описанию и эскизу, так и не увидев зверя вживую. Она на века стала каноническим изображением носорога, не смотря на неточности.

Один энтузиаст решил переосмыслить этот шедевр с помощью matplotlib. Не просто нарисовать, а поставить себе челлендж: использовать как можно больше разных встроенных типов графиков matplotlib, причем каждый тип – только один раз. Почти справился!

В этом нелегком деле автору активно помогал GitHub Copilot 🤖, который, по его словам, продемонстрировал "энциклопедические знания matplotlib и бесконечное терпение", отвечая на бесконечные "А как сделать вот это?..".

Результат – постер "Современный Носорог", полностью созданный при помощи кода, который можно посмотреть здесь.
🔥64🤔2👍1🙏1
Вышел опенсорсный фреймворк Claude Code Development Kit, который превращает Claude Code в целую ИИ-команду.

Коротко:
- Оркестрация ИИ-агентов: Запускает сразу несколько "специалистов" (безопасник, архитектор, рефакторщик) для одной задачи.
- Самообновляемая документация: ИИ сам анализирует ваши коммиты и обновляет доки. Да, серьезно.
- Контекст, который не теряется: Специальная 3-уровневая система документации, которую ИИ реально понимает и не забывает через 5 минут.
- Хуки и безопасность: Автоматически проверяет код на забытые ключи и пароли перед отправкой во внешние сервисы.

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

👉 Более подробный обзор здесь
👉 Код проекта здесь
🔥7👍21🙏1👌1
Кстати, сами Anthropic, создатели Claude, выкатили целую пачку бесплатных курсов для разработчиков.

Там разное: и про работу с их API напрямую, и через облака Amazon/Google, и про Model Context Protocol.

В первую очередь рекомендовал бы обратить внимание на курс Claude Code in Action.

Если коротко, это практический гайд по их командному AI-ассистенту, который живёт прямо в терминале. Штука, которая умеет читать файлы, выполнять команды, сама править код и интегрироваться с GitHub для ревью пулл-реквестов.

👉🏻 Все курсы лежат здесь, они бесплатные и с сертификатами
5👍3🔥321🙏1🆒1
Встречайте, Kimi K2 от Moonshot AI 🇨🇳

🤯 Что за зверь?
Это MoE-модель на триллион (!!!) параметров, из которых 32 миллиарда — активные. Архитектура основана на DeepSeek V3, но с важными доработками.
Kimi K2 — это так называемая "агентная" модель. Говоря по-простому, это не просто болталка, которая генерит вам текст по запросу, а модель, которая может действовать: анализировать данные, писать и запускать код, исправлять ошибки, работать с инструментами.

В официальном блогпосте есть шикарный пример: модели дают задачу проанализировать данные по зарплатам, найти зависимости, построить графики и в конце сверстать HTML-страничку с результатами и интерактивным калькулятором. Kimi K2 последовательно выполняет 13 шагов в IPython, чтобы получить готовый результат.


И что по бенчмаркам?
В задачах на программирование (бенчмарк SWE-bench) эта модель, работая в "рефлекторном" режиме (без долгого обдумывания), обходит Claude 4 Sonnet и даже GPT-4.1. И это, напомню, открытая модель, которую можно развернуть у себя.

🤖 А что под капотом?
Китайские инженеры не просто скопировали архитектуру. Они использовали модифицированный оптимизатор MuonClip, который позволил им провести тренировку на 15.5 триллионах токенов с нулевой нестабильностью. Никаких "лосс спайков", которыми так славятся большие модели. Чистая, стабильная тренировка.

Ну и главное — деньги.
API у них стоит смешных денег по сравнению с конкурентами:
- $0.60 за миллион входных токенов
- $2.50 за миллион выходных токенов

Это почти в 5 раз дешевле, чем условный Claude 4 Sonnet.

Ссылочки
- Официальный блогпост с примерами
- Код на GitHub
- Веса на Hugging Face
4👍33🙏1