My Work

Freedom! (an h2)

I generally have an irresistible attraction to free software. Unix, GNU, KDE… just to name a few.

An example of just that (this is an h3)

I’ve written a very long guide for CS students on how to send and receive emails at the Wiscmail address (@wisc.edu), which (at least for as long as I’ve been enrolled) has been living on a Microsoft Outlook server.

It was in fact more specifically dedicated to someone whom I’d met at CS252, who told me he’d be interested in learning how I sent emails in the terminal. I told him that Outlook the client is different from Outlook the server. Apparently, not many people knew that!

Screenshot of my web page explaining how to use XOAUTH2 with Wiscmail. Wrote it for a classmate at CS252 and CS354. Contains text: What is XOAUTH2?

Here is a very personal take that um... you should just take with a grain of salt alright. I have no idea what this thing is either, or what it is doing that Access Tokens don't already. Previously I mentioned this excerpt from Wikipedia which is an interesting take since it actually links to our uni's page (square brackets are my addition):

Microsoft has announced that they would end support for the less secure basic authentication[...] which disables most use of IMAP or POP3 [that includes SMTP.] and requires significant upgrades to support the more secure OAuth2 based authentication in applications in order to continue to use those protocols;[23] some customers have responded by simply shutting off older protocols[24]. 

Either way...

Said excerpt is from the Wikipedia article titled Embrace, Extend, and Extinguish (section “Email protocols”). To call Microsoft’s move to deprecate SASL PLAIN is a bit of a far fetch, in my opinion, since it is an authentication mechanism that, technically, still runs on the same protocol (SMTP); and OAuth 2.0 is an open standard published to RFC (though, in concession, the SASL mechanism utilitizing OAuth 2.0 — XOAUTH2 — is popularized by mainstream mail providers such as Google and Microsoft.)

The point nonetheless stands that Microsoft has been observed taking steps to restrict our ability to interoperate with their services in a more or less independent way, and I think knowledge of open network protocols, open information formats, can help fight back their ability to trap users in their proprietary ecosystem — at least.

Oh and, I personally find the Outlook HTML repulsive: paragraphs consisting of <div>‘s, riddled with unceasing inline-CSS style — I’d have to skip 100-or-so characters to even begin to read the first word! They also top post but that’s the lesser part of my concern now. I just wish that at the very least CS students wrote emails in plain text — and for those that do (or probably don’t yet but will soon found that they love plain text more than they knew), I wanted to provide an easy guide to do just that. :^)

The guide is at /memo/mail/ on my website. (Trailing slash is important because I am picky with routing :P)

Drawing? (another h2)

Oh yeah, I did mention that…

You can download the GIF here? (Or just, y’know, right-click on the image, then click on something like “Open Image in New Tab”.)

I had to do weird things to add the black background of the raw PNG frames with IMv7, don’t pay too much attention to it…

magick \
	-delay 100 -size 180x240 +antialias \
	\( xc:#000 dinkyethan-1.png -composite \) \
	\( xc:#000 dinkyethan-2.png -composite \) \
	-loop 0 -scale 400% dinkyethan.gif

Also I can’t get my browser (Firefox) to not antialias it so I scaled it up three fourfold (180×240 → 720×960), ouch…

I ripped it off of DeadlyComics and Jaquin. Every day I dream of making my website half as cool as theirs.

Columns

I don’t really know where this would fit since I usually don’t write in columns. Sorry about that, but here is a contrived example anyways. (Pretend this is HTTP 101!)

CLIENT (request)
> GET / HTTP/1.1
> Host: www.endfindme.com
> User-Agent: curl/8.18.0
> Accept: */*
> Connection: close
>

At this point, the MIME headers are terminated by a double <CR><LF> sequence, and the request body begins.

Typically, a HEAD/GET/DELETE request does not have a body, while a POST/PUT/PATCH request does. Because this is a GET request, the request terminates here. (The server will often assume you’re done from here, anyways.)

SERVER (response)
< HTTP/1.1 200 OK
< Server: nginx/1.24.0 (Ubuntu)
< Date: Wed, 04 Feb 2026 06:50:43 GMT
< Content-Type: text/html; charset="utf-8"
< Transfer-Encoding: chunked
< Connection: close
< Content-Security-Policy: default-src 'self'
< Etag: W/"693b3ef5-c3e"
< Last-Modified: Thu, 11 Dec 2025 22:00:21 GMT
< Referrer-Policy: origin
< Strict-Transport-Security: max-age=15552000
<
< <!DOCTYPE html>
< [...]

I remember throwing in the Referrer-Policy because I don’t want people clicking on links reveal what path they were on… (and I got tired of writing rel="noreferrer” after a while, so :]).

(wait “columns” are just flexboxes? why’d no one tell me that? I would have said something different…. >:c)