HNHacker News
TopNewBestAskShowJobs

gourlaysama

370 karma · joined January 6, 2013

submissionscomments
gourlaysama··on FFmpeg 9.0
No, this only removes parsing CELT inside an ogg container (because CELT itself is going away), not support for ogg itself.
gourlaysama··on Pinocchio is weirder than you remembered
> Talk about the war on Christmas!

Not just a war on Christmas, but an actual war too: this led to a whole bunch of Christmas riots throughout England, including Canterbury's famous "Plum pudding Riots", where rioters ended up sacking the mayor's house and taking over control of the city for weeks. The whole of Kent ended up revolting after the rioters' trial, essentially starting the Second English Civil War.

gourlaysama··on The Mystery of Rennes-Le-Château, Part 1: The Priest's Treasure
And things get even crazier in Part 2 [1].

[1]: https://www.filfre.net/2026/03/the-mystery-of-rennes-le-chat...

gourlaysama··on The bloat of edge-case first libraries
Putting API contracts aside, the problem is also that people use a package manager as if it was a code snippet manager.

As in, "how do I check if a string starts with a shebang" should result in some code being pasted in your editor, not in a new dependency. There is obviously a complexity threshold where the dependency becomes the better choice, but wherever it is it should be way higher than this.

gourlaysama··on Pass: Unix Password Manager
The app in the Google Store is no longer maintained, hence the warning.

It is however available in F-droid [1], and the newer versions don't need the secondary app and do everything internally.

[1]: https://f-droid.org/packages/app.passwordstore.agrahn

gourlaysama··on Mpv – A free, open source, and cross-platform media player
There are GUIs based on mpv that provide a user-friendly interface and just use mpv for playback, see Celluloid [0].

[0]: https://celluloid-player.github.io/

gourlaysama··on The Windows Shutdown crapfest (2006)
See the Linux documentation's "How the development process works" [0].

The way a changeset goes from a developer's machine to the root is reasonably similar (it usually gets pulled through a number a intermediate trees, from a development tree to a sub-subsystem tree to a major subsystem tree to Linus's tree), riding the train from the bottom to the top, with an additional time constraint on it (the merge window being open).

The kernel also has a "next" tree that is a snapshot of what the kernel would look like with incoming changes merged right now, surfacing early the exact long-distance coordination issues described in the article. Plus, of course, everything is in the open, so maintainers of different subsystem can then coordinate directly on things that impact both sides, even if the required patches will if possible make their way up separately.

[0]: https://www.kernel.org/doc/html/latest/process/2.Process.htm...

gourlaysama··on YouTube-dl's first release since June 2021
Yes, it works the same.

Since mpv 0.34 it even looks for yt-dlp first, and fallback to youtube-dl otherwise. Before that you had to set an option, or just symlink youtube-dl to yt-dlp.

gourlaysama··on Rust 1.53
Unicode has both MICRO SIGN (U+00B5) and GREEK SMALL LETTER MU (U+03BC). The former is the one on (most) people's keyboard, and it shouldn't be used to type actual Greek.
gourlaysama··on The most expensive number in engineering
> FWIW this is literally the first time I’ve encountered someone claiming that it isn’t science fiction.

Well, there's Science Fantasy [1]: Jedi and the Force are very much Wizards and Magic.

I've heard it called Space Fantasy, too.

[1]: https://tvtropes.org/pmwiki/pmwiki.php/Main/ScienceFantasy

gourlaysama··on File Permissions: A painful side of Docker (2019)
There is a new mount syscall in Linux 5.12, see "ID remapping in mounts" [1], that should help with all the permission madness, eventually.

It allows different mounts to expose the same content with different ownership, and in general to map permissions IDs between mounts in any way we like.

systemd-homed wll use that to abstract over the uids and gids of portable home directories, for example.

[1]: https://lwn.net/Articles/837566/

gourlaysama··on Site Isolation in Firefox
On Firefox you can go to `about:processes`.

It lists tabs by process, and includes the PID (on Linux; no idea about other platforms). You can also directly kill tabs and processes from there.

gourlaysama··on Rust Language Cheat Sheet
To be fair, this is more a Rust Syntax Reference Sheet than any kind of cheat-sheet. It basically has everything.

It's useful to quickly lookup the syntax for something you never use, for example. Or to browse and discover things you didn't know were even possible.

