All streams
Search
Write a publication
Pull to refresh
121
0.1
Hint @Hint

Пользователь

Send message
Работа непосредственно с хранилищем (добавление, извлечение, чтение истории) происходит в один поток. Запросы ставятся в очередь и постепенно выполняются. Внешние же запросы от клиента выполняются в потоке, обслуживающем конкретного клиента (соединившегося по TCP/IP), но работа с хранилищем все равно происходит с использованием критических секций (фактически, опять же создается глобальная очередь запросов).
Непосредственно файловые операции за пределами хранилища контролируются ОС (в случае, если служба копирует файл, а сторонняя программа пытается произвести запись).
Загруженности процессора в какой момент? В момент простоя? 0%. Никогда не понимал подобных характеристик.

Не перезагружал Windows около 10 сейчас, памяти выделено 3 мегабайта с копейками. Заметной нагрузки сервис не создает. Что с ним, что без него, разница «на глаз» не ощутима (при довольно слабом железе).
Вообще-то должны (у меня 100% добавляются). Попробуйте еще раз =) Обработка изменений идет не сразу, а где-то спустя 10-15 секунд.
В любом случае, строго не судите. Массового бета-теста не было (сам использую и несколько моих друзей).
Указание конкретных папок предусмотрено изначально. Надо просто указать их в FilterInclude (маски файлов для резервирования).
При запуске служба инициализирует сервер TCP/IP и создает по одному монитору на логический диск. Мониторы работают в отдельных потоках, используют WinAPI функцию ReadDirectoryChangesW. Мониторы передают события основному управляющему объекту, который оставляет только нужные (согласно фильтрам Include и Exclude), классифицирует события, преобразовывает во внутренний формат и передает другому объекту, менеджеру хранилища.

Менеджер хранилища работает так же в отдельном потоке. Часть входящих событий сразу же пересылает на уровень ниже: объекту, управляющему хранилищем на низком уровне. Часть перемещается в «отстойник» (в основном, события изменения содержимого). Отстойник нужен для того, чтобы в хранилище добавлялись только более менее «стабильные» версии (к примеру, если за 10 секунд в файл будет сделано 3 записи, то сохранено будет только последнее состояние).

Сервер работает по протоколу TCP/IP (каждый клиент обслуживается отдельным потоком). Формат сообщений довольно простой (4 байта на размер, байт на тип, остальное уже зависит от типа сообщения). Команды от клиентов передаются менеджеру хранилища, тот опять же передает их на уровень ниже, получает результат и передает серверу. Текущая версия понимает только 2 команды: Timeline (передается имя файла или же путь, возвращается полная история версий для всех найденных файлов) и Restore (передается имя файла, timestamp, возвращается результат и timestamp ближайшей версии).

Текущая версия программы полностью ansi (использовался Delphi 7). В Delphi 2009 уже есть полная поддержка Unicode, перевести проект будет не очень сложно.
Спасибо за наводку. Видимо, именно эту программу я и не смог найти 2 года назад.
А smb можно примонтировать в качестве логического диска, назначив ему букву? Если да, тогда всё получится =)
Текущая версия не умеет. Хранилище может быть только в локальной папке.
На Delphi. Пока я не уверен, будет ли что-то вообще =)
Если я только что написал огромный кусок кода, только только нажал в редакторе кнопку сохранить, а потом случайно затер файл старой версией с ftp, то встроенная в Windows система мне никак не поможет восстановить утерянное.
В хранилище так же хранятся полные версии файлов, если изменений слишком много (к примеру, если они составляют больше 30% от размера файла), или, если цепочка версий слишком длинная. Формат хранилища простой и, в крайнем случае, пользователь может найти и скопировать оттуда файл вручную (полные версий файлов отличаются специальным расширением).
Проект пока никакой. Последняя строчка кода была написано за день до защиты (было это давно). Сейчас появилось свободное время и решил довести какой-нибудь из старых проектов до ума. И хочется узнать, нужно ли кому-нибудь подобное и существуют ли близкие аналоги.
Указываются маски. Если нужно следить за всеми файлами, то подойдет *. Само собой, можно указать все файлы в конкретной папке (C:\My_Files\*).
Во-первых, аналогов под Windows я не видел. Во-вторых, в 99.9% дипломных работ нет ничего нового (это все-таки не диссертация). Цель, в первую очередь, продемонстрировать и проявить на практике полученные знания и опыт. В реализации TimeMachine довольно много интересных моментов и это далеко не банальная задача. А совершенствовать систему можно практически бесконечно (механизм непрерывного резервирования, хранилище на удаленном ресурсе, протокол синхронизации с удаленным сервером, шифрование данных, интеграция с ОС).
Напишите аналог TimeMachine для Windows.
www.apple.com/macosx/what-is-macosx/time-machine.html
Весьма сомнительная мера. Если мне действительно нужна информация, то скорость загрузки вряд ли будет иметь большое значение.

В любом случае, уверен, что этот показатель не будет играть решающую роль при определении позиции.
Кстати, спама на Gmail приходит в разы меньше.

Gmail его (спам) очень хорошо фильтрует (ежедневно в мою папку «спам» попадает около 100 писем). Ошибки случаются крайне редко.
Обычные желтые заголовки, ничего более.

Но для понимающих людей ясно одно: новые патентные иски против Google означают, что эта компания находится на верном пути.
Без исков «путь» был бы под сомнением? =)
Ага, это те же люди делают, которые пишут код типа if (booleanVar.toString().length() == 4 /* true */) {… } else if (booleanVar.toString().length() == 5 /* false */) {… } else { throw new Exception(«Fatal Error»); }.

Не надо обобщать.
А если программа получает адреса этих функций нестандартным способом (например, напрямик от GetProcAddr, а не импортом системной dll ), способ ведь не прокатит? Правильнее создавать виртуальный сетевой интерфейс, который будет работать через socks (типа как VPN), и редиректить вызовы программы на него (хотя тут наверно надо поддержку со стороны ядра винды).

Я и не говорил об изменении таблицы импорта. Патчится непосредственно код функции (ставится безусловный переход на функцию-обработчик с сохранением старых команд в отдельной области).
В данном случае, «правильнее» использовать LSP. НО внедрить DLL и перехватить функции можно на лету с довольно ограниченными правами (при чем в рамках конкретного приложения). А добавить, к примеру, собственный провайдер в цепочку на порядок сложнее и в случае какой-либо ошибки последствия будут «катастрофичны».

В любом случае, отладка — это не то чем занимается домашний пользоатель, и не то, что должно быть разрешено по умолчанию. Расширение функционала таким способом — ну явный изврат, согласитесь?

Если нет других способов и сделано грамотно и по всем правилам, то почему сразу «изврат»? Система обязана быть гибкой и позволять подобные манипуляции при наличии соответствующих прав у процесса.

Information

Rating
3,359-th
Location
Москва и Московская обл., Россия
Registered
Activity