«Микроблог» в Gemini: что такое TinyLog и как им пользоваться

Во время подготовки статьи про Gopher, нам пришлось изучить приличный объем информации и значительной частью материала были статьи из двух потрясающих источников: геминисферы (geminispace) и гоферсферы (gopherspace). По сути, к Gopher мы присматривались очень давно, но почитывая блоги в Gemini, мы вспомнили про то, что хотели реализовать этот протокол, и собственно говоря, сделали. Но после этого, задумываясь над тем, что еще можно интересного рассказать про малую сеть (smallnet, так называют gemini- и gopher-пространства вместе взятые), мы обратили свой взор на то, что не осветили еще одно явление, которое есть в Gemini: оказывается, помимо полновесных материалов в капсулах, в Gemini есть своеобразный аналог микроблогов и он имеет под собой негласный стандарт под названием TinyLog, и именно о нем мы хотим вам сегодня рассказать.

Что такое TinyLog?

Просматривая капсулы Gemini, на многих из них вы наверняка встретите ссылку с упоминанием этого понятия, которая ведет на отдельную страницу, где собраны некоторые записи. Эта страница, которая содержит в себе короткие заметки с текстом, организованные создателем капсулы во времени, и выдержанная в определенном формате и называется TinyLog. Следует понимать, что TinyLog — это не какой-то отдельный сервис внутри Gemini, а лишь страничка (или их набор) и ее разметка точно такая же, как и остальных страничках Gemini, однако, к ней применены особые рекомендации по стилю, о которых мы расскажем далее.

По большей части описание стандарта — это наш перевод с упрощением некоторых деталей.

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

В качестве примера, мы опишем для вас части предлагаемого стандарта, которые можно найти в этом репозитории за авторством bacardi55, который в свою очередь базировался на статье в капсуле пользователя Дрю Фриендо. Здесь и далее, мы будем описывать детали именно этого «стандарта» и опираться будем на него, поскольку он очень короткий и предельно простой.

TinyLog представляет собой файл с записями в стиле микроблога и предназначается для того, чтобы делиться информацией и взаимодействовать с записями других геминавтов (geminauts, серферы gemini-пространства). Формат TinyLog содержит обязательную часть, которая присутствует обязательно и формату которой должны соответствовать записи пользователей, и необязательную часть, в которой автор записей может отразить информацию о своем TinyLog.

Обязательная часть должна соответствовать следующему формату:

## <Дата>
<Запись>

В данном формате, блок Дата представляется в виде текста со следующим форматом:

ГГГГ-ММ-ДД чч:мм Часовой_пояс

Авторы формата рекомендуют после указания признаков заголовка второго уровня (это символы двух решеток) оставить пробел, после чего указать дату через описанный выше формат, где в качестве значения для блока Часовой поясуказать один из следующих вариантов:

  • Англоязычное сокращение для часового пояса, к примеру: UTC, CST и т.д
  • Правильное указание смещения по времени относительно времени по Гринвичу (пояс UTC), к примеру: +02:00 для CEST, -06:00 для ET, +03:00 для MSK и т.д.

Примечание. Рекомендуется использовать указание числового смещения относительно времени в Гринвиче, поскольку обозначения временных зон не являются стандартными и это создает проблемы в совместимости программ, которые могут работать с форматом. Также, предполагается, что если не указано смещение, то время указано по часовому поясу UTC (т.е. Гринвичское стандартное время).

Записи в TinyLog идут в порядке от новых к старым, а в самих записях разрешены любые элементы разметки гемтекста, кроме разметки, которая содержит в себе элементы с символами #, ## и ### (т.е. стандартные элементы, которыми отмечаются заголовки). Также разметка записи не должна содержать в себе двух переводов строки, поскольку именно двумя переводами строки (т.е. параграфом) записи в файле TinyLog отделены друг от друга.

Вот пример правильного форматирования записей в TinyLog (взято из описания «стандарта»):

## 2021-06-20 20:40 +0200
Одна скромная запись.

## 2021-06-20 20:30 CEST
Первая запись TinyLog.

Необязательная часть содержит в себе ту информацию, которую автор может сообщить о своем TinyLog и которая добавляется в самую верхушку (top of) файла. Это может выглядеть следующим образом:

# <Название TinyLog>

<Описание>

author: <автор>
avatar: <эмодзи>
licence: <наименование лицензии>

Стоит отметить ряд моментов относительно указания некоторых данных, в частности ни в одном из этих полей не должно быть разрывов строки или двух переводов строки (символа, который традиционно используется для создания параграфа). Также описание (поле description) не может находиться между разделами с метаданными (это поля author, avatar, licence вместе взятые), но может быть размещено либо до них, либо после.

Поле author с указанием автора можно представить следующим форматом:

@никАвтора[@адрес_капсулы]

в котором указывается имя или ник автора TinyLog, а указание адреса капсулы является необязательным и обычно игнорируется авторами, но может быть использовано программами-грабберами.

Поле avatar содержит в себе символ эмодзи и иногда может содержать описание использованного символа, например:

avatar: 🦪
avatar: 🦪 (:oyster:, U+1F9AA)

Еще одно из полей, поле под названием licence, содержит наименование лицензии, под которой доступны материалы из TinyLog и каких-то особых требований к содержимому поля не стандартом не предъявляется.

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

Вообще, в Gemini принято отвечать на некоторую часть записи, и если автор TinyLog хочет это сделать, то делает это следующим образом:

[=> <ссылка на оригинальную запись> ]RE: @<имя автора>[@<ссылка на капсулу>] <дата оригинальной записи>

При этом по сути не важно, как будет написана «метка» Re: — поскольку это часть обычного текста внутри разметки Gemtext.

Вот пример ответа автора:

## 2021-06-20 22:30 CEST
=> gemini://capsule.tld/tinylog.gmi Re: @user 2021-06-20 22:30 CEST
A response to @user: hello, cool post!

## 2021-06-20 22:30 CEST
=> gemini://capsule.tld/tinylog.gmi Re: @user@capsule.tld 2021-06-20 22:30 CEST
A response to @user: hello, cool post!

## 2021-06-20 22:30 CEST
Re: @user 2021-06-20 22:30 CEST
A response to @user: hello, cool post!

## 2021-06-20 22:30 CEST
Re: @user@capsule.tld 2021-06-20 22:30 CEST
A response to @user: hello, cool post!

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

Кроме самого «стандарта», есть еще и много различных инструментов вокруг самого формата: это и различного рода ридеры (клиенты, которые работают аналогично RSS-ридерам, только выводят список записей по интересующим вас капсулам), форматтеры и прочее, со списком можно ознакомится, к примеру, тут.

На этом о формате все, если захотите ознакомится, то приводим список интересных ссылок:

P.S: У нас теперь есть свой gopher-сервер aquaratixc.lhs-blog.info (работает через браузер с поддержкой gopher) и исходный код на GitHub.

Добавить комментарий