• Есть ли смысл завершать задачи генерируя ошибку(token.ThrowIfCancellationRequested()) если есть спобос получше?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Во-первых, ваш заголовок вводит в заплуждение: в нем - про завершение процесса, а справшиваете вы про завешение задачи.
    Во-вторых, задача может завершаться переходом в разные конечные состояния (они фиксируются в поле Task.Status). По оператору Return задача переходит в состояние RanToCompletion, по ThrowIfCancelationRequested - Canceled. Это - два логически разных состояния завершения (есть еще и третье - завершение по необработанному исключению, Faulted). Если коду, создаывшему задачу, совсем без разницы, как именно завершилась задача и вообще, завершилась ли она, то можете делать как угодно.
    Но, очень часто код, связанной с задачей,к примеру, операция await для задачи, ведет себя по-разному, в зависимости от состояния завершения задачи, получение результата задачи - тоже. А для задачи продолжения можно задать условия, при каком состоянии завершения предыдущей задачи эта задача продолжения будет запущена. То есть, состояние завершения задачи обычно имеет значение.
    Ответ написан
    Комментировать
  • Какую видеокарту выбрать для машинного обучения, майнинга, гейминга и 3д-моделирования?

    @RigidStyle
    Есть смысл рассмотреть в первую очередь 4060, 3090 (бу) или 4090.
    Почему такие карты? Потому что нейросети часто упираются в память. И чем дальше, тем сильнее. Отсюда надо брать максимум памяти в первую очередь.
    Во вторую - поддержка драйверами. Поэтому последние поколения.
    В третью - зеленые работают лучше (стабильней) почти во всех нейросетевых историях. Поэтому брать красных - это страдать вдвое больше.
    4060 есть версия на 16гб, что на уровне 4080, но по цене дешевле (значительно). Отсюда это лучшее бюджетное решение. Но минус - она на 8 линий пси-е, отсюда плату пси-е5 или пси-е4 надо иметь. При пси-е3 будет потеря 10-20 процентов в играх например по ФПС.
    3090 можно взять БУ за адекватную цену. Они 24 гб памяти имеют, и в добавок достаточно производительны.
    4090 по причине тех же 24гб памяти. Что лучше чем 16 у 4080 на целую треть. Как я уже сказал, память в контексте обучения ИИ часто стает критической проблемой.

    Для 3д моделирования 4060 хватит с запасом.
    Конечно можно взять и 4080, но это больше с акцентом на игры.
    Отсюда в текущих реалиях если хочется быструю карту на весь бюджет, то 4080, если быструю и подешевле, то 3090бу, если не пугает БУшность. Если карту, что бы "хватало", то 4060 на 16гб (критически важно на 16гб, потому что они на 8 еще есть). 4090 конечно топ, но скорей всего в бюджет не влезет. Да и часто есть смысл взять карту послабее, а потом обновиться на следующее поколение тоже на уровне "послабее", чем брать "топ" и долго на нем сидеть.
    Конкретно в вашем случае примерно прикиньте, чем вы будете заниматься больше, играми или машинным обучением. И уже на основе этого делайте выбор.
    Ответ написан
    Комментировать
  • Почему в моем коде cpu быстрее gpu?

    Maksim_64
    @Maksim_64
    Data Analyst
    GPU не всегда быстрее CPU.

    1. Если будет много вызовов к памяти с небольшими объемами данных, CPU будет быстрее.
    2. Если операция не может исполнятся параллельно то эффективность GPU падает.

    В первом примере, у тебя даже тренировки модели нет, ты ее загружаешь., то есть основное место где gpu сильно быстрее cpu это операции с тензорами во время тренировки модели, его нет. Во втором примере есть тренировка модели, (операции с тензорами), то там GPU должен быть быстрее.
    Ответ написан
    Комментировать
  • Не работает код, что делать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    ; Вывод суммы элементов выше главной диагонали
        mov ah, 2
        mov dl, cl
        int 21h

    функция 2 прерывания int21h выводит один символ с кодом в dl. Если код суммирования работает верно, это 2 + 3 + 6 = 11. Символ с кодом 11 -- непечатный, и, даже если бы он был печатным, подозреваю, что это не то, что тебе было нужно. В общем случае нужно переводить полученную сумму в строку цифр и эту строку печатать.
    Ответ написан
    8 комментариев
  • От чего появляеться исключение System.IO.IOException: "The process cannot access the file '37.txt' because it is being used by another process."?

    Adler_lug
    @Adler_lug
    File.Create возвращает FileStream, т.е. он и держит файл открытым
    Ответ написан
    Комментировать
  • Что делает компьютер, когда получает машинную инструкцию поделить на ноль?

    vabka
    @vabka
    Токсичный шарпист
    Исключение будет - специальный флаг поднимается.
    Компилятор Си в программу, естественно, встраивает проверку этого флага и аварийно завершает.
    Аналогично с лиспом.

    https://software.intel.com/content/dam/www/public/...

    https://software.intel.com/content/dam/www/public/...

    Поведение также зависит от других флагов, так что читай мануалы)
    Для одного только IDIV в мануале целых три страницы расписано.

    Описание инструкцию во втором томе подробно описаны. Для деления тебя должны интересовать семейство FDIV* для чисел с плавающей точкой и IDIV/DIV для целых чисел.
    Ещё можешь посмотреть на всякие AVX и SSE - там тоже по своему происходит проверка на деление на ноль.
    Ответ написан
    2 комментария
  • Как добавить несколько наименований в одну метку?

    0xD34F
    @0xD34F Куратор тега Яндекс.Карты
    Сгруппируйте данные по координатам:

    const grouped = productData.reduce((acc, n) => (
      (acc[n.coordinates] ??= []).push(n),
      acc
    ), {});

    Соответственно, когда будете собирать строку для ballonContent метки, вместо одного объекта придётся пробежать по массиву объектов:

    for (const [ coord, data ] of Object.entries(grouped)) {
      const placemark = new ymaps.Placemark(
        coord.split(',').map(parseFloat),
        {
          balloonContent: data
            .map(n => `
              <div>
                ${n.address}
                <br>
                <a href="${n.productURL}">Подробнее</a>
              </div>`)
            .join(''),
        },
        {
          preset: 'islands#blueDotIcon',
          maxWidth: 300,
        }
      );
    
      map.geoObjects.add(placemark);
    }

    Или, воспользуйтесь кластеризатором:

    const placemarks = productData.map((n, i) => new ymaps.Placemark(
      n.coordinates.split(',').map(parseFloat),
      {
        balloonContent: `${n.address}<br><a href="${n.productURL}">Подробнее</a>`,
        clusterCaption: `Адрес №${i + 1}`,
      },
      {
        preset: 'islands#blueDotIcon',
        maxWidth: 300,
      }
    ));
    
    const clusterer = new ymaps.Clusterer({
      clusterDisableClickZoom: true,
    });
    
    clusterer.add(placemarks);
    map.geoObjects.add(clusterer);
    Ответ написан
    1 комментарий
  • Как работает math.sin и math.cos. Почему считает неправильно?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Он рассчитывает в радианах, а не градусах
    Ответ написан
    Комментировать
  • Почему в CoreCLR Int32.TryParse сделано не самым оптимальным образом?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Причина 1 (расширяемость)
    Если в будущем добавлять новые варианты NumberStyles, которые null должны обрабатывать иначе, либо какую-нибудь комбинацию, которая при null возвращает int.MinValue (например), то при проверке на null код сработает неправильно.

    Причина 2 (контракт)
    На вход всегда должны подаваться правильные данные. Очень странно, если будешь выполнять какую-либо работы с неправильными входными значениями.
    Я, например, всегда валидирую данные перед тем как выполнять работу.

    Причина 3 (легаси/совместимость)
    Может в старых версиях (.NET Framework) было такое поведение - исключение при неправильных данных
    Ответ написан
    2 комментария
  • Как получить маршрут Google Directions API?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А что конкретно вам не понятно в официальной документации?
    https://developers.google.com/maps/documentation/routes
    Вопрос у вас звучит "не понимаю как сделать задачу" полностью, вообще. Тут нужно задавать конкретные вопросы, а не общие абастрактные. Иначе не понятно что вам требуется, курс по программированию, или сделать проект за вас.
    Ответ написан
    1 комментарий
  • Как борются с взломом нейросетей?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Существует только один способ улучшать работу нейросетей - продолжить обучение на новых данных.

    Сам термин взлом здесь не применим. НС оперируют нечеткой логикой поэтому никакого взлома
    нет. Есть просто детерминированное поведение выхода в зависимости от входа.
    Ответ написан
    Комментировать
  • Почему с отладкой нет ошибки, а без отладки есть?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    fixed(TestStruct*ptrT = &t){ 
              tS = ptrT; 
          }

    Не стоит сохранять указатель на стек в поле класса - класс легко может пережить практически любую такую ссылку.
    Тем более что тут ты сохранил указатель на локальную переменную, в которой хранится указатель на структуру.

    В твоём случае я вообще не вижу необходимости в хранении указателей на структуру и в unsafe вообще- ты можешь просто копировать её, тк она не очень большая.
    Ответ написан
    1 комментарий
  • Как Jit Компиляторы обнаружат недостижимой код и лишние проверки?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Если я правильно понял вопрос, то наличие JIT-компилятора не отменяет обычный. Т.е. код сначала "предкомпилируется" к некий кроссплатформенный код, который уже потом исполняется на виртуальной машине (JVM).
    Вот на этапе предварительной компиляции и происходит проверка "статики": скобку не поставил, задал индекс явно не в границах массива, оставил какой-то код после return, забыл вернуть значение из метода, напутал с типами и т.п.
    Но это не спасает от ошибок в рантайме: если индекс для массива вычисляется, а потом ты пытаешься достать элемент по этому индексу, то проверка на границы - на твоей совести, а железка, если что, просто упадёт с исключением :)
    Ответ написан
    Комментировать
  • Как переносить персонажа на другую сцену с сохранением всех параметров в Юнити 3D?

    xzripper
    @xzripper
    0xC0000005
    MoveGameObjectToScene

    SceneManager.LoadScene(game_scene_2, LoadSceneMode.Additive);
    SceneManager.MoveGameObjectToScene(player.gameObject, game_scene_2);
    SceneManager.UnloadScene(game_scene_1);
    Ответ написан
    Комментировать
  • Как определить размер функции в байтах Машиного кода?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Язык программирования тебе это не подскажет. Он не знает.
    Об этом может знать компилятор, но для компиляторов такой "функции" как get_machinecode_instruction_length нету. Компилятор может генерировать не прямой код трансляции команд С++ в машинный код. Он может оптимизировать вызовы под конкретный процессор/архитектуру, по опциям для оптимизации загрузки данных в память и так далее.
    Просто посмотреть машинные коды - нужно читать datashit конкретной архитектуры, они более-менее стабильные.
    Ответ написан
    Комментировать
  • Как выделить память по заданному адресу?

    Vindicar
    @Vindicar
    RTFM!
    Первый вопрос: а на кой тебе это?
    Второй вопрос: ты имеешь ввиду логический адрес, или физический?

    Если логический, то дёрни функцию WinAPI VirtualAlloc(). Но имей ввиду две вещи:
    1. Адрес будет округлён вниз до размера страницы памяти, т.е. твой искомый адрес может оказаться в середине страницы или даже ближе к концу. Возможно, стоит выделить память с запасом.
    2. Разумеется, если одна из запрошенных тобой страниц уже занята какой-то памятью, то ничего не поделаешь.

    Память по фиксированному физическому адресу для клиентского приложения выделить нереально. Тут скорее нужно драйвер писать.
    Ответ написан
    Комментировать
  • Ассемблер, почему дизассемблированном коде много ненужных операций?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему не переписать вместо этого
    add ebx,dword ptr [rbp+ECX*4+10h]

    Буквально так написать нельзя, потому что нет такого режима адресации в котором можно было бы использовать вместе Rbp (64-битный) и Ecx (32-битный). Можно было бы написать add ebx,dword ptr [rbp+rcx*4+10h], но для этого счётчик цикла должен был бы быть 64-битным, а он, как мы видим, 32-битный (int i). Т.е. ответ на вопрос "для чего это": для беззнакового расширения 32-битного счётчика цикла в регистр, который можно использовать для доступа к памяти.

    Другое дело, что из исходного кода очевидно, что при обращениях к памяти i не выходит из диапазона 0..9, так что разницы между ecx и rcx нет и не может быть. Возможно я что-то упускаю и у компилятора другое мнение на этот счёт, но может быть он просто туповат и не имеет кода который бы мог использовать эту возможность оптимизации, а может такая оптимизация и есть, но она не была включена во время генерации этого кода.
    Ответ написан
    Комментировать
  • Какой нормальный онлайн декомпилер?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    IDA + HexRay
    Все остальное мусор и даже с этим инструментом нужно уметь работать.
    кстати 400 мегов это разве много?
    Ответ написан
    1 комментарий
  • Как выводить список адресов по геолокации пользователя?

    vndrussia
    @vndrussia
    Вроде разработчик,а вроде и нет
    Он выводит не только москву
    2023-08-18-153432197.png
    Но можно передавать координаты в ссылку в поля: &ll=66.826392%2C52.878285 и в &sll=66.826392%2C52.878285
    Так же там можно и город moscow менять.
    P.S если открыть вашу ссылку в браузере она станет более "полной" и содержащей данные поля.

    А в обще есть шикарная дока https://yandex.ru/dev/geosearch/doc/ru/
    Ответ написан
    2 комментария
  • Как связать свою кнопку с соответствующим маркером google maps?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Маркеры сложить в массив, по клику на кнопки доставать из массива маркер с тем же индексом, что и у кнопки, триггерить на нём событие клика. Как-то так.
    Ответ написан
    Комментировать