HNHacker News
TopNewBestAskShowJobs

tomnipotent

4,354 karma · joined August 11, 2014

submissionscomments
tomnipotent··on Moving on from React, a year later
In the "old days" I'd colocate data as HTML attributes:

    <div data-parent-id="1234" data-category="Article">
We'd use this data for any number of purposes to build out other little features that'd rely on the attributes.
tomnipotent··on Isolating complexity is the essence of successful abstractions
> It forces you to deal with that complexity everywhere in your codebase.

The alternative is fighting the abstraction. Imagine trying to write the Linux Kernel in JavaScript or Python. Lot less fighting types in your code, more time fighting the abstractions to achieve other things. Considering a big part of the kernel is types it makes sense to encode complexity within them.

Going "low-level" implies that you're abandoning abstractions to use all the tools in the CS and compute toolbox and the baggage that entails.

tomnipotent··on Isolating complexity is the essence of successful abstractions
The argument isn't that complexity is being hidden, but how it's managed and where it shows up in your experience of solving other problems. OP mentions:

> The complexity was always there... it merely shone a light on the existing complexity, and gave us the opportunity — and a tool with which — to start grappling with it

It's not about Rust vs. TypeScript per se but uses garbage collection and borrow checker as examples of two solutions to the same problem. For whatever task you have at hand, what abstractions offer the best value that lets you finish the solution to the satisfaction of constraints?

> they are tightly coupled with the code written around them

Which is where the cost of the abstractions comes in. Part of the struggle is when the software becomes more complicated to manage than the problems solved and abstractions move from benefit to liability. The abstractions of the stack prevent solving problems in a way that isn't bound to our dancing around them.

If I'm working on a high-throughput networked service shuffling bytes using Protobuf, I'm going to be fighting Node to get the most out of CPU and memory. If I'm writing CRUD code in Rust shuffling JSON into an RDBMS I'm going to spending more time writing and thinking about types than I would just shuffling around arbitrarily nested bag-of-bags in Python with compute to spare.

I always thought this was why microservices became popular, because it constrained the problem space of any one project so language abstractions remained net-positives.

tomnipotent··on TikTok says it is restoring service for U.S. users
Covered under "except rare circumstances". Regulations for utilities, telecommunications, transportation, and financial services are the exception and not the rule.
tomnipotent··on TikTok says it is restoring service for U.S. users
Private companies are not obligated to offer services, and in the US the government cannot compel private companies to do so (except rare circumstances). "We will stop offering services if X does not happen" is not coercive, it's an ultimatum. Companies should not be expected to operate in a market hostile to them.
tomnipotent··on Microsoft just renamed Office to Microsoft 365 Copilot on Windows for everyone
People only use Word or PowerPoint to do a small part in a larger job.

Many people live in Excel and spend much of their day-to-day in it. When Microsoft introduced the ribbon, it was the Excel crowd that was, by far, the loudest and most vocal. Excel has the Microsoft Excel World Championship, a legitimate Esport.

tomnipotent··on Why is Cloudflare Pages' bandwidth unlimited?
The statement is true in so much as you can not be billed for traffic that has occurred without a paid contract in place. Also no mention of "unlimited", and though free is used throughout never "free bandwidth". It also doesn't contradict that Cloudflare can and does restrict or limit services for perceived TOS violations.

In the many years I've used Cloudflare I was never under the impression I received "free unlimited bandwidth", but "generous free bandwidth with conditions".

So if you're on a free plan you never pay for bandwidth, until you're not on a free plan (or any plan). It sucks to be one of the free plan users that doesn't have the ability to make a paid plan work, but I don't understand why Cloudflare needs to keep subsidizing something that wouldn't be tenable without their handout.

tomnipotent··on Why is Cloudflare Pages' bandwidth unlimited?
> offers truly unlimited bandwidth for free

Free of charge is different from free of restrictions. Cloudflare didn't trick anyone into signing up for these plans, and it's never been a secret that they're a for-profit company.

> contradiction between marketing and reality

