<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><description>DX &amp; monorepo at Shopify.&#xA;Craving simplicity, finding it nowhere.&#xA;Internetrovert 🏳️‍🌈 He/him.</description><link>https://bsky.app/profile/surma.dev</link><title>@surma.dev - Surma</title><item><link>https://bsky.app/profile/surma.dev/post/3mgdkp2dyvs2h</link><description>`builtins.wasm` is now a (experimental) thing in @determinate.systems’ nix, with a PR open for upstream nix.&#xA;&#xA;This lets you extend the nix language by compiling C/C++/Rust/etc into safely sandboxed, platform-independent plugins!&#xA;&#xA;https://determinate.systems/blog/builtins-wasm/</description><pubDate>05 Mar 2026 19:44 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3mgdkp2dyvs2h</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3m3d5zvkaik2v</link><description>I have been working on the nix &amp; Rust codebase that builds Shopify’s monorepo, and there’s so much left to do that we need help.&#xA;&#xA;If you are interested, apply here to join us! DM me if you have questions!&#xA;&#xA;https://www.shopify.com/careers/software-engineer-monorepo-systems-rust-nix_95aac134-c21a-456d-b8b3-a9aac6aa6118</description><pubDate>16 Oct 2025 16:20 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3m3d5zvkaik2v</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3lyfgoojg3k2y</link><description>You know your JS13k submission is going well when you have to resort to `btoa` and other seemingly stupid hacks to get below the file size limit.</description><pubDate>09 Sep 2025 09:45 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3lyfgoojg3k2y</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3lxzf2trhvk2l</link><description>Nix friends: How terrible is this idea?&#xA;&#xA;I added `builtins.runWasm` to nix, allowing you to call out to Wasm. The Wasm is reset every time, so the functions remain pure. This gives you a (performant?) escape hatch for things that Nix is missing. E.g parsing YAML (here: via Rust)</description><pubDate>04 Sep 2025 14:44 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3lxzf2trhvk2l</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3ltmhekmzgc2k</link><description>Convince me I am wrong: This should not be a type error, right?&#xA;- I asserted it’s an object&#xA;- I am using `?.` for property access&#xA;&#xA;www.typescriptlang.org/play/#code/G...</description><pubDate>10 Jul 2025 13:40 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3ltmhekmzgc2k</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3lrsvjrj42c2d</link><description>📝 First blog in a long time!&#xA;&#xA;I always like “flow-based” programming, and it’s a very powerful paradigm. LangGraph lets you codify complex workflows as graphs, and also integrates really well with LangChain, if your workflow is LLM-driven.&#xA;&#xA;https://surma.dev/things/langgraph/</description><pubDate>17 Jun 2025 16:19 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3lrsvjrj42c2d</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3llgnze72yk2u</link><description>Unexpected dangers of vibe coding:&#xA;Somehow git ended up tracking its own .git folder and now I can&#39;t commit anymore :3</description><pubDate>28 Mar 2025 11:01 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3llgnze72yk2u</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3lg6bscwczk2t</link><description>Folks who know their way around the TypeScript type checker, I need help:&#xA;&#xA;https://gist.github.com/surma/be14ca81065bf227cee785870ee8a993&#xA;&#xA;How do I figure out what types the type parameters have been bound to given a `CallExpression`? I know the answer is in `resolvedSignature.mapper`, but that’s not a public API.</description><pubDate>20 Jan 2025 11:55 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3lg6bscwczk2t</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3lfzgzzenzs2d</link><description>Wait, am I dumb? What does NodeJS&#39; WASI implementation only accept file descriptor numbers for stdio? Why don&#39;t they allow a Readables/Writables? How are you supposed to capture the output of a WASI module?&#xA;&#xA;https://nodejs.org/api/wasi.html#new-wasioptions</description><pubDate>18 Jan 2025 13:46 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3lfzgzzenzs2d</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3ldggie5ki22f</link><description>I apologize for splitting the last OTMT episode into two parts. It was sincerely unplanned.&#xA;&#xA;🎧 Part II of the TC39 Drama 🌶️ Roundup is now out! &#xA;&#xA;In this one, I talk to @jakearchibald.com about JS0, which proposes to split JavaScript into two specifications.&#xA;&#xA;https://offthemainthread.tech/episode/tc39-js0-and-jssugar/</description><pubDate>16 Dec 2024 13:25 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3ldggie5ki22f</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3ldggie5ki22f</link><description>I apologize for splitting the last OTMT episode into two parts. It was sincerely unplanned.&#xA;&#xA;🎧 Part II of the TC39 Drama 🌶️ Roundup is now out! &#xA;&#xA;In this one, I talk to @jakearchibald.com about JS0, which proposes to split JavaScript into two specifications.&#xA;&#xA;https://offthemainthread.tech/episode/tc39-js0-and-jssugar/</description><pubDate>16 Dec 2024 13:25 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3ldggie5ki22f</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3lcfsz2se6c2r</link><description>🎧 A brand-new OTMT episode should be in your podcast players by now: &#xA;The TC39 Roundup 🌶️ Drama Edition — Part I&#xA;&#xA;I talk to @jakearchibald.com about the TC39 Structs proposal and how it is a big step towards shared-data multithreading in JS.&#xA;&#xA;https://offthemainthread.tech/episode/tc39-shared-structs/</description><pubDate>03 Dec 2024 14:11 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3lcfsz2se6c2r</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3l7nylpu3xa2s</link><description>Get your 👂ears ready for a brand new OTMT episode!&#xA;&#xA;A while ago we talked about Bazel, and now it&#39;s time to take a closer look at Nix! How does it work? Is it any good for web development? In this episode, @jakearchibald.com and I try to provide answers.&#xA;&#xA;offthemainthread.tech/episode/nix/&#xA;https://offthemainthread.tech/episode/nix/</description><pubDate>29 Oct 2024 15:57 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3l7nylpu3xa2s</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3l7gfcqvu2y23</link><description>I love what keybr.com thinks Rust code looks like</description><pubDate>26 Oct 2024 15:23 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3l7gfcqvu2y23</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3l6ze3s4nc523</link><description>ICYMI: In the latest episode of OTMT @jakearchibald.com told me all about the new, completely stylable &lt;select&gt; element, and the 10 underlying web platform features that were spec&#39;d to make this possible.&#xA;https://offthemainthread.tech/episode/stylable-select-element/</description><pubDate>21 Oct 2024 10:57 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3l6ze3s4nc523</guid></item><item><link>https://bsky.app/profile/surma.dev/post/3l3lhsk2ulr22</link><description>Still discovering new shell tricks.&#xA;&#xA;TIL: Substitutions.&#xA;&#xA;`cmd &lt;(cat file)` invokes `cmd`  with the first parameter being a named pipe (e.g. `/dev/fd/22`) which contains the contents of `file`.&#xA;&#xA;Example use-case: You wanna diff two files, but they are binary so need disassembling</description><pubDate>07 Sep 2024 18:10 +0000</pubDate><guid isPermaLink="false">at://did:plc:2jk7es2j2kibpq34xuglobww/app.bsky.feed.post/3l3lhsk2ulr22</guid></item></channel></rss>