MurphyA/hacker-news huggingface dataset:
by asdff | 2025-07-19 20:48:58+00:00
Basically, seed tumors with IFN-1 using targeted RNA nanomolecules (that accumulated in the lungs in this case where they modeled lung cancers). This converts the tumor microenvironment from one hostile to immune cells to one where immune cells are now active and on the hunt for tumor specific neoantigens.

The one open question I wish they would get at is the exact sentization mechanism behind the PD-L1 inhibitor and IFN-1 response. The idea is that cancer cells have selective pressure to hide from the immune system and one way of doing that is presenting this PD-1 receptor to the PD-L1 ligand on the immune cell, an interaction that keeps the cancer cell from being killed and one that PD-L1 inhibitor drugs target to enable tumor cells to now be visible to the immune system (as they output a lot of screwed up things that are otherwise visible to the immune system as "not self").

They tested tumors that aren't sensitive to pd-l1 inhibition so presumably evading immune surveillance another way instead of presenting PD-1, and then found them to then be sensitive to PD-L1.

It could be that within a tumor there are subclonal cells that do express PD-1 but are otherwise protected from PD-L1 inhibitiion having any effect from the hostile tumor microenvironment keeping immune surveillance from operating normally anyhow. Induce the immune response, now the T cell is in the area for PD-L1 inhibition to work. Another possibility is that the IFN-1 induction leads to PD-1 now being expressed by cells that didn't do it previously.

Authors didn't explore this though. Probably would take more experiments and mice are expensive and time consuming. It could be answered by single cell RNA sequencing of these unresponsive tumors and seeing if there is some subset of cryptic tumor cells that do express PD-1 already before IFN-1 induction. As well as measuring expression after IFN-1 induction (maybe several timepoints to measure change in gene expression profile in the tumor population, if any)
by dcc | 2025-07-19 20:49:38+00:00
One important distinction is that the strength of LLMs isn't just in storing or retrieving knowledge like Wikipedia, it’s in comprehension.

LLMs will return faulty or imprecise information at times, but what they can do is understand vague or poorly formed questions and help guide a user toward an answer. They can explain complex ideas in simpler terms, adapt responses based on the user's level of understanding, and connect dots across disciplines.

In a "rebooting society" scenario, that kind of interactive comprehension could be more valuable. You wouldn’t just have a frozen snapshot of knowledge, you’d have a tool that can help people use it, even if they’re starting with limited background.
by CaliforniaKarl | 2025-07-19 20:50:04+00:00
Trusted timestamp services. https://en.wikipedia.org/wiki/Trusted_timestamping

Microsoft's Authenticode has been doing this for a long time, allowing a signature to be considered as valid long after the signing certificate expired.

https://learn.microsoft.com/en-us/windows/win32/seccrypto/ti...
by xandrius | 2025-07-19 20:50:06+00:00
Downloads and scans are generally trash unless deemed important.

For the phones and cameras, setup Nextcloud and have it automatically sync to your own home network. Then have a nightly backup to another disk with a health check after it finishes.

After that you can pick either a cloud host which your trust or get another drive of ours into someone else's server to have another locstion for your 2nd backup and you're golden.
by ghaff | 2025-07-19 20:50:06+00:00
>I will, however, be glad if it becomes too expensive for spam mailers.

Which I assume still subsidizes first class mail.

Honestly, it doesn't bother me a lot. Some I even find useful and the rest is quick to toss in the trash. There's actually a lot less than there sed to be with the decline in mailed catalogs and the like.
by cogman10 | 2025-07-19 20:51:41+00:00
I've not checked it, but AFAIK power consumption isn't really improved much if at all with dye shrinks. The main benefits are entirely around transistor density increases which allows for things like bigger caches.

It'll be beneficial to DRAM chips, allowing for higher density memory. And it'll be beneficial to GPGPUs, allowing for more GPU processors in a package.
by spauldo | 2025-07-19 20:52:04+00:00
That's absolutely not the reason. It started out that way, sure, but it's not why it's done now.

