2,703 karma · joined May 6, 2013
If I posted something you found interesting, I probably found it on Scour. Sign up in <1 minute to get your own personalized feed.
Writing at https://emschwartz.me
(This is one of those posts that made me really happy to have built https://scour.ing because I would have missed it otherwise!)
I had actually implemented full text search + vector search using RRF but I kept it disabled by default because it wasn't meaningfully improving my results. This seems like a good hypothesis as to why.
The RRF paper is impressive in how incredibly simple it is (the paper is only 2 pages): https://plg.uwaterloo.ca/~gvcormac/cormacksigir09-rrf.pdf
You can use vector databases that implement the Approximate Nearest Neighbors (ANN) algorithm, or if you don't have too many documents you can just brute force the similarity comparison.
I'm not sure at what point you _really_ need or want a vector database, but anecdotally, calculating the Hamming distance for a couple thousand vectors seems pretty negligible.
Another email option I’d recommend is https://improvmx.com
That's a good question. I think the tie-in with Tokio mostly relates to a couple of things:
1. calls to `tokio::spawn`
2. async I/O traits like `AsyncRead`/`AsyncWrite`
3. direct usage of Tokio I/O
For 1, it would be great if more libraries switched to using more structured concurrency primitives instead of using spawn. In the cases where it does make sense to have a spawning function, it would be nice if they used crate-exported traits like [hyper::rt::Executor](https://docs.rs/hyper/latest/hyper/rt/trait.Executor.html) so that the functionality could be abstracted over different runtimes.
For 2, hopefully those traits will eventually be standardized in std.
For 3, it would also be nice if the necessary functionality were abstracted into crate-exported traits that were implemented for the Tokio structs.
Buuuut, all of that said. It's thorny and a lot of the ecosystem is indeed wedded to Tokio.
This course does an exceptional job of giving you an intuitive understanding of some critical parts of how a computer works that affect higher-level programs and programming languages (for me the biggest aha! was grokking the difference between the stack and the heap). It is also incredibly fun to appreciate how magical it is that these complicated machines we use are just built from these simple circuits that you keep building up and building up through the course. Finally, the teachers did a fantastic job of simplifying what could be multiple semesters worth of material to quickly give you the gist of things like assembly languages, without oversimplifying.
Really can't recommend this enough if you have the time to do it. FWIW, the first part of the course (from NAND gates to building a CPU) is very fun and fairly easy. The second part (going from a computer to a full operating system) is quite a bit more work.
When I had a need for them, I went through only the first section of the workshop and everything clicked. You can just do the derive macro section and all the strange and scary-looking macro syntax will make sense. I realized that there is only a bit of extra syntax but it’s used very often so it can seem a little overwhelming when reading macro code.
I think the fundamental issue for the DX is that it’s trying to do everything everyone might want out of all of the observability signals. That’s a useful and laudable goal but it means that everything is configurable and it sometimes feels like there are too many knobs that you can and must adjust to get it to do what you want.
Whoops!
In any case, looks pretty useful!
Anyone else in a similar boat? Or have a theory why it’s less compelling than a traditional gaming console?