MurphyA/hacker-news huggingface dataset:
by throw-qqqqq | 2025-09-08 05:32:37+00:00
> In Europe, I remember the same frequency, 27 MHz being used for early RC cars. Not sure if EU truck drivers used this too

I know they used to at least. 20 years ago I worked vacations as a courier. My boss installed a 27MHz radio in my truck, because the local truckers would warn about police raids etc. on it.
by bee_rider | 2025-09-08 05:35:02+00:00
> Back when he was working on Ada, they didn't store text sources at all — they used an IR called DIANA. Everyone had their own pretty-printing settings for viewing it however they wanted.

I’m still confused because the specifically call the IR DIANA, and they talk about viewing the IR. It isn’t clear to me if the IR is more like a bytecode or something, or more like just the original source code with a little processing done to it. They also have a quote,

> Grady Booch summarizes it well: R1000 was effectively a DIANA machine. We didn't store source code: source code was simply a pretty-printing of the DIANA tree.

So maybe the other visualizations they could do by transforming the IR were so nice that nobody even cared to look at the original ADA that they’d written to generate it?
by setopt | 2025-09-08 05:35:14+00:00
It’s tricky to find an objective optimum. Personally I’ve been happy with up to 100 chars per line (aim for 80 but some lines are just more readable without wrapping).

But someone will always have to either scroll horizontally or wrap the text. I’m speaking as someone who often views code on my phone, with a ~40 characters wide screen.

In typography, it’s well accepted that an average of ~66 chars per line increases readability of bulk text, with the theory being that short lines require you to mentally «jump» to the beginning of the next line frequently which interrupts flow, but long lines make it harder to mentally keep track of where you are in each line. There is however a difference between newspapers and books, since shorter ~40-char columns allows rapid skimming by moving your eyes down a column instead of zigzagging through the text.

But I don’t think these numbers translate directly to code, which is usually written with most lines indented (on the left) and most lines shorter than the maximum (few statements are so long). Depending on language, I could easily imagine a line length of 100 leading to an average of ~66 chars per line.
by ggm | 2025-09-08 05:35:27+00:00
Jokes about "what have the romans done for us" aside, using stamps to make identical lead pipe segments in the production facility feels like an "almost there" for any kind of highly reproduced writing outcome. But, so do intaglio rings used to mark letters as "authentic"

I think stamps for SPQR type "property of the state" were common. But they are an ideogram, a marker. No different to the writing on a coin in that regard, for illiterate people. You just recognise it as a whole, not as a meta-notation for more complex ideas.

The building blocks aren't enough. You need the next step which is the motivation to innovate. At the other end of the trade line into Asia, they were working up to printing in the mid-first millenium, which overlaps with the END of the roman empire. Movable type came later.

Before movable type, I believe "chap books" were being printed from woodblocks for ordinary people (at least ordinary protestants!) which probably encouraged widespread literacy, something which had dropped out of society when late roman empire converted over to serf economies, and didn't need ordinary people to even think about being literate. You weren't moving an army off the local patch nearly as much, or coordinating reports in one mother tongue back to head office by courier.

(this is probably a classic "bad history" take which deserves a "well... AKchewally..." from somebody like prof. Mary Beard.)
by yrand | 2025-09-08 05:39:06+00:00
The problem with making invalid states representable is that the app logic must be able to handle it, everywhere. Which means you have to always take it into account when reasoning about your app and implementing it, otherwise it will blow up in your face when the invalid state actually occurs. Which means your state machine is inherently larger and harder to reason about.

To illustrate what I mean, take the null pointer. It's essentially an Optional<T> and in a lot of languages it's involuntary, meaning any value is implicitly optional. What happens when something returns null, but in some place in your logic you don't take it into account? Null pointer dereference.
by fmbb | 2025-09-08 05:40:24+00:00
> the theory being that short lines require you to mentally «jump» to the beginning of the next line frequently which interrupts flow, but long lines make it harder to mentally keep track of where you are in each line.

In my experience, with programming you rarely have lines of 140 printable characters. A lot of it is indentation. So it’s probably rarely a problem to find your way back on the next line.
by belZaah | 2025-09-08 05:41:06+00:00
I was architecture team lead at Skype 2005-2011 and persistent queues were the only ones around. Basically, because they knew how to scale databases, our DBA team (Hannu Krosing comes to mind) built queues into and on top of Postgres. It happened not just at Skype, too: eBay guys (Dan Prichett in particular) had built a very cool Oracle-based queue solution. Scaling persistent queues seems to be something that needs to be reinvented periodically. Maybe it’s too nuanced of a problem?
by brabel | 2025-09-08 05:42:39+00:00
You really rely on grep on CI? How fragile is that ?! This is a good argument for storing non-text. Grepping code is laughably unreliable. The only way to write things like that reliably is by actually parsing the code and working in its AST. Working in text is like writing code in a completely untyped language. It can be done, but it’s beyond stupid for anything where accuracy matters.
by bruce511 | 2025-09-08 05:45:14+00:00
There is the small detail of heating the regolith to 1400c. It's not very clear where that energy comes from (at least not at scale).

Burning fuels seems to be out. So I guess nuclear or solar?

Mars solar is weaker than earth, but I guess let's of panels plus lots of batteries could work. Sorta. Not sure it produces "tons" of material very quickly.

Nuclear is the other option. But would rely on fuel from earth. Not to mention that building a reactor big enough to sustain a colony, plus industry, would be challenging. And of course landing fresh uranium on Mars would be risky. (It's heavy, and any accident would render a chunk of Mars radioactive for quite some time.)

Oh, and the reactor would need to be air-cooled not water-cooled.

But, I guess, yay regolith?
by seanmcdirmid | 2025-09-08 05:46:15+00:00
Around 90% of foreigner contractors that come to the USA to set up a factory or do maintenance on a factory are here under weird visa arrangements that the ICE would be able to poke holes in regardless. The right visa doesn’t exist, or impossible to obtain, so he Germans/swiss/japanese/koreans/taiwanese/and Chinese come here on visa waiver or simple B1 visas, or even tourist visas, to get the job the they need done out the way quickly (usually a few days or a week of work). The American visa system for short term work is simply messed up, and it’s much easier to get a visa to do the same thing in China than in the USA (surprise, guess where people decided to set up their factories?). America was really just wink/nudge before (we want you to setup a factory here! But no, we can’t really make the visa situation work out…you know what to do…), but now ICE needs to make their quotas and this is just an easy target for them.

The USA is just a bad place for foreign companies to setup factories: you need an army of immigration lawyers to do it, and be willing spending a lot of time waiting to get the “proper visas” for key personnel. South Korea’s interest in getting those engineers back isn’t just purely empathy based, there are probably only a handful of engineers in Korea that can do what they do (good luck getting that factory going before your term is out, Mr. Trump).
by chowells | 2025-09-08 05:46:43+00:00
I have to disagree with the premise. Formatting code is a critical communication channel. Well-formatted code should tell you:

1. The developer has enough experience to understand that formatting matters.

2. The developer has enough discipline to stick with their chosen formatting rules.

3. The developer has the taste necessary to choose good formatting rules.

4. The developer has the judgement necessary to identify when other concerns justify one-off violations of the rules.

These are really important attributes for a developer to have. They affect every aspect of the code, not just formatting. Formatting is just a very quick proxy to measure those by.

Unfortunately, things like autoformatting and linter rules are destroying the signal. Goodheart's law strikes again.
by elevation | 2025-09-08 05:47:44+00:00
Formatters eliminating long lines is a pet peeve of mine.

About once every other project, some portion of the source benefits from source code being arranged in a tabular format. Long lines which are juxtaposed help make dissimilar values stand out. The following table is not unlike code I have written:

setup_spi(&adc, mode=SPI_01, rate=15, cs_control=CS_MUXED, cs=0x01); setup_spi(&eeprom, mode=SPI_10, rate=13, cs_control=CS_MUXED, cs=0x02); setup_spi(&mram, mode=SPI_10, rate=50, cs_control=CS_DIRECT, cs=0x08);

Even if we add 4-5 more operational parameters, I find this arrangement much more readable than the short-line equivalent:

setup_spi(&adc, mode=SPI_01, rate=15, cs_control=CS_MUXED, cs=0x01); setup_spi(&eeprom, mode=SPI_10, rate=13, cs_control=CS_MUXED, cs=0x02); setup_spi(&mram, mode=SPI_10, rate=50, cs_control=CS_DIRECT, cs=0x08);

Or worse, the formatter may keep the long lines but normalize the spaces, ruining the tabular alignment:

setup_spi(&adc, mode=SPI_01, rate=15, cs_control=CS_MUXED, cs=0x01); setup_spi(&som_eeprom, mode=SPI_10, rate=13, cs_control=CS_MUXED, cs=0x02); setup_spi(&mram, mode=SPI_10, rate=50, cs_control=CS_DIRECT, cs=0x08);

Sometimes a neat, human-maintained block of 200 character lines brings order to chaos, even if you have to scroll a little.
by zmgsabst | 2025-09-08 05:47:45+00:00
I’ve seen more errors from “pubilshed” strings than difficulties updating an enum.

The rest of it is arguing about what constitutes valid states, eg, commit messages when the user deletes or wrong-schema datagrams being partially utilized. Here’s the rub: if you don’t allow invalid states, you’re forced to actually have that discussion (“actually, messages don’t strictly require a user”; “only these fields are required, others are a maybe”) and those are then encoded in your software rules. They’re not things that happen informally, in undocumented ways.

Further, when you do allow invalid states, you have a typo disappear 1% of your messages into the “pubilshed” category.
by defrost | 2025-09-08 05:48:34+00:00
Archived a week ago: https://archive.md/hIVCf

Begins:

The pitch by Alpha School is as innovative as it is sensational: For $65,000 a year, students study for just two hours a day using adaptive apps and personalized lesson plans and spend their afternoons on life skills such as learning to ride a bike or financial literacy. Instead of teachers, the students have “guides.” The AI-driven school, which is coming to Northern Virginia this fall and plans to enroll up to 25 students in grades K-3 at a campus near Dulles International Airport, sits at the intersection of two growing spaces in education: alternative schooling and an explosion of online learning platforms used in nearly every corner of the education sphere, from public school classrooms to at-home supplement work.
by frizlab | 2025-09-08 05:49:31+00:00
I can tell you the language is a huge part of it. I used to code in ObjC and now I’m using Swift; refactoring is easy in Swift and was a pain in ObjC.

I know I can trust my Swift code. Usually when it compiles it works because I try to, and often can, make invalid states unrepresentable. My ObjC code was always full of holes because doing so was not so easy (or not possible at all)…
by ngruhn | 2025-09-08 05:49:34+00:00
Why is this flagged? I completely agree.

99% the linter is not enforcing correctness in my experience. It's just enforcing a bunch of subjective aesthetic constraints. Which import order, max number of empty lines between statement, what type of string literal to use, no trailing white space, etc. A non trivial part of my day is spent dealing with this giant catalog of dinner etiquette. Not all of it is auto fixable. Also, there are plenty of situations where everyone would agree that violating the rule is necessary (eg. "no use before define" but you need mutual recursion). Also sometimes rules are circularly in conflict (eg you have to change a line but there is no way to do it without violating the max-line-length rule).
by MyOutfitIsVague | 2025-09-08 05:50:01+00:00
The way I envision this working is with something like git filters. Checking out from version control converts it all into text in your preferred formatting, which you then work with as expected. Staging it converts it into the stored representation. In git, this would be done with smudge and clean filters, like how git LFS works. You'd also have viewers for forges and the like that are built to interpret all the stored representations as needed.

You still work with text, the text just isn't the canonical stored representation. You get diffs to resolve only when structure is changed.

You get most of the same benefit with a pre-commit linter hook, though.
by adrian_b | 2025-09-08 05:50:06+00:00
Had you been looking for "in-band ECC", the cheap ODROID H4 PLUS ($150) or the cheaper ODROID H4 ($110) would have been fine, or for something more expensive some of the variants of Asus NUC 13 Rugged support in-band ECC.

For out-of-band ECC, e.g. with standard ECC SODIMMs, all the embedded SBCs that I have seen used only CPUs that are very obsolete nowadays, i.e. ancient versions of Intel Xeon or old AMD industrial Ryzen CPUs (AMD's series of industrial Ryzen CPUs are typically at least one or two generations behind their laptop/desktop CPUs).

Moreover all such industrial SBCs with ECC SODIMMs were rather large, i.e. either in the 3.5" form factor or in the NanoITX form factor (120 mm x 120 mm), and it might have been necessary to replace their original coolers with bigger heatsinks for fanless operation.

In-band ECC causes a significant decrease of the performance, but for most applications of such mini-PCs the performance is completely acceptable.
by jabl | 2025-09-08 05:50:28+00:00
Blast from the past! When I was a kid we had such a floppy tape device connected to a 386 or 486 computer my parents had. I think it was a Colorado Jumbo 250. I think the actual capacity was 125MB, but the drive or the backup software had some built-in compression, hence why it was marketed as a 250MB drive. Never tried to use it with the Linux ftape driver, though.

It wouldn't surprise me if the drive and the tapes are still somewhere in my parents storage. Could be a fun weekend project to try it out, though I'm not sure I have any computer with a floppy interface anymore. And I don't think there's anything particularly interesting on those tapes either.

In any case, cool project! Kudos to the author!
Ask HN: Deploying WireGuard on VPS to bypass censorship?
by shivajikobardan | 2025-09-08 05:50:36+00:00
Since government just banned facebook, youtube, instagram, reddit, discord among many others, I need a VPN for me and my family. The budget is not fixed as of yet but I would prefer it remain under 10 bucks.

I just heard that vpn server can be misused and since they are shared among many users. And that cause your applications to get flagged and be unusable.

That has led me to wanting a private virtual server and hosting a vpn server over it.

What do you think? Is this recommended?
by pluto_modadic | 2025-09-08 05:51:19+00:00
my initial gut take from the title was "OH MY GOODNESS don't let {x} toxic developer who writes TERRIBLE code see this as justification". There are enough toxic bros who either 1. think this is unnecessary or 2. think it is perfectly solved.

re: intermediate representation and projectional editing: yes, editors are now getting better at helping you refactor code (rename function in language XYZ is possible in language servers for IDEs, /no AI required, it works better when a human coded AST tool does it/)

projectional editors aren't around /because the more complex parts of it are harder/ - BUT - I could definitely see more intelligent refactor tooltips written by humans.

For example: in Rust, if I've been passing a pointer vs borrowing (or whatever), pattern A for most of my code, then pattern B and it complains, it would be useful to have a tooltip that goes "do you want to refactor all the other references/parameters to pattern B" instead of Rust's default "this function isn't using pattern A" borrow checker error.
by brabel | 2025-09-08 05:51:39+00:00
I imagine it’s like storing JVM bytecode, ie class files instead of Java files. So when you open it up the editor decompiles it , like IntelliJ does if you try to open a class file, but then it also applies your own style, like from .editorconfig, on the code it shows. It’s a really good idea and I can’t believe people here are complaining that it’s bad because they can’t use grep! But that’s a good thing!! Who the hell is grepping code as if code had no structure and that’s the best you can do? So you also grep JSON instead of using jq? Just don’t!
by jnaina | 2025-09-08 05:52:09+00:00
I first met Sim Wong Hoo as a teenager while working at Funan Center, just before he launched the Cubic 99 PC (a failed product, which later inspired the Sound Blaster).

A genuinely down-to-earth person. An engineer’s engineer, somewhat like the Woz. If he had only found his "Steve Jobs", someone who had the vision and marketing savvy, Creative would be have a been major tech player.
by hakfoo | 2025-09-08 05:52:47+00:00
It feels like speakers have gone up in price.

This is probably because their BOM is still highly dependent on physical enclosures, cones, and magnets, which can't be Moore's Law'd-away.

I can find some basic setups in the $300 range, but they're usually bookshelf or slim-floorstanding speakers where you're expected to add a subwoofer to fill out the bottom end, not a true full-range.
by midnightclubbed | 2025-09-08 05:53:41+00:00
I think your parent made a perfectly good point. Going into the store is a whole lot less pleasant than staying in my car and waiting a couple extra minutes in an environment I enjoy.

If I’m in a hurry then yes maybe I can shave a few minutes by going in, but if I’m getting fast food I probably don’t feel like interacting with people, and listening to crappy piped music while standing in an artificially lit corporate chain restaurant waiting for my order.
by koiueo | 2025-09-08 05:53:45+00:00
> discourage theft

Thieves once broke into my car. They stole everything, but then have thrown away things they don't need: which was everything except iPad Pro M1. They have even thrown away an e-ink device which was as expensive.

Many signs suggest that the thieves were in an organized group regularly operating in the area, and I'm certain they knew what they were doing.

My iPad has never appeared online after the theft according to my iCloud.

This was in 2024.

I'm confident this iPad didn't just become a paperweight for the organized group of thieves. But it would become a paperweight for me if, say, the infrared camera went off due to a water damage and I wasn't willing to pay Apple a hefty price for the motherboard replacement.
by lock1 | 2025-09-08 05:54:17+00:00
+1

In cases like electronics & protocols, it's very often a good idea to add an extra "reserved & unused" section for compatibility reasons.

These representations need not be 1:1 with the domain model. Different versions of the model might reject previously accepted representation in case of breaking changes. It's up to the dev to decide on which conflict reconciliation strategy they should take (fallback values, reject, compute value, etc).

Working with a precise domain model (as in, no representable invalid states) is way more pleasant than stringly-typed/primitives mess. We can just focus on domain logic without continuously second-guessing whether a string contains valid user.role values or it contains "cat".
by ankitsha47 | 2025-09-08 05:54:20+00:00
Location: Bengaluru,India

Remote: No

Willing to relocate: Yes

Technologies: Vue.js,TypeScript,Webpack,Responsive Web Design,Node.js,ReactJS,JavaScript,HTML Résumé/CV: https://drive.google.com/file/d/1VzjsG-gJjJtvqZgZRS3c5BSfPv2...

Email: ankit.sharma.it2017@gmail.com

LinkedIn: https://www.linkedin.com/in/ankit-sharma-b16a7183/

Github: https://github.com/ankitsharmait17
by masklinn | 2025-09-08 05:56:22+00:00
moved-from objects are not in an empty state but in an unspecified state, they are only required to be destructible, every other operation can be disallowed. That is not a useful state for default construction. Thus being movable does not imply defaulting is any sort of good idea.

The other way around makes more sense, but even then it is not systematic, if default construction is costly (allocation, syscall, …) then you don’t want to do that for a moved-from object which will just be destroyed, which is the fate of most.
by anovikov | 2025-09-08 05:57:40+00:00
That's natural, upper class makes money from assets, not from work - it's hard and also probably morally impossible to tax these (do it and they sell and buy assets abroad where assets aren't taxed, and just throw country into shit, leaving generations without pensions and without profits from their consumption). Only something that has no way to run away, can be taxed. Labor is that thing: for all the bad things about America, you have to build walls to keep people out not keep them in.
by skissane | 2025-09-08 05:58:47+00:00
AFAIK it has always had typed values. Don’t confuse column types (which constrain a column to containing only values of a specified type) with value types (which enable it to treat the string “12” and the integer 12 and the floating point 12.0 as three distinct values)

Tcl has value types. Tcl 7.x and earlier only had one data type, the string-so adding two integers required two string-to-int conversions followed by an int-to-string conversion. In 1997, Tcl 8.x was released, which internally has distinct values types (int, string, etc), although it retains the outward appearance of “everything-is-a-string” for backward compatibility. So SQLite’s Tcl heritage included distinguishing different types of values, as is done in post-1997 Tcl.
by wordofx | 2025-09-08 05:58:56+00:00
I disagree with their CoC on AI. There are so many projects which are important and don’t let you contribute or make the barrier to entry so hard, and so you do best effort to raise a detailed bug description for it to sit there for 14 years or them to tell you to get fucked. So anyone who complains about AI isn’t worth the time and day and I support not getting paid as much if at all.
by aargh_aargh | 2025-09-08 06:00:32+00:00
You don't? I do.

A few days ago I lost some data including recent code changes. Today I'm trying to recreate the same code changes - i.e. work I've just recently worked through - and for the life of me I can't get it to work the same way again. Even though "just" that is what I set out to do in the first place - no improvements, just to do the same thing over again.