MurphyA/hacker-news huggingface dataset:
by tzs | 2025-08-30 04:46:57+00:00
> Since 2020, Romania’s performance in the International Mathematical Olympiad (IMO) has been nothing short of amazing. In 2022, Romania came in fifth overall, fourth in 2023, and twelfth in 2024.

Here's how those three years compare to surrounding years:

2017 22 2018 33 2019 17 2020 15 2021 27 2022 5 2023 4 2024 12 2025 13

(Update: See note at the end with more years)

I'm not sure much can be read into this. The participants are usually high school students, and the top contestants from a given country usually participate in multiple years, and each country's team had 6 contestants.

It only takes getting a two or three outstanding students for a country to shoot significantly up for a couple years or so, depending on how close in age those students are.

For the 3 years the article mentions, 2022-2024, Romania had 2 people who were there all 3 years, 5 people who were there for 2 of the 3 years, and only 2 people who were only there for 1 year.

The 2023 team had 5 people from 2022. For 2024 half the 2023 team was replaced.

Looking at several years of their teams and individual performances it looks like they regularly have people who do well. A lot of people place in ranked 150+ one year, then shoot way up in the next year or next two, and then drop way down again.

For example they had a guy who 2018-2020 ranked 174, 15, 4. But they didn't in those last two years have anyone else also peaking.

In 2021-2024 they had a guy who went 143, 32, 1, 82.

In 2021-2023 they had a guy who went 319, 23, 46.

In 2017-2025 all the years except 2022-2024 had 2 people in the top 100. 2022 and 2023 had all 6 in the top 100, and 2024 had 3 in the top 100.

Looking at all this 2022-2024 plausibly could be explained as just a matter of timing. They seem to always have some people who are good enough to get a high score at least once. Some do it their first year and then don't participate any more. Some participate multiple times but only hit that high once. A smaller number hit multiple highs.

With just a small change in the timing of when some of these people appear or when they hit their peaks, so that they happen at the same time instead of missing each other by a small number of years, many of those other teams could before 2022 could have been top 10 teams.

Update: here is Romania's rank going backwards from 2025 to 1979:

2025: 13, 12, 4, 5, 27, 15, 2019: 17, 33, 22, 20, 13, 11, 22, 10, 8, 16, 2009: 13, 17, 11, 6, 6, 10, 7, 8, 15, 11, 1999: 4, 11, 7, 1, 2, 9, 11, 3, 3, 4, 1989: 2, 2, 1, 6, 1, 3, 5, 11, 20, no IMO this year, 1979: 2

