• Можно ли использовать ОС, созданную в hyper-v, как основную?

    Задался недавно вопросом: можно ли создать виртуальную машину в hyper-v, пробросить в неё свою видеокарту и использовать данную гостевую ОС как основную (то есть работать/играть на данной системе)?

    Да, можно, эта фича Hyper-V называется Discrete Device Assignment.
    И какая Windows понадобится для этого (имеется ввиду, можно ли использовать Win 10 или нужна Win server)?

    На хосте - серверная Винда, в качестве гостя вполне сгодится клиентская Винда.
    И если пробрасывать видеокарту в виртуальную машину, то понадобится второй видеоадаптер для хост машины?

    В данный момент - да, понадобится второй адаптер, т.к. устройство пробрасывается целиком. В Windows Server 2025 появится GPU partitioning, но пока хз с какими видяхами и материнками это будет работать.

    Да, кстати, насчёт оборудования. Всё это замечательно, но вам на вашей материнке скорее всего понадобится поддержка SR-IOV, ну и соответственно IOMMU на матери и процессоре.

    Во-вторых, далеко не все видяхи официально поддерживаются технологией DDA, обычно для этого тестируются только pro-шные линейки карт. Может оно будет работать и с вашей картой. Драйвера карт потребительского сегмента могут блокировать запуск карты, проброшенной в виртуальную машину, или просто работать некорректно (блокируют запуск, т.к. не поддерживают сценарий проброса). Например, сейчас для работы ряда AMD-шных карт с пробросом в ВМ нужен костыль vendor-reset (это линуксовый модуль ядра, для Hyper-V не годится). И NVidia относительно недавно начала поддерживать проброс линейки GeForce в виртуалку (и то непонятно, как там с Hyper-V DDA).

    Я сам использую подобный сетап и пишу прямо сейчас с него, но у меня в качестве гипервизора KVM (использую дистр Proxmox), и материнка ASRock Rack ROMED8-2T, где есть вышеуказанные плюшки (кстати, в качестве адаптера для хоста прокатывает встроенный в мать ASPEED AST2500, поэтому полноценная карточка у меня только одна). В гостевую виртуалку с Windows 11 проброшена карточка Radeon RX 5500 XT, с учётом вышеупомянутого костыля в целом работает. Есть некоторая нестабильность, плюс иногда приходится вместе с виртуалкой перезагружать весь хост. Но это следствие того, что AMD не поддерживает для этих карт работу в пробросе (хотя и не блокирует искусственно), с нвидией возможно было бы получше.

    Ищите информацию по ключевым словам VFIO и PCI passthrough, на Реддите есть неплохое коммюнити. И да, готовьтесь копать много информации и перепроверять её (например мой ответ тоже стоит перепроверить, всё довольно быстро меняется) и покупать оборудование сильно дороже потребительского (если у вас его ещё нет). По Hyper-V DDA информации тоже не так много, советую рассмотреть дистры с KVM, если вам не так принципиально.
    Ответ написан
    1 комментарий
  • Как использовать Command в привязке WPF?

    Nipheris
    @Nipheris Куратор тега C#
    Ну, если прям на чистом WPF, без всякого упрощающего жизнь обвеса типа ReactiveUI, то как-то так.

    Код вьюмодельки.
    internal class MainViewModel
    {
    	private sealed class PlayCmd(MainViewModel mainViewModel) : ICommand
    	{
    		/// <summary>
    		/// Можно ли вызвать команду? Влияет на доступность привязанных к команде контролов, например кнопки
    		/// </summary>
    		public bool CanExecute(object? parameter) =>
    			// команду Play можно вызвать только если мы ещё не начали проигрывание
    			!mainViewModel.isPlaying;
    
    		/// <summary>
    		/// Ивент, нужный чтобы уведомить об изменении значения свойства CanExecute
    		/// </summary>
    		public event EventHandler? CanExecuteChanged;
    
    		public void Execute(object? parameter)
    		{
    			// вызываем метод у вьюмодели
    			mainViewModel.Play();
    			// дёргаем событие, чтобы сообщить всем, кто привязался к команде,
    			// что её статус "можно исполнить" изменился
    			// если этого не сделать, то кнопка НЕ задизаблится (хотя CanExecute уже возвращает false)
    			this.OnCanExecuteChanged();
    		}
    
    		private void OnCanExecuteChanged() =>
    			this.CanExecuteChanged?.Invoke(this, EventArgs.Empty);
    	}
    
    	private readonly PlayCmd playCommand;
    	private bool isPlaying = false;
    
    	public MainViewModel()
    	{
    		this.playCommand = new(this);
    	}
    
    	public ICommand PlayCommand => this.playCommand;
    
    	public void Play()
    	{
    		//Player.Play();
    		this.isPlaying = true;
    	}
    }

    Код вьюхи.
    <Window x:Class="Miramax.MainWindow"
    		xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    		xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    		xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    		xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    		xmlns:local="clr-namespace:Miramax"
    		mc:Ignorable="d"
    		Title="MainWindow" Height="450" Width="800">
    	<Window.DataContext>
    		<local:MainViewModel />
    	</Window.DataContext>
    	<Grid>
    		<Button Command="{Binding PlayCommand}">Click</Button>
    	</Grid>
    </Window>
    Ответ написан
    1 комментарий
  • Какие есть инструменты для написания интерфейса для терминала?

    C++

    Rust

    Это из того, что у меня в закладках. Так-то ищите по тэгу TUI (text user interface, в оппозицию к GUI) - и будет вам счастье.
    Ответ написан
    Комментировать
  • Что вызывает ошибку NodeJS - MODULE_NOT_FOUND?

    А что вы имеете в виду под "скачал на другом компьютере модуль SerialPort"? Что именно вы скачали? .tar.gz-шник с npmjs.org? Если да, причём тут zip? Если нет - то непонятно на что вы рассчитываете, если тот репозиторий - это мультипакетная репа, так в папке packages лежит сразу несколько подпапок, каждая из которых релизится как самостоятельный NPM-пакет. Ну и воркспейс настроен в корневом package.json.

    Корневой package.json в репе явно не предназначен для того, чтобы всю репу подключать как один пакет, не знаю с чего вы взяли что это будет работать. Там ни main/import нету ни prebuild-скрипта.

    Мне кажется вам проще не в исходниках перенести, а скачать готовые пакеты с npmjs.org и поставить именно их. А ещё проще - принести готовый node_modules на оффлайн-машину, чтобы не долбаться с каждой зависимостью (а их будет очень много).

    А чтобы не мучаться с node_modules, раз уж у вас такие требования по оффлайну - сбандлите приложение в один js-ник на своей машине и потом несите его уже на тестовую оффлайновую. Ваша проблема сейчас в том, что вы пытаетесь разрабатывать на оффлайн-машине, может вам это и ни к чему (я не знаю, просто предполагаю).
    Ответ написан
    Комментировать
  • Задача выдачи файлов конфигураций и файлов секретов по Интернету - а есть ли готовые решения?

    Ну например:

    Гуглите "remote configuration" и "feature flags", обычно это идёт комплектом. Может применяться как к клиентским приложениям (десктоп, мобилка), так и к приложениям на стороне сервера (то, что как раз вам нужно).
    Ответ написан
    Комментировать
  • Как написать динамическую библиотеку на C++ при помощи CMake в среде QTCreator, которую потом можно будет импортировать в проекты на Python?

    Nipheris
    @Nipheris Куратор тега C++
    Попробуйте использовать pybind11. Если что, эта библиотека есть в ConanCenter. Вот репозиторий-пример для CMake.
    Ответ написан
    Комментировать
  • Контринтуитивный синтаксис объявления нескольких переменных одного типа?

    По делу уже ответили, приведу лишь интересную цитату от Денниса Ритчи:

    I'm still uncertain about the language declaration syntax, where in declarations, syntax is used that mimics the use of the variables being declared. It is one of the things that draws strong criticism, but it has a certain logic to it.

    Ссылка на интервью
    Ответ написан
    Комментировать
  • Как узнать параметры с которыми скомпилирована или собрана dll на C#?

    Nipheris
    @Nipheris Куратор тега C#
    Очень похожий стек в этой issue (которая была создана по мотивам этой), предлагаю отслеживать её.
    Ответ написан
  • Как узнать хеш мержа в котором смержены изменения?

    git checkout R2
    git blame --first-parent <имя-файла>
    Ответ написан
    Комментировать
  • Какой самый простой способ организовать SSO?

    Для начала советую посмотреть OpenID Connect, до полного просветления. Для экспериментов (а может и для прода, смотря какие у вас требования) можно взять Keycloak в качестве сервера аутентификации.
    Когда разберётесь с этим, и соберёте готовую лабораторную, поймёте что нужно изменить именно под вас.
    Ответ написан
    Комментировать
  • Почему python возвращает существующий объект, вместо создания нового?

    В вашем примере выражение set() вычисляется один раз, а уже затем вызывается fromkeys. Это не имеет никакого отношения к set, так работают функции почти во всех языках программирования - сначала вычисляются значения аргументов, а потом с этими значениями вызывается функция. Итого, у вас везде передаётся один и тот же объект set. Будь там не set, а какой-нибудь Student, было бы то же самое.
    Правильный вариант: set_dict = { x: set() for x in range(3) }
    Ответ написан
    2 комментария
  • Как увеличить фото без потери качества?

    Сгенерировал в AI иллюстрацию

    Перерендерить в картинку большего размера? Если это вектор, в чём проблема? Зачем "увеличивать"-то?
    Ответ написан
  • Firefox - как зайти пол двумя разными аккаунтами, чтоб не было разлогина на одном?

    Если нужно прям ровно два раза войти под разными акками - достаточно войти под одним аккаунтом и обычном окне и под другим аккаунтов - в окне порноскопа.

    Если нужно больше двух сессий - тогда используйте профили.
    Ответ написан
    5 комментариев
  • Как вызывать метод в классе, которого нет, но он есть в том, который наследует его?

    abstract class Model {
       verify() {
          const name = this.getName()
       }
    
       abstract getName(): string;
    }
    
    class User extends Model {
       private name = 'Boris'
       override getName() { return this.name; }
    }
    Ответ написан
    2 комментария
  • Как установить appx пакет на версию ниже заявленной в манифесте?

    Крайняя версия, которую поддерживает appx - 22000. Обновляться не буду, поэтому ищу обходной путь.

    Прога может использовать апихи, которых нет в Десятке, так что не ожидайте что она заработает, даже если вам удастся её поставить

    так как при регистрации расширения windows.appExecutionAlias произошла следующая ошибка

    Ну так снесите из манифеста установку алиаса SnippingTool, раз уж взялись редактировать, неужто он вам так нужен? Не думаю.
    Ответ написан
  • Какую build system для C++ стоит изучать в 2023?

    Второй вопрос: минусы cmake

    Чёрт ногу сломит. Но что поделаешь, сегодня это считай стандарт.

    Точее сказать - пользоваться можно, и даже с удовольствием, но до сих пор новичкам приходится выискивать туториалы по тому как делать "правильно" и "современно". В официальных доках сложно (если вообще возможно) найти best practices, поэтому появляются такие проекты и учебники, как An Introduction to Modern CMake. Ещё полезно чейнджлоги смотреть, а то ещё два года пройдёт, пока узнаешь о появлении новых команд для работы с публичными хедерами библиотек.

    Можно ещё Meson глянуть, перспективная штука. Тот же Conan активно вкладывается в её поддержку.
    Ответ написан
    Комментировать
  • Возможно ли изменить прошлое в Git (или подобном) с передачей изменений в настоящее?

    А возможно ли внести изменения в прошлом так, чтобы они перешли в каждого потомка(коммиты, ветки) и в последнем сейве проявились последствия?

    Можно не "внести изменения в прошлом", а как вы и сказали, создать "параллельную реальность". Все команды Git, про которые мы говорим, что они "редактируют историю" на самом деле ничего не редактируют в истории НИКОГДА, а лишь создают НОВУЮ историю ("параллельную реальность") на основе существующей. Например, команда rebase именно так и делает. Существуют инструменты, которые позволяют выполнять гораздо более сложные операции с историей - менять содержимое blob и tree объектов, менять дату/почту в коммитах и вообще всё что угодно, например CLI-инструмент и неплохая Python-библиотека в одном лице - git-filter-repo.

    Если нет, то как делается чтобы прога, имеющая издания с разными степенями урезанности (nonlimit, premium, home, ...) могла эволюционировать лишь только главным изданием, и не приходилось каждый раз всё заново урезать вручную?

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

    Вас какая платформа интересует вообще? И как конкретно ДЛЯ ВАС коррелирует красивость с нативностью для платформы? Для меня например это важно, но может для вас - нет.

    Для дотнета есть Avalonia UI и Uno Platform, это если кроссплатформенно. Если нативно под Винду, то актуальной технологией считается WinUI 3 (статейка на Хабре).

    HTML/CSS в десктопных приложениях я люто ненавижу, поэтому про Electron/Tauri ищите сами :D Не буду подталкивать ещё одного человека к такому технологическому решению.
    Ответ написан
    Комментировать
  • Как написать на с++ метод и экспортировать его в c# заинлайнить, и можно ли _fastcall его сделать???

    Nipheris
    @Nipheris Куратор тега C++
    Экспортированная функция работает в 4 раза медленнее.

    Разумеется, у вас всё время уходит на накладные расходы на PInvoke. Это полное безумие - выносить сложение чисел вообще в функцию, а тем более ещё и делать вызовом между языками. А PInvoke - это вам не InternalCall

    ВОПРОС как сделать функцию sum в с++ что бы она работала так же быстро как и sum в c# коде? Как ее заинлайнить

    Методы Math реализованы в самом рантайме и вызываются без маршалинга с помощью InternalCall. Не думаю, что это возможно для вашей функции.

    К примеру, если хочу c# библиотеку сделать, то просто добавили ссылку и забыл о всем. А когда добавляю так же ссылку на dll от с++ проекта, то ноль реакции.

    Потому что dll которые получились из C# - это дотнетовские сборки, которые только прикидываются Portable Executable, а вот то, что компилится из C++ - это действительно Portable Executable, и ничего дотнетовского там нет (если конечно это обычный C++ DLL-проект, а не C++/CLI).

    Кстати еще вопрос, как библиотеку с++ подключать к проекту, почему DllImport не находит, если указать ссылку на проект,

    Вам нужно настроить копирование C++ DLL в выходную директорию проекта, рядом с вашей дотнет-сборкой, в которой находится DllImport
    Ответ написан
    Комментировать