MurphyA/hacker-news huggingface dataset:
by timewizard | 2025-05-18 21:31:42+00:00
Well we've witness both sides engage in that behavior recently. The only thing different about our world is the level of apologia and backward looking justifications that gets injected into social media about them.

Which I normally wouldn't comment on but your post is fairly ironic given the current thread. Which is claiming that the media is entirely absent from it's coverage of Trumps latest schemes in order to argue about what, precisely, a former FBI director meant with a picture of seashells.

Perhaps if the dog and pony show died down we could return to the very reasonable perspective that greed does not obey political boundaries.
by Waterluvian | 2025-05-18 21:31:47+00:00
I’ve been absolutely loving template types and dot notation pathing. I have an entire compile time (and therefore autocompletable) argument for major.minor.patch.theme.schemaname for all schemas in the program manage. I don’t consider these “hyper typing” because they’re very, very easy to reason about when used in the right context like dot notation paths.

I wish, however, I could cleanly type “this must be an integer between 0 and 58” but typescript isn’t that expressive unless you do some pretty ridonkulous things. Especially with template strings it would be so cool to have something like:

type foo = `v${0:1}.{0:99}.{0:}`

(or whatever pre-existing format exists elsewhere. I just made that up)

This would be generalized as a “number range literal”, maybe. So not particular to template strings.

But not regex. Solving this with a regex literal type would be the poster child of “hyper typing”.
by bryanhogan | 2025-05-18 21:33:59+00:00
Common ways to sync Obsidian are through cloud tools (Google Drive, OneDrive, etc.), SyncThing Fork or Git.

I'd recommend you to look into SyncThing Fork or a similar tool if you never want your notes to leave your own server.

I wrote about ways to sync Obsidian here: https://bryanhogan.com/blog/how-to-sync-obsidian
by Firehawke | 2025-05-18 21:34:35+00:00
Microsoft really should go back and look into open sourcing more of their really old tools. Get versions of MASM, QuickBasic, VisualBasic (the DOS version, of course), and so forth out there.

There's a lot to learn from these old tools and it'd be nice to have this stuff opened up for tinkerers on ancient platforms. It's not like MS is going to make any money off any of this anymore, nor is it viable for use on a modern platform even with substantial effort.
by veqq | 2025-05-18 21:35:00+00:00
> I haven't seen mentions of page to page consistency anywhere.

A lot of work's been done here. There are believed to have been 2 scribes (see Prescott Currier), although Lisa Fagin Davis posits 5. Here's a discussion of an experiment working off of Fagin Davis' position: https://www.voynich.ninja/thread-3783.html
by 6gvONxR4sf7o | 2025-05-18 21:35:56+00:00
I've felt the same, but I blame error messages and language ergonomics rather than the practice itself. Basically, everything you said, but with optimism that future languages and language implementations make 'hyper typing' a good practice. Recent languages have shown that there's a lot of room for improvement on error messages in complex programs. Hopefully that extends to complex types before too long.
by tuatoru | 2025-05-18 21:36:25+00:00
> We should have expensive products which actually improve lives.

Those are called philanthropic charities - research institutes or the like. Some of the very rich have them.

Edit: the town I was born in had a Carnegie Library[1].

Edit 2: the point being that the very rich buy social status and respect.

1. https://www.nzgeo.com/stories/carnegie-libraries/
by schoen | 2025-05-18 21:36:27+00:00
I had a phone call with him in about 2000, because he was then publishing a lot of material about DRM (and attacks on DRM), and I was also into anti-DRM stuff and was thinking of going to an industry meeting related to it. I wanted to know if he would publish whatever documents I might obtain there.

I remember that he said I could make a business card (!) saying that I was a special representative or special agent or journalist or whatever I wanted for Cryptome.

I said something like "wait, really?" and he said something like "well, who I am to say who does or doesn't work for Cryptome?" or "why should anyone believe you when you say you do or don't work for Cryptome? people should never believe each other!" or something like that.

He also warned me to watch out for people messing with my laptop in the hotel.