I think the important distinction is contradiction between expectations and reality. Cloudflare free plan's outside of Pages have never offered "unlimited free bandwidth" but "generous free bandwidth with conditions". It just so happened that for many the "generous" was unlimited, and this precedence somehow convinced everyone that "free plan" meant "unlimited free bandwidth" instead of "generous free bandwidth with conditions".

I'm with parent in the feeling that most the stories of Cloudflare acting in bad faith end up being the customer up to shady shit but expecting Cloudflare to subsidize them because "free plan". I'd be genuinely curious to read about an incident where I didn't side with Cloudflare.

Separate to this issue is that their Sales team employ strategies that the engineering crowd considers distasteful like phone calls, pressure tactics and private pricing. Most engineers never need to talk to a sales person outside retail, so it's a shock when you're suddenly talking to one trained and incentivized to exploit more from larger clients but is instead using those tactics on you. It's unsettling if you're not familiar with it, and leaves a bad taste in your mouth.

tomnipotent··on Why is Cloudflare Pages' bandwidth unlimited?
Don't forget about the Bandwidth Alliance, which is agreements for free or cheap egress between peers.

https://www.cloudflare.com/bandwidth-alliance/

tomnipotent··on B-Trees: More Than I Thought I'd Want to Know
> Does that really make a difference if we have to re-write the entire tree node

The I/O write is a fixed cost, but sorting the data to match the pointers would require additional CPU cycles for an outcome that wouldn't really make a difference for subsequent operations.

tomnipotent··on Problems with Python dependency management
I don't see any language in the blog post about "people new to programming to pick up".

In fifteen years of using Python, the only people I see getting burned are, conveniently, the folks writing blogs on the subject. No one I've worked with or hired seems to be running into these issues. It's not to say that people don't run into issues, but the problems seem exaggerated every time this subject comes up.

tomnipotent··on RAII and the Rust/Linux Drama
I don't see anything in her language that can be interpreted as "Zig is bad", rather than "Rust fits my use case best" along with bullet points that explain that logic.
tomnipotent··on Fine, I'll Play With Skiplists
It's my understanding that in the context of append-only skip lists, like what RocksDB uses for memtables, you can see wasted space at the end of a block within an arena but no fragmentation between records within a block. SSTables are another story.
tomnipotent··on 'I grew up with it': readers on the enduring appeal of Microsoft Excel
The kind of professionals doing audit's against Excel spreadsheets are not auditing the "code", they're auditing the methodology used to produce the results being audited.

I've also been through several code audits, and other than sharing the "word" audit they're not the same thing. Audit in this context is the ability to follow how some numbers were derived, and to check how the work was done. It's so that the 3rd party that hired them can confirm the numbers a 1st party are showing are what they say they are (and if not, are they close enough).

Accountants are confirming things comply with GAAP or IFRS, and pointing things out when they don't and asking for clarification. They'll be checking that liabilities were properly structured, and reflected in how profit was derived. They'll be reviewing deferred revenue schedules to make sure next year's pre-paid subscription revenue isn't recognized in Q4.

A financial auditor is going to be looking at the assumptions of the forecast, and working backwards to confirm the methodology. They'll confirm that Q4 2026 projections used the prior years average multiplied by quarterly constant. Or they'll find a results from an ARIMA/Prophet model with notes to "see X". Maybe they'll catch an Excel formula error or 2, but they'll unlikely mean much compared to what else could be wrong.

tomnipotent··on 'I grew up with it': readers on the enduring appeal of Microsoft Excel
I've been involved in at least a dozen audits during Series B/C fundraising periods, the bulk of which included financial models with forward-looking quarterly forecasts backed up with prior-quarter actual results.

Accounting audit usually involves accountants/CFO going through how the accounting system accounts are structured, and how those accounts get turned into the three financial statements (cash flow, income statement, balance sheet). You might have a unique accounting scenario where large expenses can be amortized over several periods, and an auditor will check how that reporting schedule was produced to net out what everyone is looking at on the financial statements. Maybe there was an acquisition that didn't quite pan out and there's an impairment charge that had material differences. Maybe your business collects cash upfront but reports deferred revenue. Maybe your company offers a product warranty so there's a non-trivial accrual schedule to consolidate warranty liability.

