++++++++++++++++++++++++++++++++++++++++++++++++++ + The Urbe Project: back to C ++++++++++++++++++++++++++++++++++++++++++++++++++ | Although I criticize the Web a lot, I must confess we aren't going to get rid | of it in the near future. And, it's important to say, THERE ARE a lot of things | there that actually are kind of cool... | | | Now, I started a Youtube channel some days ago. It's named "til cleber", that, | in Portuguese, means "tilde cleber": a reference to "~cleber". (It also contains | a pun, because the name sounds just like "uncle cleber", too). And I'm talking, | guess what?, about how the Web missed the target about The Unix Philosophy and | some ways we could have done better. | | | https://www.youtube.com/channel/UCTVu-cjuBp1cbAMvMd5UuVw | (I speak in Portuguese in the videos and there are no English subtitles...) | | | In the next video I'm going to introduce my ideas about an alternative protocol | I'm working, named "Urbe". That's Latin for "city" or "town" (and the root for | the word "urban", for instance). Its components obey the following scheme I'm | going to draw while my dog sleeps under my desk with its head laying over my | right foot... URBE: +-------------+ | Vila | | | | [Locus]-~~~~~~~~~- Via -~~~~~~~-[Hospes] | [Locus] | | [Locus] | | | +-------------+ | I purposedly avoided common nomenclature, because I want people implementing it | to dissociate this scheme from the Web. But, if don't know any Latin, here | comes some legends relating both protocols/environments/technologies: Urbe -- Web Vila -- Server Locus -- Site Via -- HTTP Hospes -- Client/Browser | That is enough details for now. The thing is: it must follow the Unix | Philosophy, so we're not going to have A Big Server Implementation | communicating with A Big Browser Implementation. It MUST be composed of small | applications, preferably pre-existing ones. | | | So, starting with the Vila (the "Server"), the first thing to implement is a | connection handler. It must `accept` a lot of simultaneous connections and call | proper programs to handle each one. I even thought about using `netcat` (`nc`), | but it is not built as a multi-connection manager. | In the end, having not found a nice alternative, I'm writing my own connection | handler from scratch. In C. | | | Fact is, I know C. I knew it very well less than 10 year ago, but I'm using | basically only higher level languages, like Python and shell scripts, for such | a long time, that I kind of lost the hand in writing C programs, even a simple | one like that. | | | Interestingly, I'm trying to grasp this skill back NOT USING THE WEB. So I'm | guiding myself, when possible, only with man pages (mostly level 2). I'm still | stuck on Linux (I confess I'm not smart enough to learn too much new stuff at | the same time, so I'm delaying my plans of learning OpenBSD and Jehanne OS for | my own mental sanity sake), and now I can see some man pages are kind of very | wanting. | | | I tried to implement the triple `socket`, `bind`, `accept` only reading man | pages, but the trick about opening an AF_INET stream socket (the very common | TCP/IP connection) was impossible to get from them. I had to appeal to the Web | to discover `accept` had two NULL arguments... | | | I believe C is one of the languages that separate The True Programmer from the | most common "programming language user". Hell, C is THE language The True | Programmer must master at all. BUT, i must confess: it's not a "sane" option | for most of the needs people have nowadays. I'm happy to see a lot of progress | on Rust (that I believe is becoming the natural C successor for "system | programming") and Go (that I believe is becoming the natural C successor for | "apps programming"). I'm very, very interested in implementing something using | both of them. | | | I'm kind of planning on trying Nim, too, although I have some bad feelings | about it after reading the "usage" documentation on the language website: it | feels very, how could I say? "Windows-ish" or something like that. And the | compile-to-Javascript thing doesn't help that much, either...