RE: "All it knows is that you're trying to write a 6. If someone else wrote a 6 or a 7 in the meantime, then your transaction may have 'meant' (+0) or (-1)."
This is not how it works at all. This is called dirty writes and is by default prevented by ACID compliant databases, no matter the isolation level. The second transaction commit will be rejected by the transaction manager.
Even if you start a transaction from your application, it does not change this still.
I have no problem with ACID the concept. It's a great ideal to strive towards. I'm sure your favourite RDBMS does a fine job of it. If you send it a single SQL string, it will probably behave well no matter how many other callers are sending it SQL strings (as long as the statements are grouped appropriately with BEGIN/COMMIT).
I'm just pointing out two ways in which you can make your system non-ACID.
1) Leave it on the default isolation level (READ_COMMITTED):
You have ten accounts, which sum to $100. You know your code cannot create or destroy money, only move it around. If no other thread is currently moving money, you will always see it sum to $100. However, if another thread moves money (e.g. from account 9 to account 1) while your summation is in progress, you will undercount the money. Perfectly legal in READ_COMMITTED. You made a clean read of account 1, kept going, and by the time you reach account 9, you READ_ what the other thread _COMMITTED. Nothing dirty about it, you under-reported money for no other reason than your transactions being less-than-Isolated. You can then take that SUM and cleanly write it elsewhere. Not dirty, just wrong.
2) Use an ORM like LINQ. (Assume FULL ISOLATION - even though you probably don't have it)
If you were to withdraw money from the largest account, split it into two parts, and deposit it into two random accounts, you could do it ACID-compliantly with this SQL snippet:
SELECT @bigBalance = Max(Balance) FROM MyAccounts
SELECT @part1 = @bigBalance / 2;
SELECT @part2 = @bigBalance - @part1;
..
-- Only showing one of the deposits for brevity
UPDATE MyAccounts
SET Balance = Balance + @part1
WHERE Id IN (
SELECT TOP 1 Id
FROM MyAccounts
ORDER BY NewId()
);
Under a single thread it will preserve money. Under multiple threads it will preserve money (as long as BEGIN and COMMIT are included ofc.). Perfectly ACID. But who wants to write SQL? Here's a snippet from the equivalent C#/EF/LINQ program:
// Split the balance in two
var onePart = maxAccount.Balance / 2;
var otherPart = maxAccount.Balance - onePart;
// Move one half
maxAccount.Balance -= onePart;
recipient1.Balance += onePart;
// Move the other half
maxAccount.Balance -= otherPart;
recipient2.Balance += otherPart;
Now the RDBMS couldn't manage this transactionally even if it wanted to. By the final lines, 'otherPart' is no longer "half of the balance of the biggest account", it's a number like 1144 or 1845. The RDBMS thinks it's just writing a constant and can't connect it back to its READ site:
info: 1/31/2026 17:30:57.906 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
Executed DbCommand (7ms) [Parameters=[@p1='a49f1b75-4510-4375-35f5-08de60e61cdd', @p0='1845'], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
UPDATE [MyAccounts] SET [Balance] = @p0
WHERE [Id] = @p1;
SELECT @@ROWCOUNT;
I had this problem for a long time, the only thing that worked was installing an ad on that removes recommendations. The only thing I use youtube for today is intentionally following ASL (starcraft broodwar) in korea.
The ad-on makes the home screen completely white/empty, meaning I just get reminded constantly ohh, yeah I am not supposed to use youtube unless there is something particular I want to watch.
You can do this without addons. I turned off recommendations and history, so I get nothing in my feed and YouTube wont even give me a queue of shorts to scroll through. I have to be very intentional on YouTube now and it has cut my usage down a ton.
I use "Code Injector" extension which is available for firefox and chrome. You can add custom javascript and css to any page. I usually inspect the page, find the classes or ids of the elements I want to get rid of, and do a display:none on them.
The tickers for months are not obvious to me, and since its a 6-week moving average and not point in time, the numbers are a bit hard to intuitively grasp.
To me it looks like the drop is harder since averaging smooths out the points, so end of july 2025 the adoption is not exactly 12%, but probably more like 8%, where its closer to end of 2023.
It seems big tech is putting a big break on AI tooling, for now.
The setup process for Arch is challenging, but it can be a rewarding exercise if you want to have a better understanding of how a Linux system is put together. It's like Linux from Scratch, but less time consuming, and you end up with a system that you can actually use when you're finished.
But yeah, once it's set up, and you've figured out how things typically work in Arch (e.g. you install a package first, but nothing is enabled by default - you have to decide how you want it to start), it's a great system. You'll learn how to actually use systemd, and will generally have a better feel for how everything is supposed to function, which will make you better at investigating things when they break, or when they don't work out of the box, even on other systems.
Also the Arch wiki is an amazing resource regardless of what you're running.
I don't necessarily have any reservations about recommending Arch to a beginner, but you do have to be curious and willing to learn. People who tried Linux and then got frustrated because some piece of software didn't work quite right out of the box probably wouldn't enjoy using Arch.
Manjaro takes the edge off Arch.
After having tended my Arch garden for a year or so (very grateful for all the learning) I’m happy with the balance of some handholding without losing the AUR.
I think verifying that your code calls this and that is that it actually works the way you expect. Without such test we might assume code works in one way when the happy path is not even reached.
I find it valuable at times, depending on the context, but I agree that extensive mock testing like this can get quite useless real quick.
This is not how it works at all. This is called dirty writes and is by default prevented by ACID compliant databases, no matter the isolation level. The second transaction commit will be rejected by the transaction manager.
Even if you start a transaction from your application, it does not change this still.
reply