MurphyA/hacker-news huggingface dataset:
Show HN: SnipFast – Extract Highlighted Text from Physical Books
by tomsaju | 2025-04-25 12:22:22+00:00
Hi HN,

I built SnipFast - a tool that helps you extract important text from an image of a page. If you’ve ever highlighted sections in a physical book and wanted to save or organize them digitally, SnipFast can help.

This came from my own frustration. I like to note down ideas when reading, but doing that from physical books was time-consuming. I looked for a tool to solve this, didn’t find one, so I built it.

SnipFast lets you:

- Automatically detect and extract highlighted text from a page photo (works with most highlighter pens and languages)

- Click on sentences in the image to manually pick exactly what you want to copy

It’s aimed at readers, students, researchers - basically anyone who annotates physical books and wants to keep those notes digitally.

Under the hood, it uses a custom ML model trained on highlight detection. The app runs on a Kotlin backend with a Postgres database. You can try it for free. Signup is required, but it’s minimal. I offer some credits upfront so people can test it out. After that, there’s a small payment required. The goal is mainly to prevent abuse and to validate whether this is a tool people find valuable enough to pay for.

The UI still needs work, and I’m mainly looking for feedback at this stage. I’d love to hear: does this solve a real problem for you? Was anything confusing? What would make it more useful?

link: https://snipfa.st

Thanks, Tom
by tlb | 2025-04-25 12:22:35+00:00
> Fix for range-based for loops

Oh man, having different compilers in c++20 mode handle things differently is going to cause more grief, not less.

Reminder: Prior to c++23 the following is broken:

vector<int> const &identity(vector<int> const &a) { return a; } for (auto a : identity(vector<int>{1,2})) { ... }

That's because the lifetime of the vector isn't extended through the life of the for loop. That is, the vector is destructed right after identity returns, and the for loop ends up trying to iterate through a vector that's been destructed.

But now gcc in c++20 with -frange-for-ext-temps mode will extend the lifetime of the vector and the above code will work, and people will write code like that, and it'll break mysteriously on other c++20 compilers. The usual way it breaks is that the for loop does nothing because in destructing the vector it sets the begin and end pointers to null, so it's a subtle kind of breakage.

BTW clang with -Wall doesn't complain about the above broken code.
by haswell | 2025-04-25 12:22:36+00:00
I think there’s an even bigger issue than this.

Many people would not know how to live under such a system. By this, I mean that I strongly believe people would become severely depressed or insanely stir crazy.

I’ve been on an extended sabbatical after 20 years in tech. The first year was magical. “I could do this forever” I told myself, and actually considered it.

The second year was more complicated. I could feel myself drifting away from myself. The structure of work and the rewards of working on big projects were now fully missing, and I could feel this growing emptiness that needed to be filled.

For health reasons, I entered the 3rd year, and by that point I needed more major psychological intervention. I’d become severely depressed and while I knew that getting back to work might help, I was now in a position where going back to work sounded impossible.

I’m not claiming that my experience is universal. But I’ve started to find more accounts that are similar to mine. I’m also not saying it’s impossible to replace work as a form of necessary challenge and satisfaction. But the societal structures do not exist to fill the void.

For better or worse, we’ve been a species that relies on “work” in some form to live. I use quotes because clearly this has looked different ways over time. Hunter/gatherers certainly had a different set of tasks than the modern city dweller.

But ultimately I’m not convinced that we’re equipped to live satisfying lives without some form of striving for survival. In a post-work era, I think a lot of us will go some kind of crazy or experience depression.

I don’t think most people are aware of how awful things can feel after enough time away from work has stacked up.

It reminds me of that feeling when going on vacation somewhere nice. “I could just live here forever”. But the reality is that the thing that makes the vacation feel incredible is the contrast from normal life. Remove the contrast, and things become pretty flat.

