Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Веселая аркада с Печенькой для новогоднего настроения. Объезжайте препятствия, а подарки, варежки, конфеты и прочие приятности не объезжайте: они помогут набрать очки и установить новый рекорд.

Сноуборд

Спорт, Аркады, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Python + Обучение

С этим тегом используют

Программирование IT Программист IT юмор Разработка YouTube Образование Учеба Урок Английский язык Все
551 пост сначала свежее
f.lattys
f.lattys
4 месяца назад
Лига программистов

Python и психология: анализ поведения пользователей в приложениях⁠⁠

Python и психология: анализ поведения пользователей в приложениях Python, Гайд, Программирование, IT, Обучение, Пользователи, Длиннопост

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

➡️Почему важно анализировать поведение пользователей?

1. Оптимизация UX/UI: Понимание того, как пользователи используют ваш продукт, позволяет улучшить его интерфейс, сделать его более интуитивным и удобным.

2. Увеличение конверсии: Анализируя данные о том, где пользователи сталкиваются с трудностями или теряют интерес, можно найти точки роста и повысить конверсию.

3. Лояльность пользователей: Изучение предпочтений и привычек пользователей помогает создавать персонализированный опыт, что увеличивает их удовлетворенность и лояльность.

➡️Как Python используется для анализа поведения пользователей?

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

👀 1. Сбор данных

Первый шаг — собрать данные о действиях пользователей. Это может включать:

- Клик-стриминг (запись кликов и движений мыши).

- Время на странице/экране.

- Маршруты навигации.

- Взаимодействие с элементами интерфейса.

Python-библиотеки, такие как Flask или Django, могут использоваться для создания API, которые собирают эти данные и передают их в базу данных.

👀 2. Обработка данных

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

- Pandas: Библиотека для работы с табличными данными. Позволяет фильтровать, группировать и агрегировать информацию.

- NumPy: Библиотека для численных вычислений. Используется для сложных математических операций.

Пример использования Pandas:

import pandas as pd

# Загрузка данных о пользователях

data = pd.read_csv('user_behavior.csv')

# Фильтрация данных по конкретному событию

click_data = data[data['event'] == 'click']

# Группировка по пользователям

user_activity = click_data.groupby('user_id').size()

👀 3. Анализ данных

На этом этапе данные анализируются для выявления закономерностей и трендов. Python предоставляет множество инструментов для этого:

- Scikit-learn: Библиотека для машинного обучения. Может использоваться для классификации пользователей, прогнозирования действий и построения рекомендательных систем.

- Statsmodels: Библиотека для статистического анализа. Подходит для тестирования гипотез и оценки значимости различий между группами пользователей.

Пример использования Scikit-learn:

from sklearn.cluster import KMeans

# Кластеризация пользователей на основе их активности

kmeans = KMeans(n_clusters=3)

user_clusters = kmeans.fit_predict(user_activity.values.reshape(-1, 1))

👀 4. Визуализация данных

Чтобы лучше понять результаты анализа, важно визуализировать данные. Python предлагает несколько популярных библиотек для этого:

- Matplotlib: Основная библиотека для создания графиков.

- Seaborn: Надстройка над Matplotlib, позволяющая создавать более сложные и красивые визуализации.

- Plotly: Интерактивная библиотека для создания дашбордов и графиков.

➡️Примеры применения Python в анализе поведения пользователей

— 1. A/B-тестирование

Python используется для проведения A/B-тестов, чтобы сравнить эффективность разных версий интерфейса. Например, вы можете протестировать два варианта кнопки "Купить" и выбрать тот, который приводит к большему количеству конверсий.

— 2. Рекомендательные системы

Машинное обучение на Python помогает создавать персонализированные рекомендации для пользователей. Например, платформы потокового видео могут предлагать контент на основе предыдущих просмотров.

— 3. Тепловые карты

Python может использоваться для создания тепловых карт, показывающих, куда чаще всего кликают пользователи на сайте или приложении. Это помогает оптимизировать расположение элементов интерфейса.

— 4. Прогнозирование оттока пользователей

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

➡️Как Python помогает улучшить UX/UI?

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

2. Персонализация: Python позволяет создавать адаптивные интерфейсы, меняющиеся в зависимости от предпочтений пользователя.

3. Оптимизация навигации: Исследование маршрутов пользователей помогает упростить навигацию и сделать её более интуитивной.

4. Тестирование гипотез: Python позволяет быстро проверять новые идеи и экспериментировать с интерфейсом без больших затрат.

➡️Заключение

Python становится всё более важным инструментом для анализа поведения пользователей и улучшения UX/UI.


Ещё много полезной информации, практики и задач закинул в свой канал - клик

Показать полностью 1
[моё] Python Гайд Программирование IT Обучение Пользователи Длиннопост
0
8
PythonGet
PythonGet
4 месяца назад
Программирование на python
Серия Python_get

Django: Магия Python для создания веб-приложений⁠⁠

Если Python — это ваш верный меч, то Django — это зачарованный щит, который защищает ваш код и делает его мощнее. Django — это высокоуровневый фреймворк для создания веб-приложений на Python. Он позволяет быстро и эффективно разрабатывать сложные проекты, не изобретая велосипед. Django следует принципу DRY (Don’t Repeat Yourself) и предлагает множество встроенных инструментов для работы с базами данных, аутентификацией, маршрутизацией и многим другим.

Но настоящая магия Django скрывается в его командной строке. Файл manage.py — это ваш волшебный жезл, который помогает управлять проектом. Давайте разберёмся, какие команды он предлагает и как они могут сделать вашу жизнь проще.

🧙‍♂️ Список команд manage.py с комментариями

Django: Магия Python для создания веб-приложений Python, Программирование, Обучение, Джанго, Длиннопост

🐱‍💻 Вопрос на засыпку

Допустим, вы создали новый проект Django, добавили несколько приложений и настроили базу данных. Но вдруг вы понимаете, что забыли, какую команду использовать для создания суперпользователя. Как вы думаете, какую команду нужно ввести, чтобы вспомнить все доступные команды 'manage.py'? 🤔

А ещё больше интересного можно почитать на канале https://t.me/pytonism. Приходите! )

Показать полностью 1
[моё] Python Программирование Обучение Джанго Длиннопост
5
7
PythonGet
PythonGet
4 месяца назад
Программирование на python
Серия Python_get

Котики и типы данных: как выбрать правильную миску для молока?⁠⁠

Когда вы начинаете программировать, выбор правильного типа данных может быть таким же сложным, как выбор миски для вашего кота. Если миска слишком маленькая, молоко разольётся. Если слишком большая, котик может утонуть в своих размышлениях. Сегодня мы поговорим о менее очевидных типах данных в Python и о том, как их использовать, чтобы ваш код был элегантным, как кошачья походка.

О чём речь?

Python — это язык, который предлагает множество встроенных типов данных. Мы все знаем про int, float, str и list. Но что насчёт таких типов, как frozenset, complex, или даже bytearray? Эти ребята часто остаются в тени, как коты, которые прячутся под диваном. Давайте вытащим их на свет и разберёмся, как они могут быть полезны.

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

🐾 1. Frozenset: замороженный котик

frozenset — это неизменяемая версия set. Представьте, что у вас есть кот, который обожает гоняться за лазерной указкой. Но иногда вам нужно, чтобы он замер на месте, чтобы не разрушить вашу комнату. Вот так же работает frozenset: он фиксирует элементы, чтобы их нельзя было изменить.

Котики и типы данных: как выбрать правильную миску для молока? Python, Программирование, Обучение, Длиннопост

Используйте frozenset, когда вам нужно хранить уникальные элементы, которые не должны изменяться, например, ключи в словаре.

🐾 2. Complex: коты в четырёх измерениях

Комплексные числа (complex) — это числа с реальной и мнимой частью. Если ваш котик вдруг решил изучать квантовую физику, этот тип данных ему точно пригодится.

Котики и типы данных: как выбрать правильную миску для молока? Python, Программирование, Обучение, Длиннопост

Комплексные числа полезны в научных вычислениях, например, для работы с электрическими цепями или моделирования волн.

🐾 3. Bytearray: котик в шубке из байтов

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

Котики и типы данных: как выбрать правильную миску для молока? Python, Программирование, Обучение, Длиннопост

bytearray полезен для работы с бинарными данными, например, при обработке изображений или файлов.

Примеры использования в различных ситуациях

🐾 Frozenset в реальной жизни:

Представьте, что вы пишете приложение для управления библиотекой. У вас есть набор жанров книг, которые не должны изменяться. Используйте frozenset для их хранения.

🐾 Complex для моделирования:

Если вы разрабатываете игру, где нужно моделировать движение объектов в пространстве, комплексные числа могут помочь вам описать траектории.

🐾 Bytearray для оптимизации:

При работе с сетевыми протоколами или сжатиями данных bytearray позволяет эффективно управлять памятью.

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

А теперь вопрос к вам, друзья: какой из этих типов данных вы уже использовали, а какой хотите попробовать? Напишите в комментариях! 🐾

А на канале https://t.me/pytonism мы рассмотрим, как работает bytearray. Переходите и читайте ;)

Показать полностью 3
[моё] Python Программирование Обучение Длиннопост
0
0
f.lattys
f.lattys
4 месяца назад
Программирование на python

Мощная библиотека composio-core для Python⁠⁠

Мощная библиотека composio-core для Python Программирование, IT, Обучение, Код, Python, Гайд, Программа, Длиннопост

composio-core - это мощная библиотека для Python, предназначенная для упрощения процесса композиции и декомпозиции сложных объектов. Она предоставляет элегантный и интуитивно понятный API, который позволяет разработчикам легко создавать, модифицировать и анализировать сложные структуры данных.

➡️Установка composio-core

Установить библиотеку composio-core очень просто. Вы можете использовать pip, стандартный менеджер пакетов Python. Вот команда для установки:

pip install composio-core

➡️Основные возможности

- Гибкая система композиции объектов

- Мощные инструменты для декомпозиции и анализа

- Поддержка асинхронных операций

- Интеграция с популярными фреймворками

- Расширяемая архитектура плагинов

➡️Пример использования

Давайте рассмотрим простой пример использования composio-core для создания и анализа сложного объекта:

from composio_core import Composer, Analyzer

# Создаем композицию

composer = Composer()

complex_object = composer.create({

"name": "Проект X",

"components": [

{"type": "module", "name": "Auth", "version": "1.2.0"},

{"type": "database", "name": "UserDB", "engine": "PostgreSQL"},

{"type": "service", "name": "EmailNotifier", "protocol": "SMTP"}

]

})

# Анализируем созданный объект

analyzer = Analyzer()

analysis_result = analyzer.analyze(complex_object)

print(analysis_result.summary())

print(f"Количество компонентов: {analysis_result.component_count}")

print(f"Типы компонентов: {', '.join(analysis_result.component_types)}")

В этом примере мы создали сложный объект, представляющий структуру проекта, а затем проанализировали его с помощью инструментов composio-core.

➡️Преимущества использования composio-core

💬1. Повышение читаемости кода

Благодаря четкой структуре и интуитивно понятному API, код, использующий composio-core, становится более читаемым и понятным. Это особенно важно при работе в команде или при поддержке долгосрочных проектов.

💬2. Ускорение разработки

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

💬3. Гибкость и расширяемость

Архитектура composio-core позволяет легко расширять функциональность библиотеки с помощью плагинов, что делает ее идеальным выбором для проектов с уникальными требованиями.

➡️Продвинутые возможности

Помимо базовой функциональности, composio-core предлагает ряд продвинутых возможностей:

- Асинхронная композиция

import asyncio

from composio_core import AsyncComposer

async def create_complex_object():

composer = AsyncComposer()

object = await composer.create_async({

"name": "Async Project",

"components": [

{"type": "api", "name": "UserAPI", "version": "2.0.0"},

{"type": "queue", "name": "TaskQueue", "technology": "RabbitMQ"}

]

})

return object

complex_object = asyncio.run(create_complex_object())

print(complex_object)

- Интеграция с популярными фреймворками

composio-core легко интегрируется с популярными Python-фреймворками, такими как Django и Flask. Например, вот как можно использовать библиотеку в Django-проекте:

from django.views import View

from django.http import JsonResponse

from composio_core import Composer

class ProjectView(View):

def post(self, request):

composer = Composer()

project = composer.create(request.POST)

return JsonResponse({"project": project.to_dict()})

➡️Заключение

Библиотека composio-core представляет собой мощный и гибкий инструмент для работы со сложными структурами данных в Python.

Независимо от того, разрабатываете ли вы веб-приложение, систему анализа данных или инструмент для машинного обучения, composio-core может значительно упростить процесс работы с комплексными объектами и структурами данных.


Ещё много полезной информации, практики и задач закинул в свой канал - клик

Показать полностью 1
[моё] Программирование IT Обучение Код Python Гайд Программа Длиннопост
1
6
PythonGet
PythonGet
4 месяца назад
Программирование на python
Серия Python_get

Котики-деклараторы и котики-императоры: как программировать с размахом и изяществом⁠⁠

Привет! Сегодня мы поговорим о двух подходах к программированию, которые можно сравнить с поведением котиков. Одни котики — это грациозные и независимые создания, которые просто показывают, чего хотят, и ты сам догадываешься, как это сделать. Это декларативный подход. Другие котики — это те, кто требуют внимания и четко указывают, что и как ты должен делать. Это императивный подход. Давай разберемся, что это за звери такие, где их применять и какие у них плюсы и минусы.

О чём речь?

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

Декларативный подход: ты описываешь, что должно быть сделано, не вдаваясь в детали, как это сделать. Например, "Хочу, чтобы миска была полной".

Императивный подход: ты описываешь пошагово, как достичь результата. Например, "Открой шкаф, достань корм, насыпь его в миску".

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

🐾 Императивный подход

Императивный код — это как инструкция для робота. Ты говоришь ему, что делать на каждом шаге. Например, если ты хочешь отсортировать список чисел, ты пишешь алгоритм сортировки.

Котики-деклараторы и котики-императоры: как программировать с размахом и изяществом Python, Программирование, Обучение, Длиннопост

Комментарий: Здесь мы пошагово объясняем компьютеру, как именно сортировать список. Это как если бы ты учил кота ловить мышь: "Сначала подкрадись, потом прыгни, потом схвати".

🐾 Декларативный подход

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

Котики-деклараторы и котики-императоры: как программировать с размахом и изяществом Python, Программирование, Обучение, Длиннопост

Комментарий: Здесь ты просто говоришь: "Отсортируй мне список", и Python делает всю грязную работу за тебя. Это как если бы кот сам нашел мышь и принес её тебе.

Преимущества и недостатки

🐾 Императивный подход

✅ Плюсы:

  • Полный контроль над процессом.

  • Подходит для сложных алгоритмов, где важна каждая деталь.

❌ Минусы:

  • Код может быть длинным и сложным.

  • Требует больше времени на написание и отладку.

🐾 Декларативный подход

✅ Плюсы:

  • Код проще и короче.

  • Легче читать и понимать.

❌ Минусы:

  • Меньше контроля над процессом.

  • Зависимость от библиотек и встроенных функций.

Когда какой подход применять?

🐾 Императивный подход:

  • Когда тебе нужно полный контроль над процессом.

  • Когда ты пишешь сложные алгоритмы или работаешь с низкоуровневыми задачами.

🐾 Декларативный подход:

  • Когда важен результат, а не процесс.

  • Когда ты работаешь с высокоуровневыми задачами, например, с базами данных или веб-разработкой.

Примеры из жизни

🐾 Императивный котик: Ты хочешь, чтобы кот прыгнул на диван. Ты показываешь ему, как это сделать: "Сначала подойди к дивану, потом подпрыгни, потом сядь".

🐾 Декларативный котик: Ты просто кладешь на диван его любимую игрушку, и он сам туда прыгает.

А ты больше любишь контролировать процесс или доверяешь магии встроенных функций? Напиши в комментариях! 🐾

А на канале https://t.me/pytonism вышел материал о том, как создавать и удалять файлы, обходить каталоги и много чего ещё делать с помощью библиотеки pathlib. Переходите и читайте!)

Показать полностью 2
[моё] Python Программирование Обучение Длиннопост
2
0
proDream
proDream
4 месяца назад

Taigram: Начало работы⁠⁠

Всем привет!

На этой неделе мы объявили о начале работы над Open Source проектом Taigram, название которому, к слову, выбрали вы в опросе.

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

Проектом занимаемся мы вдвоём: Иван и Виктор, а также с логотипом нам помог наш бессменный дизайнер Евгений. (Больше никто не захотел к нам присоединиться 😭)

Начнём мы, как водится, с самого начала...

Taigram: Начало работы IT, Программирование, Обучение, Python, Telegram, Программа, Длиннопост

Менеджер управления проектами Taiga.io

Любой проект начинается с продумывания работ, функционала и предстоящих задач. Это можно делать как в Telegram-переписке, блокноте, заметках Obsidian, так и использовать более профессиональные инструменты - менеджеры проектов.

Мы давно искали удобный (и, что немаловажно - бесплатный!) инструмент ведения проектов, который можно развернуть локально. В итоге остановились на Taiga.io.

Taiga.io - это бесплатный Open Source Self-Hosted менеджер управления проектами. Это означает, что это свободно распространяемое программное обеспечение, которое можно установить на свой собственный сервер, не беспокоясь о зависимости от какого-то крупного игрока.


Что не так с Тайгой и для чего нам нужен Taigram?

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

Это оказалось действительно удобно, за исключением нескольких моментов и один из них - оповещения. Дело в том, что Тайга отправляет оповещения об изменении задачи только тем, кто назначен исполнителем и наблюдателем, и отправляет она их на Email, при условии, что у пользователя стоят соответствующие разрешения в его профиле. Согласитесь, это хоть и удобно (какие-никакие уведомления лучше, чем их полное отсутствие), но порой абсолютно не оперативно! Да и к тому же, вряд ли кто захочет "пачкать" свою почту.

Тогда появилась идея сделать Telegram-бота, который сможет отправлять уведомления в чат/тему чата. Мы приняли такое решение, в том числе из-за того, что Тайга предоставляет возможность подключить WebHook для отправки уведомлений и у отправляемых данных, достаточно простая структура и, в целом, этих данных достаточно - это важно. Это значит, что добавив на текущем этапе самый нужный, по нашему мнению, функционал - потом его можно дополнить. А если это можно дополнять и функционал, который мы добавим сейчас - самый нужный по нашему мнению, означает, что этого функционала может быть недостаточно для кого-то другого, под какие-то другие специфические задачи.

Если кому-то это нужно или кто-то посчитает, что знает чего сервису не хватает в настоящий момент - он сможет это дополнить. На наш взгляд это отличная идея и входящие данные для запуска работ над Open Source проектом.


Цель и функциональные требования

  1. Цель: создание сервиса, который будет отправлять уведомления об обновлении списка задач и других событий из менеджера управления задачами Taiga в Telegram

  2. Функциональные требования:

    • Настройка уведомлений через Telegram-бота:

      • Добавление/удаление администраторов бота;

      • Выбор чата/канала;

      • Добавление/удаление/изменение проектов;

      • Отображение списка проектов;

      • Отображение информации по проекту:

      • Форматирование, отправляемых сообщений.

    • Интеграция с Taiga через вебхуки.

  3. Стек технологий

    • Бэкенд: Python, FastAPI, Aiogram;

    • Работа с данными: Taiga Webhooks, MongoDB, Redis;

    • Инфраструктура: Dynaconf, Pydantic.


Планирование проекта

Мы созвонились в нашем уютном Discord-сервере (присоединяйтесь, там мы регулярно работаем, общаемся или играем!) и открыв Obsidian, начали рисовать примерный план желаемого функционала. Спойлер: уже сейчас, спустя неделю с начала часть функционала изменено до неузнаваемости, но об этом в другой раз.

Найти схему можно в нашем проекте: https://tasks.pressanybutton.ru/project/taiga-webhook-telegram-notifier/task/5

Схема казалась небольшой, мы делали и куда более объёмные и даже посчитали "да чё там делать? За пару вечеров справимся"...

Закончив схему появились две первые задачи:

  • Организовать доску в Тайге

  • Сделать репозиторий.

Доской занялся Виктор, а я пошёл делать репозиторий на GitHub.


Организация доски

Не смотря на то, что у нас (как у Команды проекта "Код на салфетке", так и у меня лично (Виктора)) был опыт в подготовке как проектной, так и технической документации, но делать что-то, что изначально будет в открытом доступе значит, что у проекта есть дополнительные ограничения и "ответственность".

Мы совершенно не боимся признаться что какие-то вещи у нас получаются пока что не так хорошо или какие-то процессы могут быть выстроены как-то не так, как их можно было бы выстроить и именно поэтому мы решили, что будем вести разработку полностью открыто и все задачи вести также - открыто.

Шаг 1: Определение настроек проекта

Сперва нам было необходимо определиться с используемыми модулями в проектном менеджере для последующего масштабирования.

Почти сразу мы определили, что модуль "Канбана" нам не подходит, поскольку там невозможно создавать задачи в отрыве от пользовательских историй, следовательно создавать на каждую задачу пользовательскую историю "Дорожками" (не статусы) означает плодить сущности и терять контроль над "подзадачами".

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

Вернемся к модулям, мы решили использовать:

  • Эпики: для стратегического планирования;

  • Скрам: для текущего управления спринтами;

  • Запросы: если у кого-то из команды или гостей проекта появится желание добавить какой-то функционал или сообщить о чем-то;

  • Вики: для создания первоначального хранилища базы знаний;

Шаг 2: Определение границ спринтов

Как было сказано ранее, вначале у нас сложилось впечатление, что мы действительно можем управиться за пару вечеров в силу функциональных требований и сложности структуры, предъявляемой к проекту, но все осложнилось тем, что проект - Open Source и следовательно его нужно постараться сделать пригодным для последующего масштабирования и поддержки.

Поэтому составили первоначальный план, который включал следующие этапы:

  • Подготовительная часть:

    • анализ задачи;

    • оформление всех функциональных хотелок в виде тезисов;

    • прогнозирование объема работ;

    • определение структуры проекта;

    • подготовка схем структуры проекта;

    • подготовка схем пользовательского пути;

  • Базовый функционал (этап основной разработки MVP):

    • подготовка структуры проекта;

    • инициализация проекта и первичная настройка виртуального окружения, инфраструктуры;

    • настройка CI/CD;

    • создание базовых классов, необходимых для реализации бизнес-логики;

    • валидация данных;

    • создание необходимых методов, для работы с текстовыми файлами (для последующей локализации);

  • Локализация:

    • русский язык;

    • английский язык;

  • Релиз GitHub Pages:

    • подготовка и настройка репозитория;

    • настройка CI/CD;

    • подготовка и оформление документации;

    • составление инструкций;

Шаг 3: Работа с доской

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

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

По моим наблюдениям, регулярное обновление информации по статусам задачи держит команду "в тонусе" и позволяет придерживаться "единого вектора" в разработке.

Откровениями "о взлетах и падениях" мы поделимся в последующих статьях, но считаем, что о публичном проекте, нужно говорить честно и открыто - этим объясняется существование этого подраздела.


Технологический стек

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

В качестве пакетного менеджера мы выбрали набирающий популярность uv. Как раз в новой версии PyCharm добавили его нативную поддержку. Честно, пока не заметил за ним каких-то преимуществ перед "надёжным как Швейцарские часы" Poetry, но вдруг он раскроется в будущем?

Для обработки обновлений Telegram и приёма оповещений из Тайги по WebHook был выбран микрофреймворк FastAPI. Полагаю, что он не нуждается в представлении: быстрый, надёжный и достаточно гибкий.

Сердцем Telegram-бота является aiogram. По нашему мнению - самый лучший фреймворк для написания ботов.

Поскольку в проекте не подразумевается большого количества данных для хранения, мы выбрали в качестве базы данных MongoDB с асинхронной библиотекой Motor.

Для хранения состояний и временных данных отлично подойдёт Redis. Это такой легковесный брокер сообщений / база данных.

Также, в проект был подключен pre-commit, позволяющий запускать линтеры перед коммитом. Он нужен для того, чтобы стиль кода всех разработчиков совпадал во всём проекте, ну и заодно он проверяет, что нет неиспользуемых импортов/переменных, некорректных вызовов и много, что ещё.


Создание репозитория

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

Проект в uv создаётся примерно также, как и в Poetry. Прописываем команду uv init taiga_wh_notifier. В результате создастся директория в которой будет основа проекта, инициализированный git и .venv. Удобно.

