HNHacker News
TopNewBestAskShowJobs

Orphis

385 karma · joined February 12, 2018

submissionscomments
Orphis··on RipGrep musl binaries occasionally segfault during very-large searches
That's good! But I wonder why it wasn't then enabled for that configuration or why the override wasn't "global" enough and the default allocator was still partly used.
Orphis··on RipGrep musl binaries occasionally segfault during very-large searches
Sure, but the problem isn't that the bug exists, is that it has surfaced in a performance application using musl and exerting code paths in a slow allocator.

mallocng should not be used at all.

Orphis··on RipGrep musl binaries occasionally segfault during very-large searches
I get why people don't bother replacing the default allocator from musl all the time (it's there, convenient). But in an application whose purpose is to be FAST, I find it weird they haven't bothered replacing it with another more performant one.

mallocng is bad at dealing with contention during multithreading. I've had applications that usually were I/O bound suddenly become "malloc" bound when building with musl in multithreaded scenarios (and only just 8 threads). Switching to mimalloc improved performance by 20x, very close to what glibc offers by default, and just a bit under a glibc + mimalloc configuration.

I get that there's a real issue there and it's interesting (to some) to address it, but it should have never surfaced this way in the first place.

Orphis··on Google fixed more Chrome bugs in June than over the past two years, thanks to AI
Chrome uses those already, and a few other pointer types that are fit for purpose.

For example, lot of C++ objects are tied to a garbage collected object in JS, so you need something special to hold a reference in C++ code to those, and prevent them from being garbage collected.

Another example, shared_ptr is fine if you eventually drop the reference count to 0, but in JS, you will have cycles, so the reference count will never get there. And that's one of the problems the garbage collector deals with, it checks cycles and connectivity to mark a group of objects to be released together. So you will have a special life-cycle for those objects. Another responsibility if that you can't really use the destructor there or you might trigger a delete storm and block the thread. So the garbage collector will destroy objects in batches when the page is idle no to create stuttering (jank).

Orphis··on Google fixed more Chrome bugs in June than over the past two years, thanks to AI
They did roll this policy for Chromium changes a few years ago too.

And it wasn't just 2 humans but 2 Googlers. One Googler author and one Googler reviewer works. But an external author needed 2 Googlers to review changes, and all files needed to be reviewed by one author at least.

So if you touched multiple files owned by different people for a more complex feature, you would naturally get there.

Orphis··on Google fixed more Chrome bugs in June than over the past two years, thanks to AI
Old bugs at the bottom of the prioritization list deserve to be fixed.

Some were probably just theoretical "if we have over 2B of this item, it'll crash because X/Y/Z and that can be exploited", some are probably in rarely used features.

Once the LLMs are done going through the code, the baseline will be all better and they will probably fix a lot less than they have now. Or they will have LLMs automatically check every single crash bug that has been submitted and take care of those too. I am assuming that they are probably already using this as an input source for their AI.

Orphis··on Google fixed more Chrome bugs in June than over the past two years, thanks to AI
It really depends on the context. On a pure computational code, it can work really well.

I recently optimized some code asking Claude to "make it faster" 2 different programs. For each, it wrote a benchmark, gathered initial data. Emitted some hypothesis and measured data around them with profilers, then did some changes (behind feature flags), checked the output was identical in either side and through profiling that the right code path was taken, and then benchmarked both.

And it did that for multiple successive changes in both codebases. Some changes were purely algorithmic (better complexity), some were related to tradeoffs between memory and computation (caching intermediate results better), some were about creating less intermediate objects to relieve the memory pressure, some where about a better memory layout to improve data locality.

The annoying part is that some of the code that was optimized was generated by Claude in the first place, so it's a bit frustrating that it didn't do those in the first place. But I guess, my iterative approach to making those tools didn't work on big enough data sets at first where it would have been an issue.

Orphis··on Kuna: Decompiler Development in the Age of Coding Agents
I have seen some code where either Ghidra or IDA is producing the better output. It's not cut and dry, but in general, I do prefer Ghidra.
Orphis··on LLM Usage in Debian: Three Proposals
Sure. But in the end, it's just a tool that is used to assign blame when there are issues, and humans are more comfortable when another human is to blame rather than a machine as it means they are still in control (or have the illusion of).
Orphis··on Google Chrome Arrives on ARM64 Linux, Widevine DRM Included
Plan-B hasn't been relevant in a very long time and Unified Plan has been in a good working shape (and used by Google Meet) for many years. Firefox has lacked many critical APIs from Unified-Plan that developer cared about for a very very long time such as everything related to simulcast and get/setParameters or codec control which are very basic and where implemented in Chromium back in 2018. Firefox didn't have them in 2024 still in working shape. So you can't really blame that long delay on Chrome or on the other APIs it shipped early.

