The nex-protocol specification is very short.
The nex-protocol specification is very short.
I am making a plot for nightfall.city -- I am on the shore after all, and need a nice place for my ASCII boat eventually!
#smolweb #nexprotocol #protectmonospaces
ꞈ ⱽ ꞈ
▲ √
╠\┬____──────‾‾‾‾‾/
║ │ thejikz' | ^ √
║ │ shore-e-o ( \/
║ │_ plot _\ ^ ^
╟/ ‾───‾‾‾‾‾──‾ \_
║│ _∕
║│
║│ \/
╠╜ /\
║ *bîrbs inčludêd!
╠═══╤═══════╤══════╤══════╤══════╤═══╗
║ ║
╟ ╢
║ ║
║ ║
║ ║
╟ ╢
║ ║
║ ║
║ ║
╟ ╢
║ ⁞≡⁞ ║
║ ⁞≡⁞ ╥╥║
║ ⁞≡⁞ ╥╥╫░║
╟ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ╥╥╥╥╥╫░░░╢
║ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ╥╥╥╥╥╥╥╥╥╫░░░░░░░░║
║╥╥╥╥╥╥╥╥╥╥__╥╥╥╥╥╥╫░░░░░░░░░░░░░░░░░║
╟░░░░░░░░╞╣__╠╡░░░░░░░░░░░░░░░░░░ꞈ_¸.╢
║░░░░░░░░■║──║■░░░░░░≈ꞈ_¸.~^º*¯` ~
╟░░░░░░░░░║__║.~º^*¯` ~ ~
║_¸.~ꞈ^*¯`║──║ ~ ~ ~
~ .║──║▄ ~ ~ ≈ ≈
~ ▀║──║ ~ ≈ ~
~ ≈ ╚──╝ ≈ ~ ≈ ~ ~
PostFreely Update (2023-10-01)
https://flamewar.social/post/2579
#PostFreely #WriteFreely #blogdom #blogosphere #blogoverse #gopher #gopherProtocol #gemini #GeminiProtocol #gemtext #nex #nexProtocol #finger #fingerProtocol #smallnet #smolnet #smallweb #smolweb
This is a PostFreely update for Sunday October 1st, 2023. (Or maybe Monday October 2nd, 2023 — depending on where you are in the world.) (I’d like to do these updates somewhat regularly, just to keep everyone who is interested up to date.) — ## What Is PostFreely PostFreely is a clean, minimalistic publishing platform — geared towards blogging and long-form writing. PostFreely supports Markdown. And in particular CommonMark, thanks to Mathew ( @[email protected] [https://universeodon.com/@mathew] ). And on top of that — PostFreely is Fediverse software — meaning it can connect with Mastodon, Akkoma, Castopod, Firefish, Friendica, Kbin, Lemmy, Misskey, Pixelfed, Pleroma, Plume, and any other software that supports ActivityPub, WebFinger, and the other technologies that the Fediverse is built on top of. PostFreely is also a publishing platform for the smallnet / smallweb — currently supporting the gopher-protocol, and in the near future also supporting the gemini-protocol / gemtext, the nex-protocol, the mercury-protocol, the finger-protocol, as well as restricted sub-sets of XHTML & HTML. — ## History PostFreely is a fork of WriteFreely. Thank you Matt Baer for creating WriteFreely and making it open-source software. After a discussion on the Fediverse between 3 people, Ynte ( @[email protected] [https://aus.social/@whylamb] ) encouraged myself ( @[email protected] [https://mastodon.social/@reiver] ) and Mathew ( @[email protected] [https://universeodon.com/@mathew] ) to fork WriteFreely. That fork became PostFreely. The name “PostFreely” is an homage to Matt Baer’s WriteFreely. To note its history, and try to give credit where credit it due. — ## Archetypes We had some discussion on who PostFreely is being built for. That discussion happened over here: “PostFreely Archetypes” https://flamewar.social/post/2073 [https://flamewar.social/post/2073] Although this type of quantitative research is ongoing — we now have some clarity over who PostFreely is being built for. (A more comprehensive archetype map document still needs to be created.) — ## Roadmap Backlog Knowing who PostFreely is being built for leads into the next thing — what are we planning to build. What we are planning on building is directly affected by who we are creating PostFreely for. What do those people want? What are their problems? PostFreely should try to solve their problems and address their wants. The PostFreely roadmap is not finalized yet. But we have several items in the backlog. Here they are: * password-resets (from the web-based PostFreely application), * image uploads (with Markdown code for the uploaded image automagically put into the Markdown editor): * image upload via drag-and-drop, * image upload svia copy-and-paste, * image upload via a button (when and if the toolbar is shown), * accessibility improvements, * CommonMark Mardown by default * but can change to other formats, too, in addition to CommonMark Markdown: * the gemini-protocol’s gemtext, * the nex-protocol’s (unnamed) directory document format, * (a subset of) XHTML, * (a subset of) HTML, * etc, * post previewing, * better Fediverse integration: * ability to see Fediverse notifications — favorites, boosts, replies, mentions, etc, * edits of posts get propagated on the Fediverse * plus many other things, too * more smallnet / smallweb support: * gemini-protocol & gemtext * mercury-protocol * nex-protocol * finger-protocol * (the gopher-protocol is already supported) * perhaps others, too * commenting, * being able to have conversations with people who comment to your post, * readers being able to see comments to a post, * comment moderation tools, * ability to turn commenting off (and on), * ability to hide specific comments, * ability to block specific users from commenting, * ability to block anyone from who server instances from commenting, * importing content from other platforms into PostFreely * import from WordPress, * import from WriteFreely, * import from Plume, * improved customization abilities (from terminal and via the web-based PostFreely application), * change favicon, * change fonts, * change skin / theme, * teams * Mastodon client-server API support * the Mastodon client-server API is becoming the defacto client-server API for the Fediverse. PostFreely implementing even part of it instantly makes all sorts of tooling (such as mobile apps) work for PostFreely, too. * being able to subscribe by e-mail, * being able to paywall some content (if desired), * optional micro-blogging to be able to chat with subscribers, * new methods for authentication * in addition to password: * one-time authorization code (OTAC), * magic-link, * passkey, * multi-factor authentication (MFA), * admins * multiple admins * step-down as admin * multi-tenant support, * serving a different domain, * similar to how DNS MX records except uses host-meta, * etc. (This list is not prioritized. Being near to the top or bottom of the list is not meaningful.) Again, these are currently in the PostFreely backlog. We are still discussing them. The roadmap is not finalized yet. But hopefully this gives you some sense of where PostFreely is likely going. If you would like to affect the PostFreely roadmap, please post in the PostFreely forum: https://flamewar.social/c/postfreely [https://flamewar.social/c/postfreely] — ## Development Work Mathew ( @[email protected] [https://universeodon.com/@mathew] ) and I ( @[email protected] [https://mastodon.social/@reiver] ) have been doing clean-up work of the PostFreely source-code. This type of work is necessary to prepare for adding features. Mathew and I had a conversation about how much we want PostFreely to diverge from the WriteFreely code-base. There are trade-offs both ways. There are advantages to keeping it similar — such as being able to pull-in upstream changes from WriteFreely. BUT — it does put constraints on us — and limits how much we can improve things. We are still undecided about this. Mathew has been focusing on CommonMark and Markdown component of PostFreely. He has a plan for how to add post previewing for CommonMark Markdown, and for how to make CommonMark the default format. I have been focusing on password-resets and implementing (parts of) the Mastodon client-server API for PostFreely. — ## Feedback We would love to hear from you. You can talk with us and the PostFreely community: * by replying to this post, * by posting in this community: https://flamewar.social/c/postfreely [https://flamewar.social/c/postfreely] * by posting on the Fediverse using the #PostFreely hash-tag, * or by directly reaching out to us: @[email protected] [https://mastodon.social/@reiver] @[email protected] [https://universeodon.com/@mathew] — ⸺ Charles Iliya Krempeaux ( @[email protected] [https://mastodon.social/@reiver] )
You can tell if the whole file was downloaded using the HTTP-protocol by using the Content-Length header.
I think the creators of the nex-protocol, gemini-protocol, and other similar protocols felt something like that was too complex.
I wonder if using the ␄ control character to mark the end of the file was considered.
End of Transmission (␄) = 0x04
And used ␛ control character to escape when ␄ (or ␛) appeared in the data.
Escape (␛) = 0x1B
One nice thing about the nex-protocol is —
The response is the actual file. You don't need to do any decoding. So it is simple.
One cost of this is —
In general, you cannot tell if you actually received the whole file or not. You don't know, for example, if the network connection died before you received the whole file.
(This is also a problem with the gemini-protocol.)
I like the nex-protocol.
I wish it supported (as part of the protocol) imperative-verbs like HTTP has.
(For example, HTTP has the imperative-verbs — DELETE, GET, HEAD, PATCH, POST, PUT, PATCH, etc.)
(The finger-protocol also has imperative-verbs — although only one was defined in the specification — "/W")
A nex-server could support something similar to piping (commonly found on Linux, Unix, DOS, etc) by chaining file-extensions.
I.e., something like:
nex://example.com/path/to/file.txt.stem.sort
nex://example.com/image.png.png2ansi.gz
The nex-protocol specification doesn't describe a way of doing content-type negotiation like HTTP does with the Accept & Content-Type headers.
BUT —
Since file types are given by file-extensions, a nex-client could just try different file-extensions.
For example, if a nex-client saw:
nex://example.com/path/to/file.txt
Then it could request:
nex://example.com/path/to/file.xhtml
nex://example.com/path/to/file.html
nex://example.com/path/to/file.md
Etc.
The nex-protocol specification doesn't describe a way of doing gzip, brotli, etc compression like HTTP does with the Accept-Encoding & Content-Encoding headers.
BUT —
A nex-server could support gzip compression when a ".gz" extension is added to the end of a file.
So if a client saw:
nex://example.com/path/to/file.txt
It could request:
nex://example.com/path/to/file.txt.gz
... to try to get a gzip'ed version.
Could do brotli, too:
nex://example.com/path/to/file.txt.br
#nex #nexProtocol