It looks like they did very well in the IMP during their last decade of Communism (which ended there in 1989, and also for the decade after that.

For the next 10 years they fell off a little. It was during this time (2003 specifically) that they started using a national test to assign people to high schools.

The decade after that fell off a little more. It was at the start of that decade (2010) that they switched to the Evaluarea Națională mentioned in the article.
by benregenspan | 2025-08-30 04:47:09+00:00
It's at a state level in the US, so it's necessary to look up your state's privacy laws (California was the first to adopt comprehensive privacy legislation but others have followed). TBH I had never thought about its applicability to hiring process information, since the laws are framed more as a "consumer" right, but it seems possible it's covered under some of these laws.
by jampa | 2025-08-30 04:47:15+00:00
I work in an app where bugs are unacceptable due to the nature of the company's reputation. We've been having a lot of success with E2E, but getting there was NOT easy. Some tips:

- False negative results will make your devs hate the tests. People want to get things done and will start ignoring them if you unnecessarily break their workflow. In the CI, you should always retry on failure to avoid flaky false-negative tests.

- E2E Tests can fail suddenly. To avoid breaking people's workflow, we do a megabenchmark every day at 1 AM, and the test runs multiple times - even if it passes - so that we can measure flakiness. If a test fails in the benchmark, we remove it from the CI so we don't break other developers' workflows. The next day, we either fix the test or the bug.

- Claude Code SDK has been a blessing for E2E. Before, you couldn't run all the E2E in the PR's CI due to the time they all take. Now, we can send the branch to the Claude Code SDK to determine what E2E tests should run.

- Also, MCPs and Claude Code now write most of my E2E. I wrote a detailed Claude.md to let it run autonomously --writing, validating, and repeating -- while I do something else. It does in 3 to 4 shots. For the price of a cup of coffee, it saves me 30-60 minutes per test.
by palmfacehn | 2025-08-30 04:47:48+00:00
President Ulysses S. Grant and Meiji Emperor Mutsuhito: A Study of Their Shared Dialogue on Finance and Capital and Its Long-Term Influence on Trade and Business Development

>Grant would state to the Emperor:

>There is nothing a nation should avoid as much as owing money abroad… You are doubtless aware that some nations are very derious to loan money to weaker nations whereby they might establish their supremacy and exercise undue influence over them. They lend money to gain political power. They are ever seeking the opportunity loan. They would be glad, therefore, to see Japan and China, which are the only nations in Asia that are even partially free from foreign rule or dictation, at war with each other so that they might loan them on their own terms and dictate to them the internal policy which they should pursue

https://www.econ.kyoto-u.ac.jp/BHSJ2018/pdf/E09Austin_Busine...

I find it interesting that the US President was aware of the malign incentives around debt creation. Grant explicitly describes how would be issuers of debt were capable of fomenting international conflicts for their own benefit. Today that would be dismissed as a conspiracy theory.

The US's military spending currently exceeds the next nine countries.
by ulrikrasmussen | 2025-08-30 04:49:11+00:00
That's not actually what the article says, the article said that the rollout of MitID first included the app, and that the alternatives were made available later. The alternatives were always part of the plan. The lobby group mentioned were complaining because MitID was replacing an existing solution, NemID, which offered the alternatives. For a while during the rollout you could use both methods of identification, and the lobby group wanted to wait with retiring NemID until the alternatives for MitID were available. The old solution was not replaced due to security issues but because the vendor lost the project when the contract ran out.

There are two discussions here, the technical and the one concerned with freedom. I am concerned with both, and I think we need a compromise which doesn't throw out the latter in order to obtain a perfectly secure model.

My concern is not only with ad removal, that was just an example. My concern is digital autonomy in general, and the issue of giving an American company the power to decide what software users around the world are allowed to execute. They can censor software they don't like, and rogue governments can pressure them to censor software that THEY don't like. E.g. the EU who might want to prevent people from installing E2EE apps soon when Chat Control is rolled out.

There are good technical security arguments for phone based solutions over the alternatives, but it doesn't mean that the alternatives are worthless, just that the users have to be a bit more vigilant. I think that is a better compromise in the interest of protecting freedom and democracy.

We are some of the few people who can understand the long-term implications of the different technical solutions and the potential tools it will give private companies and governments to suppress people. If we are not advocating for freedom over convenience, then who will?
by jhhh | 2025-08-30 04:50:50+00:00
If you are having to refactor 150 things each time you change your codebase then maybe you need to refactor your test suite first. Direct calls in tests to constructed/mocked objects is usually something you can just stuff into a private method so you only need to change it in one place.

Not quite sure I agree with the conclusion of the tiers of testing section either. If a test suite takes a long time but still covers something useful, then just deleting it because it takes too long makes no sense. Yes, if you have a 'fastTests' profile that doesn't run it that could temporarily convince you your changes are fine when they aren't. But the alternative is just never knowing your change is bad until it breaks production instead of just breaking your CI prior to that point.
Show HN: SJT- A lightweight structured JSON table format for APIs
by yukiakai | 2025-08-30 04:52:31+00:00
Hi HN, I built a small experimental format called SJT (Structured JSON Table) to optimize data transport in APIs. The idea is simple: instead of repeating object keys for every row, SJT separates the structure (headers) from the values. This makes it both more compact and easier to stream.

For example, with Discord’s /messages endpoint:

Raw JSON payload: ~50,110 bytes

Same data encoded with SJT: ~26,494 bytes

So you get about a 50% reduction in size, while still being able to decode incrementally (record by record). Surprisingly, decoding can even be faster than plain JSON, because there’s less string parsing overhead.

Quick benchmark:

| Format | Size (KB) | Encode Time | Decode Time |

| ----------- | --------- | ----------- | ----------- | | JSON | 3849.34 | 41.81 ms | 51.86 ms |

| JSON + Gzip | 379.67 | 55.66 ms | 39.61 ms |

| MessagePack | 2858.83 | 51.66 ms | 74.53 ms |

| SJT (json) | 2433.38 | 36.76 ms | 42.13 ms |

| SJT + Gzip | 359.00 | 69.59 ms | 46.82 ms |

Test conditions:

Dataset: Synthetic tabular dataset containing 50,000 records with mixed primitive fields, nested arrays, and nested objects (representative of large REST API payloads).

Runtime: Node.js 20 (V8 engine).

Implementation: JavaScript (via sjt.js).

Size (KB): Uncompressed size in kilobytes (estimated for binary formats).

Encode / Decode (ms): Average time in milliseconds to serialize/deserialize the entire dataset.

Spec: https://github.com/SJTF/SJT

JS implementation: https://github.com/yukiakai212/SJT.js

Curious to hear feedback from people who have worked with JSON-heavy APIs, streaming, or compact data formats (CSV, Parquet, etc.).
by tkgally | 2025-08-30 04:53:30+00:00
As mentioned in the thread that included dang’s suggestion [1], examples of one’s use of em dashes timestamped before ChatGPT could be used as a defense if one is accused, on the basis of em dashes, of having written with AI.

Whether this is interesting or not, well…

[1] https://news.ycombinator.com/item?id=45046883
by dlenski | 2025-08-30 04:53:48+00:00
> A lot of engineers design by trying to think of the “ideal” system: something well-factored, near-infinitely scalable, elegantly distributed, and so on.

Was it Donald Knuth who said "premature optimization is that root of all evil"?

This article made this point very well, especially regarding the obsession with "scaling" in the SaaS world.

I've seen thousands and thousands of developer hours completely wasted, because developers were forced to massively overcomplicate greenfield code in anticipation of some entirely hypothetical future scaling requirement which either never materialized (95% of the time) or which did appear but in such a different form that the original solution only got in the way (remaining 5%).

John Ousterhout’s Philosophy of Software Design makes the case for simplicity in a book-length form. I really like how he emphasizes the importance of design simplicity for the maintainability of software; this is where I've seen it matter the most in practice.
by majormajor | 2025-08-30 04:55:03+00:00
I think they have a point, though.

If you're talking about making popular music isn't the de-professionalization of the performers and (in many, many cases, especially for those groups like Metallica or The Beatles) the writers and composers more interesting than de-professionalization of the recording engineers? Which maps pretty directly to changes in tool technology, vs taste?

Though I think you could also argue the opposite, that there have long been huge amounts of "amateur" mass-popular music compared to, say, Mozart. They just didn't have recording technology to turn into Elvis or The Beatles or Dr Dre or whoever.

In games the analog is probably random card games, or Mafia, or dominos variants, vs big productions...?
by silversmith | 2025-08-30 04:56:55+00:00
Came here to comment this. Most of the flakey tests are badly written, some warn you about bugs you don't yet understand.

Couple years ago I helped to bring a project back on track. They had a notoriously flakey part of test suite, turned out to be caused by a race condition. And a very puzzling case of occasional data corruption - also, turns out, caused by the same race condition.
by ganeshsivakumar | 2025-08-30 04:57:29+00:00
Stream realtime knowledge base update for AI agents and RAG applications using flink

Hey everyone, I've been working on a data pipeline to update AI agents and RAG applications’ knowledge base in real time. Currently, most knowledgeable base enrichment is batch based . That means your Pinecone index lags behind—new events, chats, or documents aren’t searchable until the next sync. For live systems (support bots, background agents), this delay hurts.

Solution: A streaming pipeline that takes data directly from Kafka topic, generates embeddings on the fly using openai, and upserts them into Pinecone continuously. With Kafka to pinecone template , you can plug in your Kafka topic and have Pinecone index updated with fresh data. Agents and RAG apps respond with the latest context Recommendations systems adapt instantly to new user activity

Check out how you can run the data pipeline on apache flink with minimal configuration and would like to know your thoughts and feedback.
by jessekv | 2025-08-30 04:58:04+00:00
I think it's relative, right? That's how abstractions and interfaces work.

I can write a module with integration tests at the module level and unit tests on its functions.

I can now write an application that uses my module. From the perspective of my application, my module's integration tests look like unit tests.

My module might, for example, implicitly depend on the test suite of CPython, the C compiler, the QA at the chip fab. But I don't need to run those tests any more.

In your case you hope the in-memory database matches the production one enough that you can write fast isolated unit tests on your application logic. You can trust this works because something else unit-tested the in-memory database, and integration tested the db client against the various db backends.
by seer | 2025-08-30 04:59:54+00:00
I’ve kinda of the opinion that if introducing tests, especially the useful integration tests is hard and complex, then it is a code smell.

Most of the times, especially while I was learning, making your code “more testable” has always involved things that should have been done in the first place, but we were lazy/didn’t know better.

Things like reducing dependencies, moving state away from the core and into the shell. Using more formal state machines etc. Once the “painful changes” were done I’ve found that it was actually beneficial in a lot of other contexts.

That given, I’ve kinda almost stopped writing unit tests - with the advent of expressive types everywhere, the job of unit tests has now been shifted to the compiler.

In one typescript project I’ve managed to set it up, the part that kept the state was statically typed (a database) making sure any data that went in and out was _exactly_ like the compiler expected.

After typing and validating all the other user / non-user inputs into the code, it ended up in a situation where “if the code compiles, it will work” and that was glorious. We had very minimal unit tests - only around actual business logic with state machines, the rest was kinda handled by the compiler and we didn’t feel the need to do it manually.

Apart from that, the integration tests had the philosophy of “don’t specify anything that the user is not seeing” so no button test ids, urls or weird expectation of the underlying code, just an explanation of “the user is on the page with this title, they see a button named this and they press it, expecting they are now in a page titled this”

The concept was taken from the capybara ruby testing library way back in the day, and the tests this produced have been incredibly resilient. Any update that changes the user experience would fail the tests (as they should) and any refactor, up to the level of changing urls or even changing the underlying libraries and frameworks, would be ignored.
by lurking_swe | 2025-08-30 05:00:52+00:00
they are 100% correct.

Are the bright minds at Meta making the world a better place? What about OpenAI? Is the damage AirBnb has done to many communities (and housing stock) useful?

It’s debatable for sure…and hilarious coming from tech folks on this forum. Pretending we’re righteous doctors or something LOL. Give me a break.

For context i’m a software engineer that’s very grateful I don’t work in the ad, retail, or any other “dark pattern” space. But most tech jobs _are_ like that!
by glenngillen | 2025-08-30 05:01:37+00:00
We have passive thermal heat tubes on our roof to heat our pool. It works amazingly well. I want to put PV on our roof, but that’d mean having to pull up those tubes first and replacing our pool heater with something electric.

Turns out there’s companies that do hybrid systems! Water is used to cool the PV, increasing the efficiency of the panels in the process, and then the heated water is used wherever you need it.

Unfortunately it seems there’s only a couple of providers, it’s rare to find installers that do it, and it’s ssuuuppppeeerrr expensive relative to the normal options. Such a shame. I wish there were more options here. It seems like a great approach.
by rramadass | 2025-08-30 05:02:18+00:00
You are just placing too much emphasis on caveats and limitations rather than focusing on the usefulness of the technique itself. Also techniques like Dimensionality Reduction exist to help tame higher dimensions.

None of your cautions are really that big of an impediment in practice and i would not want students to take away the wrong message from these comments. Mathematicians/Practitioners know when to switch from simple geometry to algebra and that is taught as a matter of course.

As an example, the farin and hansford book Practical Linear Algebra: A Geometry Toolbox that i mention at https://news.ycombinator.com/item?id=45060305 precisely takes this approach starting with visualizing vectors in 2D/3D geometry and then moving on to higher-dimensions. Its 1st edition was actually named The Geometry Toolbox: For Graphics and Modeling.
by morpheos137 | 2025-08-30 05:03:11+00:00
It is shocking to me that 99% of people on YC news don't understand that LLMs encode tokens not verbatim training data. This is why I don't understand the NYT lawsuit against openAI. I can't see ChatGPT reproducing any text verbatim. Rather it is fine grained encoding of style in a multitude of domains. Again LLMs do not contain training data, they are a lossy compression of what the training data looks like.
by ehnto | 2025-08-30 05:03:27+00:00
Totally agree, what I observed with the shift to matchmaking was the removal of communities and shared sportsmanship (and moderation). Replaced by matchmaking, game providers are constantly chasing the technological challenge of removing bad actors from the pool. But we are already very good at that as a species, if they gave us control of making communities within online services again we'd solve that problem for them right away.

You see it with things like Counter-strike and private servers. Sim racing and leagues/discord servers etc.
by anon7000 | 2025-08-30 05:03:32+00:00
You hit the nail on the head too. Coding itself is very easy for anyone halfway decent in this career — and yet there were a ton of people in CS101 and even in later courses who struggled with things like for loops. It was very hard for them to succeed in this career.

What’s hard is coming up with the algorithm/system design, making the right choices that will scale and won’t become a maintenance nightmare, etc. And yeah, after almost a decade, I have picked up enough I can at least write an outline of a solution that will work alright. But there are still so many tricky edge cases and scaling problems that make it hard to turn “alright” into “really good!”

Sure, AI can help… but it mostly helps with greenfield projects. It doesn’t know about the conversations on slack & jira from a year ago. It doesn’t know about the dozens of other systems and ways the project interacts with other parts of the business. It doesn’t know why whatever regurgitated approach won’t be a good fit for our specific use case. And elaborating all of that detail is not easy! Part of what makes you a good employee is the shit you picked up over the past several months & years that is joe ingrained in your mind when you start working on new projects.
by cmertayak | 2025-08-30 05:04:40+00:00
Good reminder: "Project management tool is not the answer, clear priority is the one".

It reminds me of what is said to be Peter Thiel's style of management at Paypal: One person, one problem.

He is said to make one person the clear owner and decision-maker for each significant problem. This person is given the authority and resources to solve it, and is held accountable for the outcome.

People naturally gravitate toward easier, B+ problems they know how to solve, rather than the hard, high-impact A+ problems. Thiel's rule forces focus on the most important, difficult issues, even if it feels uncomfortable or limiting at first. Over time, teams saw that this intense focus led to breakthrough solutions, like PayPal's fraud detection system, which was only possible because one person was given total ownership of the problem.

https://www.data-imagery.com/one-person-one-problem/
by anon6362 | 2025-08-30 05:07:14+00:00
IIS, Apache HTTPd, and Nginx have supported rewrite rules with wildcards and regex since forever.

Thus, there's no absolute rule that serving a static state must faithfully map to filesystem representation except convenience. Nor, do dynamic requests need to map to include the details of dynamic handler URIs unless the application cannot change generated links.

Revealing backend state, while somewhat Security Through Obscurity (STO)(TM), it's unwise to volunteer extraneous information without a purpose. Preferably, some other simple, one-way hash external representation should be used.

I played client-side Netscape JS and Apache HTTPd CGI bash shell scripts (not even Perl) to write a toy multiuser chat app in 1996. IIRC, it used a primitive form of long polling where it kept an HTTP/0.9 session open with keepalive commands periodically and then broadcasted the message received to all other users who were also connected.
by ternaryoperator | 2025-08-30 05:08:24+00:00
Not apocryphal. The article is referenced and discussed in this interview with Kent Beck[0]. As you see, the link goes directly to Dr. Dobb's--although the page is down. Search for "Cunningham" and the first hit takes you right to the conversation.

[0] https://blogs.oracle.com/javamagazine/post/interview-with-ke...