20 random bookmarks

2025-08-29

131.

You no longer need JavaScript

lyra.horse/blog/2025/08/you-dont-need-js

An overview of what makes modern CSS so awesome.

2025-07-31

127.

A dive into open chat protocols

wiki.alopex.li/ADiveIntoOpenChat

2025-07-03

125.

Beamer Viewer

beamerviewer.euxane.eu

This web app displays notes and slides in separate windows,
keeping both synchronised.
It accepts simple, double-width, or double-height PDF presentations:

2025-05-30

115.

The PGP Problem

www.latacora.com/blog/2019/07/16/the-pgp-problem

Why do people keep telling me to use PGP? The answer is that they shouldn’t be telling you that, because PGP is bad and needs to go away.

2025-05-23

112.

Async from scratch 1: What's in a Future, anyway? | natkr's ramblings

natkr.com/2025-04-10-async-from-scratch-1

There are a lot of guides about how to use async Rust from a "user's
perspective", but I think it's also worth understanding how it
works, what those async blocks actually mean.

2025-04-24

105.

Instrumenting Axum projects

determinate.systems/posts/instrumenting-axum

2025-04-04

104.

Pitfalls of Safe Rus

corrode.dev/blog/pitfalls-of-safe-rust

When people say Rust is a “safe language”, they often mean memory safety.
And while memory safety is a great start, it’s far from all it takes to build robust applications.
Memory safety is important but not sufficient for overall r…

2024-10-24

85.

Rust Prism

registerspill.thorstenball.com/p/rust-prism

2024-10-10

82.

'Do' More With 'Run'

maxgreenwald.me/blog/do-more-with-run

I recently wrote about Async Pool, one of my favorite JavaScript / TypeScript helpers, and today I want to share an even simpler yet extremely useful utility

2024-10-04

80.

Snappy UI Optimization with useDeferredValue

www.joshwcomeau.com/react/use-deferred-value

useDeferredValue is one of the most underrated React hooks. It allows us to dramatically improve the performance of our applications in certain contexts. I recently used it to solve a gnarly performance problem on this blog, and in this tutorial, I'll show you how! ⚡

2024-09-30

79.

On Leaving Apple

typesanitizer.com/blog/leaving-apple.html

2024-08-18

68.

Permacomputing

permacomputing.net

Permacomputing is both a concept and a community of practice oriented around issues of resilience and regenerativity in computer and network technology inspired by permaculture.

2024-08-14

65.

A Flexible Minimalist Neovim for 2024

wickstrom.tech/2024-08-12-a-flexible-minimalist-neovim.html

2024-06-24

51.

Deriving Dependently-Typed OOP from First Principles -- Extended Version with Additional Appendices

arxiv.org/abs/2403.06707

The expression problem describes how most types can easily be extended with new ways to produce the type or new ways to consume the type, but not both. When abstract syntax trees are defined as an algebraic data type, for example, they can easily be extended with new consumers, such as print or eval, but adding a new constructor requires the modification of all existing pattern matches. The expression problem is one way to elucidate the difference between functional or data-oriented programs (easily extendable by new consumers) and object-oriented programs (easily extendable by new producers). This difference between programs which are extensible by new producers or new consumers also exists for dependently typed programming, but with one core difference: Dependently-typed programming almost exclusively follows the functional programming model and not the object-oriented model, which leaves an interesting space in the programming language landscape unexplored. In this paper, we explore the field of dependently-typed object-oriented programming by deriving it from first principles using the principle of duality. That is, we do not extend an existing object-oriented formalism with dependent types in an ad-hoc fashion, but instead start from a familiar data-oriented language and derive its dual fragment by the systematic use of defunctionalization and refunctionalization. Our central contribution is a dependently typed calculus which contains two dual language fragments. We provide type- and semantics-preserving transformations between these two language fragments: defunctionalization and refunctionalization. We have implemented this language and these transformations and use this implementation to explain the various ways in which constructions in dependently typed programming can be explained as special instances of the phenomenon of duality.

50.

Microfeatures I Love in Blogs and Personal Websites

danilafe.com/blog/blog_microfeatures

In this post, I talk about pleasant but seemingly minor features in personal sites

2024-06-14

33.

A useful shell prompt

blog.meain.io/2022/my-shell-prompt

Featureful zsh prompt.

Reposted 28.

interstar/cardigan-bay: A new wiki engine in Clojure ...

github.com/interstar/cardigan-bay

A single-user “wiki” engine powering the ThoughtStorms wiki.

2024-06-13

22.

API Tokens: A Tedious Survey

fly.io/blog/api-tokens-a-tedious-survey

Comparison between types of API tokens.

2024-06-12

12.

I really like the RP2040

dgroshev.com/blog/rp2040

2024-06-10

5.

Modern IRC Client Protocol

modern.ircdocs.horse

Living specification of the IRC protocol. Does not include brand new behavior, just existing behavior present in IRC software and/or networks (new extensions are IRCv3's area).