[HN Gopher] The "Build Your Own Redis" Book Is Completed ___________________________________________________________________ The "Build Your Own Redis" Book Is Completed Author : bubblehack3r Score : 118 points Date : 2023-01-29 20:18 UTC (2 hours ago) (HTM) web link (build-your-own.org) (TXT) w3m dump (build-your-own.org) | Jolter wrote: | While I applaud the initiative and effort, I want to urge the | author to consult a good proofreader. I'm only in chapter 2 yet | I've already encountered enough friction in the form of poor | English to put me off. I think the substance looks great, so it's | a bit wasteful to not walk the last mile and make it genuinely | enjoyable to read by eliminating blatant errors like this one: | | "The Redis is an example of the server/client system." | m00dy wrote: | I would ask chatgpt to refactor his text rather than waiting | him to do so... I think poor english as an excuse will be a | thing of past. | aejnsn wrote: | I am absolutely with you. There's a certain large company I | work for who has public documentation full of stuff like this. | It makes me insane when I find it so glaring. There's an | internal program to proofread and review, but quantity is | incentivized, not quality. I've tried to shove that program in | a better direction to no avail. | suncherta wrote: | I am very happy to see more content like this (attempting to | teach how to create a real system) becoming available. Few month | ago there was a launch announcement of YC backed startup that | sell you walk-through labs guiding you to build Redis, Docker, | Git and others. (Can't find link to it now.) | | What is still missing, in my opinion, and is badly needed, is | content or even an idea on how to teach taking such projects from | toy prototype version to the production quality one. | DylanSp wrote: | You're probably thinking of https://codecrafters.io/. I've been | meaning to check them out with my education stipend from work, | just haven't had the time to devote to it. | suncherta wrote: | Yes, that's the one. Thank you. | lprd wrote: | Curious if anyone else has checked out their content yet? If | so, hows the quality? | pizza234 wrote: | The idea is very good - the tests approach is effective and | stimulating; they also provide a range of products to | study/experiment with. However, I think that the approach | to the learning material is "love it or hate it". | | By design, the service doesn't provide any documentation; | it provides references to existing technical documentation | (of any kind, including blog posts). | | Those who expect a focused introduction to each topic will | find it very tedious or hard to proceed (for example, the | SQLite exercise has important details buried in a very | large and confusing webpage), and likely hate it; those who | like the challenge of understanding loads of raw | documentation will love it. | eBombzor wrote: | > Here are some examples that meet my criteria of the "building | block": NGINX, SQLite, PostgreSQL, Kafka, Linux kernel, etc. | | Kafka? | nkozyra wrote: | Given there's a focus on basic data structures it seems like a | good fit. | ibbtown wrote: | Probably MQ as example for a message bus was not OSS and hip | enough;) | Jolter wrote: | Why not? I'm curious as to why it wouldn't fit among those | others. Not used broadly enough? | viksit wrote: | i love this! is there a book like this to learn rust with? it | would be amazing to have a working system at the end. (not | looking for a beginner, but say, intermediate level book). | thebamby wrote: | One of the top level comments recommends a tokio.rs tutorial. | See here: https://news.ycombinator.com/item?id=34573028 | yazzku wrote: | A good read for sure, thank you. '4. Protocol Parsing', hand- | writing protocol parsers in C looks particularly thrilling. | theideaofcoffee wrote: | The redis wire protocol is simple enough where it's not very | difficult. It's instructive to write it in C because there's a | lot of translatable knowledge to other languages: read in a | buffer, cast that buffer to the protocol-specific struct, read | the various fields from memory, etc. Basic operations for a | systems-level project like this. | yazzku wrote: | It's simple enough, and yet: | | https://nvd.nist.gov/vuln/detail/CVE-2021-32675 | https://nvd.nist.gov/vuln/detail/CVE-2021-41099 | https://nvd.nist.gov/vuln/detail/CVE-2021-32761 | | I agree it's instructive, but on the other hand, the time | might be right to start teaching why not to do this stuff. | Modeling a protocol parser in a high-level language that can | spit up correct and highly-optimized C code would be just as | instructive and perhaps even more fun. | blagie wrote: | <-- This. | | Yes, "read in a buffer, cast that buffer to the protocol- | specific struct, read the various fields from memory, etc" | are all operations one should generally NOT do. This was | instructive maybe three decades ago, when the internet was | relatively safe. | | Knowing how to do this RIGHT is important. | | The place this is still helpful is low-level programming, | and embedded is a far better place to learn. If one part of | your microwave is talking to a sensor, security isn't | really an issue, since you control both ends. | yazzku wrote: | Yeah, and I said the above being myself a big fan of C. I | write C in my hobby projects. Yet if I were doing | anything non-trivial that talks over the network, that | protocol parsing would for sure not be hand-written. | 77pt77 wrote: | What could go wrong? | | It's not like there are decades of paying the price of such | decisions... | yazzku wrote: | At a cursory glance, they assert((size_t)rv <= n), but if | that's the assert.h assert(), it's just void when NDEBUG is | defined, and cmake seems to define that when building a | Release target. Also, gcc does not seem to define it by | default. So that's a bit of an overflow there. | CyberDildonics wrote: | I think you're mixing up parsing a binary protocol with | parsing strings. | swatcoder wrote: | You don't have to learn raw systems coding yourself, but if | nobody bothers, the code of 2050 is going to be built on a | lot of stale, brittle magic that nobody can reproduce or | understand. | | This is exactly the sort of playground effort where those who | do want to learn can get their hands dirty. If this is their | first time doing this kind of project, they shouldn't use | _any_ of this code in production. There will be all sorts of | cheated corners and vulnerabilities, and not just in obvious | high-risk places like this. That 's how hands-on learning | goes. | messe wrote: | Looks neat and relatively self contained. I'm adding this to my | list of projects to use to learn a new language. I might give it | a shot in Kotlin and Zig (I know it and use it, but am not as | familiar with its event loop implementation as I'd like to be) | over the next few weeks. | rickreynoldssf wrote: | That's something I wish I had time for. | varispeed wrote: | One of my pet peeves when I was learning programming is that I | couldn't find any books that would teach how to write tests in | real world. | | There was that chicken and egg problem then, when potential | employers would skip my CV because I didn't have any TDD | experience and I couldn't find anywhere how to learn this. | | Before I even learned that something like testing exist, I was so | confident like "oh I could write something like that over the | weekend, how come they needed months to do that?". Then my | software would crash the first time someone other than me used | it. | | Anyway - what I want to say that while this book sounds like a | great idea, without showing TDD and how to write code so that it | can be proven it works the way intended and that it can handle | unhappy paths and edge cases, it won't teach someone trying to | learn programming much and it doesn't actually stand over about | million other books about programming that really just scratch | the surface and don't show how to write production ready code. | | That's what is still missing on the market. It's almost like a | well kept secret that only developers working at large | corporations know. | | That skill was very very difficult to acquire. | bilekas wrote: | While i have so many things i could say about your idea of what | development means and the "only path" you seem to subscribe to. | I think you're missing the point of the book. | | > it won't teach someone trying to learn programming much and | it doesn't actually stand over about million other books about | programming that really just scratch the surface and don't show | how to write production ready code. | | It's not a book to teach people how to program, infact the | author goes out of their way to mention only C and minor c++ | has been used and that it may be beneficial for learning how to | build out such a POC of redis, to DIY your own. | | This is not a book to hand over to an outsourcing company and | expect production ready work. Nor was it described as such. | tikkabhuna wrote: | Sorry for being a little off topic, but the Mini Redis tutorial | [1] was really fun when I did it a few years ago. It has you | implement a server and client in Rust using the Tokio library. | | I think Redis is a great server to "build yourself" as you don't | need to start with much to get it going. | | [1] https://tokio.rs/tokio/tutorial/setup | rcarmo wrote: | I actually build minimal Redis clones in every new language or | runtime, or when I want to explore threading models. | | It all started with https://github.com/rcarmo/miniredis (which I | forked to add and experiment with pub/sub), and I just found | myself doing it again and again because Redis is the | quintessential network service: | | By implementing it, you learn about socket handling, event loop | for a specific runtime, threading models, data representation, | concurrency (if you want to do a multi-threaded version), etc. | None of my "ports" are fully functional, but they all helped me | sort out some of the above plus build tools, packaging, | dependencies, etc. | | It's "hello world" for core cloud native microservices, if you | will (and without having to do REST or JSON stuff). | sillysaurusx wrote: | RESP3 is really nice too. It should probably be required | reading. | | There's a lot of interesting / subtle design choices worth | studying. ___________________________________________________________________ (page generated 2023-01-29 23:00 UTC)