Master Lid
Master Lid
  • 21
  • 100 810
Жестокое Ай-Ти ✿ Как выбрать фреймворк для разработки и не пожалеть
В ролике в лёгкой развлекательной форме рассказывается о трудностях выбора подходящего фрейморка для фронтенд-разработки. Разобраны основные критерии, которыми следует руководствоваться при сравнении различных программных продуктов. Также наглядно показаны трудности, с которыми могут столкнуться разработчики в случае, если выбор был сделан неправильно.
=== КОПИРАЙТЫ ===
МУЗЫКА
Free Music Archive
freemusicarchive.org/
Looperman
www.looperman.com/
P C III - 「Reach Out Return (to Me)」
freemusicarchive.org/music/P_C_III/Ad_Astra_Vol_3/06_Reach_Out_Return_to_Me/
Лицензия на использование CC BY
creativecommons.org/licenses/by/3.0/
Власть Машин 【Suno】 - 「Ты стал жертвой Ай-Ти!」
Лицензия на использование CC BY
creativecommons.org/licenses/by/3.0/
ЗВУКОВЫЕ ЭФФЕКТЫ
www.zapsplat.com
#vue #solidjs #фронтенд #фреймворк #стартап #тимлид
มุมมอง: 189

วีดีโอ

Женя-чан рефлексирует ✿ Liquibase
มุมมอง 1.1Kปีที่แล้ว
В ролике в доступной форме рассказывается, что такое миграции в современном проекте, и каким образом они могут облегчить жизнь разработчикам (приведены примеры). Также делается краткий обзор программного продукта Liquibase, с помощью которого можно управлять миграциями, называемыми здесь чейндж-логами. Наглядно показано, как настроить Spring Boot на работу в связке с Liquibase, и как создавать ...
ФРОНТЕНД vs БЭКЕНД ★ В чём разница?
มุมมอง 7922 ปีที่แล้ว
Обзорный ролик по фронтенду и бэкенду в веб-разработке. Рассказываю о парадигме клиент-серверной архитектуры, об истории развития браузерных решений (JavaScript, jQuery, AJAX), о сайтах-одностраничниках и фреймворках для их разработки, а так же о языках программирования, ориентированных на фронтенд и бэкенд. КРАТКОЕ СОДЕРЖАНИЕ 0:00 Вступление 0:30 Клиент-серверная архитектура 1:05 JavaScript, J...
Изучаем Spring Boot, Часть #3 ★ Контроллеры и авторизация
มุมมอง 1.9K2 ปีที่แล้ว
Третья серия обучающих видео про Spring Boot. Разбираемся с архитектурой гибридного веб-приложения, контроллеры которого могут обрабатывать как обычные, так и REST-запросы. Учимся настраивать менеджер аутентификации Spring Boot: рассматриваем класс настроек, сервис поиска пользователя по заданному имени и контроллер авторизации. КРАТКОЕ СОДЕРЖАНИЕ 0:00 Вступление 0:42 Просмотр готового приложен...
Everything you have to know about single page websites (SPA)
มุมมอง 3.7K2 ปีที่แล้ว
Полная информация об одностраничных сайтах: что это такое, какие фронтенд фреймворки используются для их создания, какие у них преимущества и недостатки. Приведены примеры удачного и неудачного использования SPA. Также рассказывается о типичных ошибках, часто возникающих при разработке Single Page Application. КРАТКОЕ СОДЕРЖАНИЕ 0:00 Вступление 0:34 Общая информация об одностраничных сайтах 1:3...
Изучаем Spring Boot, Часть #2 ★ Шаблонизаторы и шаблоны
มุมมอง 3K2 ปีที่แล้ว
Вторая серия обучающих видео про Spring Boot. Разбираем, какие шаблонизаторы идут в комплекте с фреймворком, какие у них преимущества и недостатки. Рисуем схему страниц сайта и переходов. Рекомендации по выбору оптимальной модели размещения шаблонов и фрагментов. Пишем заготовки контроллеров. Разбивка статических HTML-страниц на готовые шаблоны Thymeleaf. КРАТКОЕ СОДЕРЖАНИЕ 0:00 Вступление 0:30...
Холиварим на тему "ООП vs ФП" ★ Комментирую комменты
มุมมอง 1.1K3 ปีที่แล้ว
Аргументированное объяснение, почему объектно-ориентированное программирование более интересно в бизнес-задачах, чем функциональное. Краткий экскурс в историю веб-разработки. PHP как ООП-инструмент и средство для говнокодинга. Перспективы Питона. Небольшое сравнение фронтенд-фреймворков: Ангуляр vs Реакт. Размышления над потоком сознания функциональщика. КРАТКОЕ СОДЕРЖАНИЕ 0:00 Вступление 1:00 ...
Изучаем Spring Boot, Часть #1 ★ База данных и сущности
มุมมอง 4.9K3 ปีที่แล้ว
Первая серия обучающих видео про Spring Boot. Проектируем архитектуру веб-приложения. Создаём сущности и настраиваем привязку к базе данных. Работаем с MySQL, выполняем автоматическое создание таблиц и добавление данных. Пишем юнит-тесты для проверки работоспособности кода. Так же краткий обзор Spring Boot и его ключевых особенностей. КРАТКОЕ СОДЕРЖАНИЕ 0:00 Вступление 0:44 Система управления п...
Maven, Gradle и сборка проекта ★ Делаем build по-взрослому
มุมมอง 4.8K3 ปีที่แล้ว
Учимся собирать проект вручную в Maven и Gradle, без использования IDE. Для примера взят простейший микросервис логгирования, реализованный в виде Java-сервлета. В ролике подробно разбираются преимущества ручной сборки, а также объясняются главные принципы настройки и конфигурации. КРАТКОЕ СОДЕРЖАНИЕ 0:00 Вступление 0:40 Теоретические основы сборки 4:21 Для чего нужна ручная сборка 5:40 Отдых т...
Микросервисы на Spring Boot ★ Годнота или зло?
มุมมอง 1.8K3 ปีที่แล้ว
Узнаем, насколько оправданным является создание микросервисов на Spring Boot. Чем интересно такое решение, какие у него плюсы и минусы. Посмотрим статистику по производительности у Spring, как фреймворка и в плане взаимодействия с базой данных. А так же небольшой экскурс в архитектуру микросервисных продуктов. КРАТКОЕ СОДЕРЖАНИЕ 0:00 Вступление 0:30 Spring Boot как корпоративный стандарт 0:54 Ч...
IT-удалёнка от A до Z, Часть #2 ★ Трудоустройство
มุมมอง 7373 ปีที่แล้ว
Вторая часть двухсерийки про удалённую работу в IT-индустрии. Рассказываю, на что обратить внимание, и какие вопросы задавать на собеседовании, прежде чем принимать оффер. Что нужно знать при оформлении трудоустройства через ИП: система налогообложения, налоговая отчётность, выбор банка для ведения счёта ИП, как оформлять платежи от зарубежных работодателей. Беглый обзор релокации за границу. К...
IT-удалёнка от A до Z, Часть #1 ★ Поиск вариантов
มุมมอง 9823 ปีที่แล้ว
Первая часть двухсерийки про удалённую работу в IT-индустрии. Рассказываю, на какие варианты трудоустройства ориентироваться, как минимизировать возможные риски. Составляем качественное резюме IT-удалёнщика и размещаем его на соответствующих ресурсах. Как проходить собеседование, на что обращать внимание в первую очередь. Многие вопросы на техническом интервью повторяются - пользуемся этим. КРА...
REST-API на Java, #5 ★ Документация на Swagger и Redoc
มุมมอง 8K3 ปีที่แล้ว
Пятый ролик из серии обучающих видео про REST-API на Java. Составление документации к API с помощью плагина OpenAPI и добавление к коду специальных аннотаций, описывающих параметры роутов. Далее сгенерированная документация отображается в браузере в форматах Swagger и Redoc. КРАТКОЕ СОДЕРЖАНИЕ 0:00 Вступление 0:34 Зачем нужна документация к REST-API 1:24 Что такое OpenAPI 2:10 Подключаем плагин...
REST-API на Java, #4 ★ Тесты на JUnit и запуск из Jenkins
มุมมอง 3.6K3 ปีที่แล้ว
Четвертый ролик из серии обучающих видео про REST-API на Java. В первой части я пишу автоматизированные тесты с использованием библиотеки JUnit, повторяющие ручное тестирование с помощью Postman из предыдущих роликов. Во второй части я показываю, как использовать программу Jenkins для запуска написанных тестов по расписанию, при этом исходный код проекта забирается из репозитория на GitHub. КРА...
Timestamp, эпоха UNIX и часовые пояса ★ Работаем с датой
มุมมอง 1.4K3 ปีที่แล้ว
Программисту о Timestamp: когда началась эпоха Unix и как не запутаться в часовых поясах. Также в этом ролике рассказываю о многом другом, связанным с датой и временем с точки зрения разработки программного обеспечения. Вы узнаете, каким образом хранится информация об отметках времени в популярных базах данных, какие существуют средства для работы с Timestamp в различных языках программирования...
Что такое ООП? Часть #2 ★ Сравниваем ООП и ФП
มุมมอง 4.5K3 ปีที่แล้ว
Что такое ООП? Часть #2 ★ Сравниваем ООП и ФП
Что такое ООП? Часть #1 ★ Подробно об основных принципах
มุมมอง 7K3 ปีที่แล้ว
Что такое ООП? Часть #1 ★ Подробно об основных принципах
REST-API на Java, #3 ★ Библиотека Jooq для работы с БД
มุมมอง 2.4K3 ปีที่แล้ว
REST-API на Java, #3 ★ Библиотека Jooq для работы с БД
REST-API на Java, #2 ★ Фреймворк Jooby и база данных H2
มุมมอง 1.1K4 ปีที่แล้ว
REST-API на Java, #2 ★ Фреймворк Jooby и база данных H2
REST-API на Java, #1 ★ Фреймворк Spark для разработки
มุมมอง 5K4 ปีที่แล้ว
REST-API на Java, #1 ★ Фреймворк Spark для разработки
REST-Архитектура ★ Ключевые моменты разработки REST-API
มุมมอง 43K4 ปีที่แล้ว
REST-Архитектура ★ Ключевые моменты разработки REST-API

