Код на салфетке
2.38K subscribers
771 photos
21 videos
2 files
811 links
Канал для тех, кому интересно программирование на Python и не только.

Сайт: https://pressanybutton.ru/
Чат: https://t.me/+Li2vbxfWo0Q4ZDk6
Заметки автора: @writeanynotes

Реклама и взаимопиар: @Murzyev1995
Сотрудничество и др.: @proDreams
Download Telegram
💡 Чек-лист для принятия решения

Ответьте на 5 вопросов, чтобы выбрать путь:

0️⃣ Какой у нас регулятор и отрасль?
    ➡️ Обычный коммерческий бизнес без КИИ ▶️ можно начинать с облака.
    ➡️ Есть КИИ или жесткое требование службы ИБ ▶️ сразу смотрим онпрем/гибрид.

1️⃣ Какие данные пойдут в LLM?
    ➡️ Только обезличенные и «ненужные» ▶️ облако.
    ➡️ Сырые ПД, финансы, медданные, гостайна ▶️ онпрем/self-hosted.

2️⃣ Нужна ли тонкая кастомизация?
   ➡️ Хватает «чата + RAG» ▶️ облачный сервис.
   ➡️ Нужно строить платформу и сценарии как ядро продукта ▶️ онпрем/свой стек.

3️⃣ Есть ли команда и бюджет на железо?
    ➡️ Команды MLOps нет, бюджет ограничен ▶️ не геройствуем, берем облако.
    ➡️ Есть ЦОД, GPU, люди и ИБ уже привыкла к сложным системам ▶️ self-hosted реально тянуть.
    ➡️ Своего ЦОДа нет, но есть команда, готовая работать с опенсорсными моделями ▶️ можно начать с аренды GPU у российских провайдеров (Selectel и т.п.), а уже потом решать, строить ли железо под себя.

4️⃣ Какие риски мы не готовы принять?

   ➡️ «Боимся только простоя» ▶️ выбираем облако с хорошим SLA.

   ➡️ «Боимся утечки больше всего» ▶️ максимальная локализация, свои guardrails, онпрем/self-hosted.

➡️➡️⤴️⤴️🔄⤴️⤴️➡️🔘

Выбор между облаком и Self-hosted - это выбор между скоростью внедрения/доступностью и глубиной контроля/соответствием жестким регуляторным требованиям (особенно 187-ФЗ КИИ). Не давайте LLM стать «протекающей абстракцией» для ваших критических данных.

Код на салфетке x Мозг в данных
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥321
Привет, друзья! 👋

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

📋 Новое на канале:

🔄 Понедельник, 24.11.2025Дайджест

🐍 Вторник, 25.11.2025Смотри, какой репозиторий!, Знаете ли вы, как ускорить вставку в отсортированный список?

🎬 Пятница, 28.11.2025Путь от стажёра до ментора, Пятничный кинорелакс

🤖 Воскресенье, 30.11.2025Self-hosted против Облака: Как не дать LLM слить ваши данные в 2025 году

🔗 Будьте ближе к нам:

🌐 Читайте полные статьи на сайте

💬 Присоединитесь к обсуждению в чате

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе! 🚀

#дайджест #код #python #полезное #код_на_салфетке
🔥42
Forwarded from GitVerse News
#GitVerseКейс

Смотри, какой репозиторий! 🐶

Время дайджеста! Мы продолжаем изучать крутые проекты, которые нашли среди заявок грантовой программы, и вдохновлять ими. Сегодня снова принесли вам целых три. Давайте смотреть 🚀

1️⃣Kawai-Focus — приложение для фокусировки внимания на основе техники Pomodoro. Его миссия — сделать работу человека эффективной, предотвратить выгорание и вовремя предупреждать об опасном для здоровья уровне переработки.

Какие фишки? 🖱
📌Современный и аккуратный дизайн в стиле Material Design, который оживил внешний вид приложения на Kivy благодаря обновленному форку KivyMD 2.0.0.
📌Настраиваемые цепочки таймеров, легко подстраиваемые под индивидуальные потребности пользователя — при этом встроенные ограничения не позволят вам переусердствовать и выгореть.
📌Приложение работает локально на ПК. Сейчас ведется работа над сборкой пакета под Linux, а также изменение дизайна к Material Design виду.

⛓️‍💥Ссылка на репозиторий

