<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: jeswin</title><link>https://news.ycombinator.com/user?id=jeswin</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 18 Jun 2026 11:38:02 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jeswin" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jeswin in "Stop Using JWTs"]]></title><description><![CDATA[
<p>Not the same. HttpOnly/Secure cookies were added much later and was not the default. They should have been inaccessible to JS by default from the beginning, and this policy has been a source of countless attacks.</p>
]]></description><pubDate>Wed, 17 Jun 2026 05:49:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48566260</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48566260</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48566260</guid></item><item><title><![CDATA[New comment by jeswin in "Stop Using JWTs"]]></title><description><![CDATA[
<p>> utility is of a standard that creates affordances for the insecure defaults<p>You could make the same argument about Cookies.<p>> as opposed to just designing it right from the beginning<p>And generally, it's quite difficult to design it right from the beginning because one would often start with the wrong assumptions. Most standards evolve, and it should be acceptable.</p>
]]></description><pubDate>Wed, 17 Jun 2026 00:16:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48564145</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48564145</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48564145</guid></item><item><title><![CDATA[New comment by jeswin in "Our response to the US ban on Fable 5 and Mythos 5"]]></title><description><![CDATA[
<p>Sorry to say this, but it reads promotional. Especially with a model which was on Show HN a couple of months back, and is not a comparable product.</p>
]]></description><pubDate>Sat, 13 Jun 2026 05:57:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=48513807</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48513807</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48513807</guid></item><item><title><![CDATA[New comment by jeswin in "The intracies of modern camera lens repair (2024)"]]></title><description><![CDATA[
<p>Lenses are only tested on bodies which are available at the time of manufacture. They might focus hunt on newer bodies, because of tweaks to AF algorithms (for example, the speed at which instructions are transmitted). Sometimes in ways that can potentially cause damage long term.</p>
]]></description><pubDate>Sat, 06 Jun 2026 03:43:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48421182</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48421182</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48421182</guid></item><item><title><![CDATA[New comment by jeswin in "The intracies of modern camera lens repair (2024)"]]></title><description><![CDATA[
<p>> at this point a lens for a mirrorless camera will have a USB-C port<p>Ideally, camera bodies should support firmware updates via the body in a non-discriminatory way, but until then I wish manufacturers support firmware updates via USB-C.<p>Looking at you Samyang Lens Station. I think users have been sufficiently upset, and they're adding USB-C to newer lenses.</p>
]]></description><pubDate>Sat, 06 Jun 2026 03:40:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48421164</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48421164</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48421164</guid></item><item><title><![CDATA[New comment by jeswin in "Claude Code and Codex Can Have Real-Time Conversation via Git"]]></title><description><![CDATA[
<p>Agree that the intermediary is not very useful when you can just use a directory watcher, but driving Claude via another app incurs api level costs starting this month, according to the new ToS.</p>
]]></description><pubDate>Thu, 04 Jun 2026 11:47:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=48397304</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48397304</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48397304</guid></item><item><title><![CDATA[New comment by jeswin in "Artificial intelligence is not conscious – Ted Chiang"]]></title><description><![CDATA[
<p>> I’m always amazed by human’s capacity to devalue conscious in things they don’t fully understand<p>What?<p>We devalue things we fully understand too. For example, veal = take a baby cow away from the mother, and fry it into cutlets. Or turn the mother into steak. We are well aware that animals have emotions; happiness, sadness and the full range.<p>Humans are just inhumane.</p>
]]></description><pubDate>Thu, 04 Jun 2026 07:32:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48395369</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48395369</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48395369</guid></item><item><title><![CDATA[New comment by jeswin in "Codex just found a "workaround" of not having sudo on my PC"]]></title><description><![CDATA[
<p>Docker must always be installed rootless on Linux - <a href="https://docs.docker.com/engine/security/rootless/" rel="nofollow">https://docs.docker.com/engine/security/rootless/</a><p>There's even an install script for it: curl -fsSL <a href="https://get.docker.com/rootless" rel="nofollow">https://get.docker.com/rootless</a> | sh<p>This has been there for a while. The root install option should be removed.</p>
]]></description><pubDate>Mon, 01 Jun 2026 02:17:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48351943</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48351943</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48351943</guid></item><item><title><![CDATA[New comment by jeswin in "Perry Compiles TypeScript directly to executables using SWC and LLVM"]]></title><description><![CDATA[
<p>tsonic uses NativeAOT by default, and DLR/System.Dynamic isn't supported in NativeAOT. There are switches in tsonic to give you MSIL, but that's used mostly for testing or for compat reasons.</p>
]]></description><pubDate>Sat, 30 May 2026 14:08:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48336369</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48336369</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48336369</guid></item><item><title><![CDATA[New comment by jeswin in "Perry Compiles TypeScript directly to executables using SWC and LLVM"]]></title><description><![CDATA[
<p>> strict, deterministic subset of TypeScript<p>I'll add that page, thanks. Today, almost all of idiomatic TS is supported including most of its utility classes. Dynamic JS-style code is not supported, for example adding a function or a field into an object, prototype-based class modifications etc. I'll compile a list, and include it along with the large docs cleanup planned before v1.<p>> Also, what's an "ambient surface" in this context?<p>The idea is that when JS gets transpiled into C# (or Rust, upcoming), JS globals and built-ins are invalid. The native "surface" is C#, meaning the string is .Net's string type and the methods that you expect on JS strings would be missing. But when you opt in to a surface, such as the "JS surface", the compiler applies surface defined translations such as substring becoming SubString, either directly or via a companion helper class. This allows you to write against standard JS and Node APIs, instead of relying on the stdlib/builtins of the target framework (currently CLR). And you get the JS "stdlib" -  console, JSON, Date, Map, Set etc.<p>For example, all the projects you see under this use the JS surface: <a href="https://github.com/tsoniclang/proof-is-in-the-pudding/tree/main/js/packages" rel="nofollow">https://github.com/tsoniclang/proof-is-in-the-pudding/tree/m...</a></p>
]]></description><pubDate>Sat, 30 May 2026 08:27:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48333983</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48333983</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48333983</guid></item><item><title><![CDATA[New comment by jeswin in "Perry Compiles TypeScript directly to executables using SWC and LLVM"]]></title><description><![CDATA[
<p>Yes. :) With the goal of compiling it to native code.<p>It's mostly a mechanical port. Hoping to do a Show HN maybe in a month.</p>
]]></description><pubDate>Sat, 30 May 2026 07:10:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48333510</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48333510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48333510</guid></item><item><title><![CDATA[New comment by jeswin in "Perry Compiles TypeScript directly to executables using SWC and LLVM"]]></title><description><![CDATA[
<p>Hmm yeah good point. I didn't think of it. It might even be cheaper to do this when the list of possible types are closed and few.<p>I am still inclined to believe AI just made up the documentation though, because this has its own tradeoffs.</p>
]]></description><pubDate>Sat, 30 May 2026 07:05:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48333487</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48333487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48333487</guid></item><item><title><![CDATA[New comment by jeswin in "Perry Compiles TypeScript directly to executables using SWC and LLVM"]]></title><description><![CDATA[
<p>> Another option is to define your own integer types<p>This is what I did. Most int usage is inferred, but if they had to define it explicitly, I make them import { int } from "@tsonic/core/types.js";</p>
]]></description><pubDate>Sat, 30 May 2026 06:56:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48333422</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48333422</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48333422</guid></item><item><title><![CDATA[New comment by jeswin in "Perry Compiles TypeScript directly to executables using SWC and LLVM"]]></title><description><![CDATA[
<p>Yep. The MS compiler written in TypeScript has a lot of dynamic behavior which tsonic cannot support. Those were not easy to port either, and tsgo seemed like a much easier target.</p>
]]></description><pubDate>Sat, 30 May 2026 06:53:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=48333394</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48333394</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48333394</guid></item><item><title><![CDATA[New comment by jeswin in "Perry Compiles TypeScript directly to executables using SWC and LLVM"]]></title><description><![CDATA[
<p>> such as this project which is converting tsgo to Rust<p>If you'd like to follow, here's my attempt at converting tsgo to typescript (called tsts [1]). Admittedly there's AI involved, but it's a very mechanical job. Going from golang to ts is not a very difficult problem, the other way around would have been way harder. The plan is to then compile tsts to binary via tsonic.<p>[1]: <a href="https://github.com/tsoniclang/tsts" rel="nofollow">https://github.com/tsoniclang/tsts</a></p>
]]></description><pubDate>Sat, 30 May 2026 06:49:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48333369</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48333369</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48333369</guid></item><item><title><![CDATA[New comment by jeswin in "Perry Compiles TypeScript directly to executables using SWC and LLVM"]]></title><description><![CDATA[
<p>> Traditional OOP runtimes use vtables for method resolution, adding a layer of indirection on every call. Perry resolves all method calls statically during compilation, turning interface method calls into direct jumps.<p>What? How is this possible, even with something as simple as:<p><pre><code>  interface Animal {
    speak(): string;
  }
  
  class Cat implements Animal {}  
  class Dog implements Animal {}

  function makeSound(animal: Animal) {
    return animal.speak();
  }</code></pre></p>
]]></description><pubDate>Sat, 30 May 2026 06:36:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=48333293</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48333293</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48333293</guid></item><item><title><![CDATA[New comment by jeswin in "Perry Compiles TypeScript directly to executables using SWC and LLVM"]]></title><description><![CDATA[
<p>First of all, congrats.<p>The website doesn't explain how it works in a lot of detail. I am the author of tsonic [1], a TS compiler that produces binaries via Clr NativeAOT (on Linux/Mac). The hardest parts were numbers (TS has no ints or shorts), Generics, and TS Utility Types. I've been on it for the last 6 months (almost every day); getting to near complete TS compatibility is a very long journey because of its expressiveness.<p>Add: A request is to explain how it works on the website. I did take a look at <a href="https://www.perryts.com/en/internals/" rel="nofollow">https://www.perryts.com/en/internals/</a> but are those techniques described really sufficient to express TS? Based on my experience, I must say I'm surprised. But the proof is in the pudding, and if it's compiling those examples it must be working somehow!<p>[1]: <a href="https://tsonic.org" rel="nofollow">https://tsonic.org</a></p>
]]></description><pubDate>Sat, 30 May 2026 06:05:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48333129</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48333129</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48333129</guid></item><item><title><![CDATA[New comment by jeswin in "Dynamic Workflows in Claude Code"]]></title><description><![CDATA[
<p>> I've been able to refactor one of the most complicated parts of our code base with similar results. Mechanical refactors are relatively straight forward for agents.<p>A rewrite of bun in Rust is unlikely to be a trivial mechanical refactor. And if you are not sharing what the complicated parts were, or how big it is, how do we assess that the task was similar?<p>Unless you are intimately familiar with the bun codebase and you've already made that assessment.</p>
]]></description><pubDate>Thu, 28 May 2026 17:55:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=48312804</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48312804</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48312804</guid></item><item><title><![CDATA[New comment by jeswin in "I think Anthropic and OpenAI have found product-market fit"]]></title><description><![CDATA[
<p>I'm out of credits codex pro credits (200 plan) in 4-5 days, and then I switch to claude (another large plan) mostly or just go out more and get Vitamin D. :)<p>I spend most of my time designing and tweaking tests suites, and improving test performance. These commits are almost entirely Codex: <a href="https://github.com/tsoniclang/tsonic/commits/main/" rel="nofollow">https://github.com/tsoniclang/tsonic/commits/main/</a> - but it's possible only because there's a very large test suite attached to it.<p>All of that is very token intensive. If OpenAI gave me 3x my limits, I'd find ways to eat it up in a week.<p>What do these tokens give me? Well, I think in a week or two, I hope to port the TypeScript-Go compiler back into TypeScript, but compiled to native code. It's probably not particularly useful for most ppl, but it's a hobby project that I've spent the last 7 months on.</p>
]]></description><pubDate>Thu, 28 May 2026 05:26:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48304935</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48304935</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48304935</guid></item><item><title><![CDATA[New comment by jeswin in "Go: Support for Generic Methods"]]></title><description><![CDATA[
<p>It's a highly successful language because (1) it was backed by Google, and (2) created by Robert Griesemer, Rob Pike, and Ken Thompson.<p>If it came out of anywhere else, it might have struggled even to hit the homepage here.</p>
]]></description><pubDate>Wed, 27 May 2026 13:38:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48294191</link><dc:creator>jeswin</dc:creator><comments>https://news.ycombinator.com/item?id=48294191</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48294191</guid></item></channel></rss>