gourlaysama··on Camouflaged Military Bunkers of Switzerland (2015)
That reminds me of the two anti-tanks fortresses disguised as houses as part of the Toblerone line [1]. Those two were the only ones visible from the road by people (i.e. tourists), so they made them a bit less scary.

The Tim Traveller did a wonderful video on those a few months ago [2].

[1]: https://en.wikipedia.org/wiki/Toblerone_line

[2][video]: https://youtu.be/tPL9-L2gwzo

gourlaysama··on Mathematicians should stop naming things after each other
This seems to misrepresent why people bother naming things. It's not like mathematicians are spending their time randomly naming every object/property/structure/... they encounter just for the sake of it.

A "Kähler manifold" exists, as a name, because there is no way to fully describe what it is (and bring forward in the reader all the corresponding context) in two or three words. Using a long sentence (full of things that could themselves be artificial labels, recursively) instead would be a waste of everyone's time.

If one can use a short descriptive name for something, then it's not a name, it's just the thing, and everyone refer to it directly. And when you can't, or when you want to indicate its importance, or you want to neatly package all the relevant context about it, all the mathematical baggage that should come with it in something short, then the pretty obvious thing to do it to abstract it away and stick a label on top.

It doesn't really matter whether they use mathematicians, flower names or characters from The Lord of The Rings, as long as it's unique enough, in context, then it's fine. The names become part of the vocabulary of the field, just as much as supposed "descriptive" names. All those "descriptive" names have to be precisely defined too anyway, because they carry natural-language connotations, assumptions, and so on, that just don't apply.

gourlaysama··on Podcast Explores Whether Scorpions Hit 'Wind of Change' Was Written by the CIA
> Did this used to be open knowledge and scrubbed now?

The [edit: wikipedia] article mentions that he was "director of radio operations of the Psychological Warfare branch in the Office of War Information at Allied Force Headquarters": that's what became PWD/SHAEF [1] towards the end of the war and was merged after the war with the Strategic Services Unit and some other stuff to make the CIA.

[1]: https://en.wikipedia.org/wiki/Psychological_Warfare_Division

gourlaysama··on How to fuck up software releases
The Scala release checklist [1] is a good example of a release checklist with both automated and manual steps.

[1]: https://github.com/scala/scala-dev/issues/645

gourlaysama··on Firefox 69.0 Released
> With the deprecation of Adobe Flash Player, there is no longer a need to identify users on 32-bit version of the Firefox browser on 64-bit version operating systems[, ]reducing user agent fingerprinting factors.

Good. User agents already contain too much.

That's actually the first time I've ever seen a browser actively removing stuff from the User Agent.

gourlaysama··on Emoji, part 6c: to infinity and beyond?
The 8-part series this comes from (starting here [1]) was a really good read. Very informative, regardless of one's stance on emoji.

[1] https://shadycharacters.co.uk/2018/08/emoji-part-1-in-the-be...

gourlaysama··on Hanzi Writer – JavaScript library for Chinese character stroke order animations
There are differences between Chinese and Japanese stroke order. See the animCJK [0] project for support for Japanese kanji and kanas (demo: [1]).

[0]: https://github.com/parsimonhi/animCJK

[1]: http://gooo.free.fr/animCJK/official/

gourlaysama··on Firefox 65.0 released
> I was curious as to whether this had already shipped for other platforms or not.

AV1 support is available on all platforms behing the flag; this release just enables it by default on Windows [1].

[1]: https://bugzilla.mozilla.org/show_bug.cgi?id=1452146

gourlaysama··on Colorizing Stderr: racing pipes, and libc monkey-patching
> Nothing is handling the order because there is only one buffer being written to.

Ah, that's what I was missing. Thank you, that makes sense.

gourlaysama··on Colorizing Stderr: racing pipes, and libc monkey-patching
This is probably a stupid question, but doesn't the PTY itself already have that out-of-order problem? I mean that it reads both file descriptors and does interleave them in the end. If it didn't they could still colorize things after the PTY.

So I guess my question is, why can't whatever it does to handle the ordering and merge the two be replicated in a small program that reads two names pipes and does the same but with extra colorizing?

gourlaysama··on Windows NTFS Tricks Collection
> [...] for compatibility reasons.

For compatibility with DOS 1.x no less [0]! That's 37 years and counting of backward compatibility...

[0] https://blogs.msdn.microsoft.com/oldnewthing/20031022-00/?p=...

