Как стать автором
Обновить

Комментарии 56

А где все эти категории хранятся? Какая-то база? Расширенные атрибуты файлов?

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

А насколько обосновано использование стороннего хранилища?
Есть же xattr в которых можно хранить немало информации.
И они есть во многих файловых системах в том или ином виде.
Теги туда как раз бы влезли на мой взгляд.
Это позволяет хранить метаинформацию рядом с файлами. А также переносить её в любое место без потерь.
То есть при логине пользователя или при изменении тегов просто дописывать в базу данных.
Периодически сканировать файлы и это позволит держать систему в близком к реальному состоянии.

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

А какие проблемы с русским?
Насколько я понимаю xattr хранит биты а кодировка это дело вторичное.

Индексирование, конечно, процедура затратная, но её можно делать по расписанию, ночью.
А при обычном использовании индекс будет пополняться автоматически.

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

Я не пытаюсь как-то умалить достижение, мне действительно интересно какие именно предпосылки были при создании.

Пример создания и чтения артрибута в UTF-8

#!/usr/bin/env python
import xattr
from pathlib import Path

TESTFILE = 'xattr-test'
ATTR = 'user.test'
ENCODING = "utf-8"
ENCODED_VALUE = bytes("Привет хабр!", ENCODING)

Path(TESTFILE).touch()
xattr.setxattr(TESTFILE, ATTR, ENCODED_VALUE)
print(xattr.getxattr(TESTFILE, ATTR).decode(ENCODING))

Согласен. Есть же мета-стор у любой современной ФС. А у ФС типа NTFS — дополнительные файловые потоки, в которые можно писать любую ахинею в любом размере.

Единственная засада это NFS, но случай когда хомяк на NFS достаточно нетипичен, чтобы его спокойно можно было проигнорировать.
KDE для хранения тегов уже очень давно использует расширенный атрибут user.xdg.tags. vitis определённо уметь писать теги туда, хотя бы как опцию, которую можно включить. Это сразу добавит интеграции (пусть и односторонней) с Dolphin, Baloo и вообще кедами.

Подскажите, есть ли что-то подобное для Nautilus?

Привет sharepoint, тот же гуглдрайв api и всё такое.
Одна проблема — пользователи за 20-30+ лет работы с иерархией крепко на неё подсели. Сломить вот это вот «хочу фолдерА/фолдерЗед/.../документ» достаточно сложно (вопрос нужно ли) в пользу «найти по тегам».

Я полностью согласен, что фактически иерархия — это неправильная структура, т.к. фактически она одномерная. Файлы же хочется классифицировать в многомерном пространстве и имя файла является одним из измерений, не всегда даже самым важным. Единственная существенная проблема заключается в том, что вся эта концепция мультимерной ФС абсолютно несовместима с классическими иерархическими ФС. Т.е. переход из одной системы в другую всегда болезненен и при нем происходит потеря метаданных. С другой стороны мультиФС можно легко реализовать поверх иерархической ФС, заменив имена файлов guid'ами и сделав балансировку по первым символам guid, чтобы не было слишком много уровней вложенности и слишком много файлов в одном каталоге. Отдельно где-то должен лежать каталог метаданных. Но, вообще, да. Это прям reinventing google drive & sharepoint получается

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

А хэш-суммы позволяют избежать дублирования данных.

Опасная история, т.к. возможны хэш-коллизии.

На своём примере могу доказать обратное: я уже категоризировал более шести тысяч файлов, создал более тысячи категорий и псевдонимов, и это стоило того.
Как к этому вопросу подступиться людям, у которых 200 000+ файлов? И за 25 лет развития мозга (ещё со времен FIDO) накопилось пара тысяч тегов, среди которых куча всякой дряни, типа foto, photo, myphoto, old foto, photonew

Как раз чтобы не плодить «дрянь», можно делать псевдонимы. При добавлении новых категорий перебором на автодополнении можно себе напомнить названия существующих категорий. Да, здесь тоже не помешает следить за чистотой в структуре категорий: «photonew», например, никак не может характеризовать файлы в долгосрочной перспективе (в данном случае могли бы подойти категории, связанные с тематикой фоток, временем, названием фотоаппарата и т.д.). Что касается вопроса о 200 000+, то для начала можно всё автоматически категоризировать по формату/типу/расширениям (в vitis это есть), что уже будет неплохо. Потом по мере использования можно иногда добавлять нужные категории. Да, временные затраты при появлении новых файлов могут превышать простое копирование/скачивание в нужную директорию. Зато скорость доступа становится гораздо выше, когда не нужно «ручками» добираться до нужного файла в нужной директории. Конечно, это только мой личный опыт и моё субъективное мнение. Посчитав, что оно того стоит, я оформлял это дело изначально как свободный проект в надежде, что он кому-нибудь может быть полезен.
Вот был бы сервис с api который по хешу файла возвращал тэги. Может тогда многие смогли бы пользоваться подобной системой. Или есть такой? Понятно, что с личными файлами он не поможет.

