RSSAmplifier

Blog

tanin

Writing about Scala, Play Framework, and startups.

tanin.nanakorn.comRSS feed ↗15 posts

Latest posts

Set up a Claude DOCX sub-agent and reduce cost by 50%

Or how to set up a subagent in Claude Code and Cowork.

Ruby vs. Java vs. TypeScript: my experience on building a Cowork DOCX plugin

Ruby is used for the first prototype. Java is the easiest to write and has the most mature libraries with zero issues. TypeScript has been chosen due to its ecosystem where Claude Desktop may potentially provide MCPB support which reduces the binary size by 99%.

Support per-field update with Scala Slick

I want to show you how I support per-field update with Slick + Postgres. Note This blog serves as a documentation for PlayFast , an opinionated production-ready PlayFramework template that makes you productive. It bothered me for a long while that I had to make an update function for each

Integrating a log management platform with Dokploy

I spent too much time figuring out how to integrate a log management platform with Dokploy. I was looking at 3 different platforms: NewRelic, OpenObserve, and Papertrail. Eventually, I've chosen NewRelic due to the combination of UX (haha) and ease of integration. OpenObserve seems good but doesn'

Teach your child how to think

I've just finished "Teach Your Child How to Think" by Edward de Bono. It was published in 1994. I found this book while going through things at my childhood home back in Bangkok. Since my daughter was a bit over 3 years old right now, I

How to test in-app purchases on a Kotlin Multiplatform Mac app

There are 2 ways of testing an in-app purchase: (1) using a local storekit config and (2) using a sandbox testing account. Using a local StoreKit config requires an xcode project. Since a Kotlin Multiplatform Mac app doesn't generate one, we cannot use this approach. A KMP

Publishing a Java-based database tool on Mac App Store (MAS)

In the past month, I was working on publishing a Java app to Mac App Store (MAS). It's quite a journey. While Java has come so far in terms of packaging a desktop app, it also lacks in some other critical parts. Sometimes I wonder how others publish

How to debug why a Mac app crashes

The first thing I'd do is to run the app in Terminal: $ cd /Application $ ./YourApp.app/Contents/MacOS/YourApp Then, we might see some useful outputs. If we don't see anything useful, then we should utilize Console.app that comes with MacOS.

ClickHouse with PlayFramework, Slick, and Evolutions

I wanted to show you how to add another database in PlayFramework that uses Slick and Evolutions. That database is ClickHouse , which also requires a little bit of special handling. In the end, it works out quite cleanly. I'll later integrate it into PlayFast , an opinionated production-ready

Set up local ClickHouse on Mac for development

It took me 1-2 hours to set up ClickHouse to work with a JDBC connector in Java. The ClickHouse documentation is somewhat obscure. For example, it shows all the ports from a ClickHouse server: https://clickhouse.com/docs/guides/sre/network-ports But the Server Settings page doesn'

Mocking java.time.Instant.now() in PlayFramework

It gets a bit tricky to make the production code clean while making it convenient to mock a static method in a multi-threaded setting.

Virtual List: Overcoming the 16,777,200px Limitation of Chrome

Summary Many virtual list libraries like react-window , svelte-virtual-list , and TanStack's Virtual cannot handle the total height larger than 16,777,200px due to Chrome's limitation. If you have a list of 1M rows where each row is 28px, you won't be

What not to do when publishing a Svelte component locally

Summary Using local dependency like "your-package": "file:../some-path" or npm link doesn&apos;t work with Svelte because you will have duplicated Svelte runtimes. What works is to use npm pack and then npm install <path_to_tgz> Bundlers look for Svelte

java.sql.SQLException: No suitable driver found

This seems to happen sometimes in test and dev. After digging into java.sql.DriverManager , which is responsible for loading all drivers, it seems to use ServiceLoader to discover all subclasses of java.sql.Driver . Apparently, sometimes it fails in test. No idea why. To fix it, we can register

A minimal working example of text ellipsis

The example is in Tailwind: <div class="w-[200px]"> <div class="w-full"> <ul class="w-full"> <li class="w-full"> <a href="overflow-hidden text-ellipsis whitespace-nowrap">text&

tanin · RSS Amplifier