❃ Хижина программиста Æ
14.9K subscribers
1.31K photos
95 videos
24 files
3.02K links
Канал для IT Дизайнеров и Программистов, Инженеров и Преподавателей

📡 Ссылка на канал: @hut_programmer_07

⚖️ Фундаментальные знания по основам программирования, философии и этики

💡 По вопросам рекламы: @quadd4rv1n7

Σ 只
Download Telegram
⚽️ Soccer Hub — это веб-приложение, разработанное на фреймворке FastAPI, которое предоставляет API для управления информацией о футбольных командах, матчах и аналитикой.
Проект ориентирован на поддержку адаптивного дизайна, что позволяет пользователям удобно получать доступ к данным с различных устройств.
Приложение также включает в себя систему аналитики для отслеживания посещаемости и действий пользователей.

Структура проекта
soccer_hub/
├── app/
│ ├── __init__.py # Инициализация FastAPI приложения
│ ├── main.py # Запуск приложения
│ ├── core/
│ │ ├── config.py # Конфигурации приложения
│ │ └── security.py # Функции безопасности
│ │
│ ├── db/
│ │ ├── database.py # Подключение к базе данных
│ │ ├── models.py # Модели данных
│ │ └── schemas.py # Схемы Pydantic для валидации
│ │
│ ├── routes/ # API маршруты
│ │ ├── __init__.py # Инициализация маршрутов
│ │ ├── analytics.py # Маршруты аналитики
│ │ ├── players.py # Маршруты игроков
│ │ ├── teams.py # Маршруты команд
│ │ └── matches.py # Маршруты матчей
│ │
│ ├── services/ # Логика бизнес-процессов
│ │ ├── team_service.py # Сервис для работы с командами
│ │ └── match_service.py # Сервис для работы с матчами
│ │
│ ├── templates/ # HTML шаблоны
│ │ ├── base.html # Основной шаблон
│ │ ├── index.html # Главная страница
│ │ ├── analytics.html # Страница аналитики
│ │ ├── matches.html # Страница матчей
│ │ ├── players.html # Страница игроков
│ │ ├── team.html # Подробнее о команде
│ │ └── teams.html # Страница команд
│ │
│ ├── static/ # Статические файлы (CSS, JS, изображения)
│ │ ├── css/ # Файлы стилей
│ │ ├── js/ # Файлы скриптов
│ │ └── images/ # Фотографии
│ │
│ └── analytics/ # Аналитика посещаемости и действий

├── tests/ # Тесты для приложения
│ ├── test_routes.py # Тесты для маршрутов
│ └── test_services.py # Тесты для сервисов

├── add_data.py # Добавление данных в БД
├── create_db.py # Создание базы данных

├── .env # Переменные окружения
├── .gitignore # Файлы и папки, которые нужно игнорировать в Git
├── alembic/ # Миграции базы данных (если используем Alembic)
│ └── env.py # Конфигурация миграций

├── docker-compose.yml # Docker для контейнеризации (опционально)
├── README.md # Описание репозитория проекта
├── requirements.txt # Зависимости проекта
└── run.py # Точка входа для запуска проекта


Используемые технологии
1️⃣ FastAPI: Фреймворк для создания высокопроизводительных API.
2️⃣ Pydantic: Для валидации и сериализации данных.
3️⃣ SQLAlchemy: ORM для работы с базой данных.
4️⃣ Alembic: Миграции базы данных.
5️⃣ Docker: Для контейнеризации приложения (опционально).

4️⃣ Репозиторий на GitHub

⌨️ Теги: #сайт #аналитика #fastapi #web #api #pydantic #sqlalchemy #alembic #docker #фреймворк #analytics #maximdupley #quadd4rv1n7 #2024
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Pet-проекты и данные для Data-Engineer

⚡️ При изучении дата-инжиниринга часто возникает вопрос: «откуда брать данные?»

1️⃣ Брать реальные данные откуда‑то.
2️⃣ Генерить данные самостоятельно.

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

Второй вариант как по мне более предпочтителен, потому что вы сможете проверить больше инструментов и возможностей в своих pet‑проектах и не особо задумываться над качеством и источником данных. Но также стоит упомянуть, что можно генерировать довольно правдоподобные данные, которые можно будет использовать для аналитики или визуализаций.

APILayer APIs
Faker

🖥 Оптимизировал пример создания ненастоящего пользователя:
from faker import Faker
from datetime import timedelta
import random

fake = Faker(locale='ru_RU')

def generate_fake_user(min_age=18, max_age=70, registration_years=5):
"""
Генерирует фейковый профиль пользователя.

:param min_age: минимальный возраст пользователя
:param max_age: максимальный возраст пользователя
:param registration_years: максимальное количество лет назад для даты регистрации
:return: словарь с данными пользователя
"""
# Генерация даты рождения и даты регистрации
birthday = fake.date_of_birth(minimum_age=min_age, maximum_age=max_age)
registration_at = fake.date_time_between(start_date=f"-{registration_years}y", end_date="now")

