🔗 Ссылки: ⚡Полный курс по Node.js с нуля, с архитектурой и паттернами: purpleschool.ru/course/nodejs ⚡Курс по TypeScript и паттернам проектирования: purpleschool.ru/course/typescript
Отличное видео! Спасибо! Понравилось про структурирование приложения. Очень интересно посмотреть на практическое применение DI. Жду с нетерпением продолжения!
@@PurpleSchool И курсы у вас классные. Я уже прошел по Nest, прохожу по TS, и далее микросервисы и Node. Хотелось бы, конечно, увидеть по Angular еще. Сайт с курсами тоже оч нравится, как сделан.
Хммм, интересный подход. Я только одного никак не пойму - где обработчики ошибок?)) Насколько я понимаю все эти ctx.reply - это асинхронщина же. Понятно, что ни отрабатывают в рамках коллбэка и поэтому работают. Но, а где же try/catch? Может я чего то не понимаю конечно
Антон, спасибо за видео! 1) У вас есть возможность отключать подсказки в IDEA? Они сбивают когда смотрю в ваш код, там и так много текста и ещё подсказки добавляют. 2) Вы используете vim? Можете поделиться впечатлениями?) Долго учились? Как давно используете? Сильно ли выросла продуктивность? Это могло бы стать темой для видеоролика, но буду признателен и за текст тоже :)
Ну, умоляю вас. Покажите как создавать wizard сцены с таким подходом. Я пробую у меня во-первых с typescript не дружит логика, во-вторых не могу его нормально зарегистрировать через middleware. Хотя по логике вещей чувствую, что какую-то микродеталь упускаю. Контекст ctx не имеет поля scene (а как следствие и enter), потому что не могу понять как зарегистрировать сцену.
Привет. Спасибо за информативное видео! Можете снять ролик про ваш neovim сетап, какими плагинами пользуетесь ? Было бы интересно. Ну и бы ссылка на ваш сетап не помешало бы)
Здравствуйте, Большое спасибо за это видео. Всё понятно. Для тестового задания не могу найти хорошую архитектуру папок, в интернете на эту тему практически ничего. Не могли бы Вы поделиться архитектурой, которую Вы использовали/используете?
17:00 а чего не сделать что-то типа const configService = new ConfigService(); export configService; в самом конфиг сервисе и все будуть брать один объект конфига.
Предлагаю тему для видео: Иерархия для каталога на nestes set, вид хранения в sql бд и работа с ней вставка, перемещение по ветке, удаление + перерасчет связей. так же как его оптимально рисовать на фронте, нативный или реакт к примеру
@@PurpleSchool В общем глянул ролик, это супер нетипичный случай) практический пример бы рендерить из состояния.. А всё-таки реализацию классического иерархического дерева с использованием nested было бы любопытно посмотреть, потому что в интернете совсем мало о такой реализации контента
Чтобы выделить логику получения переменных окружения. Скажем если мы захоти получить из стороннего сервиса, к примеру Vault, мы сможем просто в 1-м месте заменить реализация сервиса.
Добрый день, хотелось бы спросить, а нормально ли в конструкторе делать какую-то логику, просто мне всегда казалось что это не очень хорошее для этого место
@@PurpleSchool О, да. Документация скудная и при поиске примеров приходится учитывать версию телеграфа. Это та ещё боль, если особо не разбираешься в api самой телеги. Когда-то пришлось потратить много нервов и времени при поиске рабочих реализаций в каналах по телеграфу
Слова громкие, типа "используем архитектурный подход", "инверсия зависимостей". Очень красиво получилось, так как там всего 1 команда. А когда будет много команд, когда будет состояние, то вот этот вот паттерн, который очень похож на middleware, будет источником лапши Более сложные боты имеют не просто состояние из 1 флага. Обычно бывает 10-20 usecase-ов, и очень сложные состояния, когда без конечного автомата не обойтись, Ваш вариант не уменьшает сложность, он лишь добавляет красивую абстракцию, которая течет уже с первых строк.
@@PurpleSchool вы уверены? Просто я пытаюсь развернуть бота, а мне Vercel пишет ошибка 500. Если я добавляю webhook в bot.launch, то работает, но не полностью
Мой первый опыт написания бота. За отсутствие DI, конечно, жирный минус, на этом моменте хотелось закрыть видео вообще. Но всё же спасибо, было интересно, попробовал, бот работает.
Здравствуйте, Антон. Записывая начало видео, Вы сидели на коленях перед камерой?) Просто относительно стола Вы находитесь очень низко (телевизор тоже низко как-то).
Видео "ни-о-чем")) Яркий пример перенагруженности логической конструкции. Кстати, этому подвержены все любители TypeScript и прочих "улучшалок". В итоге вы не код учитесь писать и разрабатывать алгоритмы взаимодействия, а учитесь использовать безчисленное количество этих самых улучшалок, тратя уйму времени.
То что вы назвали логической конструкцией, является архитектурой проекта. Можете писать без TS и в одном файле, но тогда забудьте о больших, поддерживаемых и масштабируемых проектах. И как раз «алгоритмы взаимодействия» между компонентами вашего проекта вы и должны прорабатывать.
@@PurpleSchool Это кто сказал забыть?.. что за чушь).. С чего вы это взяли? Люди пишут очень большие проекты прекрасно и с легкостью на нативе и без всяких улучшалок/"убыстрялок". Алгоритмы взаимодействия тут ни при чем, ваш TypeScript - всего лишь помошник для головожопых юнных кодеров не допускать ошибок с типизацией на ровном месте.
@@ledorub6682 Сразу видно, что вы не знаете, что такое TypeScript, и скорее всего не имели дело с большими проектами. А если и имели, то это код, написанный вами давно, в котором только вы знаете как всё работает.
@@АлексейСветинский ох и насмешил, сынок).. вы еще в школу не ходили - я уже разработкой занимался.. вижу что критика для вас неприемлема, поэтому лишь скажу - все улучшалки созданы с одной целью, ускорить процесс коммерческой разработки. Причем чтоб их освоить приходится тратить в разы больше времени, чем на синтаксис и основы построения алгоритмов, то есть на само программирование.
конфеты мишка косолапый хрустят так громко что плохо слышно что рассказывает автор. за те деньги что стоят курсы я могу купить много килограммов этих и других вкусных конфет. вот и выбрал лучше купить конфет, чем курсы. автор так увлекательно рассказывает, что я незаметно съел больше конфет чем предполагал.
@@PurpleSchool Правильно ли я понимаю, что человек, склонировавший этот репозиторий себе на компьютер, установивший nodejs пакеты и запустивший npm start получит ошибку из-за отсутствия .env файла. Не является ли это фатальным нарушением целостности?
@@David-Freeman получит ошибку. И конечно нарушением это не является, так как хранить любую приватную информацию на Git категорически нельзя в открытом виде. Более того env файл будет разный для локальной разработки, stage и прода. И человек для запуска должен собрать нужный себе.
@@PurpleSchool "человек для запуска должен собрать нужный себе." Откуда человек это знает? Откуда он должен знать, какие там параметры вообще? Вывод: .env должен присутствовать, но секретные данные должны быть заменены, скажем, звездочками.
@@David-Freeman он будет знать, так как вы работаете в одной команде. Структура env обычно описывается в инструкции по запуску в Readme, у вас же должна быть к репозиторий полная инструкция
🔗 Ссылки:
⚡Полный курс по Node.js с нуля, с архитектурой и паттернами: purpleschool.ru/course/nodejs
⚡Курс по TypeScript и паттернам проектирования: purpleschool.ru/course/typescript
Отличное видео! Спасибо!
Понравилось про структурирование приложения.
Очень интересно посмотреть на практическое применение DI.
Жду с нетерпением продолжения!
Хорошо) так же можно глянуть у меня в курсе, разобрано детально
Объяснение прекрасное.
Отдельный плюсик за чистоту речи )
Спасибо!
КАЙФФФФ!! Вы прям мысли читаете , везде на питоне боты (
Супер 👍
Спасибо, было полезно в качестве наглядного базового бота для вникающего в эту сферу.
Пожалуйста
@@PurpleSchool И курсы у вас классные. Я уже прошел по Nest, прохожу по TS, и далее микросервисы и Node. Хотелось бы, конечно, увидеть по Angular еще. Сайт с курсами тоже оч нравится, как сделан.
@@germanmanvelov спасибо! Старались сделать максимально удобную платформу.
Я бы посмотрел реализацию с архитектурой на NestJS
Буду иметь ввиду)
Cупер полезное видео! Спасибо вам)
Пожалуйста!
Дякую за відео🙏 Цікавий та корисний контент😃
👍
Топ контент подъехал очередной от Антохи 🔥🔥🔥
Спасибо!
Есть сылка на гитхаб (код из видео)?
Да, видео по логгированию было круто! Если можно, рассмотрите Pino, пожалуйста.
Хммм, интересный подход. Я только одного никак не пойму - где обработчики ошибок?))
Насколько я понимаю все эти ctx.reply - это асинхронщина же. Понятно, что ни отрабатывают в рамках коллбэка и поэтому работают. Но, а где же try/catch?
Может я чего то не понимаю конечно
Когда будет видео как создавать сцены ?
Антон, спасибо за видео!
1) У вас есть возможность отключать подсказки в IDEA? Они сбивают когда смотрю в ваш код, там и так много текста и ещё подсказки добавляют.
2) Вы используете vim? Можете поделиться впечатлениями?) Долго учились? Как давно используете? Сильно ли выросла продуктивность? Это могло бы стать темой для видеоролика, но буду признателен и за текст тоже :)
Привет!
Видео про vim: ruclips.net/video/Q1gIbPEStL0/видео.htmlsi=tM4SdDKaj5AMhgvz
@@PurpleSchool ого, вы прямо на опережение) Благодарю!
Интересный опыт был ) найти бы ещё примеры ) чтоб также с классами ) чтото гитхаб пока не особо балует )
У меня целый курс, где я показываю как строить архитектуру на классах: purpleschool.ru/course/nodejs
Буду рад, если добавите видео про то, как организовать работу со сценам (scenes)
Ну, умоляю вас. Покажите как создавать wizard сцены с таким подходом.
Я пробую у меня во-первых с typescript не дружит логика, во-вторых не могу его нормально зарегистрировать через middleware. Хотя по логике вещей чувствую, что какую-то микродеталь упускаю.
Контекст ctx не имеет поля scene (а как следствие и enter), потому что не могу понять как зарегистрировать сцену.
Я уже на середине ролика, но я не понимаю: а что мы делаем?
Какой функционал у бота будет?
У этого, кнопки и обработка событий, но это основа для бота, который вы можете сами доделать под себя.
Половина видео, какие-то обвязки над обвязками, абстракции, воюет с типизацией и тд
@@ИловМакс да, да. А по факту просто ставим лайк либо дизлайк ))
Good job bro, I very like this structure!
Thanks!
Спасибо! Много полезной информации👍
Пожалуйста!
Привет. Спасибо за информативное видео! Можете снять ролик про ваш neovim сетап, какими плагинами пользуетесь ? Было бы интересно. Ну и бы ссылка на ваш сетап не помешало бы)
Всё на моем канале со ссылками: ruclips.net/video/4PzSNN45tcA/видео.html
@@PurpleSchool спасибо за ответ! Я в итоге нашёл ваше видео про AstroVim и скачал его. Довольно полезный конфиг, особенно для ленивых как я :D
Здравствуйте, Большое спасибо за это видео. Всё понятно. Для тестового задания не могу найти хорошую архитектуру папок, в интернете на эту тему практически ничего. Не могли бы Вы поделиться архитектурой, которую Вы использовали/используете?
Привет! Мы активно рассматриваем её в курсе Node: purpleschool.ru/course/nodejs
Почему bot в конструкторе Command имеет модификатор доступа public а не protected?
Согласен, protected было бы правильнее
@@PurpleSchool хорошее видео! и вообще на канале много полезного. спасибо!
Спасибо!
17:00 а чего не сделать что-то типа const configService = new ConfigService(); export configService; в самом конфиг сервисе и все будуть брать один объект конфига.
Я попробовал обычную сцену создать с таким подходом. Все, я сдаюсь. Одни ошибки
Как с такой архитектурой работать со сценами и везердами?
Предлагаю тему для видео:
Иерархия для каталога на nestes set, вид хранения в sql бд и работа с ней вставка, перемещение по ветке, удаление + перерасчет связей. так же как его оптимально рисовать на фронте, нативный или реакт к примеру
У меня есть видео по отрисовке вложенных меню любой вложенности: ruclips.net/video/yLOOpANXP1E/видео.html&ab_channel=PurpleSchool%7CAntonLarichev
@@PurpleSchool В общем глянул ролик, это супер нетипичный случай) практический пример бы рендерить из состояния.. А всё-таки реализацию классического иерархического дерева с использованием nested было бы любопытно посмотреть, потому что в интернете совсем мало о такой реализации контента
Сегодня практике ради написал свое дерево на реакте, но с плоским списком. Для небольших структур самое то, но работа с ним конечно потная
👏👍💥
👍
👍👍👍👍👍
👍
Подскажите, пожалуйста, для чего сделали сервис по чтению .env, почему нельзя просто читать переменные из него? не совсем поняла этот нюанс по видео
Чтобы выделить логику получения переменных окружения. Скажем если мы захоти получить из стороннего сервиса, к примеру Vault, мы сможем просто в 1-м месте заменить реализация сервиса.
для архитектуры и поддержки надо вынести все значения для лайк/дислайк в enums а не прямо в функциях писать.
Да, верно
Тема для следующего видео: Визуализация архитектуры c4. Инструменты для проектирования. Правила проектирования
Добрый день, хотелось бы спросить, а нормально ли в конструкторе делать какую-то логику, просто мне всегда казалось что это не очень хорошее для этого место
Если логика должна каждый раз выполняться при инициализации объекта, то нормально.
Очень не хватает вывода нажимаемых клавиш где-то в углу. Мне, как новичку в вим, непонятны некоторые хоткеи.
Добавлю!
я фронт, решил для себя разобраться в беке на ноде и у меня возникает ощущение - как будто бы на разных языках пишем)
Все вполне похоже)
Если ты думаешь что у Telegram плохая документация, значит ты просто не видел вк)
Я говорил про библиотеку Telegraf
@@PurpleSchool О, да. Документация скудная и при поиске примеров приходится учитывать версию телеграфа. Это та ещё боль, если особо не разбираешься в api самой телеги. Когда-то пришлось потратить много нервов и времени при поиске рабочих реализаций в каналах по телеграфу
у grammy чёткая дока
Да, глянул, неплохо
Слова громкие, типа "используем архитектурный подход", "инверсия зависимостей".
Очень красиво получилось, так как там всего 1 команда.
А когда будет много команд, когда будет состояние, то вот этот вот паттерн, который очень похож на middleware, будет источником лапши
Более сложные боты имеют не просто состояние из 1 флага.
Обычно бывает 10-20 usecase-ов, и очень сложные состояния, когда без конечного автомата не обойтись, Ваш вариант не уменьшает сложность, он лишь добавляет красивую абстракцию, которая течет уже с первых строк.
не могу реализовать сцена кто то знает как ?
А как данный проект развернуть на Vercel?
Как и любой проект на ноде
@@PurpleSchool вы уверены? Просто я пытаюсь развернуть бота, а мне Vercel пишет ошибка 500. Если я добавляю webhook в bot.launch, то работает, но не полностью
Мой первый опыт написания бота. За отсутствие DI, конечно, жирный минус, на этом моменте хотелось закрыть видео вообще. Но всё же спасибо, было интересно, попробовал, бот работает.
как можно избежать коллизий в callback данных? ("course_like", "course_dislike")
Не очень понял вопрос.
@@PurpleSchool В больших проектах может быть много похожих действий и случайно можно дать называние которое уже существует
Делать сцены, которые ограничивают набор доступных в текущий момент действий в зависимости от сцены
А как потом добавить новые команды?
Создать новый command и его подключить в app.ts в массив команд
Здравствуйте, Антон. Записывая начало видео, Вы сидели на коленях перед камерой?) Просто относительно стола Вы находитесь очень низко (телевизор тоже низко как-то).
Нет, это кресло мешок около телевизора)
Видео "ни-о-чем")) Яркий пример перенагруженности логической конструкции. Кстати, этому подвержены все любители TypeScript и прочих "улучшалок". В итоге вы не код учитесь писать и разрабатывать алгоритмы взаимодействия, а учитесь использовать безчисленное количество этих самых улучшалок, тратя уйму времени.
То что вы назвали логической конструкцией, является архитектурой проекта. Можете писать без TS и в одном файле, но тогда забудьте о больших, поддерживаемых и масштабируемых проектах. И как раз «алгоритмы взаимодействия» между компонентами вашего проекта вы и должны прорабатывать.
@@PurpleSchool Это кто сказал забыть?.. что за чушь).. С чего вы это взяли? Люди пишут очень большие проекты прекрасно и с легкостью на нативе и без всяких улучшалок/"убыстрялок". Алгоритмы взаимодействия тут ни при чем, ваш TypeScript - всего лишь помошник для головожопых юнных кодеров не допускать ошибок с типизацией на ровном месте.
@@ledorub6682 Сразу видно, что вы не знаете, что такое TypeScript, и скорее всего не имели дело с большими проектами. А если и имели, то это код, написанный вами давно, в котором только вы знаете как всё работает.
@@АлексейСветинский ох и насмешил, сынок).. вы еще в школу не ходили - я уже разработкой занимался.. вижу что критика для вас неприемлема, поэтому лишь скажу - все улучшалки созданы с одной целью, ускорить процесс коммерческой разработки. Причем чтоб их освоить приходится тратить в разы больше времени, чем на синтаксис и основы построения алгоритмов, то есть на само программирование.
@@ledorub6682 неадекват какой то
конфеты мишка косолапый хрустят так громко что плохо слышно что рассказывает автор. за те деньги что стоят курсы я могу купить много килограммов этих и других вкусных конфет. вот и выбрал лучше купить конфет, чем курсы. автор так увлекательно рассказывает, что я незаметно съел больше конфет чем предполагал.
За 1790 рублей думаю конфет будет не так уж много. Да и много сладкого вредно.
@@PurpleSchool у Вас курсы по цене конфет? а я думал десятки тысяч как у всех. надо посмотреть. спасибо за пояснение.
Да, для самостоятельного прохождения 1790. Если есть желание работать с наставником и код ревью 6350. И те и те цены для рынка досрочно приемлемы)
Зачем ты это написал? Теперь я хочу конфеты мишка косолапый.
@@just__did__it надеюсь у Вас получится из поесть.
"Не забудем добавить .env в .gitignore" - Это еще почему?
Потому что вы же не хотите, чтобы ваши приватные ключи или пароли от базы улетели в git и хранились в открытом виде?
@@PurpleSchool Правильно ли я понимаю, что человек, склонировавший этот репозиторий себе на компьютер, установивший nodejs пакеты и запустивший npm start получит ошибку из-за отсутствия .env файла. Не является ли это фатальным нарушением целостности?
@@David-Freeman получит ошибку. И конечно нарушением это не является, так как хранить любую приватную информацию на Git категорически нельзя в открытом виде. Более того env файл будет разный для локальной разработки, stage и прода. И человек для запуска должен собрать нужный себе.
@@PurpleSchool "человек для запуска должен собрать нужный себе." Откуда человек это знает? Откуда он должен знать, какие там параметры вообще?
Вывод: .env должен присутствовать, но секретные данные должны быть заменены, скажем, звездочками.
@@David-Freeman он будет знать, так как вы работаете в одной команде. Структура env обычно описывается в инструкции по запуску в Readme, у вас же должна быть к репозиторий полная инструкция