Professional software engineer, musician, gamer, stoic, democratic socialist

  • 8 Posts
  • 285 Comments
Joined 1 year ago
cake
Cake day: July 2nd, 2023

help-circle









  • Agreed.

    And sometimes code is not the right medium for communicating domain knowledge. For example, if you are writing code the does some geometric calculations, with lot of trigonometry, etc. Even with clear variable names, it can be hard to decipher without a generous comment or splitting it up into functions with verbose names. Sometimes you really just want a picture of what’s happening, in SVG format, embedded into the function documentation HTML.






  • Retro ROMs are usually small. Videos can get quite large though, on the order of ~100GB per movie if you are storing 4K Blurays.

    I personally bought a couple > 20TB HDDs off of serverpartdeals.com and installed them in my gaming PC so now it also functions as a small NAS. Because it’s only on when I’m using the PC, the electric bill is not too bad. But it’s worth doing the math to see what your average kW/hour usage is. Wattage monitors are pretty cheap.

    If you specifically want a lower-power NAS in a separate machine, this will require a bit more research, and they can get pricey. I highly recommend using ZFS though.

    If you’re OK using a cheap, low-power mini PC as a home server and/or gateway, I can recommend the BeeLink EQ12. Mine is currently running 24/7 attached to a Hasivo 2.5Gb switch with PoE powering my WiFi AP.

    There are also options for connecting large external HDDs to a mini PC, but you would be compromising throughout via some SATA adapter.









  • There are plenty of good resources online. Here are some topics you probably wouldn’t see in an intro algos course (which I’ve actually used in my career). And I highly recommend finding the motivation for each of these in application rather than just learning them abstractly.

    • bloom filter
    • btree
    • b+ tree
    • consensus algos (PAXOS, RAFT, VSR, etc)
    • error correction codes (Hamming, Reed Solomon, etc)
    • garbage collection (mark+sweep, generational, etc)
    • generational arena allocator
    • lease (i.e. distributed lock)
    • log-structured merge trees
    • min-cost + max-flow
    • request caching and coalescing
    • reservoir sampling
    • spatial partition (BVH, kd-tree, etc)
    • trie
    • write-ahead log