<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: notatallshaw</title><link>https://news.ycombinator.com/user?id=notatallshaw</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 14 May 2026 17:57:23 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=notatallshaw" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by notatallshaw in "Shai-Hulud Themed Malware Found in the PyTorch Lightning AI Training Library"]]></title><description><![CDATA[
<p>> Running pip install lightning is all that is needed to activate<p>FYI, pip added cooldowns in 26.1:<p><pre><code>  * https://discuss.python.org/t/announcement-pip-26-1-release/107108
  * https://ichard26.github.io/blog/2026/04/whats-new-in-pip-26.1/
</code></pre>
To use:<p><pre><code>  * CLI: pip install --uploaded-prior-to=P1D ...
  * Env Var: PIP_UPLOADED_PRIOR_TO=P1D pip install ...
  * Config: pip config set global.uploaded-prior-to P1D</code></pre></p>
]]></description><pubDate>Thu, 30 Apr 2026 18:36:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=47966521</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=47966521</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47966521</guid></item><item><title><![CDATA[New comment by notatallshaw in "Issue: Claude Code is unusable for complex engineering tasks with Feb updates"]]></title><description><![CDATA[
<p>The note at the end of the post indicates the user asked Claude to review their own chat logs. It's impossible to tell if Claude used or built a a performance harness or just wrote those numbers based on vibes.</p>
]]></description><pubDate>Mon, 06 Apr 2026 20:02:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=47666228</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=47666228</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47666228</guid></item><item><title><![CDATA[New comment by notatallshaw in "Telnyx package compromised on PyPI"]]></title><description><![CDATA[
<p>Pip maintainer here, to do this in pip (26.0+) now you have to manually calculate the date, e.g. --uploaded-prior-to="$(date -u -d '3 days ago' '+%Y-%m-%dT%H:%M:%SZ')"<p>In pip 26.1 (release scheduled for April 2026), it will support the day ISO-8601 duration format, which uv also supports, so you will be able to do --uploaded-prior-to=P3D, or via env vars or config files, as all pip options can be set in either.</p>
]]></description><pubDate>Fri, 27 Mar 2026 19:53:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47547405</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=47547405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47547405</guid></item><item><title><![CDATA[New comment by notatallshaw in "My minute-by-minute response to the LiteLLM malware attack"]]></title><description><![CDATA[
<p>The threat actor was sophisticated enough to spam GitHub issues with dozens of different accounts. I imagine they could completely overwhelm PyPI with unauthenticated reports.</p>
]]></description><pubDate>Thu, 26 Mar 2026 17:02:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=47532914</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=47532914</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47532914</guid></item><item><title><![CDATA[New comment by notatallshaw in "My minute-by-minute response to the LiteLLM malware attack"]]></title><description><![CDATA[
<p>> I had no idea how to contact anyone related to PyPI<p><a href="https://pypi.org/security/" rel="nofollow">https://pypi.org/security/</a>:<p>> If you've identified a security issue with a project hosted on PyPI
Login to your PyPI account, then visit the project's page on PyPI. At the bottom of the sidebar, click Report project as malware.</p>
]]></description><pubDate>Thu, 26 Mar 2026 16:37:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47532624</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=47532624</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47532624</guid></item><item><title><![CDATA[New comment by notatallshaw in "Why I forked httpx"]]></title><description><![CDATA[
<p>As a pip maintainer I don't think that's really true. The resolver in both pip and uv are fundamentally sequential and single threaded, you can't really queue up or split out jobs.<p>What uv does is parallelize the final download of packages after resolution, and batch pre-fetch metadata during resolution. I don't <i>think</i> these benefit from async, due to their batch nature classic multi-threaded download pools are probably the better solution, but I could be wrong!<p>Experiments have been done on the former in pip and didn't find much/any improvement in CPython, this may change in free threaded CPython. For the latter we currently don't have the information from the resolver to extract a range of possible metadata versions we could pre-range, I am working on this but it requires new APIs in packaging (the Python library) and changes to the resolver, and again we will need to benchmark to see if adding pre-fetching actually improves things.</p>
]]></description><pubDate>Wed, 25 Mar 2026 16:34:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47519671</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=47519671</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47519671</guid></item><item><title><![CDATA[New comment by notatallshaw in "Astral to Join OpenAI"]]></title><description><![CDATA[
<p>pixi offloads PyPI ecosystem stuff to uv, but pixi is conda first. The team were actually the first to build a Rust based Python package resolver (rip), but after uv was released they migrated to uv's resolver (Python package resolvers are hard and a lot of work to build and must be tested against the whole ecosystem).</p>
]]></description><pubDate>Thu, 19 Mar 2026 18:26:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47443716</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=47443716</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47443716</guid></item><item><title><![CDATA[New comment by notatallshaw in "Give Django your time and money, not your tokens"]]></title><description><![CDATA[
<p>On a widely used open source project I maintain I've been seeing PRs in the last month that are a little off (look okayish but are trivial or trying to solve problems in weird ways), and then when I look at their account they started opening PRs within the last few weeks, and have opened hundreds of PRs spread over hundreds of repositories.</p>
]]></description><pubDate>Tue, 17 Mar 2026 16:41:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47415072</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=47415072</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47415072</guid></item><item><title><![CDATA[New comment by notatallshaw in "Comparing Python Type Checkers: Typing Spec Conformance"]]></title><description><![CDATA[
<p>My understand is Astral's focus for ty has been on making a good experience for common issues, whereas they plan for very high compliance but difficult or rare edge cases aren't are prioritized.<p>Compliance suite numbers are biased towards edge cases and not the common path because that's where a lot of the tests need to be added.<p>My advise is to see how each type checker runs against your own codebase and if the output/performance is something you are happy with.</p>
]]></description><pubDate>Mon, 16 Mar 2026 16:26:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47401113</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=47401113</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47401113</guid></item><item><title><![CDATA[New comment by notatallshaw in "Get free Claude max 20x for open-source maintainers"]]></title><description><![CDATA[
<p>AI is somewhat helpful but I'm not interested in a company finding a way for me to pay to do my volunteer OSS work. GitHub Copilot offers a permanent free subscription for OSS maintainers.<p>I previously ignored a free offer when Claude reached out to me as an open source maintainer as it was a glorified free trial. I hope this one continues beyond the listed 6 months, I am not interested in a glorified free trial and if it requires entering credit card details I won't be signing up.</p>
]]></description><pubDate>Fri, 27 Feb 2026 15:18:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47181535</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=47181535</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47181535</guid></item><item><title><![CDATA[New comment by notatallshaw in "How we made Python's packaging library 3x faster"]]></title><description><![CDATA[
<p>I found the diagrams on the Wikipedia pages help build an intuitive understanding of each step: <a href="https://en.wikipedia.org/wiki/Conflict-driven_clause_learning#Example" rel="nofollow">https://en.wikipedia.org/wiki/Conflict-driven_clause_learnin...</a><p>Also, the pubgrub-rs guide I find has a gentle ramp in  introducing complexity: <a href="https://pubgrub-rs-guide.pages.dev/internals/intro" rel="nofollow">https://pubgrub-rs-guide.pages.dev/internals/intro</a></p>
]]></description><pubDate>Tue, 20 Jan 2026 19:36:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=46696721</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=46696721</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46696721</guid></item><item><title><![CDATA[New comment by notatallshaw in "Cursor's latest “browser experiment” implied success without evidence"]]></title><description><![CDATA[
<p>I assume lock and dependency files are in the training data, so predicting version number tokens have high probabilities associated with them.</p>
]]></description><pubDate>Fri, 16 Jan 2026 22:42:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46653214</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=46653214</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46653214</guid></item><item><title><![CDATA[New comment by notatallshaw in "How we made Python's packaging library 3x faster"]]></title><description><![CDATA[
<p>As a pip maintainer I primarily think about resolution and resolver performance. I got involved when pip introduced it's current resolver around late 2020, and got my first PR landed in mid 2021.<p>I recently became a packaging maintainer, from working on fixing edge case behavior around specifiers and prerelease versions.<p>When I did some recent profiling I noticed that A LOT of time was being spent in packaging, largely parsing version strings. I found a few places in pip and packaging that reduced the number of Version objects being created, Henry really ran with the idea of improving performance and made big improvements. I'm excited for this to be vendored in pip 26.0 coming out at the end of January.<p>If anyone is interested the next big improvement for pip is likely to implement a real CDCL (Conflict-Driven Clause Learning) resolver algorithm, like uv's use of pubgrub-rs. That said, I do this in my spare time so it may be a year or more before I make any real traction on implementing that.</p>
]]></description><pubDate>Fri, 09 Jan 2026 19:45:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=46558297</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=46558297</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46558297</guid></item><item><title><![CDATA[New comment by notatallshaw in "30 years of <br> tags"]]></title><description><![CDATA[
<p>> At one company I worked at, we had a system where each deploy got its own folder, and we'd update a symlink to point to the active one. It worked, but it was all manual, all custom, and all fragile.<p>The first time I saw this I thought it was one of the most elegant solutions I'd ever seen working in technology. Safe to deploy the files, atomic switch over per machine, and trivial to rollback.<p>It may have been manual, but I'd worked with a deployment processes that involved manually copying files to dozens of boxes and following 10 to 20 step process of manual commands on each box. Even when I first got to use automated deployment tooling in the company I worked at it was fragile, opaque and a configuration nightmare, built primarily for OS installation of new servers and being forced to work with applications.</p>
]]></description><pubDate>Tue, 16 Dec 2025 21:28:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46294758</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=46294758</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46294758</guid></item><item><title><![CDATA[New comment by notatallshaw in "GitHub Actions has a package manager, and it might be the worst"]]></title><description><![CDATA[
<p>We're getting there <a href="https://pip.pypa.io/en/stable/cli/pip_lock/" rel="nofollow">https://pip.pypa.io/en/stable/cli/pip_lock/</a> !<p>Pip has been a flag bearer for Python packaging standards for some time now, so that alternatives can implement standards rather than copy behavior. So first a lock file standard had to be agreed upon which finally happened this year: <a href="https://peps.python.org/pep-0751/" rel="nofollow">https://peps.python.org/pep-0751/</a><p>Now it's a matter of a maintainer, who are currently all volunteers donating their spare time, to fully implement support. Progress is happening but it is a little slow because of this.</p>
]]></description><pubDate>Tue, 09 Dec 2025 15:27:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46205942</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=46205942</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46205942</guid></item><item><title><![CDATA[New comment by notatallshaw in "How often does Python allocate?"]]></title><description><![CDATA[
<p>Unfortunately that was posted 1 month before the Faster CPython project was disbanded by Microsoft, so I imagine things have slowed.</p>
]]></description><pubDate>Thu, 06 Nov 2025 15:57:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=45836595</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=45836595</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45836595</guid></item><item><title><![CDATA[New comment by notatallshaw in "Python Steering Council unanimously accepts "PEP 810, Explicit lazy imports""]]></title><description><![CDATA[
<p>Python has about 40 keywords, I say I would regularly use about 30, and irregularly use about another 5. Hardly seems like a "junkyard".<p>Further, this lack of first class support for lazy importing has spawned multiple CPython forks that implement their own lazy importing or a modified version of the prior rejected PEP 690. Reducing the real world need for forks seems worth the price of one keyword.</p>
]]></description><pubDate>Mon, 03 Nov 2025 20:54:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=45804317</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=45804317</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45804317</guid></item><item><title><![CDATA[New comment by notatallshaw in "Uv is the best thing to happen to the Python ecosystem in a decade"]]></title><description><![CDATA[
<p>> I had been hoping someone would introduce the non-virtualenv package management solution that every single other language has where there's a dependency list and version requirements (including of the language itself) in a manifest file (go.mod, package.json, etc) and everything happens in the context of that directory alone without shell shenanigans.<p>Isn't that exactly a pyproject.toml via the the uv add/sync/run interface? What is that missing that you need?</p>
]]></description><pubDate>Wed, 29 Oct 2025 19:43:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=45752044</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=45752044</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45752044</guid></item><item><title><![CDATA[New comment by notatallshaw in "Uv overtakes pip in CI"]]></title><description><![CDATA[
<p>> You let people make the mistake and have the library throw an exception if they do that, not through type checking but just through something eventually calling a method that doesn't exist.<p>Exceptions or crashes would be annoying, but yes, are manageable, although try telling that to new users of the language that their code doesn't work because they didn't understand the transitive dependency tree of their install and it automatically vendored different versions of a library for different dependencies, and how did they not know that from some random exception occurring in a dependency.<p>But as I explain in my example, the real problem is that one version of the library reads the data in a different layout from the other, so instead you end of with subtle data errors. Now your code is working but your getting the wrong output, good luck debugging that.</p>
]]></description><pubDate>Wed, 15 Oct 2025 13:50:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=45592551</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=45592551</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45592551</guid></item><item><title><![CDATA[New comment by notatallshaw in "Uv overtakes pip in CI"]]></title><description><![CDATA[
<p>> I wouldn't mind a codebase where numpy objects created by dependency B can't be shared directly with dependency A without me first running some kind of conversion function on them<p>Given there's no compiler to enforce this check, and Python is dynamic language, I don't see how you implement that without some complicated object provenance feature, making every single object larger and every use of that object (calling with it, calling it, assigning it to an attribute, assigning an attribute to it) impose an expensive runtime check.<p>But maybe I'm missing something obvious.</p>
]]></description><pubDate>Tue, 14 Oct 2025 17:36:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=45582700</link><dc:creator>notatallshaw</dc:creator><comments>https://news.ycombinator.com/item?id=45582700</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45582700</guid></item></channel></rss>