• Как реализовать честную игру в Угадай число?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваше решение волне валидно. Разве что некоторым игрокам придётся объяснять что такое md5 и рассказывать про сложность нахождения коллизий.
    Опять же, ушлый игрок сможет предположить, что кто-нибудь ввалил огромные мощности на поиск коллизий, а потом ему подсовывает нужную соль под ответ. Тем более не обяательно чтобы конкретное исло было в result, а достстоноч, чтобы там было не одно из выбранных 5.
    Короче, для надёжности я бы вам посоветовал добавить помимо своей соли, еще и соль, выбранную игроком. Ведь какая разница от чего считать md5, если вы играете по-честному. А вот найти коллизии при наличии гарантированно рандомной (или просто не подготовленной соли), да еще и так быстро (в рамках игры) - это куда сложнее.
    Ответ написан
    Комментировать
  • Какие есть способы уведомления Frontend PWA/SPA о завершении долгой операции?

    xez
    @xez
    TL Junior Roo
    - Периодическая проверка статуса с фронта.
    - Вебсокеты.
    Ответ написан
    Комментировать
  • Как организовать функционал управления доступами к функция проекта?

    @oleg_ods
    В ASP.Net есть управление доступом на основе политик безопасности(Policy Based Authorization).

    В политике описываются правила доступа к ресурсу(объекту, странице, контроллеру и тд). Сами правила в свою очередь могут состоять из абсолютно любых условий(роль, id, лунная фаза…)

    Если я правильно понял Вашу задачу, то нужен примерно такой же механизм. Можете поискать подобные решения для php.
    Ответ написан
    Комментировать
  • Как правильно работать с секретами?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Прокидывай секреты через переменные среды. Благо по умолчанию IConfiguration умеет работать со слоёными конфигами, где по порядку применяются следующие слои:
    1. appsettings.json
    2. appsettings.Environment.json
    3. переменные среды
    4. аргументы командной строки

    Соответственно никакие трансформации не нужны - можно спокойно пушить конфиг в репозиторий, заменяя секреты какими-нибудь заглушками (например мы туда кладём строки, которые похожи на тот секрет, который должен быть)

    Локально (на машине разработчика) переменные среды можно хранить в .env файлах, либо можно продолжать иметь дополнительные appsettings - это тоже ок.

    При разворачивании образа, повторюсь, прокидывай секреты в переменные среды.

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

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Вы умножаете на 2. А надо возводить в квадрат, т.е. в степень 2 ("power").
    Ответ написан
    2 комментария
  • Как происходит деплой небольших веб-сервисов на ASP.NET Core на Linux VPS?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    Самый простой вариант - это на компе разработчика выполнить:
    dotnet publish -c Release -r linux-x64 --self-contained true /p:PublishReadyToRun=true /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true

    Закинуть получившийся бинарь на сервер (через scp например)
    Настроить systemd

    А дальше уже можно накручивать что хочешь.
    Ответ написан
    Комментировать
  • Как происходит деплой небольших веб-сервисов на ASP.NET Core на Linux VPS?

    @Voland69
    Поправлю - git checkout и прочую сборку лучше не на сервере - чем меньше там софта, тем меньше там дырок.
    Так что самый простой случай - делать dotnet publish с нужным профилем и через scp заливать на сервак.
    Еще неплохой способ - докер, тоже можно билд делать на одной машине а на VPS тянуть готовые образы с докерхаба/своего хранилища.
    Ответ написан
    Комментировать
  • Как правильно сравнивать record-ы с byte[] внутри?

    onyxmaster
    @onyxmaster
    Программист, ненастоящий сисадмин
    Я соглашусь с Василием, но дополню что можно завернуть byte[] в какой-то тип, который содержит только одно значение (известно в разных языках как newtype или domain), и будет реализовывать `IEquatable<>`.
    Ответ написан
    1 комментарий
  • Как правильно сравнивать record-ы с byte[] внутри?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    если передать byte[], то сравнивать не хочет, объясните, пожаулйста

    Потому что компилятор генерирует вот такое:
    EqualityComparer<byte[]>.Default.Equals(<x>k__BackingField, other.<x>k__BackingField);

    Если тебе нужно сравнение по содержимому массивов - тебе придётся самостоятельно определить метод с вот такой сигнатурой:
    public virtual bool Equals(TypeEncoding other) {
      // код сравнения this с other
    }

    А также тебе придётся переопределить GetHashCode, чтобы он на одинаковых массивах отдавал одинаковое число.

    Но тут есть нюанс - GetHashCode не должен зависеть от изменяемых типов/полей. Тоесть тебе по хорошему нельзя будет менять содержимое этих массивов, а то можешь получить неприятные спецэффекты, если hashcode поменяется.
    Ответ написан
    3 комментария
  • Какие программы используете для отслеживания рабочего времени?

    Griboks
    @Griboks
    Лично я использую часы. Раньше были попытки детально отслеживать время, но оказалось, что это бесполезная трата времени. Лучше всего замечать интервалы, затраченные на один тип деятельности.
    Ответ написан
    Комментировать
  • В чём ошибка при создании изображение из base64?

    @zkrvndm
    Софт для автоматизации
    когда перевожу из base64 в blob

    А зачем ты это делаешь? Ты в курсе, что base64-изображение можно напрямую вставить в атрибут src и оно (изображение) будет прекрасно отображаться? Пример показа base64-изображения:
    <img src="data:image/gif;base64,R0lGODlhDQAMANUAAFRVVtHd74S192aZzHqVuLq0rvf39+zr6bXI4qizwufdz5WhsmSt/5rC+r3Ezm1zeJiSjmum8tzm9bvZ/6bB5a6qpn+t5dvVzZK88+v8/7vg/7DJ4P/99V5gY8zMzObm5ofD/6zQ/3Fua8fX69fm+vDy9OPi4czh/4SXrJLC/////+7u7Wmt/87f9oG2/5Oku5mZmf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUUADEALAAAAAANAAwAAAZTwJhwSIwhDsUixZEkWhLNYeQVjYUYBIVKSCKeGIOCymCISTATISsCu5RKW1VAkHKBUBDToRxTcUYNGhsdFR8GW0IqJS0ZDyIrh0kqCwBIVR4eTUEAOw==" />
    Ответ написан
    3 комментария
  • Что за код на 10000 строк?

    vabka
    @vabka
    Токсичный шарпист
    Это минифицированный код.
    Спрашивай у автора, где исходники
    Ответ написан
    Комментировать
  • Как разбирать код чужого сайта?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Я бы советовал посмотреть в сторону гитхаба.
    Там куча открытых исходников, притом - нормально оформленных и, нередко, хотя-бы с минимальным подобием документации.
    Выкачивая сайты же есть шансы получить как минимум обсфуцированный код, разбирать который можно до посинения.
    Ответ написан
    Комментировать
  • Как вынести определение формы в другой файл react react-hook-form?

    @Serg32
    Всё правильно, хуки можно использовать непосредственно внутри функциональных компонентов. В данном примере хук вызывается не в самом компоненте, а внутри метода init. Чтобы исправить, можно в самом компоненте вызывать хук useForm и дальше в качестве аргументов конструктора передавать register и handleSubmit.
    class LoginForm {
      public login: any; // по хорошему перенести сюда всю логику определения поля с валидацией
      public password: any; // по хорошему перенести сюда всю логику определения поля с валидацией
      public handleSubmit: any;
    
      constructor(form) {
        this.init(form);
      }
    
      init = (form) => {
        this.login = form.register("login");
        this.password = form.register("password", { required: true, minLength: 2 });
        this.handleSubmit = form.handleSubmit(this.#onSubmit);
      };
    
      #onSubmit = async (data: any) => {
        const api = useContext(ApiContext).authApi; // ERROR
        const userService = useContext(UserContext);
        let navigate = useNavigate();
    
        try {
          const usr = await api.login(data);
          console.log(usr);
          userService.User = new UserModel(usr);
          navigate("/");
        } catch (Exception) {
          alert("не подходит");
        }
      };
    }
    
    function LoginComponent() {
      const form = useForm();
      const loginForm = new LoginForm(form);
    
      return (
        <div className="col-md-offset-3 col-md-6">
          <form className="form-horizontal" onSubmit={loginForm.handleSubmit}>
            <h4>Use a local account to log in.</h4>
            <hr />
    
            <div className="form-group row">
              <label className="col-md-2 control-label" htmlFor="login">
                Login, Email or Phone
              </label>
              {
                <div className="col-md-10">
                  <input className="form-control" {...loginForm.login} />
                </div>
              }
            </div>
    
            <div className="form-group row">
              <label className="col-md-2 control-label" htmlFor="password">
                Password
              </label>
              {
                <div className="col-md-10">
                  <input className="form-control" {...loginForm.password} />
                </div>
              }
            </div>
    
            <div className="form-group row">
              <div className="col-md-offset-2 col-md-10">
                <button className="btn btn-primary">Log in</button>
              </div>
            </div>
          </form>
        </div>
      );
    }
    
    export default LoginComponent;
    Ответ написан
    Комментировать
  • Как организовать изолированную среду выполнения собранного dotnet приложения?

    vabka
    @vabka Куратор тега .NET
    Токсичный шарпист
    Кажется, что прощё сделать софт как SaaS, а хостинг на серверах заказчика сделать только для тех ситуаций, когда это заказчику действительно необходимо и за индивидуальный прайс.
    Даже в случае утечки будет сразу ясно, кто это сделал и набутылить.

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

    Никакие софтовые решения (обфускация, контейнеры, шифрованные виртуалки, передача критичного исполняемого кода по сети) не спасут от тех людей, которые хотят с вами конкурировать или осознанно хотят нарушить соглашения.
    Ответ написан
    4 комментария
  • На чем сделать самый простой сайт?

    paran0id
    @paran0id
    Умный, но ленивый
    https://tilda.cc/ - там и конструктор сайтов, и хостинг. Есть бесплатный тариф.

    https://www.netlify.com - хостинг, есть бесплатный тариф для статических сайтов. Немного тормозной.
    Ответ написан
    Комментировать
  • Что лучше, развернуть фронтенд и бакенд на одном домене или разных субдоменах?

    @romicohen
    Системный Архитектор
    Да воще поф ))

    Единственное что, на одном домене меньше возможной возни с CORS, но это такое себе, несущественное.
    Ответ написан
    2 комментария
  • Что лучше, развернуть фронтенд и бакенд на одном домене или разных субдоменах?

    sergiks
    @sergiks Куратор тега Веб-разработка
    ♬♬
    находясь на едином домене, фронт и бэк беспричинно оказываются «связаны» как минимум общей точкой входа.

    Если их развязать, разместив на разных поддоменах, это позволит, например, независимо переезжать с сервера на сервер только бэку; или перенести статичный фронт на CDN, не трогая бэк.
    Ответ написан
    Комментировать
  • Законно ли писать программу из процедур без in/out параметров, которые оперируют глобальными переменными?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Не стреляйте в пианиста - он играет как умеет.

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

    Как я понимаю, программа эта выполняется локально и монопольно, вряд ли многопоточная, и даже допускаю, что не разрешающая одновременного запуска нескольких инстансов (хотя вот это уже совсем предположение). А потому не вижу никаких противнопоказаний к нормальному рефакторингу и получению в конечном итоге приложения, сохранившего весь функционал, но написанного "по науке".

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

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

    Такие программы сплошь и рядом начинаются как маленькие приблуды, создаваемые одним работником для себя, для облегчения своей работы и снятия с себя тупой рутины. И работодатель тут вообще никаким боком - он не поручал и не заказывал, оно само родилось. И тут уж как работник смог, так и сделал. И то, что программа не просто работает, но и полезна настолько, что принято решение её развивать и это развитие оплачивать - так это работнику жирный плюс.
    Ответ написан
    2 комментария
  • Надо ли знать C# разработчику javascript?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вроде недавно несколько раз задавали такой вопрос.

    Если будешь делать фронтенд, то js тебе понадобится в любом случае.

    Сам по себе в чистом виде асп нет к фронтенду отношения не имеет, но у него есть расширения в виде Blazor и MVC, которые как раз отвечают за фронт.

    ИМХО: тут идеально подходит поговорка "волков бояться - в лес не ходить".
    Сейчас практически все продукты так или иначе связаны с интернетом, а значит с сайтами и js.

    Сам по себе JavaScript очень простой язык и его бояться не следует, особенно если говорить про TypeScript.

    Если вот принципиально не хочешь писать на js, а хочешь писать только на C#, то обрати внимание на геймдев с Unity и десктопную/мобильную разработку с WPF, Winforms, Xamarin, MAUI, UNO, Avalonia
    Ответ написан
    4 комментария