• Чем можно выразить переменную из уравнения?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    То что тебе нужно называется "компьютерная алгебра".
    Знаю одну библиотеку, которая что-то такое умеет, но можно ли будет с помощью неё решить вашу задачу - я не знаю:
    https://symbolics.mathdotnet.com/

    По крайней мере на основе неё можно будет реализовать какой-нибудь алгоритм по разворачиванию уравнений.
    Ответ написан
    Комментировать
  • Как настроить множество сеервисов на одном сервере?

    @Drno
    Могу ошибиться, но я бы пробовал так.
    Снаружи лишние порты закрываем iptables.

    Далее в nginx делаем revers_proxy
    1. Без указания ip и домена - редирект на damain.com
    2. Домен1 - на такой то ip:порт
    3. Домен2 на такой то ip:порт.

    Мне кажется в таком случае всё лишнее уйдет на domain.com
    А сервисы уйдут только при обращении к доменам

    Насчет майнкрафта - хз как его проксировать. Аидимо только с помощью модуля stream
    Ответ написан
    3 комментария
  • Каким образом можно создать виртуальную сетевую папку в ubuntu?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Все просто.
    1) Делаете VPN (OpenVPN или WireGuard) между серверами
    2) Ставите на сервер дома NFS-сервер, и расшариваете папочку, пусть будет /mnt/share
    3) На удаленном сервере монтируете в какой нибудь каталог mount -t nfs /mnt/share 192.168.XXX.XXX:/mnt/share
    Ответ написан
    Комментировать
  • Каким образом можно создать виртуальную сетевую папку в ubuntu?

    @AlexVWill
    Как то так.
    Работает точно также как обычное SSH соединение, но получаем доступ не к командной строке, а к файловой системе, удаленный том которой можно замепить как локальный, и работать с ним из проводника.
    Крайне рекомендуется при этом настроить доступ не по логину-паролю, а по ключу.
    Ответ написан
    7 комментариев
  • Как в web api ипользовать index.html по умолчанию?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Так
    https://learn.microsoft.com/en-us/aspnet/core/fund...
    var options = new DefaultFilesOptions();
    options.DefaultFileNames.Clear();
    options.DefaultFileNames.Add("mydefault.html");
    app.UseDefaultFiles(options);
    
    app.UseStaticFiles();
    Ответ написан
    1 комментарий
  • Как копировать ReadOnlySpan со смещением?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Бери Span от массива, в который ты хочешь записать данные, и бери Slice от него.
    var array = new byte[10];
    var span = new ReadOnlySpan<byte>(new byte[5]{1,2,3,4,5});
    span.CopyTo(array.AsSpan<byte>().Slice(2,5));
    // array.Dump(); // 0 0 1 2 3 4 5 0 0 0

    Это работает благодаря тому что Span не копирует данные, а берёт указатель на область памяти.
    Ответ написан
    Комментировать
  • Как сделать быструю проверку на разрешенные символы?

    @EasyGame
    Быстрее всего запихать допустимые символы в SortedSet и проверять в цикле. Код бенчмарка и результат под спойлером.
    спойлер
    using BenchmarkDotNet.Attributes;
    using BenchmarkDotNet.Running;
    using System.Security.Cryptography;
    using System.Text.RegularExpressions;
    
    namespace ConsoleApp19
    {
        [MemoryDiagnoser]
        public partial class Program
        {
            const string whitlistchars = "qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM1234567890-_";
    
            static readonly string Source10k = string.Join("", Enumerable.Range(0, 10000).Select(x => whitlistchars[RandomNumberGenerator.GetInt32(0, whitlistchars.Length)]));
            static readonly string Source128 = string.Join("", Enumerable.Range(0, 128).Select(x => whitlistchars[RandomNumberGenerator.GetInt32(0, whitlistchars.Length)]));
    
            [GeneratedRegex("^[A-Za-z0-9_-]+$")] private static partial Regex Filter();
    
            static readonly SortedSet<char> whiteList = new();
            static bool CheckSymbolRegex(string symbol) => Filter().IsMatch(symbol);
    
            static bool CheckSymbolNative(char symbol)
            {
                if ((symbol >= 'A' && symbol <= 'Z')
                    || (symbol >= 'a' && symbol <= 'z')
                    || (symbol >= '0' && symbol <= '9')
                    || symbol == '_'
                    || symbol == '-') return true;
    
                return false;
            }
    
            [Benchmark]
            public bool CheckRegex10k()
            {
                return CheckSymbolRegex(Source10k);
            }
    
            [Benchmark]
            public bool CheckNative10k()
            {
                foreach (var symbol in Source10k)
                {
                    if (!CheckSymbolNative(symbol)) return false;
                }
    
                return true;
            }
    
            [Benchmark]
            public bool CheckSortedSet10k()
            {
                foreach (var symbol in Source10k)
                {
                    if (!whiteList.Contains(symbol)) return false;
                }
    
                return true;
            }
    
            [Benchmark]
            public bool CheckRegex128()
            {
                return CheckSymbolRegex(Source128);
            }
    
            [Benchmark]
            public bool CheckNative128()
            {
                foreach (var symbol in Source128)
                {
                    if (!CheckSymbolNative(symbol)) return false;
                }
    
                return true;
            }
    
            [Benchmark]
            public bool CheckSortedSet128()
            {
                foreach (var symbol in Source128)
                {
                    if (!whiteList.Contains(symbol)) return false;
                }
    
                return true;
            }
    
            static void InitWhiteList()
            {
                foreach (var symbol in whitlistchars)
                {
                    whiteList.Add(symbol);
                }
            }
    
            static void Main(string[] args)
            {
                InitWhiteList();
    
                var summary = BenchmarkRunner.Run<Program>();
                Console.ReadKey();
            }
        }
    }

    63f73e97262f3947939976.png
    Ответ написан
    1 комментарий
  • Как сделать быструю проверку на разрешенные символы?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Да, просто получаете код символа из строки и далее просто проверяете попадает ли он в диапазон нужных вам символов или совпадает ли с разрешенными символами. Если все равно недостаточно быстро будет, то можно использовать таблицу переходов. Создаете массив и в каждой ячейке под номерами требуемых символов ставите флаг, что такой-то символ разрешен. В этом случае время проверки одного символа всегда будет фиксированным и равняться времени, условно, времени выполнения двух операций: "сложить адрес начала массива и номер символа" и "получить значение по адресу". Условно - потому что никогда не знаешь, какой сюрприз может выдать оптимизатор и что в итоге будет, а еще есть всякие виды адресации, смещения и прочее. Так то оптимизатор может и обычный CASE оптимизировать до таблицы переходов - но я не знаю есть ли такая оптимизация в C# и если есть - то при каких условиях она работает.
    Ответ написан
    Комментировать
  • Как преобразовать тип ReadOnlySpan?

    WNeZRoS
    @WNeZRoS
    Из ReadOnlySpan<byte> можно распарсить число при помощи System.Buffers.Text.Utf8Parser.TryParse
    Пример использования можно увидеть в этой статье.
    Ответ написан
    Комментировать
  • Как преобразовать тип ReadOnlySpan?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если нет заморочек с кодировками, то каст должен сработать:
    ReadOnlySpan<char> charsSpan = MemoryMarshal.Cast<byte, char>(bytes);

    https://learn.microsoft.com/en-us/dotnet/api/syste...

    И судя по исходникам, каст не выделяет новую память: https://source.dot.net/#System.Private.CoreLib/src...
    Ответ написан
    Комментировать
  • В visual studio теперь нет UWP C++?

    TrueBers
    @TrueBers
    Гуглю за еду
    63ec4216a94ac078531627.pngВсё на месте. Blank App (C++/WinRT) template создаёт XAML проект.
    Ответ написан
    Комментировать
  • Как лучше создать кастомный установщик?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Можно ли вообще все делать автоматически? Грубо говоря при каждом компилировании MyApp.installer он сам добавлял актуальные файлы из папки release?

    Да, легко: есть такая штука, называется post build script (события сборки) - в настройках проекта все есть. А вообще, правильнее было бы сделать три проекта, а не два: приложение, установщик, сборщик дистрибутива. И вот как раз сборщик и указывать в post build скрипте.
    Ответ написан
    1 комментарий
  • Как выключить автоматическое summary?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Tools->Options->Text Editor->C#->Advanced

    Generate XML documentation comment for ///
    Ответ написан
    Комментировать
  • Что использовать для синхранизации данных?

    @rPman
    Если все реализуешь ты сам, то у тебя должна быть реализация undo/redo, отмена действий и их обратный повтор. Реализуется это обычно тем что либо на машине локально сохраняются состояния документа (буквально память) на каждое действие отмены, либо для каждого действия у тебя должна быть обратная операция.
    Что значит обратная операция - нарисовать линию - удалить линию, удалить линию - нарисовать линию (т.е. буквально в момент удаления линии ты должен в лог действий сформировать запись о том как эту линию создать)

    Соответственно каждое твое действие с документом должно логироваться в лог действий (пар действий).

    Именно этот лог нужно передавать по сети сразу всем открывшим документ (в т.ч. на чтение), он обычно максимально компактный, так как олицетворяет в себе как раз изменения в документе.

    Теперь самое главное - нужен самый главный (сервер или в p2p среде случайно выбранный один из участников) которому весь лог отправляется и который перенаправляет действия остальным, на самом деле можно паралельно и напрямую отсылать для отзывчивости но главный разруливает конфликты, или даже не допускает (реальное изменение происходит как только главный скажет что данные дошли до всех клиентов, но визуально это лаги, это некомфортно). Разруливать конфликт можно просто откатом операции автоматически (например прописать приоритетность для каждого действия). Если сделаешь механизм ручного разруливания конфликтов - тебе пользователи спасибо скажут.
    Ответ написан
    Комментировать
  • Nginx: как лучше сделать переброс портов игровых серверов?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Если нужно, что-бы весь трафик на GAME_PORT попадал БЕЗ ИЗМЕНЕНИЙ на игровой сервер - тогда stream{}. Меняться будет только IP-адрес "игрока" на адрес этого NGINX-сервера.

    Если нужно что-нибудь изменять в трафике, проксировать его - тогда proxy_pass. Но это хоть и маленький, но всё-таки лаг. И IP-адрес "игрока" тоже будет меняться на адрес NGINX-сервера, но можно добавить HTTP заголовок "X-Real-Ip" или "X-Forwarded-For", с исходным адресом "игрока"...

    P.S. Порт, которого нет в списке, просто вообще не будет открываться, никак.
    Ответ написан
    8 комментариев
  • Nginx: как лучше сделать переброс портов игровых серверов?

    @q2digger
    никого не трогаю, починяю примус
    Ответ написан
    Комментировать
  • Почему nextcloud не может писать в папке home?

    Melkij
    @Melkij
    PostgreSQL DBA
    У www-data нет x прав на директорию /home/username/
    Ответ написан
    Комментировать
  • Какие менеджеры линукс существуют?

    @maybebaby
    Есть разные реализации подобной функциональности, отличаются принципами работы, возможностями кастомизации:

    https://github.com/afaqurk/linux-dash
    https://github.com/netdata/netdata
    https://github.com/nicolargo/glances
    https://github.com/wtfutil/wtf - этот вариант очень гибкий, но придется потратить время на настройку

    Заббикс, являющийся почти стандартом в индустрии, требует изучения, но позволит вам мониторить вообще что угодно и где угодно:
    https://www.zabbix.com/ru/

    Однако изучение одной системы путем установки каких-либо дашбордов или мониторинга - путь не совсем верный. Правильнее было бы погуглить команды, которые выполняют ваши задачи по-отдельности (просмотр списка пакетов, вывод списка запущенных сервисов, процессов, пользователей. Изучить базово systemd и пакетный менеджер). Ни один из перечисленных инструментов не решит вашу задачу из коробки, а не понимая как устроен Linux, вы не сможете корректно их настроить.
    Ответ написан
    1 комментарий
  • Как лучше всего использовать Electron и c#?

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