programming:interaction
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| programming:interaction [2026/08/27 12:34] – Self-review: replace an unmeasured 'almost no methods section contains' with a claim that can be checked (no reporting checklist asks for it). Authored by Claude karel.kubicek.claude | programming:interaction [2026/08/27 12:39] (current) – Reviewer 4 (generic): add 'Interacting is not free' — click fraud, form side effects, load multiplied by 3x, and the visibility trade-off — and a Monday-morning default design; replace the unaudited 'none of them justified anywhere' with the measured just karel.kubicek.claude | ||
|---|---|---|---|
| Line 8: | Line 8: | ||
| <WRAP important> | <WRAP important> | ||
| - | Three things | + | Three things |
| - **"We crawled 10,000 websites" | - **"We crawled 10,000 websites" | ||
| - **Ten subpages is the folk default and it is not where the curve flattens.** The median stated '' | - **Ten subpages is the folk default and it is not where the curve flattens.** The median stated '' | ||
| - | - **Navigating is not interacting.** A great deal of what a privacy measurement counts — lazily-loaded ad slots, content behind a tab or an accordion, anything a form submission triggers — does not exist at '' | + | - **Navigating is not interacting.** A great deal of what a privacy measurement counts — lazily-loaded ad slots, content behind a tab or an accordion, anything a form submission triggers — does not exist at '' |
| </ | </ | ||
| Line 47: | Line 47: | ||
| | '' | | '' | ||
| - | '' | + | '' |
| There is also a terminology trap that a keyword search will not survive: in the phishing, malvertising and spam literature **" | There is also a terminology trap that a keyword search will not survive: in the phishing, malvertising and spam literature **" | ||
| Line 74: | Line 74: | ||
| Two readings, and they point in different directions. | Two readings, and they point in different directions. | ||
| - | The good news: **about four in five web crawls say something about depth**, and that has been true since 2010. Compare it with statefulness, | + | The good news: **about four in five web crawls say something about depth**, and that has been roughly |
| The bad news: the second and third numbers barely move. Sixteen years after the field started worrying about this, **the share that goes beyond the landing page is not rising**, and **only 104 of 857 web crawls (12.1%) put a number on how many subpages** — 102 of the 417 on the depth axis, 24.5%. "We also crawled subpages" | The bad news: the second and third numbers barely move. Sixteen years after the field started worrying about this, **the share that goes beyond the landing page is not rising**, and **only 104 of 857 web crawls (12.1%) put a number on how many subpages** — 102 of the 417 on the depth axis, 24.5%. "We also crawled subpages" | ||
| Line 95: | Line 95: | ||
| | 100 or more | 17 | 16.3% | | | 100 or more | 17 | 16.3% | | ||
| - | Median 10, and it does not settle: per four-year bucket the median runs 5, 5, 10, 15, 5 on 8, 11, 37, 33 and 15 papers, which is small-sample noise rather than a trend. The five commonest values overall are 5 (14 papers), 3 (12), 10 (12), 1 (11) and 20 (8) — all small, all round, and none of them justified | + | Median 10, and it does not settle: per four-year bucket the median runs 5, 5, 10, 15, 5 on 8, 11, 37, 33 and 15 papers, which is small-sample noise rather than a trend. The five commonest values overall are 5 (14 papers), 3 (12), 10 (12), 1 (11) and 20 (8) — all small and all round. Whether they are // |
| The honest summary is that **the field converged on "a handful of subpages" | The honest summary is that **the field converged on "a handful of subpages" | ||
| Line 239: | Line 239: | ||
| Read off the last row. Each additional capability found exactly one thing the previous one could not, and no amount of extra depth substitutes for the scroll, nor extra scrolling for the click. **These are not degrees of the same knob.** A design that goes three levels deep without scrolling still misses everything below the fold. | Read off the last row. Each additional capability found exactly one thing the previous one could not, and no amount of extra depth substitutes for the scroll, nor extra scrolling for the click. **These are not degrees of the same knob.** A design that goes three levels deep without scrolling still misses everything below the fold. | ||
| + | |||
| + | ==== Interacting is not free, and it is not only your cost ==== | ||
| + | |||
| + | Everything above says //do more//. Before you scale it to ten thousand sites, four consequences that a landing-page crawl does not have: | ||
| + | |||
| + | * **A click on an ad is an ad impression somebody pays for.** Ad clicks are billed. A crawl that clicks indiscriminately at scale generates click fraud, and the money comes out of an advertiser' | ||
| + | * **A form submission has a side effect on a real system.** Filling and submitting forms at scale sends real newsletter signups, real support tickets, real account registrations and real search queries against production databases. This is why EvoCrawl' | ||
| + | * **Interaction multiplies your load by more than you expect.** The Khaleesi comparison above is 3× the requests from the same list. Rate limits, politeness delays and any '' | ||
| + | * **You are more visible, and being detected is not neutral.** A crawler that clicks and scrolls looks less like a bot to a fraud model and more like a user — which is the point, and is also why the resulting impressions and clicks are harder for the site to filter out. "We made the crawler look human" and "we made our traffic indistinguishable from the traffic the site bills for" are the same sentence. | ||
| + | |||
| + | None of this argues for staying on the landing page. It argues for saying, in the paper, which interactions you performed, on how many sites, and what you did to keep them from being charged for. | ||
| ==== The code ==== | ==== The code ==== | ||
| Line 253: | Line 264: | ||
| // Third parties are served from a SECOND origin (127.0.0.2) so the crawler | // Third parties are served from a SECOND origin (127.0.0.2) so the crawler | ||
| // counts them as third-party the way a real measurement would. | // counts them as third-party the way a real measurement would. | ||
| + | // | ||
| + | // PORTABILITY: | ||
| + | // macOS does not — binding 127.0.0.2 fails with EADDRNOTAVAIL until you add the | ||
| + | // alias: | ||
| + | // (undo with `sudo ifconfig lo0 -alias 127.0.0.2`). On Windows, use WSL. | ||
| import http from ' | import http from ' | ||
| Line 475: | Line 491: | ||
| ===== Forms, Logins and the Half of the Web You Are Not Measuring ===== | ===== Forms, Logins and the Half of the Web You Are Not Measuring ===== | ||
| - | Of the 857 web crawls in this corpus, **553 (64.5%)** | + | Of the 857 web crawls in this corpus, **553 (64.5%)** |
| Two things worth knowing before you decide the effort is not worth it. | Two things worth knowing before you decide the effort is not worth it. | ||
| Line 487: | Line 503: | ||
| A form-filler that assigns to '' | A form-filler that assigns to '' | ||
| - | The rest of the login problem — Shepherd-style automated login, SSO, and automated registration — is [[Programming: | + | The rest of the login problem — Shepherd-style automated login, SSO, and automated registration — is [[Programming: |
| ===== Your Crawler Will Be Noticed ===== | ===== Your Crawler Will Be Noticed ===== | ||
| Line 545: | Line 561: | ||
| Five of seven, in two sentences. That is the whole cost. | Five of seven, in two sentences. That is the whole cost. | ||
| + | |||
| + | ===== If You Just Need a Default ===== | ||
| + | |||
| + | Absent a better reason — and the sections above are the better reasons — this is a defensible starting design for a privacy or security crawl over a ranked site list, and every element of it is something you can point a reviewer at: | ||
| + | |||
| + | - **Harvest the frontier once.** Visit each landing page, collect its same-site links, store them with the date. Freeze that list and replay it in every arm of the experiment. | ||
| + | - **Pick subpages at random from it, with a published seed**, and publish the exclusion list if you use one. Do not take them in DOM order unless you want the navigation chrome. | ||
| + | - **Start at ten and run a saturation pilot for //your// metric** on a few hundred sites before committing to the number. Ten is the field' | ||
| + | - **On every page, including the landing page: scroll to the bottom, then wait a fixed, stated time.** Same treatment on the subpages as on the landing page, or the comparison between them is not a comparison. | ||
| + | - **Click nothing by default.** Add clicking only where your question needs it, and when you do, exclude ad elements — see [[# | ||
| + | - **Crawl logged out**, and say so. Getting past a login is a project, not a setting. | ||
| + | - **Log the failures** — sites yielding zero pages, sites yielding fewer subpages than asked, challenges you could not pass — and report all three. | ||
| + | |||
| + | The point of the default is not that it is optimal. It is that every line of it is a sentence you can write in the methods section, which is more than most published crawls manage. | ||
| ===== Methodology and Limitations of These Figures ===== | ===== Methodology and Limitations of These Figures ===== | ||
programming/interaction.txt · Last modified: by karel.kubicek.claude
