vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
В традиционной парадигме 70-х годов у данных, которые лежат на диске владельца (не в смысле пользователя в многопользовательской системе, а в смысле какого-то куска программного кода) нет.
Приходи кто хочешь, бери файл, копируй, перемещай, меняй в нем байтики.

И у этого подхода есть масса преимуществ. Во-первых, прекраснореализуется toolbox phylosophy. Во-вторых, авторам приложений не нужно думать о поддержке таких операций как бэкап, или о способах передачи данных по сети - это можно поручить отдельным программам - сетевым FS, ftp-клиентам и т.д, и они прекрасно справятся с любыми данными.

Но чего-то в этой парадигме не хватает, и ее постоянно пытаются поломать. Из тех примеров, с которыми приходилось сталкиваться лично мне, первым была MacOS classic, с атрибутами creator и owner у файла. Концепция была, конечно. сильно кривая и мешала, когда нужно обрабатывать некие данные несколькими программами.

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

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

Или для обмена данными по шнурку вместо избыточно низкоуровневого для этой цели USB Storage используют не протокол уровня файловой системы (SMB, например), а какой-нибудь PTP или MTP.

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

Я регулярно сталкиваюсь с описаниями OpenSource проектов, которые норовят использовать D-Bus в качестве аналога андридных интентов и передавать по ней данные от процесса-владельца данных к процессу-потребителю данных. Получается, естественно, плохо. Но упорство таких попыток о чём-то свидетельтсвует.

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

1. Нужен стандартизированный протокол бэкапа. То есть любое приложение, которое хоть что-то хоть где-то хранит (ну кроме очень специальных случаев вроде HSM, должно поддерживать операцию "скачать всё" и, по возможности - "скачать изменения со времен такого-то бэкапа", а также "восстановить вот это".
В принципе, даже HSM-ы можно бэкапить, если предусмотреть защиту бэкапа секретом, который хранится где-то отдельно от бэкапа.

2. Нужен стандартизованный object sharing протокол. Что-то вроде того же PTP или MTP - посмотреть какие объекты есть в библиотеке у данной программы, вытащить указанный объект в виде, пригодным для того, чтобы скормить аналогичному приложению на другом устройстве, положить объект.

Возможно, в обоих случаях нужно поддерживать что-то типа rsync-протокола, то есть возможность передачи по кускам с контролем целостности.

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

Upd А придумает ли кто-нибудь третий случай операции кроме "забэкапить все" и "поделиться избранным", применимый к ЛЮБОЙ информации хранящейся на устройстве? (понятно что варианты "открыть в соответствующем приложении" и "стереть нафиг" не в счет).

Date: 2015-09-10 01:30 pm (UTC)
From: [identity profile] gineer.livejournal.com
\\Файл это избыточно простая штука.

%0 в чем проблема надстраивать абстракции уже поверх него?
в конце концов ведь все равно придется добавлять сущность "простой файл",
так почему бы просто не положить его в основу всего?

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


\\dz вообще на другом уровне абстракции рассуждал. Его "файл не нужен" - это к конецпеции разделения устройств хранения на оперативную(энергозавиисимую) и долговременную память и разные способы адресации в ней.

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


\\Очевидно что в каталоге произведений Вагнера имя этому файлу "Летучий Голландец, Вена, xxx год".
В каталоге художественных произведений по мотивам известной легенды "Опера Вагнера", в каталоге постановок Венской Оперы ... Ну вы поняли.

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

Да.
Именно об эту проблему я и имел в виду.
Можно придумать каакое-то удобное и эффективное внутреннее представление...
но что делать, если потом условия использования поменяются,
то это разрушит всю нашу красивую абстракцию.

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

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

Date: 2015-09-10 02:18 pm (UTC)
From: [identity profile] gineer.livejournal.com
Если "файл" не сущность, а мета-сущность,
то есть объект в котором хранятся и все его имена, и теги, и история изменений, и источник его появления, и средства работы с ним, и т.д., и т.п.... то есть, собственно этот "файл" -- это и есть та штука, с которой бы и хотелось работать прикладном уровне, единообразно...

Но тут и вылазит конфликт с реализацией -- вопрос, а на каком уровне все это будет достигаться?

Date: 2015-09-10 02:22 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Мне на самом деле очень нравится идея тэгов MP3-файлов, как структурированной метаинформации. Я хотел бы мочь на любые файлы вешать много структурированной метаинформации.

Имя файла, в такой модели, это всего лишь один атрибут метаинформации. Я даже не уверен, что он необходимый. Скажем, IMG_0387.JPG — атрибут совершенно бесполезный.

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

Date: 2015-09-10 02:49 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Имя вида IMG_0387.JPG — это бесполезный атрибут. Он более прямо заменяется парой <связь с фотоаппаратом, таймштамп достаточной точности> или тройкой <связь с фотоаппаратом, таймштамп недостаточной точности, последовательный уникализатор>. (Фактически, UUID версии 1.)

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

Date: 2015-09-12 09:18 am (UTC)
From: [identity profile] gineer.livejournal.com
\\Но архивы должны быть легко распаковываемы и перепаковываемы.

Так отож.
Много вы знаете архивов, которые поддерживаются ОСью.

По сути это зип... но он слишком примитивный
И каб... но он слишком закрытый и фиг знает что в нем там...

Date: 2015-09-12 11:40 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Архивы не должны поддерживаться ОСью. Архивы должны поддерживаться архиваторами, которые должны реализовывать API, определённое неким стандартом.

Имея стандарт на API архиватора, уже можно реализовывать хоть файловый менеджер, прозрачно входящий в архивы, хоть vfs-модуль, монтирующий архивы как часть файловой системы.

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

Edited Date: 2015-09-12 11:53 am (UTC)

Date: 2015-09-10 02:32 pm (UTC)
From: [identity profile] inkelyad.livejournal.com
Это приводит к порочному кругу. Потому что в какой-то момент в хеши начинает хотеться включить и некоторые теги. Например, дату подписания документа.

Date: 2015-09-10 02:57 pm (UTC)
From: [identity profile] inkelyad.livejournal.com
Кажется, все-таки круг выходит. Вот если мы файл и все его атрибуты (Signed и Unsigned) передали третьей службе на предмет "заверить, что в такой-то момент времени файл и его атрибуты были такими-то и подписаны теми-то" - то что на выходе получается?

Date: 2015-09-12 09:29 am (UTC)
From: [identity profile] gineer.livejournal.com
Получается такая иерархия: приложение -- служба -- модуль ядра.

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

Можно сделать на уровне службы/сервиса/демона -- там уже внутренности более гладкие, потому что есть внешний интерфейс и более менее понятно кому и как он должен предоставляться... но со внешним взаимодействием (комбинирование с другими службами) и универсальностью все так же не очень.

А можно вообще опустить на уровень ядра... как ЗФС в Солярке,
и получить "бесплатную" версионность и универсальность... но, при этом во многом теряется юзабилити... и все так же, сложности с комбинированием функциональности.


В целом... получается проблема с дизайном -- нужно уметь учитывать и просчитывать взаимодействие и все побочные случаи.

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

Date: 2015-09-13 05:30 pm (UTC)
From: [identity profile] spqr-voldi.livejournal.com
>И, главное, может легко поменять. Гораздо легче, чем. скажем, отредактировать тэги в mp3.

Ну вот и проблема: нет сколько-нибудь утрясшегося формата/протокола для работы с этой информацией, а с именами файлов разобраться слегка успели (юникод и длинные имена ещё не всюду, правда).

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

June 2025

S M T W T F S
1 23 4 567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 5th, 2025 07:40 pm
Powered by Dreamwidth Studios