gopher://gopher.someodd.zip:70/1/catalog/someodd/ Regarding Someodd Someoddverse: my software, interviews, services. 2026-06-16T00:00:00Z gopher.someodd.zip gopher://gopher.someodd.zip:70/1/someodd/opensource/wmpixel wmpixel: a pixel-art animation studio in your Window Maker dock 2026-06-09T00:00:00Z 2026-06-16T00:00:00Z an 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_someodd 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/letters/2026/2026_05_27_last_letter_lumena Last Letter to St. Lumena 2026-06-03T00:00:00Z 2026-06-03T00:00:00Z A farewell. A farewell. gopher://gopher.someodd.zip:70/1/someodd/letters/2026/2026_06_new_rain New Rain 2026-06-03T00:00:00Z 2026-06-03T00:00:00Z First 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_switcher window_maker_rofi_window_switcher: a rofi switcher that shows minimized windows 2026-05-20T00:00:00Z 2026-05-20T00:00:00Z A 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-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/1/someodd/opensource/gophervr gophervr: walk around gopherspace in 3D, again 2026-05-13T00:00:00Z 2026-05-13T00:00:00Z Cameron 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_wmcube peepy_wmcube: peepy for your dockapp 2026-05-13T00:00:00Z 2026-05-13T00:00:00Z A 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.txt README.txt 2026-05-11T00:00:00Z 2026-05-11T00:00:00Z I like handwriting letters to others. gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_05_10_mothers_day_for_father.jpg 2026_05_10_mothers_day_for_father.jpg 2026-05-11T00:00:00Z 2026-05-11T00:00:00Z ]]> gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_05_andrew.jpg 2026_05_andrew.jpg 2026-05-11T00:00:00Z 2026-05-11T00:00:00Z ]]> gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_05_for_a_friend.jpg 2026_05_for_a_friend.jpg 2026-05-11T00:00:00Z 2026-05-11T00:00:00Z ]]> gopher://gopher.someodd.zip:70/1/someodd/letters/2026/2026_05_10_mothers_day_sisters Mother's Day 2026, for the Sisters 2026-05-10T00:00:00Z 2026-05-10T00:00:00Z Missionaries of Charity Devotionals Missionaries of Charity Devotionals gopher://gopher.someodd.zip:70/I/someodd/slice_of_life/2026_05_10_sister_lumena_flower_photo.jpg Sister Lumena's Rose Photo 2026-05-10T00:00:00Z 2026-05-10T00:00:00Z On Mother's Day, when working on a banner to celebrate perpetual vo... ]]> gopher://gopher.someodd.zip:70/1/someodd/opensource/gopher_applet_spec Literate Haskell with dependencies, speedily in gopherspace. 2026-05-07T00:00:00Z 2026-05-07T00:00:00Z gopher://gopher.someodd.zip:70/1/someodd/opensource/bartleby bartleby 2026-04-28T00:00:00Z 2026-04-27T00:00:00Z I would prefer not to use the web. I would prefer not to use the web. gopher://gopher.someodd.zip:70/1/someodd/presents_of_presence Presents of Presence 2026-04-24T00:00:00Z 2026-04-24T00:00:00Z Summary 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.jpg Per Sister Lumena's Request 2026-04-22T00:00:00Z 2026-04-22T00:00:00Z The 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.jpg Devotional on Presence 2026-03-06T00:00:00Z 2026-03-06T00:00:00Z Written for the sisters. ]]> gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_02_25_sagatagan_devotional.jpg Sagatagan Devotional 2026-02-25T00:00:00Z 2026-02-25T00:00:00Z Devotional letter about Lake Sagatagan's Stella Maris Chapel, given... ]]> gopher://gopher.someodd.zip:70/1/someodd/presentations_interviews/dialog-with-screwlisp DRAFT -- Room 1436: What Gopher Is (Philosophy)? 2026-02-25T00:00:00Z 2026-02-25T00:00:00Z Draft 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_lost Faithfully Lost 2026-02-20T00:00:00Z 2026-02-20T00:00:00Z A 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.jpg Lord, it is winter 2026-02-11T00:00:00Z 2026-02-11T00:00:00Z Devotional letter for the sisters. ]]> gopher://gopher.someodd.zip:70/I/someodd/letters/2026/2026_02_07_on_suffering_devotional.jpg On Suffering Devotional 2026-02-07T00:00:00Z 2026-02-07T00:00:00Z I 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.jpg Letter for a White Rose 2026-02-02T00:00:00Z 2026-02-02T00:00:00Z Letter for a sister of the Missionaries of Charity. ]]> gopher://gopher.someodd.zip:70/0/someodd/opensource/4_ch.md 4-ch over Gopher 2026-01-25T00:00:00Z 2026-01-25T00:00:00Z A tiny open-source viewer for 4-ch.net that runs over the Gopher Pr... 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/1/someodd/how_i_publish I Replaced My Web Stack With Gopher (1991) and Failed Less 2026-01-22T00:00:00Z 2026-01-22T00:00:00Z A 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.txt ChatGopherPT: talking to LLMs over Gopher 2026-01-20T00:00:00Z 2026-01-20T00:00:00Z ChatGopherPT: an LLM interface served over the Gopher Protocol, mak... gopher://gopher.someodd.zip:70/1/someodd/opensource/gasm-tiny-gopher-runs-on-trash gasm: 1.5 KB Gopher server that runs on 24 KB of RAM 2026-01-15T00:00:00Z 2026-01-15T00:00:00Z Announcing 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.md I Made a Multiplayer RPG Where You Explore Gopherspace With Others 2025-11-17T00:00:00Z 2025-11-17T00:00:00Z A multiplayer RPG where the game world is live gopherspace itself —... gopher://gopher.someodd.zip:70/1/someodd/presentations_interviews/screwtape_interview_2025-11-04 I was interviewed on screwtape 2025-11-04 about Gopher, Haskell, Category Theory 2025-11-17T00:00:00Z 2025-11-17T00:00:00Z A 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/README README 2025-09-30T00:00:00Z 2025-09-30T00:00:00Z gopher://gopher.someodd.zip:70/9/someodd/opensource/amor_theme_peepy/peepy-amor-theme.zip peepy-amor-theme.zip 2025-09-30T00:00:00Z 2025-09-30T00:00:00Z gopher://gopher.someodd.zip:70/I/someodd/photography/bird-on-cross-sky.jpg bird-on-cross-sky.jpg 2025-09-30T00:00:00Z 2025-09-30T00:00:00Z ]]> 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/presentations_interviews/brcon_2025 Presenting smallnet documentary at brcon2025 2025-08-05T00:00:00Z 2025-08-05T00:00:00Z Presenting 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.txt Best of Smallnet Zine #0: April 2025 2025-04-09T00:00:00Z 2025-04-09T00:00:00Z The 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.txt My favorite parts of the bible: the two most important commandments 2025-04-04T00:00:00Z 2025-04-04T00:00:00Z Personal reflection on the two commandments the author views as the... 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. gopher://gopher.someodd.zip:70/0/someodd/i-am-now-a-bitreich-member.txt I'm now a member of Bitreich! 2025-03-28T00:00:00Z 2025-03-28T00:00:00Z Personal 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.txt Becoming a Hackage uploader 2025-03-28T00:00:00Z 2025-03-28T00:00:00Z The 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.txt Applying to Avantos AI (job) 2025-03-24T00:00:00Z 2025-03-24T00:00:00Z Walkthrough 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-2025 My radio interview (Lispy Gopher Climate/screwtape) 2025-03-20T00:00:00Z 2025-03-20T00:00:00Z The 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.txt Lessons writing Haskell code for a 33 year old pre-web Internet protocol (Gopher) 2025-03-16T00:00:00Z 2025-03-16T00:00:00Z Lessons 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.txt Announcing netring.cafe: indieweb and smallnet zine 2025-03-08T00:00:00Z 2025-03-08T00:00:00Z Announces netring.cafe, a zine-style webring for home-hosted smalln...