• Как лучше сохранить данные?

    @res2001
    Developer, ex-admin
    Можно и в одном файле.

    В файл пишете блоки определенного размера (например 2-4 Мб). В блок пишете:
    1.байт флагов записи (флаг удаления записи или признак конца блока)
    2.ID записи фиксированного размера
    3.длину последующей строки фиксированного размера
    4.строку данных
    так до конца блока, в конце блока в п.1 выставляете признак конца блока и смещение следующего блока фиксированного размера.
    Можно сделать так, что бы блок забивался до отказа, а остатки последней записи, которая не влезла в блок переносить в другой блок, можно оставлять пустые куски блоков. Кроме того этот механизм будет необходим, если 1 запись может быть размером больше 1 блока.

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

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

    При старте вам нужно будет полностью прочитать индекс, а данные по мере необходимости.
    При изменении записи, меняете блок в памяти и целиком его перезаписываете по тому же смещению где он и находился в файле.

    В блоке можно предусмотреть заголовок блока, в который можно писать служебную информацию, например было бы полезно писать туда размер свободного места в конце блока.
    Может быть что-то еще.

    PS: не стоит изобретать велосипед, возьмите готовую СУБД.
    Ответ написан
    Комментировать
  • Как настроить Windows server 2003 для размещения сайта?

    @res2001
    Developer, ex-admin
    Почему 2003 сервер - это же старье. В 2015 закончилась официальная расширенная поддержка. Нужно срочно уходить с него.

    PS: Залейте на сервер этот каталог с установочного образа. Образ можно взять у микрософта (триал).
    Ответ написан
    Комментировать
  • Можно ли сделать резервацию или ограничение использования ОЗУ?

    @res2001
    Developer, ex-admin
    Если софтина 32битная, то больше 4 Г памяти она потребить не сможет. При этом физической памяти может быть больше. У 64битного софта ограничение по памяти гораздо больше.
    Как вариант - запускать софт в виртуальной машине, которой выделено ограниченное количество памяти.
    Пожалуйтесь разработчику, пусть исправляет баги.
    Ответ написан
    4 комментария
  • Время программы 2,062 надо 2 сек, как сделать?

    @res2001
    Developer, ex-admin
    Можно немного сэкономить, если прочитать сразу весь файл в буфер, а в массив загонять через std::stringstream или вообще руками. Аналогично и с записью - сначала преобразуете в текстовый буфер, затем оптом пишете в файл одной операцией. Файл при этом открывайте как бинарный.
    Возможно, если применить другой алгоритм сортировки то же будет увеличение производительности. В стандартной библиотеке далеко не самый быстрый алгоритм.
    Ответ написан
    Комментировать
  • Start xxx.bat: как сделать, чтобы не вываливалось в командную строку?

    @res2001
    Developer, ex-admin
    Как вариант поставить после pause команду exit, то же будет закрывать консоль. Тогда в старте можно не указывать cmd /c
    Ответ написан
    Комментировать
  • C++ - как посчитать количество строк из файла, которые начинаются и заканчиваются на один и тот же символ?

    @res2001
    Developer, ex-admin
    Отладчик вам поможет!
    Ответ написан
    Комментировать
  • Существует ли менеджер паролей с дифференцированными правами доступа к полям в одной записи?

    @res2001
    Developer, ex-admin
    Посмотрите в сторону LDAP. Про OpenLDAP не скажу, но АД или Novell eDirectory поддерживают разграничение прав пользователей к объектам и их атрибутам. Схему можно сделать свою. Это, конечно, не готовое решение.
    На сколько я знаю, лицензия для eDirectory бесплатная до 1000 объектов, дальше за деньги.
    Ответ написан
  • Почему fstrim не работает для тонкого тома на СХД?

    @res2001
    Developer, ex-admin
    Сталкивался с подобной ситуацией, но в другой конфигурации оборудования и ПО (ESXi + хранилка от HP).
    Но схема действий одна и та же:
    Если у вас все тома в виртуалках тонкие, то одного удаления файлов в виртуалке не достаточно, чтоб освободившееся место было отдано гипервизору - нужно забить это место нулями (по крайней мере в моем случае было так), причем это место должно быть в конце диска.

    Если тома толстые, то:
    1.Вы должны уменьшить размер раздела в виртуальных машинах, причем правильно - так что бы свободное место было в конце тома. Это можно сделать и в случае thin томов.
    2.Уменьшить том выделенный этой виртуальной машине в гипервизоре. Только после этого свободное место будет доступно для других ВМ.

    PS: этим и опасны thin тома - нужно всегда контролировать свободное дисковое пространство.
    Ответ написан
    Комментировать
  • Как исправить заполнение массива минимальными значениями другого массива?

    @res2001
    Developer, ex-admin
    Когда находите минимальный элемент в исходном массиве сохраняйте его значение и индекс, заменяйте в исходном массиве значение минимального элемента на некоторое максимально возможное число (INT_MAX в вашем случае). Повторяйте процедуру пока не заполнится весь массив минимумов.
    Затем нужно восстановить исходный массив по ранее сохраненной информации.
    Ответ написан
    2 комментария
  • Законно ли сейчас использование OpenVPN в организации?

    @res2001
    Developer, ex-admin
    На сколько я знаю, использование криптографических алгоритмов не сертифицированных ФСБ запрещено в РФ, кроме варианта встроенных в ПО или железо алгоритмов.
    Например при ввозе разных сетевых железок с криптой на борту требуется разрешение ФСБ. Дают его, по моему, без особых проблем.
    На практике любое использование крипты можно подвести под встроенное и неотчуждаемое, и органы обращают на это внимание только когда организации требуется лицензия на деятельность связанную с криптой, но в этом случае требуется еще много чего. Но даже в этом случае можно использовать не сертифицированную крипту в направлениях не связанных с лицензируемой деятельностью, например, банки в клиент-банках обязаны использовать сертифицированное шифрование и получать лицензию на это, но при этом они вполне могут организовывать ВПН между офисами на OpenVPN.
    Ответ написан
  • Польская запись. В чем ошибка?

    @res2001
    Developer, ex-admin
    У вас в коде забито другое выражение: (a + b) * (c - d)
    Где реализация стека?

    По реализации:
    1. Для вычислений вам не нужны 4 переменные или 10 (в зависимости от того сколько в выражении), достаточно двух для обычных бинарных операций (с двумя операндами). Результат промежуточного вычисления нужно снова вставлять в стек в место вытащенных операндов и операции.
    2.Алгоритм вычисления по прямой польской нотации неплохо описан на вики.
    нужно считывать выражение слева направо, рассматривая оператор и ближайшие к нему два операнда. Если среди этих операндов находится еще один оператор, то вычисление первого оператора откладывается, до тех пор, пока не будет вычислен новый оператор. Итерации этого процесса повторяются до тех пор, пока оператор не будет вычислен, что должно в конечном счете произойти, если в выражении количество операндов на один больше, чем количество операций (в случае бинарных операций). Как только оператор вычислен, он и его два операнда заменяются полученным значением (операндом). Поскольку оператор и два операнда заменяются на вычисленный операнд, то становится на один оператор и один операнд меньше.

    Таким образом стек тут не очень подходит, кроме операций push и pop нужно еще делать и обход списка в прямом направлении и вставка/удаление элементов в произвольной позиции.
    Либо как вариант со стеком - использовать 2 стека. Т.е из одного извлекаете отложенные и результаты вычислений помещаете во второй пока первый не опустеет, затем переключаетесь на второй и так до тех пор пока в стеке не останется единственное значение - результат вычислений.
    Либо с одним стеком, но изменить реализацию. Так чтобы не было структуры P_STACK.
    Ответ написан
  • Редирект запросов десктопного приложения на другой адрес средствами Windows?

    @res2001
    Developer, ex-admin
    Если site.ru и service.site.ru имеют разные IP и web-сервера не используют виртуальные хосты (т.е. не определяют сайт по его имени), то можно в файле hosts прописать для site.ru IP адрес service.site.ru.

    В более общем случае нужен прозрачный прокси, которого в винде нет.
    Обычно прозрачный прокси ставится на хосте являющемся шлюзом по умолчанию, но возможно есть варианты с установкой на локальном хосте, который бы перехватывал весь трафик и то что надо подменял. Подобные прокси видел в составе некоторых платных программных продуктов, есть ли такое свободное решение не в курсе.
    Ответ написан
    Комментировать
  • Должно ли количество итераций соответствовать асимптотической сложности алгоритма?

    @res2001
    Developer, ex-admin
    У вас счетчик итераций 2 раза инкрементируется в коде. Во внешнем цикле явно лишний инкремент.
    В случае операций с массивами или списками, для оценки сложности обычно берут количество полных проходов по массиву для получения результата.

    В вашем случае количество итераций равно оценке сложности.

    В общем случае количество итераций приближается с низу к оценке сложности, например поиск по одному двоичному дереву может выполняться за разное число шагов для разных значений.
    Ответ написан
    Комментировать
  • Удаление новой версии я windows очисткой $WINDOWS.~BT?

    @res2001
    Developer, ex-admin
    Запустите мастер очистки, там есть соответствующие опции, он вам все грамотно почистит. Ноут должен был перезагрузиться в процессе установки 1803.
    Ответ написан
  • Зависает win10 с двумя мониторами, как бороться?

    @res2001
    Developer, ex-admin
    Попробуйте поставить более старые драйвера на видео карту.
    Возможно осталась версия, которая работала когда-то, ее и поставьте, с предварительным ручным удалением текущих драйверов.
    Ответ написан
  • С++ - как отсортировать структуру?

    @res2001
    Developer, ex-admin
    Реализуйте в структуре конструктор копирования и/или копирующий оператор присваивания, и сортируйте пузырьком (т.к. самая простая реализация соритровки). Можно еще реализовать несколько функций сравнения по разным атрибутам и передавать эти функции в пузырек (чтоб можно было делать сортировку по разным атрибутам с помощью одной функции сортировки).

    По коду:
    1.Вы начинаете писать на С++, а потом перескакиваете на Си (puts, printf) ...
    2.В struct student поля surname и gr объявлены как char, а в коде вы их используете как си-строки - это абсолютно разные вещи.
    3.Вы не правильно используете функцию puts. В таком виде у вас программа не соберется. Посмотрите документацию.

    Возможно что-то еще ...
    Ответ написан
    Комментировать
  • Как запускать программу хоткеем однократно? Батник подойдет?

    @res2001
    Developer, ex-admin
    В батнике отловить запущен ли процесс можно с помощью фильтров tasklist.
    Ответ написан
    Комментировать