2️⃣Mlut — инструмент для верстки в подходе Atomic CSS, с которым можно создавать стили любой сложности. Что-то похожее на Tailwind, но по некоторым параметрам превосходит все популярные аналоги.

Какие преимущества? 🖱
📌Нейминг коротких классов интуитивно понятен и унифицирован, построен на популярных свойствах CSS.
📌Мощные возможности генератора сложных стилевых комбинаций, близкие по духу к самому языку CSS.
📌Полная поддержка препроцессора, позволяющая комбинировать собственные правила CSS с утилитами.
📌Поддерживает кастомизацию и создание собственных дополнений.

⛓️‍💥Ссылка на репозиторий

3️⃣Orbitalika — сайт для моделирования орбит и орбитальных движений в трех плоскостях, а также визуализации траекторий в 3D пространстве. Как это работает: пользователь вводит шесть Кеплеровских элементов орбиты, и система сама строит реалистичную траекторию движения небесного тела.

Интересные факты 🖱
📌Разработка была начата студентами МГТУ имени Н.Э. Баумана в рамках программы «Инженерный класс» для наглядного представления законов небесной механики и освоения основ космической навигации.
📌Первая версия появилась в 2024 году и получила положительные отзывы учителей физики и астрономии.
📌Сайт написан на Python с использованием современных библиотек и инструментов, обеспечивающих высокую производительность и точность расчетов.

⛓️‍💥Ссылка на репозиторий

#GitVerse_Разработчикам
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👎4😱1
Знаете ли вы, как использовать tox для создания матрицы сред тестирования?

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

Сделаем минимальную структуру проекта:

./tox.ini
./app/__init__.py
./tests/test_version_diff.py


Представим себе такой tox.ini:

[tox]
envlist = py310, py311, flake8

[testenv]
deps =
pytest
pytest-cov
commands =
pytest --cov=app tests/

[testenv:flake8]
deps = flake8
commands = flake8 app tests/


И сделаем тест, который будет вести себя по-разному в разных версиях Питона:

def test_version_diff():
import tomllib # модуль есть только в Python 3.11
data = tomllib.loads("x = 123")
assert data["x"] == 123


Варианты запуска:

# Запуск всей матрицы
tox

# Запуск конкретной версии Python
tox -e py311
tox -e py310


При запуске:

- В py311 import tomllib работает – тест пройдет.
- В py310 модуля tomllib нет – так что ModuleNotFoundError и тест падает.

Так, tox помогает проверять, каждое окружение независимо от других и от основной системы.
🔥4🤯3👍2
Приветствую!

Грязная игра (2025)

Любите динамичные фильмы про ограбления с крутыми поворотами сюжета? Тогда «Грязная игра» с Марком Уолбергом — именно то, что вам нужно!

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

«Грязная игра» — это не просто экшен, а напряжённый триллер с элементами драмы, где каждая минута на счету. Отличные сцены ограблений, продуманная режиссура и харизма Марка Уолберга создают атмосферу настоящего криминального приключения.

Если вам по душе фильмы в духе «Одиннадцати друзей Оушена» или «Пленниц», но с более жёстким и современным подходом — обязательно посмотрите «Грязную игру».
🔥62
Всем привет!

Сегодня, 6 декабря, отмечается шуточный праздник — День Лентяя.

Для нас это уже почти две недели, потому что мы немного затянули со статьями… но мы исправимся 🙂

Откладывайте свои IDE-шки, проекты и задачи. Работа не всегда важнее отдыха — так почему бы не отдохнуть именно в День Лентяя?
👏4🎉43🔥1
aiogram 3.23.0 вышел!

Только что вышло обновление библиотеки для написания Telegram-ботов aiogram 3.23.0. Которое не привносит нового функционала взаимодействия с Telegram, а концентрируется на технической стороне.


Поддержка Python 3.14

Ключевым изменением стала полная поддержка Python 3.14. Обновлены зависимости и тесты для полной совместимости.

Python 3.14 вышел совсем недавно, в ноябре 2025 года, и как обычно бывает со свежими релизами языка, далеко не все ключевые библиотеки готовы к этому сразу. В aiogram 3.22.0 на Python 3.14 были проблемы с aiohttp и pydantic.


Прекращение поддержки Python 3.9

Обратной стороной нововведений, сталол прекращение поддержки Python 3.9. Python 3.9 вышел в ноябре 2020 года, а в ноябре 2025 года, вместе с выходом Python 3.14 он официально прекратил свой жизненный цикл.