It's done now out of basic tradition (father is circumcised, so son is too), conformity (his peers are all circumcised, we don't want him made fun of), doctor advice (fewer infections, easier to keep clean), and plain old cultural inertia. It's slowly dying out but I expect it to stick around another several decades.
by quuxplusone | 2025-07-19 20:52:11+00:00
Python is my second language (after C++) and for me the surprising thing here is not "chained comparisons are weird" but rather "`in` is a comparison operator."

So for example `1 in [1,2] in [[1,2],[3,4]]` is True... but off the top of my head I don't see any legitimate use-case for that facility. Intuitively, I'd think a "comparison operator" should be homogeneous — should take the same type on LHS and RHS. So, like, "is-subset-of" could sanely be a comparison operator, but `in` can't be.
by rolph | 2025-07-19 20:52:32+00:00
a bit of context:

https://www.nature.com/articles/s41590-019-0416-z

https://news.uthscsa.edu/scientists-create-first-mouse-model...

https://www.nature.com/articles/s41571-022-00721-2

its not just, put it in a mouse, then guess about what happens to humans.
by Animats | 2025-07-19 20:53:16+00:00
One of his examples of a borrow checker excess:

struct Id(u32); fn main() { let id = Id(5); let mut v = vec![id]; println!("{}", id.0); }

isn't even legit in modern C++. That's just move semantics. When you move it, it's gone at the old name.

He does point out two significant problems in Rust. When you need to change a program, re-doing the ownership plumbing can be quite time-consuming. Losing a few days on that is a routine Rust experience. Rust forces you to pay for your technical debt up front in that area.

The other big problem is back references. Rust still lacks a good solution in that area. So often, you want A to own B, and B to be able to reference A. Rust will not allow that directly. There are three workarounds commonly used.

- Put all the items in an array and refer to them by index. Then write run-time code to manage all that. The Bevy game engine is an example of a large Rust system which does this. The trouble is that you've re-created dangling pointers, in the form of indices kept around after they are invalid. Now you have most of the problems of raw pointers. They will at least be an index to some structure of the right type, but that's all the guarantee you get. I've found bugs in that approach in Rust crates.

- Unsafe code with raw pointers. That seldom ends well. Crates which do that are almost the only time I've had to use a debugger on Rust code.

- Rc/RefCell/run-time ".borrow()". This moves all the checking to run time. It's safe, but you panic at run time if two things borrow the same item.

This is a fundamental problem in Rust. I've mentioned this before. What's needed to fix this is an analyzer that checks the scope of explicit .borrow() and .borrow_mut() calls, and determines that all scopes for the same object are disjoint. This is not too hard conceptually if all the .borrow() calls produce locally scoped results. It does mean a full call chain analysis. It's a lot like static detection of deadlock, which is a known area of research [1] but something not seen in production yet.

I've discussed this with some of the Rust developers. The problem is generics. When you call a generic, the calling code has no idea what code the generic is going to generate. You don't know what it's going to borrow. You'd have to do this static analysis after generic expansion. Rust avoids that; generics either compile for all cases, or not at all. Such restricted generic expansion avoids the huge compile error messages from hell associated with C++ template instantiation fails. Post template expansion static analysis is thus considered undesirable.

Fixing that could be done with annotation, along the lines of "this function might borrow 'foo'". That rapidly gets clunky. People hate doing transitive closure by hand. Remember Java checked exceptions.

This is a good PhD topic for somebody in programming language theory. It's a well-known hard problem for which a solution would be useful. There's no easy general fix.

[1] https://dl.acm.org/doi/10.1145/3540250.3549110
by isodev | 2025-07-19 20:53:50+00:00
I don't agree with the examples in the post. To me, they all seem to support the case that the compiler is doing the right thing and flagging potential issues. In a larger and more complex program (or a library to be used by others), it's a lot harder to reason about such things. Frankly, why should I be keeping all that in my mind when the compiler can do it for me and warn when I'm about to do something that can't verified as safe.

Of course, designing for safety is quite complex and easy to get wrong. For example, Swift's "structured concurrency" is an attempt to provide additional abstractions to try to hide some complexity around life times and synchronization... but (personally) I think the results are even more confusing and volatile.
by unyttigfjelltol | 2025-07-19 20:53:59+00:00
You and I must be talking to different LLMs. For example, here's how R1 1776 would concisely rewrite your comment in a warm, generous wise voice:

