LINUX.ORG.RU

8
Всего сообщений: 25

Дрю Деволт: да что такое это ваше Gemini и почему я так в восторге от него? [перевод]

Оригинал: https://drewdevault.com/2020/11/01/What-is-Gemini-anyway.html

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

Gemini - сетевой протокол для обмена гипертекстовыми документами. «Гипертекстовый» - в общем смысле этого слова, а не в отношении HTML («HyperText Markup Language»), который понимают веб-браузеры. Это простой сетевой протокол, который позволяет клиентам запрашивать гипертекстовые документы (в собственном формате, который называется gemtext). В некотором смысле, это эволюция протокола Gopher, но более модернизированная и упрощённая.

Gemini очень прост. Протокол использует TLS для установления шифрованного соединения (чаще используя самоподписанные сертификаты и Trust on first use (TOFU), чем центры сертификации). И он использует очень простой обмен: клиент отсылает URL того, что он хочет получить, завершая запрос символом новой строки. Сервер отвечает информационной строкой, которая содержит числовой код статуса и некоторую дополнительную информацию (такую как MIME-тип документа), затем пишет документ и завершает соединение. Аутентификация при желании выполняется с помощью клиентских сертификатов. Пользовательский ввод при желании выполняется с помощью кода ответа, который передаёт строку приглашения для ввода после чего выполняется второй запрос с ответом пользователя, который закодирован в query string URL-строки. Да и вот, собственно, и всё!

$ openssl s_client -quiet -crlf   \
    -servername drewdevault.com   \
    -connect drewdevault.com:1965 \
  | awk '{ print "response: " $0 }'
gemini://drewdevault.com
response: 20 text/gemini
response: ```ASCII art of a rocket next to "Drew DeVault" in a stylized font
response:   /\
response:   ||    ________                         ________       ____   ____            .__   __
response:   ||    \______ \_______   ______  _  __ \______ \   ___\   \ /   /____   __ __|  |_/  |_
response:  /||\    |    |  \_  __ \_/ __ \ \/ \/ /  |    |  \_/ __ \   Y   /\__  \ |  |  \  |\   __\
response: /:||:\   |    `   \  | \/\  ___/\     /   |    `   \  ___/\     /  / __ \|  |  /  |_|  |
response: |:||:|  /_______  /__|    \___  >\/\_/   /_______  /\___  >\___/  (____  /____/|____/__|
response: |/||\|        \/            \/                 \/     \/             \/
response:   **
response:   **
response: ```
[...]

Так почему я восхищён этим протоколом?

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

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

Вот некоторые аспекты этого протокола, которые я очень одобряю:

  • Он очень простой. Реализация сервера или клиента может быть написана одним человеком с нуля в промежутке одного-двух дней. Новый веб-браузер может занимать миллион часов при сотнях разработчиков для полной реализации.
  • Он не расширяемый. Gemini спроектирован так, чтобы его было трудно расширять без потери обратной совместимости и почти все запросы на расширение в рассылке в конечном итоге сносятся. Это хорошо. Ибо расширяемость как правило плохая идея. Расширения в конечном итоге ведут к большему усложнению и Gemini может страдать от той же участи, что и веб, если он не будет противиться расширениям.
  • Он однозначен в вопросах форматирования документов. В нём нет inline-ссылок (каждая ссылка идёт на новую линию), никакого форматирования и никаких inline-изображений (inline images). Gemini строго разделяет роли доставки контента и его отображения. Доставка контента - роль исключительно сервера, а его отображение - исключительно клиента. Здесь нет «стилей сайта» и роль автора очень мала в вопросах того как должен отображаться контент. Авторы всё ещё имеют возможность проявлять себя в этих рамках, ровно как и в любых других. Да и они позволяют быть клиентам проще и действовать как пользовательский инструмент, нежели вендорский.

Некоторые люди утверждают, что нам стоит сделать «веб, но в чуть урезанном виде», т.е. взяв только «нормальное» подмножество веб-стандартов. Я не согласен с этим (например, я не считаю, что существует «нормальное» их подмножество), но я оставлю это для своего другого поста. Gemini - это новая среда, и она отлична от веба. Любой, кто входит в неё должен быть готов к этому и открыт её рамкам. Ограничения порождают креативность!

