Задать вопрос
  • Как с помощью рефлексии получить дженерик метод принимающий дженерик параметр?

    class Test
    {
        public T X<T>(T x) => x;
        public T X<T>() => throw new InvalidOperationException();
    }
    
    typeof(Test)
    .GetMethods() // Берём методы
    .Where(x => x.Name == "X") // с именем "X"
    .Where(x => x.IsGenericMethod) // обобщённые
    .Where(x =>
    {
        var parameters = x.GetParameters();
        var genericParameters = x.GetGenericArguments();
        // У которых только один generic-параметр и 1 аргумент, которые равны
        if (parameters.Length == 1 && genericParameters.Length == 1)
        {
            var t0 = parameters[0].ParameterType;
            var t1 = genericParameters[0];
            return t0 == t1;
        }
        else
        {
            return false;
        }
    })
    Ответ написан
    Комментировать
  • Что представляет собой C# без .Net?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Мащинный код невозможно представить без процессора, в котором есть огромный функционал, но можно ли работать на чистом машинном коде и в каких областях это может использоваться?
    Ответ написан
    1 комментарий
  • Зачем нужны корневые сертификаты?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Кажется, что вся эта конструкция держится на том, что тот единственный корневой (?) сертификат, которым подписаны все остальные, есть только у удостоверяющего центра.
    Именно. Система держится на доверии к УЦ.

    почему все так боятся, что кто-то установит в их систему левый корневой сертификат?
    Потому что это позволит злоумышленнику сгенерировать свои сертификаты на произвольные имена, подписанные корневым сертификатом, которому доверяет ваша система и, при возможности перенаправления трафика, отправить вас на свой сайт или просматривать ваш https-трафик, который вы считаете зашифрованным.

    И сразу второй вопрос: почему какой-нибудь Fiddler, который устанавливает в систему свой корневой сертификат вообще работает?
    Без установки своего корневого сертификата Fiddler не сможет перехватывать https-трафик. Тот, кто ставит себе Fiddler, должен понимать, что в системе возникает уязвимость.
    Ответ написан
    2 комментария
  • Xamarin актуален?

    Лучше под нет кор профилироваться.
    А вместо xamarin сейчас maui
    Ответ написан
    Комментировать
  • Как найти функцию?

    GavriKos
    @GavriKos
    Задачу можно разбить на две подзадачи:
    - перевод графика в чиселки - т.е. в пару x-y. Тут надо исходить из того что там за картинка.
    - по паре x-y можно математическими методами получить функцию, вот только она может быть не той что была изначально. Задача чисто математическая.
    Ответ написан
    Комментировать
  • Какой объем знаний и навыков нужно для того чтобы стать middle Rust разработчиком?

    vabka
    @vabka Куратор тега Rust
    Сейчас редко нанимают чистых растаманов, тк язык молодой.
    Обычно нанимают тех, кто переходит с других, более традиционных языков.
    Так что тебе сначала надо стать мидлом/сеньором в C++/Java/C#/C а потом дотянуть знания раста, чтобы уметь на нём решать задачи, аналогичные тем, которые ты решаешь с основным языком.

    Ну и соответствующий коммерческий опыт ~5 лет.
    Учитывай ещё и специфику Rust-проектов: это что-то новое, что требует безопасности и эффективности, где нельзя/нежелательно/невозможно использовать "Традиционные" языки.
    Так что и уровень ответственности и требуемых знаний будет выше, чем на аналогичную, например Java-позицию.
    Ответ написан
    1 комментарий
  • Почему метод дженерик типа в го существенно медленнее нативного?

    hugga
    @hugga Автор вопроса
    Из обсуждения https://github.com/golang/go/issues/50182 видно что проблема с производительностью generics не новая.
    При запуске бенчмарков с флагами получается ожидаемое мной ± равное время выполнения ф-ций:
    go test -bench=. -count=2 -gcflags=all=-d=unified

    BenchmarkNativeFunc-4            2029149               600.5 ns/op
    BenchmarkNativeFunc-4            2018277               591.7 ns/op
    BenchmarkNativeMethod-4          1962086               592.0 ns/op
    BenchmarkNativeMethod-4          2024234               603.9 ns/op
    BenchmarkGenericFunc-4           1985313               573.4 ns/op
    BenchmarkGenericFunc-4           2053454               585.1 ns/op
    BenchmarkGenericMethod-4         2067790               591.3 ns/op
    BenchmarkGenericMethod-4         2054346               612.2 ns/op

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

    Там же написано

    Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
    Ответ написан
    Комментировать
  • Почему в СТЕКЕ разрешается выделять достаточно мало памяти?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Да, большинство ресурсов выделяется динамически.

    Во-первых, потому что стек программе выделяется один раз сразу, а вот динамическую память все программы разделяют между собой. И пока одна программа ест гигабайт - вторая программа может жрать 10, а когда вторая завершится - первая может съесть эти 10 гигабайт. Со стеком так не получится, он должен быть непрерывен по адресам. И тогда каждой программе придется всегда выделять себе максимально возможный объем памяти, даже если он может не понадобится. Именно поэтому программы обычно не выделяют много стека.

    Во-вторых, часто неизвестно заранее, сколько и каких ресурсов надо будет выделять. Плюс ресурсы могут быть использованны в куче разных функций, а значит должны жить глобально или отдельно от какой-то одной функции (например в main), но тогда все будет в куче в одном месте и это тупо неудобно.

    А так, для ускорения выделения памяти есть, например, аллокаторы на стеке: Заводится локальный массив и специальный менеджер памяти вместо выделения ее в куче, выделяет куски из этого массива. Но их не используют для хранения больших объемов данных по первой причине - это очень расточительно по памяти.

    Edit: да, если вам нужно больше стека, можно сделать так, чтобы программа получала больше стека. В С++ это делается параметром линкера.
    Ответ написан
    Комментировать
  • Какой стек технологий лучше всего подойдет для работы с объемными базами данных?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    исходя из вышеизложенного, какой бы стек технологий вы бы выбрали как разработчик чтобы решить вышеописанную задачу?

    Для начала немного контекста - 2 важных примечания:
    1) Описанная задача решается на любом упомянутом стеке, + еще десяток возможных вариантов (Java/Spring, питон, нода, дотнет, голанг и т.д.).
    2) Быстродействие системы зависит от ее самой медленной части, и в 95% случаев самая медленная часть - БД, просто в силу специфики работы: много данных со сложными связями, выборки с сортировкой и фильтрацией из большого массива и вот это все, в то время как язык бэкенда в основном выполняет достаточно простые манипуляции с уже готовыми наборами данных (за редчайшими исключениями, которых в вашем кейсе нет, или они не описаны в вопросе).

    В вашем случае:
    - база можно сказать совсем небольшая, до 1 миллиона записей условный мускуль ворочает весьма шустро, если железо соответствует.
    - задача сбора метрик достаточно тривиальная, особого ума в сохранении действий пользователя не надо, бОльшая часть работы - вывод в красивые графики и написание быстрых запросов с хитрыми выборками/агрегациями, немного пошаманить с формулами, возможно делать какие-то сводные выборки с денормализованными результатами для отчетов и прочие мелочи. Работа не сложная, но нудная, и ее много.

    Насчет стоимости и условий:
    полный самопис 150к+ (я это не тяну) или же сайт на Laravel +MySQL а дальше варьируется.
    полный самопис - либо маркетинг, либо идиотизм, писать на голом языке не будет ни одна нормальная студия, в принципе в данном случае либо используется фреймворк и заказчику преподносится как "сделано вручную программистами девственниками под светом серебряной луны", либо разработчики идиоты, мнящие себя круче всех (нет). В первом случае это то же что и "сайт на Laravel +MySQL" (норма и стандарт для среднего уровня студий), во втором - развод на мани на пустом месте и попытка продать г**но в обертке "иксклюзивнасти".

    По цене - на сегодняшний день, если я не ошибаюсь, 150к деревянных это +- 1000уе. Цена приемлемая за нормальную работу, если найдете дешевле "на Laravel" - думаю будет вообще ок. Опять же, цены штука такая, кто-то за копейки сделает хорошо, кто-то за дорого каку сляпает. Влияет так же регион, понятно что в Мск цена будет серьезно больше чем в условном Челябинске...

    Важный момент - нормальное ТЗ в разы упрощает как поиск исполнителя, так и оценку работы. Я бы на вашем месте погрузился именно в тему создания качественного ТЗ, нежели в дебри современных технологий.

    UPD:
    проект планируется на 100 к+ посетителей в месяц...
    предупреждают что если аудитория достигнет условных 100 тысяч в месяц Лара начнет потихонечку задыхаться от нагрузки,
    ок, пусть будет 200к для наглядности.
    В среднем, если это маркетплейс, то постоянных посетителей будет не много, думаю около 10%, так что ими можно пренебречь. Условно - 200к / 30 дней = 6600 в сутки, при активных 10-12 часах посещения это ~600 в час. Пусть на 1 посетителя будет 5 запросов страниц, это 600*5=3000 в час = 50 в минуту или менее 1 запроса в секунду.
    Даже если умножить это на 30 (допустим такая пиковая нагрузка), 30rps вообще "ниачем". Не знаю кто там вам считал то это проблема, любое современное железо среднего уровня вытягивает без напряга.
    Ответ написан
    2 комментария
  • Корректно ли сравнивать цифры объявленные как строки, т.е объектом string?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как в ситуации ниже, поступает компилятор?

    Компилятор вставляет вызов string::operator <. Если это std::string, то оператор выполняет лексикографическое сравнение, т.е. сравнивает символы обеих строк по очереди до первой различающейся пары, меньшей будет та строка, которой принадлежит символ с меньшим кодом.
    В примере "100.05" < "100.03" результат будет false потому что 5 > 3.

    Могут ли быть какие-то проблемы

    Для такого сравнения строковые представления чисел должны начинаться разрядами одного веса. Т.е. можно сравнивать "100.05" и "099.1" (первая цифра и слева и справа -- сотни), но нельзя сравнивать "100.05" и "99.1" (слева первая цифра -- сотни, справа -- десятки).
    Ответ написан
    Комментировать
  • Какую конфигурацию лучше использовать для гипервизора с многопользовательской рабочей станцией?

    @LuchS-lynx
    инженер-ПТО
    посмотрите в сторону ProxMox, полностью бесплатный, с веб-интерфейсом, позволяет делать бэкапы, работает как на серверном, так и на игровом железе, установил на свой рабочий ноут и пробросил ВК в ВМ... Под капотом Debian Linux + KVM, что будет точно быстрее Hyper-V.
    https://www.proxmox.com/en/

    https://pingvinus.ru/gallery/4067

    Эта опенсорс-платформа виртуализации, построенная на базе Debian, KVM, LXC, Ceph, давно зарекомендовала себя. Авторы, кстати, говорят о более чем полумиллионе хостов, где она развернута.

    https://habr.com/ru/post/589901/
    Ответ написан
    7 комментариев
  • Как хранить строку в виде байтов?

    @Akela_wolf
    Extreme Programmer
    Что-то я не понимаю чего вы хотите добиться. То что вы говорить - низкоуровневое программирование, для этого вам не нужен C#. Берите C/C++ и наслаждайтесь прямой работой с памятью.

    Вообще со строками есть два подхода. Первый использовал Pascal: в нулевом байте строки хранится её длина. Так как паскаль использовал однобайтную кодировку (ANSI), то этого было достаточно для хранения строк длиной до 255 байт. Вы, в принципе, можете использовать и 2 и 4 байта. И это неплохо работало.
    Второй подход - это подход из C++, когда строка заканчивается символом '\0' (zero-terminated string). Тут тоже есть свои тонкости, в основном связанные с тем, что при определении длины строки нужно помнить что '\0' не входит в её длину. Еще есть потенциальная ошибка, связанная с выходом за пределы строки и повреждением следующих за ней блоков памяти.

    Выбирайте - какой подход вам больше нравится.
    Ответ написан
    2 комментария
  • Почему транслятор ожидает указатель в моем коде?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Параметр функции int arr[],

    Но далее у вас arr[i][j]. Компилятор пытается взять индекс j, но перед ним же уже число. Вот он вам и говорит "начальника, индекс я у массива (указателя) взять могу, а тут число, непонятно".

    Вы обращаетесь с одномерным массивом, как будто бы он двумерный.
    Ответ написан
    Комментировать
  • Как сделать проверку на null?

    Вообще хз, как ты не додумался до самого простого - через if:
    string name;
    if(entity.Name == null)
    {
      name = "Name";
    }
    else
    {
      name = entity.Name;
    }
    DataModel dataModel = new DataModel()
    {
      Id = entity.Id,
      Name = name
    };
    // ...

    Но вообще есть вот такой синтаксис:
    new DataModel
    {
      Id = entity.Id,
      Name = entity?.Name ?? "Name"
    }

    Если нужно ещё обрабатывать пустоту, то самый короткий вариант будет как у freeExec
    Вот ссылки на документацию:
    string.IsNullOrEmpty: https://docs.microsoft.com/ru-ru/dotnet/api/system...
    Про ??: https://docs.microsoft.com/en-us/dotnet/csharp/lan...
    Про ?.: https://docs.microsoft.com/en-us/dotnet/csharp/lan...
    Ответ написан
    Комментировать
  • Стоит ли обновляться на Windows 11?

    mindtester
    @mindtester Куратор тега Windows
    http://iczin.su/hexagram_48
    переехал на устаревающем железе (десктоп)
    (адрес скрипта https://github.com/AveYo/MediaCreationTool.bat)
    доволен как слон - впечатлила экономия ресурсов (w10 была без кастраций, только свой легкий тюнинг для облегчения)
    основное применение компа:
    - кодинг VS (иногда и тяжелые проекты собираю, обычно это пересборка под себя опенсорсных серьезных либ)
    - WSL2 как приложение к пункту выше
    - БД, но не тяжелые, макеты к пп 1
    - активный вебсерф
    - ни каких игр

    ps к новым пуск/таскбар адаптировался легко и доволен. из тюнинга не хватает только вертикального таскбара. личные давние вкусы :)... но его и в 10 то мало кто использовал. так что это только примечание. вряд ли аргумент :)
    Ответ написан
    1 комментарий
  • Как реализовать union типы для action?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Также как и всегда, в этом суть типов.
    Переданное значение может быть или одного типа или другого. И пока ты явно не проверишь через if какого же именно типа прилетело значение - использовать его нельзя.
    Ответ написан
  • Нужно ли везде использовать TypeScript? или это хайп?

    @Akela_wolf
    Extreme Programmer
    В пет-проектах вы можете использовать то что нравится лично вам. На то они и пет-проекты. Лично я обычно использую в пет-проектах то что хочу опробовать на практике, просто чтобы понять как с этим работать. В разное время это были Python, Typescript, Scala, Haskell, сейчас добрался до Kotlin Multiplatform.

    Если же говорить о целесообразности использования TypeScript - она есть. И начинает раскрываться на больших проектах, когда становится сложно уместить в голове все детали: что, где, и какого черта типа? Вот в таких случаях тайпскрипт и выручает. В том числе когда запутался в трех объектах и передал не тот тип - джаваскрипт свалится в рантайме (да и то может свалиться не всегда, а только когда звезды сойдутся), тайпскрипт не скомпилируется.

    Так что изучать этот язык на мой взгляд стоит. Использовать ли его в игрушечных проектах, не будет ли он там overkill - решать вам.
    Ответ написан
    Комментировать
  • Как принято шарить *.proto файлы между командами?

    @Akela_wolf
    Extreme Programmer
    В дополнение к ответу Василий Банников
    Сложить файлы *.proto в отдельный репозиторий и настроить CI чтобы он по этим файлам генерил артефакты для Go и nodejs (и складывал их в репозиторий артефактов, для npm и что там у го в качестве менеджера пакетов). А в проектах добавить зависимости от этих артефактов и, таким образом, избавиться от необходимости иметь сами *.proto файлы в проектах.
    Ответ написан
    4 комментария
  • Как создать контейнер приложения, которое развернуто?

    @rPman
    в общем случае это невозможно
    docker файл это список команд, которые необходимо выполнить на 'нулевой системе' чтобы приложение заработало

    определить это автоматически почти невозможно, особенно отделить если на машине установлено несколько приложений, какие действия для каких приложений были сделаны.

    в некоторых случаях, пакетный менеджер linux предлагает вполне законченное описание того что нужно для того чтобы приложение заработало, к сожалению в реальности не все так просто, не все приложения корректно описаны, а для некоторых требуется ручная первоначальная настройка
    Ответ написан
    2 комментария