I worked at a company that convinced the SEC that it generated revenues from its published content over a 5-year period, allowing it to amortize expenses over that revenue-generating period while front-loading revenues over the first 18 months. Eventually the SEC changed the rules and expenses were expected to be reported in proportion to revenues.

There's a lot of ways those numbers can be put together, with a lot of different rules for how cash, revenue, and loss can be represented and disclosed. The kinds of errors I've seen encountered are less Excel formula errors, and more fundamental issues with account structures and how numbers are being strung together to reach what is reported.

The impression I've received is that what matters during the audit process is not if there are mistakes and errors, but if they lead to material changes that alter the trajectory of any decisions being made.

tomnipotent··on How DRAM changed the world
Most RAM found in consumer PC's during the 90s was still DRAM, including SDRAM, EDO, and Rambus. I believe OP is just being nostalgic over the period of time when RAM upgrades were very a exciting thing, as hardware was changing very quickly in that era and each year felt considerably more capable than the prior.
tomnipotent··on Optimize the Data Layout
Your read performance test is biased towards a struct of arrays, array of structs should outperform when needing random non-contigious look-ups. In the context of fixed-page databases, this is an important distinction since row-based and hybrid storage (PAX) will need to read fewer pages than a pure columnar store.
tomnipotent··on Upgrading Uber's MySQL Fleet
> then you’re still dealing with a B+tree

Absolutely, though they're generally orders of magnitude smaller than the table file unless you're INCLUDE'ing lots of columns.

There's pg_bulkload which supports parallel writers as well as deferred index updates until the loading process is complete. Not sure how it compares to what MySQL offers out of the box, but I definitely agree that the MySQL tooling ecosystem in general has a leg up.

tomnipotent··on Upgrading Uber's MySQL Fleet
MySQL stores table data in a b+ tree where updates modify the data directly in place as transactions are committed, and overwritten data is moved to a secondary undo log to support consistent reads. MySQL indexes store primary keys and queries rely on tree traversal to find the row in the b+ tree, but it can also contain references to rows in the undo log.

PostgreSQL tables are known as heaps, which consist of slotted pages where new data is written to the first page with sufficient free space. Since it's not a b-tree and you can't resolve a row with just a primary key without a table scan, Postgres uses the physical location of the row called a tuple ID (TID, or item pointer) that contains the page and position (slot) of the row within that page. So the TID (10, 3) tells Postgres the row is in block 10 slot 3 which can be fetched directly from the page buffer or disk without having to do a tree traversal.

When PostgreSQL updates a row, it doesn’t modify the original data directly. Instead, it:

  1) Writes a new version of the row to a new page
  2) Marks the old row as outdated by updating its tuple header and relevant page metadata
  3) Updates the visibility map to indicate that the page contains outdated rows
  4) Adjusts indexes to point to the new TID of the updated row
This means that indexes need to be updated even if the column value didn't change.

Old rows continue to accumulate in the heap until the VACUUM process permanently deletes them, but this process can impact normal operations and cause issues.

Overall this means Postgres does more disk I/O for the same work as MySQL. The upside is Postgres doesn't have to worry about page splits, so things like bulk inserts can be much more efficient.

tomnipotent··on Upgrading Uber's MySQL Fleet
MySQL indexes can contain references to rows in the undo log and has a periodic VACUUM-like process to remove those references, though no where near as impactful.
tomnipotent··on AAA Gaming on Asahi Linux
A non-trivial number of contributions to Wine come from CodeWeavers (30%+ of all commits), which in turn is funded by its work on Crossover, Proton, and commercial agreements with other businesses. Wine would not be the project it is today without the contributions of CodeWeavers. Contributing cash to the companies contributing code is a perfectly adequete form of giving back.

CodeWeavers released an annoucement when Gaming Portal Toolkit was announced.

https://www.codeweavers.com/blog/mjohnson/2023/6/6/wine-come...