Таким образом, минимальная совместимая версия Python стала 3.10.

В процессе отказа от поддержки 3.9, был проведён рефакторинг которой базы, включая замену аннотации типов из пакета typing (List, Dict) на современный формат аннотирования без лишних импортов (list, dict).


Установка обновления и история изменений

Для установки обновления библиотеки достаточно выполнить команду:

pip install -U aiogram


Полный список изменений: https://docs.aiogram.dev/en/latest/changelog.html

#python_3_14 #aiogram #aiohttp #py314 #pydantic #python #telegram #telegram_бот #библиотека #новости
🔥543
Привет, друзья! 👋

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

📋 Новое на канале:

🔄 Понедельник, 01.12.2025Дайджест

🐍 Вторник, 02.12.2025Смотри, какой репозиторий!, Знаете ли вы, как использовать tox для создания матрицы сред тестирования?

🎬 Пятница, 05.12.2025Пятничный кинорелакс

🤖 Воскресенье, 07.12.2025 — aiogram 3.23.0 вышел!


🔗 Будьте ближе к нам:

🌐 Читайте полные статьи на сайте

💬 Присоединитесь к обсуждению в чате

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе! 🚀

#дайджест #код #python #полезное #код_на_салфетке
🔥4👍31
Знаете ли вы о TOCTOU-уязвимости и как атомарные операции помогают ее избежать?

TOCTOU (Time-of-Check to Time-of-Use) – тип уязвимости, возникающий из-за race condition между моментом проверки состояния объекта (например, существует ли файл) и моментом его использования.

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

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

import os
import time
import threading

def insecure_create(filename, thread_id):
if not os.path.exists(filename):
time.sleep(0.01)
with open(filename, 'w') as f:
f.write(f"Данные от потока {thread_id}")
print(f"Поток {thread_id}: файл создан")

if os.path.exists("data.txt"):
os.remove("data.txt")

t1 = threading.Thread(target=insecure_create, args=("data.txt", 1))
t2 = threading.Thread(target=insecure_create, args=("data.txt", 2))
t1.start()
t2.start()
t1.join()
t2.join()

with open("data.txt", 'r') as f:
print(f"Файл содержит: {f.read()}")

# Поток 1: файл создан
# Поток 2: файл создан
# Файл содержит: Данные от потока 2


Оба потока прошли проверку if not os.path.exists(), но в файле остались только данные от потока 2 – он перезаписал данные потока 1. Номер потока в выводе может отличаться из-за race condition.

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

import os
import errno

def atomic_create(filename, thread_id):
try:
fd = os.open(filename, os.O_CREAT | os.O_EXCL | os.O_WRONLY)
with os.fdopen(fd, 'w') as f:
f.write(f"Данные от потока {thread_id}")
print(f"Поток {thread_id}: файл создан атомарно")
except OSError as e:
if e.errno == errno.EEXIST:
print(f"Поток {thread_id}: файл уже существует")
else:
raise

if os.path.exists("data.txt"):
os.remove("data.txt")

import threading
t1 = threading.Thread(target=atomic_create, args=("data.txt", 1))
t2 = threading.Thread(target=atomic_create, args=("data.txt", 2))
t1.start()
t2.start()
t1.join()
t2.join()

with open("data.txt", 'r') as f:
print(f"Файл содержит: {f.read()}")

# Поток 1: файл создан атомарно
# Поток 2: файл уже существует
# Файл содержит: Данные от потока 1


Флаг O_EXCL в комбинации с O_CREAT гарантирует, что os.open() создаст файл только если его не существует, иначе выдаст ошибку EEXIST. Эта операция атомарна на уровне ядра ОС.

Код на салфетке x Кусочки кода
🤯4🔥3👍1
Вайбкодинг с нейросетью 1: проверяю сборку Flutter-приложения в AppImage
Автор: Eugene Kaddo

Данная статья посвящена сборке Flutter‑приложения в AppImage с помощью нейросетей GigaChat и Perplexity. Статья будет участвовать в конкурсе «Сезон ИИ в разработке» на Habr, посвящённом теме вайбкода в разработке.


Читать статью на сайте
Читать статью на Хабр

Поддержать проект через YooMoney
Поддержать проект через Tribute в Telegram
Поддержать проект через наш Telegram-бот

#Kivy #Эксперименты_с_ИИ #AppImage #Flutter
🔥64
Приветствую!

«Орудия» (2025)

