<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: Dagonfly</title><link>https://news.ycombinator.com/user?id=Dagonfly</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 13 Oct 2026 06:20:55 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=Dagonfly" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by Dagonfly in "The gap in shared understanding of LLM capability is widening"]]></title><description><![CDATA[
<p>It's honestly shocking how terrible copilot is at generating interesting and relevant metrics from excel.<p>The local optimum still seems to be: Let LLM of your choice generate a polars script that reads the spreadsheet and explores them for you.<p>My partner recently used that "pattern" at work to find outliers and interesting metrics in years of excel reports. Data they were working hours for. Now available in a single human language query.<p>I don't think the HN crowd understands how many million jobs are primarily staring at excel reports and copying values between forms, pdfs and spreadsheets.</p>
]]></description><pubDate>Mon, 12 Oct 2026 21:21:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=50063237</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=50063237</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50063237</guid></item><item><title><![CDATA[New comment by Dagonfly in "Passkeys are a trap"]]></title><description><![CDATA[
<p>Skimming through the exchange protocol draft it seems like a pretty standard diffie-hellman. Seems easy enough to write a FOSS script that requests an export and then dumps it to plaintext.</p>
]]></description><pubDate>Mon, 12 Oct 2026 19:13:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=50061397</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=50061397</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50061397</guid></item><item><title><![CDATA[New comment by Dagonfly in "Passkeys are a trap"]]></title><description><![CDATA[
<p>Yeah, I was only talking about differences for backup.<p>As long as no attestation is used, you only have to store the private key, credentialId and userHandle (basically the server generated ids of the passkey and the user). That's not to different to writing down username and password.</p>
]]></description><pubDate>Mon, 12 Oct 2026 15:20:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=50057729</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=50057729</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50057729</guid></item><item><title><![CDATA[New comment by Dagonfly in "Passkeys are a trap"]]></title><description><![CDATA[
<p>Why would they need to re-generate? Pretty much all websites are using copyable passkeys. The user just needs log in to their password manager on their new device. Which for most people just means logging in to their Apple or Google account. There is virtually no difference to storing generated passwords in a password manager or storing passkeys.<p>And the sad truth is: Most people have no password manager at all. They are used to re-generate new passwords every time they want to log in! I'd wager that on some websites the vast majority of people are loggin in by pressing "I forgot my password".</p>
]]></description><pubDate>Mon, 12 Oct 2026 10:36:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=50054335</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=50054335</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50054335</guid></item><item><title><![CDATA[New comment by Dagonfly in "Passkeys are a trap"]]></title><description><![CDATA[
<p>Passkeys are just a private key plus some metadata.<p>Bitwarden lets you export your vault, and the export contains the private key in plain text. There is virtually no difference to writing down a password on a piece of paper. Well, I guess a passkey is a lot longer than the avg password.<p>This changes if attestation ever becomes widespread. Which will only happen if Apple does a U-turn on their stance.</p>
]]></description><pubDate>Mon, 12 Oct 2026 08:44:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=50053336</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=50053336</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50053336</guid></item><item><title><![CDATA[New comment by Dagonfly in "Git 3.0's upcoming SHA-256 default will be a costly mistake"]]></title><description><![CDATA[
<p>Tbh, I would have imagined the SHA-256 transition to work differently.<p>Let's treat git as a SHA1-keyed object storage. The problem is that we currently use SHA1 both as database key and as hash for integrity validation. At first, I would have only changed the latter.<p>Local: Request object with key x (SHA1). Remote: Here are the bytes for key x (SHA1) with hash SHA-256. Local: Validate the bytes vs SHA-256.<p>Local: Store the following bytes with key x (SHA1). Remote: Check if key x has ever been stored in the database. If so check that the SHA-256 of the new bytes matches the SHA-256 stored under key x. The only thing the repo has to keep is a LUT from stored keys (SHA1) to hash (SHA-256). The prevents SHA1 collisions from being stored.<p>The SHA1 key then just becomes a convenient alias for an object. The only restriction is that you can't have two objects with the same SHA1 in a repo. We already kinda do this when we refer to commits with the first few chars of the SHA1. If there is a "collision" git already detects it and asks you for more characters.<p>Finally, you can convert the internal representation of the tree to SHA-256. If some legacy client requests aliases via SHA1 you use the LUT, new clients request the SHA256 directly.<p>Am I missing anything obvious here?</p>
]]></description><pubDate>Fri, 02 Oct 2026 11:59:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=49932507</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=49932507</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49932507</guid></item><item><title><![CDATA[New comment by Dagonfly in "Linux 7.2"]]></title><description><![CDATA[
<p>Plenty of high refresh gaming monitors out there that use HDMI 2.1 or DP1.4 with DSC.<p>DSC is just the "card up the sleeve" for DP1.4, you can push it all the way to 4K 240hz HDR. So there is little incentive to switch to DP2.1 for OEMs.</p>
]]></description><pubDate>Thu, 20 Aug 2026 23:03:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=49381464</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=49381464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49381464</guid></item><item><title><![CDATA[New comment by Dagonfly in "Rust project goals: Immobile types and guaranteed destructors"]]></title><description><![CDATA[
<p>Oh yeah, I've read about all your blog post on this topic :)<p>To dump some ideas on you:
I think one missing piece might be that FnOnce() -> impl Future should implement IntoFuture. Async runtimes would then use IntoFuture in their APIs agressively.<p>I call this a "workload blueprint"  at work. Its a closure/type that contains all the info to start the workload, but in a minimal form. In Rust terms this would be a buildprint that is ideally Send + Move + Forget + 'static, even if the actual work (and the backing struct of the Future) is !Send (e.g. It holds an Rc across await points).<p>Runtimes could use this for their advantage: There would be a global pool of "workload blueprint" that can be stolen by any executer thread, but once a !Send workload has started on one thread it can't be migrated to another.<p>This in combination with matklad's ideas about seperating TaskSend from ThreadSend (<a href="https://matklad.github.io/2023/12/10/nsfw.html" rel="nofollow">https://matklad.github.io/2023/12/10/nsfw.html</a>) would solve most of my async pain points.</p>
]]></description><pubDate>Tue, 04 Aug 2026 08:40:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=49165850</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=49165850</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49165850</guid></item><item><title><![CDATA[New comment by Dagonfly in "Rust project goals: Immobile types and guaranteed destructors"]]></title><description><![CDATA[
<p>Sure, thats one reason why IntoFuture and Future exist. Imo, in hindsight this is also main mistake in aysnc Rust: The whole async system should be build around IntoFuture rather than Future (async fn should return impl IntoFuture).<p>That way you could pass around IntoFutures without being affected by auto traits leaking. Only when you actually call .await() or .poll() would the immovable Future materialize.</p>
]]></description><pubDate>Mon, 03 Aug 2026 19:26:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=49160299</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=49160299</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49160299</guid></item><item><title><![CDATA[New comment by Dagonfly in "Rust project goals: Immobile types and guaranteed destructors"]]></title><description><![CDATA[
<p>Here is an example of the problem: <a href="https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=c4e2a17964a92c19db33e1169e2806b8" rel="nofollow">https://play.rust-lang.org/?version=stable&mode=debug&editio...</a><p>Imagine if MyTrait comes from core/std. Adding an opt-out bound like ?Sized (or ?Move) is a breaking change for any generic code that relies on Sized/Move. But you want some traits from std to be open for !Move types.</p>
]]></description><pubDate>Mon, 03 Aug 2026 14:44:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=49156495</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=49156495</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49156495</guid></item><item><title><![CDATA[New comment by Dagonfly in "Rust project goals: Immobile types and guaranteed destructors"]]></title><description><![CDATA[
<p>The compat issue has always been associated types on std traits.<p>For example, should Iterator::Item be Move or ?Move<p>If you leave it as Move, you can't create any iterators over !Move types. If you change it to ?Move, then functions using generic iterators can't assume that the elements of an Iterator are always moveable. Which is a breaking change compared to now.<p>The most critical trait is probably Deref. Using !Move types without `Deref::Target: ?Move` is painful, because calling any method on boxed types relies on Deref.</p>
]]></description><pubDate>Mon, 03 Aug 2026 14:22:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=49156186</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=49156186</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49156186</guid></item><item><title><![CDATA[New comment by Dagonfly in "Rust project goals: Immobile types and guaranteed destructors"]]></title><description><![CDATA[
<p>Passing ownership to another thread is not the same as forgetting/leaking.<p>The point of !Forget is ensuring that once the owner goes out of scope the destructor must be guaranteed to run. An infinite loop is not a problem, cause the new thread will never leave its scope. Ref-cycles are a problem, cause you can create a ref-cycle. Then the program flow leaves the scope which will run the drop on all RC's but not the drop on the inner type.</p>
]]></description><pubDate>Mon, 03 Aug 2026 14:11:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=49156044</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=49156044</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49156044</guid></item><item><title><![CDATA[New comment by Dagonfly in "Rust project goals: Immobile types and guaranteed destructors"]]></title><description><![CDATA[
<p>> the point of Pin is to wrap types that CAN move.<p>I would highlight that there are many cases where you CAN move an object safely until a certain operation requires the object to "stay put" in place.<p>Pin allows for that by tying the object to the place only when required. That's why Pin relates to both the object and the place.<p>Meanwhile, !Move types can't ever move. The object has to remain in the inital place it was constructed in. !Move requires in-place construction and emplacement to be ergonomic at all.</p>
]]></description><pubDate>Mon, 03 Aug 2026 13:45:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=49155740</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=49155740</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49155740</guid></item><item><title><![CDATA[New comment by Dagonfly in "Global Warming at 3 °C by 2050? What's Behind the New German Climate Warning"]]></title><description><![CDATA[
<p>> some of the dirtiest electricity generation in the entire world<p>In Europe. Still cleaner than the US, China, India, Japan, and the world avg:<p><a href="https://ourworldindata.org/grapher/carbon-intensity-electricity" rel="nofollow">https://ourworldindata.org/grapher/carbon-intensity-electric...</a><p>Coal and gas are down 50% compared to 10 years ago despite the shut-down. Nevertheless, shutting down the last few ones was bad.</p>
]]></description><pubDate>Wed, 15 Jul 2026 17:52:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48924617</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=48924617</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48924617</guid></item><item><title><![CDATA[New comment by Dagonfly in "I keep tripping over "true, false, true""]]></title><description><![CDATA[
<p>It's the one thing I miss from Swift when I'm using literally any other language. Interal and external parameter names. I would love for Rust to adopt:<p><pre><code>  fn foo(namedParam internalName: bool) { // use internalName here }

  fn foo(unnamedParam: bool)</code></pre></p>
]]></description><pubDate>Mon, 11 May 2026 14:21:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48095367</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=48095367</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48095367</guid></item><item><title><![CDATA[New comment by Dagonfly in "Removable batteries in smartphones will be mandatory in the EU starting in 2027"]]></title><description><![CDATA[
<p>Just to be clear: There is an official notice of the EU commission making this legal argument:<p><a href="https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=CELEX:52025XC00214" rel="nofollow">https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=CELEX:52...</a><p>> Consequently, in the case of portable batteries included in products covered by Regulation (EU) 2023/1670, the removability and replaceability obligations set out in Annex II of that Regulation prevail over those set out in Regulation (EU) 2023/1542.<p>The ecodesign law (spare part but 1000 cycle exemption) pevails over the batteries law.</p>
]]></description><pubDate>Tue, 05 May 2026 08:54:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=48019787</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=48019787</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48019787</guid></item><item><title><![CDATA[New comment by Dagonfly in "Germany Power Prices Turn Deeply Negative on Renewables Surge"]]></title><description><![CDATA[
<p>You are right that intraday went even more negative than day-ahead. But I disagree about the rest of your comment. A spread between day-ahead and intraday does not imply additional redispatch. Only some of it might have been countertrading by the grid operators.<p>The redispatch was not extraordinary: <a href="https://energy-charts.info/charts/power_redispatch/chart.htm?l=en&c=DE&redispatch=redispatch_internal&month=04" rel="nofollow">https://energy-charts.info/charts/power_redispatch/chart.htm...</a></p>
]]></description><pubDate>Tue, 07 Apr 2026 12:55:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=47674587</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=47674587</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47674587</guid></item><item><title><![CDATA[New comment by Dagonfly in "Germany Power Prices Turn Deeply Negative on Renewables Surge"]]></title><description><![CDATA[
<p>So many questionable comments in here.<p>Negative prices have no effect on grid stability. It just means that the day-ahead market was cleared below 0, i.e. for every consumer (buyer) there is a producer (seller) selling at this price. The market is still balanced with consumption==production.<p>Now, you can ask the question: Why are so many producers willing to sell below 0? That has to do with misplaced incentives. For older or home-installed renewables there is a feed-in tarrif which guarantees a fixed revenue at all times. So there is an incentive to sell even for negative market prices. Newer installations can't opt for the guaranteed revenue model with revenue during negative prices any more.<p>Redispatch follows afterwards, if the market result clashes with physics: The physical grid can't transport the power from producer to consumer. There was no unusual amount of redispatch during easter.<p>Source: I work on this stuff.</p>
]]></description><pubDate>Tue, 07 Apr 2026 12:06:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47673944</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=47673944</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47673944</guid></item><item><title><![CDATA[New comment by Dagonfly in "Yep, Passkeys Still Have Problems"]]></title><description><![CDATA[
<p>Well it relates to this sentence:<p>> You can use any credential manager you choose.<p>Which I would be careful with. I can use any authenticator <i>that the RP accepts</i>. I could totally see a future where banks only allow certain authenticators (Apple/Google) and enforce this through AAGUID or even attStmt. Similar to the Google Play Protect situation.<p>At that point, those banks/services would enforce vendor lock-in on me. The reality would be: I can use iOS or Android, but not a FOSS implementation. This restriction is not possible with old-school passwords.</p>
]]></description><pubDate>Wed, 17 Dec 2025 22:48:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=46306668</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=46306668</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46306668</guid></item><item><title><![CDATA[New comment by Dagonfly in "Yep, Passkeys Still Have Problems"]]></title><description><![CDATA[
<p>Quoting your comments on github [0]<p>>> There is no passkey certification process<p>> This is currently being defined and is almost complete.<p>>> no signed stamp of approval from on high<p>> see above. Once certification and attestation goes live, there will be a minimum functional and security bar for providers.<p>Will I always be able to use <i>any</i> credential manager of my choice? <i>Any</i> naturally also includes software that I might have written myself. And would you be in support of an ecosystem where RPs might block my implementation based on my AAGUID?<p>[0] <a href="https://github.com/keepassxreboot/keepassxc/issues/10406#issuecomment-1994313373" rel="nofollow">https://github.com/keepassxreboot/keepassxc/issues/10406#iss...</a></p>
]]></description><pubDate>Wed, 17 Dec 2025 21:24:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=46305705</link><dc:creator>Dagonfly</dc:creator><comments>https://news.ycombinator.com/item?id=46305705</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46305705</guid></item></channel></rss>