56,966 blogs · [ { "id": "01a087a8-e43c-724c-b46a-a4a5c8f3c76c", "title": "Parquet File Write Support, Bloom Filters, Improved Performance: Hardwood 1.1.0.Beta1 Is Out", "url": "https://www.morling.dev/blog/parquet-file-write-support-bloom-filters-improved-performance-hardwood-1-1-0-beta1/", "published_at": "2026-08-31T19:36:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e28955729", "title": "A Fast Path for Fixed-Length Lists in Parquet", "url": "https://www.morling.dev/blog/fast-path-for-fixed-length-lists-in-parquet/", "published_at": "2026-07-22T05:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e28f73305", "title": "Hardwood 1.0: A Fast, Lightweight Apache Parquet Reader for the JVM", "url": "https://www.morling.dev/blog/hardwood-1-0-fast-lightweight-apache-parquet-reader-for-the-jvm/", "published_at": "2026-06-25T05:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e28fcd704", "title": "Improved Column Reader API, First Cut of Geospatial Support: Hardwood 1.0.0.CR1 Is Available", "url": "https://www.morling.dev/blog/improved-column-reader-api-geospatial-support-hardwood-1-0-0-cr1-available/", "published_at": "2026-05-31T20:36:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce7026a60b", "title": "Podcasts and Interviews", "url": "https://www.morling.dev/podcasts/", "published_at": "2026-05-26T06:53:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce7117c70b", "title": "Conferences", "url": "https://www.morling.dev/conferences/", "published_at": "2026-05-21T07:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e29c2970e", "title": "VARIANT Support, Interactive Parquet File TUI: Hardwood 1.0.0.Beta2 Is Out", "url": "https://www.morling.dev/blog/variant-support-interactive-parquet-file-tui-hardwood-1-0-0-beta2-is-out/", "published_at": "2026-04-29T17:45:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2a1d46ac", "title": "Hardwood Reaches Beta: S3, Predicate Push-Down, CLI, and More", "url": "https://www.morling.dev/blog/hardwood-reaches-beta-s3-predicate-push-down-cli/", "published_at": "2026-04-02T18:20:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce71ec9f58", "title": "Projects", "url": "https://www.morling.dev/projects/", "published_at": "2026-02-27T17:40:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2acd8183", "title": "Hardwood: A New Parser for Apache Parquet", "url": "https://www.morling.dev/blog/hardwood-new-parser-for-apache-parquet/", "published_at": "2026-02-26T12:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2b55f424", "title": "You Gotta Push If You Wanna Pull", "url": "https://www.morling.dev/blog/you-gotta-push-if-you-wanna-pull/", "published_at": "2025-12-07T09:05:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2ba8d9c3", "title": "On Idempotency Keys", "url": "https://www.morling.dev/blog/on-idempotency-keys/", "published_at": "2025-11-25T12:10:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2bac362b", "title": "Building a Durable Execution Engine With SQLite", "url": "https://www.morling.dev/blog/building-durable-execution-engine-with-sqlite/", "published_at": "2025-11-20T12:10:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2c50b345", "title": "\"You Don't Need Kafka, Just Use Postgres\" Considered Harmful", "url": "https://www.morling.dev/blog/you-dont-need-kafka-just-use-postgres-considered-harmful/", "published_at": "2025-11-03T17:02:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2cd545a6", "title": "Let's Take a Look at... Lower Java Tail Latencies With ZGC", "url": "https://www.morling.dev/blog/lower-java-tail-latencies-with-zgc/", "published_at": "2025-09-17T15:09:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2d280c30", "title": "Postgres Replication Slots: Confirmed Flush LSN vs. Restart LSN", "url": "https://www.morling.dev/blog/postgres-replication-slots-confirmed-flush-lsn-vs-restart-lsn/", "published_at": "2025-08-05T11:55:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2d5f0352", "title": "Converting Future to CompletableFuture With Java Virtual Threads", "url": "https://www.morling.dev/blog/future-to-completablefuture-with-java-virtual-threads/", "published_at": "2025-07-17T08:25:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2dd67f5f", "title": "Mastering Postgres Replication Slots: Preventing WAL Bloat and Other Production Issues", "url": "https://www.morling.dev/blog/mastering-postgres-replication-slots/", "published_at": "2025-07-08T11:55:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce72cc04ee", "title": "How I Use (and Don't Use) AI", "url": "https://www.morling.dev/ai/", "published_at": "2025-06-19T07:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2e706a89", "title": "This AI Agent Should Have Been a SQL Query", "url": "https://www.morling.dev/blog/this-ai-agent-should-have-been-sql-query/", "published_at": "2025-06-18T13:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2ed2d172", "title": "Backfilling Postgres TOAST Columns in Debezium Data Change Events", "url": "https://www.morling.dev/blog/backfilling-postgres-toast-columns-debezium-change-events/", "published_at": "2025-05-26T14:40:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2f03f19b", "title": "\"Streaming vs. Batch\" Is a Wrong Dichotomy, and I Think It's Confusing", "url": "https://www.morling.dev/blog/streaming-vs-batch-wrong-dichotomy/", "published_at": "2025-05-14T08:10:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce73a8e237", "title": "About Me", "url": "https://www.morling.dev/about/", "published_at": "2025-05-02T07:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e2ff2ff4a", "title": "What If We Could Rebuild Kafka From Scratch?", "url": "https://www.morling.dev/blog/what-if-we-could-rebuild-kafka-from-scratch/", "published_at": "2025-04-24T14:25:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e303aa7d4", "title": "A Deep Dive Into Ingesting Debezium Events From Kafka With Flink SQL", "url": "https://www.morling.dev/blog/ingesting-debezium-events-from-kafka-with-flink-sql/", "published_at": "2025-04-16T09:25:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e31249dcd", "title": "Building a Native Binary for Apache Kafka on macOS", "url": "https://www.morling.dev/blog/building-native-binary-for-apache-kafka-macos/", "published_at": "2025-04-07T10:25:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e318a299d", "title": "Let's Take a Look at... JEP 483: Ahead-of-Time Class Loading & Linking!", "url": "https://www.morling.dev/blog/jep-483-aot-class-loading-linking/", "published_at": "2025-03-27T13:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e31d22c68", "title": "The Synchrony Budget", "url": "https://www.morling.dev/blog/the-synchrony-budget/", "published_at": "2025-03-18T13:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e31f8e934", "title": "Let's Take a Look at... KIP-932: Queues for Kafka!", "url": "https://www.morling.dev/blog/kip-932-queues-for-kafka/", "published_at": "2025-03-05T11:35:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e320e9b2c", "title": "Get Running with Apache Flink on Kubernetes, part 2 of 2", "url": "https://www.morling.dev/blog/get-running-with-apache-flink-on-kubernetes-2/", "published_at": "2025-01-28T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e325e96e3", "title": "Get Running with Apache Flink on Kubernetes, part 1 of 2", "url": "https://www.morling.dev/blog/get-running-with-apache-flink-on-kubernetes-1/", "published_at": "2025-01-21T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3308ff69", "title": "Failover Replication Slots with Postgres 17", "url": "https://www.morling.dev/blog/failover-replication-slots-with-postgres-17/", "published_at": "2024-12-03T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e33db1730", "title": "Thoughts On Moving Debezium to the Commonhaus Foundation", "url": "https://www.morling.dev/blog/thoughts-on-moving-debezium-to-commonhaus-foundation/", "published_at": "2024-11-27T16:25:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e344e9bc9", "title": "Building OpenJDK From Source On macOS", "url": "https://www.morling.dev/blog/building-openjdk-from-source-on-macos/", "published_at": "2024-11-16T14:25:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e35202bd1", "title": "Revisiting the Outbox Pattern", "url": "https://www.morling.dev/blog/revisiting-the-outbox-pattern/", "published_at": "2024-10-31T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e353b5b2e", "title": "CDC Is a Feature Not a Product", "url": "https://www.morling.dev/blog/cdc-is-a-feature-not-a-product/", "published_at": "2024-10-18T13:55:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3630fe87", "title": "How I Am Setting Up VMs On Hetzner Cloud", "url": "https://www.morling.dev/blog/how-i-am-setting-up-vms-on-hetzner-cloud/", "published_at": "2024-10-06T18:25:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e368faab4", "title": "Leader Election With S3 Conditional Writes", "url": "https://www.morling.dev/blog/leader-election-with-s3-conditional-writes/", "published_at": "2024-08-26T08:15:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e36b049c3", "title": "Shell Spell: Extracting and Propagating Multiple Values With jq", "url": "https://www.morling.dev/blog/extracting-and-propagating-multiple-values-with-jq/", "published_at": "2024-07-06T09:20:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3714f6ea", "title": "A Zipping Gatherer", "url": "https://www.morling.dev/blog/zipping-gatherer/", "published_at": "2024-03-18T17:12:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e376d96c0", "title": "A Taxonomy Of Data Change Events", "url": "https://www.morling.dev/blog/taxonomy-of-data-change-events/", "published_at": "2024-03-13T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e37de91b9", "title": "Last Updated Columns With Postgres", "url": "https://www.morling.dev/blog/last-updated-columns-with-postgres/", "published_at": "2024-02-20T08:15:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e37e32314", "title": "Filtering Process Output With tee", "url": "https://www.morling.dev/blog/filtering-process-output-with-tee/", "published_at": "2024-02-10T10:11:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3808af2d", "title": "1BRC—The Results Are In!", "url": "https://www.morling.dev/blog/1brc-results-are-in/", "published_at": "2024-02-04T15:34:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e38c026b7", "title": "The One Billion Row Challenge", "url": "https://www.morling.dev/blog/one-billion-row-challenge/", "published_at": "2023-12-31T23:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e38dec14a", "title": "Logical Replication From Postgres 16 Stand-By Servers—Debezium and Failover Slots", "url": "https://www.morling.dev/blog/logical-replication-from-postgres-stand-by-servers-debezium-and-failover-slots/", "published_at": "2023-12-19T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3963d98c", "title": "Using Stand-by Servers for Postgres Logical Replication", "url": "https://www.morling.dev/blog/stand-by-servers-for-postgres-logical-replication/", "published_at": "2023-12-19T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e39ba6c92", "title": "Tracking Java Native Memory With JDK Flight Recorder", "url": "https://www.morling.dev/blog/tracking-java-native-memory-with-jdk-flight-recorder/", "published_at": "2023-12-17T18:29:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3a19ed6b", "title": "Getting Started With PyFlink on Kubernetes", "url": "https://www.morling.dev/blog/getting-started-with-pyflink-on-kubernetes/", "published_at": "2023-12-07T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3a4022f6", "title": "\"Change Data Capture Breaks Encapsulation\". Does it, though?", "url": "https://www.morling.dev/blog/change-data-capture-breaks-encapsulation-does-it-though/", "published_at": "2023-11-21T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3a754f82", "title": "Can Debezium Lose Events?", "url": "https://www.morling.dev/blog/can-debezium-lose-events/", "published_at": "2023-11-14T14:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3ab83cbb", "title": "CDC Use Cases: 7 Ways to Put CDC to Work", "url": "https://www.morling.dev/blog/cdc-use-cases/", "published_at": "2023-11-02T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3b643350", "title": "Finding Java Thread Leaks With JDK Flight Recorder and a Bit Of SQL", "url": "https://www.morling.dev/blog/finding-java-thread-leaks-with-jdk-flight-recorder-and-bit-of-sql/", "published_at": "2023-02-28T21:16:10+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3bc2109d", "title": "Getting Started With Java Development in 2023 — An Opinionated Guide", "url": "https://www.morling.dev/blog/getting-started-with-java-development-2023/", "published_at": "2023-01-15T21:10:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3c9fdf3d", "title": "Oh... This is Prod?!", "url": "https://www.morling.dev/blog/oh_this_is_prod/", "published_at": "2023-01-05T21:10:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3d6dc58b", "title": "Is your Blocking Queue... Blocking?", "url": "https://www.morling.dev/blog/is-your-blocking-queue-blocking/", "published_at": "2023-01-03T21:10:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3e66c1a1", "title": "Maven, What Are You Waiting For?!", "url": "https://www.morling.dev/blog/maven-what-are-you-waiting-for/", "published_at": "2022-12-18T12:45:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e3f395302", "title": "Postgres 15: Logical Decoding Row Filters With Debezium", "url": "https://www.morling.dev/blog/postgres-15-logical-decoding-row-filters-with-debezium/", "published_at": "2022-12-15T00:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e403471f6", "title": "The Insatiable Postgres Replication Slot", "url": "https://www.morling.dev/blog/insatiable-postgres-replication-slot/", "published_at": "2022-11-30T13:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e406b54f2", "title": "Running a Quarkus Native Application on Render", "url": "https://www.morling.dev/blog/running-quarkus-native-app-on-render/", "published_at": "2022-11-28T10:45:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e40c964c3", "title": "Why I Joined Decodable", "url": "https://www.morling.dev/blog/why-i-joined-decodable/", "published_at": "2022-11-03T14:00:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4100cc2e", "title": "An Ideation for Kubernetes-native Kafka Connect", "url": "https://www.morling.dev/blog/ideation-kubernetes-native-kafka-connect/", "published_at": "2022-09-06T13:20:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e418d1fc1", "title": "Testing Kafka Connectors", "url": "https://www.morling.dev/blog/testing-kafka-connectors/", "published_at": "2022-08-25T08:20:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4199ccba", "title": "Ten Tips to Make Conference Talks Suck Less", "url": "https://www.morling.dev/blog/ten-tips-make-conference-talks-suck-less/", "published_at": "2022-06-23T09:15:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e41b9d6e1", "title": "Loom and Thread Fairness", "url": "https://www.morling.dev/blog/loom-and-thread-fairness/", "published_at": "2022-05-27T08:20:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4246490e", "title": "Running JDK Mission Control on Apple M1", "url": "https://www.morling.dev/blog/running-jmc-on-apple-m1/", "published_at": "2022-05-17T08:20:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e42a63080", "title": "The Code Review Pyramid", "url": "https://www.morling.dev/blog/the-code-review-pyramid/", "published_at": "2022-03-10T15:45:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e43669e02", "title": "The JDK Flight Recorder File Format", "url": "https://www.morling.dev/blog/jdk-flight-recorder-file-format/", "published_at": "2022-02-20T20:15:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e445e643e", "title": "What's in a Good Error Message?", "url": "https://www.morling.dev/blog/whats-in-a-good-error-message/", "published_at": "2022-01-12T18:20:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e44a73ed5", "title": "Announcing the First Release of kcctl", "url": "https://www.morling.dev/blog/announcing-first-release-of-kcctl/", "published_at": "2021-12-21T16:48:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e45a15c02", "title": "Introducing the OSS Quickstart Archetype", "url": "https://www.morling.dev/blog/introducing-oss-quickstart-archetype/", "published_at": "2021-12-02T17:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e46053db6", "title": "O Kafka, Where Art Thou?", "url": "https://www.morling.dev/blog/kafka-where-art-thou/", "published_at": "2021-11-29T17:55:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4647138f", "title": "Refining The Return Type Of Java Methods Without Breaking Backwards-Compatibility", "url": "https://www.morling.dev/blog/refining-return-type-java-methods-without-breaking-backwards-compatibility/", "published_at": "2021-11-22T17:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e46af0f20", "title": "JDK Flight Recorder Events in GraalVM Native Binaries", "url": "https://www.morling.dev/blog/jfr-events-in-graalvm-native-binaries/", "published_at": "2021-11-12T17:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e475b8a96", "title": "Debezium and Friends – Conference Talks 2021", "url": "https://www.morling.dev/blog/debezium-talks-2021/", "published_at": "2021-11-02T09:50:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e47aff07f", "title": "What's on My Desk?", "url": "https://www.morling.dev/blog/whats-on-my-desk/", "published_at": "2021-10-24T08:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4873ec20", "title": "Executable JavaDoc Code Snippets", "url": "https://www.morling.dev/blog/executable-javadoc-code-snippets/", "published_at": "2021-10-18T06:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e48d66f94", "title": "Resource Bundle Look-ups in Modular Java Applications", "url": "https://www.morling.dev/blog/resource-bundle-lookups-in-modular-java-applications/", "published_at": "2021-08-29T16:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e49be38ee", "title": "Introducing JfrUnit 1.0.0.Alpha1", "url": "https://www.morling.dev/blog/introducing-jfrunit-1-0-0-alpha1/", "published_at": "2021-08-04T17:10:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4a1f2cd7", "title": "Three Plus Some Lovely Kafka Trends", "url": "https://www.morling.dev/blog/three-plus-some-lovely-kafka-trends/", "published_at": "2021-05-28T08:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4a9abbe3", "title": "Exploring ZooKeeper-less Kafka", "url": "https://www.morling.dev/blog/exploring-zookeeper-less-kafka/", "published_at": "2021-05-17T17:45:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4af75ab1", "title": "The Anatomy of ct.sym — How javac Ensures Backwards Compatibility", "url": "https://www.morling.dev/blog/the-anatomy-of-ct-sym-how-javac-ensures-backwards-compatibility/", "published_at": "2021-04-26T17:45:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4be7b5f1", "title": "FizzBuzz – SIMD Style!", "url": "https://www.morling.dev/blog/fizzbuzz-simd-style/", "published_at": "2021-03-08T15:25:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4bedb4ef", "title": "Talking to Postgres Through Java 16 Unix-Domain Socket Channels", "url": "https://www.morling.dev/blog/talking-to-postgres-through-java-16-unix-domain-socket-channels/", "published_at": "2021-01-31T19:25:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4c43f2a4", "title": "jlink's Missing Link: API Signature Validation", "url": "https://www.morling.dev/blog/jlinks-missing-link-api-signature-validation/", "published_at": "2020-12-28T11:20:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4c7b7da5", "title": "ByteBuffer and the Dreaded NoSuchMethodError", "url": "https://www.morling.dev/blog/bytebuffer-and-the-dreaded-nosuchmethoderror/", "published_at": "2020-12-21T16:45:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4d2efc8a", "title": "Towards Continuous Performance Regression Testing", "url": "https://www.morling.dev/blog/towards-continuous-performance-regression-testing/", "published_at": "2020-12-16T16:45:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4d6f6efa", "title": "Smaller, Faster-starting Container Images With jlink and AppCDS", "url": "https://www.morling.dev/blog/smaller-faster-starting-container-images-with-jlink-and-appcds/", "published_at": "2020-12-13T19:30:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4de923b5", "title": "Quarkus and Testcontainers", "url": "https://www.morling.dev/blog/quarkus-and-testcontainers/", "published_at": "2020-11-28T16:45:00+00:00" }, { "id": "01a087a8-e43d-7156-97d2-246e4e534cb4", "title": "Class Unloading in Layered Java Applications", "url": "https://www.morling.dev/blog/class-unloading-in-layered-java-applications/", "published_at": "2020-10-14T15:45:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce68150d3a", "title": "Building hsdis for OpenJDK 15", "url": "https://www.morling.dev/blog/building-hsdis-for-openjdk-15/", "published_at": "2020-10-05T18:30:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce686c39bc", "title": "Introducing JmFrX: A Bridge From JMX to JDK Flight Recorder", "url": "https://www.morling.dev/blog/introducing-jmfrx-a-bridge-from-jmx-to-jdk-flight-recorder/", "published_at": "2020-08-18T15:30:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce695584a2", "title": "How I Built a Serverless Search for My Blog", "url": "https://www.morling.dev/blog/how-i-built-a-serverless-search-for-my-blog/", "published_at": "2020-07-29T15:30:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce69e24ddc", "title": "Building Class Data Sharing Archives with Apache Maven", "url": "https://www.morling.dev/blog/building-class-data-sharing-archives-with-apache-maven/", "published_at": "2020-06-11T15:30:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce6a64e60d", "title": "Single Message Transformations - The Swiss Army Knife of Kafka Connect", "url": "https://www.morling.dev/blog/single-message-transforms-swiss-army-knife-of-kafka-connect/", "published_at": "2020-05-14T13:30:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce6aecfd9b", "title": "The Emitter Parameter Pattern for Flexible SPI Contracts", "url": "https://www.morling.dev/blog/emitter-parameter-pattern-for-flexible-spis/", "published_at": "2020-05-04T15:30:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce6b60eed7", "title": "Plug-in Architectures With Layrry and the Java Module System", "url": "https://www.morling.dev/blog/plugin-architectures-with-layrry-and-the-java-module-system/", "published_at": "2020-04-21T16:54:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce6b75ccf7", "title": "Introducing Layrry: A Launcher and API for Modularized Java Applications", "url": "https://www.morling.dev/blog/introducing-layrry-runner-and-api-for-modularized-java-applications/", "published_at": "2020-03-29T19:31:00+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce6be6fb5a", "title": "Reworking Git Branches with git filter-branch", "url": "https://www.morling.dev/blog/reworking-git-branches-with-git-filter-branch/", "published_at": "2020-03-15T23:00:10+00:00" }, { "id": "01a087a8-e43e-72ca-84e2-f5ce6c3179a8", "title": "Monitoring REST APIs with Custom JDK Flight Recorder Events", "url": "https://www.morling.dev/blog/rest-api-monitoring-with-custom-jdk-flight-recorder-events/", "published_at": "2020-01-29T14:30:00+00:00" } ] posts Claim your blog
Back to Gunnar Morling
Blog · corpus.blog/blogs/morling.dev/posts

Gunnar Morling

morling.dev

2026

2025

2024

2023

2022

2021

2020