41554 blogs · [ { "id": "01a0d51c-7e84-7193-9529-6867aebac510", "title": "AI Has No Wisdom and Neither Will You", "url": "https://alexn.org/blog/2026/09/22/ai-has-no-wisdom-and-neither-will-you/?pk_campaign=rss", "published_at": "2026-09-22T06:10:32+00:00" }, { "id": "01a0d51c-7e84-7193-9529-6867af94b3cc", "title": "Executable Scripts with Dependencies", "url": "https://alexn.org/blog/2026/09/17/executable-scripts-with-dependencies/?pk_campaign=rss", "published_at": "2026-09-17T07:00:00+00:00" }, { "id": "01a08724-9d81-70e5-b0a9-0de071cc8561", "title": "On Performance, GCs and Rust", "url": "https://alexn.org/blog/2026/07/21/on-performance-gcs-rust/?pk_campaign=rss", "published_at": "2026-07-21T00:00:00+00:00" }, { "id": "01a08724-9d81-70e5-b0a9-0de071cda65e", "title": "Copyright is Dead", "url": "https://alexn.org/blog/2026/03/06/copyright-is-dead/?pk_campaign=rss", "published_at": "2026-03-06T07:10:02+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d26177e8070", "title": "Boring Tech May Become Irrelevant Tech", "url": "https://alexn.org/blog/2026/03/05/boring-tech-irrelevant/?pk_campaign=rss", "published_at": "2026-03-05T16:12:06+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2617d7d805", "title": "Tapir Server with Cats-Effect and Pekko HTTP (snippet)", "url": "https://alexn.org/blog/2026/03/05/tapir-server-with-cats-effect-and-pekko-http-snippet/?pk_campaign=rss", "published_at": "2026-03-05T12:27:35+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261858c0db", "title": "Hybrid IO-driven Promise (Scala snippet)", "url": "https://alexn.org/blog/2026/02/17/hybrid-io-driven-promise-in-scala-snippet/?pk_campaign=rss", "published_at": "2026-02-17T12:03:04+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2618ae7f86", "title": "New Year, Old Me", "url": "https://alexn.org/blog/2026/01/08/new-year-old-me/?pk_campaign=rss", "published_at": "2026-01-08T10:10:32+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2618e36755", "title": "How To Become a DevOps Engineer", "url": "https://alexn.org/blog/2025/11/26/how-to-become-a-good-devops-engineer/?pk_campaign=rss", "published_at": "2025-11-26T00:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2619cec7c0", "title": "Programming Languages in the Age of AI Agents", "url": "https://alexn.org/blog/2025/11/16/programming-languages-in-the-age-of-ai-agents/?pk_campaign=rss", "published_at": "2025-11-16T06:14:15+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2619d63228", "title": "Try-catch-finally in Java is Cursed", "url": "https://alexn.org/blog/2025/11/10/try-catch-finally-in-java-is-cursed/?pk_campaign=rss", "published_at": "2025-11-10T09:54:08+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261a3dcc3b", "title": "Scala vs F#", "url": "https://alexn.org/blog/2025/11/01/scala-vs-fsharp/?pk_campaign=rss", "published_at": "2025-11-01T06:58:37+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261aee3dd6", "title": "Scala 3 / HOCON Parsing", "url": "https://alexn.org/blog/2025/10/30/scala-3-hocon-parsing/?pk_campaign=rss", "published_at": "2025-10-30T17:33:31+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261af4f612", "title": "'AI' Sucks the Joy Out of Programming", "url": "https://alexn.org/blog/2025/10/27/ai-sucks-the-joy-out-of-programming/?pk_campaign=rss", "published_at": "2025-10-27T00:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261b1b5590", "title": "Scala 3 / No Indent", "url": "https://alexn.org/blog/2025/10/26/scala-3-no-indent/?pk_campaign=rss", "published_at": "2025-10-26T08:35:53+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261c03b98a", "title": "Scala 3 / Match Types", "url": "https://alexn.org/blog/2025/10/25/scala-3-match-types/?pk_campaign=rss", "published_at": "2025-10-25T00:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261cd865ef", "title": "Update on Math Formulas via Copilot", "url": "https://alexn.org/blog/2025/10/21/update-on-math-formulas/?pk_campaign=rss", "published_at": "2025-10-21T00:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261d4710c8", "title": "Math Pill #2: Square Roots", "url": "https://alexn.org/blog/2025/10/15/math-pill-2-square-roots/?pk_campaign=rss", "published_at": "2025-10-15T00:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261e211352", "title": "Math Pill #1: Sums", "url": "https://alexn.org/blog/2025/10/15/math-pill-1-sums/?pk_campaign=rss", "published_at": "2025-10-15T00:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261e336b82", "title": "Outsourced Voices, Outsourced Minds", "url": "https://alexn.org/blog/2025/10/13/outsourced-voices-outsourced-minds/?pk_campaign=rss", "published_at": "2025-10-13T05:24:14+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261e8134d3", "title": "Effects and Concurrency in Functional Programming", "url": "https://alexn.org/blog/2025/09/17/effects-and-concurrency-in-functional-programming-youtube/?pk_campaign=rss", "published_at": "2025-09-17T14:43:37+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261ed75662", "title": "Scala's Gamble with Direct Style", "url": "https://alexn.org/blog/2025/08/29/scala-gamble-with-direct-style/?pk_campaign=rss", "published_at": "2025-08-29T05:33:16+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261fa079c6", "title": "Backup Script for My Cloud Storage", "url": "https://alexn.org/blog/2025/04/18/backup-script-for-my-cloud-storage/?pk_campaign=rss", "published_at": "2025-04-18T15:53:12+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d261fca9fc6", "title": "Tagged vs Untagged Unions (in Scala)", "url": "https://alexn.org/blog/2025/04/02/tagged-vs-untagged-unions-in-scala/?pk_campaign=rss", "published_at": "2025-04-02T08:30:19+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262030b537", "title": "My Favorite Firefox Extensions", "url": "https://alexn.org/blog/2025/03/15/firefox-extensions/?pk_campaign=rss", "published_at": "2025-03-15T18:29:27+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d26204cefa0", "title": "Use Firefox in 2025", "url": "https://alexn.org/blog/2025/03/03/use-firefox/?pk_campaign=rss", "published_at": "2025-03-03T21:51:40+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262110341b", "title": "Self-hosted Bookmarks Manager", "url": "https://alexn.org/blog/2025/02/14/self-hosted-bookmarks-manager/?pk_campaign=rss", "published_at": "2025-02-14T05:03:54+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2621a800e7", "title": "Auto-updating Docker containers", "url": "https://alexn.org/blog/2025/02/14/updating-docker-containers/?pk_campaign=rss", "published_at": "2025-02-14T05:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2622063c27", "title": "Join the Open Web", "url": "https://alexn.org/blog/2024/11/20/join-the-open-web/?pk_campaign=rss", "published_at": "2024-11-20T07:43:54+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2622de59ed", "title": "Cancellable HTTP requests via Scala's Tapir", "url": "https://alexn.org/blog/2024/09/29/cancellable-http-server-client-requests-via-scala-s-tapir/?pk_campaign=rss", "published_at": "2024-09-29T08:21:34+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262361034d", "title": "Trusting Open-Source", "url": "https://alexn.org/blog/2024/09/06/trusting-open-source/?pk_campaign=rss", "published_at": "2024-09-06T00:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262390551c", "title": "1Password vs. Bitwarden", "url": "https://alexn.org/blog/2024/08/20/1password-vs-bitwarden/?pk_campaign=rss", "published_at": "2024-08-20T06:41:41+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2623c768d6", "title": "Cryptographically Strong Random on the JVM", "url": "https://alexn.org/blog/2024/08/13/cryptographically-strong-random-jvm/?pk_campaign=rss", "published_at": "2024-08-13T08:17:53+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d26244052b8", "title": "On Advertising and Tracking", "url": "https://alexn.org/blog/2024/08/12/on-advertising-and-tracking/?pk_campaign=rss", "published_at": "2024-08-12T08:46:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d26251222eb", "title": "Scala's Future", "url": "https://alexn.org/blog/2024/01/10/scala-future/?pk_campaign=rss", "published_at": "2024-01-10T17:37:53+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2625aa33da", "title": "Update NextDNS with a Scala CLI script", "url": "https://alexn.org/blog/2024/01/10/update-nextdns-with-a-scala-cli-script/?pk_campaign=rss", "published_at": "2024-01-10T11:14:14+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d26267f5cc6", "title": "New Year Resolutions", "url": "https://alexn.org/blog/2024/01/01/new-year-resolutions/?pk_campaign=rss", "published_at": "2024-01-01T09:21:44+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d26276113b3", "title": "December Adventure update, thoughts on Rust", "url": "https://alexn.org/blog/2023/12/12/december-adventure-rust/?pk_campaign=rss", "published_at": "2023-12-12T10:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2628062f5b", "title": "December Adventure: Learning Rust", "url": "https://alexn.org/blog/2023/12/04/december-adventure/?pk_campaign=rss", "published_at": "2023-12-04T11:04:09+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2628d579ec", "title": "In Scala 3, use 4 Spaces for Indentation", "url": "https://alexn.org/blog/2023/11/08/in-scala-3-use-4-spaces-for-indentation/?pk_campaign=rss", "published_at": "2023-11-08T18:17:04+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2628d6d468", "title": "OOP classes vs Higher-order Functions (HOFs)", "url": "https://alexn.org/blog/2023/09/25/oop-classes-vs-higher-order-functions-hofs/?pk_campaign=rss", "published_at": "2023-09-25T07:30:22+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d26291c3eb1", "title": "Post Once, Syndicate Everywhere (POSSE)", "url": "https://alexn.org/blog/2023/09/21/post-once-syndicate-everywhere-pose/?pk_campaign=rss", "published_at": "2023-09-21T09:42:45+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d26295c5054", "title": "Java Volatiles", "url": "https://alexn.org/blog/2023/06/19/java-volatiles/?pk_campaign=rss", "published_at": "2023-06-19T10:57:50+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2629d9589f", "title": "Scala 3 Significant Indentation Woes: Sample", "url": "https://alexn.org/blog/2023/06/06/scala-3-significant-indentation-woes-sample/?pk_campaign=rss", "published_at": "2023-06-06T11:48:10+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262a96b592", "title": "Scala 3 Enums", "url": "https://alexn.org/blog/2023/05/25/scala-enums/?pk_campaign=rss", "published_at": "2023-05-25T11:15:29+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262b3c8f73", "title": "Managing Database Migrations in Kotlin", "url": "https://alexn.org/blog/2023/05/02/managing-database-migrations-kotlin/?pk_campaign=rss", "published_at": "2023-05-02T07:32:06+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262bfa813e", "title": "Kotlin Coroutines to Cats-Effect", "url": "https://alexn.org/blog/2023/04/24/kotlin-suspended-functions-to-cats-effect-io/?pk_campaign=rss", "published_at": "2023-04-24T00:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262c20cafb", "title": "Integrating Akka with Cats-Effect 3", "url": "https://alexn.org/blog/2023/04/17/integrating-akka-with-cats-effect-3/?pk_campaign=rss", "published_at": "2023-04-17T08:05:29+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262caf37ff", "title": "Server Monitoring with Monit", "url": "https://alexn.org/blog/2023/01/17/server-monitoring-with-monit/?pk_campaign=rss", "published_at": "2023-01-17T11:16:12+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262d5fe803", "title": "#DeleteTwitter", "url": "https://alexn.org/blog/2023/01/15/delete-twitter/?pk_campaign=rss", "published_at": "2023-01-15T08:30:29+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262d877f04", "title": "Personal Server Backups", "url": "https://alexn.org/blog/2022/12/02/personal-server-backups/?pk_campaign=rss", "published_at": "2022-12-02T17:56:39+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262da7eee7", "title": "Custom Jackson JSON serializer/deserializer from Circe", "url": "https://alexn.org/blog/2022/11/29/custom-jackson-json-serializer-deserializer-from-circe/?pk_campaign=rss", "published_at": "2022-11-29T00:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262e4de280", "title": "I ❤️ Scala's Community", "url": "https://alexn.org/blog/2022/10/28/love-scala-community/?pk_campaign=rss", "published_at": "2022-10-28T07:21:54+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262f32ed35", "title": "Immutable Collections should be Your Default", "url": "https://alexn.org/blog/2022/10/27/immutable-collections-your-default/?pk_campaign=rss", "published_at": "2022-10-27T12:34:46+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d262fabd8d6", "title": "On Scala 3's Optional Braces", "url": "https://alexn.org/blog/2022/10/24/scala-3-optional-braces/?pk_campaign=rss", "published_at": "2022-10-24T09:07:21+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2630899ad8", "title": "Building a Queue for Delayed Messages via a RDBMS (1): Design", "url": "https://alexn.org/blog/2022/10/21/modeling-queue-for-delayed-messages-via-rdbms/?pk_campaign=rss", "published_at": "2022-10-21T06:46:07+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d263180803c", "title": "Cut the Technobabble", "url": "https://alexn.org/blog/2022/10/19/cut-the-technobabble/?pk_campaign=rss", "published_at": "2022-10-19T12:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2631ccb7d0", "title": "The case against Effect Systems (e.g., the IO data type)", "url": "https://alexn.org/blog/2022/10/13/the-case-against-effect-systems-io-data-type/?pk_campaign=rss", "published_at": "2022-10-13T09:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d263231c767", "title": "Execute Shell Commands in Java/Scala/Kotlin", "url": "https://alexn.org/blog/2022/10/03/execute-shell-commands-in-java-scala-kotlin/?pk_campaign=rss", "published_at": "2022-10-03T05:13:13+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2632902225", "title": "The Trouble with Checked Exceptions: Part 2", "url": "https://alexn.org/blog/2022/09/28/the-trouble-with-checked-exceptions-part-2/?pk_campaign=rss", "published_at": "2022-09-28T22:41:48+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2632af414c", "title": "Proprietary Environments are a Trap", "url": "https://alexn.org/blog/2022/09/22/proprietary-environments-are-a-trap/?pk_campaign=rss", "published_at": "2022-09-22T07:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2632da1597", "title": "Java 19", "url": "https://alexn.org/blog/2022/09/21/java-19/?pk_campaign=rss", "published_at": "2022-09-21T16:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d26338e317c", "title": "Akka Fork FUD", "url": "https://alexn.org/blog/2022/09/21/akka-fork-fud/?pk_campaign=rss", "published_at": "2022-09-21T09:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2633a007c1", "title": "Java's Cultural Problem", "url": "https://alexn.org/blog/2022/09/19/java-cultural-problem/?pk_campaign=rss", "published_at": "2022-09-19T09:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2633ae66e8", "title": "Scripting with Scala", "url": "https://alexn.org/blog/2022/09/13/scripting-with-scala/?pk_campaign=rss", "published_at": "2022-09-13T09:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2633f4a79a", "title": "#DeleteFacebook", "url": "https://alexn.org/blog/2022/09/12/delete-facebook/?pk_campaign=rss", "published_at": "2022-09-12T09:00:00+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d2634cf021c", "title": "Scala isn't fun anymore", "url": "https://alexn.org/blog/2022/09/09/scala-isnt-fun-anymore/?pk_campaign=rss", "published_at": "2022-09-09T05:00:37+00:00" }, { "id": "01a08724-9d82-718c-ac5f-4d263528b373", "title": "Akka is moving away from Open Source", "url": "https://alexn.org/blog/2022/09/07/akka-is-moving-away-from-open-source/?pk_campaign=rss", "published_at": "2022-09-07T16:31:21+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46674cd73", "title": "Open Source vs Free Software", "url": "https://alexn.org/blog/2022/09/07/free-software-vs-open-source/?pk_campaign=rss", "published_at": "2022-09-07T16:28:56+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46709ba06", "title": "Limiting Toxic Technology", "url": "https://alexn.org/blog/2022/09/06/limiting-toxic-technology/?pk_campaign=rss", "published_at": "2022-09-06T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a467801ded", "title": "Tracking Side Effects in Scala", "url": "https://alexn.org/blog/2022/05/23/tracking-effects-in-scala/?pk_campaign=rss", "published_at": "2022-05-23T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a467a033fa", "title": "OOP vs Type Classes: Ideology", "url": "https://alexn.org/blog/2022/05/13/oop-vs-type-classes-part-1-ideology/?pk_campaign=rss", "published_at": "2022-05-13T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a467e37f3a", "title": "Implicit vs Scala 3's Given", "url": "https://alexn.org/blog/2022/05/11/implicit-vs-scala-3-given/?pk_campaign=rss", "published_at": "2022-05-11T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46814d2ec", "title": "Scala OOFP Design Sample", "url": "https://alexn.org/blog/2022/04/18/scala-oop-design-sample/?pk_campaign=rss", "published_at": "2022-04-18T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a468ce9db8", "title": "Scala's Gitter to Discord migration mistake", "url": "https://alexn.org/blog/2022/04/09/scala-gitter-discord-mistake/?pk_campaign=rss", "published_at": "2022-04-09T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a4692ed496", "title": "On Typelevel and Monix", "url": "https://alexn.org/blog/2022/04/05/future-monix-typelevel/?pk_campaign=rss", "published_at": "2022-04-05T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a469e79d57", "title": "A Return to Blogging", "url": "https://alexn.org/blog/2022/04/01/blogging/?pk_campaign=rss", "published_at": "2022-04-01T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46ad0bb34", "title": "Finding Focus in Harsh Times", "url": "https://alexn.org/blog/2022/03/30/focus/?pk_campaign=rss", "published_at": "2022-03-30T14:08:01+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46bb1d2c3", "title": "Cleanup Scala/Java project", "url": "https://alexn.org/blog/2022/01/22/cleanup-scala-project/?pk_campaign=rss", "published_at": "2022-01-22T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46bd066f7", "title": "VSCode workplace recommended extensions", "url": "https://alexn.org/blog/2021/08/29/vscode-recommended-extensions-vscode-extensions-json/?pk_campaign=rss", "published_at": "2021-08-29T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46bfd99dd", "title": "Unsafe Lazy Resource.scala", "url": "https://alexn.org/blog/2021/08/02/unsafelazyresource-scala/?pk_campaign=rss", "published_at": "2021-08-02T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46c571933", "title": "Combining the terminal (iTerm) with the IDE", "url": "https://alexn.org/blog/2021/07/18/iterm-open-file-cmd-click-ide-semantic-history/?pk_campaign=rss", "published_at": "2021-07-18T12:23:50+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46d4a3972", "title": "Tolerance", "url": "https://alexn.org/blog/2021/03/30/tolerance/?pk_campaign=rss", "published_at": "2021-03-30T20:12:35+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46de869bd", "title": "Atom/RSS Feeds are the Best Way to Consume the Web", "url": "https://alexn.org/blog/2021/03/29/atom-rss-feeds-are-the-best-way-to-consume-the-web/?pk_campaign=rss", "published_at": "2021-03-29T19:58:29+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46e0de9da", "title": "ING Scala Meetup on Scala 3 (live coding session)", "url": "https://alexn.org/blog/2021/02/26/type-classes-in-scala-3-live-coding-session/?pk_campaign=rss", "published_at": "2021-02-26T06:30:07+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46e4b5306", "title": "Implementing a CountDownLatch (async and dirty)", "url": "https://alexn.org/blog/2021/02/22/countdownlatch-async-dirty/?pk_campaign=rss", "published_at": "2021-02-22T13:39:35+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46edee31b", "title": "Matomo (Analytics) Hosting via Docker", "url": "https://alexn.org/blog/2021/02/22/matomo-hosting-via-docker/?pk_campaign=rss", "published_at": "2021-02-22T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a46f994ce9", "title": "Scala's List has a Secret", "url": "https://alexn.org/blog/2021/02/12/scala-list-secret/?pk_campaign=rss", "published_at": "2021-02-12T11:32:33+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a4703f73d3", "title": "Tail Recursive Functions (in Scala)", "url": "https://alexn.org/blog/2021/01/26/tail-recursive-functions-in-scala/?pk_campaign=rss", "published_at": "2021-01-26T19:49:35+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a4706c786d", "title": "Snippet: Tagless Final vs OOP", "url": "https://alexn.org/blog/2021/01/20/tagless-final-vs-oop/?pk_campaign=rss", "published_at": "2021-01-20T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a470bae473", "title": "Snippet: Remove blank lines from text", "url": "https://alexn.org/blog/2021/01/14/remove-blank-lines/?pk_campaign=rss", "published_at": "2021-01-14T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a471833a36", "title": "Execute shell commands in F#", "url": "https://alexn.org/blog/2020/12/06/execute-shell-command-in-fsharp/?pk_campaign=rss", "published_at": "2020-12-06T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a4725cf82c", "title": "Using ScalaTest for Effects", "url": "https://alexn.org/blog/2020/11/22/effecttestsuite-scala/?pk_campaign=rss", "published_at": "2020-11-22T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a472c6ba7f", "title": "Best practice for natural Ordering", "url": "https://alexn.org/blog/2020/11/17/best-practice-for-ordering-comparable/?pk_campaign=rss", "published_at": "2020-11-17T09:02:13+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a4733c64c7", "title": "Managing Database Migrations in Scala", "url": "https://alexn.org/blog/2020/11/15/managing-database-migrations-scala/?pk_campaign=rss", "published_at": "2020-11-15T16:17:25+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a4736c93df", "title": "List static blog tags in folder (Jekyll, etc)", "url": "https://alexn.org/blog/2020/11/13/list-blog-tags-in-folder/?pk_campaign=rss", "published_at": "2020-11-13T00:00:00+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a473a104c6", "title": "I like Option.get", "url": "https://alexn.org/blog/2020/11/12/i-like-option-get/?pk_campaign=rss", "published_at": "2020-11-12T18:02:46+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a4742b1cdf", "title": "Organize and Index Your Screenshots (OCR) on macOS", "url": "https://alexn.org/blog/2020/11/11/organize-index-screenshots-ocr-macos/?pk_campaign=rss", "published_at": "2020-11-11T12:43:46+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a474e3a831", "title": "Block comments on the web", "url": "https://alexn.org/blog/2020/10/20/block-comments-on-the-web/?pk_campaign=rss", "published_at": "2020-10-20T19:51:45+00:00" }, { "id": "01a08724-9d83-721b-bd02-70a475d82fbc", "title": "Generic IOApp alternative", "url": "https://alexn.org/blog/2020/10/15/generic-ioapp-alternative/?pk_campaign=rss", "published_at": "2020-10-15T00:00:00+00:00" } ] posts Claim your blog
Back to alexn.org
Blog · corpus.blog/blogs/alexn.org/posts

alexn.org

alexn.org

2026

2025

2024

2023

2022

2021

2020