add post
Some checks failed
Build Saki and Deploy to Github Pages / build (push) Has been cancelled
Build Saki and Deploy to Github Pages / deploy (push) Has been cancelled

This commit is contained in:
stjet
2026-04-12 06:39:45 +00:00
parent 8f7ce282f4
commit c262c40aa5
5 changed files with 60 additions and 10 deletions

View File

@@ -8,11 +8,20 @@
"tags": ["meta", "code", "project", "web", "markdown", "typescript_javascript", "css"],
"archived": false
},
"Koxinga Browser v1.0.0": {
"telo-sewi": {
"title": "telo sewi li telo sewi",
"slug": "telo-sewi",
"filename": "telo_sewi",
"date": "05/04/2026",
"author": "jet/Prussia",
"tags": ["toki_pona", "religion"],
"archived": false
},
"koxinga-browser": {
"title": "Koxinga Browser v1.0.0",
"slug": "koxinga",
"filename": "koxinga",
"date": "05/03/2025",
"date": "05/03/2026",
"author": "jet/Prussia and prussianbluehedgehog",
"tags": ["project", "web"],
"archived": false

View File

@@ -4,11 +4,11 @@
Let's get a few definitions out of the way first.
DNS stands for the "Domain Name System". To simplify and omit, when you visit a website, DNS is how your computer knows what server to send requests to. After all, what does a domain name (say, prussiafan.club or www.example.com) mean to a computer? Nothing. Your computer doesn't know what to do with this. So, it asks a DNS server what IP address is behind the domain name. Now, an IP address (Internet Protocol address; four 8-bit numbers separated by dots eg 127.0.0.1) is something your computer *does* know how to deal with!
DNS stands for the "Domain Name System". To simplify and omit, when you visit a website, DNS is how your computer knows what server to send requests to. After all, what does a domain name (say, prussiafan.club or www.example.com) mean to a computer? Nothing. Your computer doesn't know what to do with this. So, it asks a DNS server what IP address is behind the domain name. Now, an IP (Internal Protocol) address (four 8-bit numbers separated by dots for IPv4, eg. 127.0.0.1) is something your computer *does* know how to deal with!
This is not the right place to get into the muck of how the internet works, but an IP address is just like a real address ("10 Downing Street"): there is a *lot* of infrastructure and code that makes it very easy for your computer to find where it is. In contrast, with a domain name, some extra effort needs to be spent: you can't send mail to "That place where that [adjective] Margaret Thatcher used to live", you'd have to figure out the address first.
So, a DNS servers is basically some computer out there that translate domain names into IP addresses.
So, a DNS server is basically some computer out there that translates domain names into IP addresses.
DoH stands for "DNS over HTTPS". Normally, DNS requests are sent unencrypted to the DNS server, and so is the response. So, any party in-between them could tamper or read the contents of the message, which would be very bad^tm^. The first concern, tampering, is less of a concern nowadays because HTTPS prevents it (since any tamperers will very probably not be able to get HTTPS certificates for the domain they are pretending to be). The second is very real, and can be used for censorship or sale of data to advertisers. Well, it does need to be noted that it is usually the DNS servers themselves doing the censorship and selling data. DNSSEC allows for signing records, which means any tampering (including by the DNS server itself!) is obvious, but doesn't prevent spying on the DNS messages. Also, it is not very commonly used. DoT (DNS over TLS) encrypts the messages between the client (your computer) and the DNS server, which prevents tampering and spying by anyone in-between. DoH is very similar to DoT, but instead of using the low level TLS protocol, DNS messages are sent using HTTPS to a domain which acts like a DNS server. The advantage is that DoH requests are very hard to censor as they look like any other HTTPS request, while DoT can easily be blocked because they look unique and go to a unique port.
@@ -22,7 +22,7 @@ The second is a DNS server for BNS (Banano Name System). BNS allows infinite, de
## Actually writing the thing
The first hurdle was, of course, to actually write the server - parse the DNS request and give a response. Luckily, this is all well documented in RFC 1035 (which covers the DNS message format) and RFC 8484 (which covers how DNS over HTTPS works). Alright, "well documented" is not entirely accurate, but it is documented *enough*. What was unclear or confusing clarified with the help of the TCP/IP guide, logging actual requests/responses, and in one case, a random blog post. In my case, I mainly wanted DoH to work for browsers, so there some parts of the protocol I could ignore. I'll somewhat briefly summarise the relevant parts of the format.
The first hurdle was, of course, to actually write the server - parse the DNS request and give a response. Luckily, this is all well documented in RFC 1035 (which covers the DNS message format) and RFC 8484 (which covers how DNS over HTTPS works). Alright, "well documented" is not entirely accurate, but it is documented *enough*. What was unclear or confusing was clarified with the help of the TCP/IP guide, logging actual requests/responses, and in one case, a random blog post. In my case, I mainly wanted DoH to work for browsers, so there were some parts of the protocol I could ignore. I'll briefly summarise the relevant parts of the format.
### Message format
@@ -85,7 +85,7 @@ RDATA is the actual data, and is variable length. Again, if the record we are re
So, wonderful. We parse the query message, see what domain it is requesting, if it is a intranet domain, we then copy the query message, change it a bit, and append our CNAME/A record answer.
But I probably want to visit normal websites too. This current setup isn't aware of say, wikipedia.org's existence, that's not an intranet domain! So, our poor server would have to query the root domain to find the DNS server for `.org`, then query that server for `wikipedia.org`'s nameservers, then query those namesevers for the actual record. Sounds like an awful lot of work.... which we can avoid entirely! We'll just route queries for non-intranet TLDs/domains to another DoH service, like NextDNS, Cloudflare, or Mullvad's. They'll handle everything, and we can just proxy whatever they return.
But I probably want to visit normal websites too. This current setup isn't aware of say, wikipedia.org's existence; that's not an intranet domain! So, our poor server would have to query the root domain to find the DNS server for `.org`, then query that server for `wikipedia.org`'s nameservers, then query those namesevers for the actual record. Sounds like an awful lot of work.... which we can avoid entirely! We'll just route queries for non-intranet TLDs/domains to another DoH service, like NextDNS, Cloudflare, or Mullvad's. They'll handle everything, and we can just proxy whatever they return.
Ok, now are we done?

View File

@@ -8,7 +8,7 @@ The interface and UX has been overhauled to be more similar to Malvim, the Vim-l
![en.wikipedia.org](/images/koxinga_wiki.png)
![news.ycombinator.com](/images/koxinga_hn.png)
I plan to mostly use it to browse Wikipedia and HN, so I'm not too worried about the browser becoming useless^[0]^. It's quite unfortunate that so many sites cannot be simply rendered, or even don't work without Javascript. I really miss the many sites that basically only used the `<p>` tag, and maybe some `<b>` and `<img>` if the economy was good.
I plan to mostly use it to browse Wikipedia and HN, so I'm not too worried about the browser becoming useless^\[0\]^. It's quite unfortunate that so many sites cannot be simply rendered, or even don't work without Javascript. I really miss the many sites that basically only used the `<p>` tag, and maybe some `<b>` and `<img>` if the economy was good.
You can still find a decent amount of these simpler sites, especially on university subdomains, where older professors (rightfully) simply don't see the point in going beyond basic readability, but there's obviously more of these sites going down every year than coming up. Though, things like neocities seem to be "cool" again, in certain circles. Most neocities sites wouldn't really be readable on Koxinga, but another recently popular site, bearblog.dev is perfectly usable with Koxinga.
@@ -20,4 +20,4 @@ So I don't think Koxinga is the ideal browser in an ideal world. I would have lo
===
[0]: It is a great POC app for ming-wm, anyhow. Plus, the development process for Koxinga led me to add several things to ming-wm itself that I realised were kinda important, like font data caching for faster text rendering.
\[0\]: It is a great POC app for ming-wm, anyhow. Plus, the development process for Koxinga led me to add several things to ming-wm itself that I realised were kinda important, like font data caching for faster text rendering.

41
posts/telo_sewi.md Normal file
View File

@@ -0,0 +1,41 @@
tenpo suno mute mute la mi tawa kepeken noka mi taso.
mi open tawa lon suno open. mi pini tawa lon pimeja open. noka mi li pilin ike. lawa mi li pilin lape.
mi lukin e nena wawa e kulupu kasi wawa e jan wawa e tomo wawa. mi pilin e ni: "pilin ike ali li lili tawa mi. ali li pona lukin a! noka li pilin ike la lawa mi li pilin lape la tawa mi li awen ken." tan ni la, mi awen tawa.
jan li pana e sona tawa mi: "tenpo poka kama la telo sewi li kama." mi wile ala e telo sewi. mi weka e toki ona tan lawa mi.
tenpo poka kama li kama. telo sewi li kama ala. mi toki insa e ni: "sewi o, pona tawa sina a!" mi awen tawa.
tenpo suno mute li pini. tenpo ni la, kon pimeja li lon sewi. mi lukin e ilo mi la, ilo mi li toki e ni: "telo sewi li kama." mi wile ala e telo sewi. mi weka e toki ona tan lawa mi.
tenpo ona la, toki ona li lon. telo mute li tawa anpa tan sewi. mi jo e len pi weka telo. mi pana e len ni lon sijelo mi. len ni li awen e sijelo sewi mi. len ni li awen ala e sijelo anpa mi. poki noka mi kin li ken weka e telo. poki noka mi li lon telo la insa pi poki noka li kama ala telo. ni li pona mute tawa mi. mi toki insa e ni: "telo sewi li pona ala. telo mute li lon nasin. tan ni la, nasin li kama ike. taso, mi jo e len pona e poki pona. sijelo mi li ken ala kama telo. ni li pona." mi awen tawa.
taso, mi kama sona e ni: len anpa mi li weka ala e telo a! sijelo anpa mi li kama telo. telo li tawa anpa tan sijelo anpa mi, li tawa insa pi poki noka mi. noka mi li kama telo mute. len noka mi li kama telo mute. mi tawa la len noka mi li kalama: "mu mu mu." noka mi li pilin telo li pilin nasa li pilin ike mute.
mi pini tawa lon tenpo lili lon tomo. mi weka e poki noka e len noka. len noka li lon luka mi. luka mi li weka e telo tan len noka. telo mute li weka. mi pana sin e len noka e poki noka tawa noka mi. len noka mi li awen pilin telo. mi awen tawa.
tenpo lili la, len noka li kama telo mute sin. mi tawa la, len noka li kalama: "mu mu mu." mi pini tawa sin. mi weka e poki noka e len noka. luka mi li weka e telo tan len. mi awen tawa.
mi tawa lili. mi kama telo. mi pini tawa. mi weka sin e len. mi weka sin e telo tan len.
pimeja li kama. mi tawa tomo lape. tenpo suno ni li ike mute tawa mi. mi pilin ike mute. mi pilin e ni: "ken la, mi wile ala tawa lon tenpo suno pi telo sewi. jan li wile tawa la tenpo pi telo sewi li tenpo ike. sewi o, sina o weka e telo sewi."
tenpo suno sin li open. mi open tawa. telo sewi li tawa anpa. len noka mi li kama telo. len noka li kalama: "mu mu mu." taso, mi pini ala tawa. mi pilin nasa. mi awen tawa.
mi tawa la, pilin telo li weka tan mi. mi lukin e ma e kasi e tomo e sewi. ali li sewi lukin. kute mute li lon. kon li pona. mi pilin e ni: "ni li ike ala a. telo sewi mute li lon. len mi li telo mute. taso, mi pilin ike ala."
nasin li awen ike tan telo sewi. tenpo la, mi toki insa e ni: "mi lukin pona ala li tawa pona ala la mi ken moli lon nasin ni." ni li tan telo sewi. taso, telo sewi li ike ala. telo sewi li telo sewi. telo sewi li pona e ijo mute li ike e ijo mute. ijo ali li sama ni. mi awen tawa.
toki wawa li kama lon lawa mi:
"mi wile ala pilin ike. telo sewi li lon la, ijo tu li ken:
nanpa wan la, telo mute li lon sijelo mi, mi pilin ike mute.
nanpa tu la, telo mute li lon sijelo mi, mi pilin pi ike ala.
mi tawa la mi pilin telo. ni li lon. taso, pilin mi li ken pona li ken ike. mi lawa e pilin mi."
tenpo suno tu la telo sewi li awen tawa anpa. tenpo suno tu li pini la, telo sewi li pini li kama ala.

View File

@@ -12,11 +12,11 @@ Back on topic, the author cited [brutalist-web.design](https://brutalist-web.des
- Decoration when needed and no unrelated content.
- Performance is a feature.
Well, that's weird. Most, with the exception of the 6th bullet point, seem mostly like what people would expect of a decent normal website, as opposed to anything specific to brutalist design.
Well, that's weird. Most, with the exception of the 6th bullet point, seem mostly like what people would expect of a decent normal website, as opposed to anything specific to brutalist design (Fellas, is it brutalist to have a usable website?).
Now let me read what the brutalist-web.design guy [has to say](https://brutalist-web.design/#decoration) about that very load-bearing 6th bullet:
> A website is neither an application nor a video game. It is for content, and so its design must serve that purpose. Being true to these materials need not imply a boring website or require that all sites look the same.
> A website is neither an application nor a video game. It is for content, and so its design must serve that purpose. Being true to these materials need not imply a boring website or require that all sites look the same.
Well, I suppose that seems reasonable, though I'm not sure if this is specific to brutalist design. I'm going to skip the next paragraph and go to the last two: