<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: raphlinus</title><link>https://news.ycombinator.com/user?id=raphlinus</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 15 Jun 2026 02:06:54 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=raphlinus" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by raphlinus in "The experience of rendering Arabic typography and its technical debt"]]></title><description><![CDATA[
<p>Any time, friend. Your basic move is to set the lang metadata accurately and choose a font that does have these style differences implemented in the loca table.<p>Best of luck and feel free to reach out if you have more specific questions.</p>
]]></description><pubDate>Mon, 15 Jun 2026 01:28:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=48535383</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=48535383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48535383</guid></item><item><title><![CDATA[New comment by raphlinus in "The experience of rendering Arabic typography and its technical debt"]]></title><description><![CDATA[
<p>I love this question. Basically all scripts have things that make them challenging to render, sometimes little things, sometimes bigger ones.<p>Cyrillic for Russian is reasonably straightforward, but it's also used for many other languages. The variation in style is particularly notable for Bulgarian[1]. A sophisticated font might have a "loca" table with locale-specific adjustments, but this is not universal yet, for example the issue to add it to Open Sans is still open[2]. To see the differences, try [3] and use the Language dropdown to select Bulgarian.<p>[1]: <a href="https://en.wikipedia.org/wiki/Bulgarian_alphabet" rel="nofollow">https://en.wikipedia.org/wiki/Bulgarian_alphabet</a><p>[2]: <a href="https://github.com/googlefonts/opensans/issues/114" rel="nofollow">https://github.com/googlefonts/opensans/issues/114</a><p>[3]: <a href="https://localfonts.eu/freefonts/traditional-cyrillic-free-fonts/spectral/" rel="nofollow">https://localfonts.eu/freefonts/traditional-cyrillic-free-fo...</a></p>
]]></description><pubDate>Sun, 14 Jun 2026 11:22:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48526192</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=48526192</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48526192</guid></item><item><title><![CDATA[New comment by raphlinus in "Swift at Apple: Migrating the TrueType hinting interpreter"]]></title><description><![CDATA[
<p>Yeah, probably should have made a more substantive comment. I'm mostly thinking of the trio of Skrifa, Harfrust, and Parley, but there is other open source Rust work that qualifies as well.<p>There's also, very relevantly, the DWriteCore work from Microsoft. My understanding is that there's been some talk of open sourcing that, but it's still proprietary.<p>There are other things that count as high performance text in memory safe languages, for example implementations in Go, but in general those are not a good candidate to replace C and C++ in environments like operating systems and browsers.</p>
]]></description><pubDate>Sun, 14 Jun 2026 02:43:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48523690</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=48523690</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48523690</guid></item><item><title><![CDATA[New comment by raphlinus in "The state of building user interfaces in Rust"]]></title><description><![CDATA[
<p>The more interesting question is why we're not GUI yet. I have Thoughts on this, which I'll try to briefly summarize here.<p>* It's a genuinely hard problem<p>The state of GUI on Windows is a total mess, very disappointing considering the relative importance and resources that Microsoft has. SwiftUI was a success (Apple is uniquely good at this stuff), but the transition from Cocoa is still not complete. A large part of the reason why it's so hard is that the requirements for different apps vary widely; I think we are spoiled by the relative cohesion<p>* The infrastructure is in disrepair<p>A UI is built on top of lots of infrastructural pieces, obviously including graphics and compositing, but also text, accessibility, input handling, and many other things. When you look at support for those layers across platforms, it's like picking up a rock and seeing the bugs crawl. Take compositing: Windows and Mac have excellent compositors, Android and Linux much less so. But even there the features don't line up, Mac doesn't support incremental present (they don't really need to, considering how beefy their chips are, but it's really important on low end Android).<p>So a lot of the challenge is working around the brokenness across the various platforms. But, good news, there is really excellent progress on all these fronts. We now have solid text layout in Rust, a clear winner on accessibility, and even poor winit is making slow, steady progress.<p>I'd also like to say, by contrast the web has really been investing in infrastructure, and hides much of the lower level pain from developers. I think that's a major reason Electron is winning so much.<p>* The computer science is not quite done<p>We're still in an exploratory phase to figure out the best patterns for writing Rust UI. At the core of that is reactivity, which is at heart incremental computation. Most systems are converging on a hybrid of something generally React like (coarser grain reactivity) with fine-grained signals. I'd like to think there is a Right Answer here and that it's possible to find it.<p>This feels to me a bit like async. The foundations for async Rust were laid 10 years ago, but it still doesn't feel fully baked. I've seen some exciting recent work about improving the confusing Pin mechanism with something more principled. We'll get there, but it takes time.<p>I make three predictions:<p>* Rust UI will continue to improve, as the infrastructure is built out, we try more things, and projects mature. But not quickly.<p>* If we thought we had a lot of Rust UI projects before, wait til we see what AI wreaks. I predict we'll see dozens of vibe coded Rust UI toolkits.<p>* In the longer term, we're going to have Rust UI anyway, as browsers are increasingly going to be rewritten in Rust, and apps will be built on Web technology. And that's not just Electron, the modular browser approach pioneered by Blitz is also promising.</p>
]]></description><pubDate>Sat, 13 Jun 2026 22:19:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48522062</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=48522062</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48522062</guid></item><item><title><![CDATA[New comment by raphlinus in "Swift at Apple: Migrating the TrueType hinting interpreter"]]></title><description><![CDATA[
<p>Welcome to the club of doing high performance text in a memory safe language!</p>
]]></description><pubDate>Fri, 12 Jun 2026 22:12:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=48510040</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=48510040</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48510040</guid></item><item><title><![CDATA[New comment by raphlinus in "Bijou64: A variable-length integer encoding"]]></title><description><![CDATA[
<p>Similar, in that it encodes length in the first byte. The differences are:<p>* It does not require canonicality, it allows multiple encodings of the same value. To make things even more fun, the QUIC spec requires shortest encoding in some uses but not others.<p>* It uses 2 bits rather than cutting out a range.<p>* It only encodes values up to 62 bits long.<p>So, some similarities but also some differences.<p>[1]: <a href="https://www.rfc-editor.org/rfc/rfc9000.html#name-variable-length-integer-enc" rel="nofollow">https://www.rfc-editor.org/rfc/rfc9000.html#name-variable-le...</a></p>
]]></description><pubDate>Fri, 29 May 2026 20:13:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=48328582</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=48328582</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48328582</guid></item><item><title><![CDATA[New comment by raphlinus in "Everything in C is undefined behavior"]]></title><description><![CDATA[
<p>I'm not assuming anything about bit representations. In this case, the spec language is quite clear and unambiguous.<p>6.3.2.3 paragraph 7: A pointer to an object type may be converted to a pointer to a different object type. If the resulting pointer is not correctly aligned[footnote 68]) for the referenced type, the behavior is undefined. Otherwise, when converted back again, the result shall compare equal to the original pointer. When a pointer to an object is converted to a pointer to a character type, the result points to the lowest addressed byte of the object. Successive increments of the result, up to the size of the object, yield pointers to the remaining bytes of the object.<p>This is a subsection of section 6.3 which describes conversions, which include both implicit and conversions from a cast operation. This language is not saying anything about bit representations or derefencing.<p>I happen to be wearing my undefined behavior shirt at the moment, which lends me an extra layer of authority. I'm at RustWeek in Utrecht, and it's one of my favorite shirts to wear at Rust conferences. But let's say for the sake of argument that you are right and I am indeed misunderstanding the spec. Then the logical conclusion is that it's very difficult for even experienced programmers to agree on basic interpretations of what is and what isn't UB in C.</p>
]]></description><pubDate>Wed, 20 May 2026 07:17:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48204234</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=48204234</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48204234</guid></item><item><title><![CDATA[New comment by raphlinus in "Everything in C is undefined behavior"]]></title><description><![CDATA[
<p>The issue is not type punning (itself a very common source of UB), but the fact that the `bytes` pointer might not be int-aligned. The spec is clear that the creation (not just the dereferencing) of an unaligned pointer is UB, see 6.3.2.3 paragraph 7 of the C11 (draft) spec.<p>Of course, this exchange just demonstrates the larger point, that even a world-class expert in low level programming can easily make mistakes in spotting potential UB.</p>
]]></description><pubDate>Wed, 20 May 2026 07:00:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=48204103</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=48204103</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48204103</guid></item><item><title><![CDATA[New comment by raphlinus in "“Why not just use Lean?”"]]></title><description><![CDATA[
<p>People interested in alternatives to Lean should also look at Metamath. It has nowhere near the adoption that Lean is getting, but is holding its own in [100] theorems results.<p>It has some advantages and compelling properties, not least of which is that it's very simple, so much so that there are many implementations of checkers; most other proof systems are ultimately defined by a single implementation. It's also astonishingly efficient — the entire database can be checked in less than a second. Set theory is also a familiar foundation for mathematicians, though the question of which is a <i>better</i> foundation compared with type theory is very controversial. Mario Carneiro pushed forward the development of Metamath in his thesis [0].<p>There are downsides also, including junk theorems, and automation is weaker. It's possible that types really help with the latter. Even so, I think it's worthy of study and understanding.<p>[0]: <a href="https://digama0.github.io/mm0/thesis.pdf" rel="nofollow">https://digama0.github.io/mm0/thesis.pdf</a><p>[100]: <a href="https://www.cs.ru.nl/~freek/100/" rel="nofollow">https://www.cs.ru.nl/~freek/100/</a></p>
]]></description><pubDate>Mon, 27 Apr 2026 20:56:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=47927210</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47927210</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47927210</guid></item><item><title><![CDATA[New comment by raphlinus in "Approximating Hyperbolic Tangent"]]></title><description><![CDATA[
<p>A different approach, refining the square root based sigmoid with a polynomial, is in my blog post "a few of my favorite sigmoids" [1]. I'm not sure which is faster without benchmarking, but I'm pretty sure its worst case error is better than any of the fast approximations.<p>[1]: <a href="https://raphlinus.github.io/audio/2018/09/05/sigmoid.html" rel="nofollow">https://raphlinus.github.io/audio/2018/09/05/sigmoid.html</a></p>
]]></description><pubDate>Thu, 23 Apr 2026 01:07:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47871228</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47871228</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47871228</guid></item><item><title><![CDATA[New comment by raphlinus in "Rust Threads on the GPU"]]></title><description><![CDATA[
<p>You can add to this the Apple terminology, which is simdgroup. This reinforces your point – vendors have a tendency to invent their own terminology rather than use something standard.</p>
]]></description><pubDate>Tue, 14 Apr 2026 10:33:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47763756</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47763756</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47763756</guid></item><item><title><![CDATA[New comment by raphlinus in "Xilem – An experimental Rust native UI framework"]]></title><description><![CDATA[
<p>Indeed. I try not to use the word "native" these days as it has such ambiguous meaning. I <i>also</i> have thought for a while that Windows no longer has native UI, only legacy (Win32) and a rotating carousel of mostly-failed attempts. There have been a few HN stories in the last week that bear me out, notably [1]. Mac of course is in better shape, as AppKit and SwiftUI are both viable (and interop well enough).<p>[1]: <a href="https://news.ycombinator.com/item?id=47651703">https://news.ycombinator.com/item?id=47651703</a></p>
]]></description><pubDate>Wed, 08 Apr 2026 10:48:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47688321</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47688321</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47688321</guid></item><item><title><![CDATA[New comment by raphlinus in "Who is Satoshi Nakamoto? My quest to unmask Bitcoin's creator"]]></title><description><![CDATA[
<p>I found this article about as compelling as all the other attempts at identifying him. Half of the cypherpunks (I was pretty active) had the same set of interests in public key cryptography, libertarianism, anonymity, criticism of copyright, and predecessor systems like Chaum's ecash; we talked about those in virtually every meeting.<p>The most compelling evidence is Adam Back's body language, as subjectively observed by a reporter who is clearly in love with his own story. The stylometry also struck me as a form of p-hacking—keep re-rolling the methodology until you get the answer you want.<p>It's entirely possible Adam is Satoshi, but in my opinion this article moves us no closer to knowing whether that's true or not. He's been on everybody's top 5 list for years, and this article provides no actual evidence that hasn't been seen before.</p>
]]></description><pubDate>Wed, 08 Apr 2026 09:40:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=47687739</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47687739</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47687739</guid></item><item><title><![CDATA[New comment by raphlinus in "Xilem – An experimental Rust native UI framework"]]></title><description><![CDATA[
<p>This is a perfectly reasonable question, and I think there are two aspects to it.<p>First, one of the research questions tested by Xilem is whether it is practical to write UI in Rust. It's <i>plausible</i> that scripting languages do end up being better, but we don't really know that until we've explored the question more deeply. And there are other very interesting explorations of this question, including Dioxus and Leptos.<p>Second, even if scripting languages do turn out to be better at expressing UI design and interaction (something I find plausible, though not yet settled), it's very compelling to have a high performance UI <i>engine</i> under a scriptable layer. I've done some experiments with Python bindings, and I think in an alternate universe you'd have apps like ComfyUI as high performance desktop app rather than a web page. Also, the layering of Xilem as the reactive layer, backed by Masonry as the widgets, is explicitly designed to be amenable to scripting, though to my knowledge there hasn't been a lot of actual work on this.</p>
]]></description><pubDate>Wed, 08 Apr 2026 09:32:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=47687639</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47687639</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47687639</guid></item><item><title><![CDATA[New comment by raphlinus in "Xilem – An experimental Rust native UI framework"]]></title><description><![CDATA[
<p>There is an Svg widget. It only supports static images, not animations, though this is certainly something I'm interested in.<p>It does support the modern 2D imaging model. It is in transition from using "Vello GPU" (aka Vello Classic) to the understory imaging abstraction, which means it can use any competent 2D renderer, including Skia.</p>
]]></description><pubDate>Wed, 08 Apr 2026 09:25:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47687578</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47687578</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47687578</guid></item><item><title><![CDATA[New comment by raphlinus in "Gerd Faltings, who proved the Mordell conjecture, wins the Abel Prize"]]></title><description><![CDATA[
<p>My understanding, which is to be taken with a grain of salt, is that there's an additional constraint, not stated in the Scientific American article, that the plane curve be <i>irreducible.</i> The example of x^4 is reducible, it's x^2 * x^2 among other thing. The actual conjecture is expressed in terms of genus, but this follows from the genus-degree formula.</p>
]]></description><pubDate>Tue, 24 Mar 2026 10:33:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=47500707</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47500707</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47500707</guid></item><item><title><![CDATA[New comment by raphlinus in "BIO: The Bao I/O Coprocessor"]]></title><description><![CDATA[
<p>Yes, I can see BIO being really good at USB host. With 4k of SRAM I can see it doing a lot more of the protocol than just NRZI; easily CRC and the 1kHz SOF heartbeat, and I wouldn't be surprised if it could even do higher level things like enumeration.<p>You may be right about not much scope for DVI in volume products. I should be clear I'm just playing with RP2350 because it's fun. But the limitation you describe really has more to do with the architectural decision to use a framebuffer. I'm interested in how much rendering you can get done racing the beam, and have come to the conclusion it's quite a lot. It certainly includes proportional fonts, tiles'n'sprites, and 4bpp image decompression (I've got a blog post in the queue). Retro emulators are a sweet spot for sure (mostly because their VRAM fits neatly in on-chip SRAM), but I can imagine doing a kiosk.<p>Definitely agree that bit-banging USB at 480Mbps makes no sense, a purpose-built PHY is the way to go.</p>
]]></description><pubDate>Tue, 24 Mar 2026 08:09:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47499816</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47499816</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47499816</guid></item><item><title><![CDATA[New comment by raphlinus in "BIO: The Bao I/O Coprocessor"]]></title><description><![CDATA[
<p>Thanks btw for saying clearly that BIO is not suitable for DVI output. I was curious about this and was planning to ask on social media.<p>I've done some fun stuff in PIO, in particular the NRZI bit stuffing for USB (12Mbps max). That's stretching it to its limit. Clearly there will be things for which BIO is much better.<p>I suspect that a variant of BIO could probably do DVI by optimizing for that specific use case (in particular, configuring shifters on the output FIFO), but I'm not sure it's worth the lift.</p>
]]></description><pubDate>Mon, 23 Mar 2026 19:17:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47493894</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47493894</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47493894</guid></item><item><title><![CDATA[New comment by raphlinus in "Plane and ground vehicle collide at New York's LaGuardia airport halting flights"]]></title><description><![CDATA[
<p>Very informative, thanks for the link!<p>ATC audio is <a href="https://archive.liveatc.net/klga/KLGA-Twr-Mar-23-2026-0330Z.mp3" rel="nofollow">https://archive.liveatc.net/klga/KLGA-Twr-Mar-23-2026-0330Z....</a><p>The clearance for AC8646 to land on runway 4 is given in a sequence starting at 4:58. "Vehicle needs to cross the runway" at 6:43.  Truck 1 and company asks for clearance to cross 4 at 6:53. Clearance is granted at 7:00. Then ATC asks both a Frontier and Truck 1 to stop, voice is hurried and it's confusing.</p>
]]></description><pubDate>Mon, 23 Mar 2026 09:30:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47487098</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47487098</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47487098</guid></item><item><title><![CDATA[New comment by raphlinus in "Every layer of review makes you 10x slower"]]></title><description><![CDATA[
<p>Funny enough, the author of this blog post wrote another one on exactly that topic, entitled "What do executives do, anyway?"[1]. If you read it, you'll find it's written from quite an interesting perspective, not quite "fly on the wall," but perhaps as close as you're going to get in a realistic scenario.<p>[1]: <a href="https://apenwarr.ca/log/20190926" rel="nofollow">https://apenwarr.ca/log/20190926</a></p>
]]></description><pubDate>Tue, 17 Mar 2026 09:51:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=47410523</link><dc:creator>raphlinus</dc:creator><comments>https://news.ycombinator.com/item?id=47410523</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47410523</guid></item></channel></rss>