Пікірлер
@MatveyAleksandrov-k6v
@MatveyAleksandrov-k6v Күн бұрын
обожаю его чувство юмора
@mushegovdima
@mushegovdima 3 күн бұрын
отличный выпуск!
@daredever
@daredever 3 күн бұрын
спасибо!
@ivanvoyager
@ivanvoyager 7 күн бұрын
Отличный доклад и как раз для введения в эту область! Побольше бы такого материала и изложения! Спасибо!
@АлексейДемин-ф2к
@АлексейДемин-ф2к 7 күн бұрын
- у нас 4 девятки - вау, вы не работаете тооько 30 секунд в год? - нет, 0.9999 - мы работаем 30 секунд в год
@ШироковАлександр-х7п
@ШироковАлександр-х7п 7 күн бұрын
Второй
@redkostia
@redkostia 7 күн бұрын
Первый!
@daredever
@daredever 7 күн бұрын
дослушал?))
@redkostia
@redkostia 6 күн бұрын
​​​@@daredeverда, позавидовал проекту с простой бизнес целью 😂 у меня на последнем проекте было наоборот. b2b интеграции . хайлоад решается тупо - в распродажи оперативы добавляем😂 а вот чтоб апишку стороннюю интегрировать - это надо ад из согласований пройти 😢 из-за сложности бизнес логики от микросервисов отказались, поддерживать сил нет. На модульный монолит перешли )
@redkostia
@redkostia 6 күн бұрын
@daredever ага. Позавидовал проекту с простыми бизнес целями 😁 у меня с точностью до наоборот)
@redkostia
@redkostia 7 күн бұрын
Про проприетарные данные - вроде был уже скандал в самсунге, они в чатжпт свои алгоритмы скормили и они теперь всем доступны
@redkostia
@redkostia 7 күн бұрын
Про легальные иски - вроде на майкрософт уже подали в суд за то, что они приватные репы в гитхабе себе в копилот закачали
@StackOverflowMan
@StackOverflowMan 9 күн бұрын
"мы пилили protobuf, уменьшаем .. чтобы юзерам кеш не замусоливать" Интересно о чем именно речь?
@PForeverSAH
@PForeverSAH 12 күн бұрын
на самом деле накину немного плюсов формата минимал апи по собственному опыту: 1. Для минипроектов/педпроджектов. Когда код меняется очень быстро, очень удобно когда всё перед глазами, непереключаясь между файлами просто накидываешь логику как в старой доброй консольки 2. Шаринг контекста. Неочевидный но существенный плюс в том же сценарии. Поскольку в минимал апи всё есть лямбда, можно объявить переменные/лямбды в верху файла и просто шарить их через замыкание между всеми методами. Опять же в условиях пары часов после работы выделяемых на пед проджект это может стать существенным, когда ты хочешь делать фичи, а не писать обвязки) 3. Chat GPT :D. Иногда, имея идею в голове, но лень в сердце, просто запрашиваю копайлот сгенерировать некоторую апиху, прося его делать минимал апи, получаю готовое решение, которое потом дорабатываю в редакторе: раз, два, поехали, очень удобно 4. Наглядность. Ну не только мини проектами едины будем. Большой проект тоже имеет право жить в минимал апи при условии, что в конролерах нету логики. Как результат, у вас единая страница, на которой вы видите все эндпоинты вашего приложения. Единая точка входа лично мне кажется прекрасным решением для входа в приложения для новых программистов на проекте. Причём вы видите не только всю карту эндпоинтов, а также все особенности приложения: авторизацию, специфические мидлваре - и сразу представляете себе сложность именно его асп нетной части. Более того, такой подход пушит вас держать контроллеры в чистоте (кому нравится писать лямбды с фигурными скобочками? :D)
@tt0nix
@tt0nix 8 күн бұрын
Хороший, свежий взгляд, спасибо. Действительно есть ситуации когда краткость и наглядность может перевесить остальное.
@redkostia
@redkostia 12 күн бұрын
Спасибо за идею - метазапрос - запрос
@bananasba
@bananasba 16 күн бұрын
Хех, учитывать рекомендации МС в своем собственном выборе между контроллерами и мин апи?)
@tt0nix
@tt0nix 15 күн бұрын
Сейчас оба направления находятся на таком уровне, что разницы нет никакой. Как выяснили в подкасте: AOT и синтаксис - вот единственные критерии.
@bananasba
@bananasba 16 күн бұрын
Если бы, авторы библиотек без проблем ломают апи, этот атрибут новый им не поможет.
@tt0nix
@tt0nix 15 күн бұрын
Зависит всё от авторов, конечно. Я давно избавился в своей работе от таких библиотек, поэтому пользуюсь плодами только адекватных разработчиков. Ну и надо начинать с себя. Самим обязательно следить за теми продуктами, которые выпускаем. Совместимость важна даже внутри одной компании.
@СерёгаСокольский
@СерёгаСокольский 16 күн бұрын
какая-то не ясная трансформация шарпа. То под раст косит, то под го, то под джаву. Такое ощущение, что майки уже не знают, чем конкурировать
@tt0nix
@tt0nix 15 күн бұрын
Кажется, что они чётко придерживаются концепции конкуренции со всеми. Ибо, как язык, шарп давно всех победил (кроме функциональщиков, но и на них он засматривается давно). Если с этим смириться, то развивать его больше некуда. Что мы и видим на последних анонсах: в языке нет больших изменений. Поэтому надо искать новых врагов. Этот путь делает язык сложнее, но позволяет захватить новые ниши.
@СерёгаСокольский
@СерёгаСокольский 15 күн бұрын
@tt0nix лол! Шарп никого так до сих пор и не победил. Энтерпрайзом правит джава, а микросервисами го
@Александр-ф9в4ю
@Александр-ф9в4ю 15 күн бұрын
Что вы хотели от ЯП который по своей сути вторичен с рождения? У Майкрософт слишком много вторичных технологий, С#, Typescript...
@tt0nix
@tt0nix 8 күн бұрын
@@Александр-ф9в4ю Откуда такие глубокие выводы?
@VoroninPavel
@VoroninPavel 16 күн бұрын
Single, увы, не рассказывает, какой элемент (с каким ключом) задублировался =(
@tt0nix
@tt0nix 15 күн бұрын
Да, это одно из безумных сообщений во фреймворке. Таких много. Почему, например, не сказать обращение к какой переменной вызвало NRE. Постепенно ситуация выпрямляется, но ещё есть куда работать. Конечно это всё из-за технических сложностей, но потребителей (нас) это не должно волновать. Нам нам нужны понятные исключения.
@vifvrTtb0vmFtbyrM_Q
@vifvrTtb0vmFtbyrM_Q 16 күн бұрын
Красно синие функции. Да, это не проблема вызвать асинхронный код в синхронном. Но проблема появляется когда в средне/большом проекте, изменение одной синхронной функции на асинхронную её версию, приводит к лавинообразным изменениям во всем проекте. Тут вам никакой SOLID не поможет. Заденет всё что выше по call stack. И потом от толкнется от main и вернется назад по всему проекту. Тут сразу трогаем все юнит-тесты. А если они были сильно-связанные как часто любят делать - "А зачем нам мокать в каждом тесте ? Можно же написать отдельный класс для мока всех юнитов", то это еще веселее у вас или получается флаг как мокать (с Task<T> и без него) или два отдельных класса для моков которые потом очень тяжело сопровождать. Потом отлавливаем lock async c#. Потом кучу конфликтов на мерже. В общем не всё так просто.
@MaksimVolkau
@MaksimVolkau 16 күн бұрын
Вы часто говорите о нормальном коде, имея в виду энтерпрайз. Хотел обратить внимание, что код написанный в библиотеках, которые использует энтерпрайз вполне себе нормальный :). И как раз использует эти ref return и так далее, что бы энт. меньше волновался о перформансе. Одно без другого не работает.
@tt0nix
@tt0nix 15 күн бұрын
Да, безусловно. Под «нормальным» я чаще всего имею ввиду «повседневный», тот с которым большинство разработчиков сталкиваются каждый день. Обычно это не библиотеки, а именно энтерпрайз приложения. Кстати, если у вас есть примеры, где в популярных (не MS) библиотеках авторы используют эти конструкции, пришлите. Ибо, заглядывая внутрь библиотек, тоже довольно редко встретишь ref'ы.
@anatolykukanov3983
@anatolykukanov3983 14 күн бұрын
Либки это вообще свой отдельный мир :), то что применимо для enterprise (code practice) как правило не применимо в либках
@MaksimVolkau
@MaksimVolkau 14 күн бұрын
@anatolykukanov3983 Но язык то один. Поэтому выбросить одно или другое из него - не вариант. Даже если мне конкретно эти фичи не нужны, то моей либе нужны.
@tt0nix
@tt0nix 8 күн бұрын
@@MaksimVolkau Я согласен, что выбрасывать низкоуровневые конструкции нельзя. На них весь ASP держится, как минимум, а его уже использует большенство разработчиков. Просто хочется побольше улучшений не только в группе низкоуровневых операторов, но и в общеиспользуемом C#.
@sergey8366
@sergey8366 20 күн бұрын
а вообще со старта странное утверждение, что за последние 10 лет накопили опыта с фп. по факту поболтали и забыли. сколько то бы ни было широко в мейнстриме его не появилось
@sergey8366
@sergey8366 20 күн бұрын
объекты - замыкания для бедных. а замыкания - объекты для бедны. ваш филосораптор
@ЭдгарЭдгар-с4л
@ЭдгарЭдгар-с4л 20 күн бұрын
Переход к подписке на телеграм был уморительный😂
@Nik-cv5bi
@Nik-cv5bi 20 күн бұрын
Со звуком проблемы (
@bananasba
@bananasba 21 күн бұрын
Сделал все тоже самое (и даже больше) через DI, перехватить можно и протектед виртуальный метод, опять же зависит от инструмента. С этим всем много нюансов, но тут про них почти ничего не было. Вобще немного пугает, что-то вынужден с этим потом жить )
@sergeyz.5845
@sergeyz.5845 23 күн бұрын
👍🏻
@maxm1079
@maxm1079 25 күн бұрын
очень нужно получить исходники демо версии)
@zachemny
@zachemny 25 күн бұрын
Ошибка сразу же: ThreadPool вовсе не обязателен для асинхронного выполнения задачи. Задачи выполняются на нём, только если пользователь это явно указал при помощи Task.Run() или TaskFactory.StartNew(). Континуации выполняются на потоке из тред-пула тоже далеко не всегда - зависит от текущего контекста. Так что в целом таски и тред-пул - перпендикулярные понятия.
@illson4666
@illson4666 26 күн бұрын
что за дела, 90% слайдов - темная тема, 10% светлая. О людях подумайте
@МихаилВирстюк
@МихаилВирстюк 19 күн бұрын
Ну что тут делать. Когда у тебя темная тема в браузере - весь интернет такой :)
@MrCommanderKid
@MrCommanderKid 27 күн бұрын
Спасибо. Интересно! Предлагаю async2 переименовать в asyncDvaYopta
@evgix
@evgix 27 күн бұрын
Печально что отказались от зеленых потоков, но ввели какую-то чушь с async2 (как студенты, ппц)
@pavelkobjakov4148
@pavelkobjakov4148 27 күн бұрын
Отличительная черта любого программиста - выбрать слово, которое он станет коверкать ФреймвЁрк, репозИтори Кажется, это проклятье лежит на каждом из нас)
@buhack93
@buhack93 27 күн бұрын
Доклад супер!
@redkostia
@redkostia 27 күн бұрын
Палец вверх за фуллстек разработчика! Кстати, щас с блазором опять стали фуллстеками😂
@user-mr-m12312
@user-mr-m12312 28 күн бұрын
Спасибо, доклад интересный. Всегда было интересно разобраться с АОП в C#, но пока руки не доходили. По докладу, как-то слишком много информации получилось, 100+ слайдов, некоторые слайды пролистывались быстро. Еще видео не передает лазерную указку, но с этим ничего не поделать.
@TeppopucT
@TeppopucT 28 күн бұрын
У нас есть паттерны проектирования. Но нет никаких правил/рекомендаций/паттернов по асинхронному коду. Надеюсь фраза "сложный асинхронный" со временем станет моветоном. Потому как здесь просто не хватает опыта и каких-нибудь стандартов
@СерёгаСокольский
@СерёгаСокольский 28 күн бұрын
видимо Golang уже в несколько раз быстрее, раз майки зашевелились
@pulodian
@pulodian 27 күн бұрын
Go и Rust во многом сейчас лидруют по скорости. Они между собой конкуренты.
@MrCommanderKid
@MrCommanderKid 27 күн бұрын
Притом сейчас Гошников как собак нерезаных. Раньше шарпы по скорости не сильно го уступали, сейчас, наверное все не так радужно. Интересно на реальную картину глянуть.
@evgix
@evgix 26 күн бұрын
Го всем класть, испугались гринтредов джавы.
@MrCommanderKid
@MrCommanderKid 24 күн бұрын
@@evgix походы гринтреды быстрее и лаконичней получаются. С другой стороны, пока дотнет машину не перепишу, быстрее не получится
@VoroninPavel
@VoroninPavel 28 күн бұрын
А еще вас ждет бААААльшой сюрприз, когда вы в NativeAOT коде попытаетесь вызвать Compile у Expression<Func<...>>
@AEF23C20
@AEF23C20 28 күн бұрын
пишите свои потоки не порите муму
@ЕгорС-г8д
@ЕгорС-г8д 28 күн бұрын
Блин Саша все перебивает, неприятно слушать
@Guitarist138
@Guitarist138 28 күн бұрын
А прошлые части имеет видеовариант?
@havendv
@havendv 28 күн бұрын
Касательно JSON Schema Exporter - Эти схемы нужны, помимо прочего, чтобы описывать tools для LLMок (OpenAI/Ollama/Anthropic/Gemini), там кстати также есть вариант без рефлексии который поддерживает Trimming/NativeAOT
@tt0nix
@tt0nix 25 күн бұрын
А можете дать интересных примеров tools для LLMок? Что такого полезного можно выжать из схемы.
@MirrorBoySkr
@MirrorBoySkr 29 күн бұрын
Года три назад я зашел на новый проект и удивился большому количеству вот таких records и статических свойств с инстансами у них. Всегда недоумевал, зачем этот оверкилл. Ведь есть Enums. Ну вот теперь получил разумное объяснение :))) Спасибо
@kolebynov
@kolebynov Ай бұрын
1:25:40 я тоже не останусь в стороне. Я для себя сделал source generator для генерации DU, чтобы использовать вместо enum'ов, называется Dusharp (github/kolebynov/Dusharp). Киллер фича - DU в виде структур, при этом по максимуму переиспользую память.
@tt0nix
@tt0nix 25 күн бұрын
Отлично, посмотрим. Спасибо.
@ArseniySergeev
@ArseniySergeev Ай бұрын
SVE очень интересно и перспективно. Но как-то странно они её начали делать, без явного регистра-маски. Понятно что хочется это всё сделать наиболее "Generic Math". Но из-за этого сделали только часть и с кучей ограничений. Думаю стоило сначала переложить весь API на "низкий уровень" интринсики как SSE и AVX с отдельным типом VectorMaskа, затем это потихоньку поднимать на более высокий уровень с "Generic Math". Но всё равно очень хорошее достижение))
@kolebynov
@kolebynov Ай бұрын
Если что, SVE это чисто ARM штука. Это такой аналог SSE/AVX на ARM.
@ArseniySergeev
@ArseniySergeev Ай бұрын
@@kolebynov это понятно, если что
@tt0nix
@tt0nix 25 күн бұрын
Это только первые шаги. Может ещё допилят.
@VoroninPavel
@VoroninPavel Ай бұрын
Во-первых, С# упирается в ограничения рантайма. Есть много фич, которые народ годами просит, а они всё никак. Во-вторых, они часто идут на поводу у толпы, из-за чего рождаются фичи типа Primary Constructor'ов. Но при этом публика в массе своей не будет требовать ковариантность в классах или поддержу блоков для экспрешонов. Хотя для авторов всяких библиотек это нишевые штуки довольно полезны.
@tt0nix
@tt0nix 25 күн бұрын
Ну вот были же времена, когда затащили дженерики, linq, ковариантности. Начинает казаться, что все технические гении куда-то пропали. У руля остались только попсовики.
@VoroninPavel
@VoroninPavel Ай бұрын
Обязательные поля у DTOшек не должны быть nullable. По крайней мере, если используется MVC c ApiController, а не minimal api. Model Binder валидирует такие штуки и вернет 400 Bad Request, если свойства нет или оно null. И если вы их nullable объявите, у вас open api документ будет семантически неверный.
@tt0nix
@tt0nix 25 күн бұрын
Model binder - не панацея, он тоже часто бажет и ничего не гарантирует. Слишком много условностей должно совпасть чтобы надеяться на то что в контроллере придёт точно валидная модель. Я себе этого позволить не могу и другим не советую. Open API конечно жалко, но это самое последнее что должно вас волновать. Гораздо хуже если программа будет падать с NRE, что неизбежно произойдёт если не перестать обманывать себя и компилятор.
@VoroninPavel
@VoroninPavel 25 күн бұрын
@tt0nix ну с таким подходом ты и токен сам должен проверять, если считать, что фреймворк заглючит. По сути атрибут ApiController за тебя и проверяет валидность модели. В том числе дёргает интерфейс IValidatableOnject, где можно проверять поля на null, если так уж хочется. Но поля оставить не nullable, дабы семантику не портить.
@tt0nix
@tt0nix 23 күн бұрын
@@VoroninPavel Вообще нет никакой связи. Посыл не в том что фреймворк может иногда заглючить, а в том что есть огромный пласт примеров где он просто не работает уже сейчас. И можно надеяться что таких ситуаций не будет в нашем приложении никогда, а можно не обманывать себя и делать хорошо. Например EF прекрасно работает с nullable, там можно полностью на него положиться. В вот ASP, Options, STJ - плохо работают (про это и статья), нельзя на них надеяться, они точно подведут.
@VoroninPavel
@VoroninPavel 23 күн бұрын
Когда при наличии атрибута ApiController ModelBinder не валидирует модель? Семантика должна рулить. На уровне контракта required поля не должны быть nullable. Можно руками дополнительно проверить (в большинстве случаев не требуется). В публичных методах, если тип not nullable, я все равно делаю проверку, потому что от очумелых ручек с оператором ! анализатор не спасет. Но это же не значит, что мне надо объявлять тип аргумента как nullable. Так и в DTOхах
@tt0nix
@tt0nix 21 күн бұрын
@@VoroninPavel , в случае если сериализатор засунет в DTO null (примеры в статье), ModelBinder ничего не скажет. Очумелые ручки надо отрубать, что тоже прекрасно делается анализаторами, которые умеют проверять неправильное использование языка. Основная мысль заключается в том, что компилятору врать нельзя. Делая DTO не нулябельными, ты врёшь компилятору, контроллеру и всем своим потребителям. Null там лежать может (про это статья). Это ничем хорошим не закончится. Ты. перекладываешь на рантайм ошибку, которую мог бы поймать на этапе компиляции. Это тоже самое что отказаться от строгих типов и в рантайме надеяться что у тебя в object лежит то что ты ожидаешь.
@pixelsaysmeow
@pixelsaysmeow Ай бұрын
Спасибо за отличные подкасты :) В весну 23 года весь этот подкаст и, особенно, тема дискриминации женщин в IT очень поддержала (провалила в 27 лет дважды собесы на стажировку, надежду потеряла, т к непонятно было, почему не прошла, зато с 1 собеса попала на работу, чем страшно довольна уже больше года) ^^
@sergey8366
@sergey8366 Ай бұрын
ох, вангую du запилят так, что в f# задолбаюися саппортить как это уже случилось с рекордами. сделать нормально как в языках где это идеоматично у них не вариант. лучше бы не делали.
@MrMusuk
@MrMusuk Ай бұрын
Ничего полезного не сказано ни про self-hosted решения для ротации и хранения секретов вроде Hashicorp Vault, ни по поводу того, как эти секреты пробрасывать в .net приложение.
@sirpeace_coding
@sirpeace_coding Ай бұрын
Предельно понятный и полезный доклад. Смотрел несколько разных по телеметрии, этот понравился больше всех. Спасибо, Александр!
@ВикторНартов-ц3б
@ВикторНартов-ц3б Ай бұрын
привет, спасибо за выпуск, хочу про тесты архитектуры!
@havendv
@havendv Ай бұрын
Занимаюсь созданием LangChain NET проекта(а также поддерживаю много AI SDK на базе OpenAPI спецификаций и собственного генератора) и у нас есть много возможностей запустить LLM локально помимо LLamaSharp - например Ollama/LMStudio - и по мне они гораздо удобнее. Недавно также писал Steve Sanderson касательно новых ChatClient абстракций и это будет добавлено в ближайшее время(мной или кем то из Microsoft через PR), поверх этих абстракций будет работать логирования, DI, caching, telemetry, function invocation
@tt0nix
@tt0nix Ай бұрын
Спасибо за дополнение, будем с нетерпением ждать. Если вам подвернутся интересные статьи по теме, присылайте. Мы, к сожалению, далеки от этого направления, глубоко сами копнуть не можем.