Tag
Programming
22 articles
2026
Iterator Pattern
Explains the GoF design pattern Iterator and its relevance in modern programming languages.
Learning How to Use Claude Code Agent View
Provides an overview and usage guide of the Agent View feature added to Claude Code, based on official documentation and videos.
Open a GitHub Repository in the Browser from the Terminal
Using the GitHub CLI's gh browse command to open the current repository directly in a browser from the terminal.
Weekly Report (5)
Weekly Report
Weekly Report (4)
Weekly Report
Weekly Report (3)
Weekly Report
Weekly Report (2)
Weekly Report
Weekly Report (1)
Weekly Report
About the `<` Symbol for Inheritance
Using the question of why Ruby's inheritance uses `<` as a starting point to intuitively connect it to subtyping in type theory.
2025
Cleaning Branches After Squash and Merge
Why squash-and-merged branches can't be bulk-deleted with git pull --prune, and why -D is needed instead of -d.
Impressions After Improving My Blog with Cursor
Reflecting on how using Cursor to improve this blog's code changed my perception of how practical LLM-assisted coding has become.
Learning GitHub Copilot Agent Mode
Looking at Vibe Coding as context, then learning how to use GitHub Copilot's Agent mode and sharing impressions from trying it.
Reader Monad
Reimplementing the Reader monad sample from "All About Monads" in Scala using Cats.
A Way to Remember compare/compareTo
An easy way to remember what negative, zero, and positive return values mean for compare/compareTo, comparing docs across languages.
2024
A Gentle Tour of Java Optional for People Who Want to Understand It Better
Explaining what map/flatMap on Optional and Stream really mean, building toward the concept of a Functor from scratch.
Trying ForkJoinPool
Exploring how ForkJoinPool, the engine behind CompletableFuture and Stream's parallel processing, works by writing code with it.
Relearning Scala (Environment Setup)
Setting up an Emacs development environment while relearning Scala 3, with some personal thoughts on why Scala fell out of fashion.
About Optional
Framing Java's Optional as part of the lineage of Haskell's Maybe, and clarifying how to use it in line with its design intent.
Pitfalls of Collectors#toMap
Explaining why Collectors#toMap throws on duplicate keys when converting a Stream to a Map, and how to avoid it with a merge function.
Bean Validation @Pattern Specification
Explaining why ^ and $ are unnecessary in the regexp of Bean Validation's @Pattern annotation, debunking a commonly copied wrong example.
The Trap of Stream#toList()
A detailed look at the difference between Stream#toList() and Collectors.toList() in Java 16, and the trap of its immutable result.
2023
Building a Blog with Astro
Trying Astro v3 for this blog and checking what changed since v1/v2, including relative-path image webp conversion and CJK line-break fixes.