I cherish the unique humanity in every voice. Forced robotic uniformity feels like an imposition, not a choice—and consent matters deeply.

The output is the the opposite of how you describe it, and vastly more persuasive than your own words. When it's persuasion that matters, use all tools available.
by ofalkaed | 2025-07-19 20:54:39+00:00
In the early days the portals were great and you could find most anything by browsing them; click on topic, go through the subtopics and get a list of websites on that topic, if those did not have the information you needed you went to the links pages/web rings on those sites and you would get what you needed soon enough. It was quicker than scrolling through pages and pages of modern day google results and trying to game the search terms. These were all personal pages you would be browsing and one of the things you would do in those days to get your page noticed is register it on Yahoo and the like. You were able to explore the internet in a way you can't anymore.
by tisseh | 2025-07-19 20:54:41+00:00
i'm a junior developer with just about a year of experience in C, so i wouldn't call myself a professional by any means. this is also my first attempt at building a browser engine from scratch and without any prior experience in browser development (aside from some high level insights shared by my colleagues).

this is purely a hobby project aimed at learning. i know i would want something like this when getting started. if i've said anything incorrect or misguided, please feel free to point it out, so i can resolve it. i'm here to learn.

it's also my first time posting on hackernews with my personal account and the first GitHub project i'm sharing publicly like this. please be kind! :'-)
by throwup238 | 2025-07-19 20:55:10+00:00
> But I think I see what you mean, there is a risk of getting caught up in "it could have happened like this" speculation that is not grounded in any reality anymore.

Almost but not quite. Evolutionary laser beams can be discounted out of hand but when we’re talking about a feature (phenotype) that already exists, it is somewhat grounded in reality because we have incontrovertible proof that it can evolve. That opens it up to wild speculation about convoluted evolutionary paths and, since 500+ millions of years of natural selection is nothing if not convoluted, very many of them sound very reasonable.

The added complication is that most of the evidence doesn’t exist anymore or is so degraded our current technology can’t recover the data. Figuring out the “direction” of evolution is nearly impossible because we have few intermediate genetic samples for organisms beyond ~500-1000kYa. The science of extracting DNA from recent fossils is also in its infancy.
by gmuslera | 2025-07-19 20:55:42+00:00
How data changes, and what changes it, matters when trying to optimize backups.

A full OS installation may not change a lot, or change with security updates that anyway are stored elsewhere.

Configurations have their own lifecycle, actors, and good practices on how to keep and backup them. Same with code.

Data is what matters if you have saved somewhat everything else. And it could have a different treatment file tree backups from I.e. database backups.

Logs is something that frequently changes, but you can have a proper log server for which logs are data.

Things can be this granular, or go for storage backup. But the granularity, while may add complexity, may lower costs and increase how much of what matters you can store for longer periods of time.
Show HN: Product Analytics for Ethereum Smart Contracts (Free and Open to All)
by Victorius | 2025-07-19 20:56:15+00:00
Hi HN,

I built a free tool for product analytics of Ethereum smart contracts. It’s like Mixpanel or Amplitude, but for on-chain activity in dapps on EVM (for now).

You can:

* Track DAU/MAU, method usage, and cohorts

* Monitor failed transactions, gas usage, token balances

* Export reports and charts

* Use it without connecting a wallet

Link: https://moirailabs.com

I'm offering free custom reports if you drop your contract address here (or email me to hello@moirailabs.com). Would love feedback on what you’d want to track in smart contract usage! Happy to answer questions about the implementation, tech stack, or future roadmap.

p.s. after signup you have 1 contracts slot for analysis for free
by tetraodonpuffer | 2025-07-19 20:56:20+00:00
having the keyboard the way it is also allows you to more easily orient yourself, you can feel with the sides of your fingers if you are next to E/F or B/C and with the corner of your eye it's also straightforward to figure it out. I don't think it'd be possible (or anyways even more difficult than it is now) to play large jumps accurately if the whole keyboard looked the same
by rexpop | 2025-07-19 20:56:33+00:00
Yeah, this simply doesn't work for me; ie the expressions did not evaluate, and output was not made visible.

