MurphyA/hacker-news huggingface dataset:
by lisper | 2025-09-23 17:39:48+00:00
Rethinking email is great, but IMHO you are not taking full advantage of the opportunities that arise from building a new client. When you build a new client, you can not only process incoming emails in new ways, but you can also change the way outgoing emails are handled. You can build a new protocol on top of SMTP that will solve many of the extant problems with email, including authentication and spam. You don't have to put up with the current standards and their historical baggage. You can build a new one.

For example: one of the biggest problems with email is that SMTP is not stateful. It handles all incoming messages in the same way. In particular, SMTP does not and cannot distinguish between spam. Spam detection is invariably relegated to a downstream heuristic system that generally looks at message content to detect spam. But this cannot possibly be reliable because one man's spam is another man's newsletter subscription.

What if instead we moved spam detection into the protocol. What if (say) we replaced the single-step process of sending an email into a two-step process, where the first step involves some kind of hand-shake to establish a connection between the sender and the receiver. This simple change would make it literally impossible to send any kind of spam other than a connection request. Those would still happen, of course (think LinkedIn "I want to connect" messages) but they would be a lot less frequent. And there are ways to eliminate even those annoyances.

A new client could become to email what iMessage is to SMS. You could have "blue bubble" messages that are authenticated as having come from the same client, which insures that the user has gone through some some level of vetting (comparable to an iPhone user signing in to their iCloud account). You could even layer new protocols on top of SMTP that were unique to your client's ecosystem, like sending money.

This idea is conceptually simple but very hard to implement because it has to be done in the client and it has to be backwards-compatible with SMTP. But since you're building a new client anyway, I thought I'd pitch this idea to you. The result could potentially be an entirely new email ecosystem.

If you want to discuss this in more detail, contact me privately. My contact info is in my profile.

You're welcome :-)
by searls | 2025-09-23 17:39:56+00:00
In early September, Mike Judge's post challenging the productivity potential for coding agents by asking where the supposed AI shovelware is. It's been stuck in my craw for the past couple weeks, because I keep running into programmers of all stripes who refuse to engage with any of this newfangled AI tooling on the grounds that it's useless.

I realize people are all processing the AI boom differently, and there are many valid reasons to be really mad about all of it, but—as someone who's seen his productivity skyrocket with Cursor, then Claude Code, and now Codex CLI—it seems a little ridiculous to claim that the tools simply aren't capable.

Of course, if we never identify which projects were facilitated thanks to coding agents, we'll never have clear social proof of what they're capable of. That's why I put up this /shovelware page on my blog and started hosting a GitHub badge.
by pron | 2025-09-23 17:40:02+00:00
> Unfortunately there are too many non-believers for systems programming languages with automatic resource management to take off as they should.

Or those languages had other (possibly unrelated) problems that made them less attractive.

I think that in a high-economic-value, competitive activity such as software, it is tenuous to claim that something delivers a significant positive gain and at the same time that that gain is discarded for irrational reasons. I think at least one of these is likely to be false, i.e. either the gain wasn't so substantial or there were other, rational reasons to reject it.
by tripplyons | 2025-09-23 17:40:12+00:00
I have can host it on my M3 laptop somewhere around 30-40 tokens per second using mlx_lm's server command:

mlx_lm.server --model mlx-community/Qwen3-Next-80B-A3B-Instruct-4bit --trust-remote-code --port 4444

I'm not sure if there is support for Qwen3-Next in any releases yet, but when I set up the python environment I had to install mlx_lm from source.
by imoverclocked | 2025-09-23 17:40:22+00:00
> An authoritarian regime grows the size of the state to cement its power

| The OBBBA adds $170 billion for immigration enforcement agencies like Immigration and Customs Enforcement (ICE) and Customs and Border Protection (CBP) [1]

> Biden, and Biden-aligned judges weaponised the law against Trump, with spurious cases and fines

Trump has weaponized the DOJ [2]

Trump was convicted of felonies and other crimes; They were not spurious. He claims that he was targeted and a victim but he is also a well-known scam artist. "Accusation in a mirror" [3] fits much of his rhetoric.

> Trump has not done anything similar against Harris, Clinton or Biden

