HN user

indigo945

1,061 karma
Posts2
Comments345
View on HN
    > The Cray supercomputer were fluid cooled back in the 1980's, the entire 
    > board had an inert liquid flowing across it.
You can still do this with any computer, by the way: just submerge the entire board in motor oil. Slightly smelly and might make a mess, but absolutely workable.

The idea that only nerds care about the cost of things is... absurd.

For hardware purchases, laypeople may go about it the other way from what nerds would do: instead of deciding what they need in terms of computing power and memory, and then finding a cheap offer for that, they just decide how much they want to spend, and then buy a device at that price point irrespective of its performance characteristics. If you shop like this, and would have purchased anything but a rock-bottom low-end device two years ago, prices have remained stable.

One obvious use case is edge computing, such as in industrial applications that cannot tolerate the risk of a network link or cloud service going down. Even embedded use cases are possible, such as an image classifier model in a security camera.

In German, it's also extremely annoying that even common compound words will not be suggested. Google Keyboard has somewhat improved here, but FUTO Keyboard still drops the ball on this completely.

Yes, but Hetzner is not "some low-end provider". They have proper, high-quality datacenters with all the redundancy you want, excellent connectivity, great service, and much better privacy controls than any American company would be legally able to provide. Hetzner also offers instant scalability and has Terraform and Ansible support for infrastructure automation.

We have some VMs on Azure and some on Hetzner, and the latter have much better performance (especially since they give you basically infinite IOPS, which matters a lot for your database) and connectivity (especially lower latency).

The large hyperscalers were ever only worth it if you need/want all the additional PaaS infrastructure they provide, like Lambda, SQS and so on.

Not only is "arguments are evaluated left-to-right" less easy to formalize than you think, it would also make all C code run slower, because the compiler would no longer be able to interleave computations for more efficient pipelining. The same goes for "expression is [only evaluated once]/[always evaluated twice]".

Of course the developer is navigating a minefield every time they use volatile, that's why it's called "volatile" - an English word otherwise only commonly used in chemistry, where it means "stuff that wants to go boom".

