Тегирование и версионирование

в 8:33, , рубрики: версионирование, Программирование, тегирование, тз, файловые системы, метки: , , ,

«Пора бы прибраться на своем компе...» Думаю, эта мысль возникала у всех пользователей, и не раз. Без приборки любой комп рано или поздно превращается в свалку хлама, и найти нужные файлы становится все труднее. Даже если вырабатывается какая-то система каталогизации и хранения, новые интересы могут потребовать новых инструментов и новых иерархий. А если машин несколько или на одной машине уживаются несколько пользователей, все становится еще сложнее.

Я, конечно, пытался использовать какие-то методы сортировки помимо файловой системы — т.к. часто хочется упорядочить файлы не по одному критерию, а по нескольким равнозначным, что невозможно сделать в древовидной иерархии — требуется сетевая структура. Но все мои усилия разбивались об интерфейс. Судите сами.

PersonalBrain ( www.thebrain.com/ )

Довольно хорошая утилита для организации файлов, папок и url-ссылок. Минусы: платная, довольно медленная (Java-based), нельзя пометить тегом сразу большую группу объектов. Плюсы: есть возможность переключать виды (облако, дерево, таблица).

tag2find ( www.tag2find.com/ )

Утилита для пометки файлов тегами и поиска по ним. Минусы: работает только под Windows, трудно пометить тегом сотни файлов.

dhtfs ( code.google.com/p/dhtfs/ )

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

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

Чего бы хотелось

1. При попадании любого файла на комп (в том числе при установке программ, распаковке архивов и пр.) он автоматически помечается следующими тегами:
— откуда скачан (урл, локальный путь с указанием имени компьютера, откуда он был скачан, либо имя данного компьютера, если он был создан на нем с нуля, плюс ссылка на оригинальный файл и его версию, если это копия или версия другого файла)
— дата создания (когда скачан, timestamp)
— дата обновления=дата создания
— полное имя файла (в кодировке UTF-8)
— MIME-тип файла
— человеческое название MIME-типа (музыка, программа, видео)
— размер файла
Данная метаинформация обладает версионностью, т.е. при вторичном копировании файла на этот же комп демон автоматически добавляет новые атрибуты, инкрементируя версию.
2. Пользователь может в любой момент добавить к файлу любое кол-во других тегов, изменить и удалить их. Удалить и изменить автоматические теги вручную нельзя. При добавлении-изменении-удалении тегов существуют два варианта сохранения, см.ниже.
3. При создании, изменении и сохранении любого файла (и метаинформации) существуют два варианта сохранения:
3.1 Сохранение мелкой правки файла: содержимое, размер файла и дата обновления перезаписываются. Сохранение мелкой правки метаинформации: добавление-изменение-удаление тегов без сохранения истории.
3.2 Полное сохранение (коммит) файла: создается новая версия файла и метаинформации. Полное сохранение (коммит) метаинформации: создается ее новая версия.
Выбор варианта сохранения — два хоткея, например: F2 — Save, Shift+F2 — Commit. При нажатии любого из них всплывает строка ввода, в которую можно ввести теги через запятую (в первом случае — это просто теги (которые могут, конечно, состоять из нескольких слов), в случае commit это будет commit-сообщение). Эти же операции можно осуществлять с группой файлов.
4. При отсутствии критерия поиска вид по умолчанию — дерево, в котором файлы упорядочены по следующему списку критериев-тегов: человеческое название MIME-типа, дата обновления, полное имя файла. Данный список можно редактировать: менять порядок тегов, добавлять и удалять теги из списка автоматических. Можно создавать новые списки тегов и сохранять их как виды. Деревом же можно пользоваться так же, как обычной файловой системой — заходить и выходить из «папок»-тегов, сортировать файлы. Например, создание папки и перенос туда файлов будет означать создание пользовательского тега и присвоение его файлам.
5. Поиск по умолчанию ведется только среди последних версий метаинформации. Интерфейс поиска состоит из двух панелей: на одной находится набор контролов для фильтрации поиска по стандартным атрибутам (дата создания, обновления, человеческое название MIME-типа, размер от, размер до), на другой — строка ввода (ищет и по стандартным, и по пользовательским атрибутам, также ищет по частям тегов, есть автокомплит).
6. Результаты поиска показываются в виде таблицы файлов с колонками: версия метаданных-версия файла-имя-размер-человеческое название MIME-типа-дата создания-дата обновления-откуда скачан-пользовательские теги/commit-сообщение. Порядок колонок можно менять, нажатием на заголовок колонки можно сортировать вывод по данной колонке. Внизу выводится общее количество файлов и время, затраченное на поиск. Поисковые запросы можно сохранять и использовать позже.
7. Для каждого файла из контекстного меню доступны команды «посмотреть историю метаинформации», «посмотреть историю файла», «получить версию файла» (при этом на полученный файл распространяются все критерии выше, что позволяет построить граф копий и версий одного файла)
8. При покидании компа (или удалении файла) метаинформация и содержимое файла удаляются вместе со всей историей.

Этапы достижения идеального

Виртуальная файловая система с реализацией файлового менеджера под нее и git-like версионностью — дело непростое. Для начала можно просто попробовать сделать надстройку-демон, реализующую описанные функции и работающую поверх существующих файлосистем (NTFS, ext3/4). Нужно также поставить git и положить в него весь жесткий диск. Далее демон отслеживает
— появление всех новых файлов, помечая их автотегами и добавляя в git
— перенос, модификацию и удаление файлов, обновляя информацию в базе-хранилище и в git
— отвечает на запросы к базе, выдавая результаты
Плюс интерфейс поиска/файловый менеджер, хотя бы в виде плагинов к total commander/FAR/Nautilus/mc (да простят меня поклонники макоси за то, что я не пользуюсь их системой).

Да, я забыл упомянуть Google Desktop [почивший 14 сентября 2011, googledesktop.blogspot.com/2011/09/google-desktop-update.html], а также Copernic Desktop Search и прочие en.wikipedia.org/wiki/Desktop_search) Почему? Во-первых, они ищут еще и в файлах (контент внутри файлов), что не требовалось. Во-вторых, версионность в этих движках отсутствует. Справедливости ради все же замечу, что в них реализована часть из описанного мной функционала, поэтому рассмотрение данных движков имеет смысл — возможно, я сделаю это в последующих статьях.

P.S. Кстати, есть предположение (того же Гугла), что вскоре все будут мигрировать в веб и в облака, поэтому десктоп-поисковики маст дай. Насчет этого я не согласен: человеку нужно иметь private place и контроль над информацией без доступа посторонних, как бы Гуглу ни хотелось знать все обо всех. Да и в торренты вряд ли кто-то будет когда-нибудь выкладывать абсолютно все. Так что у десктоп-поиска с версионностью есть будущее.

Автор: andrew_answer


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js