Friday Blast #19
A brief history of select(2) (2016) - covers the history of the select
syscall. Early Unixes were very basic.
Select is fundamentally broken (2017) - the follow-up to “A brief history of select(2)”, this covers why select
isn’t that good, performance wise, and how poll
and epoll
try to fix some of it’s issues.
Race condition vs data race (2011) - on the topic of things that can go wrong in concurrent programs. Race conditions are any error which occurs under specific timing in the application, whereas data races are explicit cases where two writes write several shared memory locations without any synchronization. They are distinct and one can have one without the other. The neat thing is that data races can be detected automatically, and programs without data races actually have some nice properties.
Falsehoods programmers believe about [video stuff] (2016) - there’s a cottage industry of these “falsehoods programmers believe about X” and this article has “X = video stuff”. In truth, there’s a lot of these things, and some of them are quite scary. Well worth a read if you’ve ever had to interact with video.
Everything sysadmin: are you load balancing wrong? (2016) - there’s two uses for load balancing - to provide extra capacity or to provide resilience. Your team needs to be clear how you’re using yours. For example, if you’re using them for extra capacity, you might expect the shards to be at almost full capacity. And when one breaks, the others might not be able to handle the extra traffic. If you think you’re doing it for reslliency, you’re going to have a bad time.
Why aren’t application downloads routinely done over HTTPS? (2012) - the bottom line is that you basically only need authenticity, not prevention of MITMs or any other stuff HTTPS provides. Furthermore, due to the way downloads are done (with mirrors etc), you need some extra infrastructure on top of that as well.
Little’s Law (2017) #own - this is one of my own from the last week. It’s about a nice result from queuing theory with many applications in building distributed applications.