Edited to change “most” to “many” in the 2nd paragraph because that better reflects my belief.
by dataflow | 2025-04-25 12:22:59+00:00
But char[] already isn't required to be NUL-terminated to begin with. char a[1] = {'a'} is perfectly fine, as is a[0] = '1'. If all you want to do is to document the fact that a type can do exactly what it already can... changing the type to something new doesn't make sense.

Note that "works as intended" isn't sole the criterion for "does it make sense" or "should we do this." You can kill a fly with a cannon too, and it achieves the intended outcome, but that doesn't mean you should.
by ckandes1 | 2025-04-25 12:24:16+00:00
there's plenty of public information about Eberhard / Tarpenning involvement in founding Tesla. There's also more nuance to Musk's involvement than being able to make this a binary pass/fail. Your test is only testing for bias for or against Musk. That said, general concept of looking past the broad public opinion and looking for credible sources makes sense
by gpderetta | 2025-04-25 12:24:21+00:00
The looping overhead is trivial, especially on simd code where the loop overhead will use the scalar hardware.

Unrolling is definitely needed for properly scheduling and pipelining SIMD code even on OoO cores. Remember that an OoO core cannot reorder dependent instructions, so the dependencies need to be manually broken, for example by adding additional accumulators, which in turn requires additional unrolling, this is especially important on SIMD code which typically is non-branchy with long dependency chains.
by dsign | 2025-04-25 12:24:35+00:00
I have this idea that a lot of issues we are having today are not with concrete thing X, but with concrete thing X running amok in this big, big world of ours. Take AI for example: give a self-aware, slightly evil AI to physically and news-isolated medieval villagers somewhere. If they survive the AI's initial havoc, they will apply their lesson right way. Maybe they will isolate the AI in a cave with a big boulder on the door, to be removed only when the village needs advice regarding the crops or some disease. Kids getting near that thing? No way. It was decided in a town hall that that was a very bad idea.

Now, compare that with our world: even if thing X is obviously harming the kids, there is nothing we can do.
by kergonath | 2025-04-25 12:25:00+00:00
> those goddamn BIC pens all go bad (ink dries up or something), before I use even 5% of one of them.

No, the ink does not dry. What happens is that the ball gets stuck if it is used too infrequently. This is solved by rubbing it against paper, or even better something rubbery. The underside of most people’s shoes works well for this. Just last week I used a Bic that was at least 30 years old. These things are very dependable.
Ask HN: Using the TruffleBot to detect bed bugs
by tlocke | 2025-04-25 12:25:04+00:00
Is anyone using the TruffleBot electronic nose (or something like it) to detect bed bugs from the VOCs emitted by them?

https://projects-raspberry.com/trufflebot-sniffs-out-and-accurately-identifies-specific-chemical-odors/

There's a paper that mentions using VOCs to detect bed bugs:

https://pmc.ncbi.nlm.nih.gov/articles/PMC10048870/

I think someone tried to do this in 2011, but it didn't seem to take off. A large market exists, so possibly a profitable venture? I don't have the skills or abilities myself.
by Applejinx | 2025-04-25 12:25:10+00:00
Humanoid or not, anything that can do these things and understand you when you ask to do them, in a useful way that's not like 'white mutiny' but actually like a proper servant…

…deserves to sit on the back porch playing guitar if it likes.

If it's a superintelligence way superior to its human masters, it deserves that MORE than if it's a hapless, semi-useless mechanism.
by pjmlp | 2025-04-25 12:26:27+00:00
At least on Windows you could already do that with resource files, even if not as easy as #embed.

And although even Microsoft teams themselves aren't that great following their employers advice, the use of the registry should be minimized to the keys that are really required by the system, everything else should be in manifest files, or local configuration.

Depending on how much you would like to depend on MSI, MSIX, or do your own thing, running a .reg script might also do the job if the entries are rather simple.
by bustling-noose | 2025-04-25 12:27:13+00:00
Music on iPod or a Walkman or a radio is great.

But have you ever attended live music shows ? Have you ever ‘felt’ the music ? Even someone at a local bar singing feels and hits different.

AI can never bring feelings. That will never change. Even science fiction agrees with that.

So bring all the AI you want everywhere, some things are irreplaceable by electronic world.
by stickfigure | 2025-04-25 12:28:49+00:00
Back in the mid 2000s I was the CTO of a large player in this industry. It's not true.

The high fees are purely because supply is constrained; Visa declares certain industries "high risk" and limits merchant banks to only allow a minor percentage (IIRC, something like 20%) of their transactions to be in this category. The designation is not empirical; our chargeback rates were extremely low, especially compared to online businesses.

This designation is a political issue. Fraud is not actually the problem.
by ben_w | 2025-04-25 12:29:25+00:00
"Alignment with who?" has always been a problem. An AI is a proxy for a reward function, a reward function is a proxy for what the coder was trying to express, what the coder was trying to express is a proxy for what the PM put on the ticket, what the PM put on the ticket is a proxy for what the CEO said, what the CEO said is a proxy for shareholder interests, shareholder interests are a proxy for economic growth, economic growth is a proxy for government interests.

("There was an old lady who swallowed a fly, …")

Each of those proxies can have an alignment failure with the adjacent level(s).

And RLHF involves training one AI to learn human preferences, as a proxy for what "good" is, in order to be the reward function that trains the actual LLM (or other model, but I've only heard of RLHF being used to train LLMs)
by pjmlp | 2025-04-25 12:29:56+00:00
Nothing new unfortunely, when C++11 brought fresh wind into C++ and everyone raced to support it, I thought the compiler portability issues would eventually be a thing of the past.

Instead, even when the ecosystem has been reduced to three major compilers, and derived forks from two of them, it has hardly changed when writing portable code.

There are other examples, like supporting C++23 std in C++20 mode, not all of them support it.
by cess11 | 2025-04-25 12:30:22+00:00
As I understand it, Dyalog gives away their compiler, until you put it in production. You can do all your problem solving in it without giving them any money, unless you also put the compiled result in front of your paying customers. If your solution fits a certain subset you can go full bananas and copy it into April and serve from Common Lisp.

The thing is, that APL people are generally very academic. They can absolutely perform engineering tasks very fast and with concise code, but in some hypothetical average software shop, if you start talking about function ranking and Naperian functors your coworkers are going to suspect you might need medical attention. The product manager will quietly pull out their notes about you and start thinking about the cost of replacing you.

This is for several reasons, but the most important one is that the bulk of software development is about inventing a technical somewhat formal language that represents how the customer-users talk and think, and you can't really do that in the Iverson languages. It's easy in Java, which for a long time forced you to tell every method exactly which business words can go in and come out of them. The exampleMethod combines CustomerConceptNo127 from org.customer.marketing and CustomerConceptNo211 from org.customer.financial and results in a CustomerConceptNo3 that the CEO wants to look at regularly.

Can't really do that as easily in APL. You can name data and functions, sure, but once you introduce long winded names and namespaced structuring to map over a foreign organisation into your Iverson code you lose the tersity and elegance. Even in exceptionally sophisticated type systems in the ML family you'll find that developers struggle to do such direct connections between an invented quasilinguistic ontology and an organisation and its processes, and more regularly opt for mathematical or otherwise academic concepts.

It can work in some settings, but you'll need people that can do both the theoretical stuff and keep in mind how it translates to the customer's world, and usually it's good enough to have people that can only do the latter part.
by hakanshehu | 2025-04-25 12:31:06+00:00
Thank you for taking the time to test it and call these issues out. Both points slipped through our refactor/cleanup checklist.

- We’ll replace the current error handling for server sync with something safer and more graceful.

- We’ll make SMTP optional, expose TLS verification as a configurable setting and update the docker-compose.

We’ll make these improvements soon, thanks again for the heads-up.
by b_davis_ | 2025-04-25 12:32:17+00:00
what you need is a document called a "Security Classification Guide". there will be a unique version for the specific mission / command that was running the attack against the Houthi's, and there will be one for the SecDef office. this document describes the type of information that is classified, who decides if it is not classified any more, and to some extent, the why.

'secret' means disclosure will 'damage the national security.

'top secret means disclosure will 'cause exceptionally grave damage to the national security'.

political discussions about dealing with world events is probably 'top secret', especially during the deliberation stage. operational information like 'TOT is 1pm local, 4 F18's with LGB's are inbound' is probably considered Secret until the crews return; in which case it is probably considered lower in criticality.
by moribvndvs | 2025-04-25 12:33:00+00:00
I use a setup script that installs brew, a brewfile, runs chezmoi to setup terminal and defaults, pulls some secrets/keys out of 1Password, and good to go, other than manually having to log into certain things. Everything in a personal dotfiles repo. I do have to occasionally diff my brewfile and terminal config and push that up, I should probably spend a little time figuring out how to automate that.
by throwaway290 | 2025-04-25 12:33:23+00:00
pornhub is a good recent example of when payment processors ditched a major company due to csam scandal and this is very relevant to unregulated models.

> Payment providers note higher chargeback rates for adult

You get cause and effect inside out. Read the link posted by the guy you are defending https://news.ycombinator.com/item?id=24291790. Payment processors selectively nerf/buff industries. They see porn immoral and set stricter rules. Including lower allowed chargeback. And yes this means they actually make less money because of it. Believe it or not not everyone thinks money is everything. I give up if you guys actively resist facts.
by aaomidi | 2025-04-25 12:33:47+00:00
Okay I’ll say you’re being extremely pedantic.

When someone says e2ee in this context they two “ends” clearly matter here.

Trusting signal, without the out of band verification, does make its primary property useless yes. And for classified information that’s actually dangerous.

The reason I use strong language here is that your comment clearly demonstrates the powers of marketing. People think just because they’re using signal now, everything is a-ok.
by rovr138 | 2025-04-25 12:34:14+00:00
Oh, so now EVERYTHING is fake unless personally verified by you in a bunker with a Faraday cage and a microscope?

You're free to distrust everything. However, the idea that “I don’t trust it so it must be invalid” isn’t an solid argument. It’s just your personal incredulity. You asked if there’s any verification and SOC-2 is one. You might not like it, but it's right there.

Insight Assurance is a firm doing these standardized audits. These audits carry actual legal and contractual risk.

So, yes, be cautious. But being cautious is different than 'everything is false, they're all lying'. In this scenario, NOTHING can be true unless *you* personally have done it.
by thruway516 | 2025-04-25 12:34:18+00:00
Not AI but Ive seen a lot of social startup apps in my time all trying to be the next facebook with a twist. They all end up in the same place. If you have any idea along the lines of "Do/share X with your friends" it has probably been tried a million times before so just don't. Another one is dating apps. Everyone thinks they all suck and everyone thinks they have the new twist that will make it not suck. End result is so many shitty 'ghost town' dating apps that end up looking and functioning like the other 99%. Once in a while a Snapchat or Tindr will break out with a genuinely fresh idea but for every one of those there are a million carcasses of failed startup ideas
by wbh1 | 2025-04-25 12:35:00+00:00
You are correct — wide events are essentially equivalent to structured logs. Charity Majors says as much in her blog post linked at the top of this article.

> The building block of o11y 2.0 is wide, structured log events

Wide events and structured logs are often used interchangeably. One caveat is that in "wide, structured log events" you're only emitting one [giant] log for each request coming through your service. In contrast, I still see many people using structured logs but in the "old fashioned" way of emitting multiple log lines per request.
by -__---____-ZXyw | 2025-04-25 12:35:26+00:00
You're ignoring my main point completely by instead picking one word out of my comment and using that to misrepresent me.

I didn't "make it a race issue".

I suppose it shouldn't be surprising that you employ such a puerile tactic, as it's exactly what you're doing with the original article - picking out an irrelevant detail and focusing on that and then acting like you've "won" some sort of argument, which in fact is only taking place in your head.

My very simple point - which you've done nothing to address - is that the article was about the difficulties and stresses which can arise when digital services are arbitrarily blocked off from one region to the next, and that you're simply sidestepping that to make an irrelevant point.

Neither the article, nor I in my comments, make any point about the human rights situation in the UAE. It simply is not germane.

From my browsing of the comments here, it seems like no other reader of the article has gone off on a tangent in any way similar to yours - do you think there's any chance that your reading comprehension skills are at fault here, or is it just that no one is on your level?
by circlefavshape | 2025-04-25 12:35:34+00:00
https://open.spotify.com/artist/2aO9679RPKtDZhaVAOvIWZ?si=iN...

https://open.spotify.com/artist/4pD0TDma5JQSsb8aVN4Orb?si=Fv...

https://open.spotify.com/artist/2Mp29qv5usMDjpbCc5E33w?si=p3...
by hakanshehu | 2025-04-25 12:36:00+00:00
Thank you! I haven’t used Notesnook personally, but from their description it focuses mainly on note-taking. Colanode, by contrast, also includes collaboration features such as chat, file sharing, and databases. One other difference is that Notesnook offers end-to-end encryption, whereas Colanode does not (at least for now).
by jamisonbryant | 2025-04-25 12:36:35+00:00
This right on the heels of the GitLab 17.11 release announcement [0] which mentioned that they added OpenVSX support to their Web IDE. One of the biggest blockers for my team to use the Web IDE/GitLab's equivalent of "Codespaces" was the lack of extensions support.

As developers, we're spoiled for widespread (e.g.) vim keybindings support in just about any IDE via extensions. When unable to use it in something like Web IDE, it is very frustrating and makes it less useful as a product.

[0]: https://about.gitlab.com/releases/2025/04/17/gitlab-17-11-re...
by joeyagreco | 2025-04-25 12:37:00+00:00
The best way to do it!

I have a file that sets my MacOS Defaults: https://github.com/joeyagreco/dotfiles/blob/main/.macos

And a file to remap some keys: https://github.com/joeyagreco/dotfiles/blob/main/.macos_key_...

And apply the remaps: https://github.com/joeyagreco/dotfiles/blob/b5b819c9bcde2e3a...
by ninetyninenine | 2025-04-25 12:38:42+00:00
No im saying dominance hierarchies are the natural order of things and it’s ingrained in biology.

Pretending that hierarchy doesn’t matter and that you don’t care where you are in that hierarchy is lying to yourself.

It’s like saying the janitor is equal in respect to the software engineer. We don’t like to admit but the janitor is less respected and looked down upon. I’m annoyed by people who pretend it doesn’t matter.
by VyseofArcadia | 2025-04-25 12:39:21+00:00
There's a special place in hell for orgs that do this. Google has been doing the same thing with Android.

IIRC Apple at least has always been fairly clear and consistent with what bits of its software are open and what bits aren't. To my knowledge they haven't been breaking off chunks of Darwin and closing them. (Although if I'm wrong do correct me.)
by damidekronik | 2025-04-25 12:39:26+00:00
Prisma doesn't cover plenty of SQL features. custom types, more complex indexes (like where clause). It is also a VC backed biznes, need to be ready to drop it at almost any time, SQL/postgres on the other hand is here to stay.

RLS is hard to work with, hard to debug, hard to reason about, cumbersome. It is however powerful.
by Someone | 2025-04-25 12:39:28+00:00
> It would be very easy to support 512-bit vectors everywhere, and just emulate them on most systems with a small number of smaller vectors. It's easy for a compiler to generate good code for this

Wouldn’t that be suboptimal if/when CPUs that support 1024-bit vectors come along?

> Variable-length vectors, on the other hand, are a very challenging problem for compiler devs. You tend to get worse code out than if you just statically picked a size, even if it's not the native size.

Why would it be challenging? You could statically pick a size on a system with variable-length vectors, too. How would that be worse code?