gopherden: Forum via Gopher Protocol
_ _ _
__ _ ___ _ __ | |_ ___ _ _ __| | ___ _ _ (_)
/ _` | / _ \ | '_ \ | ' \ / -_) | '_| / _` | / -_) | ' \ _
\__, | \___/ | .__/ |_||_| \___| |_| \__,_| \___| |_||_| (_)
|___/ |_|
___
| __| ___ _ _ _ _ _ __
| _| / _ \ | '_| | || | | ' \
|_| \___/ |_| \_,_| |_|_|_|
_
__ __ (_) __ _
\ V / | | / _` |
\_/ |_| \__,_|
___ _
/ __| ___ _ __ | |_ ___ _ _
| (_ | / _ \ | '_ \ | ' \ / -_) | '_|
\___| \___/ | .__/ |_||_| \___| |_|
|_|
___ _ _
| _ \ _ _ ___ | |_ ___ __ ___ | |
| _/ | '_| / _ \ | _| / _ \ / _| / _ \ | |
|_| |_| \___/ \__| \___/ \__| \___/ |_|
╔─*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*─╗
║1 ........................................ 1║
║2* ........................................ *2║
║3 ........................................ 3║
║1 ...........Posted: 2024-03-10........... 1║
║2* ...Tags: gopher haskell nix showcase ... *2║
║3 ........................................ 3║
║1 ........................................ 1║
╚────────────────────────────────────────────────╝
gopherden[1] is forum software for the Gopher Protocol[2]. View the official
gopherden server via the web[3] or via the Gopher Protocol (as intended)[4] (you
may want to read my post about the Gopher Protocol[5]).
I'm thinking about renaming it to "phorum."
* TOC {:toc}
# Features (Users/Visitors)
Features for the people who use a gopherden:
* Transient content. Old threads are deleted. There's max thread count, when
reached and a new post is made, the oldest one gets erased.
* Anonymous, except IPs are associated with posts for banning and legal purposes
* View threads as gopher maps or as text files (ASCII art, kind of)
* Prevents some accidental reposting by refreshing
* Prevents new threads being created where the message/content is the same as
another in the DB
* "Secret codes" which allow you to use codes like `<jgsBagOfMoney>` to
potentially show an ASCII art picture
* Rate-limiting (how fast you can make new threads or posts)
* Handles/parses Gopher and HTTP(S) URIs into menu/map items
# News
[news from my blog about gopherden]
# Known issues
* No real bot prevention. A captcha-like system could be implemented.
# Feedback
* Contact me using a method mentioned on my about page[6]
* Create an issue on the gopherden GitHub repo[7]
# Who's using, in the news
Some other instances, notable users...
# Documentation and tutorials
* The project's README.md[8]
# See also
* This site's gopher tag[9]
* My post about the Gopher Protocol[10]
* gopherden GitHub repo[11]
# Post on the official server!
This feels kind of redundant.
Official *gopherden* server at
gopher://gopher.someodd.zip:7070[12]. You may
want to read my article on the Gopher Protocol[13] for help on browsing
gopherspace.
You can use my Gopher Protocol client, "waffle"[14] to visit the forum!
You can use `gopher` (`sudo apt-get install gopher`) and then use `gopher -p "/"
gopher.someodd.zip 7070`.
You could also use Lagrange[15], which has a client for Linux, MacOS, Windows,
Android, and iOS.
Below is a photo of me using Lagrange to visit the forum on my phone:
!Langrange client on a phone, visiting a gopherden forum =>
/assets/showcase/gopherden/lagrange-gopherden-phone.png.
# Want your own gopherden or want to develop?
gopherden is open source[16].
## Developer and Server Features
Features for those who host or develop (a) gopherden:
* Written in Haskell
* TOML configuration spec. First time I implemented a TOML config and I find it
decent.
* Uses Spacecookie[17], a wonderful Gopher Protocol library. I've worked with
the author before.
* CLI for banning
I'm leveraging `nixpkgs` to:
* Make it very easy on me to build and deploy, particularly on my server
* Have a development environment that sets up/takes down postgresql for me,
which also helps with deploying a little demo server I'm hosting now. It also
wipes the database on exit, too.
## Setting up a server
As of the time I'm writing this I don't have a `systemd` integration or Debian
package, so a set up I like and think is simple/easy:
1. clone the repo and `cd` into it
1. make sure `nixpkgs` is installed on your system with `experimental-features =
flakes nix-command` in your `~/.config/nix/nix.conf`
1. start a GNU Screen session `screen -S services`
1. `nix develop`
1. `nix run .#gopherden -- launch`
There you go! Keep in mind if you send the exit signal (I think) inside of `nix
develop` the database gets wiped.
## Footnotes
[1]: gopherden:
https://github.com/someodd/gopherden/
[2]: Gopher Protocol: /tags/gopher
[3]: via the web:
https://gopher.floodgap.com/gopher/gw?a=gopher%3A%2F%2Fgopher.someodd.zip%3A7070%2F
[4]: via the Gopher Protocol (as intended):
gopher://gopher.someodd.zip:7070/
[5]: my post about the Gopher Protocol: /notes/gopher
[6]: my about page: /about
[7]: Create an issue on the gopherden GitHub repo:
https://github.com/someodd/gopherden/issues
[8]: The project's README.md:
https://github.com/someodd/gopherden/blob/master/README.md
[9]: This site's gopher tag: /tags/gopher
[10]: My post about the Gopher Protocol: /notes/gopher
[11]: gopherden GitHub repo:
https://github.com/someodd/gopherden
[12]:
gopher://gopher.someodd.zip:7070:
gopher://gopher.someodd.zip:7070
[13]: my article on the Gopher Protocol: /notes/gopher
[14]: my Gopher Protocol client, "waffle": /showcase/waffle
[15]: Lagrange:
https://gmi.skyjake.fi/lagrange/
[16]: gopherden is open source:
https://github.com/someodd/gopherden
[17]: Spacecookie:
https://github.com/sternenseemann/spacecookie