Yes, this surprised me as well. Credit card and Paypal information should give the police everything they need to identify the criminal (in a way that's much more simple and reliable than via IP address, which may be obfuscated via a VPN or similar). Why not take it, it's free?

This is quite amazing. The quality of the created palettes is surprisingly good.

For the fourth iteration (guarding against phantom blue from shadow pixels), I wonder if it may help to also take into account how close the pixels in each cluster actually cluster together in the actual photo. (None of the heuristics used here seem to be interested in the position of the pixels at all, only in their values - as-is, it seems one could sort the photo's pixels before running the program and get the same result.) Actual objects usually form connected areas, whereas at least in the fruit image, the phantom shadows are spread across the entire photo in largely disconnected chunks.

You can of course take a SQL dump that is version-independent, but if you're serious about creating backups, you want to take backups of the actual on-disk format of the WAL, because that's more efficient and also the only practical way to get point-in-time recovery. (For the efficiency, you could alternatively also take ZFS snapshots, which will work independently of the Postgres version, but those also don't give you PITR.) The WAL format is a Postgres implementation detail and therefore tools wanting to read and write it need maintenance whenever the format changes (which can happen on major version releases).

    (I'm kidding, but I'm sure someone has a pie-in-the-sky geoengineering startup 
    about to disrupt topography using either AI, blockchain, or both.)
Well, there was that plan to use scores of nuclear bombs to alter the geography of Egypt in such a way that the Mediterranean could be drained into the Qattara Basin [1]. I think the story is somewhat well-known now, but it proves, at least, that pie-in-the-sky geoengineering startups are not a phenomenon unique to the 21st century. And given that nuclear bombs essentially were the blockchain of the 1950s, that is altogether unsurprising.

[1] https://en.wikipedia.org/wiki/Qattara_Depression_Project#Fri...

DIY Soft Drinks 3 months ago

Late capitalism is when a traditional tea recipe is referred to as "homemade ClubMate (R)".

For the use cases outlined in the OP, a 36% performance gain for an optimization that complex would be considered a waste of time. OP was explicitly not talking about code that cares about the performance of its hot path that much. Most applications spend 90% of their runtime waiting for IO anyway, so optimizations of this scale don't do anything.

Signal insists on using your phone number too, refusing user ids or anything that will make analysis hard.

That is no longer true, you can use user IDs now.

For the other problem, you can enable self-deleting messages in group chats, limiting the damage when a chat does become compromised. Of course, this doesn't stop any persistent threat, such as law enforcement (is that even the right term anymore?) getting access to an unlocked phone.

Right, but I think that the Recycle Bin is exactly what is causing the issue here. Users have been taught for decades that if they delete something, it is not really gone, as they can always just go back to their Recycle Bin or Deleted Items folder and restore it. (I have worked with clients that used the Deleted Items folder in Outlook as an archive for certain conversations, and would regularly reference it.)

So users have been taught that the term "delete" means "move somewhere out of my sight". If you design a UI and make "delete" mean something completely different from what everyone already understands it to mean, the problem is you, not the user.

What you describe is basically event sourcing, which is definitely popular. However, for OLAP, you will still want a copy of your data that only has the actual dimensions of interest, and not their history - and the easiest way to create that copy and to keep it in sync with your events is via triggers.

Well, Microsoft SQL Server has built-in Temporal Tables [1], which even take this one step further: they track all data changes, such that you can easily query them as if you were viewing them in the past. You can not only query deleted rows, but also the old versions of rows that have been updated.

(In my opinion, replicating this via a `validity tstzrange` column is also often a sane approach in PostgreSQL, although OP's blog post doesn't mention it.)

[1] https://learn.microsoft.com/en-us/sql/relational-databases/t...

Claude Code already is the purple unicorn. We're already there - the only problem is that regulatory systems are set up in a way that benefits a small minority of capitalists, rather than the majority.

I've thought about doing that, but it seems to require multiple Google accounts - one for the "child" and one for the "parent", which is hard to achieve without also having multiple SIM cards with different phone numbers that can be used for the account registration. I assume the process is designed to be full of friction to prevent people from freeing themselves of the addiction.

I said "a GC", that is, "a garbage collector". Even if you consider reference counting as technically being garbage collection, purely reference counted systems do not have a distinct entity that can be identified as "a" garbage collector. So I'm technically correct here even in face of this pedantry.

Not that I think it's a reasonable approach to language to be pedantic on this. RC being GC is, of course, true from an analytic approach to language: a garbage collection system is defined as a system that collects and frees objects that are unreachable and thus dead; a reference counting pointer collects and frees objects that are unreachable and thus dead; therefore, reference counting is garbage collection.

One problem with this is the vagueness: now, the use of a call stack is garbage collection; after all, returning from a function collects and frees the objects in the stack frame. Leaking memory all over the place and expecting the operation system to clean up when you call `exit()` likewise is "garbage collection".

But more importantly, it's just not how anyone understands the word. You understood perfectly well what I meant when I said "you would be hard-pressed to find a modern AA game that does not already use a GC"; in other words, you yourself don't even understand the word differently. You merely feel an ethical imperative to understand the word differently, and when you failed to do so, used my comment as a stand-in to work through the emotions caused by your own inability to live up to this unfulfilled ethic.

I think you would be hard-pressed to find a modern AA game that does not already use a GC. The major game engines Unreal and Unity are garbage collected - although they use manual memory management for some of their internals, the exposed API surface (including the C++ API) is designed with garbage collection in mind.

Notably, the popular-with-hobbyists Godot Engine does not use a garbage collector. It uses reference counting with some objects, but does not provide cycle detection, thus requires all objects to be laid out in a tree structure (which the engine is built around).

The problem there is probably that Java cannot pass objects by value [1]. That incurs an additional layer of indirection when accessing the individual members of the struct, tanking performance.

That's not a necessity, though - you can use a GC in languages that allow you to control whether structs get allocated on the heap or on the stack, and then you don't have this issue. For example, in Go, structs can be allocated on the stack and passed by value, or they can be allocated on the heap and passed by reference, and this is under the control of the application programmer [2].

[1]: Actually, according to the Java spec, Java does not have pass-by-reference, and objects are always passed by value. However, that's just strange nomenclature - in Java parlance, "object" names the reference, not the actual range of memory on the heap.

[2]: The language spec does not guarantee this, so this is technically implementation-defined behavior. But then, there's really only one implementation of the Go compiler and runtime.

It's strange to read so many countries listed in an article about deliberate internet shutdowns, and even India called out as the world's shutdown capitol, and not one mention of China. Internet shutdowns during important political events, or even just national holidays, are common practice in China, have been for decades, and this is widely known. How is it not China that wins the great prize here?