gourlaysama··on SemVer has failed us
I am not sure I agree with all of OP's argument, and I don't really care for the whole "version numbers as a marketing message" thing, but for me SemVer fails miserably when it comes to binary compatibility versus source compatibility (and don't even start on semantic compatibility...).

In languages where that difference matters, let's say Java/Scala [1], there are way too many possibilities:

- bug fix: forward and backward binary compatible; basically a drop-in replacement. Package managers are supposed to resolve conflicts between those automatically,

- new feature, but backward binary compatible; just some new code alongside the old. Package managers should also be able to resolve a conflict between dependencies that depend on different versions of those.

- bug fix: forward and backward source compatible; here we have a problem: we can guarantee developers that they won't have to edit a single line of code to migrate, but we can't allow (binary) package managers to do anything. They have to rebuild their library, which means bumping their own version number. And does that means that their new version becomes binary-incompatible with the previous one, or just their dependencies?... who knows? Maybe it depends on if the consumer of that library calls into the conflicting dependency directly or only uses it indirectly? Maybe not? Can we tell?

- new feature, backward source compatibility, but no binary compatibility; same as above: package managers cannot do anything, and conflicting transitive dependencies on the new and the old may or may not be solved by recompiling one's library. The only safe bet is to wait for the dependencies to upgrade.

- all bets are off (possibly split in minor and major): here at least we know there is nothing to be hoped. But in practice after upgrading to the new API, you are faced with the same questions concerning that thing's dependencies...

And if every dependency manager within the same packaging eco-system doesn't enforce a single global versioning scheme, how can they handle any dependency version conflict anyway? They could if packages could auto-describe their semantic versioning, so basically they can't, so they don't, and we're back to source dependencies, with recompile and bump in version number for every dependency change (ok, sometimes they do try and we get JAR hell...). And since a single versioning scheme isn't enforced, people use hundreds of different ones (or just none), and the maintainer of a library has to make all of those decisions, recursively (except that below 1 level of dependency, he/she might not be able to do anything as long as even a single dependency keeps an old conflicting dependency around, but they still have to check, in case they are lucky and can do something), taking into account the different versioning semantics of each dependency. That's madness.

So in the end, if we get a conflict between dependencies far down in the dependency tree, it becomes something pretty ugly:

- if guaranteed binary compatibility, everything is fine,

- otherwise:

0) look at that dependency's official versioning scheme, usually find nothing (except for big famous libraries)

1) pick the highest common-one, try to recompile your library

2) if it works, try the tests (your library's tests, not your dependencies' tests, mind you. Even though those should probably be run, considering they directly depend on it, and use (and hopefully test) more stuff from that library)

3a) it it works, ship it and pray.

3b) it will probably fail somewhere since the dependencies in between have not be recompiled; then you can only wait for them to upgrade.

I know in the end this doesn't work so bad (well, everything is relative...), but it still makes me sad that upgrading dependencies is still human-based trial and error.

Oh. I guess this is a rant.

[1] that's just what I am the most familiar with, but you could say the same with C packages in a distro's package repo, for example.

gourlaysama··on Scala 2.11.0 Release Notes
AbstractFunction, Function, Product and Tuple are all still limited to 22.

Increasing the limit would create too much bytecode, and in the current design, lifting the limit is just impossible (without runtime code generation or custom classloader, etc.).

gourlaysama··on Scala 2.11.0 Release Notes
For that very reason, there is no generated unapply method for case classes with >22 parameters. This doesn't prevent pattern matching on the case class, because the patmat knows it is a case class and extracts the parameters directly, without calling unapply.
gourlaysama··on Stackoverflow HTTPS Error – Heartbleed Bug
This seems to be the most likely explanation. Serverfault [1] also has switched to that same certificate.

[1] https://serverfault.com/

gourlaysama··on Scala turns 10
Yes the apply method is still there. But since it has more than 22 arguments, you cant't lift it into a function object anymore.

This will break some tools, like Play's forms, that need you to pass to a couple of serialization/deserialization functions.

Shapeless will probably be fine, or at least, since it is macro based, it will be able to go around the missing unapply and extract the fields directly, like pattern matching does. (I don't know shapeless enough to go into more details)

gourlaysama··on Scala turns 10
Yes, this means there won't be a 1-to-1 conversion between a case class and a tuple anymore, since tuples are still limited to 22. This will probably break a few things out there (for people crazy enough to use case classes with 23+ parameters).
Page 1 of 2Next →