Задать вопрос
  • Как реализовать систему отслеживания статуса пользователя программы реализованную на C#?

    @cicatrix
    было бы большой ошибкой думать
    А по какому протоколу работает связь клиент-сервер?
    Если TCP, то ведь можно просто опрашивать состояние соединения и держать его всё время ESTABLISHED. Правда, такой подход годится для относительно малого числа клиентов. Если их счёт пошёл на тысячи, то да, нужно опрашивать периодически.
    Ответ написан
  • Как запрашивать клавишу во время виполнения цикла (Console.ReadKey)?

    @cicatrix
    было бы большой ошибкой думать
    Ожидай нажатие в другом потоке
    class Program
    {
        static volatile bool exit = false;
        static void Main(string[] args)
        {
            Console.WriteLine("ESC - выход");
            Task.Factory.StartNew(() =>
            {
                while (Console.ReadKey().Key != ConsoleKey.Escape) ;
                exit = true;
            }); // ожидание нажатия в другом потоке
    
            while (!exit) // долгий цикл
            {
                // выполнение долгой операции
            } // while
        } // Main
    } // class Program
    Ответ написан
  • Какие материалы изучить для написания читов для игр?

    @cicatrix
    было бы большой ошибкой думать
    Любой "чит" представляет собой программу, которая находит в адресном пространстве памяти, выделенной под игровой процесс, необходимые данные и видоизменяет их.
    Собственно, сам по себе чит соорудить дело нехитрое. Найти работающий процесс, прошерстить его память, найти нужные данные и записать на их место другие (кол-во жизней, патронов и пр).
    Просто - да, но дьявол в деталях. Поиск необходимой вам информации - процесс долгий и муторный. Распространённые "универсальные" читы вроде CheatEngine работают путём сравнения состояний до и после изменения, тем самым, сужая круг поиска. Но это неоптимально. Нормальный чит - продукт реверс-инжиниринга игровой программы, где ты уже точно знаешь, как игра распределяет в памяти свои ресурсы и как их искать.
    Наличие исходного кода игры сильно помогает, но только отчасти.
    Разумеется, разработчики игр знают обо всех этих приёмчиках и стараются максимально затруднить подобные действия. Одним из самых эффективных методов защиты является сохранение состояния игры за пределами машины игрока (на сервере разработчика). Нормальный разработчик просто не учитывает или игнорирует некорректное состояние клиентской машины. Внедрить чит игру с такой архитектурой нереально. Но часто разработчики идут на компромиссы, чтобы не хранить вообще всё на сервере, часть данных размещается на машине клиента. С этим уже можно работать, но алгоритмы на сервере направлены на поиск несоответствий в состоянии клиента и последующие санкции, если игрок будет уличён в использовании читов.
    Ну и есть конченные разработчики, позволяющие изменять состояние клиента как угодно. Но обычно такие игры просто теряют своих клиентов потому что из-за обилия читеров становится невозможно играть.
    Ответ написан
  • Какие книги можете посоветовать для Backend-разработчика?

    @cicatrix
    было бы большой ошибкой думать
    Для понимания того, что такое REST нужно потратить 15 минут времени на чтение любой статьи на эту тему. Это просто концепция, которую многие современные разработчики понимают как SQL over Http.
    Основная идея - серверу пофиг на состояние клиента, всю необходимую информацию для выполнения запроса сервер должен получить за один запрос.
    Ответ написан
    8 комментариев
  • С помощью какой утилиты или иного способа в Windows можно измененять цвета шапки и пункта на панели задач в зависимости от названия окна?

    @cicatrix
    было бы большой ошибкой думать
    Насчёт утилит - не знаю, но всегда можно сделать borderless окно и рисовать заголовок самому.
    В общем случае, отрисовка заголовка системой производится ОС по настройкам, действующим для всех окон.
    Ответ написан
    Комментировать
  • Как реализовать страницу для тестирования учеников?

    @cicatrix
    было бы большой ошибкой думать
    Уж больно богатая тема для фантазий.
    А что именно вызывает затруднения? Вроде бы проектирование вполне прямолинейное -
    таблица вопросов, таблица ответов, таблица вариантов теста. Назначение варианта студенту, из ЛК запрос на тест с вопросами, обратный запрос пересылает ответы. На стороне сервера сверяется правильно/неправильно.
    Ответ написан
    1 комментарий
  • Использование ЭЦП в аутентификации?

    @cicatrix
    было бы большой ошибкой думать
    Ассиметричный шифр предусматривает 2 ключа - закрытый и открытый
    Предусматривается, что закрытый ключ никто не знает, кроме владельца, открытый известен всем.
    Открытым ключом можно расшифровать сообщение, зашифрованное закрытым ключом, но само шифрование можно осуществить только при помощи закрытого ключа.
    На этом основывается действие ЭЦП. Если при помощи открытого ключа я могу расшифровать сообщение, значит я точно знаю, что его зашифровал владелец.
    Для большей надёжности, каждый сеанс данные шифруются при помощи обычного симметричного шифра, ключ к которому случайным образом генерируется и обновляется каждый сеанс.
    Передача такого ключа по незащищённому каналу осуществляется по алгоритму Диффи-Хэллмана, специально для этого разработанному. Вот там-то и используются закрытые и открытые ключи ассиметричного шифра.
    Ответ написан
    Комментировать
  • Как возвести в степень значение biginteger на biginteger?

    @cicatrix
    было бы большой ошибкой думать
    Никто в реальных реализациях такой фигнёй не занимается. Ты постигаешь основы криптографии, но забыл изучить раздел "модульная арифметика".
    https://ru.wikipedia.org/wiki/Возведение_в_степень...
    Само число ведь не нужно. Нужен остаток от деления по модулю.
    В противном случае тебе нужно будет реализовать класс, куда будут упаковываться числа нужной битности для 1024 бит тебе потребуется 16 long-ов. Ну и дальше - реализовать арифметику.
    Ответ написан
    Комментировать
  • Как передать тип связанного элемента в преобразователь (конвертер)?

    @cicatrix Автор вопроса
    было бы большой ошибкой думать
    Кому интересно будет - задолбался я с этими байндингами и решил "в лоб" через событие AutoGeneratingColumn(:

    private void DgRefTable_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        DataGrid dg = (DataGrid)sender;
        object src = dg.ItemsSource;
        Type type = src.GetType().BaseType.GetGenericArguments()[0];
        PropertyInfo property = type.GetProperty(e.Column.Header.ToString(), BindingFlags.Public | BindingFlags.Instance);
        if (property.IsDefined(typeof(RTFieldAttribute), true))
        {
            e.Column.Header = ((RTFieldAttribute)property.GetCustomAttributes(typeof(RTFieldAttribute), true)[0]).HeaderText;
        }
    }
    Ответ написан
    Комментировать
  • Как остановить выполнение по достижению времени?

    @cicatrix
    было бы большой ошибкой думать
    Если код синхронный без многопоточности, то
    var t = DateTime.Now;
    var interval = new TimeSpan(0,3,0);
    while(DateTime.Now - t < interval)
    {
     \\ ...
    }

    Если асинхронный или методы долгие, то по таймеру.
    Ответ написан
    Комментировать
  • Как мне переделать код на Windows forms чтобы он считал количество букв в каждом слове?

    @cicatrix
    было бы большой ошибкой думать
    Ну если в лоб делать так, как написано в условии, то:
    string input  = "Раз два три четыре пять, я иду искать";
    string[] words = input.Split(new char[] { ' ', ',', '.', '-', '!', '?' }, StringSplitOptions.RemoveEmptyEntries);
    foreach(var word in words) { Console.WriteLine($"{word}: длина {word.Length}"); }
    Ответ написан
  • Запрос отменён. Невозможно закрыть поток до завершения записи всех байтов?

    @cicatrix
    было бы большой ошибкой думать
    Такое чувство, что дело в Using.
    У объекта, который заключён внутри Using при выходе из него автоматически вызывается Dispose().
    И поток, в который ты записал POST данные, отправляется в сборщик мусора, ещё до отправки.
    SW тебе вообще не нужен, если ты туда байты записываешь, можно и сразу в поток писать.
    В общем, убери using и явно вызывай Dispose после завершения запроса.
    Ответ написан
    Комментировать
  • Как найти строку после символа?

    @cicatrix
    было бы большой ошибкой думать
    using System;
    using System.Text.RegularExpressions;
    namespace ConsoleApp2
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                string input = "blablabla print('Test 1'); blabla print('Test 2')";
                string pattern = @"print\(\'([^\']*)\'\)";
                foreach (Match m in Regex.Matches(input, pattern))
                {
                    Console.WriteLine(m.Groups[1].Value);
                } // foreach
                Console.ReadLine();
            } // Main
        } // class Program
    } // namespace


    Вывод:
    Test 1
    Test 2
    Ответ написан
  • С чего начать создание простой игры?

    @cicatrix
    было бы большой ошибкой думать
    Со сценария (я серьёзно).
    Потом бумажные эскизы основных экранов, полное описание механики игрушки (как движется персонаж, что он делает, какое у него там здоровье, чем и в кого стреляет, какие апгрейды бывают и т. д.).
    Потом поэтапно - под каждый пункт описания продумывается алгоритмическая реализация.
    Потом выбирается платформа (движок). Изучается документация, можно ли (сложно ли) реализовать на этом движке всё задуманное. Возможно, на этом же этапе стоит подумать о создании графических элементов дизайна, пользовательского интерфейса и пр. Хотя бы в виде "болванок", которые впоследствии должны будут быть заменены на нормальную графику.
    ...
    Вот примерно после этого можно начать писать какой-то программный код по уже продуманным на предыдущем этапе элементам реализации.
    Ответ написан
    Комментировать
  • Как можно выполнять действие каждый кадр, или при изменении размера окна Windows Forms?

    @cicatrix
    было бы большой ошибкой думать
    Установи свойство Dock в значение Fill или закрепи текстбокс при помощи свойства Anchor
    Ответ написан
    Комментировать
  • Как сократить до 4 знаков после запятой, для cos2 и sin2?

    @cicatrix
    было бы большой ошибкой думать
    Решение вашей проблемы кроется в вашем же коде.
    Помедитируйте на эти строчки и спросите себя, почему i выводится в нужном формате, а SinCos - неотформатировано:
    Console.WriteLine("i = {0:f4}", i);
    Console.WriteLine(new SinCos(i));
    Ответ написан
    Комментировать
  • C# .net 3.1 произвольно закрывается программа, куда копать?

    @cicatrix
    было бы большой ошибкой думать
    В программу... какой вопрос, такой ответ.
    В логи винды глянь, там сообщения об ошибках в приложениях возникают. Ну и поподробнее бы узнать, что за программа, что делает, к каким ресурсам обращается.
    Ответ написан
    3 комментария
  • Что такое "!="?

    @cicatrix
    было бы большой ошибкой думать
    В Си-подобных языках != - это проверка неравенства. В других языках используется <>.
    Данный код вылетит с ошибкой, если в текстовые поля ввести не цифры, а буквы.
    Вместо Convert.ToInt32 нужно пользоваться int.TryParse
    Ответ написан
    Комментировать
  • Ребят, какой вид цикла лучше использовать при вводе данных?

    @cicatrix
    было бы большой ошибкой думать
    Любой конечный цикл на машинных инструкциях выглядит как проверка условия + условный переход.
    В целом, тот же goto завёрнутый в красивую обёртку.
    Так что для процессора разницы нет никакой. Она есть для того, кто будет читать/поддерживать программу, поэтому пиши код так, будто сопровождать его будет кровожадный маньяк-психопат, который знает, где ты живёшь.
    Сделай свой код понятным и читаемым.
    Ответ написан
    Комментировать