HN user

gonzus

421 karma

gonzus.at.hn

Living near Amsterdam. Husband, father, software engineer.

* LinkedIn: [@gonzalodiethelm](https://www.linkedin.com/in/gonzalodiethelm/) * Twitter: [@gonzus11](https://x.com/gonzus11)

Posts0
Comments144
View on HN
No posts found.

One of the advantages of doing this seemingly weird projection is that you can treat "local" maps (for some definition of local) as flat rectangular grids without introducing a lot of errors: drawing straight lines between two points, measuring the distance / angle between them, etc., just by dealing with a flat piece of paper. VERY convenient, but the farther you are from the center of the projection, the higher the errors that are introduced.

Nice work. Some questions / observations:

Can you add methods to any type? There is an example of adding a method to a builtin type (string) -- can you add also add a method to a union type?

Any plans to add some sort of enum type? If yes, will it be possible to add methods to enums?

How do you support (or intend to support) Unicode? It says "Strings use ASCII encoding" -- why not UTF8?

The example with a timeout channel does not show how / when the timeout will be triggered. Is this a special kind of channel?

It says "Packages will be synchronized to the $HOME/.nature/package directory" -- will this respect the XDG standard directory structure, which defaults to $HOME/{.cache,.local,.config}?

I can confirm this: I downloaded the old version of the app (on a Windows laptop), isolated it so that it would not auto-update, and then used it to download all my books (after the deadline had passed) and convert them with Calibre, which got rid of the DRM crap. You have to do both the downloading and the conversion on the same computer -- other than that, it worked perfectly for my more than 100 books.

Probably by Fred Brooks, as summarized by Guy L. Steele Jr in https://dreamsongs.com/ObjectsHaveNotFailedNarr.html:

Fred Brooks, in Chapter 9 of The Mythical Man-Month, said this: Show me your flowchart and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowchart; it'll be obvious. That was in 1975. Eric Raymond, in The Cathedral and the Bazaar, paraphrased Brooks' remark into more modern language: Show me your code and conceal your data structures, and I shall continue to be mystified. Show me your data structures, and I won't usually need your code; it'll be obvious.

Long live Clipper -- one of my first paid gigs. Amazing platform to write (compiled!) console-based applications with a DB living locally or on a networked drive. Something which does not exist anymore as a market.

Sorry for answering myself. I paid more attention now, and it seems this is disabling chunked transfer encoding from the client to the server, which makes sense from a security / reliability PoV. Disabling it from server to client does not (IMHO).

Kudos for your project -- it is great fun and a learning experience to implement your own HTTP server in a low(er)-level language.

One question: you say that "Transfer-Encoding: Chunked responds with 411 Length Required, prompting the client to resend with Content-Length". Is there a reason for doing this (security perhaps), or is it just a choice?

I associate this with what we used to call "one-liner programming": I would write a single line of Perl code (in bash, prefixed with `perl -Mwarnings -MDebug -E'<code here>'`, convince myself the code did what we needed, and then share it around as a paste in irc / chat / whatever. It was amazing what you could achieve with the right modules, and Perl's flexibility allowed your mind to roam freely.

Incidentally, the fact that you cannot write this type of one-liner in any meaningful way with Python is one reason I do dislike that language.

How do you release all the resources created? I could not find any instances of `free()` in the code (and there are two calls to `malloc()`). Are you supposed to call `free()` yourself directly on the executor / task pointers? If so, I would suggest exposing a documented API to dispose of resources.

Floats Are Weird 2 years ago

I decided years ago that the next time I hear someone suggesting we use floats / doubles to represent money amounts, I am going to punch them in the face.

Switzerland has the similar Luxemburgerli, which my Swiss friends who reside there (as opposed to me, a Swiss person who lives somewhere else) swear is NOT the same as a macaron... I have never understood the purported differences.

I agree 100% with using processes as the natural unit of isolation.

I also believe we could solve many of the integration issues between multiple tools, by having them all optionally spit out a universal, easy / easier to parse format -- even JSON would be good here. So you could do

  ls --foo --bar --json | jq ...
and be able to process the output to your heart's content, without having to do any kind of white space parsing; as a free bonus, you get automatic support for file names with embedded white space...

The best we have for now is jc (https://kellyjonbrazil.github.io/jc/), which knows how to do this for a closed (but growing?) set of commands:

  ls -l *.db | jc --ls | jq .

I feel that git is the DVD of source control systems: sccs / rcs / cvs are the equivalent of tapes, clearly inferior and crappy. Other, more modern systems, are like BlueRay: technically superior, but not by a margin wide enough to make me want to change.

This seems like a rite of passage... I did the same thing with the VAX at my school, but decided to come clean and gave the sysadmin all the passwords I gathered after one day (including several with SYSTEM privileges). They gave me my first job :-). I also made sure to grant the necessary permissions to one or two obscure accounts, so that I could regain SYSTEM when it was revoked on my "official" accounts. Fun times, and innocent too -- I never used the privileges to cause havoc.

I implemented once the MySQL network protocol (in TypeScript) to talk to a local SQLite DB. We used that for our CI environment, since our apps only did very vanilla SQL operations. It worked like a charm. So I can totally see some uses for such a beast -- but probably all of them are pre-production.