• Возможно ли сделать nested enum c/c++?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Если мы говорим про C, то так делать нельзя:
    1. Вложенные в enum определения делать нельзя - это ограничение самого синтаксиса (дока)
    2. Для использования перечислений не надо указывать само название перечисления. Т.е. не OBJ::SOMETHING, а просто SOMETHING. Т.е. видимость глобальная и нельзя дублировать названия, даже для разных enum

    В случае C++ аналогично. Есть хак - использование неймспейсов или структур для топ левела, но не в твоем случае - ты хочешь топ левел перечислениям значения задавать

    На мой взгляд тут решение:
    1. Разбить их на различные перечисления
    2. Добавить каждому префикс
    enum OBJ = 0 {
           Default = 0,
           Something_Something1 = 1,
           Something_Something1 = 2,
           Something = 7
    };
    Ответ написан
    Комментировать
  • Как замаскировать переменную внутри контейнера?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Нет. Это переменная окружения, ее нельзя просто взять и удалить.
    Если надо передавать секреты разные, то тут лучше маунтить секреты как файлы (docker secrets) - https://docs.docker.com/engine/swarm/secrets/
    Ответ написан
  • Как решить проблему database is locked?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Скорее всего проблема здесь:
    SQLiteDataReader reader = command.ExecuteReader();

    Ты его не закрываешь и в результате соединение висит.
    Подсказка: от реализует интерфейс IDisposable
    Ответ написан
  • Как обеспечить относительный путь к БД SQLite?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Скорее всего рабочая директория другая - не директория с исходным кодом. Т.к. запуск производится где-то из bin/Debug/net8.0/..., а там этой БД и нет.
    Тут 2 решения:
    1. Прописывай относительный путь с учетом папки: ../../../database/Keys.db
    2. Прописывай абсолютный путь

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

    P.S. путь для 1 кейса не факт что правильный - поиграйся с путями
    Ответ написан
    3 комментария
  • Что означает оператор => в linq c#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Это называется лямбда функция - https://metanit.com/sharp/tutorial/3.16.php
    Ответ написан
  • Psq восстановление бэкапа, что делаю не так?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Значит есть открытая сессия с этой БД. Закрой ее (например, pg_terminate_backend()) и повтори заново
    Ответ написан
    Комментировать
  • Как правильно восстановить бэкап созданный с помощью pg_dumpall?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Судя по всему эта бд/таблицы уже существуют.
    Тут 2 варианта:
    - Удаляешь БД вручную и запускаешь заново
    - Делаешь новый бэкап, но добавляешь флаг --clean (чтобы DROP DATABASE выражение тоже было, т.е. пересоздать) - pg_dumpall --clean > db.out
    Ответ написан
    5 комментариев
  • Чем можно проанализировать дедлоки?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Можно использовать системный каталог - pg_stat_activity в помощь.

    Вот так, можно показать приложения (скорее сессии) и их запросы, которые заблокированы в транзакции:

    select application_name
    	, client_addr
    	, state
    	, query
    from pg_stat_activity
    where wait_event_type = 'Lock' and wait_event = 'transactionid';


    Но строка запроса тут plain text (с подставленными значениями). Если есть расширение pg_stat_statements, то можно использовать query_id, чтобы нормализовать ее

    select a.application_name
    	, a.client_addr
    	, a.state
    	, s.query
    from pg_stat_activity a
    	join pg_stat_statements s on a.query_id = s.queryid
    where wait_event_type = 'Lock' and wait_event = 'transactionid';


    Дальше все просто - находишь кто эти запросы посылает (если сервисов несколько) и по строке определяешь в каком месте затык/дедлок

    P.S. также есть pg_locks, но он больше про блокировки объектов БД
    Ответ написан
    Комментировать
  • Как всегда использовать https?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Редирект выполняется с помощью кодов HTTP. Например, 301.
    Можно заставить свой веб-сервер (те же самые nginx/apache) всегда редиректить на HTTPS.
    Либо, клиент может заставить браузер по умолчанию слать запросы в https
    Ответ написан
  • Как вписывать инпут во время дебагга c++ (g++)?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Пиши во вкладке Terminal (она рядом)
    Ответ написан
  • Как устранить ошибку конверсии при использовании битовых полей?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Я протестировал это (со встроенным (addr >> 12) * 0xFFFFu) у себя на GCC (версия 11.4.0) и clang (14.0.0) на x86_64. Дополнительно в нескольких онлайн компиляторах. И на MinGW (версия 6.3.0).
    Нигде предупреждений подобных не встречал.
    Скорее всего это особенность версии компилятора/платформы.
    Ответ написан
  • Как перезаписать файл в Linux без права на его прочтение?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    2 варианта:

    1. Полностью перезаписать его: echo 'New data' > write-only-file
    2. Дозаписать данные в конец: echo 'New data at end' >> write-only-file
    Ответ написан
    2 комментария
  • Как можно реализовать ограничение на одновременное скачивание файлов?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Проблема с методом File - он возвращает ленивый ответ. Т.е. он не читает весь поток сразу, а ждет пока будет вызван метод от IActionResult, поэтому семафор берется и сразу же отпускается.
    Чтобы эту проблему решить надо знать, когда файл точно отправлен.
    Предлагаю сделать декоратор специальный. Например:

    [ApiController]
    [Route("[controller]")]
    public class SampleController : ControllerBase
    {
        private readonly IRateLimiter _rateLimiter;
    
        public SampleController(IRateLimiter rateLimiter)
        {
            _rateLimiter = rateLimiter;
        }
    
        [HttpGet("connection")]
        public async Task<IActionResult> DownLoadFile(Guid file)
        {
            var stream = await GetFileStream(file);
            return new RateLimiterFileActionResult(File(stream, "content/type", "sample.txt"), _rateLimiter);
        }
    }
    
    class RateLimiterFileActionResult : IActionResult
    {
        private readonly IActionResult _actionResultImplementation;
        private readonly IRateLimiter _rateLimiter;
    
        public RateLimiterFileActionResult(IActionResult actionResultImplementation, IRateLimiter rateLimiter)
        {
            _actionResultImplementation = actionResultImplementation;
            _rateLimiter = rateLimiter;
        }
    
        public async Task ExecuteResultAsync(ActionContext context)
        {
            try
            {
                await _rateLimiter.ObtainAsync(context.HttpContext.RequestAborted);
                await _actionResultImplementation.ExecuteResultAsync(context);
            }
            finally
            {
                await _rateLimiter.ReleaseAsync(context.HttpContext.RequestAborted);
            }
        }
    }
    
    public interface IRateLimiter
    {
        public Task ObtainAsync(CancellationToken token);
        public Task ReleaseAsync(CancellationToken token);
    }


    Здесь используется не семафор, а специальный интерфейс, хотя разницы особо нет.
    Также, стоит заметить, что блокировка берется внутри метода декоратора, а не в методе контроллера - например, пользователь отменит запрос и тогда надо будет думать как семафор отпустить - в этой реализации думать не надо.
    Ответ написан
    1 комментарий
  • Проверка файлов в папке на целостность?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    В общем случае - никак.
    Если мы говорим о шлешке, то на ней скорее всего будут FAT32 или NTFS. Но они не хранят чек-суммы для своего содержимого. Тут надо обходиться своими силами - хранить отдельный файл с чек-суммами. Но, думаю, их нет.
    Все что можно проверить - это целостность самой файловой системы, но даже если фс в порядке, то не факт, что содержимое файлов нормальное с точки зрения приложения/пользователя
    Ответ написан
    Комментировать
  • Как сделать статические переменные видимыми в инспекторе в Unity?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Это сделать нельзя.
    Для обхода - создай прокси поле объекта и через него обновляй состояние статической переменной
    Ответ написан
    2 комментария
  • С какого количества записей индексация имеет смысл?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Делать индексацию ради индексации - плохая затея.
    На малом количестве записей она либо заметна не будет, либо планировщик просто не будет его (индекс) использовать.
    Когда и на что делать индексы лучше определять:
    - Это основной юз. кейс приложения - например поиск нужного документа по номеру ФЗ
    - Объемное тестирование показало большую деградацию производительности

    Также меня интересует само индексированное поле. Если это просто имя пользователя (Иван, Алексей, Елена), то:
    1. Индекс лучше не строить, т.к. селективность будет большой и индекс будет редко использоваться
    2. Создать индекс на нормализованное имя - CREATE INDEX name_idx ON users (lower(name));

    Но если это username/login (т.е. неизменяемый логин пользователя), то в принципе нормально.
    Ответ написан
    Комментировать
  • Почему не работает условие по уникальному индексу?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Попробуй переиндексировать таблицу: REINDEX TABLE cart;
    Также, возможно уже есть такая запись с NULL
    Ответ написан
    Комментировать
  • Как сделать сразу несколько поисковых запросов в яндекс одновременно?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Вот такой js можно сделать:

    var queries = ['запрос один', 'запрос два']
    queries.forEach(q => window.open(`https://yandex.ru/search/?text=${encodeURIComponent(q)}`))


    Запускаешь в консоли разработчика: ctrl + shift + i
    Ответ написан
    Комментировать
  • С чего начать в канальных матрицах?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    p(x,y) - это вероятность наступления события x и y вместе:
    - Строки - это Xi
    - Столбцы - это Yi

    Т.е. если суммировать по 2 столбцу получишь априорную вероятность наступления Y2 - 0.25 (когда не знаем наступил ли Xi)

    Теперь, переходим к формуле энтропии:

    660a2da827a58985914185.png

    Проходишь по каждому элементу матрицы и рассчитываешь для него значение по этой формуле и суммируешь.
    Конечно, обходишь значения нулевые, т.к. логарифм от 0 лучше не считать)
    - p(x,y) - тебе известны, это значения матрицы
    - p(y) - уже объяснял, это априорная вероятность наступления y (для каждого столбца он одинаков)

    -(0.1 * log(0.1 / 0.1) + 0.4 * log(0.4 / 0.65) + 0.2 * log(0.2 / 0.25) + 0.05 * log(0.05 / 0.65) + 0.05 * log(0.05 / 0.25) + 0.2 * log(0.2 / 0.65)) - посчитаешь сам
    Ответ написан
    Комментировать
  • Как заменить слова в колонке по точному совпадению?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    UDPATE posts SET theme = 'IT' WHERE theme = 'it'
    Ответ написан
    2 комментария