Damien
cforthecurious.com
Damien
@cforthecurious.com
Principal Software Engineer in scale-up making collaboration software.

Web technologies, microservices, domain-driven design and distributed systems.
Finally finished my TodoMVC implementation in Java Swing, including a reasonable architecture.

Complex stuff:
- Layout rules
- Build custom components that compose well
- State and event handling, nested observables, leaky event handlers - OUCH

Result: I appreciate declarative UI frameworks A LOT!
January 22, 2025 at 8:34 PM
Really got some cleanup to do next, since this ROUGHLY looks like what I wanted, but has become impossible to navigate:
January 12, 2025 at 3:55 PM
Current status: learning #java Swing by trying to reimplemented "TodoMVC".

I'm wasting a huge amount of time trying to lay things out well and find myself thinking "if only I had CSS ...".

However, I wonder if CSS is actually easier / more straightforward to learn (or if it is just my experience).
January 12, 2025 at 7:50 AM
Having fun with #java, JFreeCharts and Swing (currently exploring the performance of my chess game algorithm with custom tooling).

Amazed at how quickly I was able to throw together a decent UI!
January 4, 2025 at 7:45 PM
Looking forward to my evening read for the net couple of days :)
December 20, 2024 at 7:59 PM
Kind of happy with the state of the API docs for my chess engine side project:

Taken me about two hours to get everything document. I've only documented what wasn't obvious from the names.

I've also tried to focus on the relationships between packages and classes.
December 14, 2024 at 2:06 PM
I mean ...

"@param obj an {@code Object}."

Really?
December 13, 2024 at 10:51 AM
And thanks to ArchUnit, I can now:

1. make sure that I don't accidentally entangle my packages again
2. explicitly state the rationale for my decisions

(Still missing similar tools in many languages other than #java)
December 13, 2024 at 10:37 AM
Chess project:

The dependencies started out as a steaming mess.

But after massaging them and thanks to dependency inversion, I've now created something easy to reason about:

"A game consists of two players, which use pieces that are placed on a board."
December 13, 2024 at 9:53 AM
I'm a big fan of the Pomodoro technique too!

If anyone's interested in the technique, maybe my personal sketch notes can be useful to you too:
December 13, 2024 at 8:36 AM
Which one shall I choose this morning ...?

#java
December 13, 2024 at 8:30 AM
Insights:
- Looking at a situation using a different medium (sketch over text) yields different insights
- At first random doodling, without much clarity, then suddenly a breakthrough of understanding
- Sketches can enable self-reflection (e.g. why did I draw the "C-Suite" in this particular way)?
December 9, 2024 at 1:55 PM
Insights:
- Looking at a situation using a different medium (sketch over text) yields different insights
- At first random doodling, without much clarity, then suddenly a breakthrough of understanding
- Sketches can enable self-reflection (e.g. why did I draw the "C-Suite" in this particular way)?
December 9, 2024 at 1:55 PM
OMG I found the culprit. It was, of course, me being stupid.

I probably shouldn't flip the source and target variables between the slow and fast versions ...

I'm surprised that none of the 25k games I iterated through noticed the defect ...
December 6, 2024 at 9:56 AM
When the morning begins with debugging JIT compilation ...

(Great article explaining the output format: gist.github.com/rednaxelafx/...)
December 6, 2024 at 9:11 AM
When you extract a non-polymorph method in #java and this leads to a 25% slowdown - because the method can no longer be inlined by HotSpot.

"failed to inline: callee is too large"

:scratches head:
December 5, 2024 at 1:17 PM
A couple of lines of code that are difficult to decipher are not that bad if:

1. they have limited side effects
2. they are hidden behind a nice abstraction
3. the structure surrounding them is clear

Example: I can live with this messy implementation, as long as intent+context is clear:
December 4, 2024 at 12:27 PM
Just looked at some of my notes about the book "Good Strategy, Bad Strategy" (highly recommended) - and figured the notes might be useful for other folks #dddesign

Many things are called a strategy, but few things are. These three elements should be present: Diagnosis, Guiding Policy, Actions
December 3, 2024 at 1:20 PM
How funny it is that the Forbes website just gives me this when trying to access an article about software engineering ...
December 3, 2024 at 9:53 AM
Using tactical #dddesign, your code can looks almost like the specification written by domain experts.

This helps to detect all sorts of bugs, subtle and less subtle ones, because you can read the code with a domain expert and ask: "does that make sense?"

An example from my current chess project.
November 29, 2024 at 3:10 PM
One of the things that have helped me to make #gtd (Getting Things Done) work is to separate my projects into distinct "modes".

Rules:
- I can only be in one mode at a time
- I must schedule at least one hour of time for each mode

It's a slight modification of areas that helps me prioritize better
November 27, 2024 at 9:37 AM
A couple of months ago, I've sat down and wrote a naive program to compute the GCD of two numbers on an ALTAIR 8800 simulator (Euclidean Algorithm).

It's been tough, but so, so insightful - suddenly a lot of things make sense. Definitely a fun project!

altairclone.com
November 27, 2024 at 9:34 AM
🏆 First JMH benchmark written and executed - hooray!

Next up: making sense of the output :D
November 26, 2024 at 10:50 AM
@polypragmatist.bsky.social do you have some example, or resource you could send me to?

Because I haven't found anything that looks similar to what I'm looking for, e.g. this SwiftUI example with for loops:
November 26, 2024 at 10:47 AM
@woj-tek.bsky.social and here is what the Position code looks like right now (at least the bits I consider relevant)
November 18, 2024 at 8:11 PM