Tag is-blog

72 bookmarks have this tag.

Blog posts.

2024-09-30

152.

Building a robust frontend using progressive enhancement - Service Manual - GOV.UK

www.gov.uk/service-manual/technology/using-progressive-enhancement

an extremely based frontend manual from the GOV.UK

2024-09-24

151.

Tagged Union Subsets with Comptime in Zig

mitchellh.com/writing/zig-comptime-tagged-union-subset

a fun case study with Zig’s comptime

2024-09-20

150.

Linux/4004 - Dmitry.GR

dmitry.gr?r=05.Projects&proj=35. Linux4004

Slowly booting full Linux on the intel 4004 for fun, art, and absolutely no profit

2024-09-07

149.

WebP: The WebPage compression format

purplesyringa.moe/blog/webp-the-webpage-compression-format

a really fun (albeit somewhat impractical) way to compress webpages when all you have is browser APIs

148.

WebAIM: History of the browser user-agent string

webaim.org/blog/user-agent-string-history

how user agents became a lying mess

2024-08-17

145.

Piccolo - A Stackless Lua Interpreter

kyju.org/blog/piccolo-a-stackless-lua-interpreter

a really interesting exploration of interpreter design, a lot of repls and thoughts on various coroutines

144.

Techniques for Safe Garbage Collection in Rust

kyju.org/blog/rust-safe-garbage-collection

a really cool post explaining design of gc-arena

2024-07-11

142.

Lix | Announcing Lix 2.90 "Vanilla Ice Cream"

lix.systems/blog/2024-07-10-lix-2.90-release

Lix is an independent variant of the Nix package manager, developed by a team of open-source volunteers, and maintained by and for a passionate community of users.

I kind of assumed that Lix is a purely political fork, but they seem to write actual code, so that’s nice. Changelog promises faster evaluation, better errors and REPL improvements.

2024-06-17

140.

systemd, 10 years later: a historical and technical retrospective

blog.darknedgy.net/technology/2020/05/02/0

This offers an interesting technical analysis of systemd (in part 3). I’m not a huge fan of the social/historical parts (1-2, 4), although they offer some perspective.

2024-05-23

137.

Load Balancing

samwho.dev/load-balancing

A bottom-up, animated guide to HTTP load balancing algorithms.

136.

Queueing – An interactive study of queueing strategies

encore.dev/blog/queueing

In this blog, we go on an interactive journey to understand common queueing strategies for handling HTTP requests.

2024-05-20

131.

Folk Computer

folk.computer/notes/tableshots

An IRL spatial computer making use of printed codes to do stuff.

129.

TIGER_STYLE.md: TigerBeetle’s code style guidelines

github.com/tigerbeetle/tigerbeetle/blob/main/docs/TIGER_STYLE.md
113.

the nix iceberg

cohost.org/leftpaddotpy/post/3885451-the-nix-iceberg

sadly, doesn’t provide links, but most is googlable

2024-05-19

111.

Compilers for free with weval

bernsteinbear.com/blog/weval

With some partial evaluation and specialization hints, it is possible to get pretty decent speedups on interpreters by turning them into compilers.

2024-04-26

108.

bun.report is Bun's new crash reporter

bun.sh/blog/bun-report-is-buns-new-crash-reporter

How we built an anonymous Zig/C++ crash reporter that doesn't require debug symbols to be shipped with the application.

Pretty fun and showcases some Zig comtime stuff.

2024-02-06

106.

The little ssh that (sometimes) couldn't

mina.naguib.ca/blog/2012/10/22/the-little-ssh-that-sometimes-couldnt.html

A fascinating tale about network problems.

2024-01-24

105.

Learning Async Rust With Entirely Too Many Web Servers

ibraheem.ca/posts/too-many-web-servers

A nice explanation of async that’s not about “threads slow”, but rather about how async as an abstraction emerges from sensible design decisions.

2024-01-17

103.

A universal lowering strategy for control effects in Rust

www.abubalay.com/blog/2024/01/14/rust-effect-lowering

The Rust language has incrementally grown a set of patterns to support control-flow effects including error handling, iteration, and asynchronous I/O. In The registers of Rust, boats lays out four aspects of this pattern shared by Rust’s three effects. Today these effects are typically used in isolation, or at most combined in bespoke ways, but the Rust project has been working on ways to integrate them more deeply with each other, such as async gen blocks.

The theory of algebraic effects and handlers has explored this design space and offers answers to many of the questions that the Rust project has encountered during this work. This post will relate the patterns employed by Rust to the terminology and semantics of effects, to help build a shared vocabulary and understanding of the implications of combining multiple effects.