Does "Lock her up!" ring any bells?

Why doesn't Trump's "Hunter Biden" hunt register here?

> Compare what happened in Democrat cities in the wake of George Floyd's death vs what's happening in Republican areas after Charlie Kirk's assasination

It's telling that you say "death" vs "assassination" in the two cases; George Floyd was murdered. The "riots and looting" you speak of are contested as being a separate act unrelated to the original message through peaceful protest. Maybe choose a better example... and maybe one that isn't as recently charged ... and one that isn't being widely compared to Horst Wessel.

> Trying to extrapolate a "fascist" future version of the current Trump regime ...

I'm not; It's already fascist right here, right now.

[1] https://www.dhs.gov/news/2025/07/04/secretary-noem-commends-...

[2] https://www.google.com/search?q=trump+weaponized+the+doj

[3] https://en.wikipedia.org/wiki/Accusation_in_a_mirror
by jbreckmckye | 2025-09-23 17:40:24+00:00
Now that we have defined a language without booleans, we need some way to coalesce these optional values

We ideally want an infix function that can reduce the "truthiness" of two values.

Let us imagine this language is a Haskell-type-thing, and we can define pseudo-operators with pattern matching

infixr 3 && (&&) :: Optional -> Optional -> Optional Empty && _ = Empty _ && Empty = Empty Some A && Some B = Some A _ && _ = Empty infixr 2 || Some || _ = Some None || Some = Some None || None = None _ || _ = None

Hmm, let's see how that looks

a = b && c d = e || f

The good news is that we are free from the tyranny of booleans. The bad news is that we just reinvented JavaScript :-)
by sandworm101 | 2025-09-23 17:40:58+00:00
Other university story: the frats at my uni had frat houses, physical biuldings, but sororities did not (circa 2000). The frats bought decades previous, when houses were affordable. The sororities of the time could not. There was an ancient rule that more than X unrelated females sharing an independant house constituted a brothel. That law was ancient history, but the sororities missed the oppertunity to purchase land near the university and, i believe, to this day operate without fixed houses.
by lelanthran | 2025-09-23 17:41:16+00:00
> Happy to answer questions on how this works

Well, thank you for that; from a quick skim of Guidance, it looks like it is used when interfacing with the model directly - i.e. if I want to use Guidance I can't simply send input to my local Ollama instance, I have to stand up a small Python program that loads the model, accepts input from the user, push the user input tokens into the model, and for each output token, reject it if it fails some criteria.

Is this correct? If so, it means that the current way LLMs are interfaced with (via stdin/stout or an HTTP endpoint) can't be used with something like Guidance, correct?
by leakycap | 2025-09-23 17:41:26+00:00
If you don't realize the overlap in the Rails and Ruby on Rails community, I'm not sure what corner of the Ruby world you've been hiding in.

Someone can shush away any behavior if they want, like you have done. Feel free to provide an alternate history or context for the current Ruby community upheaval if you want, but just dismissing the problems of the past doesn't help anyone.
by legacynl | 2025-09-23 17:41:35+00:00
I don't really get it.. In one of the last example's he writes:

` if (node.last_child(s) is Ok(last_child))`

Is the part between the () not ultimately the same as a boolean expression? Like he wrote his own implementation of if/else syntax?

Also in the beginning he says: "An if with an else can produce a value", but isn't this just 'syntactic sugar'? I think the code that actually runs is the same as if you'd write if (value x = some_value) {value = something} else {value = something_else} ?
by petergeoghegan | 2025-09-23 17:41:44+00:00
> I may not be remembering fully, maybe the indexes never shrunk but the tables did in size.

That only happens when it is possible to give back space to the OS filesystem using relation truncation in the first place -- which isn't all that common (it's generally only seen when there are bulk range deletions that leave lots of contiguous empty space at the end of a table/heap structure). But you said that this is an append-only workload.

This behavior can be disabled by setting the vacuum_truncate table storage parameter to "off". This is useful with workloads where relation truncation is disruptive (truncation needs to acquire a very heavyweight table lock).

> Is there no way to automatically clean up indexes then?

What I meant was that indexes do not support relation truncation. It follows that the amount of space used for an index (from the point of view of the OS) cannot ever go down, barring a REINDEX or a VACUUM FULL.

This does not mean that we cannot reuse space for previously freed/deleted pages (as long as we're reusing that space for the same index). Nor does it mean that "clean up" isn't possible in any general sense.
by lapcat | 2025-09-23 17:41:46+00:00
> The one piece from this author that I found most persuasive is the analysis of mobile web vs app usage share. The web is practically dead on mobile. Users spend practically no time there

False.

You appear to be referring to https://infrequently.org/2024/10/platforms-are-competitions/ which itself refers to https://www.emarketer.com/content/the-majority-of-americans-...

According to the survey, people spend on average almost a half hour per day in mobile web browsers, and that percentage remained steady over the surveyed period. That's not "practically no time", and furthermore, if Apple Safari is supposedly falling behind, that hasn't caused a noticeable decrease in the time spent web browsing.

It is true that the time spent using mobile apps (including games) has been increasing. Whether that's good, bad, or neutral is subject to debate. But it's not clear why this is inherently worse than spending time in a web browser. Note also that the survey does not distinguish between iOS and Android.

Also, as the article notes, "our figures may undercount time in embedded mobile browsers, such as those within Facebook or Twitter."
by ge96 | 2025-09-23 17:41:57+00:00
Ahh man I just dealt with this, reviewed some code, approved, another one comes in the same code from before is moved around. So much diff. I'm like "why was this moved?" Then I just stop caring, stuff is not indented right. So many things to point out (yes use a linter/formatter). It's tough other people just give me the LGTM treatment, I'm the annoying one doing actual reviews. This one is less reviewed since it's a vibe-coded POC but yeah.
by dhosek | 2025-09-23 17:42:41+00:00
A lot of this is on the people doing the platting in the first place. I would note, for example, that where I live in Oak Park, when they replatted the suburb after splitting from Austin Township with a different grid than is used in Chicago and the neighboring suburbs that

1. They kept the Chicago grid on the edge streets of the village so that, e.g., 110 North Austin would be across the street from 111 North Austin and

2. If they had kept the usual new 100 at each block system, the north-south streets on the south end would have been 1200–1249 which would have been identical to the numbers of the next block south in Berwyn and Cicero so the last block on the north-south streets is instead 1150–1199.

Contrast the borders of Los Angeles which in some areas are almost fractal in their complexity (there are buildings which straddle the boundary between L.A. and its neighbors and many blocks where adjacent buildings are in different cities). For whatever reason, the powers that be decided that the incompatible address numbering between adjacent cities should be retained so you will have weird discontinuities in building numbering along a block depending on what city the building lies in. I remember my wife having a doctor’s appointment in a building which was one of those which crossed the border so it had two different addresses assigned to it, one for Los Angeles and one for Beverly Hills.
by dkarl | 2025-09-23 17:42:42+00:00
I think the benefit is significant. Based on my vivid memories of having roommates, not sharing cooking facilities and having guaranteed quiet and privacy in the evenings are pretty huge. Also having to share space in the bathroom with another person's toiletries, towels, and mess. People forgo lots of income in order to avoid living with roommates because of these issues, so I think it's plausible that they would compromise and accept less income to avoid the worst aspects of having a roommate.
by all2 | 2025-09-23 17:42:54+00:00
For my projects that require a distinct unit of functionality, I typically reach for a JS library that I can include as a payload (no npm, no deps, just a JS file). SortableJS is a good example, so is MarkdownJS if I want the browser to handle MD rendering.

This only goes so far, though. At some point, an app developer might want to integrate these distinct units of functionality, and I'm not sure how I would go about that. I haven't gotten to that point.
by Biganon | 2025-09-23 17:43:19+00:00
On the very day ghostty refuses to load my theme because themes now start with an uppercase letter; the same day I'm no longer able to enter `^` (a caret) for some reason. Not to mention the multiple times where the clipboard suddenly and completely stopped functioning, in the last few weeks.

I love ghostty, but if it keeps suddenly failing for no apparent reason I might have to go back to wezterm.
by hbn | 2025-09-23 17:43:21+00:00
Is your theory that PC's bad reputation is from people only having experience with cheap ones? If so I'm not sure if I buy it.

At my work, all non-developers are given Microsoft Surfaces. They're not cheap machines by any means, but they have nothing but problems with them. Overheating, battery drain, lag, full-on lockups, requiring regular daily reboots, needing replacement after a year, etc.

I'm guessing they just give everyone PCs because it's what most people are familiar with, but I have to assume they're spending more on those units than a base-spec MacBook Air that would get way better mileage and cause less tickets for IT.
by kazinator | 2025-09-23 17:43:32+00:00
I was responding only to the idea of having no conflict resolution: last edit wins (proposedin a great grandparent comment):

https://news.ycombinator.com/item?id=45341335 "We have a local-first app. Our approach? Just ignore the conflicts. The last change wins."

if you can see the edits being made in real time, keystroke by keystroke, that pretty much solves that problem.

As for offline editing, either don't support it (then you're not local-anything obviously) or you can have some lame workflow like "the document was changed by another user ..."
by FlyingLawnmower | 2025-09-23 17:43:37+00:00
guidance can handle many context-free grammars. We use an Earley parser under the hood (https://en.wikipedia.org/wiki/Earley_parser) which gives us significant flexibility boosts over alternative approaches that use weaker parsers (and went through lots of effort to make Earley parsing fast enough to not slow down LM inference). However, XML is not perfectly context-free, though with some basic assumptions you can make it CF.

The annoying bit with grammars is that they are unfortunately a bit complex to write properly. Fortunately language models are getting better at this, so hopefully to get an XML grammar, you can get most of the way there with just a GPT-5 prompt. Suppose it would be a good idea to have a better pre-built set of popular grammars (like a modified XML) in guidance so that we cut this headache out for users...!
by estebank | 2025-09-23 17:43:46+00:00
Out of curiosity, why are you borrowing that many times? The following should work:

while let Some(page) = object_stream.next().await { match page { // ListObjectsV2Output Ok(p) => { if let Some(contents) = p.contents { all_objects.extend(contents); } } // SdkError<ListObjectsV2Error, Response> Err(err) => { let raw_response = err.raw_response(); let service_error = err.as_service_error(); error!("ListObjectsV2Error: {:?} {:?}", service_error, raw_response); return Err(S3Error::Error(format!("ListObjectsV2Error: {:?}", err))); } } }

I would have written it this way

while let Some(page) = object_stream.next().await { let p: ListObjectsV2Output = page.map_err(|err| { // SdkError<ListObjectsV2Error, Response> let raw_response = err.raw_response(); let service_error = err.as_service_error(); error!("ListObjectsV2Error: {service_error:?} {raw_response:?}"); S3Error::Error(format!("ListObjectsV2Error: {err:?}")) })?; if let Some(contents) = p.contents { all_objects.extend(contents); } }

although if your crate defines `S3Error`, then I would prefer to write

while let Some(page) = object_stream.next().await { if let Some(contents) = page?.contents { all_objects.extend(contents); } }

by implementing `From`:

impl From<SdkError<ListObjectsV2Error, Response>> for S3Error { fn from(err: SdkError<ListObjectsV2Error, Response>) -> S3Error { let raw_response = err.raw_response(); let service_error = err.as_service_error(); error!("ListObjectsV2Error: {service_error:?} {raw_response:?}"); S3Error::Error(format!("ListObjectsV2Error: {err:?}")) } }
by leakycap | 2025-09-23 17:43:49+00:00
Your critique of the author's writing style doesn't seem like your strongest argument.

> It's true Ruby Central was a fiasco and the maintainers should have been treated better.

Treated better as in ... not removed from their own projects? Treated better as in... not kicked out of things they built by someone else who has something to gain?

Treated better is not the phrase to describe what should have happened here.
Ask HN: People are interested, now what?
by libridev | 2025-09-23 17:44:00+00:00
I built a free audiobook search engine a couple of months back to scratch my own itch. It has been one of my most successful side projects to date. I got around 9k unique visitors in the span of a month after I got to the front page of HN.

Yet now I don't know how to make it profitable. This is something I am interested in building. I simply don't see the potential in affiliate links.

Check the month of February: https://cloud.umami.is/share/V1zn2LVYcBKhQzT7/booksearch.party
by stryan | 2025-09-23 17:44:06+00:00
> Seriously, can someone explain to me the actual experienced difference between 2 people having a conversation, and 1 person having a conversation on loudspeaker?

Loudspeaker/speaker phone is a harsh, artificial sound which can be grating to hear. Two people having a conversation while physically present can also automatically adjust their volume, tone, and subject matter depending on the area around them. This often happens unconsciously and is affected by cultural and social norms i.e. some cultures (famously "latin" ones) are louder than others.

If the conversation is happening over loud speaker, the above does not occur. The person on the phone can not adjust their volume/conversation topics to react to the surroundings of the conversation, is solely dependent on the person holding the phone to modulate their volume or change subject matter. The person speaking also can not modulate their volume properly since they need to talk in a certain way to be intelligible over the phone.

I'd assume most people would get annoyed at 2 people loudly talking and arguing in an area where it's expected to be quieter, or even in public at all since the human brain is good at picking out speech among other sounds, since it would be distracting if not second hand embarrassing. But this happens significantly less frequently then the loudspeaker problem due to the aforementioned automatic speech adjustments.
by TranquilMarmot | 2025-09-23 17:44:14+00:00
You can import your iCloud photos into Immich. Immich itself is agnostic to the photos and mostly just operates on folders of files.

https://github.com/simulot/immich-go is what I used to import ~300gb of photos from Google Photos to Immich. Not sure how well it works for iCloud.

There is also https://ente.io/ which is a private & secure photo backup app that you don't need to self-host.
by janalsncm | 2025-09-23 17:44:24+00:00
That was never not the case. There are always value judgements. Even for keyword searches, there are often hundreds of exact matches, and one you want might not even be an exact match.

This article is about how Target can use LLMs to help you find patio furniture. I guess you could imagine the LLM upselling you on a more expensive set?
by unstirrer | 2025-09-23 17:44:42+00:00
Funnily enough, I first came across Thich Nhat Hanh last week while listening to the new Djo (Joe Keery) album. One of the songs on it is a tribute to him; it's quite pretty: https://open.spotify.com/track/6HqSlNhH83iWRU2nTZkiUj
by godelski | 2025-09-23 17:44:57+00:00
You're misinterpreting

Requiring docs isn't the cause of the problem. It's the lack of enforcing quality. The difference is that you're looking at the metric and seeing Goodharts Law in action while there's nothing preventing you from going beyond the metric. That's the real issue is that metrics only take you so far. No metric can be perfectly aligned so it's up to the people who are evaluating the metrics to determine if the letter of the law is being followed or the spirit of it is. If you do the latter then yeah, maybe some functions will be left without docs but you also won't hasn't those tautological docs either. If you only care about the letter of the law then you should expect the laziest bullshit as Goodharts Law always wins out.

Stop reading too much into metrics. Metrics are only guides
by PStamatiou | 2025-09-23 17:45:00+00:00
What is happening on the Photos team? I know a lot of the core team has left already, but lately it really seems like they are cramming in AI functionality in a way that does not consider the whole experience and it truly feels bolted-on. First they tried to mess with regular search and had to leave in a setting for people to go out of their way to disable it.

Google Photos used to be one of my most favorite apps. Now it's some testing playground. I'm sure some new startup is approaching this area so the cycle can repeat.
by Aurornis | 2025-09-23 17:45:12+00:00
Reference counting can be used as an input to the garbage collector.

However, the difference between Arc and a Garbage Collector is that the Arc does the cleanup at a deterministic point (when the last Arc is dropped) whereas a Garbage Collector is a separate thing that comes along and collects garbage later.

> If you need a referecne counted garbage collector for more than a tiny minotiry of your code

The purpose of Arc isn't to have a garbage collector. It's to provide shared ownership.

There is no reason to avoid Rust if you have an architecture that requires shared ownership of something. These reductionist generalizations are not accurate.

I think a lot of new Rust developers are taught that Arc shouldn't be abused, but they internalize it as "Arc is bad and must be avoided", which isn't true.