www.morling.dev Open in urlscan Pro
2606:50c0:8000::153  Public Scan

Submitted URL: http://www.morling.dev/
Effective URL: https://www.morling.dev/
Submission: On March 03 via api from US — Scanned from DE

Form analysis 2 forms found in the DOM

<form id="myForm">
  <input type="text" id="inputSearch" name="q" placeholder="Search..." onfocus="warmUp(this)">
  <button type="submit" id="buttonSubmitSearch" style="line-height: normal;"><i id="iconSearch" class="fa fa-search"></i></button>
</form>

<form id="myFormMobile">
  <input type="text" id="inputSearchMobile" name="q" placeholder="Search..." onfocus="warmUp(this)">
  <button type="submit" id="buttonSubmitSearchMobile" style="line-height: normal;"><i id="iconSearchMobile" class="fa fa-search"></i></button>
</form>

Text Content

GUNNAR MORLING


RANDOM MUSINGS ON ALL THINGS SOFTWARE ENGINEERING

 * 
 * 
 * 
 * 
 * 

 * Blog
 * Projects
 * Conferences
 * Podcasts
 * About




GUNNAR MORLING


RANDOM MUSINGS ON ALL THINGS SOFTWARE ENGINEERING

 * 
 * 
 * 
 * 
 * 

 * Blog
 * Projects
 * Conferences
 * Podcasts
 * About




RECENT POSTS

Feb 20, 2024

LAST UPDATED COLUMNS WITH POSTGRES

In many applications it’s a requirement to keep track of when a record was
created and updated the last time. Often, this is implemented by having columns
such as created_at and updated_at within each table. To make things as simple as
possible for application developers, the database itself should take care of
maintaining these values automatically when a record gets inserted or updated.

Read More...

Feb 10, 2024

FILTERING PROCESS OUTPUT WITH TEE

Recently I ran into a situation where it was necessary to capture the output of
a Java process on the stdout stream, and at the same time a filtered subset of
the output in a log file. The former, so that the output gets picked up by the
Kubernetes logging infrastructure. The letter for further processing on our end:
we were looking to detect when the JVM stops due to an OutOfMemoryError, passing
on that information to some error classifier.

Read More...

Feb 4, 2024

1BRC—THE RESULTS ARE IN!

Oh what a wild ride the last few weeks have been. The One Billion Row Challenge
(1BRC for short), something I had expected to be interesting to a dozen folks or
so at best, has gone kinda viral, with hundreds of people competing and
engaging. In Java, as intended, but also beyond: folks implemented the challenge
in languages such as Go, Rust, C/C++, C#, Fortran, or Erlang, as well databases
(Postgres, Oracle, Snowflake, etc.), and tools like awk. It’s really incredible
how far people have pushed the limits here. Pull request by pull request, the
execution times for solving the problem layed out in the challenge — aggregating
random temperature values from a file with 1,000,000,000 rows — improved by two
orders of magnitudes in comparison to the initial baseline implementation. Today
I am happy to share the final results, as the challenge closed for new entries
after exactly one month on Jan 31 and all submissions have been reviewed.

Read More...

Jan 1, 2024

THE ONE BILLION ROW CHALLENGE

Update Jan 4: Wow, this thing really took off! 1BRC is discussed at a couple of
places on the internet, including Hacker News, lobste.rs, and Reddit. For folks
to show-case non-Java solutions, there is a "Show & Tell" now, check that one
out for 1BRC implementations in Rust, Go, C++, and others. Some interesting
related write-ups include 1BRC in SQL with DuckDB by Robin Moffatt and 1 billion
rows challenge in PostgreSQL and ClickHouse by Francesco Tisiot. Thanks a lot
for all the submissions, this is going way beyond what I’d have expected! I am
behind a bit with evalutions due to the sheer amount of entries, I will work
through them bit by bit. I have also made a few clarifications to the rules of
the challenge; please make sure to read them before submitting any entries.
Let’s kick off 2024 true coder style— I’m excited to announce the One Billion
Row Challenge (1BRC), running from Jan 1 until Jan 31. Your mission, should you
decide to accept it, is deceptively simple: write a Java program for retrieving
temperature measurement values from a text file and calculating the min, mean,
and max temperature per weather station. There’s just one caveat: the file has
1,000,000,000 rows!

Read More...

Dec 17, 2023

TRACKING JAVA NATIVE MEMORY WITH JDK FLIGHT RECORDER

Update Dec 18: This post is discussed on Hacker News 🍊 As regular readers of
this blog will now, JDK Flight Recorder (JFR) is one of my favorite tools of the
Java platform. This low-overhead event recording engine built into the JVM is
invaluable for observing the runtime characteristics of Java applications and
identifying any potential performance issues. JFR continues to become better and
better with every new release, with one recent addition being support for native
memory tracking (NMT).

Read More...

Nov 14, 2023

CAN DEBEZIUM LOSE EVENTS?

This question came up on the Data Engineering sub-reddit the other day: Can
Debezium lose any events? I.e. can there be a situation where a record in a
database get inserted, updated, or deleted, but Debezium fails to capture that
event from the transaction log and propagate it to downstream consumers?

Read More...

Feb 28, 2023

FINDING JAVA THREAD LEAKS WITH JDK FLIGHT RECORDER AND A BIT OF SQL

The other day at work, we had a situation where we suspected a thread leak in
one particular service, i.e. code which continuously starts new threads, without
taking care of ever stopping them again. Each thread requires a bit of memory
for its stack space, so starting an unbounded number of threads can be
considered as a form of memory leak, causing your application to run out of
memory eventually. In addition, the more threads there are, the more overhead
the operating system incurs for scheduling them, until the scheduler itself will
consume most of the available CPU resources. Thus it’s vital to detect and fix
this kind of problem early on.

Read More...

Jan 15, 2023

GETTING STARTED WITH JAVA DEVELOPMENT IN 2023 — AN OPINIONATED GUIDE

27 years of age, and alive and kicking — The Java platform regularly comes out
amongst the top contenders in rankings like the TIOBE index. In my opinion,
rightly so. The language is very actively maintained and constantly improved;
its underlying runtime, the Java Virtual Machine (JVM), is one of, if not the
most, advanced runtime environments for managed programming languages. There is
a massive eco-system of Java libraries which make it a great tool for a large
number of use cases, ranging from command-line and desktop applications, over
web apps and backend web services, to datastores and stream processing
platforms. With upcoming features like support for vectorized computations
(SIMD), light-weight virtual threads, improved integration with native code,
value objects and user-defined primitives, and others, Java is becoming an
excellent tool for solving a larger number of software development tasks than
ever before.

Read More...

Jan 5, 2023

OH... THIS IS PROD?!

I strongly believe that you should avoid connecting to production environments
from local developer machines as much as possible. But sometimes, e.g. in order
to analyse some specific kinds of failures, doing so can be inevitable. Now, if
this is the case, I really, really want to be sure that I’m aware of the
environment I am working in. I absolutely want to avoid a situation as in the
catchy title of this post, when for instance you realize that you just ran some
integration test against a production environment. In the context of working
with the AWS CLI tool this means I’d like to be aware of the currently active
profile by means of coloring my shell accordingly. Here’s how I’ve set this up
using iTerm2 and zsh.

Read More...

Jan 3, 2023

IS YOUR BLOCKING QUEUE... BLOCKING?

Java’s BlockingQueue hierarchy is widely used for coordinating work between
different producer and consumer threads. When set up with a maximum capacity
(i.e. a bounded queue), no more elements can be added by producers to the queue
once it is full, until a consumer has taken at least one element. For scenarios
where new work may arrive more quickly than it can be consumed, this applies
means of back-pressure, ensuring the application doesn’t run out of memory
eventually, while enqueuing more and more work items.

Read More...

 * 
 * Next page →

© 2019 - 2024 Gunnar Morling | Licensed Under Creative Commons BY-SA 4.0