DEV Community

Joe Lin profile picture

Joe Lin

Founder & Developer at BeGoodTool. Building lightweight, lightning-fast web & desktop tools across Vue, Node.js, Electron, and C#. Turning complex workflows into effortless experiences! ✨

Pronouns

He / Him / His

Work

Founder & Developer at BeGoodTool

Why a precise image color picker needs two canvases (one to read pixels, one to draw the loupe)

Why a precise image color picker needs two canvases (one to read pixels, one to draw the loupe)

Comments
4 min read

Want to connect with Joe Lin?

Create an account to connect with Joe Lin. You can also sign in below to proceed if you already have an account.

Already have an account? Sign in
Counting text is harder than it looks (especially once Chinese and emoji show up)

Counting text is harder than it looks (especially once Chinese and emoji show up)

3
Comments
4 min read
I expected image pixelation to mean per-pixel math — this tool mostly just redraws the same rectangle twice

I expected image pixelation to mean per-pixel math — this tool mostly just redraws the same rectangle twice

8
Comments
4 min read
Browser OCR got a lot better once I stopped feeding Tesseract the raw image

Browser OCR got a lot better once I stopped feeding Tesseract the raw image

7
Comments
5 min read
The hard part of an image cropper is keeping two coordinate systems from drifting apart

The hard part of an image cropper is keeping two coordinate systems from drifting apart

6
Comments
5 min read
East Asian nominal age isn't just age + 1 (the real boundary is Lunar New Year)

East Asian nominal age isn't just age + 1 (the real boundary is Lunar New Year)

4
Comments
4 min read
Kaomoji aren't a special format — they're just Unicode strings (and that changes how a copy-paste tool works)

Kaomoji aren't a special format — they're just Unicode strings (and that changes how a copy-paste tool works)

7
Comments
4 min read
Random pairing gets surprisingly tricky once you try to avoid repeats

Random pairing gets surprisingly tricky once you try to avoid repeats

4
Comments
5 min read
Why pasted text keeps breaking search and formatting (and the regexes I ended up using to clean it)

Why pasted text keeps breaking search and formatting (and the regexes I ended up using to clean it)

5
Comments 2
6 min read
The hard part of batch date conversion isn't formatting — it's deciding what `01/02/2024` means

The hard part of batch date conversion isn't formatting — it's deciding what `01/02/2024` means

3
Comments
7 min read
The fastest part of this fuzzy duplicate finder is the comparison it never does

The fastest part of this fuzzy duplicate finder is the comparison it never does

8
Comments
6 min read
I thought masking PII for AI prompts was a regex problem — the restore step was the real design constraint

I thought masking PII for AI prompts was a regex problem — the restore step was the real design constraint

8
Comments
7 min read
A batch file renamer looks simple until you have to decide what counts as “the filename”

A batch file renamer looks simple until you have to decide what counts as “the filename”

3
Comments
6 min read
The higher-paying offer can still lose — the exact assumptions in my job-offer comparator

The higher-paying offer can still lose — the exact assumptions in my job-offer comparator

5
Comments
6 min read
A debt snowball vs avalanche slider sounds obvious — until you try to define 50/50 in code

A debt snowball vs avalanche slider sounds obvious — until you try to define 50/50 in code

5
Comments
6 min read
I thought a “go car-free” calculator would be simple — then I hit depreciation, 萬-units, and a very opinionated compound-growth model

I thought a “go car-free” calculator would be simple — then I hit depreciation, 萬-units, and a very opinionated compound-growth model

5
Comments
6 min read
Why this DCA vs lump-sum simulator caps a single month’s crash at 95%

Why this DCA vs lump-sum simulator caps a single month’s crash at 95%

5
Comments
6 min read
Why “0% installments” and loans shouldn’t share the same formula (I only really got it after building a comparator)

Why “0% installments” and loans shouldn’t share the same formula (I only really got it after building a comparator)

4
Comments
6 min read
Why simplified Chinese's 干 becomes three different traditional characters (and how a converter has to guess right)

Why simplified Chinese's 干 becomes three different traditional characters (and how a converter has to guess right)

1
Comments
5 min read
Why most QR codes you generate silently use the least efficient encoding mode (I only noticed after building a generator)

Why most QR codes you generate silently use the least efficient encoding mode (I only noticed after building a generator)

3
Comments 3
5 min read
Why a tumbling dice animation has to know the result before it ever starts spinning

Why a tumbling dice animation has to know the result before it ever starts spinning

2
Comments
5 min read
The 4% rule doesn't control your withdrawals — it just sizes the target (I didn't realize this until I built a FIRE calculator)

The 4% rule doesn't control your withdrawals — it just sizes the target (I didn't realize this until I built a FIRE calculator)

2
Comments
5 min read
I set out to build the app that would save the world. Embedding YouTube turned out to be the easy 10%.

I set out to build the app that would save the world. Embedding YouTube turned out to be the easy 10%.

8
Comments
7 min read
I didn't get rent-vs-buy math until I modeled where the down payment goes if you don't buy

I didn't get rent-vs-buy math until I modeled where the down payment goes if you don't buy

3
Comments
6 min read
How I built a highly profitable web platform, with zero backend code to keep my server costs at $0.

How I built a highly profitable web platform, with zero backend code to keep my server costs at $0.

10
Comments
10 min read
loading...