As for the other APIs you mention, developers had wanted those shipped then, so developers got them. The risks are evaluated, but in the end, the client is king. If the standardization process is slowed down because of nitpicking and procedural mishap and not able to work with the needs of the users, it's a problem. It took years for them to be standardized while being heavily used by experts everywhere in the first version. Shipping early is also part of the standardization process where it goes to trial and it is evaluated by users, so it's not surprising to have a complex API implemented first to gather feedback. Without such feedback, none of it would have been implemented or standardized the right way. It's implementation experience that is crucial for WebRTC's domain space.

WebRTC is a live API, it's changing all the time, especially with all those expert APIs. It's not unexpected. But years long delays don't serve anyone except for late implementers that then have the newer version done and can complain that someone else is not compliant and their version is "better". No, you're just super late at implementing a live API.

That's why Firefox has been having issues with WebRTC for a long time. Having the ICE server validation WPT passing is great, but that's only an edge error case, it's not what is passed by applications in working shape or what developers need.

Orphis··on Google Chrome Arrives on ARM64 Linux, Widevine DRM Included
A lot of websites will "work" because they added Firefox workarounds. But to a Chromium or Safari user, it might as well be called a "degraded" mode.

A lot of video-conferencing websites work that way as Firefox has had a lot of issues keeping up with the WebRTC standard evolution that power them for example.

Orphis··on French firefighters face 'pyrocumulonimbus' for first time
It's not a single source problem anyway. There are many contributing factors, some are probably more important than others.

The most important thing is knowing what can be done in the short to medium term locally to improve the situation. If you tell the people living near those forests they need to fix global warming, you're not going anywhere. Can they monitor the forest beds better, do some preventive measures to limit the propagation of fires when they happen? Probably!

Unless you're on a major international forum or you have proper global reach and are a trendsetter, complaining about the obvious global warming isn't going to do much. And even if it's not obvious to some other people, you're not going to change their mind anyway on a HN discussion.

Orphis··on LLM Usage in Debian: Three Proposals
At the same time, how can a human know if they accidentally rewrote exactly some code they read in the past from a codebase with an incompatible license?

Accidental copies happen all the time in code, music and art. Not all of it is necessarily super original, but that's beside the point and it happens.

So while we think we can hold AI tools to higher standards than humans, they are still modeled after human thinking and will make the same mistakes. Is this really the right thing to do and is it entirely practical?

Orphis··on The LLM Critics Are Right. I Use LLMs Anyway
> I can’t help but wonder whether constant use of “agent” harnesses will lead to an atrophy of the software engineering (or really any field) muscles.

Compiler evolutions really harmed how well software engineers understand or how often they have to drop down to assembly language.

Is that a problem for the 99% of developers around? Probably not.

I view LLMs as the next evolution. Some people will still need to care about the layer below, the shape of the code that is being written. But over time, just as it was with the transition from crafted ASM to higher level languages, the compilers became better, more efficient and trustworthy and I think the same will happen to LLMs, and we probably won't have to check the generated code as much, at least for most of the code around.

Is that a problem? Yes, for code that is intended to interface with humans (most of it still). The quality will probably become better and it won't be much of an issue.

Orphis··on P2P local file transfer based on WebRTC
In modern conferencing applications, users are not connected with each other, they are connected with a central server.

Transferring files shouldn't involve that central server, so you'd need to establish a direct connection between the users, and with network topologies those days, it will most likely require a relay between the two. It's not great.

Orphis··on PR spam today looks like email spam in the early 2000s
But what about the good AI driven contributions though? Do you categorize all AI changes as slop by default or only the real bad ones that mix refactoring and tons of other unrelated changes with a fix?

Some can fix real issues, with a well targeted fix (not rewriting the world), well defined test and write up. If you accepted PRs before for other issues, you should be able to review and accept those too.

Orphis··on Lore – Open source version control system designed for scalability
To add to this, you can add in your .gitmodules the name of the branch that the --remote flag will follow. It just works.
Orphis··on Changing how we develop Ladybird
While it would help for some use-cases, it wouldn't necessarily reduce the problem that a browser is facing when dealing with malicious code in a large and complex codebase. And vetted people can be victims of supply-chain attacks, which makes it still hard to evaluate a change properly.

