commit - fa9b355d4aeb366f7e40b9c1e99a0a3d29cc443e
commit + 22155b86873471fb323812c6e59513ba1873d912
blob - ead84456eb0e78a951a0303ce7fbd1a310257c62
blob + 158547f4cc6099f0ec5a59cf6de05974745d686d
--- .gitignore
+++ .gitignore
**/*.swp
+**/*.mp3
blob - 15433943e06dc9bd6ff3f46e6516971541062385
blob + c8c9da556b3a3f711a45052cd32a0893a7be5fca
--- capsule/index.gmi
+++ capsule/index.gmi
Материалы на русском языке распосложены здесь:
=> vostok/ Простой Gemini сервер vostok (Восток), написанный на C++11
-## Архив аудио лекции
-
-В своей капсуле я храню архив интересных (по моему мнению) аудиолекции.
-=> not_my_voice/ Аудио лекции
-
## Связаться со мной
При желании со мной можно связаться следующими способами:
blob - 0477a6acf5d20fef77079ab233891b5944a58dd6
blob + 83182f06d02ec1fb5d002bb109b56ea35f77e933
--- capsule/vostok/index.gmi
+++ capsule/vostok/index.gmi
Название сервера отсылает к имени советского космического корабля "Восток-1", на котором Юрий Алексеевич Гагарин совершил первый пилотируемый полёт человека в космос.
-=> /vostok/how_to_run_on_openbsd.gmi Как запустить сервер vostok на OpenBSD
+=> how_to_run_on_openbsd.gmi Как запустить сервер vostok на OpenBSD
## Блог разработки сервера vostok на русском языке
-=> /vostok/reports/ Блог разработки сервера vostok
+=> reports/ Блог разработки сервера vostok
## Обратная связь
blob - d6c72cf91243fce51adda90b4e62394aeddec284
blob + 4212469ed027c0ac0b056461f4998d6a51d234f3
--- capsule/vostok/reports/0.0.1.gmi
+++ capsule/vostok/reports/0.0.1.gmi
Если вы не знакомы с практикой отсылки git-патчей через элетронную почту, то рекомендую к ознакомлению ресурс:
=> https://git-send-email.io/ Learn to use email with git
-=> /vostok/reports/0.0.2.gmi Следующая запись блога разработки
+=> 0.0.2.gmi Следующая запись блога разработки
blob - e4dc3f51ce37cbd73031bba8b0494d613e845af0
blob + 0c70256faf35fa55291603c86c3c811ba310bb19
--- capsule/vostok/reports/0.0.2.gmi
+++ capsule/vostok/reports/0.0.2.gmi
Ого, энтузиазма хватила на вторую версию сервера? Это уже что-то значит... наверное)
-=> /vostok/reports/0.0.1.gmi Предыдущая запись блога разработки
+=> 0.0.1.gmi Предыдущая запись блога разработки
Что нового в версии 0.0.2:
* открытие директории перенаправляется на открытие файла index.gmi в этой диреткории;
## Спасибо!
Отдельная большая благодарность всем, кто присылает патчи. В частности:
-* la-ninpre <aaoth@aaoth.xyz>, Makefile: compile files separately
+* la-ninpre <aaoth () aaoth ! xyz>, Makefile: compile files separately
+
+=> 0.1.0.gmi Следующая запись блога разработки
blob - 4dcd988632b06ef423c1916743ebbd9b6422562e
blob + 56cb604864a4f3e3ffc33fc9899a3634062dafff
--- capsule/vostok/reports/index.gmi
+++ capsule/vostok/reports/index.gmi
# Блог разработки сервера vostok
-=> /vostok/reports/0.0.2.gmi v0.0.2 (2023-08-23)
-=> /vostok/reports/0.0.1.gmi v0.0.1 (2023-08-17)
+=> 0.1.0.gmi v0.1.0 (2023-09-06)
+=> 0.0.2.gmi v0.0.2 (2023-08-23)
+=> 0.0.1.gmi v0.0.1 (2023-08-17)
blob - /dev/null
blob + 875af0d7f9ac8781f8b2fda68dad2e12fa70cd36 (mode 644)
--- /dev/null
+++ capsule/vostok/reports/0.1.0.gmi
+# vostok: сервер Gemini, версия 0.1.0
+
+А вот и свежая версия Gemini сервера vostok! В течении её разработки код был подвергнут сильному рефакторингу, поэтому мне показалось логичным поднять версию до 0.1.0. Хотя до версии "один-точка-ноль" всё ещё далеко, если она вообще когда-нибудь будет)))
+
+=> 0.0.2.gmi Предыдущая запись блога разработки
+
+Что нового в версии 0.1.0:
+* Появилась поддержка MIME типов.
+* Улучшено соответствие спецификации протокола Gemini (TLS `close_notify`).
+* Добавлена команда "make install".
+* Сформирован документ по стилю исходного кода сервера.
+* Проведён глубокий рефакторинг существующего кода.
+
+## MIME
+
+Если смотреть на сервер со стороны, то главное нововведение в новой версии это добавление поддержки MIME типов. Для того, что бы сервер получил знания о том, какие расширения файлов соответствуют типам их содержимого, в командной строке появилась опция -m в аргументе которой нужно указать путь в файлу mime.types. POSIX не регламентирует расположение этого файла в системе. На всех доступных мне Linux машинах этот файл имеет путь "/etc/mime.types", а, например, в OpenBSD системе путь к этому файлу "/usr/share/misc/mime.types".
+
+Получив в распоряжение содержимое такого файла, сервер указывает "правильные" MIME-типы в своих ответах. Что приводит к тому, что, например, картинки будут открываться как картинки, если ваш Gemini клиент такое умеет. А даже если не умеет, то, возможно, он не будет пытаться отображать бинарные файлы в виде текста, а сразу предложит сохранить их в файл на диске. Например:
+=> gemini://vostok.any-key.press/capsule/vostok.png
+
+## TLS `close_notify`
+
+А тут стоит сказать спасибо nervuri. Я как-то недоглядел, что в спецификации Gemini, в разделе 4 TLS, есть требование явно закрывать TLS сессию:
+> As per RFCs 5246 and 8446, Gemini servers MUST send a TLS `close_notify` prior to closing the connection after sending a complete response.
+=> gemini://gemini.circumlunar.space/docs/specification.gmi
+
+Благо это довольно просто решается вызовом tls_close(3)
+=> https://man.openbsd.org/tls_close.3 tls_close(3)
+=> https://got.any-key.press/?action=diff&commit=63be947448f2ae6d0a939be08cf39c01cd907b1f&path=vostok.git Исправление в исходном коде сервера vostok
+
+## Установка
+
+Еще одно нововведение: добавлена команда "make install". Естественно её нужно выполнять с правами пользователя root. Эта команда устанавливает исполняемый файл собранного сервера vostok в вашу систему. Классические тройка команд ("make", "make install" и "make clean") теперь присутствует.
+
+## Стиль
+
+Я решил набросать небольшой документ по стилю C++ кодирования сервера vostok:
+=> gemini://vostok.any-key.press/capsule/coding_style.gmi
+
+Меня иногда начинает подбешивать разный стиль именования, хотя пока весь C++ код я пишу в одно лицо. Поэтому в первую очередь для себя я написал этот документ. Что бы в случае сомнений не грепать по исходникам примеры, а заглянуть в capsule/coding_style.gmi. Ну и, при случае, дополнять его.
+
+## Рефакторинг
+
+Вырабатывая новый стиль кодирования пришлось сильно отрефакторить исходники. Перечитывая исходный код я понял, что слишком сильно стал грешить "велосепедостроительством", поэтому попутно перешёл на стандартные контейнеры из STL. Не везде, а там где мне показалось уместным: там, где интерфейс после этого становится чище. Речь про производительность пока не идёт, но я всё равно стараюсь обходиться без ненужных копирования, выделения и освобождения памяти. Вроде бы код стал лучше. Но с уверенностью можно будет сказать через несколько месяцев, когда придётся вернуться к исходному коду, которого давно не видел. Вот тогда свежим взглядом будет понятно. Или непонятно))
+
+## Спасибо!
+
+Ещё раз выражаю отдельную большую благодарность всем, кто оставляет обратную связь:
+* nervuri <seva () nervuri ! net>, Vostok server issues
blob - /dev/null
blob + 461c541f7e0b8bac2840b3630a8a81940699dffb (mode 644)
--- /dev/null
+++ capsule/robots.txt
+User-agent: *
+Disallow: /*.mp3$