Я пришел к следующей схеме: - поднимать быстро проект на NestJs и в случае успеха из него делать Backend For Frontend и параллельно писать монолит уже на PHP и к нему обращаться из ноды. - Писать сразу на PHP а NodeJs для минизадач (стриминг, сокеты, микросервисы) PHP медленноизменяемый. что я поставил сегодня, я запущу через 3 года с composer install и все пакеты подтянутся. Да, и ноду я стараюсь минимум окружать пакетами сторонними. Даже уже от TS отказываюсь
@Алексей-б3ц6в7 күн бұрын
А алгоритмы не спрашивали?
@grommaks7 күн бұрын
@@Алексей-б3ц6в не спрашивали, им нужен был Техлид, вот и вопросы в эту сторону больше шли. До сих пор работаю, полет нормальный
@itsssjstn14 күн бұрын
11:13 лучшие видеоуроки там)
@pzaydulinАй бұрын
7:25 Для инициализации можно создать effect, отловить встроенную action ROOT_EFFECTS_INIT и затем запустить initAuthData() initEffect$ = createEffect(() => this.actions$.pipe( ofType(ROOT_EFFECTS_INIT), map(() => initAuthData()) ) ) ROOT_EFFECTS_INIT - запускается после того как все эфекты добавлены
@grommaksАй бұрын
Если модуль подключен как LazyLoaded то он пропускает ROOT_EFFECTS_INIT 😢
@pzaydulinАй бұрын
вместо устаревшего delayWhen можно использовать concatMap и delay concatMap((action) => of(action).pipe( delay((action.exp ?? 1) * 1000 - 60 * 1000 - Date.now()) )), у меня exp?: number | undefined поэтому использую (action.exp ?? 1)
@grommaksАй бұрын
@@pzaydulin rxjs.dev/api/operators/delayWhen#example Вот рекомендуемый паттерн для этого из документации rxjs
@kate_deff160Ай бұрын
Спасибо, огромное, за ролик!😊
@pzaydulin2 ай бұрын
Для typeORM 0.3 теперь требует DataSource создаем *ormconfig.ts* import { DataSource, DataSourceOptions } from 'typeorm'; export const dataSourceOptions: DataSourceOptions = { type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: '', database: 'test', entities: ['dist/**/*.entity{.ts, .js}'], dropSchema: false, synchronize: true, migrationsRun: true, logging: false, migrations: ['dist/**/db/migrations/*{.ts, .js}'], }; const dataSource = new DataSource(dataSourceOptions); export default dataSource; для использования в модуле *imports: [TypeOrmModule.forRoot(dataSourceOptions)],* *package.json* "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js", "migration:create": "npm run typeorm -- migration:create ./src/db/migration/%npm_config_name%", "migration:run": "npm run typeorm -- migration:run -d ormconfig.ts" на "cli" {migrationDir} в ormconfig теперь ругается, поэтому просто удалил и в package.json указываю полный путь ./src/db/migration/ Использование: npm run migration:run npm run migration:create --name=foo *Если скрипты запускаются в Windows для передачи имен используется %npm_config_name% ($npm_config_name Linux, Mac)*
@pzaydulin2 ай бұрын
kzbin.info/www/bejne/fJCyhqecf7GWftE чтобы первоночальный код работал возможно Макс не указал -- (двойной дефис) в команде
@ayanamykhailo2 ай бұрын
Я зміг))
@zalip41292 ай бұрын
так и не понял для чего нужен ngDoCheck
@grommaksАй бұрын
Когда нужен свой change detection механизм. Например в компоненте рисуется /D3/SVG/Canvas и нужно синхронизировать со стейтом angular. SVG ангулар может сам обрабатывать, но вот D3 синхронизацию уже нужна такая гибкость
@thesamemimra-n8r2 ай бұрын
ЭТО ПРОСТО ЛЕГЕНДАРНЫЙ УРОК!!! БОЛЬШОЕ СПАСИБО!
@mimra12 ай бұрын
БОЖЕЕЕ КАК ЖЕ ЭТО ПИЗДАТО
@zalip41292 ай бұрын
а как же tree shaking? standalone components по факту не решает никакой проблемы. Он поможет избавится от сущности модулей, что сократит код на 3 строчки, но при этом все импорты затащите в компонент. Как по мне делать мелкие модули очень разумно. Но так же я не отрицаю удобвство standalone component если у этого компонента минимум зависимостей либо нет вообще. До появления standalone я видел в проекте shared mudules для пайпов, директив. Я не импортировал эти модули, а просто регистрировал эти сущности в тех модулях где это нужно(естесвенно если у этих сущностей не было никаких зависимостей).
@grommaks2 ай бұрын
Действительно tree shaking работает с shared модулями, это конечно же увеличивает время билда, но не бандла. Затянуть сущность где используется ангулар не разрешит, так как только в одном месте можно делать регистрацию Интересный момент, что я тестировал stand alone component и в 16 ангулар tree shaking для них не сработал, если импорт был то в бандле будут По этому делать shared со standalone components пока не рекомендую да и вообще :) Но тема standalone components толковая и за ней будущее большинства компонентов
@tuku_mann2 ай бұрын
Максим, спасибо Вам большое! Ещё 4 года назад нашёл Ваш канал, но тогда был совсем джуном, трудно было понять. Сейчас, по прошествии лет, очень хорошо заходят Ваши прекарсно раскрытые уроки, благодарю!
@Alexandr_Anatolievich_0512 ай бұрын
супер
@IvanYermolenkoSS3 ай бұрын
Коли ж будуть нові відео 😢
@raprap6303 ай бұрын
как быть с вариантом когда в input set приходит объект и в нем меняется какое-то из свойств (не весь объект целиком)?
@grommaks3 ай бұрын
@@raprap630 это грустная часть angular, что это легче сделать чем в других решениях Нужно придерживаться иммутабельного подхода, NGRX позволяет хранить данные с учетом иммутабельности Обычно все придерживаются такого подхода, с этим нет больших проблем, но рефакторить старый код сложно…
@romankondratyev40803 ай бұрын
SELECT DISTINCT Price AS SecondHighestPrice FROM Products ORDER BY Price DESC OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY;
@dmytrokapustiuk95314 ай бұрын
Привет Макс) Круто объясняешь, единственный момент когда мы вместо ngOnChanges используем set, дополнительно к set добавляется get, по идее get вызывается почти всегда, отсюда вопрос не влияет ли это на производительность? Если к примеру будет 10 гетеров)
@grommaks4 ай бұрын
@@dmytrokapustiuk9531 привет 👋 Set и get я бы не рекомендовал использовать :) Get должен выполнять очень простую операцию, причем детерминированную (которая всегда вернет тот же результат если параметры не изменились) и тогда все будет нормально с производительностью. Как делать не нужно, в getter делать новый observable (через добавление динамически pipe к существующему observable), также не нужно копировать объекты в getter, иначе поменяется ссылка Какие паттерны есть для того чтобы не иметь геттер и сеттер ( или иметь их более надежном виде ) 1) ngOnChange для запуска перерасчета и сохранения в свойство компонента 2) rxjs стрим, все можно конвертировать в стримы и описать логику расчета один раз в ngOnInit (тут бы я держал слой умного и простого компонента) 3) новая фича - signals поможет сделать это красивее с точки зрения кода Ну и разумеется, тяжелые вычисления, если сильно хочется во время отрисовки их делать, то можно вынести в pipe, как минимум если это по SOLID и более одного компонента будут использовать это (гипотетически или практически)
@Fellendorf854 ай бұрын
Спасибо, Максим за ваш труд!
@Fellendorf854 ай бұрын
Спасибо за урок!!!
@webdeveloper57704 ай бұрын
По умолчанию ставится последняя версия и начинает конфликтовать с версией Angular. Нужно ставить соответственно npm install @ngrx/[email protected] --save
@КосмоНафт-х1с4 ай бұрын
Кто изучал Python, подскажите с чего начать его учить если я в программирование чайник ?. Имеет смысл идти именно на эти курсы или лучше что ни-будь подешевле выбрать и реальное ли его изучить по книгам и видосикам из KZbin ?. Планирую войти в backend и с помощью "Методички" ХаудиХо буду изучать всё аналогичное требованиям современного рынка труда. Ну очень нужна помощь в этом деле, буду безумно благодарен.
@Fellendorf854 ай бұрын
Спасибо за материал!
@dmytrokapustiuk95314 ай бұрын
О привет)
@grommaks4 ай бұрын
@@dmytrokapustiuk9531 привет 🤝 welcome :)
@Fellendorf854 ай бұрын
Спасибо за урок!!!
@Fellendorf854 ай бұрын
Спасибо за урок!!!
@Fellendorf854 ай бұрын
Спасибо за урок!
@brucewayne_0074 ай бұрын
Очеь круто! Есть вопрос: если больше одного модуля используют один и тот же модуль (например FormsModule импортирован в каждый такой модуль), то FormsModule будет один на весь проект или несколько (свой на каждый модуль)?
@grommaks4 ай бұрын
Один на весь проект 👍
@Fellendorf854 ай бұрын
Спасибо за ваш труд!!!
@brucewayne_0075 ай бұрын
После реакта сложно, но круто! Спасибо огромное за курсы!
@brucewayne_0075 ай бұрын
5 и 6 разве аналогичны? Насколько я понял, в 5 вручную передаём экземпляр сервиса в каждом месте, где инъекция будет, а в 6 поставили @injectable и автоматом всё будет делать ангуляр, создаст один общий 6?
@brucewayne_0075 ай бұрын
В 5 пункте не ясно почему сервис не injectable если по итогу инъекция происходит Очень круто!
@pansablanca5 ай бұрын
Вы прекрасно объясняете, выкладывайте больше видео, пожалуйста! Ангуляр обновляется быстро, а хороших видео катастрофически мало.
@v.miller5 ай бұрын
сегодня мучался со стилизаций вложенного компонента. Спасибо!
@Mr.McMouse6 ай бұрын
Максим, благодарю вас за труд, за отличное разъяснение материала! У вас отличная подача материала и подробно разъясняете довольно не легкий материал для понимания простым языком!
@ugin-nb4sy6 ай бұрын
Я не могу понять, как можно устраиваться лидом и доказывать, что ты сеньор и не умеешь писать тесты ?? Как это работает ?? Где гитхаб, где доказательства кода ?? Ученый, который так и не стал учёным 🤣🤣 Зачем ты так прикалываешься ?
@grommaks6 ай бұрын
Хз, не понятно) работаю теперь лидом, и по иронии судьбы буду разрабатывать стандарты по написанию тестов 🙃 Интересно как часто гитхаб на собесе смотрят, когда собеседуют 10 человек, хотелось чтобы они резюме прочитали 😅
@ugin-nb4sy6 ай бұрын
@@grommaks в твои функции входит набор сотрудников и проведение собесов ??
@grommaks6 ай бұрын
@@ugin-nb4sy на 70% работаю как разработчик в команде На 30% делаю задачи уровня отдела Максимально технически ориентированная должность, иногда с архитекторами работаю, иногда с командными тех лидами Правда недавно сделали менеджером для двух разработчиков… Если рассматривать ветку, то следующая позиция это principal developer Условно мою позицию можно переименовать как эксперт front end, я привык когда Техлид это у кого есть команда, но у нас это squad tech lead P.S. За Hiring не отвечаю, в прошлой компании привлекали, тут еще ни разу
@МаксМакс.М6 ай бұрын
на 12:20 подсказки value: и prefix: для записи метода transform() какое расширение показывает подсказки, о том какие параметры мы передали?
@grommaks6 ай бұрын
Webstorm из коробки может это делать
@Leonidn19726 ай бұрын
May can you create video - how to build GRUD project with ANGULAR 17 includ JWT token,Reduce,RXJS and best practices .NET CORE API .(я присоединился к каналу)
@Leonidn19726 ай бұрын
Очень полезная информация. Я серверный программист, начал изучать ANGULAR. Очень профессионально. Акцент на том, что будут спрашивать на собеседовании.Thanks a lot.
@halfbelf59236 ай бұрын
Канал в котором лежит золотой клад знаний, не только по ангуляру, но и в целом, если вы захотите стать разработчиком, тут находиться один из лучших материалов, автор научит Вас как правильно делать, расскажет об альтернативах, разберет плюсы и минусы, тут все что нужно разрабу.
@АбылайШинтемиров6 ай бұрын
А можно было использовать with?
@halfbelf59236 ай бұрын
Единственное чтобы добавил так это то что в ngFor можно получить первый и последний элемент используя такие переменные как first и last, поставил лайк, топ ролик.
@Leonidn19727 ай бұрын
Thanks a lot.Usefull content.
@dobrinyanicitich75147 ай бұрын
Такая жизнь, такой JavaScript, извините =)
@mila43087 ай бұрын
спасибо большое еще раз за прекрасное объяснение! за труд! мне любой формат нравится, главное понятное объяснение на примерах 🙏
@mila43087 ай бұрын
спасибо большое за подробный, интересный, понятный курс 🤩🙏
@mila43087 ай бұрын
девочки тоже есть)) у нас на проекте больше женского пола, чем мужского