It's not an impossible problem, but it's a resource allocation problem, and they don't seem to have a way to address it at the moment besides closing all PRs.

Orphis··on The AV2 Video Standard Has Released (Final v1.0 Specification)
H264 is lacking a lot of features (behind patents) that are essential to real-time communications. It's available, but by far, the worst offender for call quality. Modern call technology will want to use temporal and spatial scaling which are not available in the profiles supported by most H264 encoders and decoders.

Those tools are available for VP8 (temporal only), VP9 and AV1 and improve the quality of calls quite a lot when used right. I don't know about about the internals of H265 and H266 as those are also behind patents and no one wanted to touch them in the real-time conferencing space.

Orphis··on The AV2 Video Standard Has Released (Final v1.0 Specification)
The internals are usually confidential and it's hard to find an engineer willing to make a comprehensive write-up about those: they want to make tech and not spend time proofing a tech write-up for public consumption (they already had to make an internal one!).

So the middle ground is that you have those "marketing" copies that demo the tech. One of the telling part of those is how you can get a fine usable 30KBps stream at very low bitrate with AV1 compared to a higher bitrate H264 that is unusable. It doesn't tell you that because you are using a lot less bytes, you will be trading CPU power consumption for radio power consumption and it's a tricky comparison, but in general, it's a favorable trade for the user who has very bad network conditions and is trying to make a call. The goal is to make the call work at all cost, not to save the battery and having a useless stream of data transferred.

Orphis··on The AV2 Video Standard Has Released (Final v1.0 Specification)
As someone else said, it's poor single pass encoding performance targeted for the tools used in real-time communications. This type of usage is "new" to hardware manufacturers and they poorly test it as it's easier to make a chip good enough for decoding the general case for watching your favorite movie platform than do something comprehensive.

One aspect of real-time encoding is that the frames are not ordered or structured the same linear way as they used to be in older format. Now, we have temporal and spatial encoding, which allows for better frame drops or efficiency or a stream that is decodable at multiple resolutions at the same time.

An example of temporal encoding is that you have a sequence of frames at 15fps (T0) that are all referencing the previous one, and sometimes an I-frame that is a full independent picture you can start decoding from. Then, you can have another temporal layer (T1) , where for every frame at the base 15 fps layer (T0), you insert a new frame that depends on it. You end up having a 30 fps stream! And if your network connection is worse, or you hardware can't keep up, you can drop the T1 layer and only use the T0 layer. This works great for real-time! In the specs, you could have more layers with more complex dependency chains, but 3 layers is as high as you want to go.

