Какую информацию о приложении содержать метаданные
Концепция метаданных проста и в то же время сложна. Мы без труда понимаем, что такое данные: это информация, которой мы обмениваемся, которую обрабатываем и потребляем в постоянно развивающемся цифровом обществе. Но что такое метаданные?
Метаданные: данные о данных
Метаданные описывают суть этих данных: они предоставляют информацию об этих данных. Все очень просто. Но если копнуть чуть глубже, мы обнаружим, что «описание» данных представляет собой сложную с технической точки зрения задачу и одновременно социально-политическую проблему. В части I я расскажу, что представляют собой метаданные техническим, квази-научным языком.
Какие типы данных относятся к метаданным?
Метаданные – это средство классификации, упорядочивания и характеристики данных или содержимого. Национальная организация по информационным стандартам (NISO) предлагает классификацию, которую можно применить для всех типов данных или репозиториев данных, от библиотек до веб-сайтов, для текстовых и нетекстовых данных, в цифровой или материальной форме.
NISO описывает три типа метаданных.
Структурные метаданные поясняют состав или организацию ресурсов. Например, цифровую книгу можно публиковать в виде изображений отдельных страниц, файла PDF или HTML. Эти страницы или компоненты обычно группируют в главы. Данные о главах, содержание или сведения о макете страниц считаются структурными метаданными. К структурным метаданным относятся также такие записи, как структурная карта страниц или иных ресурсов веб-сайта, событие вторжения или записи сведений о голосовых вызовах.
Административные метаданные используются для управления ресурсом. Даты создания или получения, права доступа, права или происхождение, либо правила утилизации, такие как хранение или удаление, являются примерами прав, которые может применять цифровой архивист, куратор. Сходные метаданные окажутся полезными для администратора базы данных или для администраторов, отвечающих за получение данных из трафика телекоммуникационных сетей или сетей передачи данных, либо журналов систем безопасности или данных о событиях.
Это лишь верхушка айсберга
Познакомившись с различными типами метаданных, вы можете оценить, насколько полезны они могут быть для любых компаний, организаций или государственных органов, которые занимаются сбором, агрегированием, управлением или хранением метаданных в больших масштабах. Вы можете также понять, что действия по сбору метаданных в больших масштабах могут стать источником полемики. Мы поговорим об этом в следующих публикациях из этой серии.
Проще говоря, метаданные — это данные о данных (об их составе, содержании, статусе, происхождении, местонахождении, качестве, форматах, объёме, условиях доступа, авторских правах и т. п.).
Пример употребления на «Секрете»
«ProPublica обвинила корпорацию в сборе метаданных пользователей WhatsАpp — картинок, номеров телефонов, часовых поясов и даже IP-адресов. Куда они потом передавались? Журналисты ProPublica утверждают, что прямиком к американским силовикам».
(Из материала об уязвимостях проектов Facebook.)
Нюансы
Изначально этот термин означал средство каталогизации архивной информации: карточки библиотечного каталога включают систематизированные данные о каждой книге, в том числе название книги, его автора, жанр, аннотацию и т. д. Идея метаданных с тех пор не изменилась, хоть поле деятельности перешло в цифровой мир. По сути, вы генерируете метаданные прямо сейчас.
У любого файла, телефонного разговора, публикации в Facebook, видеофильма или перевода денег через банковское приложение есть метаданные. Мы часто не замечаем их, поскольку наше внимание закономерно сфокусировано на содержании. Но метаданные неотделимы от самих данных — трудно представить себе документ, у которого нет даты создания или редактирования.
Наличие возможности фильтровать метаданные значительно облегчает поиск определённого документа, файла или контента, ведь они содержат больше ценной информации, чем может показаться на первый взгляд. По метаданным можно выследить человека или получить на него компромат, полностью изменив его жизнь.
Доступ к вашим метаданным, которые передаются через интернет, есть у самых разных людей и организаций. Это могут быть как маркетологи, так и хакеры с госорганами. Например, заголовки писем могут быть доступны не только отправителю и адресату, но и почтовым провайдерам и даже спецслужбам. Владелец сайта, на который вы заходите, может узнать не только ваш IP-адрес, но и версии браузера и операционной системы. Это объясняется тем, что зачастую метаданные общедоступны и никак не защищены.
Правительства разных стран требуют от телекоммуникационных компаний хранить метаданные определённое количество времени для нужд правоохранительных органов и спецслужб. В России за эту процедуру отвечает «пакет Яровой», который предписывает сотовым операторам и интернет-компаниям хранить до шести месяцев весь пользовательский трафик — переписку в мессенджерах, социальных сетях и электронной почте, аудиозаписи звонков. При этом метаданные — то есть информацию о том, кому и когда звонил или пересылал файлы пользователь, — нужно хранить ещё дольше, а именно в течение трёх лет. Правоохранительные органы могут получить эту информацию по запросу.
Виды метаданных
Национальная организация по информационным стандартам (NISO) предлагает классифицировать метаданные таким образом:
- Описательные метаданные — это дополнительные данные, которые помогают изучать содержимое книг и файлов для их дальнейшего сбора или группирования. Например, описательные метаданные научной статьи будут включать такие сведения, как заголовок или имя автора публикации, аннотацию, используемые в работе ключевые слова и т. д.
- Структурные метаданные — это информация о том, как хранятся данные. Например, цифровую книгу можно скачать в виде изображений отдельных страниц, файла PDF или HTML. Структурные метаданные телефонного разговора будут включать длительность и время разговора, а цифрового изображения — размер и тип файла.
- Административные метаданные используются для управления ресурсом или контентом. Пример: лицензионные ограничения на распространение информации, права доступа с определёнными условиями использования. Такие метаданные полезны для администраторов баз данных или трафика.
Примеры
Метаданные используются при организации разных видов цифровой информации. Вот несколько примеров:
- Изображения — метаданные включают в себя производителя камеры, используемое программное обеспечение для редактирования, время диафрагмы объектива, время экспозиции, ориентацию, цветовое пространство, яркость, владельца камеры и даже местоположение изображения по GPS.
- Электронная почта — имя и адрес электронной почты отправителя и получателя, IP-адрес, с которого оно было отправлено, точное время его отправки и пр.
- Социальные сети — указанные в учётной записи сведения, привязанный к аккаунту номер мобильного телефона, список друзей, лайки, просмотры и т. д.
- Веб-страницы — заголовок страницы, дата публикации, описание, ключевые слова.
Существуют и признанные стандарты метаданных для определённых форматов данных. Например, таковым можно назвать общеевропейский исследовательский информационный формат (CERIF). Этот стандарт ЕС рекомендует своим государствам-членам для регистрации информации об исследовательской деятельности.
Как метаданные меняют жизнь людей
Таким образом, метаданные (IP-адрес) послужили поводом для уголовного преследования. После того как Богатов провёл несколько месяцев в СИЗО, уголовное дело против него прекратили. Затем математик вместе с женой покинул Россию. Впоследствии по этому делу задержали Владислава Кулешова из Ставрополя, который признал вину и получил полтора года ограничения свободы.
Метаданные — это данные в двоичном формате с описанием программы, хранящиеся либо в переносимом исполняемом (PE) файле среды CLR, либо в памяти. Когда код компилируется в PE-файл, метаданные помещаются в одну часть файла, а код преобразуется в MSIL и помещается в другую часть файла. В метаданных описываются все типы и члены, определенные или используемые в модуле или сборке. При исполнении кода среда выполнения загружает метаданные в память и обращается к ним для получения сведений о классах, членах, наследовании и других элементах кода.
В метаданных в независимом от языка виде описываются все типы и члены, определенные в коде. В метаданных хранятся следующие сведения.
Удостоверение (имя, версия, язык и региональные параметры, открытый ключ).
Другие сборки, от которых зависит данная сборка.
Необходимые разрешения безопасности.
Имя, видимость, базовый класс и реализованные интерфейсы.
Члены (методы, поля, свойства, события, вложенные типы).
- Дополнительные описательные элементы, изменяющие типы и члены.
Преимущества метаданных
Файлы с самоописанием.
Модули среды CLR и сборки обладают свойством самоописания. Метаданные модуля содержат все необходимое для взаимодействия с другим модулем. Метаданные автоматически предоставляют функциональные возможности IDL для модели СОМ, в связи с чем один и тот же файл может использоваться и для определения, и для реализации. Модули и сборки среды выполнения даже не требуют регистрации в операционной системе. Благодаря этому описания, используемые средой выполнения, всегда отражают фактический код в скомпилированном файле, что повышает надежность приложения.
Взаимодействие языков и упрощение разработки на основе компонентов
Метаданные содержат полные сведения о скомпилированном коде, необходимые для наследования класса из PE-файла, написанного на другом языке. Можно создать экземпляр класса, написанного на любом другом управляемом языке (это может быть любой язык, обращающийся к среде CLR), не беспокоясь о явной упаковке или настройке кода взаимодействия.
Метаданные и структура PE-файла
Таблицы и кучи метаданных
Каждая таблица метаданных содержит сведения об элементах программы. К примеру, в одной таблице метаданных описываются классы в коде, в другой — поля и так далее. Если в коде используется десять классов, таблица классов будет содержать десять строк, по одной для каждого класса. Таблицы метаданных ссылаются на другие таблицы и кучи. Например, таблица метаданных для классов ссылается на таблицу методов.
В метаданных сведения также хранятся в четырех структурах кучи — в куче строк, больших двоичных объектов, пользовательских строк и идентификаторов GUID. Все строки, используемые для названия типов и членов, хранятся в куче строк. Например, в таблице методов не хранится имя конкретного метода, но содержится ссылка на имя этого метода, находящееся в куче строк.
Лексемы метаданных
Каждая строка любой таблицы метаданных уникально идентифицируется в разделе MSIL PE-файла с помощью лексемы метаданных. Лексемы метаданных по своей сути похожи на указатели, сохраненные в MSIL, которые ссылаются на определенную таблицу метаданных.
Старший байт ( 0x06 ) указывает, что это лексема MethodDef. Три младших байта ( 000004 ) отсылают среду CLR к четвертой строке таблицы MethodDef для получения сведений с описанием определения метода.
Метаданные внутри PE-файла
После компиляции программы для среды CLR она преобразуется в PE-файл, состоящий из трех разделов. В следующей таблице описано содержание каждого раздела.
Использование метаданных во время выполнения
Для лучшего понимания метаданных и их роли в среде CLR полезно написать простую программу и наглядно проиллюстрировать, как метаданные влияют на работу среды выполнения. В приведенном ниже примере показано два метода внутри класса MyApp . Метод Main является точкой входа программы, а метод Add — просто возвращает сумму двух целочисленных аргументов.
При запуске кода среда выполнения загружает модуль в память и обращается к метаданным за сведениями об этом классе. После загрузки среда выполнения проводит подробный анализ потока кода MSIL для метода, чтобы преобразовать его в инструкции машинного кода (выполнение которых осуществляется максимально быстро). В среде выполнения для преобразования инструкций MSIL в исходный машинный код используется JIT-компилятор. Преобразование выполняется по одному методу за раз по мере необходимости.
JIT-компилятор считывает код MSIL для всего метода, проводит тщательный анализ и создает эффективный набор машинных инструкций для этого метода. В строке IL_000d появляется маркер метаданных для метода Add ( /* 06000003 */ ), и среда выполнения использует этот маркер для обращения к третьей строке таблицы MethodDef.
В приведенной ниже таблице показана часть таблицы MethodDef, на которую ссылается лексема метаданных, описывающая метод Add . В сборке существуют и другие таблицы метаданных со своими уникальными значениями, но в данный момент рассматривается только эта таблица.
В каждом столбце таблицы содержатся важные сведения о коде. Значения в столбце RVA позволяют среде выполнения вычислить начальный адрес в памяти кода MSIL, определяющего этот метод. Столбцы Неявные флаги и Флаги содержат битовые маски, описывающие метод (например, является ли метод общим или закрытым). Столбец Имя содержит указатель имени метода из кучи строк. Столбец Сигнатура содержит указатель определения сигнатуры метода в куче больших двоичных объектов.
Среда выполнения вычисляет нужный относительный адрес из столбца RVA в третьей строке и возвращает этот адрес JIT-компилятору, который затем переходит к новому адресу. JIT-компилятор продолжает обрабатывать код MSIL по новому адресу до тех пор, пока не найдет другую лексему метаданных, и затем процесс повторяется заново.
Благодаря метаданным среда выполнения имеет доступ к любым сведениям, необходимым для загрузки кода пользователя и его преобразования в инструкции машинного кода. Таким образом, метаданные позволяют использовать файлы с самоописанием и — совместно с системой общих типов — межъязыковое наследование.
Метаданные (от лат. meta — цель, конечный пункт, предел, край и данные) — информация о другой информации, или данные, относящиеся к дополнительной информации о содержимом или объекте. Метаданные раскрывают сведения о признаках и свойствах, характеризующих какие-либо сущности, которые позволяют автоматически искать и управлять ими в больших информационных потоках.
Содержание
Базы данных
Такая информация часто используется в базах данных:
- Метаданные — это субканальная информация об используемых данных.
- Структурированные данные, представляющие собой характеристики описываемых сущностей для целей их идентификации, поиска, оценки, управления ими. набор допустимых структурированных описаний, которые доступны в явном виде и предназначение которых может помочь найти объект. Термин используется в контексте поиска объектов, сущностей, ресурсов.
- Данные из более общей формальной системы, заданную с описывающей свойства системы данных.
- Информация о содержащейся на веб-странице свойств информации (создателе и т. п.). Пример: Имя автора правки в тексте. Этот термин в широком смысле слова используется для любой информации о данных: именах таблиц, колонок в таблице в реляционных базах данных, номер версии в файле программы (то есть как информативная часть в бинарном файле) и т. п [1] .
Различие между данными и метаданными
Обычно невозможно провести однозначное разделение на данные и метаданные в документе, поскольку:
- Что-то может являться как данными, так и метаданными. Так, заголовок статьи можно одновременно отнести как к метаданным (как элемент метаданных — заголовок), так и к собственно данным (поскольку заголовок является частью самого текста).
- Данные и метаданные могут меняться ролями. На стихотворение, рассматриваемое как данные, может быть написана музыка, в этом случае всё стихотворение может быть «прикреплено» к музыкальному файлу и в этом случае рассматриваться как метаданные. Таким образом, отнесение к одной или другой категории зависит от точки зрения (или пространства имён, системы отсчёта).
- Возможно создание мета-мета-…-метаданных (см. аксиома выбора). Поскольку, в соответствии с обычным определением, метаданные являются данными, то можно создать метаданные на метаданные, метаданные для вывода на специальные устройства, либо чтения их описания с использованием программного обеспечения, преобразующего текст в речь.
Другие описательные метаданные могут использоваться автоматизированными рабочими потоками. Например, если некоторая «умная» программа «знает» содержимое и структуру данных, то данные могут быть автоматически преобразованы и переданы другой «умной» программе как входные данные. В результате, пользователи будут освобождены от необходимости выполнения множества рутинных операций, если данные предоставлены для работы такими «немногословными» программами.
Метаданные становятся важны в World Wide Web по причине необходимости обеспечения поиска полезной информации среди огромного количества доступной. Метаданные, созданные вручную, имеют большую ценность, поскольку это гарантирует осмысленность. Если веб-страница на какую-то определённую тему содержит слово или фразу, то все другие веб-страницы на эту тему могут содержать такое же слово или фразу. Метаданные также обладают разнообразием, поэтому если с какой-то темой связаны два значения, то каждое из них может быть использовано. Например, статья про Живой Журнал может быть обозначена с помощью нескольких значений: «Живой Журнал», «ЖЖ», «LiveJournal».
Метаданные используются для хранения информации о записях audio CD. Аналогично MP3 файлы хранят метаданные в формате ID3.
Редактировать метаданные графических файлов можно в специальных программах для работы с метаданными.
Классификация метаданных
Метаданные можно классифицировать по
- Содержанию. Метаданные могут либо описывать сам ресурс (например, название и размер файла), либо содержимое ресурса (например, «в этом видеофайле показано как парень играет в футбол»).
- По отношению к ресурсу в целом. Метаданные могут относиться к ресурсу в целом или к его частям. Например, «Title» (название фильма) относится к фильму в целом, а «Scene description» (описание эпизода фильма) отдельное для каждого эпизода фильма.
- По возможности логического вывода. Метаданные можно подразделить на три слоя: нижний слой — это «сырые» данные сами по себе; средний слой — метаданные, описывающие указанные «сырые» данные; и верхний слой — метаданные, которые позволяют делать логический вывод, используя второй слой.
Тремя наиболее используемыми классами метаданных являются:
- Внутренние метаданные, описывающие структуру или составные части вещи, то, чем вещь является. Например, формат и размер файла.
- Административные метаданные, требующиеся для процессов обработки информации, назначение вещи. Например, информация об авторе, редакторе, дата публикации и т. п.
- Описательные метаданные, которые описывают природу вещи, её признаки. Например, набор связанных с информацией категорий, ссылки на другие вещи, связанные с данной.
Управление метаданными
Управление метаданными - процесс управления данными , связанными с информационными активами организации по обеспечению интеграции, доступа, совместного использования, анализа и пр. для достижения наилучших результатов организации.
Элементы управления метаданными
- Metadata repositories (Репозиторий метаданных) - используется для хранения, документирования, анализа и управления метаданными. Содержит в себе все данные на протяжении всех этапов жизненного цикла проекта: разработка, тестирование, ввод в промышленную эксплуатацию.
- Business glossary (Бизнес словарь) - используется для управления бизнес-терминами наряду с соответствующими определениями и отношениями между этими терминами.
- Data lineage (Происхождение данных) - определяет происхождение данных, этапы преобразования и изменения данных, направление их движения.
- Impact analysis (Анализ влияния) - предоставление обширной информации относительно зависимостей между данными с последующим влиянием на целевые показатели.
- Rules management (Управление правилами) - автоматизация соблюдения бизнес-правил, которые привязаны к элементам данных и связанных с ними метаданных.
- Semantic frameworks (Семантический фреймворк) - поддержка таксономии, ER-модели, онтологии, моделирования языков таких как RDF, OWL и UML.
- Metadata ingestion and translation (Захват и передача метаданных) - технологии и коннекторы для различных источников данных: RDBMS, BI, DIS, XML, etc.
Источники метаданных
Примеры стандартов мета-моделей
Группировка метаданных
Практическое применение в Сбербанке
Основной целью создания единой базы метаданных является автоматизация и повышение качества бизнес-процессов [2] :
- Снижение стоимости анализа и проектирования решений
- Сокращение времени разработки и вывода кода на среды
- Повышение качества продуктов
- Контроль соответствия архитектурным требованиям
Единая база метаданных, объединяет результаты анализа и архитектуры проектных решений с метаданными реальных сред.
Аналитическое пространство, является высокоуровневым описанием тракта данных от систем источников до витрин. Разрабатывается на этапе анализа и проектирования решения.
Каталог информационных компонент, обеспечивает пользователя полной, оперативной и систематизированной информацией об используемых в комплексе ЦХД – объектах, связях между объектами, компонентах, метриках, размещении.
Случалось ли вам при воспроизведении какого-то музыкального трека или видеоролика видеть на экране программного плеера название композиции, альбома или имя исполнителя? Конечно же, да. Так вот! Для отображения такой информации используются метаданные. Это описание является как бы сопутствующим и включено в основную архитектуру воспроизводимого файла. Но на самом деле понятие метаданных намного шире, нежели в приведенном примере. Далее рассмотрим, как любая информационная система может использовать такие данные и что это такое в принципе. В качестве примеров для лучшего понимания будут приведены технологии мультимедиа и программы управления предприятиями на основе 1С.
Метаданные - это что такое?
Если исходить из того, что предлагает в качестве основной трактовки этого понятия такой уважаемый ресурс, как Wikipedia, объяснить этот термин можно достаточно просто. По сути своей метаданные – это в некоторым смысле информация о другой информации.
Разновидности и типы метаданных
Для того чтобы в полной мере понять смысл, вкладываемый в этот термин, необходимо знать применяемую классификацию. Их несколько.
Во-первых, метаданные можно классифицировать по следующим признакам:
- Содержание – описание искомого объекта в виде размера и типа файла, информации о содержимом ресурса (например, "в этом видео показана природа" или "на таком-то сайте находятся самые новые фильмы").
- Отношение к ресурсу или его компонентам – базовая информация о каком-то объекте (например, название фильма или описание какой-то сцены из него).
- Логический вывод на основе трехслойного разделения. Первый слой является "сырым", второй представляет собой описание первого слоя, третий помогает сделать логический вывод о содержимом первого слоя на основании описания, заданного во втором.
Во-вторых, любая информационная система предполагает еще и классификацию по другим признакам, среди которых можно выделить три большие группы метаданных:
- внутренние – описание явного признака объекта (размер или тип файла);
- административные – информация о самом объекте (автор, исполнитель и т. д.);
- описательные – информация о природе объекта, его отличительных признаках, ссылки на другие объекты, связанные с искомым.
Различие и сходство между данными и метаданными
В понимании такой информационной структуры весьма интересным является и тот факт, что обычные данные и метаданные могут меняться ролями.
В качестве самого простого примера можно взять заголовок статьи. Если рассматривать его как часть всего текста, он относится к данным. Но если рассматривать его применительно ко всему текстовому файлу, это метаданные.
Точно так же можно взять в качестве примера обычное стихотворение. Само по себе оно изначально является данными. Но если написать на него музыку, то есть прикрепить текст к сопровождению, стихотворение уже начинает выступать в роли метаданных.
Форматы метаданных
Собственно, формат метаданных представляет собой некую унифицированную форму описания свойств какого-то объекта, на основании которого о нем можно получить полное представление. Как правило, такие формы включают в себя несколько полей для ввода атрибутов, описания свойств объекта, их сути и т. д.
Самыми распространенными являются следующие:
- MARC и его разновидности – стандарт, в основном применяемый для книг и библиографических ресурсов с указанием названия, автора, года написания или выхода.
- DCMI – стандарт, принятый для описания интернет-объектов, электронных документов, ресурсов и т. д.
- FOAF и vCard – описание персонифицированных данных людей и организаций (в формате vCard при экспорте с мобильных устройств сохраняются списки контактов).
- CDWA – стандарт для описания исторических или музейных ценностей.
- ONIX и PRISM – информация об издательстве.
- CIF – кристаллография;
- VICAR – обработка изображений, получаемых со спутников.
- NewsXML – новостные метаданные и т. д.
Список можно продолжать до бесконечности, поскольку для любого аспекта человеческой деятельности сегодня можно найти какой-то единый подход в описании.
Что касается прикладного программирования, метаданные можно позиционировать как инструмент инкапсуляции или определения логики работы с таблицами, входящими в состав единой СУБД (например, 1С). Их применение позволяет произвести изоляцию работу с одной отдельно взятой таблицей от всех данных, содержащихся в основной базе.
Простейшие примеры использования метаданных
Приведенные выше примеры дают несколько отвлеченное понятие метаданных. Точное понимание можно получить, если привести в пример ID3-теги, которые в большинстве своем присутствуют в MP3-файлах, соответствующих официальным трекам каких-то исполнителей.
Эта информация как раз и содержит данные о композиции, альбоме, самом исполнителе, годе выпуска и т. д. Собственно, загрузка метаданных в любом программном плеере или аудиоредакторе сложностей не представляет. Но в плеерах информацию нужно сохранить или обновить, а вот в редакторах вроде Adobe Audition (бывшее приложение Cool Edit Pro) такие сведения после ввода прикрепляются к треку автоматически, и повторное сохранение не требуется.
В некотором смысле к метаданным можно отнести и файлы формата XML, в которых сохраняется либо информация с тегами, либо настройки программ, к которым они прикреплены.
Ошибки чтения
Как раз с XML-данными зачастую могут возникать проблемы, когда появляется ошибка метаданных. О чем это говорит? Да только о том, что теги, если они вводились вручную, были прописаны некорректно.
Но сбой может быть связан еще и с повреждением самого описательного файла. Как правило, редактирование, причем даже файлов запроса лицензий и ключей в таком формате, можно произвести в обычном «Блокноте», если знать, что именно удалять или изменять.
В той же системе 1С, как правило, ошибка подгрузки метаданных связана с повреждением базы данных, а точнее – с их загрузкой со съемных носителей, когда пользователи пытаются перезаписать существующий MD-файл собственными силами. Иногда причиной такой ситуации может стать внезапное отключение электроэнергии. В принципе, для восстановления можно использовать распаковщшик GComp, при помощи которого сначала нужно извлечь данные, а потом упаковать их снова. Можно проверить содержимое файла в HEX-редакторе и, если оно не соответствует оригиналу, просто заменить файл, скопировав его из аналогичной версии 1С.
Вместо итога
Вот, собственно, и все, что мы хотели вам поведать о метаданных. Как видите, суть самого понятия сводится к простому информационному описанию другой информации, объектов, их свойств, сути и т. д. И с такой информацией человек сталкивается чуть ли не ежедневно, даже не придавая этому значения. А стоило бы…
Читайте также: