Отличный доклад и как раз для введения в эту область! Побольше бы такого материала и изложения! Спасибо!
@АлексейДемин-ф2к7 күн бұрын
- у нас 4 девятки - вау, вы не работаете тооько 30 секунд в год? - нет, 0.9999 - мы работаем 30 секунд в год
@ШироковАлександр-х7п7 күн бұрын
Второй
@redkostia7 күн бұрын
Первый!
@daredever7 күн бұрын
дослушал?))
@redkostia6 күн бұрын
@@daredeverда, позавидовал проекту с простой бизнес целью 😂 у меня на последнем проекте было наоборот. b2b интеграции . хайлоад решается тупо - в распродажи оперативы добавляем😂 а вот чтоб апишку стороннюю интегрировать - это надо ад из согласований пройти 😢 из-за сложности бизнес логики от микросервисов отказались, поддерживать сил нет. На модульный монолит перешли )
@redkostia6 күн бұрын
@daredever ага. Позавидовал проекту с простыми бизнес целями 😁 у меня с точностью до наоборот)
@redkostia7 күн бұрын
Про проприетарные данные - вроде был уже скандал в самсунге, они в чатжпт свои алгоритмы скормили и они теперь всем доступны
@redkostia7 күн бұрын
Про легальные иски - вроде на майкрософт уже подали в суд за то, что они приватные репы в гитхабе себе в копилот закачали
@StackOverflowMan9 күн бұрын
"мы пилили protobuf, уменьшаем .. чтобы юзерам кеш не замусоливать" Интересно о чем именно речь?
@PForeverSAH12 күн бұрын
на самом деле накину немного плюсов формата минимал апи по собственному опыту: 1. Для минипроектов/педпроджектов. Когда код меняется очень быстро, очень удобно когда всё перед глазами, непереключаясь между файлами просто накидываешь логику как в старой доброй консольки 2. Шаринг контекста. Неочевидный но существенный плюс в том же сценарии. Поскольку в минимал апи всё есть лямбда, можно объявить переменные/лямбды в верху файла и просто шарить их через замыкание между всеми методами. Опять же в условиях пары часов после работы выделяемых на пед проджект это может стать существенным, когда ты хочешь делать фичи, а не писать обвязки) 3. Chat GPT :D. Иногда, имея идею в голове, но лень в сердце, просто запрашиваю копайлот сгенерировать некоторую апиху, прося его делать минимал апи, получаю готовое решение, которое потом дорабатываю в редакторе: раз, два, поехали, очень удобно 4. Наглядность. Ну не только мини проектами едины будем. Большой проект тоже имеет право жить в минимал апи при условии, что в конролерах нету логики. Как результат, у вас единая страница, на которой вы видите все эндпоинты вашего приложения. Единая точка входа лично мне кажется прекрасным решением для входа в приложения для новых программистов на проекте. Причём вы видите не только всю карту эндпоинтов, а также все особенности приложения: авторизацию, специфические мидлваре - и сразу представляете себе сложность именно его асп нетной части. Более того, такой подход пушит вас держать контроллеры в чистоте (кому нравится писать лямбды с фигурными скобочками? :D)
@tt0nix8 күн бұрын
Хороший, свежий взгляд, спасибо. Действительно есть ситуации когда краткость и наглядность может перевесить остальное.
@redkostia12 күн бұрын
Спасибо за идею - метазапрос - запрос
@bananasba16 күн бұрын
Хех, учитывать рекомендации МС в своем собственном выборе между контроллерами и мин апи?)
@tt0nix15 күн бұрын
Сейчас оба направления находятся на таком уровне, что разницы нет никакой. Как выяснили в подкасте: AOT и синтаксис - вот единственные критерии.
@bananasba16 күн бұрын
Если бы, авторы библиотек без проблем ломают апи, этот атрибут новый им не поможет.
@tt0nix15 күн бұрын
Зависит всё от авторов, конечно. Я давно избавился в своей работе от таких библиотек, поэтому пользуюсь плодами только адекватных разработчиков. Ну и надо начинать с себя. Самим обязательно следить за теми продуктами, которые выпускаем. Совместимость важна даже внутри одной компании.
@СерёгаСокольский16 күн бұрын
какая-то не ясная трансформация шарпа. То под раст косит, то под го, то под джаву. Такое ощущение, что майки уже не знают, чем конкурировать
@tt0nix15 күн бұрын
Кажется, что они чётко придерживаются концепции конкуренции со всеми. Ибо, как язык, шарп давно всех победил (кроме функциональщиков, но и на них он засматривается давно). Если с этим смириться, то развивать его больше некуда. Что мы и видим на последних анонсах: в языке нет больших изменений. Поэтому надо искать новых врагов. Этот путь делает язык сложнее, но позволяет захватить новые ниши.
@СерёгаСокольский15 күн бұрын
@tt0nix лол! Шарп никого так до сих пор и не победил. Энтерпрайзом правит джава, а микросервисами го
@Александр-ф9в4ю15 күн бұрын
Что вы хотели от ЯП который по своей сути вторичен с рождения? У Майкрософт слишком много вторичных технологий, С#, Typescript...
@tt0nix8 күн бұрын
@@Александр-ф9в4ю Откуда такие глубокие выводы?
@VoroninPavel16 күн бұрын
Single, увы, не рассказывает, какой элемент (с каким ключом) задублировался =(
@tt0nix15 күн бұрын
Да, это одно из безумных сообщений во фреймворке. Таких много. Почему, например, не сказать обращение к какой переменной вызвало NRE. Постепенно ситуация выпрямляется, но ещё есть куда работать. Конечно это всё из-за технических сложностей, но потребителей (нас) это не должно волновать. Нам нам нужны понятные исключения.
@vifvrTtb0vmFtbyrM_Q16 күн бұрын
Красно синие функции. Да, это не проблема вызвать асинхронный код в синхронном. Но проблема появляется когда в средне/большом проекте, изменение одной синхронной функции на асинхронную её версию, приводит к лавинообразным изменениям во всем проекте. Тут вам никакой SOLID не поможет. Заденет всё что выше по call stack. И потом от толкнется от main и вернется назад по всему проекту. Тут сразу трогаем все юнит-тесты. А если они были сильно-связанные как часто любят делать - "А зачем нам мокать в каждом тесте ? Можно же написать отдельный класс для мока всех юнитов", то это еще веселее у вас или получается флаг как мокать (с Task<T> и без него) или два отдельных класса для моков которые потом очень тяжело сопровождать. Потом отлавливаем lock async c#. Потом кучу конфликтов на мерже. В общем не всё так просто.
@MaksimVolkau16 күн бұрын
Вы часто говорите о нормальном коде, имея в виду энтерпрайз. Хотел обратить внимание, что код написанный в библиотеках, которые использует энтерпрайз вполне себе нормальный :). И как раз использует эти ref return и так далее, что бы энт. меньше волновался о перформансе. Одно без другого не работает.
@tt0nix15 күн бұрын
Да, безусловно. Под «нормальным» я чаще всего имею ввиду «повседневный», тот с которым большинство разработчиков сталкиваются каждый день. Обычно это не библиотеки, а именно энтерпрайз приложения. Кстати, если у вас есть примеры, где в популярных (не MS) библиотеках авторы используют эти конструкции, пришлите. Ибо, заглядывая внутрь библиотек, тоже довольно редко встретишь ref'ы.
@anatolykukanov398314 күн бұрын
Либки это вообще свой отдельный мир :), то что применимо для enterprise (code practice) как правило не применимо в либках
@MaksimVolkau14 күн бұрын
@anatolykukanov3983 Но язык то один. Поэтому выбросить одно или другое из него - не вариант. Даже если мне конкретно эти фичи не нужны, то моей либе нужны.
@tt0nix8 күн бұрын
@@MaksimVolkau Я согласен, что выбрасывать низкоуровневые конструкции нельзя. На них весь ASP держится, как минимум, а его уже использует большенство разработчиков. Просто хочется побольше улучшений не только в группе низкоуровневых операторов, но и в общеиспользуемом C#.
@sergey836620 күн бұрын
а вообще со старта странное утверждение, что за последние 10 лет накопили опыта с фп. по факту поболтали и забыли. сколько то бы ни было широко в мейнстриме его не появилось
@sergey836620 күн бұрын
объекты - замыкания для бедных. а замыкания - объекты для бедны. ваш филосораптор
@ЭдгарЭдгар-с4л20 күн бұрын
Переход к подписке на телеграм был уморительный😂
@Nik-cv5bi20 күн бұрын
Со звуком проблемы (
@bananasba21 күн бұрын
Сделал все тоже самое (и даже больше) через DI, перехватить можно и протектед виртуальный метод, опять же зависит от инструмента. С этим всем много нюансов, но тут про них почти ничего не было. Вобще немного пугает, что-то вынужден с этим потом жить )
@sergeyz.584523 күн бұрын
👍🏻
@maxm107925 күн бұрын
очень нужно получить исходники демо версии)
@zachemny25 күн бұрын
Ошибка сразу же: ThreadPool вовсе не обязателен для асинхронного выполнения задачи. Задачи выполняются на нём, только если пользователь это явно указал при помощи Task.Run() или TaskFactory.StartNew(). Континуации выполняются на потоке из тред-пула тоже далеко не всегда - зависит от текущего контекста. Так что в целом таски и тред-пул - перпендикулярные понятия.
@illson466626 күн бұрын
что за дела, 90% слайдов - темная тема, 10% светлая. О людях подумайте
@МихаилВирстюк19 күн бұрын
Ну что тут делать. Когда у тебя темная тема в браузере - весь интернет такой :)
@MrCommanderKid27 күн бұрын
Спасибо. Интересно! Предлагаю async2 переименовать в asyncDvaYopta
@evgix27 күн бұрын
Печально что отказались от зеленых потоков, но ввели какую-то чушь с async2 (как студенты, ппц)
@pavelkobjakov414827 күн бұрын
Отличительная черта любого программиста - выбрать слово, которое он станет коверкать ФреймвЁрк, репозИтори Кажется, это проклятье лежит на каждом из нас)
@buhack9327 күн бұрын
Доклад супер!
@redkostia27 күн бұрын
Палец вверх за фуллстек разработчика! Кстати, щас с блазором опять стали фуллстеками😂
@user-mr-m1231228 күн бұрын
Спасибо, доклад интересный. Всегда было интересно разобраться с АОП в C#, но пока руки не доходили. По докладу, как-то слишком много информации получилось, 100+ слайдов, некоторые слайды пролистывались быстро. Еще видео не передает лазерную указку, но с этим ничего не поделать.
@TeppopucT28 күн бұрын
У нас есть паттерны проектирования. Но нет никаких правил/рекомендаций/паттернов по асинхронному коду. Надеюсь фраза "сложный асинхронный" со временем станет моветоном. Потому как здесь просто не хватает опыта и каких-нибудь стандартов
@СерёгаСокольский28 күн бұрын
видимо Golang уже в несколько раз быстрее, раз майки зашевелились
@pulodian27 күн бұрын
Go и Rust во многом сейчас лидруют по скорости. Они между собой конкуренты.
@MrCommanderKid27 күн бұрын
Притом сейчас Гошников как собак нерезаных. Раньше шарпы по скорости не сильно го уступали, сейчас, наверное все не так радужно. Интересно на реальную картину глянуть.
@evgix26 күн бұрын
Го всем класть, испугались гринтредов джавы.
@MrCommanderKid24 күн бұрын
@@evgix походы гринтреды быстрее и лаконичней получаются. С другой стороны, пока дотнет машину не перепишу, быстрее не получится
@VoroninPavel28 күн бұрын
А еще вас ждет бААААльшой сюрприз, когда вы в NativeAOT коде попытаетесь вызвать Compile у Expression<Func<...>>
@AEF23C2028 күн бұрын
пишите свои потоки не порите муму
@ЕгорС-г8д28 күн бұрын
Блин Саша все перебивает, неприятно слушать
@Guitarist13828 күн бұрын
А прошлые части имеет видеовариант?
@havendv28 күн бұрын
Касательно JSON Schema Exporter - Эти схемы нужны, помимо прочего, чтобы описывать tools для LLMок (OpenAI/Ollama/Anthropic/Gemini), там кстати также есть вариант без рефлексии который поддерживает Trimming/NativeAOT
@tt0nix25 күн бұрын
А можете дать интересных примеров tools для LLMок? Что такого полезного можно выжать из схемы.
@MirrorBoySkr29 күн бұрын
Года три назад я зашел на новый проект и удивился большому количеству вот таких records и статических свойств с инстансами у них. Всегда недоумевал, зачем этот оверкилл. Ведь есть Enums. Ну вот теперь получил разумное объяснение :))) Спасибо
@kolebynovАй бұрын
1:25:40 я тоже не останусь в стороне. Я для себя сделал source generator для генерации DU, чтобы использовать вместо enum'ов, называется Dusharp (github/kolebynov/Dusharp). Киллер фича - DU в виде структур, при этом по максимуму переиспользую память.
@tt0nix25 күн бұрын
Отлично, посмотрим. Спасибо.
@ArseniySergeevАй бұрын
SVE очень интересно и перспективно. Но как-то странно они её начали делать, без явного регистра-маски. Понятно что хочется это всё сделать наиболее "Generic Math". Но из-за этого сделали только часть и с кучей ограничений. Думаю стоило сначала переложить весь API на "низкий уровень" интринсики как SSE и AVX с отдельным типом VectorMaskа, затем это потихоньку поднимать на более высокий уровень с "Generic Math". Но всё равно очень хорошее достижение))
@kolebynovАй бұрын
Если что, SVE это чисто ARM штука. Это такой аналог SSE/AVX на ARM.
@ArseniySergeevАй бұрын
@@kolebynov это понятно, если что
@tt0nix25 күн бұрын
Это только первые шаги. Может ещё допилят.
@VoroninPavelАй бұрын
Во-первых, С# упирается в ограничения рантайма. Есть много фич, которые народ годами просит, а они всё никак. Во-вторых, они часто идут на поводу у толпы, из-за чего рождаются фичи типа Primary Constructor'ов. Но при этом публика в массе своей не будет требовать ковариантность в классах или поддержу блоков для экспрешонов. Хотя для авторов всяких библиотек это нишевые штуки довольно полезны.
@tt0nix25 күн бұрын
Ну вот были же времена, когда затащили дженерики, linq, ковариантности. Начинает казаться, что все технические гении куда-то пропали. У руля остались только попсовики.
@VoroninPavelАй бұрын
Обязательные поля у DTOшек не должны быть nullable. По крайней мере, если используется MVC c ApiController, а не minimal api. Model Binder валидирует такие штуки и вернет 400 Bad Request, если свойства нет или оно null. И если вы их nullable объявите, у вас open api документ будет семантически неверный.
@tt0nix25 күн бұрын
Model binder - не панацея, он тоже часто бажет и ничего не гарантирует. Слишком много условностей должно совпасть чтобы надеяться на то что в контроллере придёт точно валидная модель. Я себе этого позволить не могу и другим не советую. Open API конечно жалко, но это самое последнее что должно вас волновать. Гораздо хуже если программа будет падать с NRE, что неизбежно произойдёт если не перестать обманывать себя и компилятор.
@VoroninPavel25 күн бұрын
@tt0nix ну с таким подходом ты и токен сам должен проверять, если считать, что фреймворк заглючит. По сути атрибут ApiController за тебя и проверяет валидность модели. В том числе дёргает интерфейс IValidatableOnject, где можно проверять поля на null, если так уж хочется. Но поля оставить не nullable, дабы семантику не портить.
@tt0nix23 күн бұрын
@@VoroninPavel Вообще нет никакой связи. Посыл не в том что фреймворк может иногда заглючить, а в том что есть огромный пласт примеров где он просто не работает уже сейчас. И можно надеяться что таких ситуаций не будет в нашем приложении никогда, а можно не обманывать себя и делать хорошо. Например EF прекрасно работает с nullable, там можно полностью на него положиться. В вот ASP, Options, STJ - плохо работают (про это и статья), нельзя на них надеяться, они точно подведут.
@VoroninPavel23 күн бұрын
Когда при наличии атрибута ApiController ModelBinder не валидирует модель? Семантика должна рулить. На уровне контракта required поля не должны быть nullable. Можно руками дополнительно проверить (в большинстве случаев не требуется). В публичных методах, если тип not nullable, я все равно делаю проверку, потому что от очумелых ручек с оператором ! анализатор не спасет. Но это же не значит, что мне надо объявлять тип аргумента как nullable. Так и в DTOхах
@tt0nix21 күн бұрын
@@VoroninPavel , в случае если сериализатор засунет в DTO null (примеры в статье), ModelBinder ничего не скажет. Очумелые ручки надо отрубать, что тоже прекрасно делается анализаторами, которые умеют проверять неправильное использование языка. Основная мысль заключается в том, что компилятору врать нельзя. Делая DTO не нулябельными, ты врёшь компилятору, контроллеру и всем своим потребителям. Null там лежать может (про это статья). Это ничем хорошим не закончится. Ты. перекладываешь на рантайм ошибку, которую мог бы поймать на этапе компиляции. Это тоже самое что отказаться от строгих типов и в рантайме надеяться что у тебя в object лежит то что ты ожидаешь.
@pixelsaysmeowАй бұрын
Спасибо за отличные подкасты :) В весну 23 года весь этот подкаст и, особенно, тема дискриминации женщин в IT очень поддержала (провалила в 27 лет дважды собесы на стажировку, надежду потеряла, т к непонятно было, почему не прошла, зато с 1 собеса попала на работу, чем страшно довольна уже больше года) ^^
@sergey8366Ай бұрын
ох, вангую du запилят так, что в f# задолбаюися саппортить как это уже случилось с рекордами. сделать нормально как в языках где это идеоматично у них не вариант. лучше бы не делали.
@MrMusukАй бұрын
Ничего полезного не сказано ни про self-hosted решения для ротации и хранения секретов вроде Hashicorp Vault, ни по поводу того, как эти секреты пробрасывать в .net приложение.
@sirpeace_codingАй бұрын
Предельно понятный и полезный доклад. Смотрел несколько разных по телеметрии, этот понравился больше всех. Спасибо, Александр!
@ВикторНартов-ц3бАй бұрын
привет, спасибо за выпуск, хочу про тесты архитектуры!
@havendvАй бұрын
Занимаюсь созданием LangChain NET проекта(а также поддерживаю много AI SDK на базе OpenAPI спецификаций и собственного генератора) и у нас есть много возможностей запустить LLM локально помимо LLamaSharp - например Ollama/LMStudio - и по мне они гораздо удобнее. Недавно также писал Steve Sanderson касательно новых ChatClient абстракций и это будет добавлено в ближайшее время(мной или кем то из Microsoft через PR), поверх этих абстракций будет работать логирования, DI, caching, telemetry, function invocation
@tt0nixАй бұрын
Спасибо за дополнение, будем с нетерпением ждать. Если вам подвернутся интересные статьи по теме, присылайте. Мы, к сожалению, далеки от этого направления, глубоко сами копнуть не можем.