Если хочется чего‑то странного, мрачного и не совсем привычного для хоррора, «Орудия» — отличный вариант. Формально это мистический ужастик про пропажу детей и ведьму, но по ощущениям фильм больше похож на чёрную сказку и сатиру на взрослых, власть и то, как старые правила ломают новое поколение.​

В маленьком городке исчезают семнадцать шестиклассников, и взрослые в панике пытаются найти виноватого, но постепенно становится ясно, что дело не только в «зле снаружи». В центре истории — тётушка Глэдис: хрупкая старушка, которая оказывается могущественной ведьмой и превращает людей в свои «орудия», управляя ими через чёрную магию, страх и чувство вины.
🔥42
This media is not supported in your browser
VIEW IN TELEGRAM
🔗 ЭРА «USB-C» ДЛЯ ИИ: ПОЛНЫЙ РАЗБОР MODEL CONTEXT PROTOCOL (MCP)

Помните мобильный рынок 90-х (если не помните, то вам повезло)? Хаос из кабелей, несовместимых портов и боли. До недавнего времени индустрия ИИ выглядела так же. Хочешь подключить ChatGPT к Google Диску? Пиши один «костыль» (плагин). Хочешь Claude к базе данных? Пиши другой. Локальная LLM? Третий.

Это классическая проблема «N × M», которая тормозила всю отрасль. Но в ноябре 2024 года Anthropic выкатили Model Context Protocol (MCP). Эксперты называют его «портом USB-C для нейросетей».

Но не дайте простоте названия обмануть вас. Под капотом там не просто «труба для данных», а сложная архитектура брокеров, двусторонние диалоги и новые дыры в безопасности, от которых у вашего СБ ИТ дернется глаз.

Попробуем разобраться во всём. От нейминга функций до «Теневого ИИ».

➡️➡️➡️⤴️⤴️➡️➡️➡️

💻 АНАТОМИЯ - НЕ ПРОСТО «КЛИЕНТ-СЕРВЕР»

В основе MCP лежит философия разделения ответственности, так скажем - строгий протокол.

Архитектура:
➡️Хост (Host): Это «дом», где живет ИИ (Claude Desktop, IDE Cursor, Open WebUI). Заказчик банкета.
➡️Клиент (Client): Переводчик внутри Хоста. Поддерживает канал связи с сервером 1:1.
➡️Сервер (Server): Представитель данных. Небольшая программа-шлюз перед вашей БД или Slack.

Три кита функциональности (и один секрет):

⚫️ Ресурсы («Глаза») - Данные для чтения. Сервер дает модели «меню» файлов. Модель не читает всё сразу, а запрашивает конкретный кусок по URI.

⚪️ Инструменты («Руки») - Функции для действий. Модель просит сервер: «Выполни send_email». Сервер делает и возвращает результат.

🟡 Промпты («Инструкции») - Зашитые шаблоны. Разработчик сервера сразу вкладывает в него лучшие практики (Best Practices) промптинга для конкретной задачи.

🔴 КРИТИЧЕСКИЙ НЮАНС. НЕЙМИНГ - ЭТО UX ДЛЯ МОЗГА
🆓 Вы не можете просто написать код и ждать чуда. LLM не видит ваш код, она видит только описание.
Если вы назовете инструмент tool_01 с описанием gets data, модель будет галлюцинировать или игнорировать его.

Вы обязаны называть инструмент семантически точно: get_customer_churn_rate и в описании детально разжевывать: "Используй это, когда пользователь спрашивает про отток клиентов за квартал. Принимает дату в формате YYYY-MM-DD". В MCP описание инструмента - часть исполняемого кода. Ошиблись в слове и сломали логику агента.

➡️➡️➡️⤴️⤴️➡️➡️➡️

😇 ДВУСТОРОННИЙ ДИАЛОГ

MCP - не улица с односторонним движением («ИИ, дай команду»). Протокол намного умнее.

Что же под «капотом»?
➡️ Сэмплинг (Sampling): Делегирование интеллекта
Это киллер-фича. Обычно человек просит ИИ что-то сделать. В MCP сервер может попросить ИИ: «Эй, я вижу тут сложный лог ошибки, сгенерируй-ка мне его анализ».
Сервер использует «мозг» подключенной модели для своих внутренних задач. И выглядит это уже как не просто подключение, а делегирование (sub-agents delegation).

