Working notes from building these apps. Mostly about protocols that behave differently from their documentation, and about what a host or a piece of plant equipment actually did when we measured it.
Newest first.
Crops a portrait to Korean ID photo sizes, keeps the original background for ID purposes, and saves a 413×531 file for online submission or a 4×6 print sheet.
Reads Korean and English business cards on the device, splits them into name, company, title, phone and email fields for you to check, then opens a new contact or shares a vCard.
Reads Korean and English receipts on the device, asks you to confirm merchant, date, amount and currency, keeps monthly totals separate by currency, and exports confirmed records as CSV.
A Korean ID photo can be cropped on the phone without uploading it, but the app only checks that exactly one face is present, keeps the aspect ratio, and checks resolution and file size — head size, pose and background rules stay with you. The official sizes, how the crop works, what gets saved, and the limits of version 1.
A business card can go from a photo to Android Contacts without a server or a contacts permission — if every recognized value is treated as a guess you check. What the review screen shows when a contact QR code disagrees with the print, what reaches the contacts app, and what stays out of scope.
Receipt recognition can stay on the phone, but "on-device" covers recognition only. This note walks through the flow from scan to confirmed record, what to check against the image, what the monthly totals and CSV contain, and the limits of version 1.
The big files that the Recycle Bin and Disk Cleanup never catch, found at a glance as areas on a WinDirStat treemap.
Windows has apt-style installers too. Built-in winget is the axis, and here is when to reach for Chocolatey or Scoop.
Put commands that have nothing to do with building into a Makefile and use it as a per-folder command list. The pattern that turns targets into the help text, and three Windows traps.
Explorer and the terminal are good at different things. Not a question of which to pick, but of building three bridges that remove the cost of crossing between them.
A chat window and a terminal agent part ways over where the result ends up - in a conversation or in a file. Pick the terminal side and the commands you already built get used as they are.
Why an alias is useful, where it stops working with an if statement or a change of directory, and the test for moving up to a function or a script file.
Why ln -s produces a copy instead of a link, and the four settings you need for real symbolic links in Git Bash.
Close the window with a build running and the work keeps going, and the split layout you set up comes back exactly as it was.
Past twenty leader shortcuts, your config and your memory stop matching. Put the key definitions in one table and generate the help screen from it.
AI is good at judgement and programs are good at repetition. One test that separates the two, and how to turn the program side into a tool the AI then calls.
The whole WezTerm configuration I actually use, with one file settling character width, screen splits and shell switching.
Using worktrees as parallel work slots, then collapsing all of them into one straight line with a single script.
Three worktree commands remove the waste of stashing your work and rebuilding from scratch every time you switch branches.
Keep one original instead of copying CLAUDE.md and AGENTS.md, have the other paths point at it, and split per agent inside that single file.
A Bluetooth keyboard sends keys rather than Unicode text. Korean input works by decomposing each syllable into Korean 2-set keystrokes and letting the host IME compose them.
The five standard keyboard actions behind a no-companion-app presentation remote, plus the focus, sleep, and one-way HID limits that explain missed commands.
How a phone trackpad becomes relative pointer movement, three mouse buttons, a wheel, and ordered Shift+wheel reports for horizontal scrolling over Bluetooth HID.
Combine TCP, mDNS, SSDP, WSD, NetBIOS, and vendor evidence without mistaking one weak clue for an identity—or a missing reply for an absent device.
Scan the local /24 for a selected port, keep credentials out of discovery links, and verify first-use or changed SSH host keys before authenticating.
SSDP discovery, approved SSAP pairing, a separate pointer socket, and why Wake-on-LAN needs a MAC address saved before the TV enters deep standby.
One UDP broadcast on port 2007 makes every LS PLC on the segment announce its own address — no subnet sweep. What it sends, and what to check when nothing answers.
What ports 102, 502, 44818, 9600, 5007 and 48898 imply, why a port number is a candidate rather than an answer, and where a discovery tool should stop.
Three subjects, because those are the three the apps run into.
What a host actually receives when a phone advertises itself as a keyboard or mouse — report descriptors, held-key state, and why Korean text has to be decomposed into jamo keystrokes rather than sent as finished syllables.
Identifying what answers on an unfamiliar subnet: which port implies which protocol, how industrial equipment responds to a discovery request, and where a scan should stop for safety rather than for lack of ability.
Where a plan was dropped because the hardware disagreed with it. These notes include the ones that failed — the measurement is the point, not the feature.