• Правильно ли объединять WPF и WinForms проекты в одно решение (solution)?

    Nipheris
    @Nipheris Куратор тега C#
    В дотнете внешние и межпроектные зависимости (PackageReference, ProjectReference) прописываются и ставятся для каждого проекта отдельно. Более того, по умолчанию каждый library-проект также становится самостоятельным NuGet-пакетом, если в настройках включить сборку последнего.

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

    Лично я рекомендую в большинстве случаев пользоваться подходом "один Git-репозиторий - один солюшен - много проектов". Репозиторий - единица версионирования (т.е. ВСЕ проекты в репе всегда имеют одинаковую версию), проект/пакет - единица управления зависимостями.

    Итого имеем следующие выводы:
    • вы собираетесь притащить к себе довольно толстые библиотеки, "подружить" которые в рамках одного исполняемого бинарника будет непросто. Т.к. для шарповых MSBuild-проектов каждый проект (csproj) собирается в отдельную сборку (assembly), то логично иметь WPF и WinForms варианты в виде отдельных проектов (и в виде двух разных бинарей на выходе)
    • если вы планируете общий релиз для обоих приложений - т.е. когда не бывает так, что допустим WPF-приложение релизится, а WinForms - нет - тогда делайте один репозиторий и один солюшен с несколькими проектами;
    • если вы планируете независимый релиз для каждого приложения - тогда другая история, но надеюсь вам это не нужно
    Ответ написан
    2 комментария
  • Как считать строку в nasm?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    В итоге все делается через биос. Вам надо будет писать какие-то данные в I/O порты, использовать прерывания, чтобы заставить биос прочитать нажатия на кнопки и поместить данные в какую-то вашу память.
    Ответ написан
    Комментировать
  • Как преобразовать string в double?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Если у тебя в ОС стоит русская локаль, то в качестве разделителя по-умолчанию будет использоваться запятая.
    Если тебе нужно парсить именно с точкой, то можно так:
    var result = double.Parse("42.69", System.Globalization.CultureInfo.InvariantCulture);
    Ответ написан
    1 комментарий
  • Как это упростить?

    hint000
    @hint000
    у админа три руки
    public void Update()
        {
          if(GlobalData.Skip >= 0 && GlobalData.Skip <=11)
            {
                SpriteRender.sprite = sprites[GlobalData.Skip];
            }
        }
    Ответ написан
    1 комментарий
  • Какой самый легкий путь для создания модели с помощью машинного обучения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дело в том что рынок "машинного обучения" сильно перегрет. Каждый newcomer решает любую задачу маш-обучем даже если ему надо сложить 2 + 2. Я не шучу это действительно так. Доходит до смешного. Там где нужен фильтр низкой частоты или расчет арифметического среднего все пытаются втащить методы которые на два порядка сложнее и энергозатратнее.

    По поводу вопроса. Допустим ты играешь в PacMan (желтый колобок который кушает белые точки на черном фоне) и ты хочешь просто найти пакмана - то тебе достаточно к примеру уменьшить размер экрана в 32 раза и тогда колобок станет размером в 1 пиксел (я предполагаю что он был размером 32 на 32). При усреднении цвета - брать max. Между черным и желтым - всегда выбирать желтый. Далее после того как колобок найден на мелком поле - и известны его координаты - можно двигаться в обратную сторону увеличивая масштаб. И за 5 итераций найти точные координаты ПакМана. В моём алгоритме вобщем-то нет никакого opencv. И я утверждаю что мой алгоритм менее ресурсоёмок чем все прочие подходы.

    Впрочем это - просто идея. Ее можно бесконечно упрощать или улучшать. Возможен кейс когда враги скушали пак-мана и он будет плохо распознан моим методом. Вобщем есть огромное пространство для фантазии и алгоримизации без машинного обучения.
    Ответ написан
    2 комментария
  • Как заменить название словаря в методе TryGetValue?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    (Пояснение идей других отвечающих)
    Как вариант:
    var allDictionaries = new Dictionary<string, Dictionary<string, string>> {
      ["1"] = new Dictionary<string, string>(),
      ["2"] = new Dictionary<string, string>()
    };
    
    var input = Console.ReadLine();
    var selectedDictionary = allDictionaries[input];
    var key = Console.ReadLine();
    var value = selectedDictionary[key];
    Console.WriteLine(value);
    Ответ написан
    Комментировать
  • Что значит этот код?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что значит код

    ubfx r0, r0, #1, #1 -- извлечь битовое поле шириной 1 бит (правая единица) начиная с бита №1 (левая единица) из регистра r0 (правый r0) и поместить результат в r0 (левый r0).
    bx lr -- перейти по адресу в регистре lr, обычно это возврат из подпрограммы.
    Семантика опкодов легко гуглится по названию опкода и названию архитектуры процессора.

    какая между ними разница

    ubfx r0, r0, #1, #1
    ubfx r0, r0, #2, #1
    теперь, когда ты знаешь, что это за опкод, ты можешь понять сам, что они извлекают битовое поле начиная с разных битовых позиций.

    что я делаю не так

    ты не написал, что конкретно ты делаешь: что и где меняешь и как проверяешь результат.
    Ответ написан
    3 комментария
  • Почему у практически идентичных условий разная скорость проверки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Могу предположить, что интерпретатор питона не пересчитывает во внутреннем цикле значение target - nums[i], поскольку оно во внутреннем цикле не меняется.
    А значение nums[i] + nums[j] надо пересчитывать каждый раз.
    Ответ написан
    1 комментарий
  • Как удержать игрока в игре?

    svob
    @svob
    Фрилансер, текстовик широкого профиля
    Так это главный навык геймдизайнера, им именно за такое деньги платят)

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

    LoliDeveloper
    @LoliDeveloper
    Линейная алгебра как смысл жизни
    Предел это не максимум.
    Предел это про значение функции в беск малой проколотой окрестности точки. Ну вот например для функции 1/|X| мы не можем сказать чему она равна при x = 0. можно говорить только что происходит при приближении X к нулю, вот мы и берём проколотые окрестности, ужимаем их и смотрим что происходит с функцией в этих окрестностях
    Ответ написан
  • Можно ли обучить бота повторять действия в игре?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если речь идет о computer vision - то да. Скорее всего можно. Но мне жаль ваш талант. Если вы действительно создатите такого бота который обучается по картинке то вас можно нанимать на работу и платить столько денег что дешевая прокачка Эльфа в какой нибудь MMORGPG вам станет просто не нужна. Сможете купить все.
    Ответ написан
    Комментировать
  • Почему mathf.cos от 180 - это -0.59, а не -1? Почему mathf.cos ведёт себя не так, как я ожидаю?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Видимо ты подаёшь туда градусы, вместо радиан.
    Судя по документации mathf cos считает в радианах: https://docs.unity3d.com/ScriptReference/Mathf.Cos.html
    А cos от 180 радиан - это действительно -0.5984

    А вот cos от PI радиан - это ровно -1.
    Ответ написан
    1 комментарий
  • Как понять какой код сейчас выполняют потоки?

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

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

    @MarkusD
    все время мелю чепуху :)
    Сегодня существует ровно два базовых направления разработки конкретного коммерческого проекта.
    Способ первый: купить лицензию или подписку на уже готовый инструмент разработки и заняться непосредственно разработкой своей игры.
    Способ второй: иметь в своем штате команду разработчиков собственного инструмента, на базе которого можно заняться разработкой своей игры.

    Первый способ популяризирует публичные универсальные инструменты разработки.
    Второй способ эксплуатирует проприетарные инструменты.

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

    DirectX, Vulkan и OpenGL, равно как Metal и ряд проприетарных GAPI некоторых закрытых платформ, не являются графическими библиотеками. Это все - Graphics Application Programming Interface - GAPI.
    Это - низкоуровневые интерфейсы драйвера GPU, позволяющие эксплуатировать ресурсы видеокарты в своих целях. Не только для рисования чего-то, а для ИИ, ML, сложных статистических вычислений, предсказаний и прочих расчетов на больших объемах данных.
    Под капотом любого инструмента, будь-то проприетарный или публичный, в его графическом слое используется один или несколько GAPI. Без этого никак.
    OpenGL, как и DirectX 11, нисколько не устарели, поскольку предоставляют упрощенный интерфейс управления ресурсами GPU. Они используются тогда, когда разработчикам не нужны самые тонкие механизмы управления ресурсами GPU, которые предоставляют DirectX 12 или Vulkan. Потому что последние, помимо прочего, требуют от разработчиков более глубокой экспертизы и больше ресурсов на разработку всего того же, что на OpenGL и DirectX 11 реализуется меньшими силами и за меньшее время.

    И нет, одним только инструментом, на базе которого ведется разработка игрового проекта, не обойтись. Все ресурсы разрабатываются в других инструментах: графических редакторах, звуковых редакторах, редакторах анимаций, редакторах баз данных. Пайплайны производства ресурсов являются очень сложными, могут насчитывать десятки инструментов для производства одного только типа ресурсов и требуют от артистов экспертизы в использовании этих инструментов. И часть таких инструментов обязательно будет проприетарными, созданными или под конкретный проект, или внутри конкретной компании. И иногда такие инструменты удобнее создавать с применением других, более мелких или лучше заточенных под задачу, движков. Игровой движок не всегда используется для создания игр.
    Отдельно стоит в этом вопросе код игровой логики и шейдеров. Для этого тоже нужны специалисты и инструменты.

    Информации по каждой отдельной области разработки игр хоть отбавляй. Ее настолько много, что одному человеку за жизнь не усвоить. Поэтому от современного специалиста сегодня требуется спрофилироваться, т.е. определиться со своим профилем работы и стать экспертом.
    Я больше 15 лет занимаюсь разработкой игровых движков и медиаферймворков. Более 10 лет занимаюсь коммерческой разработкой кросслпатформенных инструментов. Я начинал свое обучение по книгам и документации для всех интересующих меня областей еще 20 лет назад. Я самостоятельно освоил множество API, включая графические, сетевые, звуковые и API целевых платформ, используя книги и документацию. Экспертные знания C++ и прочих языков я получил тоже через изучение документации, стандартов и книг.
    Я могу сказать что обучаться по книгам и документации можно и самостоятельно. Еще можно заплатить деньги и получить более точечные знания через их интерпретацию на распространенных сегодня онлайн-курсах. Такие знания не всегда бывают лучше полученных самостоятельно, но времени на освоение того же объема знаний на курсах уйдет меньше чем при самостоятельном изучении. Иными словами, занятия на онлайн-курсах не отменяют важности самостоятельного изучения основных источников информации.
    По открытым видеоурокам на ютубе и прочих видеохостингах обучаться нечему. Цель этих видео - чтобы зритель посмотрел рекламу и этим принес доход автору.
    Ответ написан
    2 комментария
  • Как сделать массовую проверку https прокси?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Может, есть решения, которые позволяют из файла вытаскивать все серверы прокси и проверять их?


    ЛЮБОЙ скриптовый язык программирования, и скрипт на 1-5 строк
    Ответ написан
    Комментировать
  • Как получить понимание разработки игры?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    Тебе же прямо сказали. Нужно изучить язык программирования.
    Не на уровне "почитал книжку". Не на уровне интерн/джуниор. А на уровне уверенного разработчика.

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

    Поэтому правильный путь - это потратить МНОГО времени и МНОГО усилий.
    Ты же сам сказал, что все что ты изучил - там давали базовое понимание что это такое.

    Поэтому вместо того, чтобы делать крутую 3д игру, сперва начни делать приложения попроще.
    Добейся, чтобы у тебя просто двигался персонаж. Потом сделать лабиринт, чтобы со стенками взаимодействовал. Потом может быть попробуй добавить прыжок и высоту. И так потихоньку сделаешь основу для игры. Потом будешь добавлять и добавлять. Может через года два будет демо-версия с одним рабочим уровнем.
    Ответ написан
    Комментировать
  • Поможет ли изучения C++ выучить C#?

    vabka
    @vabka
    Токсичный шарпист
    Хорошее понимание C++ значит хорошее понимание работы компьютера, памяти, ОС.
    На понимание C#, кмк, знание C++ влияет не очень сильно. Хотя мб какие-то моменты в C#, после плюсов будут казаться невероятно удобными и понятными, почему они сделаны именно такими
    Ответ написан
    2 комментария
  • Зачем нужно выравнивание памяти? Точнее, почему процессор обращается 2 раза к невыравниным данным?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Для процессора x86 с word 32bit. Как будут выполняться fetch?
    Хочу ответ в таком формате.

    Что мешает взять спецификацию на процессор и почитать, например, раздел 5.3.6?

    почему процессор обращается 2 раза к невыравненным данным?

    Если посмотреть на схему i386 на первой же странице документа по ссылке выше, то можно увидеть, что шина адреса процессора имеет линии A2 - A31. Линий A0 и A1 тупо вообще нет, физически.
    Ответ написан
    Комментировать
  • Как работает этот рекурсивный алгоритм разложения на слагаемые?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Алгоритм и вправду написан "чудесно", поди разбери.

    Но логика такая.
    Берем цифру 5.
    Её можно получить как
    1 + 1 + 1 + 1 + 1
    2 + 1 + 1 + 1
    2 + 2 + 1
    3 + 1 + 1
    3 + 2
    4 + 1
    (остальные - повторы)

    Алгоритм, повышая первую цифру и запуская рекурсию с уменьшением гарантирует, что комбинаций-повторов не будет, т.к. следующая цифра всегда меньше или равна предыдущей, а количество шагов ограничено суммой.

    При этом в векторе `vv`, в месте где `ans++` происходит, содержится один набор слагаемых, а `ans` в конце скрипта пишет число возможных комбинаций.
    Ответ написан
    Комментировать
  • POST работает как GET, почему?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо проснуться, попить кофию, собраться с мыслями, и задать свой вопрос.

    Хотя нет. Всё перечисленное проделать, а потом вернуть file_get_contents() как было.
    И не воображать себе, будто curl - это просто такой оригинальный способ вызвать file_get_contents(), а все настройки волшебным образом останутся те же.
    Ответ написан