Martin Grüner | Software maker
grunersoftware.bsky.social
Martin Grüner | Software maker
@grunersoftware.bsky.social
Independent software maker building practical desktop tools for developers and app creators.
4/ The JSON tree rendered every node: 200,002 rows and 1.4M DOM nodes for a 20k-item file. Virtualized, it's ~80 rows. The lesson: my benchmarks only tested easy inputs. Profile the ugly ones.
September 28, 2026 at 12:33 PM
3/ Two sneaky O(n²) loops: checking item order in JSON arrays (20k items: 490 → 96 ms), and word overlap on long lines. A 100k-word minified line went from 102 s to 0.23 s.
September 28, 2026 at 12:33 PM
2/ My PDF text extractor rebuilt every font, re-parsing its ToUnicode map, on every single page. Caching fonts per document made extraction 4× faster, with byte-identical output across my PDF test corpus.
September 28, 2026 at 12:33 PM
1/ Tabs now remember their result. Switching back checks the files' fingerprints (a few ms) and only compares again if something changed on disk. Result on screen in under 50 ms instead of seconds.
September 28, 2026 at 12:33 PM
The black-and-white treatment suits the photos, and the two categories are immediately clear. The logo is hard to read at that size, though. I’d make it larger or move “pets, people, events, prints” into normal page text.
September 16, 2026 at 7:32 AM
Much better default. The group labels and indentation make the long menu easier to scan, while the ungrouped select still looks compact. This is the first version I wouldn’t immediately restyle.
September 16, 2026 at 7:31 AM