2024-07-05
JavaScript-Free Sidenotes in Hugo
danilafe.com/blog/sidenotes2024-07-03
Announcing wcurl: a curl wrapper to download files
samueloph.dev/blog/announcing-wcurl-a-curl-wrapper-to-download-files2024-07-02
A write-ahead log is not a universal part of durability
notes.eatonphil.com/2024-07-01-a-write-ahead-log-is-not-a-universal-part-of-durability.htmlA write-ahead log is not a universal part of durability
2024-06-28
Advanced Bash-Scripting Guide
tldp.org/LDP/abs/html/index.html2024-06-27
plainweb
www.plainweb.devplainweb is a framework using HTMX, SQLite and TypeScript for less complexity and more joy.
2024-06-26
A (more) Modern CSS Reset
piccalil.li/blog/a-more-modern-css-resetYou probably wrote half a monad by accident
gieseanw.wordpress.com/2024/06/25/you-probably-wrote-half-a-monad-by-accidentA reckless introduction to Hindley-Milner type inference
reasonableapproximation.net/2019/05/05/hindley-milner.html2024-06-24
Counting Immutable Beans: Reference Counting Optimized for Purely Functional Programming
arxiv.org/abs/1908.05647Most functional languages rely on some garbage collection for automatic memory management. They usually eschew reference counting in favor of a tracing garbage collector, which has less bookkeeping overhead at runtime. On the other hand, having an exact reference count of each value can enable optimizations, such as destructive updates. We explore these optimization opportunities in the context of an eager, purely functional programming language. We propose a new mechanism for efficiently reclaiming memory used by nonshared values, reducing stress on the global memory allocator. We describe an approach for minimizing the number of reference counts updates using borrowed references and a heuristic for automatically inferring borrow annotations. We implemented all these techniques in a new compiler for an eager and purely functional programming language with support for multi-threading. Our preliminary experimental results demonstrate our approach is competitive and often outperforms state-of-the-art compilers.
Deriving Dependently-Typed OOP from First Principles -- Extended Version with Additional Appendices
arxiv.org/abs/2403.06707The 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.
Microfeatures I Love in Blogs and Personal Websites
danilafe.com/blog/blog_microfeaturesIn this post, I talk about pleasant but seemingly minor features in personal sites
2024-06-21
On testing Go code using the standard library | Henrique Vicente
henvic.dev/posts/testing-goMost programming language ecosystems provide assert functions in their testing libraries but not Go's. Go's standard testing package follows a more direct and to-the-point approach.
2024-06-20
build2 | C/C++ Build Toolchain
build2.orgbuild2 is an open source (MIT), cross-platform build toolchain that aims to approximate Rust Cargo's convenience for developing and packaging C/C++ projects while providing more depth and flexibility, especially in the build system.
Go's 'range over function' iterators and avoiding iteration errors
utcc.utoronto.ca/~cks/space/blog/programming/GoIteratorsAndAvoidingMistakesWhy does SQLite (in production) have such a bad rep?
avi.im/blag/2024/sqlite-bad-rep2024-06-19
Avoiding complexity with systemd
mgdm.net/weblog/systemdUsing systemd to avoid having to write some risky code
Aurora - Python Static Site Generator
aurora.jamesg.blogAurora: An extensible, Python-based static site generator.
Pimalaya
pimalaya.orgOfficial website of the Pimalaya project.
2024-06-18
Comparing Objective Caml and Standard ML
adam.chlipala.net/mlcompUnderstanding SPF, DKIM, and DMARC: A Simple Guide
github.com/nicanorflavier/spf-dkim-dmarc-simplifiedUnderstanding a Python closure oddity
utcc.utoronto.ca/~cks/space/blog/python/UnderstandingClosureOddityLinux 6.10 Honors One Last ReiserFS Request Made By Hans Reiser - Phoronix
www.phoronix.com/news/ReiserFS-README-Linux-6.102024-06-17
Sqlc: 2024 check in — brandur.org
brandur.org/fragments/sqlc-2024How I learned Haskell in just 15 years - duckrabbit solutions
duckrabbit.tech/articles/learning-haskell.htmlOpenBSD, the computer appliance maker's secret weapon
hiandrewquinn.github.io/til-site/posts/openbsd-the-computer-appliance-maker-s-secret-weaponBetween our ESP32 prokaryotic organisms and our 24/7 Internet-enabled megafauna servers, there exists a vast and loosely-defined ecosystem of things the B2B world likes to call computer appliances. Picture a bespoke Pi 4 packaged up neatly with some Python scripts, a little fancy plastic embossing, and maybe a well-guarded id_ed25519.pub in case you end up in hot water during the (long - very long, stable cash flow for generations long) maintenance contract, and you’re in the ballpark.
2024-06-14
Nix as a WebAssembly build tool
determinate.systems/posts/nix-wasmA useful shell prompt
blog.meain.io/2022/my-shell-promptFeatureful zsh prompt.
Putting Go's Context package into context
blog.meain.io/2024/golang-contextCAUSAL.AGENCY(7)
causal.agencyI make mostly IRC software in C. I like OpenBSD but also the GPL. I just want to read books and try to learn to be kinder. When I can I'd like to talk to strangers and experience more magic.
litterbox - IRC logger
git.causal.agency/litterbox/aboutpounce - IRC bouncer
git.causal.agency/pounce/aboutinterstar/cardigan-bay: A new wiki engine in Clojure ...
github.com/interstar/cardigan-bayA single-user “wiki” engine powering the ThoughtStorms wiki.
2024-06-13
Category Theory for Programmers: The Preface
bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-prefaceThe magic of dependency resolution
ochagavia.nl/blog/the-magic-of-dependency-resolutionSolving SAT via Positive Supercompilation
hirrolot.github.io/posts/sat-supercompilation.htmlCategory Theory in Context
math.jhu.edu/~eriehl/context.pdfMacaroons Escalated Quickly
fly.io/blog/macaroons-escalated-quicklyAPI Tokens: A Tedious Survey
fly.io/blog/api-tokens-a-tedious-surveyComparison between types of API tokens.
Building Go programs with Nix Flakes
xeiaso.net//blog/nix-flakes-go-programsMy personal C coding style as of late 2023
nullprogram.com/blog/2023/10/08A simple, arena-backed, generic dynamic array for C
nullprogram.com/blog/2023/10/05An easy-to-implement, arena-friendly hash map
nullprogram.com/blog/2023/09/30Arena allocator tips and tricks
nullprogram.com/blog/2023/09/27Avoid Linux locking up in low memory situations using earlyoom
dataswamp.org/~solene/2022-09-28-earlyoom.htmlThis article presents the program earlyoom to prevent a Linux system to lock up in low memory situations.
OpenBSD extreme privacy setup
dataswamp.org/~solene/2024-06-08-openbsd-privacy-setup.htmlIn this article, you will learn how to install and configure OpenBSD to reduce its network activity over clearnet
Optimal SQLite settings for Django
gcollazo.com/optimal-sqlite-settings-for-djangoThere’s plenty of information out there on how to scale Django to handle numerous requests per second, but most of it…
2024-06-12
My experience crafting an interpreter with Rust
ceronman.com/2021/07/22/my-experience-crafting-an-interpreter-with-rustLast year I finally decided to learn some Rust. The official book by Steve Klabnik and Carol Nichols is excellent, but even after reading it and working on some small code exercises, I felt that I …
I really like the RP2040
dgroshev.com/blog/rp20402024-06-11
Optimizing Font Files for the Modern Web
documentation.platformos.com/best-practices/performance/optimizing-font-filesSelf-serve dashboards
briefer.cloud/blog/posts/self-serve-bi-mythSales pitches are the only place where “self-serve dashboards" work. In the real world, it's a different story.
Why "business" people don't use metabase/power-bi.
Exploring Gleam, a type-safe language on the BEAM!
christopher.engineering/en/blog/gleam-overviewFrom Erlang, to Elixir and now, GLEAM!?
gamja: Simple IRC web client
sr.ht/~emersion/gamjaNetBSD 10 on a Pinebook Pro laptop
www.idatum.net/netbsd-10-on-a-pinebook-pro-laptop.htmlI've been running NetBSD on a RockPro64 since NetBSD 10-BETA, and I'm still happy with it now with NetBSD 10-RELEASE. I'm always looking for hardware to hack NetBSD though, and I recently watched a FOSDEM 2024 video: NetBSD 10: Thirty years, still going strong!. The Pinebook Pro laptop was mentioned at one point, which has the same RockChip SoC as the RockPro64. That reminded me I'd been wanting to give this inexpensive ARM 64 laptop a try.
Go evolves in the wrong direction
valyala.medium.com/go-evolves-in-the-wrong-direction-7dfda8a1a620Go programming language is known to be easy to use. Thanks to its well-thought syntax, features and tooling, Go allows writing easy-to-read…
Hard disagree on this one, but still interesting.
2024-06-10
Modern IRC Client Protocol
modern.ircdocs.horseLiving 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).
soju IRC bouncer
soju.imsoju is a user-friendly IRC bouncer. soju connects to upstream IRC servers on behalf of the user to provide extra functionality. soju supports many features such as multiple users, numerous IRCv3 extensions, chat history playback and detached channels. It is well-suited for both small and large deployments.
On Dependency Usage in Rust
landaire.net/on-dependency-usage-in-rustRust and Node aren't bad for encouraging dependency use -- your favorite language's tools just suck.
2024-06-09
Piku
piku.github.io/index.htmlpiku, inspired by dokku, allows you do git push deployments to your own servers, no matter how small they are.
The Hare programming language
harelang.orgHare is a systems programming language designed to be simple, stable, and robust. Hare uses a static type system, manual memory management, and a minimal runtime. It is well-suited to writing operating systems, system tools, compilers, networking software, and other low-level, high performance tasks.