Можно угадывать тег по содержимому. Лучше, чем ничего.

В тегированной файловой системе самое интересное — это ее взаимодействие со сторонним софтом.
Подкину мысли для размышления / реализации:
1) Как копировать сделанную выборку на флешку или в какую-то обычную директорию файловой системы? Как создать из нее архив?
2) Можно ли сделать выборку по набору тегов и представить ее как некую виртуальную директорию и затем в этой директории открыть просмотрщик изображений / медиа плеер, чтобы листать в нем по данной выборке?
3) Для медиа файлов логично иметь конвертер информации с IPTC (и EXIF) в категории файловой системы. Тогда можно удобно ставить теги в удобном специализированном софте (например XnView MP) и конвертировать их в Вашу систему.
Логичен и обратный конвертер — Ваши категории в IPTC для использования в стороннем софте.

1) Есть функция копирования файлов по запросу. Недавний реальный случай: у меня есть альбом саундтреков из короткометражки "Кунг Фьюри" и есть сама видеозапись. Мне потребовалось скопировать на флешку одному своему товарищу это видео и я сделал примерно так:
vitis copy Короткометражки i: "Кунг Фьюри" -d /mnt/flashdrive/dir
Возможно, что я неправильно проинтерпретировал вопрос.
2) Эта хорошая мысль и я давно о ней думаю: создавать что-то типа временных "комнат" по запросу с использованием виртуальной файловой системы. В этом определённо есть смысл и однажды я это сделаю.
3) Тоже разумная мысль — использовать уже имеющуюся метаинформацию, что актуально для некоторых форматов файлов. До это я просто ещё не дошёл. Идея вполне закономерна.

Смотрел, конечно. Про tagsistant я узнал позже начала своих работ и, поизучав интерфейс, понял, что моего внимания это не стоит

Я извиняюст а что конеректо там не устроило? Вроде тегирует, ищет, запускает. Я просто спрашиваю потому что не пользовался не тем не тем интересно сравнить, возможно буду использовать что-то

Конкретнее: полагаю странным пытаться пользоваться семантической файловой системой, используя интерфейс фактически для обычной файловой системы. Воспользуюсь примерами использования tagsistant с главной страницы:


mkdir ~/myfiles/tags/startrek
mkdir ~/myfiles/tags/starwars
cp first_contact.avi ~/myfiles/store/startrek/@
cp the_return_of_the_jedi.avi ~/myfiles/store/starwars/@

против


vitis assign startrek -f first_contact.avi
vitis assign starwars -f the_return_of_the_jedi.avi

Выборка файлов по тэгам выглядит там так:


ls ~/myfiles/store/startrek/+/starwars/@

А в vitis так:


vitis show startrek u: starwars

В своём подходе я просто отошёл от отображения семантической ФС в виртуальную, полагая несколько некорректным делать интерфейс к семантической ФС натянутым на обычную.

Хм… Возможно. Хотя если так подумать Ваша программа тоже есть ни что иное как интерфейс в семантической ФС поверх обычной. Но спасибо за Ваше мнение.

Это-то понятно, но другое дело то, как оно выглядит на стороне пользователя и насколько удобно этим пользоваться. На каком-то этапе я изучал существующие решения, но всё, что я встретил, не отвечало моим требованиям, при том что у меня уже был продуман собственный подход.

А не хотите сделать обзорную статью по существующим решениям и их ньюансам и недостаткам? Думаю многим будет интересно поближе познакомится с этой темой.

