gopher://gopher.someodd.zip:70/1/catalog/someodd/services/ Services Hosted services I run: IRC, XMPP, CS:1.6, museum, archives, QR campaign, git-clone gopher hosting. 2026-06-15T00:00:00Z gopher.someodd.zip gopher://gopher.someodd.zip:70/0/someodd/services/irc.md irc.md 2026-06-15T00:00:00Z 2026-06-15T00:00:00Z =============== IRC.SOMEODD.ZIP =============== gopher://gopher.someodd.zip:70/0/someodd/services/announcements/main-is-now-voice-only.md #main went voice-only: a post-mortem 2026-06-15T00:00:00Z 2026-06-15T00:00:00Z Post-mortem on a persistent ban evader in #main: why IRC bans never... +V `+m` makes it voice-only; `+V` auto-voices that person on every join, so a regular never has to ask twice. (For an unregistered regular you can match a hostmask instead of an account.) Pin the state so it survives restarts, with ChanServ: /msg ChanServ SET #main MLOCK +mnt /msg ChanServ SET #main GUARD ON /msg ChanServ SET #main KEEPTOPIC ON /msg ChanServ SET #main TOPICLOCK ON MLOCK locks the modes so nobody can quietly drop `+m`; GUARD keeps ChanServ sitting in the channel so it never empties out; the topic stays put. Make #main the only room. In ngircd.conf, predefine the channel and set, under [Options]: AllowedChannelTypes = (empty), then rehash. Ordinary users can no longer spin up channels. Point people at registration, so their voice is durable: /msg NickServ REGISTER /msg NickServ IDENTIFY An identified nick gets account-based voice that follows them across addresses -- no hostmask juggling, nothing to re-ask. ## The gopher angle The gopher-to-IRC bridge (the girc applet) kept working through all of this. The trick under `+m`: it connects over loopback, **waits until ChanServ grants it a voice, and only then speaks** -- otherwise its line would be sent in the same instant it joined, before the voice landed, and dropped. It posts under its own throwaway handle, not as the channel bot, so a hello from a passing gopher visitor still lands and is still attributable. ## Impact - Regulars: barely noticed. - Evader: neutralized -- present but silent, with no way to earn a voice. - Tradeoff: a brand-new visitor has to ask for a voice before their first word. ## Lessons I would rather leave a small gap than risk silencing someone who belongs here. The defenses lean permissive on purpose, and the evader gets handled directly when they turn up -- better than a wall so tall it locks out my own people. ## Status Resolved. #main is usable, the regulars are talking, and the evader is shouting into a void. Connection details and rules: /someodd/services/irc.md ]]> gopher://gopher.someodd.zip:70/1/someodd/services/announcements/sftp-gopher-hosting How I Host My Friends on Gopher 2026-05-17T00:00:00Z 2026-05-17T00:00:00Z SFTP-based per-friend gopher hosting on someodd.zip. Per-user chroo... SFTP-based per-friend gopher hosting on someodd.zip. Per-user chroot at /srv/sftp/<u>/ bind-mounted from /var/gopher/hosted/<u>/, so the gopher daemon (venusia) keeps reading and writing while friends only ever see their own hole. Bartleby auto-regenerates the friend's catalog at SFTP disconnect via a PAM session_close hook. Includes the bootstrap script. gopher://gopher.someodd.zip:70/0/someodd/services/README.txt README.txt 2026-01-23T00:00:00Z 2026-01-23T00:00:00Z Information about services I provide (self-host!), like IRC, XMPP, ... gopher://gopher.someodd.zip:70/0/someodd/services/counter-strike.md counter-strike.md 2025-09-30T00:00:00Z 2025-09-30T00:00:00Z # someodd's Counter Strike 1.6 Server gopher://gopher.someodd.zip:70/0/someodd/services/mumble.md mumble.md 2025-09-30T00:00:00Z 2025-09-30T00:00:00Z # someodd Mumble gopher://gopher.someodd.zip:70/0/someodd/services/whisper-radio.md whisper-radio.md 2025-09-30T00:00:00Z 2025-09-30T00:00:00Z https://radio.someodd.zip/ gopher://gopher.someodd.zip:70/0/someodd/services/xmpp.md xmpp.md 2025-09-30T00:00:00Z 2025-09-30T00:00:00Z # someodd's XMPP server gopher://gopher.someodd.zip:70/1/someodd/services/announcements/announcing-counter-strike-16-weekly-event Counter-Strike 1.6 Server + Weekly Event 2025-04-01T00:00:00Z 2025-04-01T00:00:00Z Announces the author's Counter-Strike 1.6 server and a recurring we... Announces the author's Counter-Strike 1.6 server and a recurring weekly event. Accompanied by Chinese-language flyer artwork promoting the game night.