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