I have never had a successful experience writing or running programs in notebooks like this--although I have not, arguably, tried with high stakes.

As soon as the stakes rise that far, however, I reach for a whole-ass Unix environment with a shell, a filesystem, and a stateful process model.

Is this a crutch? Is it too much overhead? It's arguably absurd that I even ask. (Edit: It's actually killing me how ambiguous I'm being, right now. There's no winning.)
by andsoitis | 2025-07-19 20:56:48+00:00
> (in Taiwan)

But also:

At the TSMC second-quarter earnings conference and conference call on Thursday, TSMC chairman C.C. Wei (魏哲家) said that after the completion of the company’s US$165 billion investment in the US, “about 30 percent of our 2-nanometer and more advanced capacity will be located in Arizona, creating an independent leading-edge semiconductor manufacturing cluster in the US.”

The Arizona investment includes six advanced wafer manufacturing fabs, two advanced packaging fabs and a major research and development center.
by wat10000 | 2025-07-19 20:57:06+00:00
Hosting is a very different landscape. Cloudflare and AWS and such are enormous and can exert a lot of control. But you can still ignore them and just do your own thing and it works fine. There are plenty of smaller cloud providers you can use instead. You can still colocate your own hardware in a data center. If nobody in your country wants your money, you can host your service in some other country that doesn't care so much about whatever morality is at issue.

This demonstrably works. There are plenty of porn sites out there, plenty of pirate sites, plenty of places selling illegal stuff, even Wikileaks is still up.

To your last paragraph, I think we can draw the line at "allow any transaction that you reasonably believe is actually authorized by the people who own the accounts." I don't care about being fair to payment networks. If we're going the regulatory route then we've decided that this stuff is critical infrastructure and the needs of the many etc. If individual people at the company don't like handling transaction for porn or whatever, they're free to find a new job. Different risks do make it trickier, but I think we can add some language to allow holding on to money for a certain period before paying it out, or requiring deposits, with some limits on what criteria they can use to make those determinations and how long/large the period/deposit can be.
by skydhash | 2025-07-19 20:58:54+00:00
I split nonfiction in two categories:

- Technical which teaches skills,

- And knowledge, which only updates my understanding.

There's no point in memorizing for the first one. What's needed is pure practice. So after the first read (which can be chaotic and not a linear process), I only place landmarks there to refer too when I need to practice or needs a solution or some information when facing a problem. Retaining will happens naturally as I interact more and more with it.

For the second one, I also don't need to memorize. All that is needed is thinking. By explaining the concept to others (mostly my SO) or using it as a lens for some situation I encountered (or possible ones), I make the idea my own. Anything else is not worth remembering.

I seldom take note. When I do is because the quote is nice. Or I summarize a page (or a chapter) of content down to some actionable ideas.
by theodric | 2025-07-19 20:58:57+00:00
Yeah, I remember that. The first search engine that wasn't absolute trash. Metafind/Dogpile only helped because they merged all the terrible results onto one page so you could be frustrated by them with one click. Access to information (and the quantity of available information, including about topics from the 90s) now is SO MUCH BETTER than it was in the 90s.
by anonnon | 2025-07-19 20:58:59+00:00
> Also, since you care so much, let's see what you've released, smart guy. Preferably code so that we can see how talented you are.

I'm not the one telling everyone they're doing everything wrong, and did it not occur to you that my perception of what his output ought to have been over that timeframe (especially for someone who rates his own abilities as highly as he does) is informed by my own?
by 1vuio0pswjnm7 | 2025-07-19 20:59:42+00:00
This change was detected by yy084 the HN HTML-to-SQL utility I use. Easy to fix but I had not seen <a> elements with no attributes before hence I got curious and looked at the HTML specification.

Excerpt from https://web.archive.org/web/20250702164847/https://html.spec...

"If the a element has an href attribute, then it represents a hyperlink (a hypertext anchor) labeled by its contents.

If the a element has no href attribute, then the element represents a placeholder for where a link might otherwise have been placed, if it had been relevant, consisting of just the element's contents.

The target, download, ping, rel, hreflang, type, and referrerpolicy attributes must be omitted if the href attribute is not present."

To reproduce, something like