Что насчёт меня. Я работал над некоторыми проектами, связанными с Gemini. Например, этот блог теперь доступен и через Gemini и я начал писать эксклюзивный контент, доступный только через этот протокол. Я также написал некоторый софт, которым вы можете воспользоваться:

  • libgmni, gmni и gmnlm - мой инструментарий для клиентского софта. Всё написанно на C11 и только лишь требует POSIX-like систему с OpenSSL. libgmni - клиенсткая библиотека общего назначения для Gemini с простым интерфейсом. gmni - CLI-утилита для выполнения Gemini-запросов, выполненная в стиле cURL. Ну и, наконец, gmnlm - line-mode браузер с богатым набором фич. Вместе эти утилиты достигают около 4000 строк кода из которых 1600 - URL-парсер, взятый из cURL.
  • gmnisrv - высокопроизводительный Gemini-сервер, написанный на C11 для POSIX-систем с OpenSSL. Он поддерживает TLS без конфигурирования (zero-configuration TLS), CGI-скриптование, auto-indexing, regex routing, URL-перезапись и планирую ещё несколько вещей для версии 1.0. И весь код достигает около 6700 строк кода из которых 1600 - тот же код, взятый из cURL и ещё дополнительно 2800, взятые из quickjs Фабриса Белларда для реализации регэкспов.
  • kineto - это сетевой шлюз для соединения HTTP-клиента и Gemini-сервера. Реализован в одном Go-файле при поддержке go-gemini библиотеки от ~adnano. Мой Gemini-блог доступен через этот портал, если вы хотите посмотреть его.

Так что погружайтесь и изучайте! Устанавливайте gmnisrv на свой сервер и настраивайте своё Gemini-окружение. Читайте фиды из CAPCOM. Пишите собственный софт!

 , , ,

rhubear ()

В xine добавили поддержку gopher

https://sourceforge.net/projects/xine/files/xine-lib/1.2.11/README.txt/view
https://www.opennet.ru/opennews/art.shtml?num=54209

Если я правильно понял, что такое «input plugin», теперь можно играть видео и аудио прямо с серверов gopher, без скачивания на локальный диск.

Лучше поздно, чем никогда.

 ,

question4 ()

Xibalba BBS теперь доступна через gopher

Собственно, сабж

> Bryan Ashby, сисоп Xibalba BBS (которая была доступна через telnet, ssh и
> wss-протоколы), сообщил, что для рид-онли доступа открыт также Gopher
> Server с несколькими FidoNet-Style областями сообщений.
Ссылка: gopher://xibalba.l33t.codes:44513

 ,

saahriktu ()

Вышел Castor 0.8.3

Это такой браузер для Gopher, Gemini и Finger написанный на rust. Сколько ненужно в одном месте!

Лицензия MIT.

Есть в AUR.

Скриншот https://i.imgur.com/Rwyhb4a.png

Сорцы https://git.sr.ht/~julienxx/castor/tree/0.8.3

@saahriktu, пробовал этот браузер?

 ,

Difrex ()

Gopher и альтернатива Web

Почему есть люди, которые считают gopher альтернативой современному вебу? Есть же некоторое сообщество, которое это декларирует и поддерживает узлы и «порталы». Например, suckless, вроде как агитируют за gopher.

Ведь он сильно не лучше HTTP/HTML, например в стандартном протоколе нельзя никак получить информацию о содержимом, доступном по URL, а как его интерпретировать решает браузер по типу ссылки (либо с помощью костыля в виде префикса в URL). Возможности нескольких сайтов на одном IP нет, хранить состояние на клиенте (для аутентификации, например) нельзя. Сама разметка предназначалась для каталогов ссылок, впрочем относительные ссылки сделать нельзя, тег для текстовых записей отсутствует в спецификации, а его использование для создания импровизированных «страниц» приводит к прибитой гвоздями «разметке» ascii-артом.

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

 , , ,

WDWTFWW ()

Появился gopherddit - gopher'овский интерфейс к reddit

Сабж. Теперь через gopher можно читать не только Hacker News - gopher://hngopher.com/1 -, но и reddit - gopher://gopherddit.com/1 .

 , , , ,

saahriktu ()

