Задать вопрос
  • Как настроить Git?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Ответ написан
    Комментировать
  • Безопасно ли запитать HDD через ЗУ смартфона и подключить к старому ПК?

    VoidVolker
    @VoidVolker Куратор тега Железо
    Dark side eye. А у нас печеньки! А у вас?
    Нет, не безопасно. Используйте только USB порты ПК для питания диска. Попытка подключить еще и ЗУ от смарта может привести к любым последствиям - вплоть до смерти диска, контроллеров USB, ПК или еще чего угодно (никогда не знаешь какой сюрприз сделали в разводке китайцы). Диски - штука чувствительная к качеству питания. Обычно в комплекте есть USB разветвитель - одним концом в диск, двумя другими в ПК. Вот его и используйте - два в ПК, один в диск. Если питания не хватит - диск просто не запустится и не определится в системе. Еще можно использовать USB хаб с внешним питанием, если встроенные порты слишком слабые. Ну или просто вытащить диск из коробки, если он там стандартный SATA/IDE - то можно использовать любой внешний SATA/IDE контроллер с внешним питанием.
    Ответ написан
    Комментировать
  • Что правильно использовать для создания меню и тд в visual studio?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    На самом деле именно так и делается - одни элементы скрываются, другие показываются по мере необходимости. Элементы группируются и скрываются пачкой. Для упрощения обычно группы дочерних окон просто размещают в окне-контейнере и скрывают этот контейнер целиком, а все его дочерние окна скроет сама ось. И второй вариант - создавать/уничтожать окна по мере необходимости. Но вот когда окон много - это увеличивает расход памяти и нагрузку на систему, а на медленных ПК большие и сложные интерфейсы могли даже тормозить. Это 20-25 лет назад все это было важно, а сегодня даже плюс-минус гигабайт никто на заморачивается.
    Ответ написан
    2 комментария
  • Возможно ли создавать приложения для Windows и Linux на JavaScript, html и css?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Ответ написан
    Комментировать
  • Как избавляться от ненужных записей в бд?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    У записи в БД есть отметка времени создания. В кроне/планировщике создается задача на запуск скрипта раз в сутки для очистки устаревших записей.
    Ответ написан
    5 комментариев
  • Есть текстовый журнал установки Windows 10?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Windows Setup Log Files and Event Logs: https://learn.microsoft.com/en-us/windows-hardware...
    Ответ написан
    Комментировать
  • Как функционируют сайты для взрослых?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    1. Работают вполне законно там, где они хостятся. Где вы там увидели нарушение закона? Вот с чернухой борются активно и глобально - это да.
    2. С других сайтов тырят и пользователи заливают - это кто по-проще. А у кого есть деньги и вкладываются серьезно - сами снимают/организуют съемки и заказывают студиям.
    3. Стандартный абузоустойчивый хостинг в странах, где адалт контент разрешен и хостер разрешает.
    4. Конечно окупаемо - иначе бы не было их столько. Но есть нюансы - это как и везде. Например та же дикая конкуренция. А так - примерно 3/4 трафика интернета всегда было адалтом.
    Ответ написан
    1 комментарий
  • Зачем в toString и substring передаются аргументы?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    3 комментария
  • Возможно ли в gitlab ci динамически поднимать микросервисы в зависимости от переменных?

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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Абсолютно любую базу данных с использованием любого языка программирования. А еще лучше, ту базу плюс язык, которые знаете или хотите изучить. Самый простой вариант: NodeJS/Python + MonogoDB.
    Ответ написан
  • Поможет ли переустановка Windows при bad блоках на жестком диске?

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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Под ваши критерии попадает абсолютно любая БД - PostgreSQL, SQLite, MariaDB, MongoDB. Так что используйте любую. Различия, плюсы и минусы сами найдете в сети - все уже давно описано, сравнено и протестировано.
    Ответ написан
    Комментировать
  • Какой дистрибутив linux использующий grub установить?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Дык debian и поставить. Чем он не устраивает-то?
    Ответ написан
    7 комментариев
  • Какую из free nas операционок можно ставить на тот же диск, на котором будет хранилище?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    OpenMediaVault, ставите, далее загружаетесь с GPartedLive и им уменьшаете основной диск и на свободном месте создаёте новый раздел. Еще как вариант, если правильно помню, конечно, можно смонтировать каталог как диск - но это надо гуглить, деталей не помню.
    Ответ написан
    Комментировать
  • Как ускорить поиск элементов из статичного string[] по подстроке?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Раз нет ограничений по памяти и надо максимально быстро, то можно разложить весь массив в дерево таблиц переходов с шагом в один символ на таблицу. Самый быстрый и самый затратный по памяти. Таблица на каждый символ - 256 байт. Скорость поиска зависит только от размера строки и не зависит от объема данных: один символ - один переход в таблице к следующей таблице или конец поиска, если ноль. Я так уже делал: использовать имеет смысл на объемах примерно от 4 гигабайт данных (чем больше объем - тем меньше затраты на каждый символ). Но, если память позволяет и цель именно в скорости - то вполне нормальная плата памятью за скорость. Можно сократить расход памяти, если перекодировать строки в кодировку по числу используемых символов. Тогда таблица переходов будет в несколько раз меньше. Более экономный и более медленный вариант - дерево массивов/списков с шагом в 2/4/8 символов, при этом в поиске сравнение не по символам делать, а сразу по 2/4/8 байт: т.е., работаем со строкой как с массивом байтов и получаем оттуда uint16/uint32/uint64 и их и сравниваем, ибо процессору все равно какую инструкцию выполнять - один байт сравнить или 8. Возможно, конечно, оптимизатор в поиске по строке это все и оптимизирует. Я давно уже не смотрю на результаты его работы - так что тут только опытным путем. Ну и щас еще других вариантов накидают с деревьями тоже.

    UPD1:
    Можно все несколько упростить (или усложнить - смотря с какой стороны смотреть), если перекодировать строки из стандартной кодировки во что-то более компактное либо самостоятельно сделать кодировку под набор данных.

    Еще можно ускорить, если искать в несколько потоков, разбив весь набор данных на несколько групп.

    UPD2:
    Таки нашел немного времени и откопал исходники для шарпа и провел несколько тестов по расходу памяти.

    Число строк / общий размер данных / итоговый размер дерева

    5 символов:
    1000000 / 55.9MB / 13.2GB
    2000000 / 111.6MB / 25.2GB

    10 символов:
    100000 / 8.1MB / 4.1GB
    200000 / 16.1MB / 8GB
    300000 / 24.2MB / 11.9GB
    400000 / 32.2MB / 15.7GB
    500000 / 40.3MB / 19.5GB

    15 символов:
    100000 / 10.5MB / 6.6GB
    200000 / 21MB / 13.1GB
    300000 / 31.5MB / 19.5GB
    400000 / 42MB / 25.8GB

    20 символов:
    100000 / 13MB / 9.1GB
    200000 / 25.9MB / 18.1GB
    300000 / 38.9MB / 27GB


    Максимальный размер дерева для глубины в 5 символов на платформе х64:
    • Для диапазона 0-255 - до 8Тб и до 4 311 810 305 узлов
    • Для диапазона 0-70 - до 13.5Гб и до 24 357 971 узлов

    Максимальный размер дерева для глубины в 4 символа для диапазона 0-255: ~17Гб и ~33Гб для х86 и для х64 соответственно и лимит в 16 843 009 узлов. Ну и в коде есть функция для вычисления максимального числа узлов и размера дерева.

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

    И соответственно код: https://github.com/VoidVolker/search-tree/tree/master (предупреждаю сразу: код старый, по сути экспериментальный, не вылизанный и вероятно приведет кого-то в ужас). Но, главное, что работает.
    код

    Тестовый код:
    static Random rnd = new Random();
    static string[] GenStrings(int cnt, int strLen)
    {
        string[] arr = new string[cnt];
        var i = 0;
        while (i < cnt)
        {
            var sb = new StringBuilder();
            for (var j = 0; j < strLen; j++)
            {
                sb.Append(rnd.Next(0, 256));
                //sb.Append(TAbc[rnd.Next(0, TAbc.Length)]);
            }
            arr[i++] = sb.ToString();
        }
        return arr;
    }
    
    var arraySize = 300000;
    var stringSize = 20;
    
    var GCStartArr = GC.GetTotalMemory(true);
    
    var strings = GenStrings(arraySize, stringSize);
    
    var GCEndArr = GC.GetTotalMemory(true);
    var GCStart = GC.GetTotalMemory(true);
    
    var tree = new ArrayTree<string>();
    foreach (string s in strings)
    {
        tree.Add(Encoding.UTF8.GetBytes(s), s);
    }
    
    var GCEnd = GC.GetTotalMemory(true);
    
    Console.WriteLine("Array x string size / Array memory used / Tree memory used");
    Console.WriteLine($"{arraySize} х {stringSize} / {BytesToString(GCEndArr - GCStartArr)} / {BytesToString(GCEnd - GCStart)}");
    Ответ написан
  • Где купить оригинальный аккумулятор для Macbook Pro '13 Mid 2012?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Как это нельзя? Очень даже можно: сервисов почтовой пересылки полно. Например, вот шопотам даже знает магазин iFixit: https://de.shopotam.ru/shops/eustore.ifixit.com - вставляете ссылку на ваш аккумулятор, оформляете заказ, оплачиваете и через 4 дня он у вас.
    Ответ написан
  • Сколько можно держать одновременных соединений на php ratchet?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Вот тут есть детальное исследование, там как раз 10к соединений тестируется: https://www.researchgate.net/publication/348993267...
    Ответ написан
    Комментировать
  • Как лучше сохранять результаты логирования приложения NET?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Добавлю, что есть еще такая замечательная штука, как "сборщик логов" - то, что надо, если хочется собирать логи с нескольких разных источников. Например FluentD, Graylog, Nagios Log Server, NXlog, Elastic Stack: Elasticsearch, Kibana, Beats & Logstash, LOGalyze.
    Ответ написан
    1 комментарий
  • Как реализовать возможность запускать пользовательский код на сервере и отдавать результат?

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