tomnipotent··on AAA Gaming on Asahi Linux
Except it wasn't "taken", but licensed from CodeWeavers in a commercial partnership. This implies that they're contributing cash, not code.
tomnipotent··on Engineering principles for building financial systems
> You forgot "consistent"

I once had an auditor tell me that the books are allowed to be wrong, but should be wrong consistently. I've even run into the timestamp issue, which generally turned out to be a non-issue unless the wrong date was used (like order date vs. shipping date for revenue recognition) or a considerable number of errors caused dates to end up in a different reporting period. If you're dates are consistently a few hours off, then they'll be consistently off across reporting period boundaries and that can easily be explained to an auditor.

> the necessity to batch reconciliation processes between these layers

I've never seen a reporting period closed without accountants making journal entries for manual adjustments. These can often be material changes.

> An accounting system does not convert currencies at will

This is correct, but for internal reporting you might need to. An accountant and cash flow will capture the important conversion rate when the funds are expatriated, but your finance dashboard showing sales in euros will have an executive that wants to see it in US dollars. It's impractical to use the conversion rate from the transfer that could happen weeks or months after the reporting period, so you come to a compromise of using a X-day FX moving average that's "close enough" and everyone's happy. What goes in your 10-K/Q will be a different story.

tomnipotent··on PostgreSQL and UUID as Primary Key
This gave me a good chuckle, and has generally been my experience. Systems grow often in unpredictable or unintuitive ways.

You can pay the cost for something upfront, and the cost of maintaining it, and in the long term paid too much for something you didn't actually need.

Alternatively you can wait to pay it until you're certain you need it but the work involved has become much more significant, in which it can cost more than it would have to have built and maintained it from the beginning.

Compounding the issue is the build-up-front scenario costs fade with time and you don't really think about them, but build-when-you-need-it always creates a stir even if the costs are less overall than build-up-front.

Either way something will go wrong no matter how many times you predict where the cards will fall.

tomnipotent··on Agricultural drones are transforming rice farming in the Mekong River delta
> Farming has always been innovative

Shout out to Tractor Wars, which I never expected to enjoy as much as I did.

https://www.youtube.com/watch?v=UgtHQUi8AvQ

tomnipotent··on Why are debut novels failing to launch?
You were complaining about platforms and influencer's gatekeeping their audiences and creating some sort of "all-or-nothing effect", whatever that means. Someone else pointed out that ads exist, and you got snippy and decided to attack the OP for "never bootstrapped a business, self-published a book, or similar".

I pointed out that you don't get an audience for free, and that seems to have further upset you.

Doesn't look like the issue is on my end. You could have used the opportunity to correct my understanding, instead you decided to be rude.

tomnipotent··on Why are debut novels failing to launch?
It's always humorous when people turn nasty and throw ad hominem's rather than actually addressing the topic.
tomnipotent··on Why are debut novels failing to launch?
So we're expected to feel sympathy for the broke bootstrapper?

What I'm reading is someone wants all the upsides with none of the downsides. No one is entitled to an audience, especially that of another, just because they've produced some good or service. Participating in capitalism requires either time or money, usually both, and even then you're not guaranteed success.

tomnipotent··on Helldivers 2 has caused over 20k Steam accounts to be banned
Of course Valve has policies designed to meet the expectations of rights holders, that's a given and I'm unaware of any serious business on the planet selling goods created by other companies that doesn't have such policies and enforce them so they can continue to sell those goods. This is a blanket policy that Valve enforces regardless of the publisher.

Valve has been banning accounts for circumventing region restrictions for as long as the feature has existed, and long before Sony added their games to the platform. Just because these policies were designed to appease rights holders doesn't change the fact that it's at Valve's sole discretion to enforce compliance (at risk of losing publishers).

tomnipotent··on Helldivers 2 has caused over 20k Steam accounts to be banned
Point out a single instance where Valve has been caught banning accounts at the request of other businesses. Of course you're welcome to make all the wild speculations you'd like, but I'll stick to reasonable conclusions in the mean time.
← PreviousPage 10 of 34Next →