Если у читателей есть интерес, то возможно. Это очень большая тема для исследования. Нужно будет рассказать про тэги MacOS, про незавершённую WinFS, про подход BeOS/HaikuOS, хэштеги и подобные понятия, активно используемые в Интернете, про Tagsistant, SemFS, иные небольшие проекты (я, кстати, видел на Github'е несколько заброшенных репозиториев на схожую тематику), про существующие встроенные возможности файловых систем, попробовать закопаться поглубже в историю вопроса. Если этим заняться, может выйти что-то добротное, но тема серьёзная по масштабу

Я повторюсь — Вы написали «бек-енд» МС шэйрпоинт, гугл-драйв, что-то там оффис 365 с облачным диском, т.п. Вопрос не в самом бекенде, а в том, как перевести пользователей с

1. это счёт
2. это счёт от брокера Икс
3. это счёт от брокера Икс за Июнь
4. это счёт от брокера Икс за Июнь из портфолио Игрек
5. это счёт от брокера Икс за Июнь из портфолио Игрек за потери по инструментам типа Зед

на плоскую структуру тегов, предоставив им возможность удобного поиска. В примере выше — это 1 и 2 и 3 и 4 и 5 с параметрами. Это безумно удобно для автоматизации процесса (это то, что нужно мне), но не столь очевидно-удобно для пользователей.

Я просто буквально сейчас работаю над подобной задачей в прожекте, где мне надо дать пользователям возможность искать-отслеживать документы на ФС из веба, но документы в ФС попадают не через веб, а вполне себе самостоятельно.
В моём случае это:
$ find . -name "*\.xl*" -o -name "*\.do*" -o -name "*\.pdf" -o -name "*\.msg" | wc -l
84187

$ find . -type d | wc -l
22978


Фактически, вот эти вот 22978 — это теги, где часть тегов, грубо говоря даты, а другие, например, имена контрагентов, то есть по сути — переменные.
Интерфейс к ФС в виде стандартных файловых путей даёт возможность использовать сонм уже существующих утилит. Например:
rsync ~/myfiles/store/startrek/+/starwars/@/ /media/флэшка/movies_for_vacation
В том-то и дело, что в тагсистансе всё работает стандартным для пользователя виде (он может пользоваться любым файловым менеджером), а в витисе получается что без него вообще ничего не работает.

Не уверен, что это кому-нибудь нужно. Обычно пользователи знают где у них хранится и что. Если надо разложить один файл в разных местах, есть симлинки/хардлинки. Если надо что-то найти, есть find/locate/whereis. Для быстрого доступа есть z.

Возможность выборок с фильтрами по тегам было бы очень классной вещью, например для фотографий, особенно когда этих фотографий десятки тысяч.
А вы готовы протегировать руками десятки тысяч фотографий? См. комментарий ниже
Любая каталогизация начинает страдать когда можно несколькими способами разложить. И мне, как пользователю, проще было б назначить теги файлу, чем лазить по каталогам и распихивать файл/линки в разные места. А для фотографий это вообще единственный способ (дата, место, объект, событие, дополнительные произвольные признаки — равнозначные категории, не связанные иерархией). Всё будет зависеть только от удобства поиска по тегам (фотографии с дней рождений тёти Зины после её очередного восемнадцатилетия против где я был в июне 2019 — на дне рождения тёти Зины в том числе).
А будете ли вы отмечать каждую новую фотографию тэгом? Для этого есть специальный софт, который справится с этой задачей чуть лучше.
Я пользуюсь Synology Moments — оно определяет места, даты, лица и прочую информацию из фотографий и раскладывает красиво по категориям.
Google Photos умеет также.
Если вам надо, то вы будете готовы. Где-то каждую фотографию, где-то целиком альбомами. Места оно определяет по GPS, но не все фотографии обладают этим тегом, а где-то места именуются так, что лучше не надо. С лицами проще (или сложнее, но оно уже есть), но не работает на собаках и плохо на растущих младенцах. Остальное немного есть в EXIF. Но как только хочется чего-то, чего нет в EXIF — приходиться забывать об этом, либо мучиться с линками.
Каждый раз когда пытался навести порядок в своих фото, музыке, электронных книгах становилось понятно, что иерархическая файловая система не годится для этого. Музыку хочется разместить и по музыканту, и по жанрам, и по году выхода. Бывает что над композицией работает несколько авторов или композиция кроссжанровая (очень часто). Также и с книгами. С фото своя классификация: и по месту, и по дате, и по людям на них.

Тоже пришел к идее категорий/тегов, но до практической реализации не дошло.

Очень полезная штука, в общем!

Смутил костыль с миграцией семантической ФС. Я в свое время рассматривал вариант хранения тегов в текстовых атрибутах файла (в NTFS). Тогда при перемещении файлов в иерархической ФС информация о тегах будет перемещаться автоматически.

Согласен, что это выглядит как костыль, однажды добавлю команду vitis migrate .... Так или иначе даже в аварийном случае ситуация перемещения всё равно легко исправляется.

Несколько раз при разборе фото пытался прикостылить категоризацию, а несколько раз пытался использовать встроенную — в "библиотеке" музыкальных плееров.
Вторая по факту работу не выполняет, и лучше этого работают собранные из иерархической ФС плейлисты.
А для первой нужно вручную потратить на обработку безумно много времени, либо использовать ПО, что см. выше.


В идеале семантические ФС должны быть проще в использовании, так как для них нужно держать в голове пару признаков вместо точных путей, на деле получается ограниченный набор признаков, при этом нужно помнить именно все проставленные, чтобы найти X, что ложится в голову хуже плоской иерархии

Нет, этого я не встречал. Изучу на досуге

Как быть в случае например с фотографиями, отсняли какое-нибудь событие(свадьбу). Сырых фотографий скажем 1000 шт. Без проблем можно их добавить в тэговую систему, добавить теги с название события, даты и прочее, а потом это все запустить на редактирование.
Как быть потом с редактированными фотографиями?
Обычно делается директория «дата-название-события», а в случае с тэгами как быть? Так же сначало сделать директорию, а потом все файлы из нее добавить в тэговую систему?
Из обработаных фотографий решили отправить несколько особо понравившихся родственникам, как быть в этом случае?

Да, здесь есть проблемы, связанные с тем, что vitis не может быть полностью интегрированным со всеми приложениями. Как вариант, редактированная фотография сохраняется в файловое пространство, и редактированную фотографию нужно отдельно покрыть категориями. Когда это происходит массово, можно сразу куче фоток назначить одни категории. Когда будет графическая оболочка для vitis, ряд подобных проблем можно будет сгладить.
Насчёт отдельных фотографий — здесь вы мне подали идею: есть команда vitis copy <выражение> -d <каталог назначения>, её можно будет расширить с применением списка номеров, как это сделано уже в других подкомандах (например, -n 3-6,8,12-15). Ну или как вариант особо понравившиеся добавить в категорию "Избранное" и сделать что-то вроде:
vitis copy Избранное i: Фотографии_от_25.06.2019 -d <путь к флешке родственников>
Если этим родственникам требуется отправить фотки куда-нибудь в мессенджер/соц.сеть, то через окно выбора файла можно просто добраться до нужной категории в директории "Vitis" и визуально выбрать нужные фотографии.

Вы пишете в заголовке статьи «Семантическая файловая система», это действительно так? Или же вы оперируете директориями стандартной ФС (ext4?), создавая дополнительные файлы и оперируя ссылками? Если последнее, то не рассматривали упаковать в действительно файловую систему, манипулировать разметкой диска? Тогда и поддержка стандартных команд sh будет, таких как cd/cp/ls и прочее. Идея отличная, отложу себе в закладки. Однажды доберусь в своей ОС до файловой системы и попытаюсь в категории :)

