ru
Feedback
ITDEAL

ITDEAL

Открыть в Telegram

Разработка комплексных IT решений для бизнеса и частных заказчиков. Чат: @pybytes_chat Founder: @lunasantrope

Больше
1 198
Подписчики
Нет данных24 часа
-67 дней
-2030 день
Архив постов
ITDEAL
1 198
Замыкания в Python (часть 1) 🖥 Замыкание (closure) — это функция, которая находится внутри другой функции, и имеет доступ к
Замыкания в Python (часть 1) 🖥 Замыкание (closure) это функция, которая находится внутри другой функции, и имеет доступ к переменным, объявленным в теле внешней функции. Такие переменные принято называть свободными — переменные, которые используются в функции, но не определены внутри нее и не являются ее аргументами.

def outer(message):
    def inner():
        print(message)
    return inner_function
👀 Здесь замыканием или вложенной функцией является inner(), которая ссылается на свободную переменную message из функции outer(). Если мы хотим как-то менять свободные переменные, то с изменяемыми типам данных проблем не будет, но в другом случае мы можем получить ошибку UnboundLocalError. ✔️ Тогда на помощь приходит ключевое слово nonlocal, которое говорит, что переменная относится не к вложенной функции. Так переменная становится не локальной, однако за пределами внешней функции сослаться на нее все равно нельзя. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
Скобки и точки с зяпятой? - Не, не слышали. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Скобки и точки с зяпятой? - Не, не слышали. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
Тестирование с Python (часть 3) 📈 Выполнение всех тестов с помощью unittest это хорошо, однако бывают случаи когда их приход
Тестирование с Python (часть 3) 📈 Выполнение всех тестов с помощью unittest это хорошо, однако бывают случаи когда их приходится пропускать. К примеру, работа каких-то фукнций в вашей программе зависит от операционной системы или в коде присутствуют устаревшие функции, тесты которых надо пропустить. 🥱 Для пропуска тестов можно их продекорировать с помощью следующих вариантов: 🔤 @unittest.skip(reason) — в любом случае пропускает задекорированный тест. 🔤 @unittest.skipIf(condition, reason) — пропускает тест, если условие condition верно. 🔤 @unittest.skipUnless(condition, reason) — пропускает тест, если условие condition не верно. 📌 Во всех декораторах аргумент reason должен описывать, почему тест будет пропущен. Для более интересных примеров воспользуемся встроенным модулем sys, который позволяет получать информацию об ОС и интерпретаторе Python. 🖥 Функция sys.version_info() даст информацию о версии установленного Python, а sys.platform содержит строку с идентификатором ОС. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
🚀🌐 ВАКАНСИЯ: Go Developer 🌐🚀 Требования к кандидату: ➡️ Go: Уверенное знание языка, опыт написания и отладки кода. ➡️ Blo
🚀🌐 ВАКАНСИЯ: Go Developer 🌐🚀 Требования к кандидату: ➡️ Go: Уверенное знание языка, опыт написания и отладки кода. ➡️ Blockchain: Понимание основ (децентрализация, консенсусные алгоритмы, транзакции, смарт-контракты). ➡️ База данных: Опыт работы с SQL и NoSQL. ➡️ Git, IDE, дебаггеры ➡️ Работа в команде: Эффективное взаимодействие, коммуникативные навыки. Готовность обучаться ➡️ Docker ➡️ Solidity Софт-скилы: ➡️ Коммуникабельность: Способность четко и эффективно общаться в команде. ➡️ Работа в команде: Опыт работы в командной среде, умение слушать и высказывать свое мнение. ➡️ Самостоятельность: Готовность принимать ответственность за свою работу и проявлять инициативу. 🤖 Контакты @lunasantrope

ITDEAL
1 198
Тестирование с Python (часть 2) 🖥 Для проверки отдельных фрагментов кода или модульного тестирования (unit testing) в Python
Тестирование с Python (часть 2) 🖥 Для проверки отдельных фрагментов кода или модульного тестирования (unit testing) в Python есть встроенный фреймворк unittest. Работа с ним происходит через ООП и изначально он был вдохновлен фреймворком для юнит-тестирования в Java — JUnit. ☺️ Для первого теста создадим файл math_operations.py, где будут две функции для сложения и умножения: add() и multiple(). Потом создаем файл test_math_operations.py с нашими тестами. Желательно, чтобы название файла начиналось с префикса test (unittest поддерживает обнаружение файлов, основанное на их названии). 😉 Теперь создаем класс TestOperations, который наследуется от класса unittest.TestCase. Наконец внутри нашего класса мы можем создавать тесты, и их название тоже должно начинаться с префикса test.
def test_add(self):
    self.assertEqual(add(2, 3), 6)
📌 Этот тест проверит функцию add(): будет ли вывод функции с аргументами 2 и 3 равен значению 6. Для того, чтобы запустить тест, в самом файле можно воспользоваться функцией unittest.main(verbosity), где verbosity показывает уровень подробности вывода (от 0 до 2). Это не единственный вариант, как можно запускать тесты, но об этом поговорим позже. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
Тестирование с Python (часть 1) 📈 Тестирование — важная часть при работе над проектом, цель которой убедиться, что код работ
Тестирование с Python (часть 1) 📈 Тестирование — важная часть при работе над проектом, цель которой убедиться, что код работает правильно и соответствует требованиям. Скорее всего вы привыкли просто вводить разные данные в программу без всяких скриптов — это называется ручным тестированием. 🫣 Однако размер проектов растет и количество тестов тоже. Тогда на помощь приходит автоматизированное тестирование — тестирование кода с помощью другого кода. Для таких задач в Python есть множество библиотек, самые популярные: unittest (встроенная) и pytest. 🔤 А вообще все тестирование начинается со встроенной команды assert, которая помогает проверить условие. Выглядит примерно так:
assert x == "hello", "x should be 'hello'"
📌 Если x будет равняться "hello", то программа продолжит работу, однако в случае False код остановится и будет вызвана ошибка AssertionError вместе с надписью: "x should be 'hello’". 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
SOLID | Принципы программирования (Заключительная часть) 🖥 D — Принцип инверсии зависимостей (Dependency Inversion Principle
SOLID | Принципы программирования (Заключительная часть) 🖥 D — Принцип инверсии зависимостей (Dependency Inversion Principle — DIP). Этот модуль гласит две вещи: 🔤 Модули выского уровня не должны зависеть от модулей низкого уровня. Оба типа модулей должны зависеть от абстракций. 🔤 Абстракции не должны зависеть от деталей реализации. Детали реализации должны зависеть от абстракций. 📊 В общем DIP говорит, что не нужно завязываться на конкретную реализацию, к примеру, класса. Нужно инвертировать зависимость и работать с его абстракцией. ☺️ Предположим, что у нас есть абстрактный класс Notification и его два подкласса: EmailSender и SMSNotification. Мы создаем отдельный класс User и хотим, чтобы он имел возможность послать сообщение по e-mail. 🚶‍♀️ Мы можем напрямую завязать класс User на класс EmailSender, однако, следуя DIP, класс User стоит завязать на абстракцию Notfication. Так мы сможем посылать сообщение не только по e-mail и классы будут зависеть только от абстракций, что сделает код более гибким и легким для тестирования. 😎 В итоге мы с вами разобрали основные принципы программирования, которые смогут повысить качество ваших проектов. Однако стоит понимать, что не всегда надо следовать SOLID. Хоть они являются важной частью, их использование может внести в проект избыточную асбтракцию или сложность. Применяйте SOLID с умом! 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
SOLID | Принципы программирования (часть 4) 🖥 I — Принцип разделения интерфейсов (Interface Segregation Principle — ISP). Эт
SOLID | Принципы программирования (часть 4) 🖥 I — Принцип разделения интерфейсов (Interface Segregation Principle — ISP). Этот принцип был предложен Дядей Бобом, когда он консультировал компанию Xerox. Принцип гласит: «Программные сущности не должны зависеть от методов, которые они не используют». 🥸 ISP предполагает, что слишком объемные интерфейсы, к примеру классы, необходимо разделять на более специфические, чтобы подклассы знали только о методах, которые необходимы им в работе. Таким образом при изменении метода класса подклассы, которые этот метод не используют, не должны менятся. ☺️ Предположим, что у нас есть абстрактный класс Worker c двумя абстрактными методами work() и eat(). Мы создаем два подкласса: HumanWorker и RobotWorker. Мы вынуждены реализовать оба метода в обоих классах, хотя классу RobotWorker метод eat() не нужен (роботы пока есть не умеют). 😉 Чтобы соблюсти ISP можно создать два абстрактных класса с соответствующими методами: Workable и Eatable. Это позволит классу RobotWorker быть подклассом только Workable, что даст возможность не реализовать ненужные методы. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
SOLID | Принципы программирования (часть 3) 👀 O — принцип подстановки Лисков (Liskov Substitution Principle — LSP). Впервые
SOLID | Принципы программирования (часть 3) 👀 O — принцип подстановки Лисков (Liskov Substitution Principle — LSP). Впервые принцип был предложен Барбарой Лисков в 1987 году, однако более популярна интепретация Дядя Боба: «Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом» 📊 Класс-потомок должен дополнять, а не менять поведение родительского класса, то есть, подкласс должен быть способен выполнять те же действия, что и класс-родитель. В таком случае принцип LSP будет соблюден. 🚶‍♀️ Предположим, что у нас есть класс Car, от которого наследуется класс PetrolCar. У этих классов пока нет методов для добавления свойств, поэтому каждый разработчик может реализовать их несколькими способами: где-то, к примеру, через кортеж, а где-то через словарь. В таком случае может произойти ошибка. 🥸 Лучше будет создать методы setter и getter в суперклассе Car. Так мы можем устанавливать и получать свойства автомобиля, оставляя их формат везде единным. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
Первый в мире закон об ИИ 🧠 Недавно Евросоюз одобрил первый в мире закон, регулирующий использование искусственного интеллек
Первый в мире закон об ИИ 🧠 Недавно Евросоюз одобрил первый в мире закон, регулирующий использование искусственного интеллекта — EU AI Act. Вводится множество правил и огранечений для технологий ИИ, вот некоторые из них: 🔤 Запрещается использовать ИИ для распознания эмоций людей на рабочих местах и в школах. 🔤 Полиции запрещается использовать прогнозирование и моделирование опасностей, основанное на ИИ. 🔤 Системы генеративного ИИ (ChatGPT, Gemini, Copilot) обязуются соблюдать законодательство об авторских правах, раскрытия информации об обучении моделей, регулярного тестирования кибербезопасности. 💲 Полностью закон вступит через 12 месяцев, уже существующим системам дадут переходный период в 36 месяцев. За нарушение закона компании оштрафуют на сумму до 35 млн евро или 7% годовой выручки. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
SOLID | Принципы программирования (часть 2) 🖥 O — Принцип открытости/закрытости (Open‐Closed Principle). Этот принцип был вп
SOLID | Принципы программирования (часть 2) 🖥 O — Принцип открытости/закрытости (Open‐Closed Principle). Этот принцип был впервые сформулирован Бернардом Мейером в 1988 году, а Дядя Боб говорил о нем так: «Сущности программы (классы, модули, функции и т.п.) должны быть открыты для расширения, но закрыты для изменений». 📊 То есть, добавление любых доп. функций в код может быть реализовано путем создания новых сущностей, которые расширяют возможности уже существующего кода. Так можно предотвратить частые изменения, а также это гарантирует, что, к примеру, класс определен достаточно, чтобы делать то, что он должен делать. 💥 Представим, что мы снова оказались в школе и наша задача создать код для расчета площадей разных фигур — геометрический калькулятор. Мы можем сделать один класс Shape, который будет отвечать за работу с несколькими фигурами сразу, однако в таком случае, если мы захотим расширить возможности кода, нам придется его менять. 🥸 Лучше сделать класс Shape абстрактным и от него наследовать классы разных фигур, например, класс круга Circle. В таком случае нам не придется менять изначальный класс Shape при расширении возможностей кода, поэтому код останется закрытым для изменений, но все еще открытым для расширения. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
SOLID | Принципы программирования (часть 1) 🖥 SOLID — это 5 основных принципов объектно-ориентированного программирования, к
SOLID | Принципы программирования (часть 1) 🖥 SOLID — это 5 основных принципов объектно-ориентированного программирования, которые смогут сделать код более читаемым и гибким, а также уменьшат риск ошибок. Их предложил Роберт Мартин (также известный как Дядя Боб), и они расшифровываются следующим образом: 🔤 S – Принцип единственной ответственности (Single Responsibility Principle) 🔤 O – Принцип открытости/закрытости (Open‐Closed Principle), 🔤 L – Принцип подстановки Барбары Лисков (Liskov Substitution Principle), 🔤 I – Принцип разделения интерфейсов (Interface Segregation Principle), 🔤 D – Принцип инверсии зависимостей (Dependency Inversion Principle). 🚶‍♀️ Мы пойдем по порядку и сначала разберем принцип единственной ответственности. Принцип говорит, что у каждого класса должна быть только одна «ответственность» и он не должен брать на себя другие обязанности. 🥸 То есть, к примеру, мы реализуем класс заказа Order, методом которого является расчет общей стоимости. Если мы хотим добавить в код сохранение заказа в базу данных, то логичней будет реализовать новый класс, который будет отвечать за работу с БД, а не добавлять сохранение данных в класс Order. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
GPT-5 от OpenAI 🧠 На конференции Microsoft генеральный директор OpenAI Сэм Альтман представил тизер грядущей модели GPT-5. С
GPT-5 от OpenAI 🧠 На конференции Microsoft генеральный директор OpenAI Сэм Альтман представил тизер грядущей модели GPT-5. Согласно его заявлению, новая модель будет в 30 раз мощнее своего предшественника. Она обещает стать революционным прорывом и должна превзойти GPT-4 по всем параметрам. 👀 Кстати теперь Microsoft сотрудничает с OpenAI и некоторые исследователи считают, что шанс побега GPT-5 из-под человеческого контроля — 22%. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
Telegram боты с Python (часть 3) 🐍 Предположим, что мы пишем бота для ресторана, задача которого спросить у юзера блюдо и ег
Telegram боты с Python (часть 3) 🐍 Предположим, что мы пишем бота для ресторана, задача которого спросить у юзера блюдо и его размер. В теории это можно выполнить за одно сообщение, однако такая реализация не всегда будет удобной. В таком случае мы можем представить пошаговый ввод данных, т.е. сначала спрашиваем блюдо, потом его размер. 🙂 Для этого нам поможет FSM (Finite State Machine), где бот будет «включать» режим ожидания определённой информации, т.е. переходить в другое состояние. Для хранения данных между этапами используем самый простой бэкенд MemoryStorage, который хранит все данные в оперативной памяти (список бэкендов ТУТ). 🙂 Самое главное — это описать эти состояния, можно сделать так:
class OrderFood(StatesGroup):
    choosing_food_name = State()
    choosing_food_size = State()
📌 После нажатия определенной команды (в нашем случае /food) бот сначала будет вставать в состояние choosing_food_name, т.е. ждать выбора блюда, а потом он будет входить в состояние choosing_food_size, т.е. ждать выбора размера блюда. Для обработки каждого состояния нужен свой хэндлер. Также помимо обычного сообщения в такой хендлер необходимо прокинуть аргумент состояния (state). ❓ Если вы хотите попробовать свои силы с FSM, то можете реализовать выбор, к примеру, напитков. Документация aiogram ТУТ. 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
🚀🌐 ВАКАНСИЯ: Human Resources (HR) Мы ищем опытного HR, готового внести свой вклад в развитие компании и поиск новых кадров!
🚀🌐 ВАКАНСИЯ: Human Resources (HR) Мы ищем опытного HR, готового внести свой вклад в развитие компании и поиск новых кадров! 🚀 Оклад: от 700$ / месяц 💲 Обязанности и задачи: ➡️ Наём новых сотрудников в компанию. ➡️ Создание кадрового резерва. ➡️ Организация стажировок и адаптация новых кадров. ➡️ Мониторинг и анализ рынка труда. ➡️ Устранение эмоциональных проблем внутри коллектива. ➡️ Контроль за уровнем знаний работников. ➡️ Организация обучения сотрудников. ➡️ Координирование работы по повышению квалификации. ➡️ Составление трудовых договоров и ведение личных дел сотрудников, выявление КПД. ➡️ Проведение кадровых перестановок. ➡️ Подготовка предложений по распределению бюджетных средств на решение вопросов, связанных с отделом кадров. Ключевые навыки: ➡️ Организация командной работы ➡️ Стрессоустойчивость ➡️ Разработка системы премирования и штрафов ➡️ Навыки презентации ➡️ Деловая коммуникация ➡️ Навыки переговоров ➡️ Знание английского от B2 🤖 Контакты @lunasantrope 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram

ITDEAL
1 198
🚀🌐 ВАКАНСИЯ: Project Manager (PM) Обязанности и задачи: ➡️ Ведение документации по проектам команды ➡️ Умение объяснять и д
🚀🌐 ВАКАНСИЯ: Project Manager (PM) Обязанности и задачи: ➡️ Ведение документации по проектам команды ➡️ Умение объяснять и доносить до команды структуру проекта ➡️ Умение создавать блок-схемы для проектов ➡️ Ведение переговоров с клиентами компании ➡️ Ведение JIRA для разработчиков и распределение задач ➡️ Создание недельной отчетности по готовности проектов ➡️ Проведение дэйли-митингов с командой для контроля задач ➡️ Выявление дополнительных функциональных требований ➡️ Грамотное распределение ресурсов команды по проектам ➡️ Слаженная работа в команде ➡️ Ведение графика загруженности разработчиков по проектам Требования к кандидату: ➡️ Понимание IT услуг, инфраструктурных решений, программного обеспечения в B2B, B2G сегменте от 3 лет ➡️ Опыт работы с веб-проектами, понимание современных веб-технологий ➡️ Опыт работы с крупными корпоративными и/или государственными заказчиками (будет плюсом) ➡️ Уверенные коммуникативные навыки, умение работать в команде, ориентация на результат ➡️ Стремление к развитию компании и себя по карьерной лестнице Ключевые навыки: ➡️ Организация командной работы ➡️ Стрессоустойчивость ➡️ Разработка системы премирования и штрафов ➡️ Навыки презентации ➡️ Деловая коммуникация ➡️ Навыки переговоров ➡️ Знание английского от B2 Оклад: от 1000$ / месяц 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service

ITDEAL
1 198
Telegram боты с Python (часть 2) 👀 Как отправлять текстовые сообщения в общих чертах понятно, однако, как обстоят дела с мед
Telegram боты с Python (часть 2) 👀 Как отправлять текстовые сообщения в общих чертах понятно, однако, как обстоят дела с медиафайлами? Если кратко, то главное отличие — это наличие file_id и file_unique_id. Первый используется для повторной отправки, а второй нужен, когда нескольким ботам требуется знать, что их file_id относятся к одному файлу. К примеру, такой хендлер заставит бота моментально ответить гифкой, которая была прислана:

@dp.message()
async def echo_gif(message: Message):
    await message.reply_animation(message.animation.file_id)
✉ В 3-ей версии aiogram есть три класса для отправки файлов: 🔤 FSInputFile — для отправки из системы. 🔤 BufferedInputFile — для отправки из буфера (к примеру, после обработки через Pillow). 🔤 URLInputFile — для отправки по ссылке. 🙂 Если мы хотим послать альбом, то, начиная с версии 3.1, в aiogram есть класс «сборщик альбомов» — MediaGroupBuilder. В Telegram альбомы на самом деле это отдельные сообщения медиа с общим media_group_id. Код ниже создаст альбом из двух фото с общей подписью.

media_group = MediaGroupBuilder(caption="Some text")
media_group.add_photo(media="photo_link_1")
media_group.add(type="photo", media="photo_link_2")
💬Кстати смешивать между собой в одном альбоме можно только видео и фото. Всего с одном альбоме может быть не больше 10 медиафайлов. 🔝 PyBytes Media | ✉Telegram / 📷Instagram / 📈Mentor Service

ITDEAL
1 198
photo content

ITDEAL
1 198

ITDEAL
1 198
Видеосообщение00:40