чем отличается authorization_endponint от token_endpoint ?
@exAlexey3 күн бұрын
Жалко что книга по .NET 7 а не .NET 8 написана. Вроде бы Лок умный, но книги пишет по проходным версиям вместо LTS
@ivanvoyager5 күн бұрын
Почему nlog устаревший? И почему надо использовать только логгер от микрософта? Микрософтовский логгер это же просто абстракция? Под которой может быть nlog, seriolog, etc.
@tt0nix2 күн бұрын
Имелось ввиду, что ILogger от Микрософта стоит везде использовать как общепринятую абстракцию, ибо альтернатив нет (и не нужно). Его уже протащили во все сторонние библиотеки и фреймворки. Единая абстракция нужна была давно (всегда), хорошо что она появилась. Реализация Микросовтовского логера наверное тоже может использоваться для несложных проектов. Но, в общем случае, конечно можно использовать что-то более мощное. Я юзал NLog, когда ещё не было структурного логирования. Как только появился Serilog и принёс с собой структурное логирование, я сразу пересел на него и понял, что лучше ничего нет. После этого Микрософт затащил структурное логирование в ASP.NET Core и стало очевидным что этот путь победил. NLog на тот момент данной парадигмы не поддерживал. Поэтому он устарел ещё 10 лет назад. Да потом к нему докрутили структурное логирование, но основная концепция под капотом всё равно осталась древней. Вообще не вижу ни одной причины зачем тащить NLog в новый проект. Serilog превосходит его везде: качество кода, гибкость, настраиваемость, выхлопы, даже по количеству скачиваний :) Наверное если только разработчик использовали NLog много лет на старых проектах и не хотят смотреть по сторонам. Но это не причина, это отмазка.
@MirrorBoySkr6 күн бұрын
Большие спасибо за подкаст. Было бы интересно послушать про хранение языков для локализации. Тут тоже есть подводные камни. Например, язык нужно хранить в паре со страной.
@tt0nix2 күн бұрын
Интересно. А есть какая-нибудь статья чтобы почитать о проблеме, для тех кто не сталкивался?
@KislyEmb7 күн бұрын
Анатолий опять уходит в нездоровый экстремизм с этим вот "вон из профессии". Я понимаю, что это может быть его личным мнением, но это попахивает каким-то религиозным фундаментализмом.. только из мира программирования. Потому что у вас есть огромный пласт программистов, которые никогда за всю свою карьеру не работали с деньгами и даже не задумывались о том как с ними стоит работать.. своей нишевой головной боли хватает. В общем не стоит быть таким категоричным.
@tt0nix2 күн бұрын
Я не говорил, что они должны работать с этим на практике. Я говорил, что они обязаны это знать. Это как элементарная гигиена. Ты можешь никогда не работать с датой и временем, но ты обязан знать про часовые пояса. Те же самые маркеры и про деньги. Если в твоей голове хоть на секунду появится идея сохранить деньги во float, это значит что такой разработчик просто проф. непригоден: он не разбирается в типах, ему не интересно как живёт внешний мир, он не знает стандартные ошибки начинающих программистов, он просто не развивается от нуля. Ну это не разработчик, это просто дворовый кодер, который любой код будет писать так что лучше бы вообще не писал. Сразу вон из профессии.
@soltaurus10 күн бұрын
Спасибо! Надо ли говорить за деньги, время, типы данных, лучшие практики и базу? Да, это всегда полезно и интересно. Технологии меняются, а база остаётся
@tt0nix9 күн бұрын
Верно :)
@widewise184111 күн бұрын
О! Наконец-то про CORS
@tertiumorganum566515 күн бұрын
Зочем надо было делать доклад, если сам не оч въехал? Dba по определению с ддд ничего общего иметь не должны
@tertiumorganum566515 күн бұрын
Домены и контексты перепутал😂
@ДамирЩербаков-ж9б19 күн бұрын
Спасибо большое вам! Читал книгу и слушал ваши обсуждения. Очень продуктивно и интересно получилось ❤
@PForeverSAH21 күн бұрын
немного наброшу в защиту тайпскрипта :D. Да, совершенно верно, типы там существуют только в момент компиляции, в рантайме можно огрести. Но в каких случаях? 1) отказ следования регламентам, 2) грязный внешний мир. Последнее создаст проблемы и в c# (хотя вы и упадёте раньше, но проверять туже нуляюельнлсть всё равно обязаны сами). А с регламентами всё очень неплохо: если им следовать (например не писать any вместо known, чекать типы перед кастом, и т.д.), то помимо уверенности приходит и очень интересный бонус: в тайп скрипте на самом деле очень навороченная система типов, фактически у вас в руках целая математика типов, с которыми можно общаться как со множествами, например выбирая их перксечения, суммы, разницы или даже деления. Эти множества можно трансформимровать, например, вы можете гарантировать что у вас функция, принимающая объект одного типа, должна вернуть объект другого типа, но с изменёнными именами или типами полей. Так, например в RxJs есть набор функций, которые могут принять объект с полями-обсервейбалами любых типов, а в сабскрайбе будет возвращаться объект с теми же полями, но уже результатами подписки (т.е. {a$: Observable<number>, b$: Observable<string>} => {a: number, b: string}). Или же можно задать аргумент, который строго требует передачи проперти заданного типа для некоторого объекта и т.д. В c# же для создания подобных конструкций зачастую приходится прибегать к контрактам и чекать их в рантайме, что невелирует приемущества строгой типизации. Повторюсь, что нарушить в тайпскрипте подобные ограничения типов можно, но они обычно требуют явного написания в коде специальных конструкций, которые вполне можно заблокировать на уровне линтера
@tt0nix9 күн бұрын
Да, с точки зрения системы типов TS хорош, тут не поспоришь. Правда, я не уверен, что хотя бы 1% js-разработчиков полноценно всем этим пользуются. Единственная проблема TS это JS. Как бы там всё красиво не было, в рантайме это всё-равно всё Any. И если в C# такое безобразие только с nullable типами (и это ужасно), то в TS со всем. Безусловно, с TS лучше чем без него, но никуда от взаимодействия с JS он не уйдёт. Так же точно как Котлин мучается, сглаживая косяки Джавы, но нормальных дженериков как не было так и нет :)
@PForeverSAH9 күн бұрын
@tt0nix я просто к тому, что тут встаёт философский вопрос: а если проверка типов в компайл тайпе даёт все необходимые гарантии, то так ли она нужна в рантайме? 😉 Ведь по сути своей система типов и вся эта абстракция нужна разработчикам, а не машине. Машине нужен только конечный автомат по которому она идёт. Другими словами: наличие рантайм проверок типов (как и любых других) - отчасти результат недостаточной работы на предварительном этапе. А отчасти взаимодействие с тем самым внешним миром (js, json, bd, file, browser api, etc.). Но тут уже встаёт другой философский вопрос: а насколько корректно при взаимодействии с такими системами полагаться на систему типов вместо описания полноценных проверок? Вспомним озвученные в этом подкасте недавно проблемы с парсером джейсонок. Так что я думаю, не всё так однозначно). Но это в идеальном мире, в реальном 99% всё конечно же зависит, как мы знаем, не столько от языка, сколько от программиста(ов) и подходов 💩
@tt0nix2 күн бұрын
@@PForeverSAH Полностью согласен, вполне возможно описать все проверки в дизайн-тайме и в рантайме их просто выкинуть (для оптимизации). Достаточно покрыть ограничениями все входные данные (весь внешний мир). Так и работают языки с доказуемыми гарантиями корректности. Но это пока слишком сложно для общеупотребительных языков. Большенство программистов прямо будут страдать. Не даром код на динамических языках (с противоположной к строгим типам идеологией) так популярен и распространён. Ибо бизнесу обычно надо сделать быстро (дёшево), а не надёжно (дорого).
@MrCommanderKid21 күн бұрын
Отлично! 🎉
@borntowhine8079Ай бұрын
Спасибо! Отличный сезон получился
@TheDemodedАй бұрын
офигенноe объяснение от гостя про ref struct
@bananasbaАй бұрын
НЕ может быть причин съехать на джс )
@tt0nixАй бұрын
Менеджеры такие затейники, ещё и не на то пересаживают :)
@bananasbaАй бұрын
С xUnit мы имеем дело снова с апгрейдом, который заставляет переколбашивать код в непропорциональных размерах относительно ценности самого апгрейда.
@tt0nixАй бұрын
В каком конкретно месте новая версия конфликтует с вашим существующим кодом?
@bananasbaАй бұрын
@@tt0nix они же поменяли неймспейсы, плюс наверняка что-то убрали, что-то сломали, все это брейкинг ченджес. Многие расширяют тесты, например, чтобы интеграционные запускать с нюансами, все это может пострадать. А что по сути на выходе? Тесты продолжают работать...
@tt0nix9 күн бұрын
@@bananasba Ну вот не встречал я чтобы прямо многие. Изменение инфраструктуры тестов, тем более такие что попали под breaking changes, ещё поискать надо. Поэтому просто попробуйте обновить версию и всё. Скорее всего на большинстве проектов ничего не изменится.
@vifvrTtb0vmFtbyrM_QАй бұрын
Коллеги, blazor мертворожденный ? Или думаете по другому ?
@maxm1079Ай бұрын
он для админок прекрасный, для все остального нужно искать готовые компоненты если с ними все ок то делать можно все что угодно
@tt0nixАй бұрын
Пока не понятно. Он всё ещё ищет свою нишу. Но MS очень много сил в него вкладывает. Внутренние админки на нём уже сейчас пишутся отлично и много. Но вот наружу обычно стесняются выдавать.
@troepolik28 күн бұрын
для энтерпрайза отлично подходит
@redkostiaАй бұрын
Очень полезный и своевременный доклад, спасибо
@redkostiaАй бұрын
Вообще за плагинами ближайшее будущее. Денег на поддержку зоопарка микросервисов нет, хочется как-то минимизировать количество кода и при этом сохранять гибкость. Так что плагины щас возвращаются в моду
@redkostiaАй бұрын
Я как-то посмотрел в незакрытое окно и получил люлей😂
@aleksandrerygin4553Ай бұрын
Очень позитивный выпуск, всех с наступающим!!!
@tt0nixАй бұрын
С новым годом!
@СерёгаСокольскийАй бұрын
.NET рынок не входит даже в топ пять по количеству вакансий. Он просядет ещё больше из-за вытеснения его Go в микросервисах
@xinitruАй бұрын
Пичаль (
@tt0nixАй бұрын
Ссылку можно на статистику? Ну и го, это язык для тех кто с трудом пхп осилил. Мы развивались и при пхп, выростим и при других.
@СерёгаСокольскийАй бұрын
@@tt0nix статистика вакансий на hh. Статистика рейтинга языков на тиобе и стековерфлоу
@СерёгаСокольскийАй бұрын
@@tt0nix hh. Go эффективно решает то, для чего и был создан
@tt0nix17 күн бұрын
@@СерёгаСокольский Для переучивания PHP'шников в проверяльщиков err nul'ов? Хотелось бы более серьёзный отчёт, чем личные наблюдения за вакансиями.
@egor.clericАй бұрын
Ребят, всё клёво, но просто долгие подкасты, хочется покороче
@thereal_mrnobodyАй бұрын
согласен, 2 часа на такие темы слишком много
@GemeneeeАй бұрын
Мне нравятся долгие выпуски. Если что-то не интересно, пропускаю к следующему тайм-коду.
@MrSavalikАй бұрын
Вот уж правда, всем не угодишь, мне тоже нравятся длинные, а не короткие) короткие можно в Яндекс -пересказе прочитать))
@tt0nixАй бұрын
Да, всем не угодишь. Если эпизод для вас слишком длинный, поставьте его на паузу и продолжите слушать на следующей неделе. Наши темы никак друг с другом не связаны и выходим мы через неделю. Поэтому эффект получится тот же самый как часовой выпуск каждую неделю. А вот если мы будем делать короткие выпуски, то у тех людей кто любит поподробнее и подлиннее никакого решения не будет. Чтобы угодить большинству, приходится писать длинные.
@grosseameiseАй бұрын
@@tt0nix Жгите! Всегда будут те, кому что-то пришлось не по нраву
@maxm1079Ай бұрын
23:24 но ведь для event Action<T> Field, async void простительно делать
@tt0nixАй бұрын
Да, только для event в WinForm. Это единственное исключение. Вообще, MS довольно неплохо вкладывается в развитие WinForms. Могла бы давно уже поддержать Task в событиях контролов.
@maxm1079Ай бұрын
@@tt0nix а почему именно в WinForm ? у меня допустим много где есть подобные интерфейсы public interface IRFID : IDevice { event Action<string> DetectCard; event Action RemovedCard; } и кроме как делать асинхронную (чтоб потом вызвать асинхронно последующие таски) войдовскую подпись у меня нет больше возможностей. и такое работает в простых сервисных приложений под линукс. может я что-то пропустил в мире .Net и есть другие способы создавать события ?
@GachiMayhemАй бұрын
@@maxm1079 ну а почему бы не заюзать event Func<string, Task> DetectCard; event Func<Task> RemovedCard; или я не совсем верно понял ваш кейс
@nenicenerdАй бұрын
ГОООООООООООООЛ
@redkostiaАй бұрын
150 миллисекунд хододный старт это сказка просто. 7 лет назад aws поднимался намноооого дольше)
@tt0nixАй бұрын
За 7 лет индустрия и требования сильно поменялись. Но да, цифры уже довольно конкурентноспособные. И это не предел, это только начало.
@redkostiaАй бұрын
@tt0nix да тогда секунды 2-3 точно был холодный старт aws лямбды. Что собственно делало невозможным её использование для http запрос/ответ. Только крон на ней гонял. Помню ещё так и не смог там async/await заюзать. Мне говорил коллега - сделай доклад про лямбду, а мне стыдно стало, что я там .GetAwaiter().GetResult() вызываю 🤣 и постеснялся 😂
@redkostiaАй бұрын
@tt0nix да тогда точно секунды 2-3 был холодный старт у aws лямбды. Для веба юзать нельзя было. Только крон на ней гонял.
@LactoriogaАй бұрын
54:00 статистика статистикой, но мы недавно переписали с замарина на маюи, а потому что куда ты денешься? Не нанимать же 2 человек иос и андроидщика что б они потом сидели в потолок плевали
@ValueLevitАй бұрын
Почему не react native / flutter ?
@LactoriogaАй бұрын
@ValueLevit там можно писать на с# ?
@vasiliylu8054Ай бұрын
Следующая тема - огонь! По кубику интересует хардкор, ArgoCD, генерация манифестов из Aspire и прочая муть, связанная с деплоем
@user-dzimkaАй бұрын
С наступающими!!!!!!!!!!
@vasiliylu8054Ай бұрын
Привет, спасибо за выпуск!
@ivanvoyagerАй бұрын
Немного устаревшая информация по сурсгенерации, сейчас уже используется поколение инкрементальных генераторов, а описанные в докладе сурсгенераторы уже относятся скорее к legacy. Хотелось бы в следующих докладах уже увидеть инкрементальные генераторы и тесты к ним. Если кому интересна тема инкрементальных генераторов, могут посмотреть на гитхабе NuExt.Minimal.Mvvm.SourceGenerator, там же помимо самого генератора есть и концепция тестирования.
@ivanvoyagerАй бұрын
Snippets: kzbin.info/www/bejne/j3XWZ4xrZ6upp5I
@DimonSmartАй бұрын
Не анемичная и богатая а "Стройная" и "Жирная"
@volirvag7648Ай бұрын
зачем вообще нужен Aspire если его на проде не заюзать
@tt0nix9 күн бұрын
Пока для разработки. А потом посмотрим.
@bananasbaАй бұрын
ну печаль, с такими делами можно было просто оставить одну ноду и лочить в памяти
Я пью воду. Куда добавить метод "пью" в "воду" или в Я? Тут важны детали процесса питья. Если "я пью" и тут важны желудок, почки, сосуды и т.п., то метод должен быть в Я. А если важно открыть кран и выдать небольше 100мл воды за раз, то наверное метож принадлежит классу/домену Воды. Еще надо учитывать только ли Я пью воду или эту же воду пьют много других классов/доменов.
@ivanmatew568Ай бұрын
Меня тоже интересует этот вопрос. Если меняется масса объектов(Я и кружка), то возможно они оба должны реализовывать интерфейс "Сосуд".
@basimal-jawahery5688Ай бұрын
Спасибо за выпуск! 🔥🙏
@bananasbaАй бұрын
Вроде же есть pgo?
@tt0nixАй бұрын
Да, есть.
@bananasbaАй бұрын
MVCC это тот же оптимистик лок (и не факт что блокировки не используются совместно, в SQL Server есть и то и другое). CRDT это больше про eventual consistency и распределенные системы, мол данные записанные в разные реплики сойдутся. Каким-то подходом могут быть например акторы, но они фактически делают доступ к ячейке последовательным, что эквивалентно локу, но сделано за нас. Раньше в EF вообще нельзя было нормально заретраить, счас вроде как можно, но нет желания связываться, 100% они где-то косякнули)
@tt0nixАй бұрын
В общем задача решается одинаковая: предсказуемая работа с конкурентным изменением одной области памяти. MVCC это не лок, это версионирование данных. CRDT не обязательно eventual consistency, и уж точно не обязательно распределённые системы. Это больше про математические алгоритмы, как свести результат concurrent вычислений гарантированно без конфликтов (например из многих потоков на одной машине). Акторы это обычная очередь, да очередь это тоже стратегия борьбы с конкурентными изменениями.
@VoroninPavelАй бұрын
Интересно бы еще сравнить просто AOT и R2R. Если функция относительно долгоиграющая с большим числом циклов, то оптимизация JIT'а может перекрыть потери на (до/пере)компиляцию и загрузку бОльших бинарей в память. Спрашивал у ребят из команды .НЕТ, не хотят ли они сделать возможность сохранять результат работы JIT+PGO, чтоб можно было это использовать на следующих запусках. Ибо для функций и контейнеров было бы самое оно. Но увы, они это обсуждали, но решили не заморачиваться. =(
@tt0nixАй бұрын
AOT гораздо быстрее стартует чем R2R. Ну а то что он проигрывает прогретому JIT'у и так видно. Поэтому особого смысла сравнивать нет.
@VoroninPavelАй бұрын
Э не, при Optimistic Concurrency в худшем случае не ретрай, а merge conflict - что далеко не всегда тривиальная задача на стороне UI - не показывать же пользователю diff. Azure DevOps не заморачивается: можно написать простыню в тикете, а при нажатии на Save получить: "Извиняй, кто-то тикет уже поменял. Обнови все и заново отредактируй." UX, который мы заслужили.
@tt0nixАй бұрын
В худшем, да, merge conflict.
@VoroninPavelАй бұрын
Один минус у concurrency token'ов в EF - они работают всегда. Нет возможности при SaveChanges сказать: "Вот эти энтити в этот раз на конкурентный доступ не проверяй."
@tt0nixАй бұрын
Интересное требование. Надо покопаться в интерсепторах, может можно что-то через них настроить.
@egor.clericАй бұрын
Что там за чувак, который странные вопросы про основы задаёт и делает вид, что нынче уже это забыто и не нужно. Выглядит дилетантски
@daredeverАй бұрын
давай конкретнее, щас мы его вычислим и накажем! выбор небольшой Роман (я), Роман (не я) и Григорий
@egor.cleric12 күн бұрын
@@daredever кажется Григорий
@daredever12 күн бұрын
@@egor.cleric записал, Григория накажем!
@voland91375Ай бұрын
Даже досмотреть не смог! Настолько все плохо в докладе
@TheDemodedАй бұрын
было бы неплохо в таймкодах указывать когда гости что-то интересное рассказывают. немного страдал ища кусок про рефы
@tt0nix9 күн бұрын
Тамкоды можно и в комментариях свои написать. Они нормально подхватываются. Помочь остальным не искать.
@9285550Ай бұрын
Это вместо графаны и прометеуса?
@borntowhine8079Ай бұрын
Это вместо кубера, только локально, инфраструктуру поднимать. Вместо прометеуса (а также бекендов для логов и трейсов) можно использовать Aspire Dashboard, он как отдельный кусок идёт, без оркестратора. Минус в том, что он данные в памяти хранит, то есть только для локальной отладки подойдёт