Welcome to Özkan Pakdil’s Blog

👋 Hello! I’m Özkan Pakdil, a software engineer with professional experience since 2004.

  • I specialize in Java development and C# but consider myself a full-stack developer with expertise in backend, database, server-side development, UI, and UX.

  • My technical journey spans various technologies including Spring Boot, Kubernetes, React, and many more. I’m a Linux enthusiast since 1999 and enjoy optimizing system performance.

  • This blog contains articles about technologies I use and my experiences in software development. Feel free to explore my projects on GitHub.

Comparison functional code vs imperative code

Java imperative vs functional in 2025 — revisiting a 2015 microbenchmark

Quick numbers (avg; smaller is faster) I (imperative nested): 3.28 µs I2 (imperative freq-map): 1.93 µs F (streams grouping): 127.37 µs FP (parallel streams grouping): 599.28 µs Winner: I2 — imperative freq-map Note: These are sample numbers from the run below on my machine; yours will differ. I/F labels mirror the 2015 post for a simple visual compare. == 2015-style harness (I:/F: lines) == ozkan@ozkan-debian:~/projects/ozkanpakdil.github.io/scripts/compare-2015-25$ ./run.sh javac 25 I:5372 F:22032373 I:5816 F:186352 F:144816 F:134903 F:107685 I:4919 I:4903 I:4698 I:4147 F:104857 == 2025 benchmark summary (fastest → slowest) == ...

September 29, 2025 · 3 min · Özkan Pakdil
Diagnosing a slow Windows Forms screen by adding a missing SQL index

The First Production Performance Problem I Faced (and How I Solved It)

In 2004, I was a new math graduate(Junior Dev) working on an in‑house CRM that was evolving into an ERP. It was a Windows Forms application built with VB.NET and SQL Server (think .NET Framework 1.0/1.1 days - Or we were using that version). One day, a form field became painfully slow. The screen generated a mandate_id that could later become an order_id. The ID was created automatically in the database—an auto-increment primary key plus a few validation checks. Unfortunately, pulling that ID started taking 2–3 minutes. Sales and marketing teams were often on the phone with customers, waiting for the number before they could continue. It was a terrible experience. ...

September 21, 2025 · 2 min · Özkan Pakdil
How to run the agent (generic Java) and where the metadata is used

GraalVM Native Image Agent — reachability metadata: how to run it, where files go

In short Run the app java -agentlib:native-image-agent=config-output-dir=./graalcnf/ -jar target/app.jar Copy the generated files from ./graalcnf/ to the project under src/main/resources/META-INF/native-image/<groupId>/<artifactId>/ Build the native image mvn -ntp package -Pnative -DskipTests TLDR Native Image needs reachability metadata so it can include dynamic features your app uses at run time (reflection, resources, proxies, serialization, JNI). The simplest way to get this metadata is to run your app on the JVM with the Native Image Agent and then use the generated JSON files during the native build. ...

September 16, 2025 · 2 min · Özkan Pakdil
Testcontainers with PostgreSQL and SSL

How to use Testcontainers with PostgreSQL and SSL

Using Testcontainers with PostgreSQL over SSL/TLS (with client certificates) This guide walks you through running PostgreSQL in Testcontainers with SSL enabled and client-certificate authentication (verify-full). It explains: How to generate a CA, server, and client certificates. How to prepare certificate/key files and the right formats/permissions. How to configure PostgreSQL (postgresql.conf and pg_hba.conf) to require client certificates. How to wire everything up in Testcontainers. How to connect from Java (JDBC) and optionally from the psql CLI. Everything here is based on the code in this repository, particularly: ...

September 12, 2025 · 7 min · Özkan Pakdil
Pdf arrenger in linux is the best pdf tool

How PDF Arranger Made My ILR Passport PDF a Breeze

When it comes to preparing documents for important applications like the UK’s ILR (Indefinite Leave to Remain), efficiency and ease of use are everything. Recently, I needed to create a PDF from my passport pictures, and after some trial and error, I found a workflow that saved me a ton of time and frustration — all thanks to a fantastic open-source tool called PDF Arranger. The Struggle with LibreOffice Draw At first, I tried using LibreOffice Draw to assemble my passport photos into a PDF. Unfortunately, it was painfully slow, and arranging the imported images was a hassle. The interface just wasn’t built for this kind of task, and I quickly realized I needed a better solution. ...

September 9, 2025 · 3 min · Özkan Pakdil