• Можно ли автоматически урезать качество изображений в React?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Да, можно и это надо делать предварительно на сервере специальными утилитами/сервисами. Во-первых - оптимизация трафика, во-вторых - производительности на клиенте.
    Ответ написан
    Комментировать
  • Как настроить раид и кеш для приватного файлового сервера?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    FreeNAS имеет поддержку нескольких уровней кэширования из коробки. Первый уровень - ОЗУ: индекс ФС плюс вся оставшаяся под кэш. ЕМНИП, индекс - по гигу ОЗУ на ТБ хранилища надо. Далее - ССД как второй уровень и далее уже диски. Главная рекомендация по железу: используйте ECC память, т.к. чем больше хранилище - тем выше вероятность того, что в него попадет ошибка и сохранится. Особенно если RAID.
    Ответ написан
  • С помощью какого контроллера(процессора или микросхемы),можно сделать диск(обычный HDD ), видимым в локальной сети ,с возможностью подключения к нему?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Эта "микросхема" называется "Персональный компьютер". Самый простой вариант: обычная малинка/апельсинка с SATA контроллером/кабелем. Чуть более гибкий и производительный вариант: кастомная сборка ПК на основе материснкой платы формата ITX со встроенным процессором. Еще можно купить готовую коробочку для сборки NAS по типу мини ПК. Тут как раз недавно был вопрос похожий: Как правильно выбрать железо для домашнего сервера?
    В качестве ОС отлично подойдет FreeNAS.
    Ответ написан
    2 комментария
  • Как одновременно работать с одной папкой двум копиям приложения?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    В данном случае проще всего будет просто связать оба инстанса друг с другом и использовать второй инстас как резервный. Например через банальную проверку друг друга по сети запросом каким-нибудь. Один инстанс работает, а другой проверяет, что первый инстанс работает верно. Если первый инстанс не отвечает, висит, сломался и т.п. - в работу включается второй и где-нибудь ставит флаг/файл/что угодно и как, что теперь он основной, а первый - резервный будет, когда заработает и отправляет сообщение ответственному.

    Чуть более сложный вариант: использовать, например, редис для хранения состояния процесса работы и через него синхронизировать инстансы. Например: первый сервис определил для себя задачу и сообщает об этом второму, что он взял такую-то задачу или такие-то файлы. Соответственно второй сервис эти файлы не трогает. Или, оба инстанса смотрят в каталог, как только что-то обнаруживают - помещают в очередь задач. А при появлении задачи в очереди - оба сервер генерируют случайно число и так выбирают кто из них возьмет следующую задачу из очереди. Т.о. можно, этих инстансов наплодить сколько угодно.

    Более правильный вариант: разделить функционально вашу задачу на несколько более простых. А именно: вместо проверки каталога, запустить на том сервере, где находится данный каталог с файлами сервис наблюдения ФС, который использует системные уведомления об изменениях файловой системы. И при наступлении нужных событий - отправляет запрос в очередь на обработку, например в тот же редис, а оттуда запрос забирает один из инстансов и обрабатывает его.
    Ответ написан
  • Как можно организовать онлайн доступ к приложению на MS Access?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Самый простой вариант: на сервер ставится и настраивается WireGuard и клиенты используют его для подключения к серверу.
    Ответ написан
  • Как разместить web api на FTP сервере?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    После загрузки исполняемого файла на сервер его еще надо запустить как приложение или сервис. Кроме того, просто обычный фтп сервер для документов и сервер с фтп сервисом для загрузки файлов на него - это две разные вещи. Вообще, вам надо не фтп, а стандартный SSH для подключения к серверу, загрузки файлов на него и настройки сервера для запуска вашего приложения на нём.
    Ответ написан
    6 комментариев
  • Как убрать ненужное пространство между кнопками c++ Windows forms CLI?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Смотрите свойства Margin и Padding у самих контролов и их контейнеров.
    почему писать GUI на C++/CLI не самая лучшая идея?

    Потому что на шарпе c WPF/MAUI проще.
    Ответ написан
    Комментировать
  • Как в Telegram вернуть вставку длинного тире при вводе --?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Alt + [NumPad] 0151
    Ответ написан
  • Как правильно выбрать железо для домашнего сервера?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Mini ITX со встроенным 4-х ядерным процессором, слотом M2 и полноформатными или ноутбучными слотами памяти - смотря какая завалялась пара плашек памяти в наличии. Маленький, но качественный БП (например FSP) и любой корпус. Ну и любой ССД под систему - М2 или сата тоже пойдет. Диски под хранилище чего-либо - тут уже по желанию и возможностям.
    Например: https://www.onlinetrade.ru/catalogue/materinskie_p...

    UPD: только что вышел обзор мини-пк от 3Dnews: https://3dnews.ru/1100970/kompyuter-mesyatsa-pokup...
    Ответ написан
    4 комментария
  • Пожалуйста оцените стоимость доработки расширения для google chrome?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Примерно в районе 1-50к рублей - большой разброс из-за возможных особенностей расширения, качества его кода, конкретных требований как и куда именно сохранять (все в один файл, по каждому сайту отдельно файл, версионирование и прочее), работа с облаками - там тоже везде свои тараканы, необходимость публикации приложения и т.п.
    Ответ написан
    Комментировать
  • Как исправить ошибку при удалении или переустановке Node.js?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Удалить запись в реестре об установщике и уже потом поставить ноду правильно. А если необходимо полностью удалить - то и удалить после установки (чтобы установщик правильно удалил все).
    Ответ написан
    8 комментариев
  • Какой лучший способ передать объект с приватными полями?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если на обоих концах у вас dotNet или на одном JS, то можно попробовать MemoryPack - он умеет работать с приватными полями. Но есть нюанс: он хочет partial класс и сам генерирует основной класс с нужными ему статическими полями. Ну и для передачи по сети можно архиватором упаковать с контрольной суммой.

    spoiler

    Небольшой класс для упрощения упаковки/распаковки - наследуем от этого класса целевой объект и через расширение вызываем методы упаковки/распаковки:
        /// <summary>
        /// Класс [де]сериализуемый MemoryPack
        /// <br />Необходим для добавления всем наследуемым классам метода сериализации через расширение
        /// <br />Наследование данного метода не работает из-за каста в целевой класс
        /// </summary>
        public class Packable { }
    
        /// <summary>
        /// Расширение для [де]сериализуемых классов MemoryPack
        /// </summary>
        public static class PackableExtension
        {
            /// <summary>
            /// Сериализовать класс в массив байтов
            /// </summary>
            /// <typeparam name="T">Целевой класс</typeparam>
            /// <param name="data">Объект целевого класса</param>
            /// <returns></returns>
            public static byte[] Pack<T>(this T data) where T : Packable
                => MemoryPackSerializer.Serialize(data);
    
            /// <summary>
            /// Десериализовать класс из массива байтов
            /// </summary>
            /// <typeparam name="T">Целевой класс</typeparam>
            /// <param name="data">Массив байт</param>
            /// <returns></returns>
            public static T Unpack<T>(this byte[] data) where T : Packable
                => MemoryPackSerializer.Deserialize<T>(data);
        }
    Ответ написан
    1 комментарий
  • Телефон (Xiaomi redmi 9pro) отключился просто сам по себе, а при включении сбросился до заводских настроек. Можно как-то восстановить фото, видео?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Телефон перешел в режим Miui Recovery 5.0? Это глобальный косяк в обновлении - проблема массовая. У кого-то оно ломает телефон, у кого-то - нет. Рекомендую ждать когда найдут адекватное решение. Тем, кто еще не обновился рекомендуется не обновлять компонент System UI Plugin/Hyper OS UI service - в нём причина (пишут в сети). Тыц 1, тыц 2, тыц 3.

    UPD: возможное решение в топике на 4pda.
    Ответ написан
    Комментировать
  • Как переписать драйвер с x86 win под apple silicon?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    При наличии исходного кода драйверов - точно так же как и любой другой сотф: смотрим в исходный код и пишем для новой платформы все то же самое с использованием особенностей работы этой платформы. А исходники драйверов у вас вряд ли есть ввиду возраста принтера и того, что драйверы почти никогда не бывают с открытым исходным кодом. Если все равно есть желание написать - что ж, тут уже только обратная разработка поможет. Ну и пачка денег на это - дешевле будет новый принтер купить.

    Так что в вашем случае проще всего попробовать завести принтер в виртуалку и из виртуалки расшарить в основную ось. На М1 пока есть только UTM с поддержкой х86. Цена виртуализации х86 на м1 - потеря примерно 90% производительности, так что ставьте хрюшу или семерку самую минималку. Если есть драйвера под арм - можно использовать винду на арме.
    Ответ написан
    Комментировать
  • Как добавить новое свойство (property) к объекту DataGridViewCell в WinForms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    • Полностью скопировать исходный код DataGridView с изменением типа ячеек.
    • Добавить к целевому классу свой список своих элементов с нужными свойствами и проксированием части функционала оригинальных ячеек, а элементы в этом списке уже связать с оригинальными ячейками. И работать соответственно со своим списком.
    • Использовать шаблон типа MVC/MVVM с моделями данных и прочее.
    Ответ написан
    Комментировать
  • Почему не десериализуется JSON объект при помощи Newtonsoft.Json?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Попробуйте сделать парсер через quicktype (Как правильно описать класс для библиотеки Newtonsoft.Json C#?) - похоже, что где-то у вас несоответствие типа и JSON.
    spoiler
    {
      "Header": {
        "CoverPage": {
            "Title": { "Content": "data" }
        }
      }
    }

    // <auto-generated />
    //
    // To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
    //
    //    using QuickType;
    //
    //    var data = Data.FromJson(jsonString);
    
    namespace QuickType
    {
        using System;
        using System.Collections.Generic;
    
        using System.Globalization;
        using Newtonsoft.Json;
        using Newtonsoft.Json.Converters;
    
        public partial class Data
        {
            [JsonProperty("Header")]
            public Header Header { get; set; }
        }
    
        public partial class Header
        {
            [JsonProperty("CoverPage")]
            public CoverPage CoverPage { get; set; }
        }
    
        public partial class CoverPage
        {
            [JsonProperty("Title")]
            public Title Title { get; set; }
        }
    
        public partial class Title
        {
            [JsonProperty("Content")]
            public string Content { get; set; }
        }
    
        public partial class Data
        {
            public static Data FromJson(string json) => JsonConvert.DeserializeObject<Data>(json, QuickType.Converter.Settings);
        }
    
        public static class Serialize
        {
            public static string ToJson(this Data self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
        }
    
        internal static class Converter
        {
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
                DateParseHandling = DateParseHandling.None,
                Converters =
                {
                    new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
                },
            };
        }
    }
    Ответ написан
  • Какое файловое хранилище посоветуете под следующие нужды?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    На данный момент остановился на варианте VPS+Nextcloud

    Его и использовать. Еще из альтернатив есть Seafile - вполне нормальный вариант.
    Ответ написан
    Комментировать
  • Как выкрутить винты с поврежденными гранями?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    • Пшикнуть WD40 и дать немного времени на реакцию. Далее плоскогубцами/кусачками зажать головку и пытаться открутить. Можно попробовать подточить края головки напильником, чтобы было за что ухватиться.
    • Отрезным диском бор-машинкой/дремелем сделать пропил и плоской отверткой выкручивать. Если нет машинки и руки достаточно прямые - можно обрезком полотна от ножовки медленно и аккуратно пропилить.
    Ответ написан
    Комментировать
  • Как выполнить конвертацию пдф изображений в текст?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    FineReader или любой другой OCR.
    Ответ написан
    7 комментариев