41554 blogs · [ { "id": "01a087e2-e3d7-73b2-8658-ff2b77d1d60d", "title": "I Moved My Website Into My Garage", "url": "https://soap.coffee/~lthms/posts/garage-website.html", "published_at": "2026-09-05T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b78a24532", "title": "What happened in February 2026?", "url": "https://soap.coffee/~lthms/posts/february-2026.html", "published_at": "2026-03-08T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b794d3472", "title": "Teaching Firefox About slack:// URLs", "url": "https://soap.coffee/~lthms/posts/teaching-firefox-about-slack.html", "published_at": "2026-02-19T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7a08083f", "title": "What Happened in January 2026?", "url": "https://soap.coffee/~lthms/posts/january-2026.html", "published_at": "2026-01-30T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7a2e0ba6", "title": "How I Want to Use LLMs in 2026", "url": "https://soap.coffee/~lthms/posts/how-i-want-to-use-llms-in-2026.html", "published_at": "2026-01-25T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7a7bcd05", "title": "I Cannot SSH Into My Server Anymore (And That’s Fine)", "url": "https://soap.coffee/~lthms/posts/i-cannot-ssh-into-my-server-anymore.html", "published_at": "2026-01-05T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7b619413", "title": "Peer-Programming in Modern OCaml with ChatGPT and Gemini", "url": "https://soap.coffee/~lthms/posts/PeerProgrammingWithLLMs.html", "published_at": "2025-06-02T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7bc1ed9c", "title": "What Happened in 2024?", "url": "https://soap.coffee/~lthms/posts/December2024.html", "published_at": "2025-01-01T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7c4d07e4", "title": "Serving This Article from RAM for Fun and No Real Benefit", "url": "https://soap.coffee/~lthms/posts/DreamWebsite.html", "published_at": "2024-12-25T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7cd0f920", "title": "On Vestigial Structures", "url": "https://soap.coffee/~lthms/posts/VestigialStructures.html", "published_at": "2024-08-16T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7d0eb4fe", "title": "Introducing bepo-tsrn.nvim", "url": "https://soap.coffee/~lthms/posts/BepoNvim.html", "published_at": "2024-05-23T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7dabc3b8", "title": "Installing a LUKS-Encrypted Arch Linux on a Vultr VPS", "url": "https://soap.coffee/~lthms/posts/LUKSEncryptedVPS.html", "published_at": "2024-02-25T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7e4b4655", "title": "Using git maintenance with Encrypted SSH Keys", "url": "https://soap.coffee/~lthms/posts/GitMaintenanceSshEncryptedKeys.html", "published_at": "2024-02-18T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7f39e24e", "title": "Building Static Binaries for OCaml Projects", "url": "https://soap.coffee/~lthms/posts/OCamlStaticBinaries.html", "published_at": "2023-12-31T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b7f8af4de", "title": "Spatial Shell 6th Release Might Be the Charm", "url": "https://soap.coffee/~lthms/posts/SpatialShell6.html", "published_at": "2023-12-30T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8036e3d2", "title": "The Free and Open Source Software Projects This Website is Built Upon in June 2023", "url": "https://soap.coffee/~lthms/posts/Thanks2023.html", "published_at": "2023-06-23T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8056f964", "title": "Extensible Records in OCaml Using dmap", "url": "https://soap.coffee/~lthms/posts/ExtensibleRecordsInOCaml.html", "published_at": "2023-06-20T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b80f5749c", "title": "The Chaotic Debut of My Software Projects", "url": "https://soap.coffee/~lthms/posts/ChaoticDebut.html", "published_at": "2023-05-29T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b81bd6495", "title": "What happened since December 2022?", "url": "https://soap.coffee/~lthms/posts/May2023.html", "published_at": "2023-05-18T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b82444265", "title": "Neovim, OCaml Interfaces, Tree-Sitter and LSP", "url": "https://soap.coffee/~lthms/posts/NeovimOCamlTreeSitterAndLSP.html", "published_at": "2023-05-01T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b833d7761", "title": "Spatial Shell: Call For Testers", "url": "https://soap.coffee/~lthms/posts/CFTSpatialShell.html", "published_at": "2023-04-27T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b83ad0d42", "title": "Patch Dependencies for Stacked Git", "url": "https://soap.coffee/~lthms/posts/StackedGitPatchTheory.html", "published_at": "2023-01-26T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8425b280", "title": "How I Keep Using Stacked Git at $WORK", "url": "https://soap.coffee/~lthms/posts/StackedGit2.html", "published_at": "2023-01-16T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b84dc9bcc", "title": "What happened in October and November 2022?", "url": "https://soap.coffee/~lthms/posts/November2022.html", "published_at": "2022-11-19T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b85913858", "title": "What happened in September 2022?", "url": "https://soap.coffee/~lthms/posts/September2022.html", "published_at": "2022-09-18T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b86634e5d", "title": "What happened in August 2022?", "url": "https://soap.coffee/~lthms/posts/August2022.html", "published_at": "2022-08-15T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b873dbcf4", "title": "Writing a Function Whose Argument is a Polymorphic Function in OCaml", "url": "https://soap.coffee/~lthms/posts/RankNTypesInOCaml.html", "published_at": "2022-08-07T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b87bd2b7e", "title": "How I Use Stacked Git at $WORK", "url": "https://soap.coffee/~lthms/posts/StackedGit.html", "published_at": "2022-01-16T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b88a6452b", "title": "Implementing an Echo Server in Coq with coqffi.1.0.0", "url": "https://soap.coffee/~lthms/posts/CoqffiEcho.html", "published_at": "2020-12-10T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b89610ad1", "title": "coqffi.1.0.0 In A Nutshell", "url": "https://soap.coffee/~lthms/posts/Coqffi-1-0-0.html", "published_at": "2020-12-10T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8984811b", "title": "Pattern Matching on Types and Contexts", "url": "https://soap.coffee/~lthms/posts/LtacPatternMatching.html", "published_at": "2020-08-28T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8a5b12f4", "title": "Ltac is an Imperative Metaprogramming Language", "url": "https://soap.coffee/~lthms/posts/LtacMetaprogramming.html", "published_at": "2020-08-28T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8b20eb15", "title": "Mixing Ltac and Gallina for Fun and Profit", "url": "https://soap.coffee/~lthms/posts/MixingLtacAndGallina.html", "published_at": "2020-07-26T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8b535c3d", "title": "Proving Algebraic Datatypes are “Algebraic”", "url": "https://soap.coffee/~lthms/posts/AlgebraicDatatypes.html", "published_at": "2020-07-12T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8bda79f5", "title": "A Study of Clight and its Semantics", "url": "https://soap.coffee/~lthms/posts/ClightIntroduction.html", "published_at": "2020-03-20T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8c5526fa", "title": "Release of colorless-themes-0.2", "url": "https://soap.coffee/~lthms/posts/ColorlessThemes-0.2.html", "published_at": "2020-02-15T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8cf91fa5", "title": "A Literate Toolchain To Build This Website", "url": "https://soap.coffee/~lthms/posts/CleopatraV1.html", "published_at": "2020-02-04T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8d572183", "title": "I am no longer a PhD. student", "url": "https://soap.coffee/~lthms/posts/EndOfPhd.html", "published_at": "2019-01-15T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8d655c5d", "title": "Discovering Common Lisp with trivial-gamekit", "url": "https://soap.coffee/~lthms/posts/DiscoveringCommonLisp.html", "published_at": "2018-06-17T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8e521e80", "title": "Extensible Type-Safe Error Handling in Haskell", "url": "https://soap.coffee/~lthms/posts/ExtensibleTypeSafeErrorHandling.html", "published_at": "2018-02-04T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8f10fd79", "title": "Monad Transformers are a Great Abstraction", "url": "https://soap.coffee/~lthms/posts/MonadTransformers.html", "published_at": "2017-07-15T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b8fb4465e", "title": "Rewriting in Coq", "url": "https://soap.coffee/~lthms/posts/RewritingInCoq.html", "published_at": "2017-05-13T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b902419f1", "title": "Implementing Strongly-Specified Functions with the Program Framework", "url": "https://soap.coffee/~lthms/posts/StronglySpecifiedFunctionsProgram.html", "published_at": "2017-01-01T00:00:00+00:00" }, { "id": "01a087e2-e3d7-73b2-8658-ff2b9080978b", "title": "Implementing Strongly-Specified Functions with the refine Tactic", "url": "https://soap.coffee/~lthms/posts/StronglySpecifiedFunctionsRefine.html", "published_at": "2015-01-11T00:00:00+00:00" } ] posts Claim your blog
Back to soap.coffee
Blog · corpus.blog/blogs/soap.coffee/posts

soap.coffee

soap.coffee

2026

2025

2024

2023

2022

2020

2019

2018

2017

2015