Gunnar Morling @gunnarmorling.dev · 14/09/2026🤓 Weekend project: a note-reading drill. Notes I get wrong or am slow on show up more often. The kicker: it listens to my acoustic piano through the mic, which works pretty darn well. AI really lets you build things that you otherwise just wouldn't. github.com/gunnarmorlin... 151
Gunnar Morling @gunnarmorling.dev · 01/09/2026📝 Blogged: „Parquet File Write Support, Bloom Filters, Improved Performance: Hardwood 1.1.0.Beta1 Is Out“ Super-pumped about this one; finally I get to say „give it a try“ rather than „it’s coming soon“ when asked about write support in Hardwood 🥳. www.morling.dev/blog/parquet... 173
Gunnar Morling @gunnarmorling.dev · 22/07/2026📝 "A Fast Path for Fixed-Length Lists in Parquet" New blog dropped, discussing how we optimize reading effectively fixed-length lists (think vector embeddings) in Hardwood. Up to 3.9× faster, getting to the level of flat columns for larger lists. 👉 www.morling.dev/blog/fast-pa... 0110
Gunnar Morling @gunnarmorling.dev · 20/07/2026Spent the weekend on a fun one: you can now inspect Parquet files in your browser via #Hardwood, and the file never leaves your machine 🤓. Yes, that's right, the hardwood dive TUI compiled ahead-of-time to #WebAssembly, via GraalVM's Web Image. Try it yourself at hardwood.dev/experiments/...! 1160
Gunnar Morling @gunnarmorling.dev · 25/06/2026Today is the day: #Hardwood reaches 1.0 🚀! A from-scratch #Parquet library for the JVM, reading (and soon writing) Apache Parquet fast: multi-threaded at its core, with no mandatory dependencies. Java 21+, Apache 2.0, production-ready. Happy Parquet parsing! 1203
Gunnar Morling @gunnarmorling.dev · 01/06/2026📝 "Improved Column Reader API, First Cut of Geospatial Support: Hardwood 1.0.0.CR1 Is Available" Next stop (hopefully 😇): Hardwood 1.0 Final! 👉 www.morling.dev/blog/improve... 050
Gunnar Morling @gunnarmorling.dev · 21/05/2026The slides from my #Current London talks are up 🥳. - "Transactional Change Stream Processing With Debezium and Apache Flink" speakerdeck.com/gunnarmorlin... - "Hardwood: Building a Parquet Parser From Scratch (With a Little Help From AI)" speakerdeck.com/gunnarmorlin... 080
Gunnar Morling @gunnarmorling.dev · 05/05/2026Woot, woot: 2^8 🌟s for the #Hardwood GitHub repo 🥳! Might be a small step, but so great to see the interest in the project. #ApacheParquet github.com/hardwood-hq/... 0110
Gunnar Morling @gunnarmorling.dev · 30/04/2026📝 Blogged: "VARIANT Support, Interactive Parquet File TUI: Hardwood 1.0.0.Beta2 Is Out" The new version of the #Hardwood parser for Apache Parquet comes with support for VARIANT columns, a text-based UI for analysing Parquet files, better performance, and more. 👉 www.morling.dev/blog/variant... 181
Gunnar Morling @gunnarmorling.dev · 02/04/2026📝 "Hardwood Reaches Beta: S3, Predicate Push-Down, CLI, and More" Happy to announce Hardwood 1.0.0.Beta1, adding S3 support, predicate push-down for both local and remote files, Avro bindings, a CLI for inspecting Parquet files, a new website, and much more. 👉 www.morling.dev/blog/hardwoo... 092
Gunnar Morling @gunnarmorling.dev · 20/03/2026🥳 Just merged support to #Hardwood for reading Parquet files directly from S3! Including projections and predicate push-down (row group level), to fetch only the actually required column chunks, thus limiting the amount of data downloaded from the object store. Should be ready to ship next week! 061
Gunnar Morling @gunnarmorling.dev · 01/03/2026🍊 Woot, woot, #Hardwood made it to the HN front page! Be gentle, folks :) 0120
Gunnar Morling @gunnarmorling.dev · 27/02/2026"Are we using AI for building Hardwood? Absolutely. Is Hardwood vibe-coded? Absolutely not." Coding agents are incredibly powerful, but they're no magic wand. Sharing some experiences with using AI for building a relatively low-level code base like a Parquet parser in the #Hardwood announcement 👇. 241
Gunnar Morling @gunnarmorling.dev · 26/02/2026📝 "Hardwood: A New Parser for Apache Parquet" Today is the day--beyond excited to share the first release of #Hardwood, a new parser for the Apache #Parquet file format, optimized for minimal dependencies and great performance. 👉 www.morling.dev/blog/hardwoo... 0358
Gunnar Morling @gunnarmorling.dev · 25/02/2026Woot, woot, tackled my personal final boss, the Maven release plug-in, and we now have a fully automated release pipeline for hashtag#Hardwood. Gonna do some more testing, but we should be really close now to a first tagged release on Maven Central 🥳. Thx to @andresalmiray.com for all the help! 290
Gunnar Morling @gunnarmorling.dev · 19/02/2026Most folks think of #Debezium as source connectors only, but it also provides a JDBC sink for end-to-end data pipelines. Great post by the team at Zepto on their contributions, including an upsert reduction buffer to cut load on the sink database. OSS FTW 🚀! 👉 blog.zeptonow.com/debezium-at-... 070
Gunnar Morling @gunnarmorling.dev · 11/02/2026It never stops being funny how Claude Code is patting its own should for the amazing job it's doing 🤣. 1201
Gunnar Morling @gunnarmorling.dev · 22/01/2026Spent some time to make the #Hardwood parser for Parquet files a little faster; The engine parallelizes better now, a full parse of 720 MB of the NYC taxi ride data set--summing up the values from three columns--takes about 2.3 sec on my laptop. 👉 github.com/hardwood-hq/... 0110
Gunnar Morling @gunnarmorling.dev · 15/01/2026🤓 Just realized I haven't shared my "Streaming Examples" repo here before. It contains a growing list of runnable examples around data streaming (e.g. with Apache Kafka), stream processing (Apache Flink), change data capture (Debezium), etc. 👉 github.com/gunnarmorlin... 0160
Gunnar Morling @gunnarmorling.dev · 12/01/2026Made good progress with Hardwood, a minimal dependency parser for Apache Parquet. Reworked the API, moved to new GitHub org, almost all files from the parquet-testing harness pass now 🎉. Projections and predicate push-down are up next. 👉 github.com/hardwood-hq/... 0130
Gunnar Morling @gunnarmorling.dev · 24/12/2025Happy Holidays, and to those who celebrate: Merry Christmas 🎄🎁☃️! Enjoy the days ahead ("between the years", as we call it in German), and of course: yippee ki-yay! 0140
Gunnar Morling @gunnarmorling.dev · 19/12/2025🐘 Oh, that's nice: Postgres 19 is going to ship read-your-writes for standbys when using asynchronous replication, via a new command WAIT FOR LSN (similar to WAIT_FOR_EXECUTED_GTID_SET in MySQL). Very cool! www.postgresql.org/docs/devel/w... 1546
Gunnar Morling @gunnarmorling.dev · 07/12/2025📝 Blogged: "You Gotta Push If You Wanna Pull" Wrote up some thoughts on push vs. pull queries, materialized views, and why data duplication isn't something to fear. 👉 www.morling.dev/blog/you-got... 1164
Gunnar Morling @gunnarmorling.dev · 04/12/2025"Mini-LSM--Build a simple key-value storage engine in a week" This looks like a great learning resource for folks looking to get started with log-structured merge trees in #Rust 🦀, by Alex Chi Z. 👉 skyzh.github.io/mini-lsm/ 0253
Gunnar Morling @gunnarmorling.dev · 27/11/2025🗣️ "The combination of AVRO’s binary encoding and lz4 compression delivered exactly what we wanted: an order-of-magnitude smaller footprint, faster network transfers and reduced latency" Great post by Emiliano Mancuso about the benefits of Avro for CDC pipelines 👍. 👉 medium.com/fresha-data-... 0111
Gunnar Morling @gunnarmorling.dev · 25/11/2025📝 Blogged: "On Idempotency Keys" Discussing several options for ensuring exactly-once processing in distributed systems using idempotency keys, from UUIDs to monotonically increasing sequences. 👉 www.morling.dev/blog/on-idem... 2388
Gunnar Morling @gunnarmorling.dev · 20/11/2025📝 Blogged: "Building a Durable Execution Engine With SQLite" Exploring the fundamentals of DE, based on a minimal engine built from scratch, using #SQLite as an execution log, and modern #Java (👋 virtual threads). 👉https://www.morling.dev/blog/building-durable-execution-engine-with-sqlite/ 13510
Gunnar Morling @gunnarmorling.dev · 07/11/2025Having multiple copies of your data, specifically laid out for different access patterns, is completely fine. Desirable even. Just make sure to have one canonical source of truth and drive updates to all the copies from there. 3201
Gunnar Morling @gunnarmorling.dev · 03/11/2025Looks like that post is not going down too well over on the 🍊 site, LOL. Genuinely curious why someone would flag it, but I guess we'll never know. 181
Gunnar Morling @gunnarmorling.dev · 03/11/2025📝 Blogged: "'You Don't Need Kafka, Just Use Postgres' Considered Harmful" In which I'm arguing that both Postgres and Kafka are great tools for their respective purposes. But don't create your custom implementation of one on top of the other. 👉 www.morling.dev/blog/you-don... 33310
Gunnar Morling @gunnarmorling.dev · 17/10/2025I'm certainly not at the forefront of the AI craze, but this take is hilarious. Like, has this guy ever bought a computer or a TV? A plane ticket? Solar panels, or an electric car? 110
Gunnar Morling @gunnarmorling.dev · 13/10/2025"Beyond Indexes: How Open Table Formats Optimize Query Performance" Enjoyed reading this post by @vanlightly.bsky.social, explaining why secondary indexes, as known from OLTP systems, don't make sense for data lakehouse systems like Apache Iceberg. 👉 jack-vanlightly.com/blog/2025/10... 0102
Gunnar Morling @gunnarmorling.dev · 03/10/2025🏃 Tired but happy after finishing my longest race (12.3 km) so far, the Köhlbrandbrückenlauf. One of the few occasions throughout the year where you can cross the bridge over Hamburg's port without sitting in a car. What an amazing event! 5290
Gunnar Morling @gunnarmorling.dev · 02/10/2025:) To be fair, they discuss security briefly in the paper. Not sure though what to think about a central repository of decoders if the goal is to make documents self-descriptive. 121
Gunnar Morling @gunnarmorling.dev · 28/09/2025Great day out at the 10K Alstertallauf today. As always, started with a higher pace than planned. But then, kinda to my own surprise, I could actually keep it up. Not too fast in absolute terms, but faster than yesterday's me 😊. 2250
Gunnar Morling @gunnarmorling.dev · 17/09/2025📝 Blogged: "Let's Take a Look at... Lower Java Tail Latencies With ZGC" As #Java 25 got released earlier this week, I took the ZGC garbage collector for a spin, exploring how it lives up to its promise of sub-millisecond GC pause times. 👉 www.morling.dev/blog/lower-j... 0197
Gunnar Morling @gunnarmorling.dev · 11/09/2025"Peeking Inside the SQL Server Transaction Log" Enjoyed reading this post by Vojtech Juranek from the @debezium.bsky.social team, exploring the SQL Server TX log format. A potential alternative to polling SQL Server's CDC tables on the horizon? 👉 lnkd.in/eyKFXqZw debezium.io/blog/2025/09... 1151
Gunnar Morling @gunnarmorling.dev · 05/09/2025Don't be like Kenny--Java 25 is around the corner! 3373
Gunnar Morling @gunnarmorling.dev · 03/09/2025Now up on stage at @javazone.bsky.social: @josepaumard.bsky.social on Loom, Amber and other goodness in recent Java versions. 21 and 25 named by him "current and next LTS"--take that, @nipafx.dev ;) To be fair, that Non LTS slide followed. I'm confused 😇. 240
Gunnar Morling @gunnarmorling.dev · 02/09/2025Arriving on-site for @javazone.bsky.social ! So glad to be back for another year, this time with a lightning talk on the pitfalls around #Postgres replication slots (tomorrow, 9:40 am) and a breakout session about the the outbox pattern (Thursday, 10:20 am). 👉 2025.javazone.no/en/program 1120
Gunnar Morling @gunnarmorling.dev · 05/08/2025"When not to use Tokio"--Loving this section in the docs of Tokio (tokio.rs/tokio/tutorial), a runtime for building async applications in Rust. There are no silver bullets, and it's vital to understand when a given library or tool adds value, and when it does not. 1293
Gunnar Morling @gunnarmorling.dev · 05/08/2025📝 Blogged: "Postgres Replication Slots: Confirmed Flush LSN vs. Restart LSN" Exploring the difference between these two LSNs of PG replication slots, which is a common source for confusion. 👉 www.morling.dev/blog/postgre... 091
Gunnar Morling @gunnarmorling.dev · 25/07/2025😱 You see this distribution of response times from running 500 requests/sec against some microservice for 120 sec. What do you do to in order to investigate what's going on? 1170
Gunnar Morling @gunnarmorling.dev · 17/07/2025📝 Blogged: "Converting Future to CompletableFuture With Java Virtual Threads" Quick write-up on a very nice use case for #Java virtual threads: bridging the gap between legacy Future-based APIs and modern CompletableFuture composition patterns. 👉 www.morling.dev/blog/future-... 0123
Gunnar Morling @gunnarmorling.dev · 13/07/2025Yum, they look great! Tomatoes here are starting to look good too, pepper will still take a bit. 110
Gunnar Morling @gunnarmorling.dev · 11/07/2025Wow, TIL that LISTEN/NOTIFY in Postgres requires a global lock when committing transactions issuing a NOTIFY. Consider listening to the WAL via logical replication as an alternative with no impact on the write path. www.recall.ai/blog/postgre... 2196
Gunnar Morling @gunnarmorling.dev · 08/07/2025📝 "Mastering Postgres Replication Slots: Preventing WAL Bloat and Other Production Issues" Sharing some best practices for managing #Postgres replication slots, as for instance used by the #Debezium connector for Postgres, in my latest blog post 🥳. 👉 www.morling.dev/blog/masteri... 080
Gunnar Morling @gunnarmorling.dev · 26/06/2025🥳 Woot, woot, no better way to start the day: just got the acceptance note for @javazone.bsky.social '25! One of my absolute favorite conferences, can't wait to be back this year, with my talk "Ins and Outs of the Outbox Pattern"! 🗓️ Sept 3-4, 2025 📌 NOVA Spektrum, Lillestrøm 🇳🇴 👉 lnkd.in/ejf7J29m 041
Gunnar Morling @gunnarmorling.dev · 22/06/2025☀️ Perfect weather for a true highlight of the cycling season: the "Fahrradsternfahrt", including the rare opportunity to cross the Köhlbrand bridge in the harbour of Hamburg not sitting in a car, together with thousands of other cyclists 🚴. 0170