Интернет говорит, что семантическая файловая система обычно является надстройкой над обычной (т.е. она не обязана быть настоящей ФС). Про организацию хранения я писал — да, это символические ссылки и директории стандартной ФС (ext4 или любая другая UNIX-овая с поддержкой символических ссылок). Конечно, я думал о создании настоящей файловой системы, но это не в обозримом будущем, а для всяких cd/cp/ls можно использовать и FUSE, это будет проще. На раннем этапе я создавал маленькие скрипты vts-cd, vts-cp, vts-mkcat, vts-rm и др. С развитием удобства vitis для меня они стали неактуальными. Я сознательно отошёл от виртуальной ФС, о чём я выше уже в комментариях писал. Но вообще, как доп.функция, возможно, в каком-то виде это действительно может быть полезным, это нужно будет тщательно продумать, потому что не всё так просто, возникают концептуальные проблемы.

Извините, был не очень внимателен значит. Удачи вашему проекту!

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


Конечно, можно договориться, что тэги записываются как раз в таком формате, но хранятся по-прежнему россыпью.
А чтобы получить список, скажем, жанров, — придётся грепать все тэги по маске "жанр:*"?
А потом один раз очепятаться или промахнуться мимо регистра — "Жанр:....." — и привет.


Или это как-то ложится на подкатегории?

А почивший tagsistant это умел! Пример из его документации:
ls ~/myfiles/store/=maiden_videos/time:/year/lt/1985/@/
Если нормализовать дальше, то между тегами ещё и иерархия есть (жанр есть в кино, музыке, книгах и пр.). А актёры иногда режиссёрами становятся.
В макоси поддержка тэгов в файлах есть лет пять, в фото/музыке — совсем давно. Глубокая интеграция с ОС/ПО.
Однако не видел никого, кто бы этим пользовался :)

Всё это от лукавого! Только SFN! Только формат 8.3!

наличие директории «Vitis» в домашнем каталоге может кого-то не устраивать.

Поэтому имена таких папок обычно начинают с точки т.е. делают скрытыми

Я считал и всё ещё считаю, что пользователи должны иметь возможность явного видимого доступа к директории Vitis из своего файлового менеджера, если им потребуется удобное графическое навигирование, особенно, если что-нибудь понадобиться загрузить в браузере (выбрать фотки, скажем, в одном из комментариев эта тема поднималась).

НЛО прилетело и опубликовало эту надпись здесь

Если переместить, то
vitis assign X/Y -n Z/Y
Это фактически переименование одной категории в другую. Подкатегория X/Y перестанет существовать. При этом Z уже должна быть создана (это поведение я скоро изменю).
Если просто скопировать одно в другое:
vitis assign Z/Y -e X/Y
Будут скопирована эта тысяча символических ссылок, да.
Т.к. ссылки мизерные, это в любом случае быстро.

При переименовании зато нет никакого копирования.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории