Задать вопрос
  • Как на практике реализуют распределения прав доступа?

    Привет, помню, вы мне отвечали в ветках по c#. Можете пояснить несколько моментов. Для своих домашних проектов (.net framework) я пользуюсь аутентификацией/авторизацией по умолчанию, не уверен, как правильно называется база, которая создается. Там всё достаточно гладко и понятно. Появляются фильтры (аттрибуты контроллеров), что-то типа
    [Authorize(Roles="Admin")]
    Есть еще некие клаймы для более тонкой настройки. Есть несколько готовых методов работы со всем этим.
    Но вот что меня смущает, в более сложном варианте есть три уровня для авторизации: это фронтенд, бекенд и база.

    На уровне бека я привел строчку, мы можем отсекать пользователей и это готово из коробки.
    На уровне базы, если это нужно (например, есть организация и у неё есть список сотрудников. Чтобы пользователь, привязанный к организации, мог получить только сотрудников своей организации одним запросом ToList без дополнительных Where), можно сделать фабрику контекстов и разбирать по клаймам к какой организации привязан пользователь на все запросы накидывать Where.
    Ну или чем-то подобным. Суть в том, что реализовать можно, но уже нужно что-то допиливать руками.
    А вот с фронтом, например, накинуть disable на какие-то кнопки, придется так же кастылять проброс доступных use case-ov, экшинов, или кто как называет, на клиент. В смысле, на клиенте доработки понятны, но созданная база для этого уже не подходит, то есть весь этот уровень нужно самому писать. Или я это как-то не так себе представляю?
  • На чём пишут ПО для роботов, уместен ли Python?

    А если мне кроме ардуинки ничего и не надо, я могу продолжать писать на "своих яваскриптах"? На профессиональном уровне, разумеется :)
  • Как соединить Arduino и Raspberry Pi 3?

    Привет, подскажите, пожалуйста, UART это ж и есть через usb?
  • Кто может разжевать асинхронные контроллеры?

    Jeer
    @Jeer Автор вопроса
    Толстый Лорри, Ладно, спасибо вам большое, видимо и правда придется самому курить нагрузочное тестирование ) просто как-то странно получается, что все вокруг говорят, что один подход лучше другого, но никто не приводит конкретных замеров производительности. Максимум, что есть, это графики, аналогичные приведенному вами. Но, блин, это ж такая вещь, в которую нельзя верить на слово.
    Даже не так, мне просто нечего возразить человеку, который говорит, что синхронный стиль лучше и быстрее. Он требует показать график сравнения, которого я нигде не нашел )
  • Кто может разжевать асинхронные контроллеры?

    Jeer
    @Jeer Автор вопроса
    Толстый Лорри, вот, я про это и говорю. И там и там есть накладные расходы. Я понимаю, что переключение контекстов происходит постоянно, и, в случае с простаивающими потоками это совершенно бесполезная операция. Но я хочу посмотреть в цифрах. Какова разница в производительности в каких-либо единицах. Почему эту информацию так тяжело найти?
  • Кто может разжевать асинхронные контроллеры?

    Jeer
    @Jeer Автор вопроса
    Толстый Лорри, Простите за мою упёртость, со стороны я сам себе напоминаю барана, который смотрит в столб.
    Я понимаю, что асинхронный режим может одновременно обслуживать больше запросов, чем количество потоков в пуле. Это прекрасно видно на графике, с ограниченным количеством потоков в 50 штук. Я говорю про то, что это ограничение проставлено нами вручную. По умолчанию стоит 5000, я могу поставить хоть Int32.Max значение для количества потоков в пуле потоков в IIS (свойство appConcurrentRequestLimit).
    Я понимаю, что в таком случае, если у нас висит несколько сайтов, остальные могут просто встать раком, но вот если у нас одна виртуалка с одним веб сайтом, то к чему это синтетическое ограничение на количество потоков? Убрав это ограничение, у нас не может возникнуть ситуации, когда количество запросов будет превышать количество потоков в пуле. Не будет использоваться очередь. Просто сервер сдохнет на каком-то определённом количестве. И мой начальник мне говорит, что в таком случае при асинхронном режиме у нас будет делаться дополнительная работа на приостановку/возобновление и приложение, написанное в синхронном режиме будет работать быстрее (и сдохнет позже).
    Я нигде не могу найти ни подтверждение этого, ни опровержение. Мне нужен график с цифрами.
  • Кто может разжевать асинхронные контроллеры?

    Jeer
    @Jeer Автор вопроса
    Толстый Лорри, Отлично, спасибо большое, это один из графиков, который был нужен! ) Остался еще один, на той же самой конфигурации, с тем же самым тестом, только когда количество потоков в пуле выставляется максимальным. Я так думаю, что в таком случае, при превышении количества запросов (одновременно выполняемых) над количеством потоков в пуле сервер просто упадёт (в обоих режимах). Но до этого момента, производительность у обоих режимов должна быть одинаковой (как меня уверяют, производительность в синхронном режиме будет даже выше, так как не будет накладных расходов на упаковку/возобновление работы).

    Станислав Макаров, Михаил, khimalex, Спасибо и вам большое, я чуть позже пролезу по приведенным ссылкам, упорядочу всю информацию. Но в первую очередь меня сейчас интересуют цифры, сравнение в абсолютных величинах. Толстый Лорри привёл один из графиков, когда количество потоков в пуле выставлено 50. На этом графике явно видно преимущество асинхронного подхода. Но сравнение подходов, когда количество потоков в пуле выставлено в максимум я нигде в интернете найти не смог. У вас есть такая информация?
  • Кто может разжевать асинхронные контроллеры?

    Jeer
    @Jeer Автор вопроса
    Станислав Макаров, как работает await я понимаю. Что такое сопрограмма не знаю. Станислав, что за наводящие вопросы? Вы пытаетесь доказать, что я неверно понимаю работу асинхронных методов? Я этого и не скрываю, я сам пытаюсь понять как правильно. Но, в первую очередь, меня интересуют конкретные цифры. Говорить, что, переписав синхронные вызовы на асинхронные, мы получим выигрыш в производительности, но не привести ни одной цифры - это пустые слова. Об этом пишут во всех статьях и туториалах. Я не спорю, я лишь прошу сводную таблицу. У вас есть такие данные?
  • Кто может разжевать асинхронные контроллеры?

    Jeer
    @Jeer Автор вопроса
    Артем, извините меня, я совсем не понял про вашу "фишку", да и не об этом речь. Без цифр это всё пустые слова и ничем не подкреплённые советы. Мне нужны конкретные числа
  • Кто может разжевать асинхронные контроллеры?

    Jeer
    @Jeer Автор вопроса
    Артем, Я считаю, что использовать async/await правильно. Даже если нет нагрузки на сервер, от программиста не убудет писать сразу в асинхронном стиле, от этого не увеличиваются трудозатраты. Но писать так, даже если проект не нагруженный вырабатывает привычку писать правильно.
    Мой начальник говорит мне НЕ использовать асинхронные операции, так как для веба они не нужны и даже вредны. Нужно сохранять единый стиль кода в проекте, я с этим согласен. Но писать так, как я считаю не правильно... это меня немного утомляет и тревожит.
    Вы меня обнадеживаете словами
    Делайте async и будет вам счастье.

    Но без цифр это всё остаётся пустыми словами и я не могу в счастье.
    А с другой стороны, вы так же говорите, что разница в синхронном и асинхронном режиме не проявится на малых нагрузках (а начальник говорит, что вообще никогда не проявится) и поэтому мне нельзя писать в асинхронном стиле.
  • Кто может разжевать асинхронные контроллеры?

    Jeer
    @Jeer Автор вопроса
    Станислав Макаров, Привет!
    Я не говорю, что это правильно. Именно с этим я и пытаюсь разобраться. У меня не укладывается в голове, как поток может освободить ресурсы и вернуться в пул. В синхронном режиме поток простаивает (он не жрёт ресурсы на вычисление, он ничего не делает). В асинхронном режиме система создает новый поток, в него записывается весь контекст первого потока. После этого первый поток возвращается в пул и может обрабатывать другие веб запросы. Но второй, системный поток, он так же простаивает, по сути, в нём есть вся информация для продолжения работы, все ресурсы, которые были (выделенные переменные и прочее), они никуда не деваются. Просто этот поток не жрёт вычислительные мощности, он так же простаивает.
    И вот соль в том, что когда на веб пул потоков выделено мало потоков (по сути, наше установленное дополнительное ограничение), тогда такие операции (async/await) позволят веб. серверу обрабатывать бОльшие нагрузки. Но если мы просто увеличим количество потоков в пуле (по сути снимем установленное нами ограничение), тогда наши методы с async/await просто порождают новые системные потоки и жрут на это дополнительные ресурсы. Фактически, у синхронных вызовов должно быть преимущество перед асинхронными.
    Мне нужны цифры нагрузочного тестирования.
  • Кто может разжевать асинхронные контроллеры?

    Jeer
    @Jeer Автор вопроса
    Артем, я написал, что я НЕ умею :shuffle:
  • Кто может разжевать асинхронные контроллеры?

    Jeer
    @Jeer Автор вопроса
    await еще не означает создания дополнительный поток (тред). Особенно, когда дело касается асинхронного ввода-вывода.

    Это я понимаю. Дополнительный поток выделяется на самой асинхронной операции, например,
    IEnumerable<Book> books = await db.Books.ToListAsync();

    Если эта операция будет во вложенной функции, то при вызове этой функции так же будет указан await, но фактически треад от ОС создастся при выполнении строчки, которую я привел. При этом поток из пула будет возвращен в пул. Это я всё прекрасно понимаю.

    Про десктопные спасибо. Есть главный цикл и его обрабатывает один поток. Если в обработчике будут долгие операции, то, добавив сюда асинхронность, ОС выделит еще один поток, который будет обрабатывать этот EventLoop?

    Про веб я достаточно расписал. Что за риск исчерпать пул потоков? Если мы выставим значение в максимальное, то количество потоков в пуле потоков станет равно количеству системных потоков? Не будет риска исчерпать пул? ) Есть какие-то конкретные цифры? Без сводной таблицы по тестированию сейчас это всё звучит как догадки, источником которых служат такие же статьи, которые попадались мне на глаза, но подтверждения я не вижу. Про "сигналить" тоже не очень понятно.
    Еще раз, в пуле потоков для веба содержатся системные потоки ОС? Просто там какое-то ограниченное количество? Или какие-то другие потоки? И вот этим async/await мы просто освобождаем поток из пула, но создаем системный поток. Получается, что нагрузка на сервер может быть увеличина, но система в целом будет загруженнее?
  • Где найти инвестора на it-проект?

    Пару лет прошло? как перспективный проект? )
  • Какие преимущества у C# и недостатки перед JS (Electron, NW.JS) для дескстопных приложений?

    Хм, спасибо за участие. Из первого абзаца я много чего не понял и полез ковырять интернеты. До рантаймовых оптимизаций я не дошел, что это?
    Рефлексии вообще полностью вырезаются, их нельзя использовать, они заменяются статическим связыванием.
    Я раньше думал, что если мы на выходе получили байт-код, то его выполнением занимается уже не CLR, мы избавились от всей .net framework-овской обвязки и .net core по такому же принципу может компилироваться под разные платформы.

    Про CLR, можете прояснить этот момент:

    .NET Native заменяет полную среду CLR на оптимизированную среды выполнения, которая в первую очередь содержит сборщика мусора. Оптимизированная среда выполнения находится в библиотеке mrt100_app.dll, которая является локальной для приложения и имеет размер только несколько сотен килобайт. Это возможно потому, что статическое связывание устраняет необходимость во многих операциях, реализуемых средой CLR.


    То есть я вижу, что CLR остается, хоть и в урезанном виде. Получается, в классическом варианте, эта среда сначала транслировала промежуточный язык в байт код и выполняла его. А в .net native она остается, но просто выполняет байт код?

    Мне кажется, что у меня какая-то не полная картина мира
    Вот наиболее полная статья, которую сегодня просматривал:
    https://docs.microsoft.com/ru-ru/dotnet/framework/...
  • Какие преимущества у C# и недостатки перед JS (Electron, NW.JS) для дескстопных приложений?

    Толстый Лорри, можно так, можно так. Тут не особо понятно из условий что собираются делать.
    В любом случае, clr это немного другая вещь, более низкого уровня и сравнивать эту "виртуальную машину" с обёртской скажем, апач кордова, которая на яваскрипте некорректно. В кордове можно использовать только то api, которое даёт кордова. Когда вы пишете на c#, у вас больше возможностей.
    Про натив код первых пару ссылок с гугла:
    https://habr.com/company/microsoft/blog/265889/
    https://docs.microsoft.com/ru-ru/dotnet/framework/...
  • Как в Entity framework динамически изменять критерий для выборки?

    Толстый Лорри, согласен ) я просто пытаюсь строить предложения максимально простым языком, чтобы не отпугивать людей ) хотя.. разве в отладке нельзя посмотреть уже готовый специфичный sql текст помимо expression tree? пойду поковыряю
  • Как отключить загрузку изображений в мобильной версии сайта?

    Привет!
    Для этих "относительно новых" тегов нужно смотреть на браузерную совместимость.
    Интернет эксплорер, я смотрю, вообще не держит данный тег. Если по спецификации на сайте нет поддержки ИЕ, то можно пользовать. Если в условиях значится поддержка, то использовать нельзя :(
    Ну и есть какие-то проблемы с файрфоксом и им же на андройде.
  • Краткий тест для web-разработчика?

    Серьёзно? Чтобы поддерживать пару магазинов на движках и шлёпать лендинги, нужен "настоящий рандом чисел"?
  • Как добавить class к динамически добавленным элементам на JQ?

    ну вообще говорят, что live заменили на on на динамических элементах, должно работать:

    // Было
     $('#mydiv .element').live('click', function(){
    // здесь параметры функции
    });
    
    // Стало
    $('#mydiv').on('click', '.element', function(){
    // здесь параметры функции
    });


    То есть, для динамических элементов селектор передается дополнительным параметром