tanin
Writing about Scala, Play Framework, and startups.
Java / JVMDatabasesMobile / iOS / AndroidSoftware / engineering practice
- Posts
- 55 from 2 Jan 2017 to 2 Oct 2026
- Posting
- monthly (14 in the last year)
- Kind
- personal blog
- Feed
- https://tanin.nanakorn.com/rss/
2026 8
- prevents me from logging into Vanguard
- My experience using JOOQ with Scala and Postgres
- Postgres AT TIME ZONE 'UTC' does NOT do what you think it does
- Set up a Claude DOCX sub-agent and reduce cost by 50%
- Ruby vs. Java vs. TypeScript: my experience on building a Cowork DOCX plugin
- Support per-field update with Scala Slick
- Integrating a log management platform with Dokploy
- Teach your child how to think
2025 29
- How to test in-app purchases on a Kotlin Multiplatform Mac app
- Publishing a Java-based database tool on Mac App Store (MAS)
- How to debug why a Mac app crashes
- ClickHouse with PlayFramework, Slick, and Evolutions
- Set up local ClickHouse on Mac for development
- Mocking java.time.Instant.now() in PlayFramework
- Virtual List: Overcoming the 16,777,200px Limitation of Chrome
- What not to do when publishing a Svelte component locally
- java.sql.SQLException: No suitable driver found
- A minimal working example of text ellipsis
- Java's HttpClient doesn't resolve localhost to IPv6
- An Omakase-style PlayFramework Template: PlayFast
- How to build a JDK on ARM-based Mac
- The "SLF4JServiceProvider not found" issue
- Obstacles in notarizing a Kotlin-Multiplatform-based Mac app
- Why we like what we make
- Gall's law
- Use KeyDown for shortcuts
- In zsh, `set -o vi` interferes with `history-search-end`
- How to solve a sliding puzzle
- I like using a Google Group for recording meeting notes
- My experience migrating a PlayFramework app to Scala 3
- One more reason to choose Postgres over MySQL
- Set up Programmable Tooltip to open Sublime with a specific file
- Set up the vim mode in IntelliJ to be aware of CamelCase
- My secret productivity app when I worked at Stripe
- Set up IntelliJ to run scalatest's FunSpec
- The correct way to model a timestamp range is [start, end)
- Building the load more mechanism for an infinite scroll