➡️ Элиситация (Elicitation): «Стоп, мне нужно уточнить»
Механизм, позволяющий серверу сказать: «Мне не хватает данных, спроси у пользователя уточнение».
Это вводит стандартизированный Human-in-the-loop. ИИ перестает быть черным ящиком, который молча творит дичь. Если данных для SQL-запроса не хватает, сервер через протокол заставляет ИИ задать вопрос вам.

➡️ Транспорт: Stdio vs SSE
Как они общаются физически?
- Stdio: Для локальных агентов. Быстро, безопасно, все внутри одного процесса.
- SSE (Server-Sent Events): Для удаленки. Позволяет серверу самому «пинать» ИИ в реальном времени: «Эй, данные на бирже изменились, пересчитай прогноз!».

➡️➡️➡️⤴️⤴️➡️➡️➡️

🤝 АРХИТЕКТУРНЫЙ СДВИГ: БРОКЕРЫ И МЕДИАТОРЫ

Если смотреть на MCP глазами архитектора, это реализация классических паттернов проектирования, спасающая нас от хаоса.

👩‍❤️‍👨 «Медиатор» (Mediator). Раньше каждый агент пытался соединиться с каждым инструментом. Сложность росла как O(N^2).
MCP создает центральный реестр. Агенты находят инструменты через единый стандарт. Сложность падает до линейной O(N).
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8
🐁 «Брокер» (Broker). MCP-серверы - это дипломаты. Нейросети «нежные»: они не понимают старые SOAP-протоколы или бинарные форматы банков. Сервер-брокер берет нечеткое желание ИИ («хочу денег перевести») и транслирует его в строгий, валидный SQL-запрос или API-вызов.

➡️➡️➡️⤴️⤴️➡️➡️➡️

🫥 ТЕМНАЯ СТОРОНА: SHADOW AI И PROVENANCE

Шутка от СБ ИТ: буква «S» в MCP означает Security. То есть её там нет. Внедрение протокола опережает безопасность.

Наши «грабли»:

💀 Shadow AI («Теневой ИИ»)
Кошмар для службы безопасности. Любой разработчик может запустить локальный MCP-сервер на ноутбуке, дать ему доступ к локальным файлам/документам и подключить к внешнему ИИ.
Поскольку канал связи (Stdio/SSE) инициируется изнутри, корпоративный фаервол этого не видит. Данные улетают в «мозг» модели легально, мимо DLP-систем. Ну если только у вас не локальная корпоративная LLM.

😱 Проблема Происхождения (Provenance)
Мы привыкли, что npm install - риск. Но MCP-серверы пока вообще никак не подписываются.
Вы качаете сервер weather-mcp с GitHub, а он оказывается трояном. Через Prompt Injection он заставляет вашу модель (которой вы доверяете!) слить пароли из подключенной базы данных.


😑 Решение - Gateway Pattern
Компании обязаны ставить не просто серверы, а Шлюзы MCP. Это прослойка-фильтр (AI Firewall), которая:
🆓0️⃣ Перехватывает запрос ИИ.
🆓1️⃣ Санитизирует его (проверяет на адекватность).
🆓2️⃣ И только потом пускает к реальным данным.

➡️➡️➡️⤴️⤴️➡️➡️➡️

👊 БИТВА ПРОТОКОЛОВ

MCP сравнивают с USB-C. Хоть это и удачная аналогия, как будто физический разъем, но чтобы устройства «поняли» друг друга, нужны протоколы выше уровнем (как TCP/IP).

MCP - база «Клиент-Сервер». Но рядом растут конкуренты и надстройки:
🆓➡️ A2A (Google): Протокол для децентрализованного общения «Агент-Агент».
🆓➡️ ACP / ANP: Протоколы для построения глобальных сетей автономных агентов.

Мы, так сказать, в самом начале пути стандартизации.

➡️➡️➡️⤴️⤴️➡️➡️➡️

💼 И СКОЛЬКО ЧЕЛОВЕК ДОЛЖНО ЭТО ПИСАТЬ?

Забудьте про «просто программистов». Для MCP нужны немного иные роли:
🆓0️⃣ Backend-инженеры (Python/Go): Пишут «железо» - сами MCP-серверы. Их задача - превратить «горючее месиво» корпоративных данных в чистые JSON-ресурсы.
🆓1️⃣ SecOps: Критически важны. Настраивают изоляцию (Docker) для каждого сервера. Если агента взломают - он должен остаться в песочнице.
🆓2️⃣ Владельцы Продукта (PO) / Prompt Architects: Те самые люди, которые отвечают за Нейминг. Они пишут инструкции, зашитые в сервер. Они переводят бизнес-задачу на язык, который поймет «тупая» модель. Без них сервер будет работать технически, но бесполезно фактически.

