netaddr.IP: a new IP address type for Go
tailscale.com/blog/netaddr-new-ip-type-for-goThe Go standard library’s net.IP type is problematic for a number of reasons. We wrote a new one.
This post explores some problems with Go’s “simplicity by design”: introducing a better IP type that’s also interoperable with the language proves to be a non-trivial challenge.
Distributed Proofreaders
www.pgdp.net/cDistributed Proofreaders provides a web-based method to ease the conversion of Public Domain books into e-books. By dividing the workload into individual pages, many volunteers can work on a book at the same time.
Game: OVERFLOW
punkx.org/overflowThe [board] game is about creating a small shellcode in memory by copying existing instructions and then exploiting a buffer overflow to jump into it, so that you can overwrite your opponent’s return address to force them to go to the game_over() function.There are other mechanics as well and more layers of strategy (like setting the exception handler or monkeypatching).
Sapiens: A Brief History of Humankind
en.wikipedia.org/wiki/Sapiens:_A_Brief_History_of_HumankindThe book, focusing on Homo sapiens, surveys the history of humankind, starting from the Stone Age and going up to the twenty-first century. The account is situated within a framework that intersects the natural sciences with the social sciences.
git-revise
git-revise.readthedocs.io/en/latestFaster and simpler git rebase.
Calculus Made Easy
calculusmadeeasy.orgMeasuring Mutexes, Spinlocks and how Bad the Linux Scheduler Really is
probablydance.com/2019/12/30/measuring-mutexes-spinlocks-and-how-bad-the-linux-scheduler-really-isThis blog post is one of those things that just blew up. From a tiny observation at work about odd behaviors of spinlocks I spent months trying to find good benchmarks, (still not entirely successful) writing my own spinlocks, mutexes and condition variables and even contributing a patch to the Linux kernel. The main thing I’ll try to answer is to give some more informed guidance on the endless discussion of mutex vs spinlock. Besides that I found that most mutex implementations are really good, that most spinlock implementations are pretty bad, and that the Linux scheduler is OK but far from ideal. The most popular replacement, the MuQSS scheduler has other problems instead. (the Windows scheduler is pretty good though)
nand2tetris
www.nand2tetris.orgThe site contains all the lectures, project materials and tools necessary for building a general-purpose computer system and a modern software hierarchy from the ground up.
how I think when I think about programming
www.alicemaz.com/writing/program.htmla whirlwind tour through the guts of the system
Dungeons and Discourse Third Edition: The dialectic continues
slatestarcodex.com/2013/02/22/dungeons-and-discourse-third-edition-the-dialectic-continuesDungeons and Dragons, but about philosophy.
Let's Build a Cargo Compatible Build Tool
ductile.systems/freight-part-1Tutorial about building a self-hosting cargo-compatible build tool. I have many problems with cargo and was interested in nixifying our job builds for eternity, so maybe there’s something useful there.
Bootstrapping with FORTH
compilercrim.es/bootstrapWhat if all software suddenly disappeared? What's the minimum you'd need to bootstrap a practical system? I decided to start with a one sector (512-byte) seed and find out how far I can get.
The myrmics memory allocator
citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.1074.2437&rep=rep1&type=pdfA paper about message-passing memory allocator: could be useful for actor systems.
Toy Tutorial - MLIR
mlir.llvm.org/docs/Tutorials/ToyMLIR is an interesting LLVM compiler framework thingy that uses LLVM for multiple representations instead of just high-level assembly.
This tutorial runs through the implementation of a basic toy language on top of MLIR. The goal of this tutorial is to introduce the concepts of MLIR; in particular, how dialects can help easily support language specific constructs and transformations while still offering an easy path to lower to LLVM or other codegen infrastructure. This tutorial is based on the model of the LLVM Kaleidoscope Tutorial.
Futexes Are Tricky
dept-info.labri.fr/~denis/Enseignement/2008-IR/Articles/01-futex.pdfDetailed explanation of futexes, including some possible pitfalls.
Why's (Poignant) Guide to Ruby
poignant.guideRuby tutorial with very unusual and interesting writing style.
Category Theory Illustrated
abuseofnotation.github.io/category-theory-illustratedCategory Theory Illustrated is a primer in category theory and other mathematical theories that is made to be really accessible to people with no prior exposure to the subject, without being dumbed down, by utilizing visual explanations.
Bots Are Stupid
www.gamingonlinux.com/2022/12/bots-are-stupid-is-an-ultra-precise-programming-platformerUp for a challenge and love programming? Well it seems that Bots Are Stupid might be a good fit for you. An ultra-precise platformer where you don't directly control things — what could possibly go wrong?
The Hitchhiker's Guide to Logical Verification
browncs1951x.github.io/static/files/hitchhikersguide.pdfBook about proofs with Lean.
Workarounds to Computer Access in Healthcare Organizations: You Want My Password or a Dead Patient?
www.cs.dartmouth.edu/~sws/pubs/ksbk15-draft.pdfPaper about how IT in healthcare in general and IT security in particular is done by people who don’t actually use it, listing different problems and workarounds that end up being used in the field.
Sacrificing convenience for security leads you to having neither security nor convenience.
Modeling graphs in Rust using vector indices
smallcultfollowing.com/babysteps/blog/2015/04/06/modeling-graphs-in-rust-using-vector-indicesNiko’s post about using vectors (≈ arenas) instead of reference counters to model graphs. Explains how it relates to ownership and borrowing.
See also: Handles are the better pointers.
Handles are the better pointers
floooh.github.io/2018/06/17/handles-vs-pointers.htmlA blog post explaining the “single owner of data, everyone has indices instead of pointers” model. Not actually about Rust per se, just happens to be really useful for Rust.
See also: Modeling graphs in Rust using vector indices.
No Sane Compiler Would Optimize Atomics
www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4455.htmlThe paper’s claim:
False.
Compilers do optimize atomics, memory accesses around atomics, and utilize architecture-specific knowledge. This paper illustrates a few such optimizations, and discusses their implications.
Interestingly, none of the optimizations proposed in the paper actually work on GCC or Clang.
Game: Out of Ctrl
miknugget.itch.io/out-of-ctrlPush key blocks into their slots to gain control of the qwert. Regain Ctrl (and possible other keys) to get to the get through to the end. There are fourteen levels total. Can you get through them all?
Game: Wayfarer
idrellegames.itch.io/wayfarerYou are a Wayfarer. Marked by a complete immunity to magic, Wayfarers travel the world, breaking curses, hunting monsters, and fighting magic when it spins out of control. Their Order, once a powerful presence in the world, is broken, leaving behind only a handful of warriors still bound by their creed.
Game: Manifold Garden by William Chyr
williamchyr.itch.io/manifoldgardenRediscover gravity and explore a beautiful Escher-esque world of impossible architecture. Geometry repeats infinitely in every direction, and falling down leads you back to where you started. Manipulate gravity to change your perspective and see the world in new ways. Master the rules of the universe and restore a barren world with vegetation and life.
The Magic Ring Buffer
fgiesen.wordpress.com/2012/07/21/the-magic-ring-bufferA first (as far as I know) description of ringbuffer based on two mmaps. I hope to make a better one sometime, but for now this’ll the best explanation I have.