<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: patrickkidger</title><link>https://news.ycombinator.com/user?id=patrickkidger</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 27 Apr 2026 01:28:51 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=patrickkidger" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by patrickkidger in "Claude Managed Agents"]]></title><description><![CDATA[
<p>I'm not sure if I'm about to be the old man yelling at clouds, but Anthropic seem to be 'AWS-ifying'. An increasing suite of products which (at least to me) seem to undifferentiated amongst themselves, and all drawn from the same roulette wheel of words.<p>We've got Claude Managed Agents, Claude Agent SDK, Claude API, Claude Code, Claude Platform, Claude Cowork, Claude Enterprise, and plain old 'Claude'. And honourable mention to Claude Haiku/Sonnet/Opus 4.{whatever} as yet another thing with the same prefix. I feel like it's about once a week I see a new announcement here on HN about some new agentic Claude whatever-it-is.<p>I have pretty much retreated in the face of this to 'just the API + `pi` + Claude Opus 4.{most recent minor release}', as a surface area I can understand.</p>
]]></description><pubDate>Wed, 08 Apr 2026 19:11:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=47694848</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=47694848</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47694848</guid></item><item><title><![CDATA[New comment by patrickkidger in "Why don't you use dependent types?"]]></title><description><![CDATA[
<p>Quick heads-up that these days I recommend <a href="https://github.com/patrick-kidger/jaxtyping" rel="nofollow">https://github.com/patrick-kidger/jaxtyping</a> over the older repository you've linked there.<p>I learnt a lot the first time around, so the newer one is much better :)</p>
]]></description><pubDate>Sun, 02 Nov 2025 22:09:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=45793860</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=45793860</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45793860</guid></item><item><title><![CDATA[New comment by patrickkidger in "Typst: A Possible LaTeX Replacement"]]></title><description><![CDATA[
<p>I think so!<p>I've not tried a couple of things you mention (e.g. background images) but e.g. for dynamic placing there are libraries like <a href="https://typst.app/universe/package/meander" rel="nofollow">https://typst.app/universe/package/meander</a><p>The core of Typst is a pretty featureful well-thought-out FP language. This makes expressing libraries for any piece of functionality very pleasant.</p>
]]></description><pubDate>Sun, 28 Sep 2025 11:13:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=45403480</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=45403480</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45403480</guid></item><item><title><![CDATA[New comment by patrickkidger in "Tinyio: A tiny (~200 line) event loop for Python"]]></title><description><![CDATA[
<p>It also applies to any .py file. (At least in practice with e.g. pyright)<p>That said, the documentation on this matter is close to nonexistent.</p>
]]></description><pubDate>Sun, 27 Jul 2025 07:03:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=44699405</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=44699405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44699405</guid></item><item><title><![CDATA[New comment by patrickkidger in "Tinyio: A tiny (~200 line) event loop for Python"]]></title><description><![CDATA[
<p>Yup, you(/sibling comments) have it correct, it's to mark it as private.<p>Not sure where I got it from, it just seems clean. I don't think I see this super frequently in the ecosystem at large, although anything I've had a hand in will tend to use this style!</p>
]]></description><pubDate>Sun, 27 Jul 2025 07:02:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=44699396</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=44699396</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44699396</guid></item><item><title><![CDATA[New comment by patrickkidger in "Tinyio: A tiny (~200 line) event loop for Python"]]></title><description><![CDATA[
<p>This is how static type checkers are told that an imported object is part of the public API for that file. (In addition to anything else present in that file.)<p>C.f. "the intention here is that only names imported using the form X as X will be exported" from PEP484. [1]<p>I'm generally a fan of the style of putting all the implementation in private modules (whose names start with an underscore) and then using __init__.py files solely to declare the public API.<p>[1] <a href="https://peps.python.org/pep-0484/" rel="nofollow">https://peps.python.org/pep-0484/</a></p>
]]></description><pubDate>Sat, 26 Jul 2025 23:40:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=44697785</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=44697785</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44697785</guid></item><item><title><![CDATA[New comment by patrickkidger in "Tinyio: A tiny (~200 line) event loop for Python"]]></title><description><![CDATA[
<p>Oh neat! This is my library. Happy to answer any questions.<p>(Though it's really a pretty tiny library that just does what it says on the tin, not sure how many questions there can be. :D )</p>
]]></description><pubDate>Sat, 26 Jul 2025 23:07:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=44697612</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=44697612</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44697612</guid></item><item><title><![CDATA[Show HN: patdb: a snappy + easy + pretty TUI debugger for Python]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/patrick-kidger/patdb">https://github.com/patrick-kidger/patdb</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44193887">https://news.ycombinator.com/item?id=44193887</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 05 Jun 2025 17:40:03 +0000</pubDate><link>https://github.com/patrick-kidger/patdb</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=44193887</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44193887</guid></item><item><title><![CDATA[New comment by patrickkidger in "I don't like NumPy"]]></title><description><![CDATA[
<p>Went scrolling looking for this! Most of the article is about problems solved in JAX.<p>Also worth noting the Array API standard exists now. This is generally also trying to straighten out the sharp edges.</p>
]]></description><pubDate>Thu, 15 May 2025 19:10:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=43998280</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=43998280</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43998280</guid></item><item><title><![CDATA[New comment by patrickkidger in "VSCode's SSH agent is bananas"]]></title><description><![CDATA[
<p>> What open source alternatives?<p>Helix:<p><a href="https://github.com/helix-editor/helix/">https://github.com/helix-editor/helix/</a><p>Like vim, but already has an LSP etc out of the box. Things are already there so the config files are minimal.</p>
]]></description><pubDate>Sat, 08 Feb 2025 08:05:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=42981324</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=42981324</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42981324</guid></item><item><title><![CDATA[New comment by patrickkidger in "Apple Invites"]]></title><description><![CDATA[
<p>I have a US number and live in Switzerland. At least for me, I only receive SMS messages whenever I visit the US -- the rest of the time they're just dropped and I'll never see them.<p>(Doesn't really bother me, my friends and I all use WhatsApp/etc. anyway.)<p>n=1 though, maybe this is some quirk of my phone provider.</p>
]]></description><pubDate>Tue, 04 Feb 2025 21:46:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=42939297</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=42939297</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42939297</guid></item><item><title><![CDATA[New comment by patrickkidger in "How to solve computational science problems with AI: PINNs"]]></title><description><![CDATA[
<p>FWIW - I used to do research in this area - PINNs are a terribly overhyped idea.<p>See for example <a href="https://www.nature.com/articles/s42256-024-00897-5" rel="nofollow">https://www.nature.com/articles/s42256-024-00897-5</a><p>Classical solvers are very very good at solving PDEs. In contrast PINNs solve PDEs by... training a neural network. Not once, that can be used again later. But every single time you solve a new PDE!<p>You can vary this idea to try to fix it, but it's still really hard to make it better than any classical method.<p>As such the main use cases for PINNs -- they do have them! -- is to solve awkward stuff like high-dimensional PDEs or nonlocal operators or something. Here it's not that the PINNs got any better, it's just that all the classical solvers fall off a cliff.<p>---<p>Importantly -- none of the above applies to stuff like neural differential equations or neural closure models. These are genuinely really cool and have wide-ranging applications.! The difference is that PINNs are <i>numerical solvers</i>, whilst NDEs/NCMs are <i>techniques for modelling data</i>.<p>/rant ;)</p>
]]></description><pubDate>Wed, 22 Jan 2025 19:24:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=42796502</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=42796502</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42796502</guid></item><item><title><![CDATA['Real' Semantic Versioning]]></title><description><![CDATA[
<p>Article URL: <a href="https://kidger.site/thoughts/real-sem-ver/">https://kidger.site/thoughts/real-sem-ver/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42710816">https://news.ycombinator.com/item?id=42710816</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 15 Jan 2025 13:59:22 +0000</pubDate><link>https://kidger.site/thoughts/real-sem-ver/</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=42710816</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42710816</guid></item><item><title><![CDATA[New comment by patrickkidger in "Guide to mechanical keyboards"]]></title><description><![CDATA[
<p>Likewise, spending another comment just to agree. Both on the low profile and the low travel distance.<p>I've tried low-profile chocs and they still have too much travel! But I'm stuck with them as split keyboards are important for me just for the usual collection of wrist health reasons.<p>So I'm just waiting for Apple to make a split keyboard I guess :)</p>
]]></description><pubDate>Sun, 29 Dec 2024 15:49:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=42540612</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=42540612</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42540612</guid></item><item><title><![CDATA[New comment by patrickkidger in "Nyxt: The Hacker's Browser"]]></title><description><![CDATA[
<p>So why this over qutebrowser [1] ? (Which has been my go-to keyboard-first browser for a long time.) This isn't mentioned in the FAQ despite I think being the natural comparison.<p>[1] <a href="https://github.com/qutebrowser/qutebrowser">https://github.com/qutebrowser/qutebrowser</a></p>
]]></description><pubDate>Sun, 08 Dec 2024 06:48:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=42355439</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=42355439</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42355439</guid></item><item><title><![CDATA[New comment by patrickkidger in "Python type hints may not be not for me in practice"]]></title><description><![CDATA[
<p>You want runtime typechecking.<p>See either beartype [1] or typeguard [2]. And if you're doing any kind of array-based programming (JAX or not), then jaxtyping [3].<p>[1] <a href="https://github.com/beartype/beartype/">https://github.com/beartype/beartype/</a><p>[2] <a href="https://github.com/agronholm/typeguard">https://github.com/agronholm/typeguard</a><p>[3] <a href="https://github.com/patrick-kidger/jaxtyping">https://github.com/patrick-kidger/jaxtyping</a></p>
]]></description><pubDate>Wed, 27 Nov 2024 22:08:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=42260293</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=42260293</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42260293</guid></item><item><title><![CDATA[New comment by patrickkidger in "The future of Deep Learning frameworks"]]></title><description><![CDATA[
<p>I think a lot of the commenters here are being rather unfair.<p>PyTorch has better adoption / network effects. JAX has stronger underlying abstractions.<p>I use both. I like both :)</p>
]]></description><pubDate>Sat, 17 Aug 2024 07:58:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=41272695</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=41272695</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41272695</guid></item><item><title><![CDATA[New comment by patrickkidger in "Penzai: JAX research toolkit for building, editing, and visualizing neural nets"]]></title><description><![CDATA[
<p>I was just reading this too! I think it's a really interesting choice in the design space.<p>So to elucidate this a little bit, the trade-off is that this is now incompatible with e.g. `jax.grad` or `lax.scan`: you can't compose things in the order `discharge_effect(jax.grad(your_model_here))`, or put an effectful `lax.scan` inside your forward pass, etc. The effect-discharging process only knows how to handle traversing pytree structures. (And they do mention this at the end of their docs.)<p>This kind of thing was actually something I explicitly considered later on in Equinox, but in part decided against as I couldn't see a way to make that work either. The goal of Equinox was always absolute compatibility with arbitrary JAX code.<p>Now, none of that should be taken as a bash at Penzai! They've made a different set of trade-offs, and if the above incompatibility doesn't affect your goals then indeed their effect system is incredibly elegant, so certainly give it a try. (Seriously, it's been pretty cool to see the release of Penzai, which explicitly acknowledges how much it's inspired by Equinox.)</p>
]]></description><pubDate>Sun, 21 Apr 2024 21:06:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=40109257</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=40109257</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40109257</guid></item><item><title><![CDATA[New comment by patrickkidger in "Penzai: JAX research toolkit for building, editing, and visualizing neural nets"]]></title><description><![CDATA[
<p>IIUC then penzai is (deliberately) sacrificing support for higher-order operations like `lax.{while_loop, scan, cond}` or `diffrax.diffeqsolve`, in return for some of the other new features it is trying out (treescope, effects).<p>So it's slightly more framework-y than Equinox and will not be completely compatible with arbitrary JAX code. However I have already had a collaborator demonstrate that as long as you <i>don't</i> use any higher-order operations, then treescope will actually work out-of-the-box with Equinox modules!<p>So I think the answer to your question is "sort of":<p>* As long as you only try to inspect things that are happening outside of your `diffrax.diffeqsolve` then you should be good to go. And moreover can probably do this simply by using e.g. Penzai's treescope directly alongside your existing Equinox code, without needing to move things over wholesale.<p>* But anything inside probably isn't supported + if I understand their setup correctly can never be supported. (Not bashing Penzai there, which I think genuinely looks excellent -- I think it's just fundamentally tricky at a technical level.)</p>
]]></description><pubDate>Sun, 21 Apr 2024 20:56:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=40109172</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=40109172</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40109172</guid></item><item><title><![CDATA[New comment by patrickkidger in "An accessible one-handed keyboard, inspired by FrogPad"]]></title><description><![CDATA[
<p>I have a Tap Strap 2. (Although only as of a couple of weeks ago, so still pretty new to it.)<p>Answering your questions, split into pros and cons:<p>## Pros<p>You can customise the layout, including meta keys like control/alt/windows. I think the "more advanced mode" is basically just designing your own layout.<p>It's honestly very accurate for a keyboard that is basically just tapping your figures against a table. It definitely misreads the odd input (or perhaps more accurately, it is sufficiently easy for me to waggle my fingers wrong), but it doesn't make so many that I'm really bothered by it.<p>I had an issue with the firmware on mine when I first got it, and the support team were super responsive. I really appreciated this.<p>The Android/iOS app is well designed for learning how to use it -- it comes with an excellently pedagogical typing tutor.<p>If you're curious, I'd definitely recommend giving it a go. IIUC the WPM most folks get with it is about equivalent to to other one-handed-keyboards, ~50 or so. I've found learning it to be pretty easy. (Substantially easier than learning a new layout on a regular keyboard, for some reason.)<p>It connects as a bluetooth keyboard, no special software required.<p>## Cons<p>Customising layouts is unfortunately a bit of a chore, being both tied-to-the-company and requiring additional devices. The layout must first be designed through a webpage on their site, which you need to log in to using your account. Then you need an Android/iOS device to actually connect to the TS2 and push the layout.<p>## Worth knowing<p>You have essentially five layers: default, double tap, triple tap, shift, and switch. Shift and switch are pretty similar to layers as you'll find them on most ergomech keyboards. However, the double and triple tap layers work by inputting the key corresponding to that chord on the default layer, then detecting that you're doing a double/triple tap, then inputting backspace, and then inputting the key corresponding to the chord on the double/triple tap layer. So if you'd like to use it for something like vim, then that first input might actually mean something! If that will affect you, then in practice you can't use the double/triple tap layers, and you only have 60% of the real estate to fit your custom layout into. That is <i>just enough</i> to fit basically a whole keyboard -- I've got a custom layout that does this -- but it took me some careful thought for how to cram all those keys into such little space in a logical way.</p>
]]></description><pubDate>Tue, 20 Feb 2024 05:05:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=39438254</link><dc:creator>patrickkidger</dc:creator><comments>https://news.ycombinator.com/item?id=39438254</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39438254</guid></item></channel></rss>