# Генерация фейкового профиля пользователя
fake_user = {
'first_name': fake.first_name(),
'last_name': fake.last_name(),
'middle_name': fake.middle_name(),
'phone_number': fake.phone_number(),
'email': fake.email(),

# Генерация адресных данных с логической структурой
'address': {
'country': fake.country(),
'country_code': fake.country_code(),
'region': fake.region(),
'city': fake.city(),
'street_address': fake.street_address(),
'postcode': fake.postcode(),
},

# Дополнительные сведения о пользователе
'occupation': fake.job(),
'company': fake.company(),
'work_phone': fake.phone_number(),
'marital_status': random.choice(['Single', 'Married', 'Divorced', 'Widowed']),
'website': fake.url(),

# Даты
'registration_at': registration_at,
'birthday': birthday,

# Профиль в социальных сетях и банковские реквизиты (при необходимости)
'social_profile': fake.url(),
'credit_card': {
'number': fake.credit_card_number(),
'provider': fake.credit_card_provider(),
'expiration_date': fake.credit_card_expire(),
}
}
return fake_user

# Пример использования
fake_user = generate_fake_user()
print(fake_user)


⌨️ Теги: #analytics #faker #api #generate #user #profile #данные #генерация #quadd4rv1n7 #maximdupley #2024
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Релиз Bruno 1.35

Bruno API Client обновился до версии 1.35, добавив параллельный запуск запросов, поддержку GraphQL через cURL и новые функции для Postman, включая массовый импорт окружений.

Теперь можно запускать запросы одновременно, что ускоряет тестирование, а так же ускорена работа с большими токенами доступа и добавлены настройки для клиентских сертификатов.

Ставьте «❤️», если пост был интересным

⌨️ Теги: #разработка #аналитика #проектирование #моделирование #bruno #api #client #curl #postman #maximdupley #quadd4rv1n7 #2024 #2025
1👍2
💻 В чём разница между REST и gRPC

☀️ REST — это архитектурный стиль взаимодействия между компонентами распределённой системы через интернет, чаще всего используется в веб-приложениях.

☀️ gRPC — это современный фреймворк для создания высокопроизводительных распределённых систем, разработанный Google.

Он основан на протоколе HTTP/2 и использует Protocol Buffers (protobuf) для сериализации данных.

📱 Выбор между REST и gRPC зависит от требований проекта.

REST подходит для публичных API и простых веб-приложений, а gRPC — для микросервисной архитектуры и высоконагруженных систем.

Ставьте «🥰», если пост вам понравился

⌨️ Теги: #rest #api #grpc #maximdupley #quadd4rv1n7 #2024 #2025 #maestro7it #разработка #сопровождение #аналитика #системное_программирование #программирование #it #programming #web
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
👀 Библиотека AnyIO в Python

Библиотека AnyIO упрощает работу с асинхронным кодом в Python.

Позволяет писать универсальные программы, которые могут работать с разными системами асинхронности, такими как asyncio или Trio.

Основные возможности библиотеки:

🔵Абстракция событийных циклов: Предоставляет единый интерфейс для работы с различными событийными циклами. Это упрощает миграцию между фреймворками и улучшает совместимость кода.
🔵Управление задачами: Поддержка создания, отмены и управления задачами (корутинами). Предоставляет высокоуровневые API для работы с задачами, которые унифицированы для всех поддерживаемых фреймворков.
🔵Асинхронные примитивы синхронизации: Предоставляются инструменты для синхронизации, такие как семафоры, события, блокировки, которые работают независимо от фреймворка.
🔵Работа с сетью: Поддерживает работу с TCP, UDP, UNIX сокетами, а также имеет инструменты для создания и использования SSL-соединений.
🔵Асинхронные файловые операции: Чтение и запись файлов выполняются асинхронно, что может быть полезно для приложений с высокой нагрузкой на диск.
🔵Поддержка таймаутов и дедлайнов: Возможность задавать таймауты и дедлайны для задач и операций, что упрощает обработку длительных или застрявших операций.
🔵Поддержка WebSocket и потоков: Предоставляет удобные API для работы с WebSocket-соединениями, а также для управления потоками.

➡️Установка библиотеки: pip install anyio

📱 Репозиторий
⚙️ Документация

➡️Хижина программиста

Ставьте «🥰», если пост вам понравился

⌨️ Теги: #anyio #python #library #io #websocket #api #trio #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
👀 Библиотека json-repair в Python

Библиотека json-repair предназначена для автоматического исправления ошибок в JSON-документах.

Помогает работать с поврежденными или плохо отформатированными JSON-файлами, делая их пригодными для обработки стандартными средствами, такими как json из стандартной библиотеки Python.

💬 Основные возможности библиотеки:

🔵Исправление синтаксических ошибок в JSON:
🟢Неправильные или отсутствующие кавычки.
🟢Забытые запятые между элементами.
🟢Ошибки в использовании скобок ({}, []).
🟢Неэкранированные символы.
🔵Поддержка больших JSON-документов.
🔵Быстрая работа благодаря эффективной реализации.

➡️ Установка библиотеки: pip install json-repair

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

➡️ Хижина программиста

Ставьте «🥰», если пост вам понравился

