Keepalive - как дела и что делаю (+ проект)

Wed Jul 1 20:46:38 2026 UTC

Всем привет! Уже полтора месяца я ничего не выкладывал на свой сайт, так как весь июнь были дела. Необходимо это исправить! :)

Начну с того, что теперь я буду выкладывать новости о новых версиях программ только на английской версии сайта. Думаю, всё равно переводить их на русский было бессмысленно, да и пару раз я, видимо, уже забывал это сделать. Так что все, кому это таки нужно, подпишитесь на англоязычный RSS[1].

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

Так что пока русская версия сайта остаётся абсолютно пустой.

Но рассказать я хотел о том, что последний месяц (с 9 июня) пишу сервер для протокола Spartan[2]. Spartan, не считая референсного сервера и клиента на Питоне, довольно неплох, и я в декабре прошлого года сделал что-то довольно на него похожее. Но под кодовым именем hitori оно так и осталось валяться у меня на диске. Разве что hitori markup я возможно приспособлю, ведь писать gemtext-файлы в vim'е довольно неудобно из-за длинных строк. Всё-таки очень неприятно быть ни с чем не совместимым, а Spartan уже поддерживается в нескольких клиентах. Хотя, клиент для spartan'а я тоже хочу когда-нибудь сделать, но не раньше, чем захочу вручную собрать ncurses :)

Свой сервер я назвал Nokotan[3] :D. Работает он одним процессом, одновременно несколько клиентов обслуживает с помощью select(2)'а. В общем, всё по фэншую. Собственно, я начал писать его, чтобы попробовать сделать что-то рабочее на select'е, потому что тестовый сервер для hitori у меня fork-ался на каждое соединение.

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

Сейчас я поднял у себя тестовый сервер <spartan://sh.pp.ru/>. Там есть несколько довольно тяжёлых по меркам Spartan'а файлов (~10 МиБ), так что можно испытывать сервер на прочность :)

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

За сим откланяюсь, пишите. Feature request'ы принимаются :)

  1. http://en.sh.pp.ru/rss.xml
  2. https://portal.mozz.us/spartan/mozz.us/?
  3. http://en.sh.pp.ru/nokotan.html

anonymous

От Anonymous (не проверено) Mon Aug 3 11:10:44 2026 UTC

pencil

CGI

Пока не успел ознакомиться с Nokotan, поэтому ориентируясь только на написанное тут.

Планируется ли поддержка CGI? Можно ли будет в будущем подружить талассу со Spartan?

no userpic

От Koshelkov Pjotr profile Mon Aug 3 15:33:32 2026 UTC в ответ на этот комментарий

pencil

Re: CGI

У меня была идея сделать как в geomyidae -- передавать запросы скриптам через параметры. При таком подходе да, подружить Нокотан с thalcgi будет проблематично, но писать свои скрипты будет просто. Не могу сказать, стоит ли реализовывать оригинальный CGI, потому что вообще не смотрел, что там да как.

Да и я не уверен, стоит ли добавлять такую функциональность именно в nokotan, потому что её задача -- по запросу выдавать файлы. Мне представляется более правильным в таких случаях юзать e-mail/какой-нибудь IM; для чего-то специфического можно делать маленькие сервисы для inetd; на худой конец можно сделать отдельный spartan-демон, который будет работать параллельно на другом порту и запускать скрипты (собственно, это будет что-то очень похожее на inetd, просто работающее на другом уровне стека).

Ну а так, Тхаласса может генерить что угодно, включая gemtext, хотя я не пробовал. Да и лично мне не очень понятно, зачем привлекать сюда тхалассу, gemtext, в отличие от HTML, нормально пишется голыми руками (не считая того, что там одна строка --- один абзац, и строки получаются длинными).

anonymous

От Anonymous (не проверено) Mon Aug 3 16:27:54 2026 UTC в ответ на этот комментарий

pencil

Re: Re: CGI

> Да и лично мне не очень понятно, зачем привлекать сюда тхалассу, gemtext, в отличие от HTML, нормально пишется голыми руками.

