• Почему не получается типизировать стейт?

    Если вы ожидаете объект с сервера, значит нужно уметь пожить какое-то время БЕЗ этого объекта? Этот объект вообще может не долететь до вас, что вы тогда будете делать?

    Я думаю вам нужно работать не с Pokedex, а с Pokedex | null или чем-то в таком духе. Вам нужен maybe-тип в том или ином виде.
    Ответ написан
  • Сделал merge в локальный develop из branch-1, потом push на origin, а теперь получается что нужно откатить develop. Что делать?

    оно ведь мне не даст запушить, или что?

    или --force
    Ответ написан
    Комментировать
  • Как сделать авто обновление программы C# WPF?

    Если нужна поддержка только Десятки и выше - можно перейти на MSIX, и обновлять приложение с помощью App Installer. Мы и сами так обновлялись, пока по ряду причин не решили заменить логику проверки и скачивания (НО не установки) обновлений на свою. При этом, мы всё равно остались на MSIX, и это позволяет нам устанавливать новую версию пакета одним вызовом UpdatePackageAsync. Если нужно, могу рассказать подробнее, что мы делаем своими силами, а где Винда сама справляется, и как вообще это работает.

    Короче говоря, MSIX это хорошая база для распространения и обновления десктопных приложений, но все его игнорируют, т.к. он косвенно связан с UWP и Стором, хотя MS уже не первый год говорит, что эта технология работает и для большинства классических десктопных приложений, не имеющих к UWP никакого отношения. Но т.к. все уже испугались ужасного Стора, и бегают от него и UWP как чёрт от ладана, то бегают заодно и от MSIX, хотя поддержка Семёрки уже никому не впилась (Восьмёрку не считаем, это была бета-версия Десятки и уже перестала существовать).

    Нужно ли создавать отдельный файл по типу updater.exe, который будет обновлять программу или можно внутри программы это все сделать?

    Отдельный файл создают потому, что EXE-шник не может удалить сам себя, т.к. запущенный экзешник нельзя удалить или изменить без дополнительных хаков. Поэтому обычно всю работу по обновлению файлов делает отдельный процесс. Сам updater.exe потом можно обновить из основного процесса (при необходимости). В MSIX кстати этой проблемы нет, т.к. новая версия пакета всегда ставится рядом со старой, а старая удаляется позже, когда приложение завершит работу.
    Ответ написан
    Комментировать
  • Как изменить некоторые методы стат. библиотеки и экспортировать оставшиеся?

    Nipheris
    @Nipheris Куратор тега C++
    А что вы делаете вообще? Эта библиотека в качестве сборочной системы использует CMake. В вашем вопросе никак не отражено, как вы вызывали CMake и с какими параметрами. Ничего не понятно.

    Кроме того, эта библиотека есть в Conan Center, может проще поставить оттуда?
    В vcpkg кстати тоже есть.
    Ответ написан
  • Есть ли библиотека для отображения CEF в Vulkan?

    CEF - не единственный способ отображать HTML-страницы. Например, существует Coherent Gameface, который поддерживает Vulkan.
    Ответ написан
    Комментировать
  • Как хранить информацию в БД о поставщиках когда они могут являться разынми сущностями?

    То, что Vindicar в общем-то правильно назвал "наследованием" в контексте моделирования РБД иногда называют subtype relationship или inheritance hierarchy, можете поискать примеры по этим терминам.
    Ответ написан
    Комментировать
  • Как измерить температуру процессора в си шарп?

    Nipheris
    @Nipheris Куратор тега C#
    Если других способов нет, то что еще можно использовать для Сида, что бы рандом был правда хорошим, а не таким какой он есть по умолчанию.

    Сделайте так же, как в VeraCrypt - предоставьте пользователю возможность пошевелить мышкой случайным образом.
    Ответ написан
    Комментировать
  • Операционые системы на дисках?

    Ответ написан
    Комментировать
  • Как правильно сохранять данные из микросервисов в единую БД?

    Если ваши микросервисы будут иметь общее состояние в одной БД, и работать с этим состоянием через СУБД, то это не микросервисы, а монолит. Вам лишь будет казаться, что это микросервисы. Тем более что вы сказали, что вам важно следить за схемой данных, видимо она не зафиксирована один раз на веки вечные (и это нормально).

    Либо разносите данные по разным БД для разных сервисов, либо обращайтесь к этим данным через один сервис (видимо это ваш 5-й вариант, только я не совсем понял что вы имеете в виду под "брокером").
    Ответ написан
    Комментировать
  • Как работает отказоустойчивая почта?

    Зависит от конкретных реализаций почтовых сервисов, хранящих (именно хранящих!) письма. Вот например инструкция по репликации для Голубятни, используется утилита dsync из комплекта. На других сервисах могут быть совершенно другие средства, например если для хранения используется какая-то СУБД, то могут использоваться её собственные средства репликации. Задача в общем-то неспецифичная для почтовых сервисов, гуглите про репликацию файлов и баз данных - это обширная область с кучей алгоритмов и матана.

    Ну и самое главное - MX-записи они же для пересылки почты, т.е. для работы протокола SMTP, когда письмо ещё перебрасывается между серверами, чтобы попасть на тот самый сервер, где оно уже "ляжет" на хранение (откуда вы потом заберёте его по IMAP). Это письмо ещё десять раз может быть передано с сервера на сервер.
    Ответ написан
    Комментировать
  • Правильно ли объединять WPF и WinForms проекты в одно решение (solution)?

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

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

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

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

    Nipheris
    @Nipheris Куратор тега C++
    WinSock2 - это не библиотека, а прикладное API на Винде. Т.е. вы выбираете не между двумя библиотеками, а между апихой самой ОС, и ей же, обёрнутой в кроссплатформенный boost.asio.

    Если задача учебная, и нужно прям поработать с сокетами на низком уровне - возьмите WinSock2, это почти что ванильный Berkley Sockets. Если не нужно работать с сокетами на низком уровне - я бы взял asio. Но тогда вам придётся познакомиться с абстракциями этой библиотеки. В целом, ничего неподъёмного там нет.
    Ответ написан
    Комментировать
  • Почему создание временного объекта c помощью конструктора копирования оценивается как redeclaration?

    Nipheris
    @Nipheris Куратор тега C++
    А с чего вы решили, что парсер это разобрал как конструкцию вызова конструктора копирвания? Я думаю он считает это декларацией. Вот если Object { o1 }; напишите, то другое дело.
    Ответ написан
    4 комментария
  • Что важно в процессоре больше для программирования, тактовая частота или количество ядер?

    1. Практически на любом современном десктопном CPU достаточно ядер для тестирования и отладки разного рода параллельных алгоритмов. Поэтому предлагать взять "побольше" смысла не вижу. Меньше двух вы не найдёте, больше восьми не так уж и нужно.
    2. Тактовой частоты любого из современных CPU дороже 15 тыщ достаточно для комфортной разработки, если речь идёт об IDE, редакторе, отладке.
    3. Обе указанные характеристики в целом имеют очень небольшое значение. Архитектура, рыночный сегмент и поколение процессора (или проще - год выпуска) куда важнее, чем тактовая частота или количество ядер.
    4. Production-железо - совсем другое дело. Есть задачи которые плохо параллелятся, есть - которые хорошо. Сервера последние лет 10 идут на повышение количества ядер и повышение плотности. Но вам-то зачем об этом беспокоиться?
    5. Мне кажется, вы ещё не уверены, чем вообще будете заниматься, но железо хотите купить сейчас под какие-то непонятные "сферы разработки". Лучше купите чего-нибудь послабее - чтобы не забывать о производительности того, что вы пишете.

    А вот оперативной памяти много не бывает, эт да. Пихайте сколько влезет. Диск тоже можно побыстрее - нередко у разработчика различные процессы (сборка, установка зависимостей и т.д.) именно в диск и упираются.
    Ответ написан с предположением что речь идёт о персональной ЭВМ для разработчика.
    Ответ написан
    5 комментариев
  • Как реализовать историю API?

    Включив телепатию, предположу, что правильное решение для вашего случая - хронологическая база данных и стандарт SQL:2011 (ну или что-то аналогичное в вашей СУБД - не все вендоры стремятся реализовать этот стандарт буква в букву).

    Конкретнее можно будет поговорить, если объясните, что вы понимаете под "историей" и какая у вас СУБД.

    Ещё: 1, 2, 3, 4.
    Ответ написан
    Комментировать
  • Как можно сделать код, что-бы он был красивее?

    • на функции побейте, с вменяемыми названиями
    • литералам регулярок можно тоже дать нормальные имена, сейчас не разберёшь что собственно тестится регуляркой - приходится её читать и думать
    • непонятно зачем тут стрелочная функция вместо обычной, ради чего весь этот синтаксический шум
    • непонятно зачем это присваивание: newText = newText.substring(1);, чтобы что? Почему не завести отдельную переменную tailText или перенести это во второе выражение?
    • лично я запутался в использовании text и newText - непонятно почему в последнем условии тестируется text[0], а хвост берём у newText. Выглядит так, что это сделано специально, но не пойму почему. А если НЕ специально - то вот вам пример как вы усложнили код на ровном месте.

    Чем меньше вы пользуетесь сменой состояния, иными словами, чем больше у вас констант, а не переменных, и чем меньше присваиваний - тем код лучше читается. Я надеюсь вы не ради экономии чего-то там это делаете.
    Ответ написан
  • Как выбрать нужный ClaimIdentity из ClaimPrincipal, если их несколько штук?

    Ну так а мы откуда знаем, какие claims вам нужны? Всё зависит от вашей модели безопасности в приложении - каким образом вы авторизуете ваших пользователей (или что там у вас) на соответствующие действия.

    Например в простом случае, если у вас модель, основанная на ролях, то вам вероятно хватит клэима "роль", для которого даже helper-метод сделан: IsInRole.

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

    Nipheris
    @Nipheris Куратор тега C++
    Всё как и должно быть. Потому что не всегда C++ приложение можно просто так запустить на другой машине.
    На тулчейне от Microsoft (очевидно, вы используете Visual Studio для разработки, т.к. недостающие библиотеки из текста ваших ошибок - это студийный C++ рантайм) при использовании динамической линковки рантайма нужно приложить некоторые дополнительные усилия, чтобы этот рантайм появился на другой машине (т.к. его там ещё может не быть - ведь рантайм для каждой мажорной версии студийного компилятора свой). Вы можете как установить рантайм централизованно, так и положить его рядом с вашим приложением. Ну или вы можете слинковать рантайм статически.

    Задача, которую вам сейчас нужно решить, называется развёртыванием (deployment). Это абсолютно нормально, что вы столкнулись с необходимостью разобраться с этим, раз вы пользуетесь C++.

    Нет лучшего источника информации по этой задаче в рамках тулчейна Visual C++, чем вот эта страница: en/ru. Разбирайтесь, и у вас точно всё получится - абсолютно в каждом C++ проекте production-уровня эта задача решается тем или иным способом. Возможно вам потребуется дополнительно разобраться, что это вообще такое за "рантайм" и почему он требуется для работы вашего приложения.
    Ответ написан
    1 комментарий
  • Как перевести переменную на русский язык?

    i18next например?
    Ответ написан
    Комментировать