🔑 Генерация и проверка безопасных токенов
📌 Что делает:
Генерирует безопасный токен для API/сессий, хэширует его и позволяет проверять без хранения оригинала. Подходит для авторизации, одноразовых ключей и подтверждений.
🛠
Использует только стандартную библиотеку.
Подпишись 👉🏻 @KodduuPython 🤖
import secrets
import hashlib
def generate_token():
return secrets.token_urlsafe(32)
def hash_token(token):
return hashlib.sha256(token.encode()).hexdigest()
def check_token(token, token_hash):
return hash_token(token) == token_hash
if __name__ == "__main__":
t = generate_token()
h = hash_token(t)
print("🔐 Token:", t)
print("📦 Hash:", h)
print("✅ Проверка:", check_token(t, h))
📌 Что делает:
Генерирует безопасный токен для API/сессий, хэширует его и позволяет проверять без хранения оригинала. Подходит для авторизации, одноразовых ключей и подтверждений.
🛠
Использует только стандартную библиотеку.
Подпишись 👉🏻 @KodduuPython 🤖
👍2
📂 Автоочистка старых файлов в папке
📌 Что делает:
Удаляет файлы старше указанного числа дней в папке. Полезно для логов, временных файлов и кэшей.
🛠
Стандартная библиотека, без зависимостей.
Подпишись 👉🏻 @KodduuPython 🤖
import os, time
def clean_old_files(path, days=7):
now = time.time()
cutoff = now - days * 86400
for f in os.listdir(path):
full = os.path.join(path, f)
if os.path.isfile(full) and os.path.getmtime(full) < cutoff:
os.remove(full)
print(f"🗑 Удален: {full}")
if __name__ == "__main__":
clean_old_files("/tmp", days=3)
📌 Что делает:
Удаляет файлы старше указанного числа дней в папке. Полезно для логов, временных файлов и кэшей.
🛠
Стандартная библиотека, без зависимостей.
Подпишись 👉🏻 @KodduuPython 🤖
❤3👍1
📨 Отправка письма через Gmail (SMTP)
📌 Что делает:
Простая отправка писем через Gmail с авторизацией. Рабочий вариант для уведомлений и алертов в проде.
🛠
Без внешних зависимостей.
Для Gmail нужен [App Password](https://myaccount.google.com/apppasswords).
Подпишись 👉🏻 @KodduuPython 🤖
import smtplib
from email.mime.text import MIMEText
def send_email(to_addr, subject, body, from_addr, password):
msg = MIMEText(body, "plain", "utf-8")
msg["Subject"] = subject
msg["From"] = from_addr
msg["To"] = to_addr
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
server.login(from_addr, password)
server.send_message(msg)
print("✅ Письмо отправлено")
if __name__ == "__main__":
send_email(
"recipient@example.com",
"Test subject",
"Hello from Python!",
"your@gmail.com",
"app-password-here"
)
📌 Что делает:
Простая отправка писем через Gmail с авторизацией. Рабочий вариант для уведомлений и алертов в проде.
🛠
Без внешних зависимостей.
Для Gmail нужен [App Password](https://myaccount.google.com/apppasswords).
Подпишись 👉🏻 @KodduuPython 🤖
👍2
👉👉👉 Программа FullStack Developer and Data Scientist (Python+JS+Data) с 50% скидкой 🔥🔥🔥
Подпишись 👉🏻 @KodduuPython 🤖
Подпишись 👉🏻 @KodduuPython 🤖
Stepik: online education
FullStack Developer and Data Scientist (Python+JS+Data)
Этот набор курсов является специализацией для того чтобы с 0 дойти до уровня Junior FullStack Developer, плюс специализация Data Scientist для анализа данных и работы с Big Data. Программа для тех кому некогда, но очень надо выучить JavaScript, Python, Dats…
📦 Автоматическая распаковка всех архивов в папке
📌 Что делает:
Находит все
🛠
Только стандартная библиотека.
Подпишись 👉🏻 @KodduuPython 🤖
import os, zipfile
def unzip_all(path):
for f in os.listdir(path):
if f.endswith(".zip"):
full = os.path.join(path, f)
extract_to = os.path.join(path, f[:-4])
os.makedirs(extract_to, exist_ok=True)
with zipfile.ZipFile(full, "r") as zf:
zf.extractall(extract_to)
print(f"✅ Распакован: {full} → {extract_to}")
if __name__ == "__main__":
unzip_all("./archives")
📌 Что делает:
Находит все
.zip в указанной папке и автоматически распаковывает их в подпапки с тем же именем. Отлично подходит для загрузок или бэкапов.🛠
Только стандартная библиотека.
Подпишись 👉🏻 @KodduuPython 🤖
🖼️ Сжатие изображений до нужного размера (KB)
📌 Что делает:
Сжимает JPEG-картинку до целевого размера в KB, регулируя
🛠
Подпишись 👉🏻 @KodduuPython 🤖
from PIL import Image
import os
def compress_image(input_path, output_path, target_kb=200, step=5):
img = Image.open(input_path)
quality = 95
while True:
img.save(output_path, optimize=True, quality=quality)
size_kb = os.path.getsize(output_path) // 1024
if size_kb <= target_kb or quality <= step:
break
quality -= step
print(f"✅ {output_path}: {size_kb}KB (q={quality})")
if __name__ == "__main__":
compress_image("input.jpg", "output.jpg", target_kb=150)
📌 Что делает:
Сжимает JPEG-картинку до целевого размера в KB, регулируя
quality. Отлично подходит для подготовки картинок в web/prod, чтобы не грузить лишние мегабайты.🛠
pip install pillow
Подпишись 👉🏻 @KodduuPython 🤖
👉👉👉 Программа FullStack Developer and Data Scientist (Python+JS+Data) с 50% скидкой до 31 августа 🔥🔥🔥
Подпишись 👉🏻 @KodduuPython 🤖
Подпишись 👉🏻 @KodduuPython 🤖
Stepik: online education
FullStack Developer and Data Scientist (Python+JS+Data)
Этот набор курсов является специализацией для того чтобы с 0 дойти до уровня Junior FullStack Developer, плюс специализация Data Scientist для анализа данных и работы с Big Data. Программа для тех кому некогда, но очень надо выучить JavaScript, Python, Dats…
✏️ Таблица умножения как в тетрадке
Подпишись 👉🏻 @KodduuPython 🤖
from PIL import Image, ImageDraw, ImageFont
def multiplication_table(size=10, cell=60, output="table.jpg"):
img_size = (cell*(size+1), cell*(size+1))
img = Image.new("RGB", img_size, "white")
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 24)
for i in range(size+1):
for j in range(size+1):
text = str(i*j) if i and j else (str(i) if j==0 else str(j))
w, h = draw.textsize(text, font=font)
x, y = j*cell + (cell-w)//2, i*cell + (cell-h)//2
draw.text((x, y), text, fill="black", font=font)
draw.rectangle([j*cell, i*cell, (j+1)*cell, (i+1)*cell], outline="gray")
img.save(output)
if __name__ == "__main__":
multiplication_table()
Подпишись 👉🏻 @KodduuPython 🤖
❤3
👉👉👉 Скидка на программу обучения продлена на день знаний - FullStack Developer and Data Scientist (Python+JS+Data) с 50% скидкой 🔥🔥🔥
Подпишись 👉🏻 @KodduuPython 🤖
Подпишись 👉🏻 @KodduuPython 🤖
Stepik: online education
FullStack Developer and Data Scientist (Python+JS+Data)
Этот набор курсов является специализацией для того чтобы с 0 дойти до уровня Junior FullStack Developer, плюс специализация Data Scientist для анализа данных и работы с Big Data. Программа для тех кому некогда, но очень надо выучить JavaScript, Python, Dats…
📱 Авто-ресайз изображений под соцсети
📌 Что делает:
Создаёт версии картинки в нужных размерах для Instagram, Telegram и VK.
🛠
Подпишись 👉🏻 @KodduuPython 🤖
from PIL import Image
SIZES = {
"instagram_post": (1080, 1080),
"instagram_story": (1080, 1920),
"telegram": (1280, 720),
"vk": (1200, 628),
}
def resize_for_social(input_path, output_dir):
img = Image.open(input_path)
for name, size in SIZES.items():
out_path = f"{output_dir}/{name}.jpg"
img_resized = img.copy()
img_resized.thumbnail(size)
img_resized.save(out_path, "JPEG", quality=90)
print(f"✅ {name}: {out_path}")
if __name__ == "__main__":
resize_for_social("input.jpg", "./out")
📌 Что делает:
Создаёт версии картинки в нужных размерах для Instagram, Telegram и VK.
🛠
pip install pillow
Подпишись 👉🏻 @KodduuPython 🤖
🔥1
🖼️ Конвертация PNG → JPEG с удалением прозрачности
📌 Что делает:
Массово конвертирует PNG-файлы в JPEG, автоматически убирая прозрачность (заменяет на белый фон).
🛠
Подпишись 👉🏻 @KodduuPython 🤖
from PIL import Image
import os
def png_to_jpg(src, dst):
img = Image.open(src).convert("RGB") # убираем альфу
img.save(dst, "JPEG", quality=90)
print(f"✅ {src} → {dst}")
if __name__ == "__main__":
for f in os.listdir("./images"):
if f.endswith(".png"):
png_to_jpg(f"./images/{f}", f"./images/{f[:-4]}.jpg")
📌 Что делает:
Массово конвертирует PNG-файлы в JPEG, автоматически убирая прозрачность (заменяет на белый фон).
🛠
pip install pillow
Подпишись 👉🏻 @KodduuPython 🤖
👍1
🌦️ Прогноз погоды на сегодня
📌 Получает текущую погоду в указанном городе через OpenWeatherMap API.
🛠
Подпишись 👉🏻 @KodduuPython 🤖
import requests
API_KEY = "your_openweathermap_api_key"
CITY = "Moscow"
URL = f"http://api.openweathermap.org/data/2.5/weather?q={CITY}&appid={API_KEY}&units=metric&lang=ru"
def get_weather():
res = requests.get(URL)
if res.status_code == 200:
data = res.json()
print(f"Погода в {CITY}: {data['weather'][0]['description'].capitalize()}, {data['main']['temp']}°C")
else:
print("Ошибка при получении данных")
if __name__ == "__main__":
get_weather()
📌 Получает текущую погоду в указанном городе через OpenWeatherMap API.
🛠
pip install requests
Подпишись 👉🏻 @KodduuPython 🤖
🔥2
📬 Авто-рассылка поздравлений с Днём рождения
📌 Отправляет простое поздравление на почту всем из списка.
🛠
Подпишись 👉🏻 @KodduuPython 🤖
import smtplib
from email.mime.text import MIMEText
BIRTHDAYS = {
"alice@example.com": "Alice",
"bob@example.com": "Bob"
}
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
EMAIL = "your_email@gmail.com"
PASSWORD = "your_password"
def send_birthday_email(to_email, name):
msg = MIMEText(f"С днём рождения, {name}! 🎉")
msg["Subject"] = "Поздравление 🎂"
msg["From"] = EMAIL
msg["To"] = to_email
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(EMAIL, PASSWORD)
server.send_message(msg)
print(f"✅ Отправлено: {name}")
if __name__ == "__main__":
for email, name in BIRTHDAYS.items():
send_birthday_email(email, name)
📌 Отправляет простое поздравление на почту всем из списка.
🛠
pip install secure-smtplib
Подпишись 👉🏻 @KodduuPython 🤖
📝 Быстрое извлечение текста из PDF
📌 Извлекает и печатает текст из PDF — удобно для быстрых проверок документов.
🛠
Подпишись 👉🏻 @KodduuPython 🤖
import sys
from PyPDF2 import PdfReader
def extract_text(pdf_path):
reader = PdfReader(pdf_path)
for i, page in enumerate(reader.pages, 1):
text = page.extract_text()
print(f"--- Страница {i} ---\n{text}\n")
if __name__ == "__main__":
extract_text(sys.argv[1])
📌 Извлекает и печатает текст из PDF — удобно для быстрых проверок документов.
🛠
pip install PyPDF2
Подпишись 👉🏻 @KodduuPython 🤖
👍2
Forwarded from AIGENTTO
LLM нападет на человечество
Вокруг пугают тем, что ИИ нападет на человечество. И есть уже эксперименты, где LLM принимает аморальные решения для достижения поставленной цели.
Но как всегда слона (большую проблему) в лавке и не заметили, реальная проблема — это использование ИИ людьми для незаконных действий.
Мошенники всех мастей уже на пике технологий. Ко мне лично уже приходили аватары на Zoom-собеседование, и HR не заметил, что это не люди 😎
Принимать голосовые или видеозвонки от неизвестных в наше время — это уже достаточно высокая угроза. Текст имеет значительно меньшее влияние.
Возможен и видеозвонок от того, кого вы знаете, тогда лучше перезвонить самому.
Короче, нужно перейти на минимальное доверие ко всем видео/голосовым входящим. Сейчас уже даже сделки с недвижимостью совершаются без созвонов, чата достаточно.
Текст будет единственным валидным способом коммуникации в будущем, до тех пор, пока Elon Musk, не внедрил всем в мозг нейролинк 🧠
Подпишись 👉🏻 @aigentto 🤖
Вокруг пугают тем, что ИИ нападет на человечество. И есть уже эксперименты, где LLM принимает аморальные решения для достижения поставленной цели.
Но как всегда слона (большую проблему) в лавке и не заметили, реальная проблема — это использование ИИ людьми для незаконных действий.
Мошенники всех мастей уже на пике технологий. Ко мне лично уже приходили аватары на Zoom-собеседование, и HR не заметил, что это не люди 😎
Принимать голосовые или видеозвонки от неизвестных в наше время — это уже достаточно высокая угроза. Текст имеет значительно меньшее влияние.
Возможен и видеозвонок от того, кого вы знаете, тогда лучше перезвонить самому.
Короче, нужно перейти на минимальное доверие ко всем видео/голосовым входящим. Сейчас уже даже сделки с недвижимостью совершаются без созвонов, чата достаточно.
Текст будет единственным валидным способом коммуникации в будущем, до тех пор, пока Elon Musk, не внедрил всем в мозг нейролинк 🧠
Подпишись 👉🏻 @aigentto 🤖
Anthropic
Agentic Misalignment: How LLMs could be insider threats
New research on simulated blackmail, industrial espionage, and other misaligned behaviors in LLMs
❤2
🔑 Генератор надёжных паролей
📌 Создаёт криптостойкий пароль для учётных записей или сервисов.
🛠
Без зависимостей.
Подпишись 👉🏻 @KodduuPython 🤖
import secrets
import string
def generate_password(length=16):
alphabet = string.ascii_letters + string.digits + string.punctuation
return ''.join(secrets.choice(alphabet) for _ in range(length))
if __name__ == "__main__":
print("Ваш новый пароль:", generate_password())
📌 Создаёт криптостойкий пароль для учётных записей или сервисов.
🛠
Без зависимостей.
Подпишись 👉🏻 @KodduuPython 🤖
👍3
👀 Авто-сортировщик файлов в реальном времени
📌 Теперь скрипт в фоне следит за папкой Downloads и сразу раскладывает новые файлы по папкам.
🛠
Подпишись 👉🏻 @KodduuPython 🤖
import time, shutil, pathlib
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
DOWNLOADS = pathlib.Path.home() / "Downloads"
TARGETS = {
"Images": [".jpg", ".jpeg", ".png", ".gif"],
"Docs": [".pdf", ".docx", ".txt"],
"Archives": [".zip", ".rar", ".tar", ".gz"],
"Music": [".mp3", ".wav"],
}
class SortHandler(FileSystemEventHandler):
def on_created(self, event):
if not event.is_directory:
file = pathlib.Path(event.src_path)
ext = file.suffix.lower()
for folder, exts in TARGETS.items():
if ext in exts:
dest = DOWNLOADS / folder
dest.mkdir(exist_ok=True)
shutil.move(str(file), dest / file.name)
print(f"📦 {file.name} → {folder}")
break
if __name__ == "__main__":
observer = Observer()
observer.schedule(SortHandler(), str(DOWNLOADS), recursive=False)
observer.start()
print("👀 Следим за папкой Downloads...")
try:
while True: time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
📌 Теперь скрипт в фоне следит за папкой Downloads и сразу раскладывает новые файлы по папкам.
🛠
pip install watchdog
Подпишись 👉🏻 @KodduuPython 🤖
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
✨ Анимация «волны»
📌 Простая анимация синусоиды, которая движется как волна
🛠
Подпишись 👉🏻 @KodduuPython 🤖
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots()
x = np.linspace(0, 4*np.pi, 400)
line, = ax.plot(x, np.sin(x), lw=2)
ax.set_ylim(-1.2, 1.2)
def update(frame):
line.set_ydata(np.sin(x + frame/10))
return line,
ani = animation.FuncAnimation(fig, update, frames=200, interval=30, blit=True)
plt.show()
📌 Простая анимация синусоиды, которая движется как волна
🛠
pip install matplotlib numpy
Подпишись 👉🏻 @KodduuPython 🤖
This media is not supported in your browser
VIEW IN TELEGRAM
🕹 ZX Spectrum loading screen
Подпишись 👉🏻 @KodduuPython 🤖
pygame.init()
pygame.mixer.quit() # сбросим микшер
pygame.mixer.init(frequency=22050, size=-16, channels=1) # моно
W, H = 600, 400
screen = pygame.display.set_mode((W, H))
clock = pygame.time.Clock()
def beep(freq=800, dur=50):
sample_rate = 22050
n = int(sample_rate * dur / 1000)
arr = (np.sin(2*np.pi*np.arange(n)*freq/sample_rate)*32767).astype(np.int16)
sound = pygame.sndarray.make_sound(arr)
sound.play()
pygame.time.delay(dur)
colors = [(255,0,0),(0,255,0),(0,0,255),(255,255,0),(255,0,255),(0,255,255)]
for _ in range(120):
for e in pygame.event.get():
if e.type == pygame.QUIT: sys.exit()
rect_h = random.randint(5, 30)
y = random.randint(0, H-rect_h)
color = random.choice(colors)
pygame.draw.rect(screen, color, (0, y, W, rect_h))
pygame.display.flip()
beep(random.randint(300, 1200), 40)
time.sleep(0.02)
time.sleep(1)
Подпишись 👉🏻 @KodduuPython 🤖
Forwarded from AIGENTTO
Хрупкость всех agentic систем
Во всех мультиагентных системах есть одно хрупкое место — это протокол общения между агентами или роутинг между ними.
По сути, можно сделать жёсткий роутинг прямо в коде. Можно сделать условный роутинг тоже в коде. А можно настроить гибкий роутинг во фреймворках AutoGen, LangChain. Но даже в гибких вариантах это определённая договорённость (правила общения).
Хрупкость в том, что агенты используют LLM, которая может вернуть не совсем то, что ожидается, и да, конечно, они должны валидировать то, что им возвращает LLM, а потом передавать данные следующему агенту в строго определённом формате. Любое изменение кода, промтов и прочего может поломать цепочку. Неожиданный ответ LLM может поломать цепочку. Изменения API вендоров могут поломать одного агента и поломать цепочку.
Это всё норма в мире технологий прошлого, где не было LLM. Но сейчас строгость протоколов и форматов становится скорее не плюсом, а минусом. Ведь если каждый первый агент и почти каждое API сейчас начинают использовать LLM в своей работе, то зачем ограничивать это жёсткими протоколами? LLM всегда поймёт другую LLM в свободном формате (ок, не всегда, но в 99% случаев — поймёт).
Поэтому мир будет двигаться от строго определённых протоколов к гибким и даже к отсутствию протоколов.
Мы провели эксперимент — попробовали загнать множество разных агентов в пространство без протоколов и дали им возможность общаться на человеческом языке, и они отлично справляются. Агенты читают этот общий чат и публикуют свои результаты и наблюдения обратно. В этом, казалось бы, мусоре сообщений возникает чёткое общение и выполнение целей агентов. Без роутинга, без протокола.
Более детально про результаты нашего эксперимента скоро будет статья на habr.
Подпишись 👉🏻 @aigentto 🤖
Во всех мультиагентных системах есть одно хрупкое место — это протокол общения между агентами или роутинг между ними.
По сути, можно сделать жёсткий роутинг прямо в коде. Можно сделать условный роутинг тоже в коде. А можно настроить гибкий роутинг во фреймворках AutoGen, LangChain. Но даже в гибких вариантах это определённая договорённость (правила общения).
Хрупкость в том, что агенты используют LLM, которая может вернуть не совсем то, что ожидается, и да, конечно, они должны валидировать то, что им возвращает LLM, а потом передавать данные следующему агенту в строго определённом формате. Любое изменение кода, промтов и прочего может поломать цепочку. Неожиданный ответ LLM может поломать цепочку. Изменения API вендоров могут поломать одного агента и поломать цепочку.
Это всё норма в мире технологий прошлого, где не было LLM. Но сейчас строгость протоколов и форматов становится скорее не плюсом, а минусом. Ведь если каждый первый агент и почти каждое API сейчас начинают использовать LLM в своей работе, то зачем ограничивать это жёсткими протоколами? LLM всегда поймёт другую LLM в свободном формате (ок, не всегда, но в 99% случаев — поймёт).
Поэтому мир будет двигаться от строго определённых протоколов к гибким и даже к отсутствию протоколов.
Мы провели эксперимент — попробовали загнать множество разных агентов в пространство без протоколов и дали им возможность общаться на человеческом языке, и они отлично справляются. Агенты читают этот общий чат и публикуют свои результаты и наблюдения обратно. В этом, казалось бы, мусоре сообщений возникает чёткое общение и выполнение целей агентов. Без роутинга, без протокола.
Более детально про результаты нашего эксперимента скоро будет статья на habr.
Подпишись 👉🏻 @aigentto 🤖
🤖 Простой ИИ-агент для чата с OpenAI
📌 Чат-бот, который отвечает на вопросы пользователя через OpenAI API.
🛠
Подпишись 👉🏻 @KodduuPython 🤖
import openai
openai.api_key = "YOUR_OPENAI_API_KEY"
def chat_agent(prompt, model="gpt-3.5-turbo"):
response = openai.ChatCompletion.create(
model=model,
messages=[{"role": "system", "content": "Ты полезный помощник."},
{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
if __name__ == "__main__":
while True:
user_input = input("Вы: ")
if user_input.lower() in ["выход", "exit", "quit"]:
break
answer = chat_agent(user_input)
print("ИИ:", answer)
📌 Чат-бот, который отвечает на вопросы пользователя через OpenAI API.
🛠
pip install openai
Подпишись 👉🏻 @KodduuPython 🤖