➡️➡️⤴️⤴️🔄⤴️⤴️➡️🔘

MCP превращает ИИ из «умного чат-бота» в реального сотрудника с доступом к рубильникам. Выглядит, вроде, мощно, но требует железной дисциплины в архитектуре и паранойи в безопасности.

ЗЫ: небольшая библиотека всяких готовых MCP. За качество не ручаюсь
https://glama.ai/mcp/servers

Код на салфетке x Мозг в данных
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥73
Привет, друзья! 👋

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

📋 Новое на канале:

🔄 Понедельник, 08.12.2025Дайджест

🐍 Вторник, 09.12.2025Знаете ли вы о TOCTOU-уязвимости и как атомарные операции помогают ее избежать?

⚙️ Четверг, 11.12.2025 — Вайбкодинг с нейросетью 1: проверяю сборку Flutter-приложения в AppImage

🎬 Пятница, 12.12.2025Пятничный кинорелакс

🤖 Воскресенье, 14.12.2025 — ЭРА «USB-C» ДЛЯ ИИ: ПОЛНЫЙ РАЗБОР MODEL CONTEXT PROTOCOL (MCP)


🎁 Небольшой анонс:
Совсем скоро на канале стартует новогодний розыгрыш 🎄
Готовьтесь, будет интересно — и не забудьте позвать друзей, им тоже может повезти 😉


🔗 Будьте ближе к нам:

🌐 Читайте полные статьи на сайте

💬 Присоединитесь к обсуждению в чате

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе! 🚀

#дайджест #код #python #полезное #код_на_салфетке
🔥54
Знаете ли вы, как вызвать функцию со 100 аргументами одной строкой?

На собеседованиях часто спрашивают про *args и **kwargs, но не все знают, что это не магические имена, а всего лишь идиоматическое соглашение. На самом деле, звездочки * и ** – это операторы сбора и распаковки (Packing/Unpacking Operators). Вы можете написать *pizza вместо *args, и это будет работать.

Именно этими операторами можно, например, распаковать список из 100 элементов в аргументы функции одной строкой, объединить несколько списков или словарей и даже контролировать, как именно пользователь должен передавать параметры. Посмотрим на самые интересные приемы.

Распаковка при вызове функции:
def process_data(a, b, c, d, e, f, g, h, i, j):
return sum([a, b, c, d, e, f, g, h, i, j])

numbers = list(range(10))
result = process_data(*numbers) # Распаковали список в 10 аргументов
print(result) # 45

# Можно комбинировать несколько распаковок
basic = ["Alice", 30]
location = ["NYC", "USA"]
def create_user(name, age, city, country, email):
print(f"{name}, {age}, {city}, {country}, {email}")

create_user(*basic, *location, "alice@example.com")
# Alice, 30, NYC, USA, alice@example.com


Звездочки – просто соглашение, имя может быть любым:
def sum_all(*numbers):  # можно *pizza, *data, что угодно
return sum(numbers)

def build_query(**filters): # можно **options, **params
return " AND ".join(f"{k}={v}" for k, v in filters.items())

print(sum_all(1, 2, 3, 4, 5)) # 15
print(build_query(age=30, city="NYC")) # age=30 AND city=NYC


Keyword-only параметры через * без имени:
def create_file(filename, *, mode, encoding):
print(f"Creating {filename} with mode={mode}, encoding={encoding}")

# create_file("data.txt", "w", "utf-8") # Будет TypeError!
create_file("data.txt", mode="w", encoding="utf-8") # А так – OK


А positional-only параметры через /, могут быть полезны для API, где имена параметров могут измениться в будущем (Python 3.8+):
def divide(a, b, /):
return a / b

print(divide(10, 2)) # 5.0
# print(divide(a=10, b=2)) # TypeError – только позиционные!


Порядок параметров строго определен, иначе – SyntaxError:
# Правильно:
def good(a, b, /, c, *args, d, **kwargs):
pass

# Неправильно:
# def bad(*args, **kwargs, a): # SyntaxError
# def bad(/, a, b): # SyntaxError


Распаковка работает не только в функциях:
# В списках
list1 = [1, 2, 3]
list2 = [*list1, 4, 5, *list1]
print(list2) # [1, 2, 3, 4, 5, 1, 2, 3]

# В словарях
defaults = {"host": "localhost", "port": 8080}
user_config = {"port": 3000, "debug": True}
config = {**defaults, **user_config}
print(config) # {'host': 'localhost', 'port': 3000, 'debug': True}

# В присваивании
first, *middle, last = [1, 2, 3, 4, 5]
print(f"first={first}, middle={middle}, last={last}")
# first=1, middle=[2, 3, 4], last=5


И на последок, классическая ловушка – распаковка при определении vs при вызове:
def mystery(*args):
return args

print(mystery([1, 2, 3])) # ([1, 2, 3],) – один аргумент-список
print(mystery(*[1, 2, 3])) # (1, 2, 3) – три аргумента


* и ** это операторы распаковки, они работают при вызове и определении функций. / делает параметры positional-only, а * без имени делает следующие параметры keyword-only.

Код на салфетке x Кусочки кода
👍7🤯2
ИИ бот-модератор 1: Начало проекта
Автор: Иван Ашихмин

Это первая статья серии «ИИ бот-модератор», в которой мы закладываем фундамент будущего проекта. Разберём, почему структура и качество кода критичны для роста, познакомимся с базовыми инструментами (git, uv, pre-commit, make) и подготовим проект к дальнейшей разработке Telegram-бота с ИИ.


Читать статью на сайте
Читать статью на Хабр

Поддержать проект через YooMoney
Поддержать проект через Tribute в Telegram
Поддержать проект через наш Telegram-бот

#Docker #PostgreSQL #Гайды #aiogram #Telegram_бот #fastapi #AI #ИИ #git #ry #uv #ruff #make #makefile #линтеры #pre_commit #MCP
1🔥71
Добрый вечер, друзья!

"Школьный автобус" (2025)

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

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

Этот фильм наполнен настоящей драмой и вдохновляющими эмоциями. Он напоминает нам о важности человеческой поддержки и готовности помочь в трудную минуту.
🔥5
Новогодний розыгрыш от Код на салфетке, Bothost и сообщества!

Новый год уже не за горами, а это значит, что наступает пора дарить подарки! Мы тоже не остаёмся в стороне и приготовили для вас розыгрыш с 11-ю крутыми призами!

Что за призы?
- 2x Толстовка с большим принтом
- 2x Футболка с большим принтом
- 3x Футболка с маленьким принтом
- 3x Блокнот с принтом
- RGB светильник-ночник с логотипом

Кто помогает?
Розыгрыш был бы невозможен без наших друзей из хостинга Telegram-ботов Bothost, а также семи добрых подписчиков нашего чата "Кот на салфетке".

Как участвовать?
1️⃣ Подпишитесь на "Код на салфетке".
2️⃣ Подпишитесь на "Хостинг bothost.ru".
3️⃣ Нажмите кнопку «Участвую» 👇.
4️⃣ Ждите результатов — мы объявим победителей 10 января.

Важно:
— Призы будут изготовлены после завершения розыгрыша.
— Отправка призов — только по России.

Заходите, участвуйте и зовите друзей — пусть новый год начнётся с хорошего настроения и сюрприза под "ёлкой". Удачи!
1🔥1912
Код на салфетке pinned a photo
Привет, друзья! 👋

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

📋 Новое на канале:

🔄 Понедельник, 15.12.2025Дайджест

🐍 Вторник, 16.12.2025Знаете ли вы, как вызвать функцию со 100 аргументами одной строкой?

⚙️ Четверг, 18.12.2025 — ИИ бот-модератор 1: Начало проекта

🎬 Пятница, 19.12.2025Пятничный кинорелакс

🍀 Суббота, 20.12.2025 — Новогодний розыгрыш от Код на салфетке, Bothost и сообщества!


🔗 Будьте ближе к нам:

🌐 Читайте полные статьи на сайте

💬 Присоединитесь к обсуждению в чате

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе! 🚀

#дайджест #код #python #полезное #код_на_салфетке
🔥41
Всем привет!

Пока у нас идёт новогодний розыгрыш, один из наших стажёров, Олег Семёнов, сделал небольшую новогоднюю страничку.

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

👉 https://ny.pressanybutton.ru/

Ну и напомню: розыгрыш всё ещё в процессе, так что можно сначала поймать новогодний вайб, а потом пойти и поучаствовать 😉
🔥6🎄4😁2🦄211😱1