За полгода число активных юзеров gopher-хостинга sdf.org увеличилось на ~15%

Сабж. И теперь составляет 1250 юзеров. Линуксам бы такую динамику как этим gopher-хостингам.

Убедиться своими глазами можно здесь: gopher://sdf.org .

 

saahriktu ()

Kyle Nusbaum представил библиотеку и клиент gopher'а на Common Lisp'е

Сабж.
Библиотека: https://github.com/knusbaum/cl-gopher
Клиент: https://github.com/knusbaum/clim-gopher

Библиотека под BSD-2-Clause лицензией, а клиент под MIT лицензией.

 ,

saahriktu ()

Добавление поддержки gopher-ссылок на ЛОР

А почему бы не добавить поддержку gopher-ссылок на ЛОР, чтобы можно было ходить по gopher-ссылкам из lynx'а без копирования их в командную строку?

Если я правильно понял исходники ЛОРа, то тут достаточно такого патча: https://github.com/saahriktu/saahriktu-patchesandbugfixes/blob/master/lorsour... .

 ,

saahriktu ()

Solderpunk с sdf.org представил новый gopher-клиент для командной строки на 3-ем Python'е - VF-1

Сабж. На данный момент в реализации 982 строки кода общим весом 35543 байт: https://github.com/solderpunk/VF-1 .

Лично мне не понравилась жирнота ANSI-последовательностей, и я сделал так:

--- VF-1/vf1.py 2018-04-08 00:06:52.135993259 +0300
+++ VF-1_patched/vf1.py 2018-04-08 00:04:53.189001847 +0300
@@ -193,9 +193,9 @@
     def set_prompt(self, tls):
         self.tls = tls
         if self.tls:
-            self.prompt = "\x1b[38;5;196m" + "VF-1" + "\x1b[38;5;255m" + "> " + "\x1b[0m"
+            self.prompt = "VF-1" + "> "
         else:
-            self.prompt = "\x1b[38;5;202m" + "VF-1" + "\x1b[38;5;255m" + "> " + "\x1b[0m"
+            self.prompt = "VF-1" + "> "

     def _go_to_gi(self, gi, update_hist=True):
         # Telnet is a completely separate thing

 , ,

saahriktu ()

gopher можно читать даже без браузера

curl gopher://sdf.org | less

Жаль что этот протокол так непопулярен.

 

neuer_Reedych ()

SDF поделил юзеров gopher-хостинга на 3 категории

Сабж. Категории таковы:

  • «ANCIENT users» (таковых 372 человека) - не были активны 10 лет и больше;
  • «AGED users» (таковых 1374 человека) - не были активны больше 5-ти, но менее 10-ти лет;
  • «ACTIVE users» (таковых 1087 человек) - те, чья активность была замечена в последние 5 лет (среди них и я);

Наблюдать всё это можно здесь: gopher://sdf.org/

 ,

saahriktu ()

В lynx'е улучшат поддержку gopher'а

Сабж. В mail list lynx'а поступило предложение добавить поддержку «+» типа (Mirror or alternate server (for load balancing or in case of primary server downtime)).

Thomas E. Dickey предложение одобрил, и добавил его в to-do list.

 ,

saahriktu ()

Gopher over stunnel

Товарищи, я в отчаянии. Всё, что работает по HTTP/HTTPS вызывает чувство жжения в заднем проходе, которое с каждым релизом WebAssembly и ухудшением поддержки XUL усиливается.

Доктор прописал лекарство: Снова поднять Gopher-сервер (некоторое время уже держал, но на своём хосте и через DynDNS). Теперь я решил для этого разжиться VPS/VDS. Но просто так поднимать Gopher в наше время не хочется, а хочется прокинуть его через stunnel.

Проблема: Не получается прокинуть соединение для демона gophrier и клиента ddwarf по stunnel. Демон запускаю на 71 порту на 127.0.0.1. Конфиг stunnel:

setuid = nobody
setgid = nobody

pid = /run/gophrier-stunnel.pid

foreground = yes
debug = info
output = /var/log/gophrier-stunnel.log

CApath = /var/net/cert
CAfile = /var/net/cert/gophrier-cert.pem

[gophrier]
accept = 0.0.0.0:400
connect = 127.0.0.1:71
cert = /var/net/cert/gophrier-cert.pem
key = /var/net/cert/gophrier-key.pem

[ddwarf]
client = yes
accept = 70
connect = 127.0.0.1:400


Документацию stunnel не осилил в виду её неинтуитивности и отсутствия. Хуже мануалов я ещё не видел. Потому, прошу помощи уважаемого сообщества в попытке решить данную проблему.

P. S.: Раздавать файлы через Gopher неудобно, потому думаю над Heimdal/SMB или Heimdal/FTP или SFTP. У кого какие предпочтения на этот счёт?

 ,

NIR ()

Почему помер gopher?

Продолжая тему некросадизма. Вот был в стародавние времена (это когда жопса ещё никто не проклинал, потому что всем было плевать) такой замечательный протокол - Gopher. Был он зело шустр и удобен. Но сдох. В корчах. Собственно, меня интересует мнение многонеуважаемого собрания (кроме очевидной версии, что маркетолухи съели Кука и всех инженеров) — почему столь простая и эффективная вещь взяла и померла?

 ,

sand_circle ()

SDF празднует 30 лет в 2017-м году

Сабж.

SDF Celebrates 30 years of service in 2017!

On June 16th, 1987 Ted Uhlemann (handle: charmin, later iczer) connected his
Apple ][e's 300 baud modem to the phone line his mother had just given him
for his birthday.  He had published the number the night before on as many
BBSes around the Dallas Ft. Worth area that he could and he waited for the
first caller.  He had a copy of Magic Micro BBS which was written in Applesoft
BASIC and he named the BBS "SDF-1" after his favorite Japanimation series
ROBOTECH (Macross).  He hoped to draw users who were interested in anime,
industrial music and the Church of the Subgenius.

Slowly, SDF has grown over all these years, never forgetting our past and
unlike many sites on the internet, we actually have a past.  Some people
today may come here and see us as outdated and "retro".  But if you get
involved, you'll see it is quite alive with new ideas and a platform
for opportunity to try many new things.  The machines are often refreshed,
the quotas are gone, the disk space is expanding as are the features (and
user driven features at that) and our cabinets have plenty of space for
expansion here in the USA and in Europe (Germany).

Think about ways you'd like to celebrate SDF's 30th and join us on the
'bboard' to discuss what we could do.

I realize many of you have likely moved on yourselves, but I just wanted
you to know we're still here and we'll keep doing new and exciting things
with a foundation in the UNIX shell.

Sincerely,

Stephen Jones (SMJ)
https://sdf.org
Напоминаю, что у SDF есть и gopher-хостинг.

 , ,

saahriktu ()

gopherclone снова в строю

Пропатчил Perl'овскую утилиту gopherclone для клонирования gopher ресурсов - gopher://sdf.org/9/users/saahriktu/filez/gopher/gopherclone.lzma . Заодно набросал скрипт на bash'е, который должен решать проблему отсутствующих Perl'овских *.ph файлов - gopher://sdf.org/9/users/saahriktu/filez/gopher/fixperlph.sh.lzma .

 

saahriktu ()

gopher - шел 2015й год

Пакет python-dictclient (в дебиане/убунту)

Думаю, где же взять доку к нему? Смотрю описание пакета...

The homepage for this package (includes docs) is at gopher://quux.org/1/devel/dictclient.

Это какой-то саботаж... И хамство. В 2015-м году.

 , , ,

invy ()

Репозиторий gopher

Как клонировать этот репозиторий?

http://gopherproxy.meulie.net/downloads.tuxfamily.org/1/makehuman/assets/1.1/...

 , ,

brothermechanic ()

Протокол Gopher и сайты использующие его

Да, я знаю, что эта технология очень старая. И что сайтов использующих ее, осталось в Интернете всего 150 штук. Однако, чтобы кто не говорил, но далеко не всегда старое во всем и всегда уступает новому. В связи с этим мне любопытно, какие «вкусности»(и просто качества) есть у этого протокола(если таковые вообще есть), которые теоретически могли бы сделать его использование полезным в некоторых, пусть и в довольно специфических, ситуациях. Как с точки зрения клиента, так и с точки зрения серверной стороны.

 

aaz893 ()