I didn't end up making the business card (I thought it would make people more suspicious of me rather than less, which was probably right), but I think I did send him a couple of documents, in retrospect probably very boring ones.

I met him briefly in person once, ironically at the announcement lecture for Wikileaks at HOPE in New York. I remember being confused because I assumed he would get along well with the Wikileaks people, but he was already kind of skeptical or cynical somehow.

He was also famous for posting extremely cynical takes to mailing lists.

John seemingly felt that power had already corrupted everyone or was always on the verge of corrupting everyone, and that one should be extremely reluctant to believe in anyone's stated motives for anything. I don't know if he thought there was some way out of that scenario or that that was just human nature. He always reminded me of the epigraph of Illuminatus!, attributed to Ishmael Reed: "The history of the world is the history of the warfare between secret societies."

I definitely admired his courage and independence.
Ask HN: Best on device LLM tooling for PDFs?
by martinald | 2025-05-18 21:38:00+00:00
I've got very used to using the "big" LLMs for analysing PDFs

Now llama.cpp has vision support; I tried out PDFs with it locally (via LM Studio) but the results weren't as good as I hoped for. One time it insisted it couldn't do "OCR", but gave me an example of what the data _could_ look like - which was the data.

The other major problem is sometimes PDFs are actually made up of images; and it got super confused on those as well.

Given this is so new I'm struggling to find any tools which make this easier.
by somat | 2025-05-18 21:38:50+00:00
I like it, it presents a sort of integrity.

My thought process was, this is going to be the actual flyby of new horizons past pluto, no wait it's not, this is just a fake flyby. but look how coarse the heightmap is, they did not just sprinkle high density noise to make a better looking height map, they stuck with actual data, that's nice.

Honestly this is probably too charitable of me, with all the other liberties the author took with the data a high density heightmap was probably just considered not important, rather than some sort of moral highground.
by perching_aix | 2025-05-18 21:38:54+00:00
Hiding an entire channel should at least work, that much I was able to directly confirm.

Although it was not without a twist. Originally, I blocked asmongold and his shorts channel - so far so good. But then he made a second shorts channel. Okay, blocked that too. But then unrelated third parties made another "fan" shorts channel, so I had to block that too. I'm not sure how many further iterations there will be, but most of the time and for the most part, I did manage to get rid of him from my feeds, so that's something.
by dzink | 2025-05-18 21:39:01+00:00
I started using Roam and as a proper geek, dug through the data it sends back and forth about me and my notes in the browser console. It was doing access logs and some random day I saw some random dude’s name in the access log for my notes. I reached out to ask. They told me he was a new employee. I saw no reason to save personal notes and ideas on a platform where any employee can enjoy them. Thereafter I took my notes to tools i wrote myself. Very enlightening to the incentives for building such tools.
by vidomines | 2025-05-18 21:39:56+00:00
Over the past years I’ve tried various methods to save content I found interesting (Notion, TikTok folders, bookmarked tweets/IG posts). Despite my efforts, I rarely revisit any of it.

Lately I’ve been considering a different approach: using ChatGPT as a dynamic repository. By feeding it articles, notes, and other materials, I could interactively retrieve information when needed. It might transform passive content storage into an active, accessible library. Lets see how it works…
by coolcase | 2025-05-18 21:39:57+00:00
1. Never do greenfield. But usually seen systems set up with the cloud "house white" queue. SQS or the Azure queue whatever its called.

2. Nothing. It all worked out.

3. Nowhere. Generally used them for queue-y things.

4. Not done this. Even back in 2000s when queues weren't so well known they'd be a queue-like system. Polling FTP for example!
by const_cast | 2025-05-18 21:41:00+00:00
> Calling the political center of any country "fine with genocide" isn't an argument, it's a smear.

Well the US isn't doing genocide really so yeah it's a smear.

But moderates run the status-quo. MLK talked about how the biggest hurdle to integration and civil rights wasn't racists - it was the moderate white man. Ultimately things are the way they are because there are so many moderates who propose no solutions to anything and are terrified of anything that could be misconstrued as a change.

Moderates are, by in large, complacent with atrocities currently going on in the government they belong to. Moderates in Israel certainly seem fine with genocide. Moderates in the US are fine with the US' war-mongering. They're fine with the pseudo-slavery system that exists in some US states like Georgia.
by snickerbockers | 2025-05-18 21:41:26+00:00
yeah but was the point of this decision that they want to fuck with SEGA, or was the point of this decision that they didn't want to invest development resources into something that they (correctly, unfortunately) expected was going to be a dead end? It would've been the right decision with what they knew at the time but looking back in hindsight they would've been far better off if they had just made a couple shovelware games for the Dreamcast if that's all it would've taken to prevent 2k sports from ever existing.

Also the last football game in the series, ESPN NFL 2k5 (actually released in 2004 a few months before they sold the studio to Take-Two) was seen as the primary reason why EA payed off the NFL to stop selling licenses to their competitors; so it's indisputable that the 2k-sports brand had a negative impact on EA's bottom line while it was still a SEGA subsidiary.
by bigfatkitten | 2025-05-18 21:42:20+00:00
> There's plenty of well-written explanations for why perimeter based security doesn't work

It certainly helps when your attack surface consists of numerous web apps of unknown quality.

Drive-by RCEs (e.g. log4j) then suddenly become much less of a headache when none of it is reachable by the world at large.

Exactly how you do that, whether via an authenticating reverse proxy or VPN doesn’t really matter.
by musicale | 2025-05-18 21:42:29+00:00
DOS IDEs (Turbo Pascal etc.) do seem pretty great, but they wouldn't help you build GUI apps the way you could with VB, Delphi (a successor to Turbo Pascal), Java, etc. Tcl/Tk is also a product of the 1990s, both open source and commercial, which made GUI app development faster and easier, though I am not sure if it had a good IDE.

(I think we're indebted to Sun for wasting money on things like Java and Tcl/Tk, projects that weren't closely related to their core business but which benefited the rest of the industry.)

Most of the things you mention are also products of the 1990s, providing additional evidence for the claim that software advanced quite a bit on both the proprietary and free software sides during that decade.
by bryanhogan | 2025-05-18 21:43:33+00:00
I've also been using Obsidian a lot. I recommend the SyncThing Fork over SyncThing.

I myself currently use Google Drive with DriveSync on Android to sync my notes, which works great. Other cloud providers also work well.

I wrote a comparison of different tools to sync here: https://bryanhogan.com/blog/how-to-sync-obsidian
by lolinder | 2025-05-18 21:44:30+00:00
Any serious approach to security begins with a reasonable and clearly defined threat model, and my threat model for my home network doesn't currently include a team of superheros targeting my file backups in an effort to save the world. But I'll definitely keep your advice in mind when I do decide to start executing on my evil plots.

For now my threat model consists of script kiddies and abusive corporations. Self-hosting gets me away from the corporations and keeping my stuff off of the public internet keeps me away from script kiddies.
by treyd | 2025-05-18 21:45:33+00:00
Yeah due to the design rule that "futures do nothing unless polled", it's enough to simply drop them and it cancels the whole tree of work. That doesn't necessarily cancel other tasks that were spawned that the future might have been waiting on. That's really easy to build if it's needed, since we do have RAII. This is part of why Rust's futures compose really well in ways that goroutines just do not and JS promises struggle with.
by MisterTea | 2025-05-18 21:45:59+00:00
Are you speaking of large numa machines like the old SGI Origin machines where a single OS image ran on thousands of CPUs distributed along multiple racks or a grid or cluster of smaller general purpose machines like the classic Linux Beowulf cluster? Both very different but have the same goal.

Plan 9 is very close. Its kernel was designed from the start with multi-processing and is all channels internally. It's small and highly portable so it runs on a Rpi and there was an IBM Blue Gene project. It's architecture is distributed so one machine can serve disk and auth and a hundred more can boot and auth to them. Then they can share resources seamlessly as everything happens through the foundational 9P protocol.

There was never a framework or API to fully abstract this for HPC but could be implemented with minimal effort as the foundation is there (e.g. You wouldn't need mpi as you have 9p.) Though general work loads can be pushed to CPU servers using ssh like commands to do thin me line run programs in pipes across machines.
by Telemakhos | 2025-05-18 21:46:32+00:00
You might be interested in Richard Stallman's method of browsing the web:

> I generally do not connect to web sites from my own machine, aside from a few sites I have some special relationship with. I usually fetch web pages from other sites by sending mail to a program (see https://git.savannah.gnu.org/git/womb/hacks.git) that fetches them, much like wget, and then mails them back to me. Then I look at them using a web browser, unless it is easy to see the text in the HTML page directly. I usually try lynx first, then a graphical browser if the page needs it. [0]

I know you wanted something other than lynx, but you could do this with EWW (Emacs web browser or any graphical browser, provided that your proxy wget dropped the images.

[0] https://www.stallman.org/stallman-computing.html
by ocean_moist | 2025-05-18 21:46:36+00:00
I am actually the author.

You're right that mathematically, a function with constant (or no) growth is O(n)and also O(n^2), and O(anything_that_grows_faster).

My use of "O(n) startup" and "O(n^2) startup" is intended to classify the type of business based on its *inherent best-case growth potential or ceiling*.

An O(n) startup in my framework is one whose fundamental business model, market, or structure means its growth, even in its best-case scenario, is capped at roughly linear. It cannot achieve sustained super-linear growth; its upper bound is linear.

An O(n^2) startup is one whose model (e.g., strong network effects) has the potential for super-linear (which I've simplified to n^2) growth as its best-case scenario. It might be underperforming (even flat, and thus also technically O(n) in that moment), but its design allows for a fundamentally different, higher growth ceiling. The whole point is illustrate potential withholding implications or conclusions from its current growth rate, which is necessary at a companies inception.

So, yes, a flat-lining "O(n^2) type" startup would currently show growth that is O(c) (and thus also O(n)). But the point of my labels is to say that an "O(n) type" startup, by its very nature, cannot achieve the n^2 best-case that the other type can, even if both are struggling.

The labels describe the class they have, dictating their asymptotic best-case limit, not just any loose upper bound on current, possibly sub-optimal, performance. The separation I'm arguing for is based on that fundamental difference in their potential trajectory’s ceiling.

If I used Omega this would imply the actual growth rate of the startup would have to strictly be better n or n^2.
by shepherdjerred | 2025-05-18 21:47:07+00:00
For roller shades, I've had success with Ryse SmartShade [0] + their WiFi hub + Home Assistant.

Setup was not straightforward at all, and I have 10 windows, but it was worth it in the end.

You can write automations in YAML (or TypeScript with [1]), and your blinds can also be controllable with Siri or whatever voice assistant you like.

[0]: https://www.helloryse.com/products/rysesmartshade

[1]: https://docs.digital-alchemy.app/
by overgard | 2025-05-18 21:48:09+00:00
Feedback: I really don't want to give out my email for this. I'm already signed up to enough junk. I've never felt the need to query HN before so while this might be entertaining it's not enough for me to create an account.

Also on a personal note, even though I know every comment I make is public and indexed etc. etc. I find this kind of creepy. I don't like being part of an AI dataset.
by jasonthorsness | 2025-05-18 21:49:14+00:00
IMO it’s great when libraries are fully typed: it’s like documentation you experience at the moment of use. I think what the author is really dealing with at “when the library types are so difficult to understand and use, I often end up resorting to casting things as any, losing more type safety than I gained” is more the API design being unwieldy rather than the typing itself. You can fully-type a terrible API just as well as a great one and the terrible API will still be a pain to use.
by lilyball | 2025-05-18 21:50:07+00:00
If the macros only exist to get file and line information, you could do the same thing by using `#[track_caller]` functions combined with `std::panic::Location` to get that same info. For example, `stack_err!` could be replaced with

impl StackError { #[track_caller] fn new_location(msg: impl Display) -> Self { let loc = std::panic::Location::caller(); Self::new(format!("{}:{} {msg}", loc.file(), loc.line())) } }

such that you call `.map_err(StackError::new_location("data is not a list of strings"))`. A macro is nice if you need to process format strings with arguments (though someone can call `StackError::new_location(format_args!(…))` if they want), but all of your examples show static strings so it's nice to avoid the error in that case.

The use of `std::panic::Location` also means instead of baking that into a format string you could also just have that be an extra field on the error, which would let you expose accessors for it, and you can then print them in your Debug/Display impls.

Speaking of, the Display impl really should not include its source. Standard handling for errors expects that an error prints just itself with Display because it's very common to recurse through sources and print those, so if Display prints the source too then you're duplicating output. Go ahead and print it on Debug though, that's nice for errors returned from `main()`.
by areeh | 2025-05-18 21:50:09+00:00
Oh wow, I had to try this and as expected it's amazing. Trying to design interesting algorithms that also look good is a lot of fun, and the result is surprisingly readable.

It takes some getting used to symbols that can be confused when upside down such as b or brackets (like the symbols for begin/end)

Like others I am curious about doing it for a lisp or Forth
by const_cast | 2025-05-18 21:51:13+00:00
> I don't see how that is just or fair

It's not and it doesn't need to be. If I make 10 million dollars a year, I don't need social security period. I'm going to be fine no matter what. I personally would not mind, at all, giving up a portion of my income to other people who are not so fortunate.

It's like giving the fat king and the starving orphan both one slice of bread. Sure, it's fair, but does the king need the bread? Who cares about fairness when the playing field is already so skewed in favor one side?

Also: the reality here is that rich people pay WAY less taxes proportionally compared to the poor. If we want to talk fairness, we have to start there. Poor people are spending 100% of their income on consumption, it's going straight into the economy. It's getting income taxed and it's getting sales taxed.

If rich people had to pay anywhere close to the amount of taxes the working class or the poor do, they would turn to dust. I'm sure they're fine in their already extremely favorable position. In short - give me a fucking break.
by flakiness | 2025-05-18 21:51:22+00:00
Looks good,

I've been disappointed by the fact that Chrome doesn't have this. I don't want to give full access to my browsing to a random extension (not an offense to this specific one, but general security hygiene - there are so many scammy extensions out there). Chrome (or browser of your choice) already has that trust, good or bad. Please use the trust in a good way. It's a table stake at this point.
by trwhite | 2025-05-18 21:52:22+00:00
It's a time/cost tradeoff and for me personally $4 has been fine for out-of-the-box syncing between clients for the last ~2 years of using just the one vault. It's now $8 for 10 vaults (I only recently added my second), which is still a relatively insignificant amount considering I spend more than that on toilet paper.
by ChiefNotAClue | 2025-05-18 21:54:05+00:00
It certainly feels like enforcement is down. I've noticed a lot more entitled behavior, like drivers blowing through red lights or cutting up on the shoulders.

Another thing I've noticed is the amount of license plate readers that have appeared. Seems like every town, large mall, private community, heck even parks have them. See this map: https://deflock.me/

So laws are not being enforced, but you can be sure you're tracked everywhere you go.
by zhacker | 2025-05-18 21:54:19+00:00
yeah. Spot on. For the app, I don't take into account the density, but racket head is taken into account. Prominent shapes are oval and isometric, so I have separate co-efficients for those, which were learned using regression. One challenge that I haven't figured out yet is when 2 different types of strings are used. It seems, some advanced players use different strings at different tensions for the horizontal and vertical strings. Like 32x28lbs or other similar configurations.
by BoorishBears | 2025-05-18 21:55:27+00:00
Well I guess some comments need to be considered in totality, rather contextomies that enforce whatever point you're trying to make :)

I spelled out the problem pretty clearly.

> I used to try and form these kinds of rules and heuristics for code constructs, but eventually accepted they're at the wrong level of abstraction to be worth keeping around once you write enough code.

It's the wrong level of abstraction to form (useful) principles at, and the example chosen is just a symptom of that.

I'm not sure why we're acting like I said the core problem with this article is that it uses simple examples.