2024-01-04

100.

Compromising a Linux desktop using... 6502 processor opcodes on the NES?!

scarybeastsecurity.blogspot.com/2016/11/0day-exploit-compromising-linux-desktop.html

gstreamer-plugins-bad includes a NES 6502 emulator, which was vulnerable to RCE.

99.

features are faults

flak.tedunangst.com/post/features-are-faults

Review of many different software vulnerabilities caused by obscure undertested (mis-)features.

A modern web browser is the software equivalent of Gabriel’s Horn. Finite volume, but infinite attack surface.

2023-12-23

98.

Speculation in JavaScriptCore

www.webkit.org/blog/10308/speculation-in-javascriptcore

This post is all about speculative compilation, or just speculation for short, in the context of the JavaScriptCore virtual machine.

2023-12-18

96.

So you want custom allocator support in your C library

nullprogram.com/blog/2023/12/17

Some thoughts on custom allocator interfaces with nice examples.

2023-12-15

95.

Performance of WebAssembly (WASM) runtimes in 2023

00f.net/2023/01/04/webassembly-benchmark-2023

Comparison between different runtimes and with native code.

94.

The Generic Dilemma

research.swtch.com/generic

The generic dilemma is this: do you want slow programmers, slow compilers and bloated binaries, or slow execution times?

No generics / monomorphization / dynamic dispatch

2023-12-13

92.

Pinning all system calls in OpenBSD

marc.info?l=openbsd-tech&m=170205367232026&w=2

How OpenBSD prohibited all syscalls from unknown locations.

2023-12-07

89.

Software Transactional Memory: Clojure vs. Haskell

leftfold.tech/posts/pie-a-la-mode#fnref-2

A nice overview of STM primitives.

2023-12-06

88.

Execution in the Kingdom of Nouns

steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html

About why free functions are important. I find verb/noun framework from this article quite useful.

2023-12-05

87.

Designing a SIMD Algorithm from Scratch

mcyoung.xyz/2023/11/27/simd-base64#fnref:pad-with-A

A nice post about SIMD algorithms using Rust’s portable SIMD as an example.

2023-11-28

83.

Friends don't let friends make certain types of data visualization

github.com/cxli233/FriendsDontLetFriends

This is an opinionated essay about good and bad practices in data visualization. Examples and explanations are below.

82.

Linus Torvalds about spinlocks and locking in general

www.realworldtech.com/forum?threadid=189711&curpostid=189723
80.

Mutexes Are Faster Than Spinlocks

matklad.github.io/2020/01/04/mutexes-are-faster-than-spinlocks.html

Microbenchmark for futexes + spinlocks and some useful links at the bottom.

79.

Spinlocks Considered Harmful

matklad.github.io/2020/01/02/spinlocks-considered-harmful.html

Because spin locks are so simple and fast, it seems to be a good idea to use them for short-lived critical sections. For example, if you only need to increment a couple of integers, should you really bother with complicated syscalls? In the worst case, the other thread will spin just for a couple of iterations…
Unfortunately, this logic is flawed! A thread can be preempted at any time, including during a short critical section. If it is preempted, that means that all other threads will need to spin until the original thread gets its share of CPU again. And, because a spinning thread looks like a good, busy thread to the OS, the other threads will spin until they exhaust their quants, preventing the unlucky thread from getting back on the processor!

2023-11-27

78.

Lambda calculus - Combinatory Logic

theory.stanford.edu/~blynn/lambda/cl.html

Variables are the trickiest part of lambda calculus. And naming is the trickiest part of variables: the most complex code in our lambda evaluator is the part that renames variables to perform capture-avoiding substitutions.
Names are artificial tedious tags whose sole purpose is to aid human comprehension. Can we get rid of them? There ought to be a way to study computation without naming names.

77.

Surprisingly Slow

gregoryszorc.com/blog/2021/04/06/surprisingly-slow

This is the closing-file-handles-on-Windows post.

I'm titling this post Surprisingly Slow because the slowness was either surprising to me or the sub-optimal practices leading to slowness are prevalent enough that I think many programmers would be surprised by their existence.

2023-11-26

76.

netaddr.IP: a new IP address type for Go

tailscale.com/blog/netaddr-new-ip-type-for-go

The 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.

70.

Measuring 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-is

This 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)

68.

how I think when I think about programming

www.alicemaz.com/writing/program.html

a whirlwind tour through the guts of the system