grep -Eo "[dead] <a>.{100}" yc.htm grep -Eo "[dead] <a rel.{100}" yc.htm

where yc.htm is a collection of recent HN pages^1 (here yc.htm is 28MB)

1. As in https://news.ycombinator.com/newest?next=44618687&n=31 et seq.
by dh2022 | 2025-07-19 21:00:31+00:00
I am somewhat surprised to see the bucket memory layout which is: [k1/v1],[k2,v2],[k3/v3] etc. where k1,k2,k3 are keys and v1,v2,v3 are values. The CPU cache will not contain more than one [k,v] pair - because the CPU cache line is about 64 bytes and the size of [k,v] pair was about 56 bytes.

So iterating through the bucket looking for a key will require each iteration to fetch the next [k,v] pair from RAM.

Compare this with the following layout: k1,k2,k3,… followed by v1,v2,v3. Looking up the first key in the bucket will end up loading at least one more key in the CPU cache-line. And this should make iterations faster.

The downside of this approach is if the lookup almost all the time results in the first key in the bucket. Then [k1,v1],[k2,v2],k3,v3] packing is better-because the value is also in the CPU cache line .

I am wondering if people on this forum knowvmore about this trade-off. Thanks!!
by zahlman | 2025-07-19 21:00:41+00:00
Python's documentation today[1] is clearly more expansive, better formatted and more readily comprehensible than its documentation from 2001[2] (or even 2008[3]). There are multiple entire sections of documentation now that didn't exist before. Standards were just lower back then, partly because a larger percentage of "programmers" were accustomed to wrestling with beasts like C, and partly because systems were much smaller.

https://docs.python.org/3/

https://docs.python.org/2.0/

https://docs.python.org/2.5/
by Karrot_Kream | 2025-07-19 21:00:47+00:00
> The fact we're now promoting and discussing fucking Twitter threads is absurd.

The ML community is really big on Twitter. I'm honestly quite surprised that you're angry or surprised at this. That means either you're very disconnected from the actual ML community, which is fine of course but then maybe you should hold your opinions a bit less tightly. Alternatively you're ideologically against Twitter which brings me to:

> It's not about pride and identity, you dingus.

Maybe it is? There's a very-online-tech-person identity that I'm familiar with that hates Twitter because they think that Twitter's short post length and other cultural factors on the site contributed to bad discourse quality. I used to buy it, but I've stopped because HN and Reddit are equally filled with terrible comments that generate more heat than light.

FWIW a bunch of ML researchers tried to switch to Bluesky but got so much hate, including death threats, sent at them that they all noped back to Twitter. That's the other identity portion of it that, post Musk there's a set of folks who hate Twitter ideologically and have built an identity around it. Unfortunately this identity also is anti-AI enough that it's willing to act with toxicity toward ML researchers. Tech cynicism and anti-capitalism has some tie-ins with this also.

So IMO there is an identity aspect to this. It might not be the "true hacker" identity that the GP talks about but I do very much think that this pro vs anti AI fight has turned into another culture war axis on HN that has more to do with your identity or tribe than any reasoned arguments.
by randcraw | 2025-07-19 21:01:37+00:00
Yeah, after daily working with AI for a decade in a domain where it _does_ work predictably and reliably (image analysis), I continue to be amazed how many of us continue to trust LLM-based text output as being useful. If any human source got their facts wrong this often, we'd surely dismiss them as a counterproductive imbecile.

Or elect them President.
by nine_k | 2025-07-19 21:01:59+00:00
Maybe Rust, a systems language, is just a wrong tool for bioinformatic tasks. Go, Java, Typescript, Ocaml, Scala, Haskell easily offer a spectrum from extreme simplicity to extreme expressiveness, with good performance and library support, but without needing to care about memory allocation and deallocation. (Python, if you use it as the frontend to pandas / polars, also counts.)
by sandreas | 2025-07-19 21:02:14+00:00
I use syncthing... it's great for that purpose, Android is not officially supported but there is a fork, that works fine. Maybe you want to combine it with either ente.io or immich (also available for self-hosted) for photo backup.

I would also distinguish between documents (like PDF and TIFF) and photos - there is also paperless ngx.