Программистика
کانال بسته
Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager
نمایش بیشتر5 791
مشترکین
-624 ساعت
+157 روز
-4130 روز
آرشیو پست ها
5 791
🤖 AI Commits: пусть нейросеть пишет осмысленные коммиты за тебя
Ты 100-й раз пишешь
git commit -m "fix", а потом коллеги и ты сам через месяц не понимаете, что именно было исправлено. Гуглить вклад — слишком лень, писать грамотные сообщения — времени жалко. А что, если это сделает нейросеть? Скрипт смотрит на изменения в коде, анализирует их и предлагает понятное сообщение коммита в стиле Conventional Commits.
👉 Скрипт `ai_commit.py`:
#!/usr/bin/env python3
"""
AI Commit — автоматически генерирует сообщение коммита по изменениям в коде.
Требует установленный и запущенный ollama (или можно заменить на API GPT).
"""
import subprocess
import sys
import argparse
import json
# Настройки: выбери модель из ollama
MODEL = "codellama:7b-instruct" # или "llama3.2", "mistral", "qwen2.5-coder"
# Если хочешь использовать OpenAI, раскомментируй и укажи ключ
# USE_OPENAI = False
# OPENAI_API_KEY = "sk-..."
def get_git_diff():
"""Возвращает diff текущих изменений"""
try:
diff = subprocess.check_output(
["git", "diff", "--cached", "--no-color"],
stderr=subprocess.DEVNULL,
text=True
)
if not diff.strip():
# Если нет изменений в staged, берём unstaged
diff = subprocess.check_output(
["git", "diff", "--no-color"],
stderr=subprocess.DEVNULL,
text=True
)
return diff
except subprocess.CalledProcessError:
print("❌ Не удалось получить diff. Вы в git-репозитории?")
sys.exit(1)
def generate_commit_message(diff, use_ollama=True):
"""Отправляет diff модели и получает сообщение коммита"""
prompt = (
"Ты — эксперт по Git. Напиши краткое сообщение коммита (одной строкой) в стиле Conventional Commits, "
"которое описывает следующие изменения в коде. Не добавляй лишних комментариев, только само сообщение.\n\n"
f"Изменения:\n{diff}"
)
if use_ollama:
try:
import ollama
response = ollama.chat(model=MODEL, messages=[{"role": "user", "content": prompt}])
return response['message']['content'].strip()
except Exception as e:
print(f"❌ Ошибка при обращении к ollama: {e}")
print("Убедитесь, что ollama запущен (ollama serve) и модель загружена.")
sys.exit(1)
else:
# Вариант с OpenAI API (раскомментируй при необходимости)
import openai
openai.api_key = OPENAI_API_KEY
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
max_tokens=50
)
return response.choices[0].message.content.strip()
def main():
parser = argparse.ArgumentParser(description="Генератор сообщений коммита через AI")
parser.add_argument("-m", "--model", default=MODEL, help="Модель ollama")
parser.add_argument("--openai", action="store_true", help="Использовать OpenAI API вместо ollama")
args = parser.parse_args()
diff = get_git_diff()
if not diff.strip():
print("⚠️ Нет изменений для коммита. Добавьте файлы через git add.")
return
print("🤖 Генерирую сообщение коммита...")
msg = generate_commit_message(diff, use_ollama=not args.openai)
print("\n💡 Предлагаемое сообщение:\n")
print(msg)
print("\n✅ Если подходит, выполните:")
print(f' git commit -m "{msg}"')
print(" Или скопируйте сообщение и отредактируйте.")
if __name__ == "__main__":
main()
🛠 Установка и настройка:
1. Установи скрипт:
pip install ollama # или openai, если будешь использовать API
2. Установи и запусти ollama (бесплатно, локально):
# macOS/Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows — скачай с сайта
ollama serve &
ollama pull codellama:7b-instruct # или другую модель
3. Сделай скрипт исполняемым и добавь в PATH (опционально):
chmod +x ai_commit.py
sudo ln -s $(pwd)/ai_commit.py /usr/local/bin/ai-commit
Программистика || #scripts5 791
🔁 Почему нельзя менять список во время итерации (и как это обойти)
Многие новички пишут цикл
for item in my_listи внутри пытаются удалять или добавлять элементы. Кажется логичным: «нашёл ненужное — удали». Но Python так не работает. Изменяя список во время итерации, вы ломаете внутренний механизм итератора. Результат — пропущенные элементы, исключения или странное поведение. 🧱 Проблема: что происходит под капотом Когда вы пишете
for x in lst:, Python создаёт итератор, который запоминает текущую позицию по индексу. Если внутри цикла вы удаляете элемент, все последующие элементы сдвигаются влево, а итератор продолжает двигаться вперёд. В итоге часть элементов пропускается.
lst = [1, 2, 3, 4, 5]
for x in lst:
if x % 2 == 0:
lst.remove(x)
print(lst) # [1, 3, 5] — может показаться, что работает
Но попробуйте другой список:
lst = [2, 4, 6, 8, 10]
for x in lst:
if x % 2 == 0:
lst.remove(x)
print(lst) # [4, 8] — где остальные?
Потому что после удаления 2, список сдвинулся, итератор перешёл к следующему индексу, где оказалось 6 (изначальное 4 было пропущено). Аналогично с добавлением — можно уйти в бесконечный цикл.
lst = [1, 2, 3]
for x in lst:
lst.append(x) # бесконечный цикл
🧠 Как правильно: 3
безопасных способа
1. Итерируйтесь по копии
Самый простой способ — создать копию списка и итерироваться по ней, а изменения вносить в оригинал.
lst = [1, 2, 3, 4, 5]
for x in lst[:]: # копия
if x % 2 == 0:
lst.remove(x)
print(lst) # [1, 3, 5]
Или через
list(lst)или
.copy()
.
2. Создавайте новый список
Часто проще собрать новый список из нужных элементов, чем мутировать старый.
lst = [1, 2, 3, 4, 5]
lst = [x for x in lst if x % 2 != 0]
print(lst) # [1, 3, 5]
Это самый идиоматичный способ.
3. Итерируйтесь в обратном порядке
Если нужно удалять элементы, можно идти с конца. Тогда сдвиги не влияют на ещё не пройденные элементы.
lst = [1, 2, 3, 4, 5]
for i in range(len(lst)-1, -1, -1):
if lst[i] % 2 == 0:
del lst[i]
print(lst) # [1, 3, 5]
🧪 Что насчёт словарей?
Со словарями ещё строже: изменение размера во время итерации вызывает
RuntimeError.
d = {'a': 1, 'b': 2}
for k in d:
d['c'] = 3 # RuntimeError: dictionary changed size during iteration
Решение — итерироваться по копии ключей:
for k in list(d):. Программистика|| #article
5 791
NVIDIA представила NOOA: фреймворк для разработки ИИ-агентов в рамках одного Python-класса
Компания NVIDIA выпустила открытый фреймворк NOOA (Object-Oriented Agents), который призван решить проблему фрагментации в разработке ИИ-агентов. Платформа объединяет разрозненные элементы инфраструктуры — шаблоны промптов, схемы инструментов, функции обратного вызова (callbacks) и графы рабочих процессов — в единый класс Python.
Проект передан в консорциум Open Secure AI Alliance для совместного развития открытых стандартов безопасности в сфере искусственного интеллекта.
➡️ Читать полностью
Программистика || #article
5 791
NVIDIA представила NOOA: фреймворк для разработки ИИ-агентов в рамках одного Python-класса
Компания NVIDIA выпустила открытый фреймворк NOOA (Object-Oriented Agents), который призван решить проблему фрагментации в разработке ИИ-агентов. Платформа объединяет разрозненные элементы инфраструктуры — шаблоны промптов, схемы инструментов, функции обратного вызова (callbacks) и графы рабочих процессов — в единый класс Python.
Проект передан в консорциум Open Secure AI Alliance для совместного развития открытых стандартов безопасности в сфере искусственного интеллекта.
➡️ Читать полностью
Программистика || #article
5 791
Все о структурах данных в Python для начинающих
Структуры данных — это фундамент Python и основа любой эффективной программы. Без понимания списков, кортежей, множеств и словарей невозможно писать чистый, логичный и производительный код. В курсе вы разберёте все основные структуры данных в Python, их разновидности и назначение, научитесь использовать методы, операторы и генераторы.
🌐 СсылкаПрограммистика || #Course
5 791
⏰ Библиотека Python: Arrow
Arrow — это интуитивная библиотека для работы с датами и временем, предлагающая простой API для создания, форматирования и манипуляции датами. Она поддерживает часовые пояса, человекочитаемые интервалы и значительно упрощает код по сравнению со стандартным datetime.
✔️ Установка:
pip install arrow
🐱 Ссылка на репозиторий
Программистика|| #Library5 791
Micro REPL 💻
Micro-REPL обладает следующими функциями:
✅Терминал для доступа к интерактивной оболочке MicroPython. ✅Файловый менеджер для хранения файлов MicroPython. ✅Интеллектуальный редактор кода с поддержкой синтаксиса Python и автодополнением.
🌐 СсылкаПрограммистика || #Ресурсы
5 791
👩💻 Python-библиотеки для сисадмина
Если ты автоматизируешь серверы, сети и рутину, вот набор библиотек, который реально пригодится:
🔴paramiko — SSH, удалённые команды, копирование файлов. 🔵psutil — нагрузка CPU, RAM, диски, процессы. 🔴requests / httpx — работа с API и веб-сервисами. 🔵pyyaml — удобные конфиги в YAML. 🔴pydantic — валидация конфигов и входных данных. 🔵rich — красивый вывод в терминале. 🔴loguru — простые и удобные логи. 🔵fabric — выполнение команд на нескольких серверах. 🔴dnspython — DNS-проверки. 🔵watchdog — слежение за файлами и директориями.Что поставить первым:
pip install paramiko psutil requests rich pydantic pyyaml loguru
Этого набора уже хватает для большинства админских скриптов: мониторинг, бэкапы, SSH-автоматизация, обработка конфигов и API-интеграции.
Программистика || #Library5 791
Вопрос от подписчика: Почему Python 2 и 3 несовместимы?
Потому что Python 3 — это не “чуть обновили”, а почти пересобрали язык заново.
В нём поменяли вещи, на которых держался старый код: строки стали вести себя по-другому, Unicode сделали нормой, print превратился в функцию, а часть старого синтаксиса просто выкинули.
P.S // Если у вас тоже есть вопросы, не стесняйтесь задавать их комменратиях
Программистика || #вопрос_ответ
5 791
⚠️ Внимание: Опубликована слитая недавно База из 1000+ топовых курсов и материалов для айтишников
Отсортировали их для вашего удобства и выложили в телеграм-каналы по категориям:
🤖 Нейросети – 855+ материалов
🖥 Python — 1558+ материалов
👩💻 Frontend — 1241+ материалов
👩💻 Backend — 1095+ материалов
⚙️ Программы — 978+ материалов
📚 Книги по IT — 779+ материалов
⌛️ Ссылки будут активны 48 часов, сохрани себе, чтобы не потерять!
5 791
Хитрости которые экономят время ⌨️
В программировании важны не только знания языка, но и привычки, которые помогают писать код быстрее и аккуратнее. Хороший разработчик думает не только о том, как код написать, но и о том, как потом его читать, тестировать и дорабатывать.
Один из самых полезных приёмов, это не повторять один и тот же код. Если фрагмент используется несколько раз, его лучше вынести в функцию, модуль или компонент. Так код становится чище и проще в поддержке.
Ещё один важный подход, это быстро проверять идеи на практике. Иногда лучше сначала собрать простой рабочий вариант, а уже потом улучшать его. Это помогает не тратить время на лишнюю сложность.
Очень помогает и грамотная отладка. Когда что то идёт не так, полезно смотреть логи, значения переменных и стек вызовов. Часто это быстрее, чем пытаться угадать причину ошибки.
И, пожалуй, главный секрет в том, чтобы писать код проще. Чем понятнее структура, имена и логика, тем легче с ним работать потом.
Программистика|| #article
5 791
Продвинутые алгоритмы на Python
Этот курс посвящён ключевым алгоритмам на графах и их практической реализации на языке Python. Вы научитесь находить кратчайшие пути, строить минимальное остовное дерево и вычислять максимальный поток, а также применять эти алгоритмы на практике.
🌐 СсылкаПрограммистика || #Course
5 791
🧠 Базы данных на Python и ИИ
Это практическое руководство по работе с данными в экосистеме Python от хранения информации и SQL-запросов до аналитики, оптимизации и построения моделей машинного обучения. Книга знакомит читателя с SQLite, PostgreSQL, MySQL, MongoDB, SQLAlchemy и pandas, показывая, как эти инструменты применяются в реальных проектах. Большая часть материала состоит из готовых примеров кода с подробными пояснениями. Отдельное внимание уделено обработке больших объемов данных, оптимизации производительности, потоковой обработке, эффективному использованию памяти и построению аналитических ИИ-моделейПрограммистика || #doc
5 791
Проходила я пару лет тому назад собеседование в одной фирме.
Меня спросили: - Как написать скрипт для переименования файлов в папке?
И я, не долго думая, ответила: - Ну, это легко! Нужно просто взять файл, открыть его, посмотреть на него строго, сказать: "Теперь ты Петя!" и сохранить!
Интервьюер немного замялся, а потом говорит: - А если файлов тысяча?
Я задумалась и говорю: - Тогда надо поставить их в ряд и начать перекличку!
На этом моменте интервьюер начал улыбаться, а я добавила: - Но если серьёзно, я могу написать код, просто думала, что вы хотите креативный подход!
На этом меня взяли на работу, но до сих пор в офисе все файлы называют Петями.
Программистика
5 791
Пишем кроссплатформенные приложения на Python: погружение в Kivy
Kivy — это фреймворк, предназначенный для кроссплатформенной разработки приложений на Python. Вы точно не найдете его в топах самых популярных и обсуждаемых инструментов, потому что проект развивается медленно, имеет не самый широкий и современный набор средств верстки интерфейса, а также плохо оптимизирован для сборки ПО.
➡️ Читать статью
Программистика || #article
