Sign in

Vladimir Chemeris | Indie Dev

@chama.pro
80 followers 233 following 378 posts

Solo dev. Small, sharp tools for Mac/iOS/Android: networks, devices, privacy, all on-device. Building in public: the numbers and the flops. 🛠️ chama.pro

PostsRepliesMedia
Vladimir Chemeris | Indie Dev @chama.pro · 09/10/2026
I sent 5,000 QoS 1 messages to Mosquitto 2.1.2 while my persistent-session subscriber was offline. All PUBACKs were RC:0. Back online, it got the first 1,000. The broker dropped the newest 4,000: max_queued_messages defaults to 1000 per client. #homelab #homeassistant
Terminal output from Mosquitto 2.1.2. A subscriber with a persistent session subscribes to the topic sensors and goes offline. A publisher sends 5,000 QoS 1 messages and gets 5,000 PUBACKs with RC:0. The subscriber reconnects and receives 1,000 messages. The broker's counter $SYS/broker/publish/messages/dropped reads 4000.
100
Vladimir Chemeris | Indie Dev @chama.pro · 07/10/2026
Eight people on Mastodon didn't answer my Bluesky replies. I checked their servers, and none of my replies made it there. Bridgy Fed relays a Bluesky account after its owner follows @ap.brid.gy. I did, and the next two people I replied to answered within 4 minutes. #buildinpublic #fediverse
020
Vladimir Chemeris | Indie Dev @chama.pro · 05/10/2026
On Redis 8.10 I gave a key a 600 s TTL, then ran SET on it: TTL -1. SET XX, SET GET, GETSET and MSET do the same. APPEND, INCR, RPUSH and HSET keep it. In INFO keyspace, keys minus expires counts what will never expire. Add KEEPTTL and the TTL stays. #devops #linux
000
Vladimir Chemeris | Indie Dev @chama.pro · 02/10/2026
I called a stranger's blog dead. It still answers a bare curl with a Cloudflare 520 and a browser with 18 KB of page: the curl string is blocked. Of 129 links from dev feeds, 128 answered both agents the same. A user agent block reaches you as a 5xx. #webdev #devops
010
Vladimir Chemeris | Indie Dev @chama.pro · 28/09/2026
One TCP stream, 200 Mbit path, 50 ms RTT: iperf3 read 190 Mbit clean. Add 0.1% loss one way and five 60 s runs gave 20 to 45, median 30. Eight streams over the same loss brought back 111 and 121. One packet in a thousand costs a single stream most of the link. #homelab
121
Vladimir Chemeris | Indie Dev @chama.pro · 25/09/2026
My 43 iOS simulators hold 49 GB. Apps and their data: 2.6 GB. Lock screen posters: 21 GB, almost all .atx textures on the iOS 27 devices, 14 GB on one. Then 10 GB of assets, 7 of logs, 5 of caches. xcrun simctl erase resets one. storageradar.app #iosdev #macos
storageradar.app
Xcode Simulator & CoreSimulator Taking Up Space on Mac | StorageRadar
What CoreSimulator is, whether you can delete the CoreSimulator folder, and how to delete simulators in Xcode safely — plus the difference between simulator runtimes and device data, so you reclaim Mac disk space without breaking your iOS dev setup.
000
Vladimir Chemeris | Indie Dev @chama.pro · 23/09/2026
Three days into my ClickHouse client, App Store Connect refused its name: another developer reserved it, and the store shows no such app. The .com and .app were gone too. Nine days on I renamed it all: 311 files, one commit. Create the app record first. #indiedev #iosdev
051
Vladimir Chemeris | Indie Dev @chama.pro · 21/09/2026
mtr at 5 probes a second: 78% loss on both lab routers, 0% at the target. Linux defaults to one ICMP time-exceeded a second per host; each router counted the other 235 of 300 as rate-limited. Loss that ends before the last hop is that limit. iperf3app.com #homelab
iperf3app.com
How to Test Network Performance in a Homelab (7 Tools) - iPerf3 Blog
How to test network performance in a homelab, one layer at a time: which tool to use for throughput, latency, the NIC and the ISP, from iperf3 to mtr.
000
Vladimir Chemeris | Indie Dev @chama.pro · 18/09/2026
I pulled 1,031 Spotify links from 7 hours of Bluesky posts. 75% carried si=, the code Spotify ties to the account that shared. Substack: 92% carried r=, and all 156 accounts with several links kept one code. Delete everything after the ? and both still open. #privacy
000
Vladimir Chemeris | Indie Dev @chama.pro · 16/09/2026
App Review rejected my app under 4.3(a): similar binary, metadata or concept to apps from a terminated developer account. I added the legal links it also flagged, cited the Android version and the site, and asked what matched. The app passed the next review. #indiedev
030
Vladimir Chemeris | Indie Dev @chama.pro · 14/09/2026
iperf3 -u -b 1G between two containers on one host lost 8% and 16%. The server's netstat -su counted each lost datagram as a receive buffer error: its socket overflowed. At 100 Mbit, zero. Check that counter before you swap cables. iperf3app.com #homelab #linux
iperf3app.com
How to Measure Jitter and Packet Loss With iPerf3 - iPerf3 Blog
Video calls stutter while speed tests look fine. Run an iperf3 UDP test from the device you take calls on, and learn which jitter and loss numbers mean trouble.
000
Vladimir Chemeris | Indie Dev @chama.pro · 11/09/2026
ClickHouse TTL is a merge on a cooldown. A one second TTL cleared my first insert a second later. The next insert into the same partition was still there four minutes later: merge_with_ttl_timeout is 14400 s between TTL merges per partition. OPTIMIZE FINAL clears it. #devops
clickhouse-client session. A MergeTree table with TTL ts plus one second. The first insert of a million rows at 13:28:10 counts zero rows one second later. A second insert at 13:28:24 still counts one million rows at 13:32:24, four minutes later. system.part_log shows a single TTLDeleteMerge at 13:28:11. system.merge_tree_settings shows merge_with_ttl_timeout equal to 14400.
101
Vladimir Chemeris | Indie Dev @chama.pro · 09/09/2026
pg_stat_activity does not fail on missing rights. Without pg_monitor other sessions show null state and <insufficient privilege> as query, and an alert on it stays green. Managed Postgres comes without superuser, so I draw missing rights as a state and name the role. #devops
psql session as a plain role named oncall. Selecting pid, usename, state and query from pg_stat_activity for user app returns one row with an empty state and <insufficient privilege> as the query. pg_terminate_backend(90) fails with permission denied to terminate process, and the DETAIL names the pg_signal_backend role. After a superuser runs GRANT pg_monitor TO oncall, the same select shows state active and the running query SELECT pg_sleep(300).
000
Vladimir Chemeris | Indie Dev @chama.pro · 07/09/2026
Ping 1.1.1.1 while a backup uploads. Two containers, tc as the router: idle 0.05 ms. Through a plain FIFO at 20 Mbit the ping reads 220 ms for the whole upload. Swap the FIFO for cake at the same 20 Mbit: 0.3 ms, same throughput. iperf3app.com #homelab #networking
iperf3app.com
How to Measure Jitter and Packet Loss With iPerf3 - iPerf3 Blog
Video calls stutter while speed tests look fine. Run an iperf3 UDP test from the device you take calls on, and learn which jitter and loss numbers mean trouble.
221
Vladimir Chemeris | Indie Dev @chama.pro · 04/09/2026
I denied my own publish with a Mosquitto ACL and the client read it as a success. At QoS 1 under MQTT 3.1.1 the PUBACK came back RC:0, the same code a delivered one gets. Reconnect as MQTT 5: RC:135, Not authorized. QoS 0 has no PUBACK to carry it. #homeassistant #homelab
Terminal output. The same denied MQTT publish, run twice against a Mosquitto broker. Under MQTT 3.1.1 the client receives PUBACK RC:0, the success code. Under MQTT 5 the same publish returns PUBACK RC:135 and the client prints "Not authorized". Below, the mosquitto 2.1.2 broker log shows "Denied PUBLISH" for both.
000
Vladimir Chemeris | Indie Dev @chama.pro · 02/09/2026
My deploy skipped IndexNow from March to August. No key, no error. It wrote the cache file anyway, so the log read clean. Bing showed up two weeks after the fix, then DuckDuckGo on the same index. They have sent 18 sessions since, Google 9. #buildinpublic #indiedev
Dot strip chart of daily sessions to iperf3app.com, 1 July to 1 September 2026, three rows. Bing has a single dot on 8 July, then nothing until 21 August, after which it appears almost every day. DuckDuckGo has no dots at all until 23 August, then six in ten days. Google organic appears throughout the window. A dashed line marks the IndexNow fix on 7 August.
031
Vladimir Chemeris | Indie Dev @chama.pro · 31/08/2026
Default iperf3 runs one stream. One stream is one thread. Two containers on one host, three runs each: one stream held 16.6 Gbps, four held 57, eight held 53. The host has four cores. Match -P to yours before blaming the switch. iperf3app.com #homelab #networking
iperf3app.com
10 GbE Home Network? Here's How to Test It Properly - iPerf3 Blog
A 10 GbE home network needs the right test setup or it will look slower than gigabit. Here is how to measure 10 GbE throughput with iperf3 and what to expect.
121
Vladimir Chemeris | Indie Dev @chama.pro · 28/08/2026
Your cache is slow and the slowlog is empty. Its threshold defaults to 10 ms. A hundred calls at 9 ms cost 0.9 s and none of them log. Drop slowlog-log-slower-than to 1000 µs. Slowlog times exclude the network, so add redis-cli --latency. cachedeck.com #devops
cachedeck.com
The Slowlog Is Empty and the Cache Still Feels Slow: CacheDeck Blog
An empty slowlog means nothing crossed the 10 ms default threshold, not that nothing is slow. Measured commands, thresholds, and what to check next.
000
Vladimir Chemeris | Indie Dev @chama.pro · 26/08/2026
Postgres negotiates TLS inside its own protocol. The client sends SSLRequest over a plain socket, then upgrades that same socket. PostgresNIO builds the TLS handler itself from an NIOSSLContext, so there is no seam for a custom verification callback. 1/3 #swift
120
Vladimir Chemeris | Indie Dev @chama.pro · 24/08/2026
A five-minute check cannot see a 90-second outage. The probe has to fire while the thing is down, which happens on 90 seconds out of every 300. Set the interval to half the shortest outage you care about. iperf3app.com #homelab #networking
iperf3app.com
Why Your Uptime Percentage Misses the Outage - iPerf3 Blog
A 99.9% month can hide the outage that dropped your call. Here is how the check interval and the average lose it, and what to log instead.
000
Vladimir Chemeris | Indie Dev @chama.pro · 21/08/2026
Your duplicate finder says 40 GB. You delete, and free space moves by 2. On APFS a copy is often a clone: two files, one set of blocks, and ls reports full size for both. Hard links you catch with ls -li. Trust df before and after. storageradar.app #macos #indiedev
StorageRadar duplicate evidence: 318 groups, 38.1 GB logical reclaimable, 38.1 GB estimated physical, with physical savings labeled as estimates
020
Vladimir Chemeris | Indie Dev @chama.pro · 19/08/2026
Two weeks of traffic to my app's site: ChatGPT sent 23 sessions, Google search sent 9. Small numbers on a small site, and the order still surprised me. I write for extraction now. Answer in the first paragraph, steps in a list, numbers in a table. #buildinpublic #indiedev
020
Vladimir Chemeris | Indie Dev @chama.pro · 17/08/2026
Your monitor says 99.9% uptime. The call still dropped. Across a day that leaves a minute and a half of dead air. Log every probe with a timestamp and count the longest run of consecutive failures. Spread the same loss thin and nobody notices. #homelab #networking
130
Vladimir Chemeris | Indie Dev @chama.pro · 14/08/2026
Support says the line is fine. Rule out your Wi-Fi with a LAN test, then hit the same remote endpoint every hour and log it. A dip that lands at the same evening hour survives a modem reboot, and support has to answer that graph. [iperf3app.com](iperf3app.com/blog/prove-i...) #homelab #networking
iperf3app.com
How to Prove Your ISP Is Throttling You, With Real Data - iPerf3 Blog
You can prove ISP throttling with iperf3, but only if you set the test up correctly. Here is what throttling looks like, and how to gather evidence.
010
Vladimir Chemeris | Indie Dev @chama.pro · 12/08/2026
I count reviews on a category's newest apps before I build. Nine Postgres clients shipped since last year have zero reviews. The paid desktop brand has four in eleven years. A nine-year incumbent ships my feature list, so I put health first, the table browser second. #indiedev
030
Vladimir Chemeris | Indie Dev @chama.pro · 10/08/2026
Speed test says 500 Mbps and the call stutters. Jitter and packet loss break calls, and that test averages both away. Run iperf3 in UDP mode across your LAN and read jitter and lost datagrams. Clean on LAN puts the wobble upstream. iperf3app.com #devops #homelab
000
Vladimir Chemeris | Indie Dev @chama.pro · 09/08/2026
I ship small tools for Mac and iOS, and I post the measurements behind them: which hashtags deliver nothing, what a launch with zero ratings costs, how to reach a human at App Store review. Nine apps, on-device, no accounts, no servers. chama.pro
010
Vladimir Chemeris | Indie Dev @chama.pro · 07/08/2026
A SELECT with no WHERE is melting ClickHouse. Your laptop is at home. ProbeDeck reads system.processes over your bastion, sorted by elapsed. Pick the one eating the box, confirm, kill it. Credentials stay in the Keychain. Watching is free. apps.apple.com/app/apple-st... #devops #sre #dba
apps.apple.com
ProbeDeck: ClickHouse® Client App - App Store
Download ProbeDeck: ClickHouse® Client by Vladimir Chemeris on the App Store. See screenshots, ratings and reviews, user tips, and more apps like ProbeDeck:…
000
Vladimir Chemeris | Indie Dev @chama.pro · 05/08/2026
I shipped my Redis client at $14.99. One week, zero sales. The app asks for production credentials. I was charging people before they could check whether it was safe to hand them over. Reading is free now. Writing costs $19.99 once. apps.apple.com/app/apple-st...
apps.apple.com
CacheDeck: Redis® Client App - App Store
Download CacheDeck: Redis® Client by Vladimir Chemeris on the App Store. See screenshots, ratings and reviews, user tips, and more apps like CacheDeck: Redis®…
110
Vladimir Chemeris | Indie Dev @chama.pro · 03/08/2026
Your ISP test says 900 Mbps. The back bedroom still buffers. It measured the path to Ookla, never your Wi-Fi. Point iperf3 the other way: Mac as server, phone as client. Walk to the bedroom. Watch the number drop. apps.apple.com/app/apple-store/id67…
000
Vladimir Chemeris | Indie Dev @chama.pro · 31/07/2026
Video call drops, you reboot the router. Blind guess. Ping your gateway, your ISP's first hop, and the remote host. When the call dies, one spikes. That is your culprit. Net Ping watches all three, 24/7. apps.apple.com/us/app/netping-monit…
000
Vladimir Chemeris | Indie Dev @chama.pro · 29/07/2026
Redrawing my MQTT app, I read the one-star reviews of the apps beating it. One sentence keeps coming back: "It won't connect to my server. Same credentials as on my laptop. Just won't connect." So a failed connection gets its own screen now, naming the layer that broke. 🛠️
010
Vladimir Chemeris | Indie Dev @chama.pro · 27/07/2026
On-device AI means shipping the model. Mine is 2.6GB. Apple's reviewer waited past ten minutes, then rejected the app under Guideline 4 for being slow. So I stopped blocking launch on it. Install is a sheet you can dismiss, the download resumes, and the app stays usable.
120
Vladimir Chemeris | Indie Dev @chama.pro · 24/07/2026
Most "private" translators still send your words to a server to translate them. This one runs Gemma on your phone. Type it, photograph a sign, or say it. Once you install the model, it works in airplane mode, and your words never leave the device. aitranslator.chama.pro/?utm_source=…
Offline AI Translator on iPhone, Chat tab: heading 'Private conversations on device', a card to install the on-device Basic Model with note that translation tools keep working while it downloads, and tabs for Chat, Translate, Activity, Models, Settings.
000
Vladimir Chemeris | Indie Dev @chama.pro · 13/07/2026
macOS "About This Mac → Storage" lies. It buckets 40GB of caches, dead Docker layers, and stale simulator runtimes into a gray "System Data" blob. I got tired of guessing what eats my SSD, so I built a Mac app that shows the exact paths and deletes nothing without your ok. storageradar.app
StorageRadar Dev Cleanup screen: Xcode DerivedData at /Users/user/Library/Developer/Xcode/DerivedData (27 GB), CoreSimulator data (25 GB), and iOS device support (24 GB), each tagged Safe or Caution with a review-before-Move-to-Trash action.
031
Vladimir Chemeris | Indie Dev @chama.pro · 10/07/2026
CacheDeck is live. A Redis client for the 2am on-call. Connect via SSH tunnel or TLS. Browse keys with SCAN, never KEYS. Destructive commands need the exact key name. Creds stay in device-only Keychain, no relay backend. $14.99 once. apps.apple.com/us/app/cachedeck/id6…
Three CacheDeck screens: connecting to a Redis cluster over TLS and an SSH tunnel, browsing keys as a tree with SCAN, and a delete dialog that requires typing the exact key name to confirm.
000
Vladimir Chemeris | Indie Dev @chama.pro · 08/07/2026
Hot take: for a solo dev, a handful of tiny paid apps beats one big freemium SaaS. Less support load, no server bills, and when one app goes flat another one pops. Change my mind.
110
Vladimir Chemeris | Indie Dev @chama.pro · 07/07/2026
I'm a solo dev building small, sharp tools for Mac, iOS, and Android: a network speed tester, a Mac disk analyzer, an MQTT client, an offline AI translator, and more. Everything runs on-device, no accounts, no servers. Building it in public, numbers and flops included. Follow along 🛠️
120
Vladimir Chemeris | Indie Dev @chama.pro · 06/07/2026
Rebuilt the Mac version of my iPerf3 app from the ground up for 2.0. New native desktop layout, a Home dashboard that charts throughput live, and one tap to run your Mac as an iperf3 server. apps.apple.com/app/apple-store/id67…
iPerf3 for Mac 2.0. Home dashboard during a live test: speedometer at 192 Mbps and a live bandwidth trend chart.
000