⌨️ Теги: #anyio #python #library #io #websocket #api #trio #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
👀 Библиотека sqlparse в Python

Библиотека sqlparse предназначена для форматирования, анализа и работы со SQL-запросами.

Не выполняет SQL-запросы, а предоставляет инструменты для их обработки как текста.

Основные возможности библиотеки:
❄️Форматирование SQL-запросов
❄️Приведение ключевых слов к верхнему или нижнему регистру
❄️Выравнивание отступов и структуры
❄️Удаление или добавление лишних пробелов и переносов строк
❄️Разделение SQL-скриптов на отдельные запросы
❄️Парсинг SQL-запросов
❄️Разбивка SQL-запроса на токены
❄️Анализ структуры SQL-запросов
❄️Получение дерева синтаксиса
❄️Распознавание ключевых слов, идентификаторов, операторов и других токенов
❄️Поддержка различных SQL-диалектов

➡️Установка библиотеки: pip install sqlparse

📱 Репозиторий
⚙️ Документация

➡️ Хижина программиста

Ставьте «🥰», если пост вам понравился

⌨️ Теги: #sql #python #library #sqlparse #api #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
1
ViewComfy — это инструмент с открытым исходным кодом, который поможет вам создавать прекрасные веб-приложения на основе ComfyUI.

4️⃣ GitHub

➡️ Хижина программиста

Ставьте «🥰», если пост вам понравился

⌨️ Теги: #github #git #comfy #инструмент #web #приложение #api #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👀 Библиотека CTkMessagebox в Python

Библиотека CTkMessagebox — это дополнение к библиотеке CustomTkinter, которая предоставляет современные настраиваемые элементы интерфейса для Python.

CTkMessagebox позволяет создавать диалоговые окна с сообщениями, кнопками и различными вариантами действий в стиле CustomTkinter.

Основные возможности библиотеки:
❄️Создавать диалоговые окна с сообщениями.
❄️Настраивать заголовки, текст сообщений, иконки и кнопки.
❄️Использовать предустановленные типы окон: информация, предупреждение, ошибка.
❄️Получать результат взаимодействия пользователя (например, нажатую кнопку).

Пример использования:
import customtkinter as ctk
from CTkMessagebox import CTkMessagebox

# Инициализация CustomTkinter
ctk.set_appearance_mode("dark")
ctk.set_default_color_theme("blue")

# Создание главного окна
root = ctk.CTk()
root.geometry("400x300")
root.title("Пример CTkMessagebox")


def show_messagebox():
msg_box = CTkMessagebox(
title="Пример сообщения",
message="Вы уверены, что хотите продолжить?",
icon="question", # Доступные иконки: 'info', 'warning', 'error', 'question'
option_1="Да",
option_2="Нет"
)
result = msg_box.get() # Получение результата нажатия кнопки
print(f"Нажата кнопка: {result}")


# Кнопка для вызова CTkMessagebox
button = ctk.CTkButton(root, text="Показать сообщение", command=show_messagebox)
button.pack(pady=20)

root.mainloop()


Для использования CTkMessagebox необходимо сначала установить CustomTkinter.

➡️Установка CustomTkinter: pip install customtkinter
➡️Установка CTkMessagebox: pip install CTkMessagebox

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

➡️ Хижина программиста

Ставьте «🥰», если пост вам понравился

⌨️ Теги: #github #customtkinter #инструмент #web #приложение #api #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
WebVM — это виртуальная среда без сервера, работающая полностью на стороне клиента в HTML5/WebAssembly.

Она разработана для совместимости с Linux ABI.

4️⃣ GitHub

➡️ Хижина программиста

Ставьте «🥰», если пост вам понравился

⌨️ Теги: #linux #webvm #virtualmachine #vm #api #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Код для проведения викторины на Python

Для получения случайных вопросов с вариантами ответов и правильным ответом через API в коде используется библиотека requests.

➡️Установка библиотек: pip install requests

import requests
from googletrans import Translator

# URL API для получения вопросов
url = "https://opentdb.com/api.php"
# Инициализация класса Translator
translator = Translator()

# Параметры запроса для получения 5 случайных вопросов
params = {
"amount": 5, # Количество вопросов
"type": "multiple" # Тип вопросов (многовариантные)
}

# Отправка запроса
response = requests.get(url, params=params)

# Проверка успешности запроса
if response.status_code == 200:
data = response.json()

# Перебор вопросов и вывод их на экран
for idx, question in enumerate(data['results'], start=1):
question['question'] = translator.translate(question['question'], dest='ru').text
question['correct_answer'] = translator.translate(question['correct_answer'], dest='ru').text
question['incorrect_answers'] = [translator.translate(option, dest='ru').text for option in question['incorrect_answers']]
print(f"Вопрос {idx}: {question['question']}")
print("Варианты ответа:")
for option in question['incorrect_answers']:
print(f"- {option}")
print(f"- {question['correct_answer']} (Правильный ответ)\n")
else:
print("Ошибка при получении данных:", response.status_code)

➡️ Хижина программиста

Ставьте «🥰», если пост вам понравился

⌨️ Теги: #python #api #answer #response #requests #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1