Spatial encoding is a bit different, you will have frame at the highest resolution, but they reference another frame at half the resolution (who may also do the same). Each higher layer means just adding more details over the smaller size frame that you have at the base. To decode an image, you need to have all the frames available. This can also be combined with the temporal encoding above. While this isn't useful for a 1-1 communication, in conference rooms, it's a great optimization as while you may send your full HD picture to the server, you may not want to send that to everyone when you're just a thumbnail who is not actively speaking. So the conference server will not send the full HD picture, but the lower resolution only. And since you don't want to do the encoding on the server (it's expensive, slow and you need to trust the intermediate service with your secret stuff), doing spatial encoding on the client side is better.

Those techniques are all advanced ones that would be used if available universally. Unfortunately, a lot of hardware decoders choke on those, despite being part of the specs. And it's not that they can't generate a stream with those, they also sometimes can't decode them (breaking the spec).

And finally, the hardware encoders are tuned for higher bitrate work. Ask them to do a 3MBps stream, they'll do fine. Ask them for a 30KBps stream, they'll make garbage most of the time.

Orphis··on The AV2 Video Standard Has Released (Final v1.0 Specification)
Google Meet can do it. You don't want the full conference with AV1, just use it for very low bitrate scenarios with a high packet loss possibly. Phones are a good target system. And I know this is quite opposite to expectations.

It is a lot better to send a stable and visually ok stream with AV1 at 30KBps than fail to send a VP8 50KBps stream that is unusable anyway and is subject to twice as many packet lost than a lower bitrate solution.

It is possible they use AV1 in other scenarios now, but I left the team a while back now and I haven't checked what they are now using under the hood.

Orphis··on The AV2 Video Standard Has Released (Final v1.0 Specification)
No, you do NOT want hardware anything on mobile if you are targeting smaller bitrate that are not that taxing on the CPU, when the conditions are otherwise so bad that the call would either drop or be unusable. HW encoders produce bad results at low bitrate. HW decoders usually have issues with the temporal encodings used and they may also just not accept those streams (a lot of test scenarios are movies, and the RTC tools are poorly supported).

I worked on shipping it to Chromium, WebRTC and Google Meet many years ago and we had many publications about it: - https://blog.google/products-and-platforms/products/duo/4-ne... - https://webrtchacks.com/the-hidden-av1-gift-in-google-meet/

The use case is not screensharing or a large conference room, but mainly a simpler talking face for a 1:1 chat, but with good quality as packet loss is then not as impactful on a 30KBps stream with AV1 than a 50KBps VP8 stream.

Orphis··on The AV2 Video Standard Has Released (Final v1.0 Specification)
One of the interesting usage of AV1 was specifically for low bitrate calls, and software encoding was perfectly fine, even on mobile.

With low enough resolution, framerate and bitrate, you can get a quality stream without significant encoding artifacts compared to any other codec. It is in production right now and has been for a while.

The tradeoff CPU / bandwidth is quite advantageous in situations like this. And no, AV1 HW encoders cannot usually be used, they are not designed for a tight bitrate control or realtime communications like software encoding is usually.

Orphis··on Discret 11, the French TV encryption of the 80s
Canal+ had a few animes not suited for kids and a few others that didn't really fit the catalog from TF1 or TMC (which was mostly available south of France). Those 2 had volume, Canal+ had more "quality" ones.

I remember watching Akira, some DBZ movies, Evangelion, Vision of Escaflowne, Armitage III and many others!

Orphis··on Text classification with Python 3.14's ZSTD module
Zstd is used in a lot of places now. Lots of servers and browsers support it as it is usually faster and more efficient than other compression standards. And some Linux distributions have packages, or even the kernel that can be compressed with it too, which is preferred in some situations where decompression speed matters more than storage cost.
Orphis··on Discord/Twitch/Snapchat age verification bypass
There are also alternatives that can be good enough, such as the Swedish BankId system, which is managed by a private company owned by many banks. They provide authentication and a chain of trust for the great majority of the population on about all websites (government, healthcare, banking and other commercial services) and is also used to validate online payments (3D Secure will launch the BankId app).

While it's not without faults (services do not always support alternative authentication which may support foreigners having the right to live in the country), it has been quite reliable for so many years.

So just to say, you can have successful alternatives to a government controlled system as many actors may decide it is quite valuable to develop and maintain such a system and that it aligns with their interest, and then have it become a de-facto standard.

Orphis··on I reversed Tower of Fantasy's anti-cheat driver: a BYOVD toolkit never loaded
You don't "get into the sandbox", if a cheat program opted in, they would be launched into a separate instance that's distinct from the game.

And you would sign your files, which get verified by the integrity platform and allow you to authenticate with the servers securely.

Orphis··on Things Unix can do atomically (2010)
In some cases, you can start by using the "at" functions (openat...) to work on a directory tree. If you have your logical "locking" done at the top-level of the tree, it might be a fine option.

In some other cases, I've used a pattern where I used a symlink to folders. The symlink is created, resolved or updated atomically, and all I need is eventual consistency.

That last case was to manage several APT repository indices. The indices were constantly updated to publish new testing or unstable releases of software and machines in the fleet were regularly fetching the repository index. The APT protocol and structure being a bit "dumb" (for better or worse) requires you to fetch files (many of them) in the reverse order they are created, which leads to obvious issues like the signature is updated only after the list of files is updated, or the list of files is created only after the list of packages is created.

Long story short, each update would create a new folder that's consistent, and a symlink points to the last created folder (to atomically replace the folder as it was not possible to swap them), and a small HTTP server would initiate a server side session when the first file is fetched and only return files from the same index list, and everything is eventually consistent, and we never get APT complaining about having signature or hash mismatches. The pivotal component was indeed the atomicity of having a symlink to deal with it, as the Java implementation didn't have access to a more modern "openat" syscall, relative to a specific folder.

Orphis··on Lessons from 14 years at Google
As someone who worked on Meet at Google, it seems that it could have been networking to the datacenters where the call is routed from, some issues with UDP comms on your network which triggered a bad fallback to WebRTC over TCP. Could also have been issues with the browser version you used.

Since Teams is using the very old H264 codec and Meet is using VP8 or VP9 depending on the context, it's possible you also had some other issues with bad decoding (usually done in software, but occasionally by the hardware).

Overall, it shouldn't be representative of the experience on Meet that I've seen, even from all the bug reports I've read.

← PreviousPage 2 of 7Next →