Hacker News new | past | comments | ask | show | jobs | submit login
MIME, RSS, and Existential Torment (xeiaso.net)
90 points by xena 6 months ago | hide | past | favorite | 28 comments



> One of the weirdest things my website does is that it serves everything from a .zip file

whyyyyyyy

why would you do this to yourself

It looks like you're still pushing a bunch of stuff over with git so it's not like you're making it easier to just ftp over one file or something, whyyyyyyy


> why would you do this to yourself

Why not? It's not that bad of an idea. I mean, of course they should've used SQLite instead of ZIP as the container, but... ;).

There's a turn-key solution for this too: https://redbean.dev/. See also, https://justine.lol/redbean2/.


My website binary builds the static site on every commit to the repo. This putting things in a zipfile strategy is probably a bad idea, but it makes it easy for the preview site to handle: https://xeiaso.net/blog/2024/overengineering-preview-site/


boggles

From the perspective of someone whose site is a 12-year-old Wordpress installation on cheap hosting that she only does anything technical to when it's time to make a custom template for a new multi-year comics project, your website is a shimmering fractal of terrible ideas. Assembling a list of posts can be done with so much less work than this hyper-complicated machine you've made.

But then again a glance at your resume suggests you're probably making at least two orders of magnitude more money off of fooling around with tools for making enormously complicated websites than my broke ass is making off of drawing comics and furry porn, so what do I know? You've probably solved some big problems at work super fast because of dealing with the toy problems you've created for yourself with this Rube Goldberg machine of a website.


Xe's site feels more like a kinetic playground, constantly adding wild new inventions, than a shimmering fractal of bad ideas to me.

This is where the niche excellence is first built which later, almost by accident, drives enormous amounts of business value when put into the right place. I totally get it. There is machine empathy you simply cannot build any other way.


You hit the nail on the head. This is exactly why I do these things, but the only difficult part is figuring out where to apply this experience and how to phrase things without sounding like a crazy person in the process. "Yeah I got bit by this when I was intentionally throwing my body out into the snakes for fun", doesn't really make quite as much of the right impact as I hope.

Ironically, I'm quite bad at product development, and where I really succeed is when I'm mentoring people and helping enable them to succeed. I'm glue professionally, which means that my individual contributions are terrible but in aggregate I help others succeed so much more that it adds up. I always look terrible at review time though, I end up having to bring a brag document and look kinda like a jackass.


Just say you're autistic.


> There is machine empathy you simply cannot build any other way.

nice term, though imho 'experience' is more apt.


Maybe I missed it, but why are you embedding a zipfile of gzip streams rather than just embedding the static site's files with an `embed.FS` and serving from that?


That way I don't have to rebuild the binary to update the website. This makes posting new articles take tens of seconds at most.


I wonder what compression gains, are you serving the gziped version directly based on Accept-Encoding headers to avoid a decompression and compression? If not it would be possible to just use Store[1] to use the zip as a container format but not a compression format.

[1]: https://pkg.go.dev/archive/zip#Store


Makes sense, thanks for answering.

Aside — the architecture diagrams on https://xeiaso.net/blog/xesite-v4/ are not displaying in-browser for me, but do transfer correctly and are viewable on my computer. Maybe another mime issue, as the network inspector shows them being transferred with type "octet-stream"?

Repro by visiting the URL in latest Firefox, Safari, or Chrome.


This is something I'm aware of and need to fix when I have the time. Just need to figure out how to best write this migration. I know exactly what I need to do, just gotta write code to do it.


why port doom on a dishwasher?

why create brainfuck?

why encode the matrix movie into an ascii stream?


> serves everything from a .gzip file

Could this make you feel better?


This is fixable with a small patch, which implements enough seek to work with http.

    func (r *checksumReader) Seek(offset int64, whence int) (int64, error) {
        if whence == io.SeekEnd {
                return int64(r.f.FileHeader.UncompressedSize), nil
        }
        r2, _ := r.f.Open()
        rr := r2.(*checksumReader)
        *r = *rr
        return 0, nil
    }


Another issue is that without seek support, the HTTP server can't implement range requests.

Interesting comment by Russ Cox about this: https://github.com/golang/go/issues/61791#issuecomment-16719...


Reminds me a little of a stored XSS I read about last year.

https://tttang-com.translate.goog/archive/1880/?_x_tr_sl=aut...

Had that same root of not having the mime.types in the container, leading to server-side sniffing of the mime type for the Content-Type header.

It's just a bit interesting the impact such a file can have


Languages do such a bad job at modeling the IO hierarchy ...

One minor point that should be relevant here: there are files that support `rewind` (`seek` at offset `0`) but no other seeking.


This is ironic, as I'm not even sure the authors RSS is setup correctly. My Miniflux instance now has multiple entries for this exact post and in fact the ONLY time I see duplicate posts in there is from the authors site.


I've never heard of this issue happening. Can you send me an email with more details?



Oh, that's a satirical series referencing a famous onion article series: https://en.m.wikipedia.org/w/index.php?title=%27No_Way_to_Pr...

I really do need to write that nuance post about why I think we should consider it professional malpractice to develop new projects in C and should make it politically difficult to get them accepted into distro repositories.


abstractions that usually magically work but sometimes don't are the best abstractions (if you're paid by the hour to fix them).


Things that happen when xe stopped to use NixOS


Haven't read xe article for a while. Why does xe move away from NixOS? I'm pretty sure I read blog about nix being best container builder a while ago.



[flagged]


Those aren't children's cartoons. I mean, maybe they are, but think more Zootopia squished into weird Dilbert.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: