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.

Macos hdmi connected TV sound management problem

How to solve macos hdmi sound control problem

So I got my Mac Mini M4 from Amazon for £500 and started using it. I had so many problems with the shortcuts I normally use even Ctrl+A wasn’t working, I had to use Win+A, and many other shortcuts were different. One of the biggest problems was using the sound keys on the keyboard. On Linux they worked fine: sound up and down controlled the output volume. But on macOS it didn’t work. Very strange policy Apple has macOS doesn’t allow the user to control end devices connected through HDMI. ...

November 21, 2025 · 1 min · Özkan Pakdil
MacOs on QEMU KVM

MacOS on debian QEMU KVM

From Frustration to Breakthrough: Running macOS on KVM For years, I chased the dream of running macOS in a virtual machine. On Windows, I tried VMware and VirtualBox countless times with different tutorials and blogs. Each attempt ended in frustration: crashes, unsupported hardware, endless configuration rabbit holes. It felt like a goal always just out of reach. And finally I found https://github.com/kholia/OSX-KVM it has the readme which explains the steps for setting up. ...

November 13, 2025 · 2 min · Özkan Pakdil
Paint, a lightweight image editor for quick edits

Paint, a lightweight image editor for quick edits

Why I built Paint Whenever I wanted to make a very small edit on my Debian laptop, crop a screenshot, add a quick arrow, or block out a small area, the system only had GIMP for editing images. Powerful, but heavy and slow for tiny, frequent tasks. I wanted something nimble: quick to open, easy to use, and focused on the common one-off edits people do dozens of times a day. ...

November 12, 2025 · 5 min · Özkan Pakdil
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