<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
<title>vøiddo blog</title><link>https://voiddo.com/blog</link>
<description>Notes on scrapers, trading bots and small tools. How they are built and how they fail.</description>
<language>en</language>
<item><title>Spring cleaning in October: what we retired and why</title><link>https://voiddo.com/blog/spring-cleaning-what-we-retired</link><guid isPermaLink="true">https://voiddo.com/blog/spring-cleaning-what-we-retired</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>We asked three questions of everything we had published: does it work, do we use it, is it true. Here is what did not survive, and what the cull taught us.</description></item>
<item><title>The best of a hundred coin flips looks like talent</title><link>https://voiddo.com/blog/best-of-a-hundred-coin-flips</link><guid isPermaLink="true">https://voiddo.com/blog/best-of-a-hundred-coin-flips</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Try enough strategies and one of them will look brilliant, even when every one is a coin toss. The number of tries is part of the result, and it is the part nobody prints.</description></item>
<item><title>robots.txt readers disagree, and the built-in one is the odd one out</title><link>https://voiddo.com/blog/robots-txt-readers-disagree</link><guid isPermaLink="true">https://voiddo.com/blog/robots-txt-readers-disagree</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Python&#x27;s built-in reader takes the first matching rule and ignores wildcards. The standard takes the longest match. We ran both on 12,000 random files and listed where they split.</description></item>
<item><title>Cron does not mean what you think it means</title><link>https://voiddo.com/blog/cron-does-not-mean-what-you-think</link><guid isPermaLink="true">https://voiddo.com/blog/cron-does-not-mean-what-you-think</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Seven ways a crontab line does something other than what it reads like: step values that restart, two day fields that mean &quot;or&quot;, a percent sign that eats your command.</description></item>
<item><title>The price is a string: reading money off a web page</title><link>https://voiddo.com/blog/the-price-is-a-string</link><guid isPermaLink="true">https://voiddo.com/blog/the-price-is-a-string</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Shops print the same number a dozen ways. A careful parser reads what is clear, leaves the rest empty and never fills a gap with a plausible guess.</description></item>
<item><title>Slippage is a fee nobody prints</title><link>https://voiddo.com/blog/slippage-is-a-fee-nobody-prints</link><guid isPermaLink="true">https://voiddo.com/blog/slippage-is-a-fee-nobody-prints</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>The exchange prints its fee. It does not print the spread, the thin book or the stop that fills worse than its trigger. A test that leaves them out is flattering itself.</description></item>
<item><title>The key is already public: what to do after you commit a secret</title><link>https://voiddo.com/blog/the-key-is-already-public</link><guid isPermaLink="true">https://voiddo.com/blog/the-key-is-already-public</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Deleting the commit is not the fix. Revoke the key first, check who used it, then clean up and put a scanner in front of the next push.</description></item>
<item><title>A timestamp without a zone is a guess</title><link>https://voiddo.com/blog/a-timestamp-without-a-zone-is-a-guess</link><guid isPermaLink="true">https://voiddo.com/blog/a-timestamp-without-a-zone-is-a-guess</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Scraped dates arrive as &quot;2026-03-08 02:30&quot; with nothing else. Some of those times never happened, some happened twice, and the gap between two cities moves during the year.</description></item>
<item><title>Retry-After is a sentence, not a suggestion</title><link>https://voiddo.com/blog/retry-after-is-a-sentence</link><guid isPermaLink="true">https://voiddo.com/blog/retry-after-is-a-sentence</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>When a site says &quot;slow down&quot;, it often says how long to wait. Reading that line, backing off with jitter and knowing when to give up is most of polite scraping.</description></item>
<item><title>Start from the task, not the strategy</title><link>https://voiddo.com/blog/start-from-the-task</link><guid isPermaLink="true">https://voiddo.com/blog/start-from-the-task</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>A trading bot project begins with what the bot is for, what it may lose and what it must never do. The signal comes last, and it is the smallest part of the work.</description></item>
<item><title>What Apify taught us about publishing scrapers</title><link>https://voiddo.com/blog/what-apify-taught-us</link><guid isPermaLink="true">https://voiddo.com/blog/what-apify-taught-us</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Seven things we learned about publishing on the Apify Store: the automated tester, identity checks, rate-limited visibility changes, pay per result and the first &quot;users&quot;.</description></item>
<item><title>A stop that lives in your bot is not a stop</title><link>https://voiddo.com/blog/a-stop-in-your-bot-is-not-a-stop</link><guid isPermaLink="true">https://voiddo.com/blog/a-stop-in-your-bot-is-not-a-stop</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>When the process crashes, the server reboots or the connection drops, a stop that exists only in the bot&#x27;s memory does not exist. The stop belongs on the exchange, at entry.</description></item>
<item><title>How a scraper job goes, from reading the site to the daily check</title><link>https://voiddo.com/blog/how-a-scraper-job-goes</link><guid isPermaLink="true">https://voiddo.com/blog/how-a-scraper-job-goes</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Read the site, build, test on real pages, ship one clean schema, check it every day, rebuild when the site changes. Most of the work is the last two.</description></item>
<item><title>&quot;Did my order fill?&quot;: designing for the unknown</title><link>https://voiddo.com/blog/did-my-order-fill</link><guid isPermaLink="true">https://voiddo.com/blog/did-my-order-fill</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>A timeout is not a failure. It is a third state between success and failure, and the safe answer to &quot;still unknown&quot; is to stop opening new positions.</description></item>
<item><title>robots.txt first, and what happens when a site says stop</title><link>https://voiddo.com/blog/robots-txt-first</link><guid isPermaLink="true">https://voiddo.com/blog/robots-txt-first</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Every URL is checked against the site&#x27;s robots.txt before it is fetched. When a site puts up a wall, the run stops and says so in plain words.</description></item>
<item><title>The fee line eats the grid</title><link>https://voiddo.com/blog/the-fee-line-eats-the-grid</link><guid isPermaLink="true">https://voiddo.com/blog/the-fee-line-eats-the-grid</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Grid and DCA bots advertise small, steady profits. Each step&#x27;s gross edge is often smaller than the round trip fees plus the spread, and a backtest without fees can get the sign of the result wrong.</description></item>
<item><title>What a scraper can and cannot do</title><link>https://voiddo.com/blog/what-a-scraper-can-and-cannot-do</link><guid isPermaLink="true">https://voiddo.com/blog/what-a-scraper-can-and-cannot-do</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>A plain list for anyone thinking of buying one: what is realistic, what is not, and what we will tell you no to.</description></item>
<item><title>Testing a trading bot against a fake exchange</title><link>https://voiddo.com/blog/testing-a-bot-against-a-fake-exchange</link><guid isPermaLink="true">https://voiddo.com/blog/testing-a-bot-against-a-fake-exchange</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>The dangerous code paths in a trading bot are the rare ones: timeouts, partial fills, rejects, duplicate ids. A fake exchange that fails on command lets you hit each of them on purpose, every time the tests run.</description></item>
<item><title>Proxies: use the cheapest tier that answers</title><link>https://voiddo.com/blog/proxy-ladder</link><guid isPermaLink="true">https://voiddo.com/blog/proxy-ladder</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Direct first, then datacenter, then residential. Residential traffic is billed by the gigabyte, so the ladder is a cost control as much as a technique.</description></item>
<item><title>Why every strategy has to beat a coin toss</title><link>https://voiddo.com/blog/every-strategy-has-to-beat-a-coin-toss</link><guid isPermaLink="true">https://voiddo.com/blog/every-strategy-has-to-beat-a-coin-toss</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Run the same sizing, stops and fees with seeded random entries across many seeds and you get a distribution of luck. A strategy is interesting only if it clearly sits outside it.</description></item>
<item><title>What we will not scrape, and why</title><link>https://voiddo.com/blog/what-we-will-not-scrape</link><guid isPermaLink="true">https://voiddo.com/blog/what-we-will-not-scrape</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>A list of sites we decided not to build for. The reasons are general, which is the point: most of them are not about technique.</description></item>
<item><title>Walk-forward testing against in-sample optimization</title><link>https://voiddo.com/blog/walk-forward-vs-in-sample</link><guid isPermaLink="true">https://voiddo.com/blog/walk-forward-vs-in-sample</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Optimizing on all of the history finds the best past, not a good future. Fit on one window, judge on the next untouched one, roll forward, and count how many variants you tried.</description></item>
<item><title>Kill switches people actually re-arm</title><link>https://voiddo.com/blog/kill-switches-people-actually-rearm</link><guid isPermaLink="true">https://voiddo.com/blog/kill-switches-people-actually-rearm</guid><pubDate>Tue, 20 Oct 2026 12:00:00 +0000</pubDate><description>Soft pauses and hard halts: which conditions may clear themselves, which need a person, and why a re-arm should leave a written reason behind.</description></item>
</channel></rss>
