<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: andrewaylett</title><link>https://news.ycombinator.com/user?id=andrewaylett</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 06 Apr 2026 02:21:51 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=andrewaylett" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by andrewaylett in "Someone at BrowserStack is leaking users' email addresses"]]></title><description><![CDATA[
<p>Selected quotes from Apollo's GDPR page:<p>> Consent must be "freely given, specific, informed, and unambiguous."<p>and<p>> Apollo notifies them when their data is added to Apollo's database of business contact information and provides them with instructions on how to opt out.<p><a href="https://knowledge.apollo.io/hc/en-us/articles/4409141087757-General-Data-Protection-Regulation-GDPR-Overview" rel="nofollow">https://knowledge.apollo.io/hc/en-us/articles/4409141087757-...</a><p>Now, their claim appears to be that they're processing business contact data under the legal basis of "Legitimate Interests".  But as much as I am a big fan of not doing things that require a legal basis of "Consent", I'm unconvinced that they ensure their customers are sticking as tightly to their basis as they ought to be if they wish to claim it.<p>In other words: yes, if you have a CRM in then you might derive legitimate interests in sharing with Apollo.  But you need to make sure you actually have the right legal basis for putting customer details into your CRM, and your support database almost certainly does not hold appropriate data!<p>So ultimately I think this is on both Browserstack (for connecting and sharing data other than in accordance with a legal basis) <i>and</i> Apollo (for making it too easy for their customers to send them data without a sound legal basis and then for sharing that data without suitably validating they had the legal basis to).<p>Apollo's privacy centre makes all the right claims about how they comply with GDPR, but the OP's story demonstrates that they're not as scrupulous in their verification as they claim to be.  And strictly, both should be reporting the breach and taking steps to ensure it doesn't recur.</p>
]]></description><pubDate>Sun, 05 Apr 2026 15:09:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47650220</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47650220</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47650220</guid></item><item><title><![CDATA[New comment by andrewaylett in "Author of "Careless People" banned from saying anything negative about Meta"]]></title><description><![CDATA[
<p>There would have been a power imbalance at the point of signing.  I can well imagine that the implications of that particular clause weren't apparent at the time.<p>As a society (more so here in the UK than in the US, I'll grant) we have laws governing what one party may demand of the other.  They don't prevent a genuine meeting of the minds, because enforcement of a contract will only be an issue if at least one party <i>doesn't</i> follow through.  But they do limit the ability of the company to impose sanctions beyond a point.<p>One limitation in the UK is that penalty clauses that are "private fines", like this one, must be based on the actual damage caused.<p>In this case, as in the non-compete case, I would say that if a company wants to continue to influence what someone does, they should continue to pay them.</p>
]]></description><pubDate>Sat, 04 Apr 2026 16:42:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47640677</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47640677</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47640677</guid></item><item><title><![CDATA[New comment by andrewaylett in "Android’s new sideload settings will carry over to new devices"]]></title><description><![CDATA[
<p>Given the Epic settlement means Google is allowing alternate app stores, and also the delay only applies for unregistered developers, I'm not certain it won't actually get easier to get folk set up on F-Droid.<p>It still remains to be seen what the actual requirements are, and even if F-Droid <i>could</i> become "approved" that doesn't mean they want to.  Time will tell.</p>
]]></description><pubDate>Sat, 28 Mar 2026 21:38:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47558332</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47558332</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47558332</guid></item><item><title><![CDATA[New comment by andrewaylett in "Google details new 24-hour process to sideload unverified Android apps"]]></title><description><![CDATA[
<p>SumUp won't let you use your phone to accept contactless payments while developer mode is enabled.  You can still use an external card reader though.</p>
]]></description><pubDate>Thu, 19 Mar 2026 20:15:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47445280</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47445280</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47445280</guid></item><item><title><![CDATA[New comment by andrewaylett in "Please Do Not A/B Test My Workflow"]]></title><description><![CDATA[
<p>> on every compaction<p>I've only hit the compaction limit a handful of times, and my experience degraded enough that I work <i>quite hard</i> to not hit it again.<p>One thing I like about the current implementation of plan mode is that it'll clear context -- so if I complete a plan, I can use that context to write the next plan without growing context without bound.</p>
]]></description><pubDate>Sat, 14 Mar 2026 12:57:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=47376213</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47376213</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47376213</guid></item><item><title><![CDATA[New comment by andrewaylett in "Malus – Clean Room as a Service"]]></title><description><![CDATA[
<p>One <i>big</i> difference between the UK's historic constitutionalia and the US is that the UK generally recognises that we only do things a certain way because agreeing how to change them is too hard, while the US appears to think that they do things in their certain way because that's the right way to do them.<p>Specific examples for the UK: inducting politicians into the Privy Council in order to qualify them for security briefings, Henry VII powers, and ministers' authority deriving from the seal they're given by the sovereign.  Which would almost make as much sense if it were a marine mammal as it does being a stamp.<p>The thing being, they work well enough.  And if you want to replace them, you need to work out what to replace them with and how.</p>
]]></description><pubDate>Fri, 13 Mar 2026 13:14:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47364028</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47364028</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47364028</guid></item><item><title><![CDATA[New comment by andrewaylett in "Reverse-engineering the UniFi inform protocol"]]></title><description><![CDATA[
<p>The author framed his issue as a choice between separate VMs (with high cost) per user or decoding the messages.  As he, you, and I all say: what he's got does work.  I'm absolutely not saying that now he's solved the problem he should do something else.  But the choice wasn't between only those two extremes.<p>This protocol was amenable to inspection, the next might not be.<p>I use NextDNS, one of the features it provides is letting you register a source IP so requests from your network "just work".  It might not be a mainstream consumer feature, but neither NextDNS nor managed Unifi controllers are mainstream consumer products.</p>
]]></description><pubDate>Mon, 09 Mar 2026 21:21:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=47315725</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47315725</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47315725</guid></item><item><title><![CDATA[New comment by andrewaylett in "Reverse-engineering the UniFi inform protocol"]]></title><description><![CDATA[
<p>I'm glad the payload was usable and the author has fixed their problem, it's an interesting challenge.<p>However, there are other approaches.  A public IP per client isn't going to be nearly as expensive as a VM per client, and lets you route your clients by target.  Or you could route by source IP: either by having the client register their IPs, or with some combination with seeing where folk log in from.<p>Neither is necessary, though, given inspection does appear to work.</p>
]]></description><pubDate>Mon, 09 Mar 2026 19:01:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47313755</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47313755</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47313755</guid></item><item><title><![CDATA[New comment by andrewaylett in "Helsinki just went a full year without a single traffic death"]]></title><description><![CDATA[
<p>Edinburgh doesn't enforce its 20mph zones, I follow them anyway.  And I don't believe I actually make progress through the city any less quickly than drivers who speed, because it's rare that I'm not in any case sitting behind the speeders at the next red light.<p>Arterial roads are normally still 30mph, and it's not a huge city so it doesn't take that long to get from the outskirts to the centre.  Or when it does, it's not because of low speed limits.</p>
]]></description><pubDate>Wed, 04 Mar 2026 21:24:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=47254096</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47254096</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47254096</guid></item><item><title><![CDATA[New comment by andrewaylett in "Don't make me talk to your chatbot"]]></title><description><![CDATA[
<p>That does somewhat depend on the size of the context.<p>LLMs won't <i>add</i> information to context, so if the output is larger than the input then it's slop.  They're much better at picking information out of context.  If I have a corpus of information and prompt an extraction, the result may well contain more information than the prompt.  It's not necessarily feasible to transfer the entire context, and also I've curated that specific result as suitably conveying the message I intend to convey.<p>This does all take effort.<p>My take is also that I am interested in what people say: I have priors for how worthwhile I expect it to be to read stuff written by various people, and I will update my priors when they give me things to read.  If they give me slop, that's going to affect what I think of them, and I expect the same in return.  I'm willing to work quite hard to avoid asking my colleagues to read or review slop.</p>
]]></description><pubDate>Tue, 03 Mar 2026 23:44:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47240807</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47240807</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47240807</guid></item><item><title><![CDATA[New comment by andrewaylett in "Turn Dependabot off"]]></title><description><![CDATA[
<p>I approve of Renovate's distinct recommendations for libraries vs applications.<p>For a library, you really want the widest range of "allowed" dependencies, but for the library's test suite you want to pin specific versions.  I wrote a tool[1] that helps me make sure (for the npm ecosystem) my dependency specifications aren't over-wide.<p>For an application, you just want pinned specific dependencies.  Renovate has a nice feature wherein it'll maintain transitive dependencies, so you can avoid the trap of only upgrading when forced to by more direct dependencies.<p>The net result is that most version bumps for my library code only affect the test environment, so I'm happy allowing them through if the tests pass.  For application code, too, my personal projects will merge version bumps and redeploy automatically -- I only need to review if something breaks.  This matches the implicit behaviour I see from most teams anyway, who rely on "manual review" but only actually succeed in adding toil.<p>My experience is that Renovate's lock file maintenance makes update a whole load safer than the common pattern of having ancient versions of most transitive dependencies then upgrading a thread of packages depended on by a newer version of a single dependency.<p>1: <a href="https://www.npmjs.com/package/downgrade-build" rel="nofollow">https://www.npmjs.com/package/downgrade-build</a></p>
]]></description><pubDate>Sat, 21 Feb 2026 19:29:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47103842</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47103842</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47103842</guid></item><item><title><![CDATA[New comment by andrewaylett in "Farewell, Rust for web"]]></title><description><![CDATA[
<p>Honestly, I don't think there's a bright line.  What's the difference between "code" and "data"?  It's as much about intent as anything.  If my focus is on my content then I'm probably not programming.  But if my focus is on getting the computer to <i>do</i> something then I probably am, even if the end result is identical.<p>I've created any number of empty files in my lifetime, and I wouldn't say that more than a couple of them were programming, but I don't think it's controversial to claim that the IOCCC submission I linked up-thread definitely was programming, and (maybe slightly more controversial) that my deliberate replication of the program when I first heard about it $mumble years ago was also programming?<p>In your specific example, if someone constructed an ASCII file which made use of the control codes to do something interesting (or even something boring!) then wouldn't that be programming?  While typing ASCII into this text field isn't programming because the value of the information is in the human interpretation of the content rather than the machine having interpreted the content as code.</p>
]]></description><pubDate>Sat, 21 Feb 2026 16:44:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47102358</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47102358</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47102358</guid></item><item><title><![CDATA[New comment by andrewaylett in "I found a useful Git one liner buried in leaked CIA developer docs"]]></title><description><![CDATA[
<p>I keep a command `git-remove-merged`, which uses `git ls-remote` to see if the branch is set up to track a remote branch, and if it <i>is</i> then whether the remote branch still exists.  On the assumption that branches which have had remote tracking but no longer do are either merged or defunct.<p><a href="https://gist.github.com/andrewaylett/27c6a33bd2fc8c99eada60589f0ca31f" rel="nofollow">https://gist.github.com/andrewaylett/27c6a33bd2fc8c99eada605...</a><p>But actually nowadays I use JJ and don't worry about named branches :).</p>
]]></description><pubDate>Fri, 20 Feb 2026 17:50:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47091296</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47091296</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47091296</guid></item><item><title><![CDATA[New comment by andrewaylett in "Farewell, Rust for web"]]></title><description><![CDATA[
<p>I would say that a "language" is a necessary component of a "programming language".<p>An empty file was an IOCCC winner: <a href="https://www.ioccc.org/1994/smr/" rel="nofollow">https://www.ioccc.org/1994/smr/</a> but you need to interpret that empty file as C source in order to reasonably claim to have programmed the computer.<p>My reasoning comes more from the other direction: someone who writes HTML <i>is programming</i> therefore HTML is a programming language.</p>
]]></description><pubDate>Fri, 20 Feb 2026 14:09:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47088254</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47088254</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47088254</guid></item><item><title><![CDATA[New comment by andrewaylett in "America's pensions can't beat Vanguard but they can close a hospital"]]></title><description><![CDATA[
<p>With the system as it existed in 2000, it was very much "free money".  That was before the introduction of fees, which are still not applicable for Scottish students studying in Scotland, and in combination with the interest rate increase would <i>very definitely</i> tip the balance for me.<p>I have a decent career that means I've paid off my loan.  I can easily imagine that many folk with fees and modern loans won't ever even cover the interest payments.</p>
]]></description><pubDate>Thu, 19 Feb 2026 22:47:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=47080782</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47080782</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47080782</guid></item><item><title><![CDATA[New comment by andrewaylett in "Farewell, Rust for web"]]></title><description><![CDATA[
<p>It's not Turing-complete, and as you say, it's a markup language and it's not general purpose.  But neither is a necessary component of "programming language".</p>
]]></description><pubDate>Thu, 19 Feb 2026 22:39:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=47080694</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47080694</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47080694</guid></item><item><title><![CDATA[New comment by andrewaylett in "Farewell, Rust for web"]]></title><description><![CDATA[
<p>It's a throwaway comment in the article, but I feel it's important to push back on: HTML is <i>very definitely</i> a programming language, by any reasonable definition of "programming language".<p>Edit to add: It might not be an imperative language, but having written some HTML and asked the computer to interpret it, the computer now has a programmed capability, determined by what was written, that's repeatable and that was not available apart from the HTML given.  QED.</p>
]]></description><pubDate>Thu, 19 Feb 2026 21:09:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47079422</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47079422</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47079422</guid></item><item><title><![CDATA[New comment by andrewaylett in "America's pensions can't beat Vanguard but they can close a hospital"]]></title><description><![CDATA[
<p>Surely the first step is to stop issuing loans in such a way that will cause the <i>next</i> generation of students to suffer the same problems, freeing us up to sort out the problems of previous generations without moral hazard.<p>The UK had what I think was a really nice set up, although it's now not nearly as palatable.  My student loan had an interest rate tied to inflation, and repayment was a fixed amount of my income above a limit, collected via the same mechanisms used for income tax.  Any unpaid loan would be written off when I turn 60.<p>The modern system is similar, but the interest rate has been decoupled from inflation which means that instead of paying back essentially the same value, no matter how slowly you pay it off, it's now definitely better to pay more earlier.  Which makes it much more like a regressive "graduate tax" that you only have to pay if you don't earn enough.</p>
]]></description><pubDate>Wed, 18 Feb 2026 09:59:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47059272</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47059272</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47059272</guid></item><item><title><![CDATA[New comment by andrewaylett in "GrapheneOS – Break Free from Google and Apple"]]></title><description><![CDATA[
<p>They rely on manufacturer support for device firmware, just like anyone else.</p>
]]></description><pubDate>Tue, 17 Feb 2026 13:22:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47047224</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47047224</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47047224</guid></item><item><title><![CDATA[New comment by andrewaylett in "I want to wash my car. The car wash is 50 meters away. Should I walk or drive?"]]></title><description><![CDATA[
<p>Artificial AI.</p>
]]></description><pubDate>Mon, 16 Feb 2026 10:42:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47033464</link><dc:creator>andrewaylett</dc:creator><comments>https://news.ycombinator.com/item?id=47033464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47033464</guid></item></channel></rss>