ความคิดเห็น

  • @АнатолийПетрович-в8и
    @АнатолийПетрович-в8и 3 หลายเดือนก่อน

    14:35 - никто не заставляет вводить глобальные переменные. Ты сам ее ввел, и сам ругаешься. Все то-же самое можно было описать чистыми функциями.

  • @АнатолийПетрович-в8и
    @АнатолийПетрович-в8и 3 หลายเดือนก่อน

    14:20 - кибернетику никто не пытается подменять математикой. их стараются разнести на разные слои абстракций с четким направлением зависимостей между ними. И это огромный плюс. Даже те кто не знаем про монады, может написать гораздо более простой, поддерживаемый и тестируемый код в ФП стиле, чем в ООП

  • @АнатолийПетрович-в8и
    @АнатолийПетрович-в8и 3 หลายเดือนก่อน

    13:10 - тебе никто не мешал цвет автомобиля в ФП варианте описать с помошью HEX или union-типа, или даже хотябы абстрактной строки

  • @АнатолийПетрович-в8и
    @АнатолийПетрович-в8и 3 หลายเดือนก่อน

    12:40 - у тебя и в ФП варианте и в ООП варианте приложение одинаковой степени "масштабируемости". И там и там не описаны абстракции,вместо них TODO комментарии. И там и там если описать абстракции получится одинаково простые для масштабирования приложения, но ООП код вырастет еще сильнее, чем ФП код

  • @АнатолийПетрович-в8и
    @АнатолийПетрович-в8и 3 หลายเดือนก่อน

    8:43 - и конечный автомат и машина тьюринга очень легко описываются на ФП. Во многом именно из-за этого Функциональщики на этих языках работать и любят

  • @jameskim4274
    @jameskim4274 3 หลายเดือนก่อน

    По рекламе ооп: ооп поднялось сперва благодаря хайпонувшему C with classes (далее С++), позднее на массовой рекламе Java, и db-oriented подхода на заре века. Это позволило захватить нишу ращработки для enterprise

    • @MasterLid
      @MasterLid 3 หลายเดือนก่อน

      И? В энерпрайз идёт только то, что реально полезно, что позволяет сэкономить ресурсы (человекочасы в данном случае). И ООП отлично с этой задачей справляется. Вот уже 50 лет как. А всякая модная .уита (как например когда-то очень хайповый язык Elixir, да и Ruby в ту же копилку) вначале выстреливает, а потом благополучно забывается. Бизнес использует только то, что реально полезно и приносит деньги. Если ФП никаких таких значимых ниш до сих пор не захватил, особенно в России, где обожают использовать только всё самое модное и современное в айти, то это говорит лишь о том, что функциональная парадигма -- раздутая хайповая пустышка и не более того.

    • @jameskim4274
      @jameskim4274 2 หลายเดือนก่อน

      @@MasterLid на ФП пишется банковский софт, инвест платформы, компиляторы. Тейк про 50 лет довольно забавен, потому что такой срок жизни разве что smallTalk' у можно приписать. И главным игроком на Энтерпрайз рынке он к тому моменту точно не был. Рынок на тот момент делили, помимо него, Fortran, lisp1 (преимущественно малый бизнес и science), algol и его величество COBOL. Последний является офигительной иллюстрацией того, как Энтерпрайз выбирает только то, что реально полезно (а потом весело и долго пытается выпилить, то, что навыбирал)

    • @jameskim4274
      @jameskim4274 2 หลายเดือนก่อน

      ​@@MasterLid понял, бизнес использует не расхайпленную хуйню а только то, что полезно и позволяет сэкономить человекочасы. Например COBOL. ФП языки расхайпленная хуита и ни где себе ниши не нашли: ни в банковском софте, ни в разработке компиляторов, ни block chain контрактах...

    • @MasterLid
      @MasterLid 2 หลายเดือนก่อน

      Ну, факт-то остаётся фактом: у ООП коммьюнити намного больше, чем у ФП. Причём у ООП коммьюнити абсолютно адекватное и позитивно настроенное. Чего не скажешь о секте поклонников ФП. 😁 Всех вам благ!

    • @jameskim4274
      @jameskim4274 2 หลายเดือนก่อน

      @@MasterLid приведите пример одного ФП сообщества, недостаточно позитивно к Вам настроенного

  • @jameskim4274
    @jameskim4274 3 หลายเดือนก่อน

    Объектно-ориентированный php ранних версий.. Ухахахахухуху

    • @MasterLid
      @MasterLid 3 หลายเดือนก่อน

      Даже то, что было предложено в ООП на PHP ранних версий гораздо лучше и логичнее, чем сборная солянка, которую предложил Одерски в Scala. Кстати, где она? 😁 Та же история: хайпанули, поговорили и забыли.

    • @jameskim4274
      @jameskim4274 2 หลายเดือนก่อน

      @@MasterLid так никто скалу более объектно-ориентированной чем php не называл. С ветрянными мельницами боретесь батюшка..

  • @Andrushenka83
    @Andrushenka83 3 หลายเดือนก่อน

    Хорошо рассказываете. Хо ель бы увидеть уроки по Node Js, express, ,методы и т.п.

  • @Алекс-х1ж
    @Алекс-х1ж 3 หลายเดือนก่อน

    аниме хентай

    • @MasterLid
      @MasterLid 3 หลายเดือนก่อน

      Абсолютно верно замечено! 😁

    • @Алекс-х1ж
      @Алекс-х1ж 3 หลายเดือนก่อน

      @@MasterLid Доброе время суток. Знаете Мастер, меня мучают смутные сомнения, а не имеет ли весьма поучительный ролик настоящего названия, второго?

    • @MasterLid
      @MasterLid 3 หลายเดือนก่อน

      Не очень понял. Какого настоящего названия? Можете пояснить свою мысль?

    • @Алекс-х1ж
      @Алекс-х1ж 3 หลายเดือนก่อน

      @@MasterLid Видимо ошибся. На мой взгляд, по сюжету, фреймворк был правильно выбран, а вот заказчик, нет.

    • @MasterLid
      @MasterLid 3 หลายเดือนก่อน

      Ну в этом как бы и состоит ирония ситуации: фреймворк может быть выбран правильно, но если заказчик идиот, то это не поможет. 😉

  • @burakku9038
    @burakku9038 4 หลายเดือนก่อน

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

    • @MasterLid
      @MasterLid 4 หลายเดือนก่อน

      Спасибо за положительную оценку! Ваше пожелание насчёт громких переходов обязательно учту.

  • @andrewcool482
    @andrewcool482 4 หลายเดือนก่อน

    ненавижу фреимворки!

    • @MasterLid
      @MasterLid 4 หลายเดือนก่อน

      Можно подробности? Всегда пишете только на ванильном JS? Ну или что там у вас? : )

    • @andrewcool482
      @andrewcool482 4 หลายเดือนก่อน

      @@MasterLid да, ванильный, но с ростом проджекта приходится все больше и больше писать. Фреймворк поди сокращает эту работу.... Эх, придется юзать чтоле...

    • @MasterLid
      @MasterLid 4 หลายเดือนก่อน

      У меня отношение к фреймворкам (и к npm-пакетам, и к подключаемым библиотекам и т.д.) следующее: зачем самостоятельно писать код, который уже кто-то написал за вас? Причём этот готовый код наверняка многократно проверялся и тестировался другими программистами, и работать он будет однозначно лучше, чем самописный велосипед. Так что напрасно вы так! : )

    • @andrewcool482
      @andrewcool482 4 หลายเดือนก่อน

      @@MasterLid согласен. В принципе библиотеки уважаю, но к фреймворкам с осторожностью ввиду их оптимизации.

    • @Алекс-х1ж
      @Алекс-х1ж 2 หลายเดือนก่อน

      @@MasterLid Доброе время суток! Знаете у меня вопрос следующего порядка. А как же тогда литература, скажем: - Брюс Эккель - Философия Java? В ней нет рассуждений на тему какой framework одинаково полезен, в ней рассказывается о основах JAVA. Как совместить чтение литературы, и когда приступать к изучению framework?

  • @andrewcool482
    @andrewcool482 4 หลายเดือนก่อน

    Мастер, с возврашением!

  • @иринасырнева
    @иринасырнева 4 หลายเดือนก่อน

    Ахах, и описание к видео огонь))

  • @котан-у6г
    @котан-у6г 4 หลายเดือนก่อน

    Жиза

  • @divergenny
    @divergenny 4 หลายเดือนก่อน

    Урааааа,вы вернулись, спасибо большое за Ваш труд 😊

  • @JohnGoldermann-o8e
    @JohnGoldermann-o8e 5 หลายเดือนก่อน

    Отличное объяснение! Без воды и исчерпывающее. Используется ли метод PATCH в рест апи?

    • @MasterLid
      @MasterLid 5 หลายเดือนก่อน

      Спасибо за оценку! Как я и говорил, REST API -- это не стандарт, а набор рекомендаций. Если хотите использовать метод PATCH и знаете, как его можно применить, чтобы ваше апи засияло новыми красками, то используйте. : )

  • @ЯнРаишев-ж6г
    @ЯнРаишев-ж6г 5 หลายเดือนก่อน

    Инфа очень важная и нужная, но очень тяжело смотреть - ооооооооооочень большие звуковые паузы между фразами. Успеваешь забыть что было сказано ранее. Зрителю удобнее ставить на паузу и вчитываться в код, чем проматывать на фиксированные ютубом несколько секунд и гадать не пропустил что-то важное или нет. Я обратил внимание, что это болезнь всех русскоязычных туториалов на тему ИТ. Тем не менее спасибо за старания.

  • @zeOnni
    @zeOnni 8 หลายเดือนก่อน

    Три главных слова ООП и правда не требуют ни классов ни даже объектов // инкапсуляиция const Counter = () => { // n инкапсулировано let n = 0 return () => n++ } const c = Counter() console.log(c(), c(), c()) // 1 2 3 // полиморфизм const Sum = (a, b) => a + b const Mult = (a, b) => a * b const ops = [Sum, Mult] // интерфейс один, аргументы одни и те же, а поведение разное console.log(...ops.map(f => f(2, 3))) // 5 6 // наследование const Super = (b, f) => () => f(b) const Foo = () => console.log("foo") const SuperFoo = Super(Foo, (base) => { base() console.log("bar") }) SuperFoo() // foo // bar

    • @LetroScript
      @LetroScript 7 หลายเดือนก่อน

      Даже для меня выглядит кашей, лучше реально переключиться на ООП чем на ФП

    • @zeOnni
      @zeOnni 7 หลายเดือนก่อน

      @@LetroScript это не пример ФП. Это опровержение того, что классы и ооп имеют какую-то монополию на полиморфизм, инкапсуляцию и наследование.

  • @Алекс-х1ж
    @Алекс-х1ж 8 หลายเดือนก่อน

    Спасибо

    • @MasterLid
      @MasterLid 8 หลายเดือนก่อน

      Не за что. Ролик снимался до СВО, и многое в нём уже совсем не актуально.

  • @Алекс-х1ж
    @Алекс-х1ж 8 หลายเดือนก่อน

    Доброе время суток. Спасибо за ролик. Укажите плиз, где Вы ведете документирование API? Какой софт используете в проекте?

    • @MasterLid
      @MasterLid 8 หลายเดือนก่อน

      Добрый день. Я кратко упоминал софт для создания документации к REST-апи в этом же видео: Swagger. По нему и по Redoc (другой софт для того же) у меня есть отдельный ролик: th-cam.com/video/LorZ-_tElG8/w-d-xo.html

  • @Алекс-х1ж
    @Алекс-х1ж 8 หลายเดือนก่อน

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

    • @MasterLid
      @MasterLid 8 หลายเดือนก่อน

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

  • @AleksandrBagrintsev
    @AleksandrBagrintsev 8 หลายเดือนก่อน

    На мой взгляд в видео не совсем корректное сравнение реакта и ангуляра. Ангуляр это фреймворк, который предоставляет уже готовые решения, а реакт - библиотека, в которой у разработчика больше свободы в выборе архитектурных подходов и либ(хотя бОльшая часть приложений это cвязка React + Redux). Этим и обусловлена необходимость тратить больше времени на разработку каких-то фич. Плюс разработчик знающий реакт может без особых проблем писать мобильные приложения на нейтиве. Из-за такой гибкости и зп у реакт разрабов выше

    • @MasterLid
      @MasterLid 8 หลายเดือนก่อน

      Какие готовые решения предоставляет ангуляр? Встроенный роутер? Ngrx? Не спорю, ангуляр гораздо более богатый возможностями фреймворк, чем реакт. Но суть не в этом. Ангуляр -- типично ООП-ориентированный фреймворк (контроллер -- это класс, сервис -- это класс, директива -- это класс и т.д.), в нём очень широко применяются наследование, инкапсуляция, интерфейсы и тому подобное. Реакт -- абсолютно функциональный фреймворк (хотя раньше там можно было использовать парадигму, что контроллер -- это класс, но потом от неё отказались, и теперь всё на функциях). Поэтому в видео я и использовал эти два фреймворка, чтобы было нагляднее. Про з/п у программистов реакта -- тут-то всё понятно. Ковыряться и создавать спагетти-код, который получается на реакте (т.е. JSX/TSX), то ещё удовольствие. Конечно, работа с этим г0вн0м должна оплачиваться выше, иначе желающих будет не так чтобы сильно много.

    • @AleksandrBagrintsev
      @AleksandrBagrintsev 8 หลายเดือนก่อน

      Реакт отвечает только за рендеринг. Он не нуждается в роутере, стейт менеджере и т.п. из коробки, так как он просто либа. Уже потом, на его основе, делаются фреймворки типа некста и нейтива, которые предоставляют свои решения. Оба эти фреймворка норм, но реакт более гибкий, а ангуляр более надёжный(хотя всё зависит от того, кто пишет код). Что касается функциональщины в реакте, то причина достаточно проста, а именно перфоманс у функциональных компонентов выше чем у классов. Менее трудозатратно просто вызвать функцию, чем наследоваться от класса. Хотя есть жизненные методы в реакте, которые доступны только в классовых компонентах. Спагетти код в jsx это как? Не думаю что за работу с реактом доплачивают

    • @MasterLid
      @MasterLid 8 หลายเดือนก่อน

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

  • @_AbUser
    @_AbUser 8 หลายเดือนก่อน

    Короче в переводе на человеческие язык, по ходу ФП - Функция, это способ группировки команд, для их повторного вызова, а ООП - это способ группировки Функций, для их последующего вызова, как всегда накидав вагон ненужной встрат*й терминологии - метод, это сама функция. А объект - Это функция, которая объединяет другие функции\методы. Теперь что бы избежать случайного повторения названий функция, перед ней как ее адрес еще указывают класс, или экземпляр, от кда ее вызывают, что бы с другой не перепутать.

    • @MasterLid
      @MasterLid 8 หลายเดือนก่อน

      Это слишком упрощённо сказано. ООП, помимо группировки функций в объекты, предоставляет ещё инкапсуляцию (упрятывание) и наследование. Так что просто к группировке тут всё не сводится. : )

    • @_AbUser
      @_AbUser 8 หลายเดือนก่อน

      @@MasterLid Не уверен, по скольку я только начал, но про наследование не то, что бы его вообще был бы смысл отдельно упоминать... мы в принципе же можем, в ходе задания какой ть функции использовать еще и ранее заданную функцию, что как бы и является аналогом наследования, и не получается ли "те же яйца, только в профиль"? Только в ООП ему почему то привесили отдельный ярлык, что бы по больше слов использовать.. Ну а переменные - это отдельно да..., в теории программа представляет собой сборную из модулей, от разным программеров, это получается что то типа "защиты от дурака" если они вдруг свои переменные одинаково назвали... Тогда получается Геральд и Ривия.Геральд и это два разных Герольда.. ))) Но и в принципе это все, просто один дополнительный индефикатор разделить функции и переменные, что бы не сливались в одно и то же.. Не? Что то типа адреса..

    • @АнатолийПетрович-в8и
      @АнатолийПетрович-в8и 3 หลายเดือนก่อน

      Есть нюансы. 1. В ФП функция получает какие-то данные на вход и всегда возвращает новые данные на выход (уже существующие данные никогда не изменяются). В ООП методы могут изменять уже существующие объекты и структуры. 2. В ФП данные отдельно, функции отдельно. В ООП данные и логика их изменения объеденены в объекты. Ключевым для объекта является именно опубликованное поведение. 3. Ключевые различия начинаются, когда требуется реализовать инверсию зависимостей для несвязанных модулей. В ООП мы используем референсные ссылки и интерфейсы. Сценарий бцдет описан как транзакционный скрипт. В ФП мы либо используем композицию двух модулей в третьем, который знает о них обоих - это самый простой вариант. Либо сложный вариант: импользуем Монады. Монады нужны чтобы писать сценарии с четкой последовательностью шагов, возможностью сбоя на каждом шаге и возможно еще какой-то скрытой логикой логикой, но в Функциональном стиле (т.е. по сути сценарий на языке формул). Благо в этом примере ни первое ни второе не потребовалось

    • @_AbUser
      @_AbUser 3 หลายเดือนก่อน

      @@АнатолийПетрович-в8и Это все не правильно... Функция как и ООП - это всего лишь правило, предназначенное для замены нескольких действий одним, или нескольких переменных - одной.Как формулируется правило? - желательно одной строчкой , чтобы исключить возможность двоякого интерпретирования... Если что то требует вагон текста для формулирование и вагон абстрактных терминов, понятных только двум людям: тому кто про них рассказывает и его психиатору, то это заблуждение, или секта. Не имеет права относиться ни к науке ни к логике, только к какому ть подвальному аккультизму... Процесс ради процесса... Молимся от сюда и до обеда, а потом жертвоприношение...

    • @АнатолийПетрович-в8и
      @АнатолийПетрович-в8и 3 หลายเดือนก่อน

      @@_AbUser Уточните, пожалуйста, что именно неправильно?

  • @muhammadumarsotvoldiev8768
    @muhammadumarsotvoldiev8768 9 หลายเดือนก่อน

    Спасибо большое

  • @pavelyankouski4913
    @pavelyankouski4913 10 หลายเดือนก่อน

    Возможно через год, два вернусь к этой теме, когда буду собирать свой движок

  • @0xsadcat92
    @0xsadcat92 10 หลายเดือนก่อน

    В команте на счет SOLID считаем его как следствие. Если архитектура нарушает его - она плохая, но если соответствует - то не факт

  • @iGynLoD
    @iGynLoD 10 หลายเดือนก่อน

    Я не проф. разраб. Идею ООП знал еще 20 лет назад, но не погружался. Тут недавно окунулся, поднял несколько достаточно больших (для одного новичка) проектов на C#. По мере погружения в ООП, первоначальное очарование идеи - чуть ли не прямой трансляции объектов реального мира в архитектуру кода, сменялось недоумением от бесконечно нарастающей сложности конструкций и концепций. Паттерны, типа сиглтона. Нет ну серьезно, надо городить что-то ради единственности порождения? В голове начинает крутиться один вопрос - неужели по-другому никак нельзя? Все это выглядит, как бесконечные костыли, к неправильно поставленной и решаемой задаче. ФП сложнее, и в голову заходит тяжелее. Но идея иммутабельности выглядит концептуально верной, по сравнению с императивной парадигмой, основанной не бесчисленном количество переменных. Лично мне кажется, в ФП - это парадигма будущего, и в итоге к ней и придут. В общем, перехожу на F#, который, кстати, по сути обертка над C#. Учу и удивляюсь, "а что, так можно было?"

    • @MasterLid
      @MasterLid 10 หลายเดือนก่อน

      Смысл ООП не в том, чтобы использовать все существующие паттерны, а в том, чтобы использовать только то, что нужно. Т.е. если в вашем приложении не нужен синглтон, то вы его не используете. Далее, всё зависит от уровня абстракции. Например, абстракцию двигателя внутреннего сгорания можно описать в виде всего 4 тактов: впуск-сжатие-раб.ход-выпуск, а можно расписать всё до цилиндров, поршней и вплоть до винтиков. Естественно, второй вариант сложнее. Всё зависит от вашей задачи, если ДВС в виде четырех тактов ей достаточен, то совершенно не обязательно углубляться в подробности. Ну и по F#. Ради интереса, посмотрите на хаха.ру вакансии по этому языку. Уверен, что их не так много. Во всяком случае, намного меньше, чем вакансий на C#.

    • @iGynLoD
      @iGynLoD 10 หลายเดือนก่อน

      @@MasterLid Я не про использование паттернов везде. Например, вы решаете задачку по математике 7 класса - и получаете уравнение, решать которое надо через поиск экстремумов, пределы, производные - это вам сразу должно подсказать, что подход к решению выбран неправильный (если ошибку исключаем). Вот так и с ООП, слишком уж много наворотов на ровном месте, делающих код непролазной мутью. Паттерны просто лучше всего это иллюстрируют. Но есть и масса других примеров - тема связанная с потокобезопасностью. Все эти пробрасывания, залочивания и прочее. Это всё сильно пахнет плохой концептуальной архитектурой языка, да и выглядит лишним. Вспоминается еще такой пример. Язык Cobol. Его создавали с идеей, что пусть там будут большие и громоздкие стейтменты, зато будет читаться как обычный текст на английском, и типа даже не программист сможет понять, что там написано. Появление и дальнейшее движение в сторону С - напрочь перечеркнуло этот подход. С ООП мне видится тоже самое. В основе идея отражать в коде объекты реального мира с похожим поведением. Идея классная, но, кмк, избыточно трудоемкая и сложная в реализации. Думаю она отомрет, как и Cobol когда-то. Насчет вакансий - я не зарабатываю этим, поэтому мне не критично. Но слышал платят ФП-шникам больше. ФП учу по сути просто, для расширения сознания и надеюсь в последствии писать код быстрее и с большим удовольствием ))

    • @MasterLid
      @MasterLid 10 หลายเดือนก่อน

      Всё, что вы пишете про ООП, прекрасно описывается фразой "просто вы не умеете это готовить". В ООП в принципе не должно получаться кода в виде непролазной мути. Если у вас получается непролазная муть, то вы что-то делаете не так. : )

    • @iGynLoD
      @iGynLoD 10 หลายเดือนก่อน

      @@MasterLid Когда у вас объект класса наследуется от 2-3 абстрактов, еще от 3-4 интерфейсов, на вход принимает 8-10 других объектов классов, еще свою какую-то логику реализует и сам еще какими-то объектами оперирует - вот это я уже мутью называю - чтобы понять как работает небольшой кусочек кода, мне надо пол кодовой базы перелапатить, для меня это перебор как-то, а в реальным библиотеках и больших проектах - норма жизни.

    • @MasterLid
      @MasterLid 10 หลายเดือนก่อน

      Так не делайте такую громоздкую конструкцию! Вы что-то наговнокодили (ну или прочитали в книжке какого-то говнокодера -- понятия не имею, откуда вы взяли подобную архитектуру), но претензии предъявляете ООП. Вообще лень вас в чем-то убеждать. Нравится ФП -- программируйте в ФП.

  • @0xsadcat92
    @0xsadcat92 10 หลายเดือนก่อน

    Пишу на С++, в нашем маленьком мирке заводится функциональная болезнь, переделывая изначальный Си с классами (на голом Си, кстати, тоже крупные проекты используют ООП подход с наследованиями и полиморфизмами, их просто реализуют сами, а не из коробки). На С++ не такой богатый выбор решений для UI (удобных и рабочих) и, когда вижу очередного адепта ФП, всегда прошу написать хотя бы основу для ХОРОШЕГО UI фреймворка, который не стыдно будет развивать на протяжении многих лет. Как правило, после этого продолжается поток брани и доказательств, но до кода дело так и не доходило... А жаль, ведь если решение хорошее, то продемонстрировать его на практике - лучшее доказательство.

    • @MasterLid
      @MasterLid 10 หลายเดือนก่อน

      Да. Апологеты ФП похожи на сектантов.

    • @0xsadcat92
      @0xsadcat92 10 หลายเดือนก่อน

      @@MasterLid Согласен , объективно готов смириться с любой парадигмой/технологией/практикой и т.д. лишь бы оно решало задачи. Математическая доказанность это очень здорово, безопасность там, иммутабельность и прочее, но на Java 3 billion devices, в на haskell todo-list без графической оболочки. В дополнение не могу не отметить тезис, что ФП хорошо для математических расчетов. Сложные штуки, вроде физики воды на ФП не пишут, там нужна производительность, а в НИИ (работал какое-то время) пишут на каком-нибудь фортране, т.к. он простой как черенок от лопаты и делает все, что нужно. Это не забивает голову и позволяет заниматься более важными вещами, чем ломать голову над очередными хитросплетениями.

  • @yomayo-f3c
    @yomayo-f3c 11 หลายเดือนก่อน

    Мне кажется ООП избыточен в о фронт приложениях! Ну все приводят примеры с машинами робатами и тп! Ну и много ли задачь где это надо во фронте с этим наследыванием? Ну если надо можно и класс написать не кто не против ну по мне так кажется что избычточность сорее вредна! А если не использовать наследование и просто писать через классы тт в чем преимущество?

    • @0xsadcat92
      @0xsadcat92 10 หลายเดือนก่อน

      За фронт-энд сказать однозначно не могу, не особо вникал, но на десктопе для построения UI есть 2 пути: ООП с базовым классом Widget/Control/etc и плохой. Полагаю, что интерфейс в браузере не очень сильно отличается от десктопа архитектурно.

  • @alekseybaholdin9447
    @alekseybaholdin9447 ปีที่แล้ว

    А почему не используешь Lambok?

    • @MasterLid
      @MasterLid ปีที่แล้ว

      Наверное, потому, что этот ролик про Maven и Gradle, а не про ломбок (название, кстати, то ещё: не каждый клиент захочет, чтобы в его проекте фигурировал какой-то ломбок). Что касается лично меня, почему я его не использую... Так я и на Java сейчас не программирую.

  • @СергейВитковский-в1б
    @СергейВитковский-в1б ปีที่แล้ว

    Здравствуйте! Если тоже самое на maven, то как заменить команду "gradlew run --args='install'"?

    • @MasterLid
      @MasterLid ปีที่แล้ว

      Чтобы запустить на Maven нужно добавить в pom.xml, в раздел plugins, плагин exec-maven следующим образом: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <configuration> <mainClass>tv.lid.cinema.api2.App</mainClass> </configuration> </plugin> В mainClass соответственно указывается, какой класс следует запускать. Далее в командной строке запускаете: mvn compile exec:java -Dexec.arguments="install" А вообще по Maven и Gradle у меня есть отдельный ролик. Рекомендую его посмотреть: th-cam.com/video/Vf7awezFULc/w-d-xo.html

    • @СергейВитковский-в1б
      @СергейВитковский-в1б ปีที่แล้ว

      @@MasterLid Спасибо за быстрый ответ Запустить удалось, однако в консоль посыпались ворниниги и запуск прекратился, но сам файл базы данных появился - моя первая проблема решена. Далее я запускал приложение другой командной и оно работало, но, к сожалению, с базой данных всё ещё есть проблемы. Я так понимаю, само приложение в последствии можно запускать (или нет?) одной из команд: "mvn compile exec:java" или "mvn jooby:run". В обоих случаях выводится стек, информирующий о хосте и роутах, и приложение отвечает на запросы постмена, но при попытке добавить запись в БД получаю ошибку 500... Подскажете, куда копать? Ролик по Maven и Gradle уже смотрел

    • @MasterLid
      @MasterLid ปีที่แล้ว

      Копайте в сторону внимательного прочтения трассировки. Обычно там более-менее понятна проблема становится. Если приложение работает (т.е. читает пустую базу данных и не падает), а ошибка возникает при создании новой записи в базе, то, видимо, проблема именно в этом. Можно же запустить GUI H2, подключиться к вашему файлу с базой данных и попробовать добавить запись вручную, SQL-запросом. Получится оно или нет? Вообще драйвер H2 обычно выдаёт подробную диагностику, почему не удалось добавить новую запись (смотрите трассировку опять же). Изначальный вариант с Gradle работает корректно или нет? Если корректно, то проверьте зависимости в pom.xml, все ли вы их перенесли правильно в Maven...

    • @СергейВитковский-в1б
      @СергейВитковский-в1б ปีที่แล้ว

      ​@@MasterLid Изначальный вариант с Gradle не работает: gradlew: command not found - в последней версии, а также в версии 6.9. Попробовал запустить так gradle run --args='install', в итоге получил вот это: What went wrong: Could not compile settings file 'C:\workspace est-java-api-2\settings.gradle'. > startup failed: General error during semantic analysis: Unsupported class file major version 64 Что касается Maven, то при попытке запросить список фильмов, как я и говорил ранее, приходит ошибка 500, и появляется файл трассировки, в нём исключения, которые мне мало о чём говорят. В общем, исключение вызвано базой данных, исключение вызвано jdbc и так далее. Содержимое следующее, если вам не сложно это просмотреть: database: close org.h2.message.DbException: Ошибка ввода/вывода: "Closing" IO Exception: "Closing" [90028-222] at org.h2.message.DbException.get(DbException.java:212) at org.h2.mvstore.db.Store.close(Store.java:374) at org.h2.engine.Database.closeOpenFilesAndUnlock(Database.java:1293) at org.h2.engine.Database.closeImpl(Database.java:1255) at org.h2.engine.Database.close(Database.java:1174) at org.h2.engine.Database.onShutdown(Database.java:1159) at org.h2.engine.OnExitDatabaseCloser.onShutdown(OnExitDatabaseCloser.java:85) at org.h2.engine.OnExitDatabaseCloser.run(OnExitDatabaseCloser.java:114) Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Ошибка ввода/вывода: "Closing" IO Exception: "Closing" [90028-222] at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) ... 8 more Caused by: org.h2.mvstore.MVStoreException: Could not sync file C:/workspace/test/app/data/cinema.mv.db [2.2.222/2] at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) at org.h2.mvstore.SingleFileStore.sync(SingleFileStore.java:181) at org.h2.mvstore.RandomAccessStore.compactStore(RandomAccessStore.java:442) at org.h2.mvstore.FileStore.compactStore(FileStore.java:888) at org.h2.mvstore.FileStore.stop(FileStore.java:275) at org.h2.mvstore.MVStore.closeStore(MVStore.java:693) at org.h2.mvstore.MVStore.close(MVStore.java:643) at org.h2.mvstore.db.Store.close(Store.java:364) ... 6 more Caused by: java.nio.channels.ClosedByInterruptException at java.base/java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:199) at java.base/sun.nio.ch.FileChannelImpl.endBlocking(FileChannelImpl.java:171) at java.base/sun.nio.ch.FileChannelImpl.force(FileChannelImpl.java:532) at org.h2.mvstore.SingleFileStore.sync(SingleFileStore.java:179) ... 12 more Вариант с Maven устанавливал вручную, так же, как у вас на видео - через интерактивную консоль Jooby. Правда там был +1 пункт, в котором я выбрал "stork", так как другие варианты вызывали ошибки. Добавил зависимости в pom.xml, в частности "com.h2database" и "org.sql2o", а также плагин "org.codehaus.mojo", который вы рекомендовали выше. Затем скопировал файлы вашего проекта и заменил в них пространства имён

    • @MasterLid
      @MasterLid ปีที่แล้ว

      Попробуйте погуглить фразу "General error during semantic analysis: Unsupported class file major version". Судя по всему, у вас несовместимые версии грейдла и джавы.

  • @orcsamuro9687
    @orcsamuro9687 ปีที่แล้ว

    Спасибо, было полезно

  • @Stas-ir3gh
    @Stas-ir3gh ปีที่แล้ว

    Ужасная музыка не смог смотреть.

  • @raccoon8230
    @raccoon8230 ปีที่แล้ว

    Спасибо!

  • @JohnDoe-lc3tc
    @JohnDoe-lc3tc ปีที่แล้ว

    А я заметил Додо-передатчик на полке! Спасибо, за такие отсылки :3

    • @MasterLid
      @MasterLid ปีที่แล้ว

      Ооо... Ничо се! Салют настоящим олдфагам! 🤟

  • @NickRuster
    @NickRuster ปีที่แล้ว

    ахахаха смотрю вступление, вот это подача

  • @antonanton1206
    @antonanton1206 ปีที่แล้ว

    Норм выглядишь

  • @kirilluroven8491
    @kirilluroven8491 ปีที่แล้ว

    я вот тебя увидел, но надеюсь мне показалось

    • @MasterLid
      @MasterLid ปีที่แล้ว

      В Никите? Или в Жене? : ) В любом случае нет. Это просто персонажи.

  • @ivanboroda6908
    @ivanboroda6908 ปีที่แล้ว

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

    • @MasterLid
      @MasterLid ปีที่แล้ว

      Смотря для чего вы изучаете Haskell. Если для саморазвития, то почему бы и нет. Если для получения работы, то просто загляните на хаха.ру, поищите вакансии с хаскелем. Готов поспорить, их там немного. Даже на относительно популярный Rust не так много вакансий. По поводу Python -- тут вопрос не менее сложный. Мне нынешняя ситуация с ним напоминает историю с PHP лет 10-15 назад, когда этот неплохой инструмент прочно превратили в язык говнокодинга. А сейчас различные говнокурсы и инфоцыгане выпускают питонистов пачками. С одной стороны, вроде бы язык востребован (по уверениям тех же инфоцыган), с другой стороны, если питонистов выпускают пачками, а количество вакансий всё-таки не безгранично, то каковы шансы новоиспечённому питонисту найти работу? У меня нет готового ответа для вас. Изучите рынок вакансий на хаха, например.

    • @АнатолийПетрович-в8и
      @АнатолийПетрович-в8и 3 หลายเดือนก่อน

      Если будете учить хаскель, 100% придется учить плюсы впридачу., потому что весь ввод/вывод а так-же обходные инструменты в метсах где вывод типов хаскеля не вывозит - придется писать на них. Вообще хаскель - это одеальный язык для описания доменной области и написаниия декларативных скриптов и логики для тех, кто хочет писать на плюсах

  • @Garivprogari
    @Garivprogari ปีที่แล้ว

    удивил ++++++++++++++++++++

    • @MasterLid
      @MasterLid ปีที่แล้ว

      В смысле "удивил"? Мы знакомы? Мы с вами на "ты"?

    • @Garivprogari
      @Garivprogari ปีที่แล้ว

      @@MasterLid думал опять бабер а нет оказался нормальный вот и удивил

    • @MasterLid
      @MasterLid ปีที่แล้ว

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

  • @BobberBobston
    @BobberBobston ปีที่แล้ว

    Очень круто! Приятно, что без воды и реально по существу, хотя допускаю, что чтобы насладиться этим четким роликом, надо перед ним где-то посмотреть "водяные" невнятные ролики. Классно, что еще вы шутите с серьезным лицом на протяжение ролика (здесь: про американские глубокомысленные акронимы). Это улучшает потребление и обработку информации моим мозгом

  • @dansamomi5311
    @dansamomi5311 ปีที่แล้ว

    Приветствую. Интересно увидеть ролик с разбором Klite от codeborne в вашем стиле. Очень нравится ваш канал. Пожалуйста, продолжайте )

    • @MasterLid
      @MasterLid ปีที่แล้ว

      Добрый день. И со всеми прошедшими праздниками! Вы про этот фреймворк github.com/codeborne/klite ? Ну, скажем так, Kotlin -- это не моё. Прямо вот совсем. Да и зачем вам мой обзор? Если интересен конкретный фреймворк, берёте и тестируете его. Можно написать простенькое приложение, типа новостной ленты или гостевухи. Потом на полученном опыте тиснуть обзор на хабре. ; )

    • @dansamomi5311
      @dansamomi5311 ปีที่แล้ว

      @@MasterLid Добрый день. Ваш обзор интересен, потому что, вы можете сравнить с другими решениями, которые вы уже пробовали. Благодарю за ответ. Кстати возможно "Kotlin - это не моё. Прям вот совсем" это отличный топик для ролика, очень интересно выслушать аргументы.

  • @СергейК-б6н
    @СергейК-б6н ปีที่แล้ว

    😎😏

  • @MayorKozin
    @MayorKozin ปีที่แล้ว

    Отличная подача материала, залип в лампу, что стоит сзади)

  • @GreyYar
    @GreyYar ปีที่แล้ว

    Когда решил добавить слой абстракции в видосы)

    • @MasterLid
      @MasterLid ปีที่แล้ว

      Где ж тут "слой абстракции", когда всё максимально конкретно объясняется? 🧐

    • @GreyYar
      @GreyYar ปีที่แล้ว

      @@MasterLid добавлены персонажи и визуальный стиль, между автором и зрителем. Это ли не абстракция 😃

    • @MasterLid
      @MasterLid ปีที่แล้ว

      Отличное пояснение! Спасибо! Да, всё так и есть.

  • @jojopko_dev
    @jojopko_dev ปีที่แล้ว

    Очень жаль, что такую годноту никто не смотрит

    • @MasterLid
      @MasterLid ปีที่แล้ว

      Вот. Один из самых приятных комментариев на моём канале. Спасибо!

  • @PrettyStreet-xx9if
    @PrettyStreet-xx9if ปีที่แล้ว

    Главный герой фильма "Заводной апельсин", рассказывает про REST API

  • @Th-xo9qr
    @Th-xo9qr ปีที่แล้ว

    Добрый день! Спасибо вам большое за такое развернутое объяснение REST. Только начала изучение серверных запросов, и ваше видео отлично объясняет все нюансы, все мои проблемы. Хорошее видео, спасибо вам большое!!!☺

    • @MasterLid
      @MasterLid ปีที่แล้ว

      И вам большое спасибо за положительную оценку! Рад был помочь!

  • @obychy_chelovek
    @obychy_chelovek ปีที่แล้ว

    Бэкендер, ищу фронтендера, чтобы делать пет-проджекты, хочу интернет-магазин вязаных вещей запилить. Сори, хз просто где ещё товарищей искать х)

  • @hdhhehehjdjdjjd3982
    @hdhhehehjdjdjjd3982 ปีที่แล้ว

    Писать тесты - это скучно))) Тестировщики такие - Уууууууууу