Это, конечно, так, но мне бы хотелось писать новости в каком-то одном формате (в том же самом headed text), на основе которых генерировать сайты и на http, и на spartan. Ну и хотелось бы иметь общую базу комментариев.

> Мне представляется более правильным в таких случаях юзать e-mail/какой-нибудь IM.

Это достаточно спорный вопрос. С одной стороны e-mail по духу более правильный, да и собственный почтовый сервер у меня есть, но я (как, наверное, и другие пользователи талассы, которые используют thalcgi) оставляю возможность отправить комментарии через http. В основном, конечно, это связано с тем, что для отправки комментариев через e-mail/IM требуется как минимум ещё одна программа и в большинстве случаев какая-то регистрация на чужих серверах или свой сервер и т.п., а при отправке комментариев через http достаточно почти любого браузера.

no userpic

От Koshelkov Pjotr profile Tue Aug 4 14:01:11 2026 UTC в ответ на этот комментарий

pencil

Re: Re: Re: CGI

Вообще да, если нужна возможность отправлять комментарии анонимно, причём через Спартан (чтобы клиентское ПО поддерживало), и чтобы thalcgi на другой стороне это принимал, то действительно нужно как в Gophernicus реализовывать CGI/1.1

Но из той части RFC, что я успел прочитать, у меня возникает вопрос, получится ли совместить его со Спартаном целиком. Как минимум query-часть URL'а там передаётся в блоке пользовательских данных, и отличить её от просто данных не получится (для QUERY_STRING). Задать тип и кодировку пользовательских данных на уровне протокола тоже нельзя (для CONTENT_TYPE). Надо будет посмотреть, как это реализовали в Gophernicus'е

anonymous

От Anonymous (не проверено) Tue Aug 4 19:31:23 2026 UTC в ответ на этот комментарий

pencil

Re: Re: Re: Re: CGI

Гостевые книги на спартане существуют (например, https://portal.mozz.us/spartan/mozz.us/guestbook/), и, вроде, они работают даже без CGI. Но я давно это все тыкал, а досконально изучать это все смогу не раньше осени.

no userpic

От Koshelkov Pjotr profile Wed Aug 5 05:43:13 2026 UTC в ответ на этот комментарий

pencil

Re: Re: Re: Re: Re: CGI

Ну, у mozz'а свой сервер pygopherd, который он мог пропатчить как хотел. Всмысле гостевая там скорее всего реализована не внешним скриптом, а самим сервером. А у меня вопрос именно как выставить переменные окружения из CGI/1.1, чтобы работали скрипты для веба, вроде thalcgi. На самом деле, в рамках Спартана CGI, вроде бы, реализован в saeko. Я попробую посмотреть туда

UPD: В saeko эти переменные вообще не реализованы. Видимо, придётся придумывать всё самому. Но с моего (хоть и, прямо скажем, невысокого) уровня владения веб-технологиями (читай вебнёй) ситуация выглядит безнадёжно.

anonymous

От Maxim N. (не проверено) Thu Jul 2 10:46:18 2026 UTC

pencil

Спасибо

Привет. Спасибо за пост, было интересно почитать.

> Видимо, этот формат не для меня, хотя мне всегда хотелось завести бложик.

Понимаю. У меня тоже бывают такие мысли. Можно попробовать просто вбрасывать какой-то рандом. О себе, о проиходящем, своё мнение. Может показаться что "кому это надо?", но на то он и личный блог. Кому не надо пусть не читают.

> Nokotan

Сервер для Spartan лично для меня вещь интересная и полезная. Спасибо! Планирую скачать и ознакомиться когда будет время. Возможно, перейду на него для своего сайта.

no userpic

От Koshelkov Pjotr profile Thu Jul 2 15:41:58 2026 UTC в ответ на этот комментарий

pencil

Re: Спасибо

> Может показаться что "кому это надо?", но на то он и личный блог.

Правда. Я вообще об этом не думал. Спасибо, а то мне вообще приходила идея закрыть русскую версию, теперь с ней что-нибудь придумаю. Действительно не стоит так серьёзно к этому относиться.

> Возможно, перейду на него для своего сайта.

Буду очень рад :)