gopher://gopher.someodd.zip:70/1/catalog/someodd/Regarding SomeoddSomeoddverse: my software, interviews, services.2026-06-16T00:00:00Zgopher.someodd.zipgopher://gopher.someodd.zip:70/1/someodd/opensource/wmpixelwmpixel: a pixel-art animation studio in your Window Maker dock2026-06-09T00:00:00Z2026-06-16T00:00:00Zan indexed-colour pixel-art editor and frame animator that lives as...an indexed-colour pixel-art editor and frame animator that lives as a Window Maker dockapp --- the dock icon plays your animation, click it for a full editor: mouse + keyboard drawing, a 16-colour palette and RGB picker, wrap-around scroll, animation frames at an adjustable frame rate, GIF / indexed-PNG import and export, fullscreen, a viewer window, and a NeXT-style colour-grouped tool panel. it auto-saves your work to ~/.wmpixel-session and reloads it on the next launch. one self-contained literate-Haskell file, doctested with LiquidHaskell refinements on its numeric core. by regarding_someoddgopher://gopher.someodd.zip:70/0/someodd/services/irc.mdirc.md2026-06-15T00:00:00Z2026-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-mortem2026-06-15T00:00:00Z2026-06-15T00:00:00ZPost-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/letters/2026/2026_05_27_last_letter_lumenaLast Letter to St. Lumena2026-06-03T00:00:00Z2026-06-03T00:00:00ZA farewell.A farewell.gopher://gopher.someodd.zip:70/1/someodd/letters/2026/2026_06_new_rainNew Rain2026-06-03T00:00:00Z2026-06-03T00:00:00ZFirst letter after almost all the sisters left.First letter after almost all the sisters left.gopher://gopher.someodd.zip:70/1/someodd/opensource/window_maker_rofi_window_switcherwindow_maker_rofi_window_switcher: a rofi switcher that shows minimized windows2026-05-20T00:00:00Z2026-05-20T00:00:00ZA rofi-driven window switcher for Window Maker that actually lists ...A rofi-driven window switcher for Window Maker that actually lists minimized windows -- rofi's native -show window silently drops them under WMaker. Bash + wmctrl + xdotool: MRU order, per-app icons, off-desktop tags, reliable de-iconify, no title-parsing ambiguity.gopher://gopher.someodd.zip:70/1/someodd/services/announcements/sftp-gopher-hostingHow I Host My Friends on Gopher2026-05-17T00:00:00Z2026-05-17T00:00:00ZSFTP-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/1/someodd/opensource/gophervrgophervr: walk around gopherspace in 3D, again2026-05-13T00:00:00Z2026-05-13T00:00:00ZCameron Kaiser's 2015 Motif port of UMN's 1995 GopherVR, with a sma...Cameron Kaiser's 2015 Motif port of UMN's 1995 GopherVR, with a small patch to build on Debian forky / gcc 15. One zip, one script, ~5 minutes from clone to clicking on a gopher menu inside a rotating 3D scene.gopher://gopher.someodd.zip:70/1/someodd/opensource/peepy_wmcubepeepy_wmcube: peepy for your dockapp2026-05-13T00:00:00Z2026-05-13T00:00:00ZA heavily-decimated wireframe of Nam Lemonade's Low poly Peepy, con...A heavily-decimated wireframe of Nam Lemonade's Low poly Peepy, converted to wmcube's .wmc format so the round goose-thing can spin in your Window Maker dock and speed up under CPU load.gopher://gopher.someodd.zip:70/0/someodd/letters/README.txtREADME.txt2026-05-11T00:00:00Z2026-05-11T00:00:00ZI like handwriting letters to others.gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_05_10_mothers_day_for_father.jpg2026_05_10_mothers_day_for_father.jpg2026-05-11T00:00:00Z2026-05-11T00:00:00Z]]>gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_05_andrew.jpg2026_05_andrew.jpg2026-05-11T00:00:00Z2026-05-11T00:00:00Z]]>gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_05_for_a_friend.jpg2026_05_for_a_friend.jpg2026-05-11T00:00:00Z2026-05-11T00:00:00Z]]>gopher://gopher.someodd.zip:70/1/someodd/letters/2026/2026_05_10_mothers_day_sistersMother's Day 2026, for the Sisters2026-05-10T00:00:00Z2026-05-10T00:00:00ZMissionaries of Charity DevotionalsMissionaries of Charity Devotionalsgopher://gopher.someodd.zip:70/I/someodd/slice_of_life/2026_05_10_sister_lumena_flower_photo.jpgSister Lumena's Rose Photo2026-05-10T00:00:00Z2026-05-10T00:00:00ZOn Mother's Day, when working on a banner to celebrate perpetual vo...]]>gopher://gopher.someodd.zip:70/1/someodd/opensource/gopher_applet_specLiterate Haskell with dependencies, speedily in gopherspace.2026-05-07T00:00:00Z2026-05-07T00:00:00Zgopher://gopher.someodd.zip:70/1/someodd/opensource/bartlebybartleby2026-04-28T00:00:00Z2026-04-27T00:00:00ZI would prefer not to use the web.I would prefer not to use the web.gopher://gopher.someodd.zip:70/1/someodd/presents_of_presencePresents of Presence2026-04-24T00:00:00Z2026-04-24T00:00:00ZSummary of a philosophical realization. Special booklet I handed ou...Summary of a philosophical realization. Special booklet I handed out for a special event.gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_04_per_sister_lumenas_request.jpgPer Sister Lumena's Request2026-04-22T00:00:00Z2026-04-22T00:00:00ZThe sisters don't have access to the Internet. I was asked to searc...]]>gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_03_06_devotional_presence.jpgDevotional on Presence2026-03-06T00:00:00Z2026-03-06T00:00:00ZWritten for the sisters.]]>gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_02_25_sagatagan_devotional.jpgSagatagan Devotional2026-02-25T00:00:00Z2026-02-25T00:00:00ZDevotional letter about Lake Sagatagan's Stella Maris Chapel, given...]]>gopher://gopher.someodd.zip:70/1/someodd/presentations_interviews/dialog-with-screwlispDRAFT -- Room 1436: What Gopher Is (Philosophy)?2026-02-25T00:00:00Z2026-02-25T00:00:00ZDraft of 'Room 1436,' a dialog with screwlisp about Gopher's underl...Draft of 'Room 1436,' a dialog with screwlisp about Gopher's underlying philosophy. Still in early form.gopher://gopher.someodd.zip:70/1/someodd/letters/2026/2026_02_20_faithfully_lostFaithfully Lost2026-02-20T00:00:00Z2026-02-20T00:00:00ZA devotional letter about the rosary I wrote to the sisters (Missio...A devotional letter about the rosary I wrote to the sisters (Missionaries of Charity).gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_02_11_lord_it_is_winter_devotional.jpgLord, it is winter2026-02-11T00:00:00Z2026-02-11T00:00:00ZDevotional letter for the sisters.]]>gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_02_07_on_suffering_devotional.jpgOn Suffering Devotional2026-02-07T00:00:00Z2026-02-07T00:00:00ZI borrowed, and repaired, a letter from the sisters written by John...]]>gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_02_02_letter_for_a_white_rose.jpgLetter for a White Rose2026-02-02T00:00:00Z2026-02-02T00:00:00ZLetter for a sister of the Missionaries of Charity.]]>gopher://gopher.someodd.zip:70/0/someodd/opensource/4_ch.md4-ch over Gopher2026-01-25T00:00:00Z2026-01-25T00:00:00ZA tiny open-source viewer for 4-ch.net that runs over the Gopher Pr...gopher://gopher.someodd.zip:70/0/someodd/services/README.txtREADME.txt2026-01-23T00:00:00Z2026-01-23T00:00:00ZInformation about services I provide (self-host!), like IRC, XMPP, ...gopher://gopher.someodd.zip:70/1/someodd/how_i_publishI Replaced My Web Stack With Gopher (1991) and Failed Less2026-01-22T00:00:00Z2026-01-22T00:00:00ZA love letter to RFC 1436 and the author's choice to replace a mode...A love letter to RFC 1436 and the author's choice to replace a modern web stack with plain Gopher, with fewer failures and more joy. Draws 'intimacy over scale' as the thesis and invites pre-publication feedback.gopher://gopher.someodd.zip:70/0/someodd/opensource/chatgopherpt.txtChatGopherPT: talking to LLMs over Gopher2026-01-20T00:00:00Z2026-01-20T00:00:00ZChatGopherPT: an LLM interface served over the Gopher Protocol, mak...gopher://gopher.someodd.zip:70/1/someodd/opensource/gasm-tiny-gopher-runs-on-trashgasm: 1.5 KB Gopher server that runs on 24 KB of RAM2026-01-15T00:00:00Z2026-01-15T00:00:00ZAnnouncing gasm, a 1.5 KB Gopher server that runs on 24 KB of RAM. ...Announcing gasm, a 1.5 KB Gopher server that runs on 24 KB of RAM. Demonstrates how small a functional gopher daemon can be, with a photo of the binary's size on disk.gopher://gopher.someodd.zip:70/0/someodd/opensource/gopherspace-rpg.mdI Made a Multiplayer RPG Where You Explore Gopherspace With Others2025-11-17T00:00:00Z2025-11-17T00:00:00ZA multiplayer RPG where the game world is live gopherspace itself —...gopher://gopher.someodd.zip:70/1/someodd/presentations_interviews/screwtape_interview_2025-11-04I was interviewed on screwtape 2025-11-04 about Gopher, Haskell, Category Theory2025-11-17T00:00:00Z2025-11-17T00:00:00ZA November 2025 interview on screwtape covering Gopher, Haskell, an...A November 2025 interview on screwtape covering Gopher, Haskell, and category theory. Archival notes around the session.gopher://gopher.someodd.zip:70/9/someodd/opensource/amor_theme_peepy/READMEREADME2025-09-30T00:00:00Z2025-09-30T00:00:00Zgopher://gopher.someodd.zip:70/9/someodd/opensource/amor_theme_peepy/peepy-amor-theme.zippeepy-amor-theme.zip2025-09-30T00:00:00Z2025-09-30T00:00:00Zgopher://gopher.someodd.zip:70/I/someodd/photography/bird-on-cross-sky.jpgbird-on-cross-sky.jpg2025-09-30T00:00:00Z2025-09-30T00:00:00Z]]>gopher://gopher.someodd.zip:70/0/someodd/services/counter-strike.mdcounter-strike.md2025-09-30T00:00:00Z2025-09-30T00:00:00Z# someodd's Counter Strike 1.6 Servergopher://gopher.someodd.zip:70/0/someodd/services/mumble.mdmumble.md2025-09-30T00:00:00Z2025-09-30T00:00:00Z# someodd Mumblegopher://gopher.someodd.zip:70/0/someodd/services/whisper-radio.mdwhisper-radio.md2025-09-30T00:00:00Z2025-09-30T00:00:00Zhttps://radio.someodd.zip/gopher://gopher.someodd.zip:70/0/someodd/services/xmpp.mdxmpp.md2025-09-30T00:00:00Z2025-09-30T00:00:00Z# someodd's XMPP servergopher://gopher.someodd.zip:70/1/someodd/presentations_interviews/brcon_2025Presenting smallnet documentary at brcon20252025-08-05T00:00:00Z2025-08-05T00:00:00ZPresenting the smallnet documentary at brcon2025, a Bitreich confer...Presenting the smallnet documentary at brcon2025, a Bitreich conference. Situates the author as a Bitreich member working to preserve and extend the Gopher Protocol.gopher://gopher.someodd.zip:70/0/someodd/best-of-smallnet-april-2025.txtBest of Smallnet Zine #0: April 20252025-04-09T00:00:00Z2025-04-09T00:00:00ZThe 0th edition of Smallnet Zine (April 2025), rounding up the stat... HTML energy is all around us and in this very website.
>
> Building websites has become complex,
> but the energy of HTML persists.
>
> What makes HTML special is its simplicity.
>
> HTML isn’t a vast language, yet you can do a lot with it.
>
> Anyone who wants to publish on the web can write HTML.
>
> This accessibility and ease of use is where its energy resides.
>
> Who’s writing HTML today?
### frstcomputer.com
1Bespoke computer store in gopherspace / frstcomputer.com 70
A boutique computer with a boutique shopping experience via Gopher!
### 250kb.club
h250kb.club https://250kb.club/
My friend showed me this. Web pages that are under 250KB in size.
> The 250KB Club is a collection of web pages that share certain values, especially a focus on performance, efficiency, accessibility and sustainability.
### Melon Land, Melon King
This guy is a indieweb artistic genius.
hMelonLand forums URL:https://forum.melonland.net
This forum looks **amazing**. It's centered around indieweb type things. I talked to him about this in an interview and he said he found some really old software and themes.
hmelonking website URL:https://melonking.net
Amazing website, very artistic indieweb experience like none other.
## Some articles I've written on self-hosting
Get started self-hosting! Running your own server is fun!
0Music server with MPD /phlog/music-server-mpd.gopher.txt
0Counter-Strike 1.6 Server in Linux /phlog/linux-counter-strike-16-server.gopher.txt
0XMPP audio/video call support /phlog/xmpp-server-video-audio-calls.gopher.txt
0Host your own XMPP server /phlog/xmpp-server.gopher.txt
0Host your own IRC server /phlog/irc-server.gopher.txt
0Make your own VPN /phlog/wireguard-simple.gopher.txt
]]>gopher://gopher.someodd.zip:70/0/someodd/life/my-favorite-parts-of-the-bible.txtMy favorite parts of the bible: the two most important commandments2025-04-04T00:00:00Z2025-04-04T00:00:00ZPersonal reflection on the two commandments the author views as the...gopher://gopher.someodd.zip:70/1/someodd/services/announcements/announcing-counter-strike-16-weekly-eventCounter-Strike 1.6 Server + Weekly Event2025-04-01T00:00:00Z2025-04-01T00:00:00ZAnnounces 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.gopher://gopher.someodd.zip:70/0/someodd/i-am-now-a-bitreich-member.txtI'm now a member of Bitreich!2025-03-28T00:00:00Z2025-03-28T00:00:00ZPersonal announcement that the author has officially joined Bitreic... We form a movement to improve our daily software life. Software has to
> not misbehave, it has to follow our rules, it has to be reusable, it has
> to be easily maintainable, it has to provide its recompilable source and
> it has to be easily understandable.
0Bitreich Manifesto gopher://bitreich.org:70/0/documents/bitreich-manifesto.md
h20h, the main person behind Bitreich, is a member of suckless.org URL:https://suckless.org/people/20h/
I had been helping out tangentially by working on my Whisper Radio project, because they also had their own radio service.
I also have been working on uncovering history regarding the Gopher Protocol and working on a lot of Gopher software.
1You can see my previous Halloween post about Bitreich /phlog/bitreich-haunted-hosts.gopher.txt
0Official Bitreich announcement: /usr/20h/phlog/2025-03-27T18-29-56-532851.md bitreich.org 70
> # 2025-03-27 18:29:56.532851 UTC (+0000)
>
> Welcome someodd as new Bitreich member!
>
> The council has decided to make someodd a new member of Bitreich. He has
> contributed to Bitreich by being a burning fighter for gopher and
> simplicity. He works on radio, gopher software and did ground breaking
> research into gopher history. There is much to come for the whole of the
> community.
>
> Welcome!
>
>
> Sincerely yours,
>
> 20h
> Chief Community Manager (CCM)
They gave me an SSH account which has some very interesting/fun services. For example, they have their own gopher service:
1My Bitreich gopherhole /usr/someodd bitreich.org 70
I'm very honored and happy to be an official member. I really admire the community vibes and their work.
]]>gopher://gopher.someodd.zip:70/0/someodd/my-first-submission-hackage.txtBecoming a Hackage uploader2025-03-28T00:00:00Z2025-03-28T00:00:00ZThe author's path to becoming a Hackage uploader, starting from the... 1. Hackage is intended to be a permanent record. Therefore uploads
cannot be changed or removed.
> 2. Only upload things that work, are useful to other people, and that
you intend to maintain.
> 3. Use `cabal gen-bounds` to put PVP-compliant version bounds (lower
> AND upper) on ALL your unique dependencies so your package will still
> be buildable years down the road. One important thing to note is that
> you only need to include version bounds once. For example, if you
> depend on the same package in your library and your test suite, you
> only need to put the version bounds for that dependency in one place.
> This keeps the dependency bounds information DRY.
> 4. Package candidates CAN be changed, so use them to test things out
> and get everything right before you publish permanently to the main
> index.
You should check that your source bundle builds, including the Haddock documentation if it's a library.
Here's my candidate, for now, which may be a dead link: https://hackage.haskell.org/package/Venusia-0.1.0.0/candidate
Be careful, Hackage, at least when defining a dependency, is case-sensitive! This really threw me off! I feel like this is actually really bad and has potential to be exploited if, say someone uploads a package of the same name, just lowercase, if it's capitalized, or something like that. Hopefully they prevent that somehow.
I couldn't figure out how to install a candidate dependency using Stack, so in the project I wanted to use Venusia as a depnency in I just used:
```
extra-deps:
- git: https://github.com/someodd/venusia.git
commit: ffae72d03d3b24e7507354071490f539868c6821
```
Oh also i think i may have had to create a `src/` for my project? Maybe that was just a warning.
## Haskell's versioning: PVP
Package Versioning Policy and have version bounds on all dependencies indicating which versions they are known to build with. See: [Package versioning and curation](https://hackage.haskell.org/upload#versioning_and_curation) and [Haskell PVP Specification](https://pvp.haskell.org/). Something that really helped me was in the Haskell PVP FAQ ["How does the PVP relate to SemVer"](https://pvp.haskell.org/faq/#semver)?
I took the time to understand the Haskell PVP Spec and the section on "package
versioning and curation." I think I understand, mostly, now, that the spec is
about not breaking other people's code, but also describing how much it might
break code (almost like an estimate of how long it'd take to adapt new code) as
well as signaling if there were non-api-breaking features/changes, for the most
part. So in that sense for A.B.C, 'a' seems to be like "super major" like "the
API]]>gopher://gopher.someodd.zip:70/0/someodd/life/applying-avantos-ai.txtApplying to Avantos AI (job)2025-03-24T00:00:00Z2025-03-24T00:00:00ZWalkthrough of applying to Avantos AI via a cryptic challenge-based... You'll need to make sure the user agent isn't something too bot-seeming or WAF will block you. (Sorry we're a startup no time to fix.) This user agent works: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
So here I ran the command in verbose mode:
```
➜ post-apply curl -v -X POST https://apply-to-avantos.dev-sandbox.workload.avantos-ai.net/ \
-H "Content-Type: application/json" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:117.0) Gecko/20100101 Firefox/117.0" \
-d '{"email": "my email"}'
Note: Unnecessary use of -X or --request, POST is already inferred.
* Host apply-to-avantos.dev-sandbox.workload.avantos-ai.net:443 was resolved.
* IPv6: (none)
* IPv4: 18.190.42.252, 3.22.13.83, 18.117.63.32
* Trying 18.190.42.252:443...
* GnuTLS ciphers: NORMAL:-ARCFOUR-128:-CTYPE-ALL:+CTYPE-X509:-VERS-SSL3.0
* ALPN: curl offers h2,http/1.1
* found 152 certificates in /etc/ssl/certs/ca-certificates.crt
* found 456 certificates in /etc/ssl/certs
* SSL connection using TLS1.3 / ECDHE_RSA_AES_128_GCM_SHA256
* server certificate verification OK
* server certificate status verification SKIPPED
* common name: apply-to-avantos.dev-sandbox.workload.avantos-ai.net (matched)
* server certificate expiration date OK
* server certificate activation date OK
* certificate public key: RSA
* certificate version: #3
* subject: CN=apply-to-avantos.dev-sandbox.workload.avantos-ai.net
* start date: Mon, 03 Mar 2025 00:00:00 GMT
* expire date: Wed, 01 Apr 2026 23:59:59 GMT
* issuer: C=US,O=Amazon,CN=Amazon RSA 2048 M02
* ALPN: server accepted h2
* Connected to apply-to-avantos.dev-sandbox.workload.avantos-ai.net (18.190.42.252) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://apply-to-avantos.dev-sandbox.workload.avantos-ai.net/
* [HTTP/2] [1] [:method: POST]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: apply-to-avantos.dev-sandbox.workload.avantos-ai.net]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [accept: */*]
* [HTTP/2] [1] [content-type: application/json]
* [HTTP/2] [1] [user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:117.0) Gecko/20100101 Firefox/117.0]
* [HTTP/2] [1] [content-length: 28]
> POST / HTTP/2
> Host: apply-to-avantos.dev-sandbox.workload.avantos-ai.net
> Accept: */*
> Content-Type: application/json
> User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:117.0) Gecko/20100101 Firefox/117.0
> Content-Length: 28
>
* upload completely sent off: 28 bytes
< HTTP/2 200
< date: Tue, 25 Mar 2025 00:33:13 GMT
< content-type: application/json
< content-length: 404
<
* Connection #0 to host apply-to-avantos.dev-sandbox.workload.avantos-ai.net left intact
{"challenge_link":"https://fluttering-atmosphere-1b5.notion.site/Journey-Builder-React-Coding-Challenge-190d5fe264fa80cba39ec21afc6d42ec","instructions":"Submit your solutions as a link to a github repo named `045eb7` to the following email address: challenge-request-sub-aaaapriy22ktilybsd6gv7beiq@avantos.slack.com. Questions can be sent to challenge-help-aaaaprjeraoxiaa2wlnlda7vsi@avantos.slack.com"}%
```
I opened up [the challenge link](https://fluttering-atmosphere-1b5.notion.site/Journey-Builder-React-Coding-Challenge-190d5fe264fa80cba39ec21afc6d42ec). It kind of seemed like they didn't want me just copying-and-pasting the challenge into Claude or ChatGPT or something because they disabled ctrl+a (maybe not intentional), so I also assumed there was more logging than that going on. So I]]>gopher://gopher.someodd.zip:70/1/someodd/presentations_interviews/interview-screwtape-march-2025My radio interview (Lispy Gopher Climate/screwtape)2025-03-20T00:00:00Z2025-03-20T00:00:00ZThe author's radio interview on screwtape's Lispy Gopher Climate sh...The author's radio interview on screwtape's Lispy Gopher Climate show. Archives the conversation and the accompanying flyer.gopher://gopher.someodd.zip:70/0/someodd/what-i-learned-years-gopher.txtLessons writing Haskell code for a 33 year old pre-web Internet protocol (Gopher)2025-03-16T00:00:00Z2025-03-16T00:00:00ZLessons from writing Haskell for the Gopher Protocol — a 33-year-ol...
## notes
careful quickcheck isn't inductive proof
not only that but it taught me to run servers better and make things more reliable. more reliable daemons, systemd, to whisper radio, dogfooding to the max libraries etc, to even server announcemen
## Let's dive in
If you take a look at [my GitHub](https://github.com/someodd/) you'll notice two things:
1. It's pretty much all Haskell
2. Wow, there's a lot of stuff written for "the Gopher Protocol," what even is that?
I had encountered The Gopher Protocol as a child, but never really got to know it until the last few years. I had heard about it from a friend who was describing a *debloated* and organized net. I'd come to learn that's fairly accurate, especially considering both how Gopher is mostly simple text and how it was even involved in some librarian conferences.
A programmer I looked up to championed Haskell. In fact, lots of programmers I thought were cool were using Haskell. It tickled my fancy when it came to craft and the esoteric. I think really what started my journey was finally being fed up with Objected-Oriented Programming and (inconsistent) mutability. I also didn't like a lot of the conventions that were going on in that sphere, I often felt like people were twisting their code to be more sophisticated than just accepting the brutalist aesthetic of the fact that they were dealing with structured data and ways of mutating that data, which I would come to learn Haskell really drove home.
**work on this**
I started dabbling with the Gopher Protocol to learn Haskell. I'm a bit of a techno-romanticist. I like to host my own services on my server. Even old stuff. In fact, I think there's a lot of wisdom in the old stuff. Of those unix legends. Those old programmers I looked up for so long. I remember for a long time in programming, before AI kicked off, it really did feel like everything was just reinventing the wheel and you really could just use a tool made or started 30+ years ago to do "the latest thing." I really enjoyed the idea of such stable and historical software that was so practical. I really loved running my own software, writing my own code, fusing craft and art with it all (even with the concept of server-as-an-art-installation). It also was a gateway to interesting friendships. In many ways I still feel this holds true. I like the BSDs, I like Debian, I like the idea of code as a craft, or even code and serveradmin as an art, for example:
* netring
* I even like running Window Maker sometimes, swith all kinds of arts dockapps (link here, i should really update that shit with pictures too)
* whisper-radio: an internet radio station (icecast) which reads the latest news in gopherspace, mastodon, responds to users, plays music, reads text
However, I think over the years, for one reason or another, my enthusiasm waned, my ability to hold such a romantic view, have such a romantic relationship with tech waned. IT all just became a tool, a utility, plain and simple.
My last attempt at rekindling this started with when I found Haskell and the Gopher Protocol.
I found Haskell wasn't just one of these things I could quickly learn by doing--I actually felt the need to do a little bit of book learning.
I decided to really start understanding Haskell, after reading the obligatory [Learn You a Haskell for Great Good!](https://learnyouahaskell.com/), by finally getting around to starting a project. I decided to make a text UI client for the Gopher Protocol, which would speedrun me understanding both, also incurring heavy tech debt and mistakes along the way, but that's what learning projects are for]]>gopher://gopher.someodd.zip:70/0/someodd/announcing-netring-cafe.txtAnnouncing netring.cafe: indieweb and smallnet zine2025-03-08T00:00:00Z2025-03-08T00:00:00ZAnnounces netring.cafe, a zine-style webring for home-hosted smalln...