66.

Let's Build a Cargo Compatible Build Tool

ductile.systems/freight-part-1

Tutorial 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.

65.

Bootstrapping with FORTH

compilercrim.es/bootstrap

What 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.

56.

Modeling graphs in Rust using vector indices

smallcultfollowing.com/babysteps/blog/2015/04/06/modeling-graphs-in-rust-using-vector-indices

Niko’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.

55.

Handles are the better pointers

floooh.github.io/2018/06/17/handles-vs-pointers.html

A 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.

54.

No Sane Compiler Would Optimize Atomics

www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4455.html

The 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.

50.

The Magic Ring Buffer

fgiesen.wordpress.com/2012/07/21/the-magic-ring-buffer

A 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.

2023-11-25

47.

Implementing truly safe semaphores in rust

neosmart.net/blog/implementing-truly-safe-semaphores-in-rust
45.

tips for systemd services management and hardening in NixOS

git.selfprivacy.org/alexoundos/articles/src/branch/master/systemd-hardening-in-NixOS/article.md

When it comes to security, we care about limiting access of each entity of a system to as few other entities as possible. Network input, executables and users must be able to reach only those resources, which are necessary to perform the defined server tasks. Principle of least priviledge.

Generally, it's better to implement as many layers of security as possible. Although, there is no way to make a server 100% bullet proof - it's a huge endless topic, this article covers some feasible essential systemd tunables that give us a layer of protection.

43.

Laurence Tratt: Why Aren't Programming Language Specifications Comprehensive?

tratt.net/laurie/blog/2023/why_arent_programming_language_specifications_comprehensive.html
42.

Laurence Tratt: How Hard is it to Adapt a Memory Allocator to CHERI?

tratt.net/laurie/blog/2023/how_hard_is_it_to_adapt_a_memory_allocator_to_cheri.html
40.

Cranelift's Instruction Selector DSL, ISLE: Term-Rewriting Made Practical

cfallin.org/blog/2023/01/20/cranelift-isle
39.

A New Backend for Cranelift

cfallin.org/blog/2020/09/18/cranelift-isel-1
37.

Codebase as Database: Turning the IDE Inside Out with Datalog

petevilter.me/post/datalog-typechecking

Introspectable and extensible IDEs with logic programming

35.

A non-overlapping type level contains operation for heterogeneous lists

blog.weiznich.de/blog/eurorust-non-overlapping-contains-for-hlists

In this blog post we explore how to write a type level contains operation for HList inspired type lists without running into overlapping trait implementations

34.

Pointers Are Complicated, or: What's in a Byte?

www.ralfj.de/blog/2018/07/24/pointers-and-bytes.html

Explanation of provenance, uninitialized memory and stuff like that. Useful as an entry point into realization that we don’t live in PDP-11 world anymore.

33.

Text Rendering Hates You

faultlore.com/blah/text-hates-you
32.

Breaking Our Latin-1 Assumptions

manishearth.github.io/blog/2017/01/15/breaking-our-latin-1-assumptions
31.

Let's Stop Ascribing Meaning to Code Points

manishearth.github.io/blog/2017/01/14/stop-ascribing-meaning-to-unicode-code-points
30.

It’s not wrong that "🤦🏼‍♂️".length == 7

hsivonen.fi/string-length
27.

Myths about /dev/urandom

www.2uo.de/myths-about-urandom

tl;dr: /dev/random is obsolete and /dev/urandom is strictly better except in early boot.

26.

Quantum computing for the very curious

quantum.country/qcvc

Presented in an experimental mnemonic medium that makes it almost effortless to remember what you read

23.

Index 1,600,000,000 Keys with Automata and Rust

blog.burntsushi.net/transducers

It turns out that finite state machines are useful for things other than expressing computation. Finite state machines can also be used to compactly represent ordered sets or maps of strings that can be searched very quickly.

22.

What every programmer should know about memory

lwn.net/Articles/250967
20.

An Interactive Introduction to Fourier Transforms

www.jezzamon.com/fourier/index.html

Fourier transforms are a tool used in a whole bunch of different things. This is a explanation of what a Fourier transform does, and some different ways it can be useful.

19.

Color: From Hexcodes to Eyeballs

jamie-wong.com/post/color

If you're curious about rainbows, colorimetry, gamma encoding, and experiments run in the late 1920s, then this is the post for you!

16.

What I learned from making a DNS client in Rust

blog.adamchalmers.com/making-a-dns-client

A lot about sockets, syscalls and bits

1