Ближайшее будущее ИИ
🖥 Недавно в сети появился подробный прогноз ближайшего будущего ИИ. Документ был написан бывшим сотрудником OpenAI — Leopold Aschenbrenner, и его размер составляет 165 страниц.
🧠 Создатель предпологает, что к 2027 году достижение AGI (Artificial General Intelligence) считается вполне возможным. Это вторая ступень ИИ, которая должна успешно выполнять любые интеллектуальные задачи, которые под силу человеку.
💥 Также сотрудник говорит, что на этом прогресс не остановится и будет очень быстро развиваться до уровня ASI (Artificial superintelligence). Этот вид ИИ должен обладать полным самосознанием и быть умнее человека.
‼️ Документ в итоге подчеркивает необходимость срочных мер по защите и контролю над развивающимися технологиями ИИ, чтобы избежать возможных угроз. Почитать можно тут: КЛИК
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from ITDEAL
🚀🌐 ВАКАНСИЯ: Go Developer 🌐🚀
Требования к кандидату:
➡️ Go: Уверенное знание языка, опыт написания и отладки кода.
➡️ Blockchain: Понимание основ (децентрализация, консенсусные алгоритмы, транзакции, смарт-контракты).
➡️ База данных: Опыт работы с SQL и NoSQL.
➡️ Git, IDE, дебаггеры
➡️ Работа в команде: Эффективное взаимодействие, коммуникативные навыки. Готовность обучаться
➡️ Docker
➡️ Solidity
Софт-скилы:
➡️ Коммуникабельность: Способность четко и эффективно общаться в команде.
➡️ Работа в команде: Опыт работы в командной среде, умение слушать и высказывать свое мнение.
➡️ Самостоятельность: Готовность принимать ответственность за свою работу и проявлять инициативу.
🤖 Контакты @lunasantrope
Требования к кандидату:
Софт-скилы:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Валидация данных в Python (часть 1)
🖥 Python — это язык динамической типизации, таким образом, указывать типы данных явно не надо. Это ведет к тому, что одной переменной можно присвоить совершенно другое значение. С версии 3.5 в Python есть аннотации типов, однако — это всего лишь подсказка. При неверном типе переменной код все равно продолжит работу.
🥱 Чтобы решить эту проблему, есть два пути: перейти на другой язык или использовать библиотеку Pydantic — самая популярная библиотека для валидации данных. Она позволяет создавать модели данных и автоматически может проверить, правильный ли тип у переменной.
🔤 Чтобы создать нашу первую модель данных, нужно создать класс, который будет наследоваться от класса
📌 Также такие классы очень похожи на dataclasses, ведь такие методы, как, к примеру, __init__() и __repr__() будут созданы автоматически.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
BaseModel. А дальше просто указать атрибуты и их тип. Pydantic может автоматически понимать аннотации типов Python, если у переменной будет неправильный тип данных — работа прекратится, и будет вызвана ошибка ValidationError.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Валидация данных в Python (часть 2)
🫣 Если у вас довольно запутанный и необычный тип данных, к примеру, в имени должно быть строго два пробела, то в таком случае одним из решений будет создание собственной валидации. Для этого Pydantic предлагает нам несколько декораторов, один из них это
👀 Чтобы проверить одно поле, нужно создать метод и продекорировать его с помощью
📌 Также стоит упомянуть, что это классовые методы, поэтому первое, что они получают — это сам класс, а не его объект. Поэтому документация рекомендует использовать декоратор
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
@field_validator. Он используется для проверки конкретных полей.@field_validator. В качестве аргумента нужно передать имя поля, и можно передать аргумент mode. У mode есть два вида: after и before. Первый говорит, что нужно применить валидатор после основной валидации, а второй говорит, что валидатор идет перед.
@field_validator('age', mode='after')
@classmethod
def validate_age(cls, age):
pass
@classmethod, чтобы обеспечить правильную проверку типа. Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
Валидация данных в Python (часть 3)
😎 Для более подробной и точной настройки полей моделей Pydantic предлагает нам использовать функцию
🙂 Если в поле name ничего не будет передано, то там будет стоять строка «Max». Также, если мы хотим передать вызваемый объект, который будет генерировать данные для значения по умолчанию, то можно воспользоваться аргументом default_factory.
👀 Однако на этих двух аргументах функционал
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Field. Первое, что приходит на ум — значения по умолчанию. С помощью Field это очень легко сделать.
from pydantic import BaseModel, Field
class User(BaseModel):
name: str = Field(default=‘Max‘)
Field только начинается. Field применяется очень часто и является основным компонентом, поэтому для полного понимания я вам настоятельно рекомендую ознакомиться с документацией.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2
Шаблоны проектирования (введение)
🖥 Шаблоны проектирования (design patterns) — это типичные решения часто возникающих проблем. Это не готовые фрагменты кода, а общие концепции, которые вы можете настроить и менять для улучшения читаемости и применяемости вашего кода.
😩 Однако не стоит путать паттерны с алгоритмами. Алгоритм — это четкий набор действий для достижения конкретной цели, а шаблон — это описание решения более высокого уровня. Код одного и того же паттерна в разных программах может быть разным. Все шаблоны можно разделить на 3 основные группы:
🔤 Порождающие шаблоны (creational patterns) — предоставляют механизмы создания объектов, которые повышают гибкость и повторное использование существующего кода.
🔤 Структруные шаблоны (structural patterns) — объясняют, как объеденить объекты и классы в более сложные структуры, при этом сохраняя гибкость этих структур.
🔤 Поведенческие шаблоны (behavioral patterns) — заботятся об эффективном общении и распределении обязанностей между объектами.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Please open Telegram to view this post
VIEW IN TELEGRAM
Шаблоны проектирования (часть 1)
🙂 Паттерн «Одиночка» (Singleton) — это один из порождающих шаблонов проектирования (creational patterns), который используется для создания класса, имеющего только один экземпляр в системе, и предоставляющего глобальную точку доступа к этому экземпляру.
👀 Это означает, что в рамках проекта может существовать только один объект данного класса, и любой запрос на создание нового экземпляра будет возвращать ссылку на уже существующий. Такой паттерн может быть полезен, к примеру, при работе с базой данных, когда вам нужно обеспечить только одно соеденение во всем коде.
😭 Такой паттерн может улучшить производительность кода, однако не стоит использовать его часто. «Одиночка» может вызвать проблемы с тестированием и требует особого внимания в многопоточной среде. Также такой паттерн нарушает принцип единой ответственности (SRP).
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Шаблоны проектирования (часть 2)
😎 Паттерн «Цепочка обязанностей» (Chain of Responsibility) — это поведенческий шаблон проектирования (behavioral pattern), который передает запросы последовательно по цепочке обработчиков — классов. Каждый обработчик решает, может ли он обработать запрос после чего передает запрос дальше по цепочке.
☺️ Представьте, что вам нужно обработать HTTP-запрос, где вы должны выполнить аутентификацию пользователя, выдать соответствующие права и выполнить валидацию данных. Чтобы код выглядел более понятно и структуризировано, каждый этап можно отделить в отдельный класс-обработчик, после чего создать цепочку.
👀 Класс-обработчик должен уметь обрабатывать запрос и желателно должен обладать методом для установки следующего звена для удобного создания цепочки. «Цепочка обязанностей» соответствует принципам OCP и SRP, что делает код более гибким для изменений. Однако паттерн делает отладку сложнее и не гарантирует, что каждый запрос будет обработан.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Typing | Модуль аннотации (часть 1)
🙂 Разбирая валидацию данных с Pydantic, я упомянул аннотации типов. Они позволяют указать желаемый тип переменной в помощь разработчикам и IDE. Однако в Python для этого есть целый встроенный модуль typing, который очень хорошо работает вместе с Pydantic.
👀 Этот модуль позволяет расширить наши аннотации, с помощью него можно создавать пользовательские типы данных, использовать специальные типы и много другое. Однако я еще раз напоминаю, что в самом Python это никак не влияет на исполнение кода, это всего лишь подсказка.
🔤 Первое, что можно сделать вместе с typing, это указакать желаемые типы данных, к примеру, в словаре.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Dict[str, int] — такая конструкция говорит, что ключи в словаре должны быть строкой, а значения числом.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Валидация данных в Python (часть 4)
🙂 Сериализация (serialization) — процесс преобразования объектов в удобный для хранения и передачи формат. В Pydantic, конечно же, для этого все предусмотрено. Основные методы для конвератции модели и ее полей это
👀 Оба метода очень похожи, однако первый просто конвертирует модель и подмодели в обычный словарь, а второй возвращает строку в формате JSON. Также у методов есть немало полезных аргументов, к примеру, с помощью include и exclude можно указать какие поля стоит оставить или исключить.
🔤 Если нам недостаточно обычной конвертации, то мы можем создать собственную сериализацию. Для этого есть два декоратора:
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
model_dump() и model_dump_json(). @field_serializer и @model_serializer. Первый используется, чтобы настроить сериализацию конкретных полей, а второй — всей модели. Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Typing | Модуль аннотации (часть 2)
🚶♀️ Сегодня мы разберем довольно полезные функции встроенного модуля typing:
🔤
🔤
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
TypeVar и Annotated. На работу чистого Python кода функции никак не влияют, однако, к примеру, Pydantic умеет с этим работать и распознавать новые типы. TypeVar — это класс, который используется для создания обобщённых типов (generics) в функциях и классах. Он позволяет создавать шаблоны, которые могут работать с различными типами данных. Также одним из полезных параметров ялявется bound, который может ограничить типы, которые могут быть присвоены обобщённому типу.Annotated — это специальная функция, которая используется для добавления метаданных к аннотациям типов. Если типы, созданные с помощью TypeVar, обычно распознаются IDE, то метаданные созданы для внешних библиотек и инструментов. Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Валидация данных в Python (заключительная часть)
🥱 И наконец нельзя не рассказать про допольнительный модуль Pydantic — Pydantic Settings. Этот модуль позволяет загружать настройки или классы конфигурации из переменных среды или секретных файлов. Модуль очень мощный и широко применяется популярными библиотеками, к примеру, FastAPI.
🔤 Чтобы его установить, нужно воспользоватся следующей командой:
👀 Это может быть полезно для сохранения конфиденциальности и в принципе это упрощает работу с окружением. Также с помощью
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
pip install pydantic-settings. Потом нужно создать новую модель, но этот раз она должа наследоваться от BaseSettings. Функционал такой же как и у BaseModel, однако инициализатор попытается прочитать все поля, которые не были переданы в качестве аргументов из переменных среды.SettingsConfigDict можно устанавливать некоторые настройки, к примеру, указать, что переменные должны быть считаны из специального .env файла.Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Шаблоны проектирования (часть 3)
🥱 Шаблон «Стратегия» (Strategy) — поведенческий паттерн (behavioral pattern), который предлагает определить семейство алгоритмов, поместить каждый в отдельный класс и сделать их объекты взаимозаменяемыми.
👀 Представим, что в коде есть всего один класс, отвечающий за навигацию. Каждый раз, когда вы хотите добавить новый вид построения маршрута, (автомобильный, пешеходный и т.д.), вам приходится этот класс изменять, что не очень удобно и может испортить уже работающий код.
😎 «Стратегия» предлагает выделить все алгоритмы маршрутов в отдельные классы — стратегии, а в изначальном классе навигации — контексте, создать поле для хранения ссылки на один из алгоритмов. Контекст не выбирает алгоритм, он просто делегирует работу связанному объекту стратегии.
📌 Этот паттерн используется довольно часто, он соблюдает принцип OCP и значительно повышает гибкость кода. Однако, если у вас немного алгоритмов, использовать паттерн смысла нет — он просто раздует код, к тому же многие языки программирования позволяют сделать все тоже самое без дополнительных классов.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Углубляемся в ООП (часть 1)
🙂 Все знают про четыре столпа ООП: инкапсуляция, наследование, полиморфизм и абстракция. Понимание и правильное применение этих принципов поможет сделать код куда лучше. Однако на этом концепции не заканчиваются, еще одной важной концепцией является ассоциация.
👀 Ассоциация — это слабый тип отношений между классами, который устанавливается через их объекты. Каждый объект независим, и между собой эти объекты могут взамодействовать. Просто представьте отношения между учеником и учителем.
📌 Также бывает три вида ассоциации:
🔤 one-to-one — каждому объекту одного класс соответствует один объект другого.
🔤 one-to-many — один объект одного класса может быть связан с несколькими объектами другого.
🔤 many-to-many — несколько объектов одного класса могут быть связаны с несколькими объектами другого класса.
🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3