Перейдя в директорию сразу добавляем origin репозитория на гитхаб.

Далее нужно было создать основные файлы:

  • README.md - лицо всего репозитория. На данный момент оно практически пустое, мы определили основные разделы ридми файла, но пока не будет относительно рабочего функционала, заполнять ридми рано.

  • CONTRIBUTING.md - в этом файле описывает процесс по которому любой желающий сможет развернуть локальную версию проекта и вносить необходимые правки в код.

  • STYLEGUIDE.md - в этом файле описываются принципы и примеры стиля кода которому мы придерживаемся. Ничего сверхъестественного, но наличие этого файла поможет новым участникам проекта быть с нами "на одной волне".

Всё это мы писали вместе на основе нашего виденья проектов. В будущем содержимое файлов будет расширено и приобретёт полноценный вид.

В конце коммит и пуш. Первая задача закрыта, на очереди ещё сотня...


Настройка репозитория на GitHub

Проект создан, запушен, но не хватает одной маленькой детали - настройки репозитория на GitHub.

Что я имею ввиду? У нас есть главная ветка репозитория main и по умолчанию, каждый может в неё пушить, что является критической уязвимостью в целостности всего проекта. Да, можно откатывать коммиты и прочее, но всё это дополнительные и далеко не самые приятные действия.

Что нам нужно было сделать, дабы предотвратить хаос? Мы разработали правила работы с репозиторием!

Правила работы

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

  1. Ветка main заблокирована от всех пушей, даже от имени создателя репозитория. Это решает проблему "случайного пуша в мейн", когда участник команды написал код, но забыл сменить ветку.

  2. Участники работают каждый в своей ветке, при это ветка не постоянная, а создаётся исключительно под задачу, после чего удаляется. Это позволяет определить по названию ветки к какой задаче на доске она относится, а не выяснять по коммитам, над какой же задачей работал участник.

  3. Для того, чтобы внести изменения в main-ветку, необходимо создать pull request. При этом, для того, чтобы сделать "мерж в мейн", необходимо одобрение минимум одного другого участника. Таким образом, в main-ветку не попадёт ничего случайно, только после код-ревью и одобрения.

Мы не сразу "притёрлись" с этой системой, так как каждый привык работать в одиночку. Однако, спустя время осознали её удобство, а когда разобрались, как всё это делать не выходя из PyCharm, стало вообще прекрасно.


Приглашение к разработке:

Если вас заинтересовал проект и вы считаете, что могли бы принести пользу в разработке, а также, если после прочтения этой статьи или ознакомления с материалами проекта вы пришли к выводу, что вам точно известно чего не хватает этому продукту и вы знаете как его можно улучшить - мы приглашаем присоединиться к проекту и принять участие в разработке!

Для этого свяжитесь с нами


Заключение

Это только самое начало, дальше начали создавать задачи и непосредственно писать код, о чём вы узнаете в следующей части.

Ссылки, касающиеся проекта:

  1. GitHub

  2. Доска разработки в Taiga

  3. Рубрика на сайте

Показать полностью 1
[моё] IT Программирование Обучение Python Telegram Программа Длиннопост
0
9
f.lattys
f.lattys
4 месяца назад
Лига программистов

Duck typing в python⁠⁠

Duck typing в python Python, Обучение, IT, Гайд, Программирование

Duck typing — это концепция, позволяющая использовать объекты независимо от их типа, базируясь на их свойствах и методах. Основная идея — не проверять тип объекта напрямую, а пытаться использовать его так, как нам нужно.

➡️Преимущества:

—Нет необходимости привязываться к конкретным классам и типам.
—Код становится более гибким и менее связанным.
—Легче расширять и изменять код, добавляя новые типы.
—Упрощает полиморфизм.

➡️Пример кода:

class Bird:

def fly(self):

return "I can fly!"

class Duck(Bird):

def quack(self):

return "Quack!"

class Airplane:

def fly(self):

return "I can also fly!"

def make_it_fly(flyable_thing):

print(flyable_thing.fly())

# Создаем объекты

duck = Duck()

airplane = Airplane()

# Используем их, не смотря на разные типы

make_it_fly(duck) # Выведет: I can fly!

make_it_fly(airplane) # Выведет: I can also fly!

⬆️В этом примере функция make_it_fly принимает любой объект, который имеет метод fly(). Если объект соответствует этому интерфейсу, он будет выполнен, независимо от того, является ли объект уткой, самолетом или чем-то еще.

🔎Duck typing позволяет создавать более гибкий и динамичный код, так как вы можете использовать объекты, которые соответствуют необходимым интерфейсам, не заботясь о их конкретных классах.

Ещё много крутой и полезной информации закинул в свой канал - клик

Показать полностью 1
[моё] Python Обучение IT Гайд Программирование
1
6
PythonGet
PythonGet
4 месяца назад
Программирование на python
Серия Python_get

Котики-документаторы: как научить код говорить на человеческом языке⁠⁠

Котики-документаторы: как научить код говорить на человеческом языке Python, Программирование, Обучение, Длиннопост

#коик документирует чертежи :)

Представьте, что ваш код — это кот. Он милый, пушистый, но иногда ведёт себя так, будто вы для него — просто обслуживающий персонал. Вы хотите, чтобы он объяснял свои действия, а не просто мяукал в пустоту? Тогда вам нужны doc-strings!

Doc-strings — это как записки, которые ваш кот оставляет вам, чтобы вы знали, почему он сбросил вазу с полки или зачем он сидит на клавиатуре. Это текстовые комментарии внутри кода, которые помогают вам (и другим разработчикам) понять, что происходит.

О чём речь?

Когда вы пишете код, важно не только заставить его работать, но и сделать его понятным. Doc-strings — это способ документировать функции, классы и модули, чтобы объяснить, что они делают, как их использовать и зачем они вообще существуют. Это как инструкция к вашему коту: "Если он мяукает три раза, значит, хочет есть. Если один раз — просто привлекает внимание".

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

Doc-strings — это строки текста, которые вы пишете сразу после определения функции, класса или модуля. Они заключаются в тройные кавычки (""") и могут быть многострочными. Python умеет их читать и даже выводить через функцию help().

Пример:

Котики-документаторы: как научить код говорить на человеческом языке Python, Программирование, Обучение, Длиннопост

🐾 Что здесь происходит?

  • """ — открываем doc-string.

  • Внутри описываем, что делает функция feed_cat.

  • Указываем аргументы (Args) и их типы.

  • Описываем, что возвращает функция (Returns).

Теперь, если кто-то (или вы сами через полгода) захочет понять, что делает эта функция, достаточно вызвать help(feed_cat).

Зачем это нужно?

  1. 🐾 Для себя: Через месяц вы забудете, зачем написали этот код. Doc-strings помогут вспомнить.

  2. 🐾 Для команды: Ваши коллеги не будут тратить часы, пытаясь понять, что делает ваш код.

  3. 🐾 Для пользователей: Если вы пишете библиотеку, doc-strings — это ваша документация.

Примеры использования в разных ситуациях

🐾 Пример 1: Документируем класс

Котики-документаторы: как научить код говорить на человеческом языке Python, Программирование, Обучение, Длиннопост

🐾 Пример 2: Документируем модуль

Котики-документаторы: как научить код говорить на человеческом языке Python, Программирование, Обучение, Длиннопост

Doc-strings появились в Python с самого начала, потому что Гвидо ван Россум (создатель Python) хотел, чтобы код был читаемым и понятным. Это как если бы он сказал: "Код без документации — это как кот без хвоста. Вроде работает, но что-то не так".

Алгоритм написания doc-strings

  1. 🐾 Определите, что делает ваш код. Представьте, что объясняете это другу.

  2. 🐾 Опишите входные данные. Какие аргументы принимает функция? Какие типы данных?

  3. 🐾 Опишите результат. Что возвращает функция? Какой тип данных?

  4. 🐾 Будьте краткими, но информативными. Не пишите роман, но и не ограничивайтесь "эта функция делает что-то".

🐾 Всё ли понятно? Или ваш внутренний котик всё ещё недоволен и хочет больше примеров? Напишите, если остались вопросы, и я с радостью помогу!

И, конечно же, заходите на канал https://t.me/pytonism за задачами и не только)

Показать полностью 4
[моё] Python Программирование Обучение Длиннопост
0
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии