HNHacker News
TopNewBestAskShowJobs

dasyatidprime

718 karma · joined October 4, 2015

Some sort of hacker-type creature. (The well-intentioned kind.) Austin, TX, USA. rtt at sdf.org.
submissionscomments
dasyatidprime··on If AI writes your code, why use Python?
Not what anyone was talking about. Training corpus ≠ inference engine.
dasyatidprime··on Incident Report: CVE-2024-YIKES
The dependency cycle is actually the functional mechanism of the code, because they subvert the dedup mechanism in the package manager using a random generation trick. Each recursive copy of the dependencies takes up a little bit more space, which ultimately gets converted to the spaces inserted into the original datum; the caller is expected to adjust the cache settings to signal the desired amount. That's also why if you're using left-justify to process strings, Yarn is recommended for best compatibility. /joke
dasyatidprime··on Incident Report: CVE-2024-YIKES
The tag list at the top of the page includes “satire”.
dasyatidprime··on Today I've made the difficult decision to reduce the size of Coinbase by ~14%
I think this is just semantic drift (though I am broadly sympathetic to “boo semantic drift”). I see this business use of the term as treating the “mind attuned to being immersed in” and “habitually, automatically reaches for” sub-meanings as the relevant ones, which is (almost as you say, but skew) not quite the same thing as “proficient when the ability is actively engaged”. The more you're trying to navigate a dynamic environment rather than hiring for tasks well-defined in advance, the more that distinction matters in practice.
dasyatidprime··on I'm scared about biological computing
What is the source line at the end representing there? I've read The Restaurant at the End of the Universe, and while it definitely contains (and I see it as a major cultural anchor for) animals bred to desire being eaten and be able to say so, it doesn't contain that particular scene (at least in the version I read). Is that line Baggini noting that his scene was inspired by the Adams book?
dasyatidprime··on Denuvo has been cracked in all single-player games it previously protected
Are you grouping the implementors with the crackers because they understand the limitations of the technology, or are you saying they're directly working with each other to scam the publishers and/or audience (and that this is sufficiently common to overturn the whole framing—a conflict can have some proportion of double agents and defectors while centrally remaining a conflict)? If the former, even supposing that many individual implementors and crackers would agree that the technology is inefficient/breakable/whatever, I still think the driving conflict that causes the implementation and the cracking to happen at all is between a broad cluster of agents around the game publishing activity (including managers, investors, game developers and artists, and more indirectly DRM implementors, integrators, and salespeople) and a broad cluster of agents around the unauthorized copying activity (including people who do ripping and DRM cracks on a technical level, distribution channels, and people who look to those channels to play games without buying them the authorized way). That there are principal–agent inconsistencies within each cluster seems like more of a sideshow; a war doesn't stop being a war because enough of the soldiers have realized that their weapons don't work very well, or because they realize that in some other world they'd have been on the same side.
dasyatidprime··on Denuvo has been cracked in all single-player games it previously protected
The “keep up the appearance of working” story feels like a misleading comparison to me, because the motivations are pretty much reversed. In the hypothetical factory, there's an external social element requiring the appearance of working, some observer to whom it looks good that this is happening: the way I read it, the assemblers and disassemblers may well be cooperating with each other to produce that appearance, so that the absurdity is visible from within (though they could also just be unaware of each other's assigned tasks). In the case of anti-copying technologies, game publishers trying to guard their revenue stream, and other groups trying to distribute or play unauthorized copies, are adversaries whose tactics create relative losses for each other that can bleed into the surrounding society: seems bad that it impacts other users / risks jobs and livelihood / is various forms of unfair (depending on one's moral feelings around which actions are ‘justified’), but their individual actions are incentive-aligned from within the conflict.
dasyatidprime··on A couple million lines of Haskell: Production engineering at Mercury
Escape analysis that sinks a local allocation is great in itself, but for newtypes for things like “trusted HTML vs plain text”, I feel like the primary benefits are deeply interprocedural. The type constraint is encoding a promise that can be carried from one end of the code base to the other, and where you can know for sure when you're writing a module whether you're on one side of a barrier or the other. I would tend to expect this to result in patterns that aren't well-handled by escape analysis.

What I'm imagining for my curiosity about the dynamic case would look more like “JS/Lua/whatever engine detects that in frob(x) calls, x is always shaped like { foo: ‹string› } and its object identity is unused, so it replaces the calling convention for frob internally, then propagates that to any further callers”, and it might do the same thing when storing one of those in fields of other objects of known shapes, etc. until eventually it hits a boundary where the constraint isn't known to hold and has to be ready to materialize the wrapper object there.

Kotlin and Scala sound like they're doing the Rust/C++ thing at the bytecode level, if it's being “erased”, so just the static case again but with different concrete levels for machine vs language.

dasyatidprime··on A physics engine with incremental rollback for multiplayer games
What you're describing isn't uploading the game, then, but uploading a stub with a transclusion of the game. I'm not the same commenter, but surely that doesn't answer (what I see as) most of the implications of the original question?
dasyatidprime··on Dotcl: Common Lisp Implementation on .NET
Re that last: FWIW, in Emacs Lisp (which is case-preserving and mostly lowercase by convention, without the legacy symbol case behavior of CL), docstring convention is to use single quotes for most literals and to use all-caps to mean the value of a local symbol—usually a function argument, but sometimes a variable introduced in running text for describing the structure of data or such. Last I checked, CL wasn't as consistent across projects, but I tend to carry the Emacs convention there when not conforming to a different local style, and wonder sometimes who would have their monocle pop off to see it…
dasyatidprime··on A couple million lines of Haskell: Production engineering at Mercury
> There's a performance cost to this

That part is (de facto) required for dynamically typed languages, but not for statically typed ones where the newtype constructor/deconstructor can be elided at compile time. Rust and C++ especially both do the latter by having true value types available for wrappers that evaporate into zero extra machine code.

But then just this moment I wondered: do any major runtimes using models with no static type info manage to do full newtype elision in the JIT and only box on the deopt path? What about for models with some static type info but no value types, like Java? (Java's model would imply trickiness around mutability, but it might be possible to detect the easy cases still.) I don't remember any, but it could've shown up when I wasn't looking.

dasyatidprime··on Mine, an IDE for Coalton and Common Lisp
> mine is not Emacs.

Ah… yes, okay, I see what they did there… chuckle, sigh. Well, it's arguably in the same grand cultural tradition as EINE and ZWEI at least!

dasyatidprime··on The Free Universal Construction Kit
… because "â€" and "ae" are visually similar?
dasyatidprime··on Girl, 10, finds rare Mexican axolotl under Welsh bridge
It's technically not just “an L” if we're trying to avoid Anglicizing the pronunciation, right? The “tl” cluster is its own affricate with a lateral fricative as its tail, or am I misremembering?
dasyatidprime··on OpenAI ad partner now selling ChatGPT ad placements based on “prompt relevance”
And to tie the third leg of the triangle back, ovals are called that because they're egg-shaped.
dasyatidprime··on State of Kdenlive
Is that due to patent issues? A lot of people running open source H.264 codecs¹ on Linux just ignore the patents and assume they're under the radar, but I bet a high-profile commercial entity can't get away with that. Like as a point of comparison, I remember the Raspberry Pi selling add-on license keys for certain codecs at one point for a similar reason, but that probably doesn't look like such a good strategy for a video editor on a niche platform. Then there was the thing where Red Hat had some kind of licensing deal with Cisco…

¹ I don't remember which implementations are subject to this or what the actual terms are.

dasyatidprime··on Microsoft isn't removing Copilot from Windows 11, it's just renaming it
You could indeed run Windows in a VM with PCI passthrough, and for a while long ago my desktop was Xen and I ran a Windows 7 domU which was attached to a second graphics card. Sharing a GPU at least used to be much harder; I think there's better options nowadays than before (paravirtualization-style GPU-command-level passthrough devices, and I assume some graphics hardware supports being split up for partial IOMMU passthrough in the way some high-end network cards do), but I don't know how they stack up for gaming performance.

However, the use case under discussion touches on things like handling kernel-level anti-cheat requirements, which is exactly the kind of place where I'd expect you to get in trouble trying to jigger around with virtual machines. Even before that point, I get the general feeling games and game platforms can get tetchy when you're not on Real Recognizable Hardware.

dasyatidprime··on Microsoft isn't removing Copilot from Windows 11, it's just renaming it
Normal/classical FDE doesn't truly protect integrity, only confidentiality. Supposedly LUKS2 allows you to run with --integrity, but it's an extra layer of I/O amplification, and if you're willing to take that hit then there's less incentive not to just use an external drive. https://security.stackexchange.com/questions/87367/does-luks...

As for Secure Boot, maybe? I haven't thought through how that would help in this context, but my instinct is to ask how you'd do the binding between “I intend to boot Y instead of X” and “only accept the boot signature for Y instead of X”, so that malware can't try to unexpectedly substitute X. It feels like there's probably places for attackers to mess around here unless you're very careful.

dasyatidprime··on Microsoft isn't removing Copilot from Windows 11, it's just renaming it
I've considered this for consolidating core hardware, but dual-boot doesn't do trust boundaries well. The Windows kernel still has full block access to the other device, so if it gets admin-level malware, it has free rein to infect the other system. At one point several years ago I got partway through a plan involving having most disks be externally pluggable (and assuming that firmware-level malware persistence is unlikely, which I'm not as sure about these days) but gave up for unclear reasons. I think if I were to try that again (and if I had the hardware for it) I'd try some kind of NAS approach to separate storage credentials from the OS.
dasyatidprime··on Union types in C# 15
I don't think they were trying to accomplish the same thing as the Scala/Haskell version; these are just two completely different things that happen to share a name because the blog post gave the example a name that is confusing when read literally. The purpose of the Cats version is “there is always a head element”. The purpose of the union in the blog post is more like “this can be a collection, but many callers will be thinking of it as a single element, so don't put the burden on them to convert it”. I do think it's a weak case for them in a type theory sense (I would tend to position that kind of implicit conversion elsewhere in the language), but I can also see it being motivating to a large class of developers…

… wait, I've made a different mistake here while trying to explain the difference, haven't I? I was describing it as a sum type, but it's not really a sum type, it's really just set-theoretic union, right?

Which also means OneOrMore is unsound in a different way because it doesn't guarantee that T and IEnumerable<T> are disjoint; OneOrMore<object> initialized from [x] will always return [[x]] from AsEnumerable, won't it? If I'm interpreting the switch expression correctly and the first case predominates, since a list is-an object? I don't have a test setup handy; someone with actual C# experience, please tell me whether that's correct or whether the compiler signals an error here or something…

dasyatidprime··on Union types in C# 15
The NonEmptyList in Cats is a product (struct/tuple) type, though; I assume the Haskell version is the same. The type shown in the blog post is a sum (union) type which can contain an empty enumerable, which contradicts the name OneOrMore. The use described for the type in the post (basically a convenience conversion funnel) is different and makes sense in its own right (though it feels like kind of a weak use case). I'm not sure what a good name would've been illustratively that would've been both accurate and not distracting, though.
dasyatidprime··on Why are we still using Markdown?
Ah! Yeah, that makes more sense—I misinterpreted you at first since I don't normally think of “internal link” as the default exemplar of “hyperlink”. And yeah, I don't see good target markup for that. Stuff like starting your search regexp with “^ +” helps but is still janky. I'd tend to categorize this mostly as “man pages aren't meant to be long treatments of more complex software”, of course? Some large packages do something which I kind-of like but which I'm not sure would work well if everyone did it (mainly due to ergonomy around disambiguation) where they split up a bunch of their documentation into shorter pages with the origin as part of the section when making it accessible through man: pcap_init(3pcap) from libpcap, Bigarray(3o) from OCaml. Shells, as you notice, get hit by this really hard; Zsh tries to do some splitting in the man version of its docs, but it's really not enough, like I'd want to see fc(1zsh) (and then fc(1bash), etc.) but instead it's all in zshbuiltins. (Eventually I facepalmed when I realized an Info version was available and switched to that. The way I found this out was actually by eyeing the Zsh source tree and noticing that the documentation files were written in Yodl, which I'd never heard of, and then noticing that the schema they were using looked a lot like Info…)

… wow, hang on, I just checked for Bash, and it has an Info file but it says it's just an intro and the manual page is the definitive version‽ That's… hah. There must be some timeline jank around that; ambiguous NIH vibes around Info aside, I wouldn't have expected it from an actual GNU program! Did Bash show up before Info existed?

dasyatidprime··on Why are we still using Markdown?
groff can produce output with links in it, and does by default in HTML mode! The GNU version of the Unix man page macro set has .UR and .UE for “URI start” and “URI end”. (I don't know whether these were present earlier in the lineage or whether they were introduced by GNU.) Also, the lowdown Markdown converter when in man output mode will output those for links. For fun, try:

    echo 'Hi there! Have a [hyperlink](https://www.gnu.org/software/groff/manual/groff.html).' | lowdown -st man | groff -man -Thtml
There's also support for OSC 8 terminal hyperlink sequences throughout most of the groff toolchain: grotty(1) supports outputting them, and less(1) supports passing them through, including ^O^P and ^O^N gestures for moving between them. But man(7) says they're not enabled for grotty output by default. “Options” describes the rationale in its item for “-rU1”: “grohtml enables them by default; grotty does not, pending more widespread pager support for OSC 8 escape sequences.”

So if I set MANROFFOPT=-rU1 in the environment, I can get clickable links in man… if the man page author included them that way in the first place. I'm not sure how common that is in the wild, but grepping the ones on my system, I find firejail(1) contains a link to a GitHub issue embedded in that way, and it does indeed work when I hit ^O^N to seek to it and then C-mouse1—though the mouse gesture I have Alacritty using for links doesn't seem to work through tmux (there might be a way involving twiddling the tmux terminal-features setting, but I ran out of steam before trying this), and I didn't see a great way to get either grotty or Alacritty to style them on display instead of having them blend into the surrounding text, so it's still kind of scuffed in practice. (Though I bet the cool kids have moved on from Alacritty by now?) less displays the link target in the status line when you use the navigation commands, so it's not inaccessible, but for opening selected links directly from less with the ^O^O gesture rather than leaning on terminal support, it looks like you need to explicitly set the LESS_OSC8_ANY and/or LESS_OSC8_‹scheme› environment variable to a shell command that outputs a shell command pattern to substitute the link into; if I set LESS_OSC8_ANY='echo xdg-open %o' then it passes it to my Firefox. I wonder if they'd take a patch (or if any existing distributions patch it) to use that as the default?

That was a fun little rabbit hole to go down, thank you.

dasyatidprime··on CERN levels up with new superconducting karts
The noun “idraulico” also means “plumber”.
dasyatidprime··on Proactively Parasocial
I'm not sure I agree in general, but one of the roles most associated with intense parasociality is literally called “idol”, so there's that.
dasyatidprime··on AI users whose lives were wrecked by delusion
I've been using a reasonable gamut of Unicode punctuation in English for I think the majority of my life now as well—including this very comment, https://news.ycombinator.com/item?id=19365079 from 2019, and the above comment where I typed a horizontal ellipsis. I tend to attribute it to taking my language usage from relatively formal sources and being a desktop Linux user with a Compose key. I used to constrain myself to ASCII for email and source code, though, and would use TeX-like “--” and “---” and such instead; sometimes I would also just do that when temporarily on some setup where accessing the real stuff was harder.

But then, people have also been asking me whether I'm an AI for over twenty years, so…

dasyatidprime··on AI users whose lives were wrecked by delusion
I was able to infer the invisible quotation marks after a double take, but they probably ought to have been visible ones…
dasyatidprime··on Shell Tricks That Make Life Easier (and Save Your Sanity)
All of the keyboard-driven terminal signals can be intercepted; catching INT (^C) for cleanup is just more common than the others. Only KILL and STOP cannot be caught.

^Z sends TSTP (not STOP, though they have the same default behavior) to suspend; some programs catch this to do terminal state cleanup before re-raising it to accept the suspension. Catching it to do full backout doesn't make as much sense because the program anticipates being resumed.

^\ sends QUIT, which normally causes a core dump and is rarely caught. If you have core dumps disabled (via ulimit -c 0 or other system configuration) then you can often use it as a harder version of ^C; this is how I would tend to get out of ‘sl’ in places where I found it unwantedly installed.

dasyatidprime··on Byte Ordering: On Holy Wars and a Plea for Peace (1980)
^L is still normal as a separator in Emacs Lisp code files!
dasyatidprime··on Falsehoods programmers believe about TCP
To some of the critics here: did you or did you not notice the “Somebody ought to write one of those […] Here, I'll even get the ball rolling” framing? A polished such article this is not claiming itself to be! I would go as far as saying the HN submission title is misleading as a result.
← PreviousPage 2 of 11Next →