MurphyA/hacker-news huggingface dataset:
by tkejser | 2026-02-16 11:25:49+00:00
There are reasons for not USING.

First, you need to be aware of the implicit disambiguration. When you join with USING, you are introducing a hidden column that represents both sides. This is typically what you want - but it can bite you.

Consider this PostgreSQL example:

```
CREATE TABLE foo (x INT);
INSERT INTO foo VALUeS (1);

CREATE TABLE bar (x FLOAT);
INSERT INTO bar VALUES (1);

SELECT pg_typeof(x) FROM foo JOIN bar USING (x);
```

The type of x is is double, - because x was implicitly upcast as we can see with EXPLAIN:

```
Merge Join (cost=338.29..931.54 rows=28815 width=4)
Merge Cond: (bar.x = ((foo.x)::double precision))
-> Sort (cost=158.51..164.16 rows=2260 width=8)
```

Arguably, you should never be joining on keys of different types. It just bad design. But you don't always get that choice if someone else made the data model for you.

It also means that this actually works:

```
CREATE TABLE foo (x INT);
INSERT INTO foo VALUeS (1);

CREATE TABLE bar (x INT);
INSERT INTO bar VALUES (1);

CREATE TABLE baz (x INT);
INSERT INTO baz VALUES (1);

SELECT *
FROM foo
JOIN bar USING (x)
JOIN baz USING (x);
```

Which might not be what you expected :-)

If you are both the data modeller and the query writer - I have not been able to come up with a reason for not USING.
by sho_hn | 2026-02-16 11:25:54+00:00
Doesn't really matter. As always it's integration that makes a product.

Talking to bots on Telegram isn't new.

Running agentic loops isn't new.

Giving AI credentials and having it interface with APIs isn't new.

Triggering AI jobs from external event queues isn't new.

Parking state between AI jobs in temp files isn't new.

Putting all together in one product and marketing it to the right audience? New.
by cookiengineer | 2026-02-16 11:26:01+00:00
I think that happens when as a German you're used to using the Plusquamperfekt which is a somewhat unique tense that's allowed to be used in all past tenses.

It allows you to not having to define the point in time and neither the frame of the timespan's points in time.

Some languages allow to use that type of tense and it's somewhat a language gap I suppose. I have no idea what other languages or proto languages allow that tense though, but I've seen some Slavic and maybe Finnish(?) natives use that tense in English, too.

Maybe someone more elaborate in these matters has better examples?

[1] https://de.wikipedia.org/wiki/Plusquamperfekt
by Kim_Bruning | 2026-02-16 11:26:59+00:00
I guess the AI Koans are still relevant:

A novice was trying to fix a broken Lisp machine by turning the power off and on.

Knight, seeing what the student was doing, spoke sternly: “You cannot fix a machine by just power-cycling it with no understanding of what is going wrong.”

Knight turned the machine off and on.

The machine worked.

http://www.catb.org/jargon/html/koans.html
by vdupras | 2026-02-16 11:28:55+00:00
If we want to make that distinction, then we should also acknowledge that "vibecoding" is a misnomer and should be called "vibeprogramming", because it delegates the whole act of programming to the LLM, leaving you with fleshing out the specs (which is not programming).

If that is so, then your whole comment is inconsistent and akin to "I do all my poetry with LLMs now and I don't see what people have against it: it's often better than me at punctuation!"
by kppjeuring | 2026-02-16 11:29:03+00:00
Hi HN,

A couple of weeks ago I shared DStack, a small Bash tool that lets you manage named Docker Compose projects from anywhere in the terminal.

The idea is simple:

Instead of constantly cd-ing into different project directories just to run docker compose up or down, you register stacks once and run them by name.

After sharing it on Reddit and getting feedback, I focused on refining it rather than adding complexity.

Recent improvements include:

- Safer defaults

- Clearer command structure

- Cross-platform CI (Linux, macOS, Windows)

- Strict Bash mode + portability improvements

- Stability fixes around help detection

The goal is intentionally narrow:
DStack is not a replacement for tools like Portainer or Komodo.

It’s just a thin workflow layer on top of docker compose.

I’m trying to keep it:

- Lightweight

- SSH/homelab friendly

- Simple enough to inspect in a few minutes

Repo:
https://github.com/KyanJeuring/dstack

Curious to hear thoughts, especially from people who manage multiple Compose stacks in terminal-only environments.
by netdevphoenix | 2026-02-16 11:29:27+00:00
> Now I first discuss with an AI Agent or ChatGPT to write a thorough spec before handing it off to an agent to code it. I don’t read every line. Instead, I thoroughly test the outcome.

This is likely the future.

That being said: "I used to spend most of my time writing code, fixing syntax, thinking through how to structure the code, looking up documentation on how to use a library.".

If you are spending a lot of time fixing syntax, have you looked into linters? If you are spending too much time thinking about how to structure the code, how about spending some days coming up with some general conventions or simply use existing ones.

If you are getting so much productivity from LLMs, it is worth checking if you were simply unproductive relative to your average dev in the first place. If that's the case, you might want to think, what is going to happen to your productivity gains when everyone else jumps on the LLM train. LLMs might be covering for your unproductivity at the code level, but you might still be dropping the ball in non-code areas. That's the higher level pattern I would be thinking about.
by Imustaskforhelp | 2026-02-16 11:30:02+00:00
It's monday today so I approach we just have to wait for 24 hours for tomorrow.

I do feel like AI has made us distrust each other at such a massive scale seen nothing like before. Previously there could still be bot-like comments but they were still written by human or so. Not anymore now and things are getting more sophisticated. I 100% believe that its possible to not have --. You are absolutely right and some other things that I have associated with Ai writing so at this point, AI might write such a way that I can't filter out if its written by AI or not.

It's a real psychosis inducing thought imo all while AI is inducing job insecurity from top to bottom.
by bmn__ | 2026-02-16 11:30:23+00:00
Looking for an expert who knows both libintl/Gettext and MessageFormat.

What is the equivalent of xgettext.pl, the file extension for the main catalog file `.po`, the __ function?

How does gender work (small example)? How does layering pt_BR on pt_PT work?

What is a compelling reason to switch?
by chaboud | 2026-02-16 11:30:26+00:00
Cool. Good for him. I've been building agentic and observational systems and have been working to make them safe and layered in defense. And, well, I probably should have just said "fuck it" and put a disclaimer sticker on the front to let it fly.

Yeah, these systems are going to get absolutely rocked by exploits. The scale of damage is going to be comical, and, well, that's where we are right now.

Go get 'em, tiger. It's a brave new world. But, as with my 10 year old, I need to make sure the credit cards aren't readily available. He'd just buy $1k of robux. Who knows what sort of havoc uncorked agentic systems could bring?

One of my systems accidentally observed some AWS keys last night. Yeah. I rotated them, just in case.
by nicoburns | 2026-02-16 11:30:42+00:00
My experience of working with Angular (admittedly several years ago when Angular versions 2-4 were current) was that it was pretty close to the React model (which was a huge improvement over the old angular.js), but also slightly worse than it in pretty much every area.

Most of the problems were the framework being too opinionated and not getting out of your way, whereas it is generally easy to "break out" of the abstraction when needed with React.
by jp1016 | 2026-02-16 11:30:47+00:00
One practical thing I appreciated about MessageFormat is how it eliminates a bunch of conditional UI logic.

I used to write switch/if blocks for:

• 0 rows → “No results”
• 1 row → “1 result”
• n rows → “{n} results”

Which seems trivial in English, but gets messy once you support languages with multiple plural categories.

I wasn’t really aware of how nuanced plural rules are until I dug into ICU. The syntax looked intimidating at first, but it actually removes a lot of branching from application code.

I’ve been using an online ICU message editor (https://intlpull.com/tools/icu-message-editor) to experiment with plural/select cases and different locales helped me understand edge cases much faster than reading the spec alone.
by silvestrov | 2026-02-16 11:31:05+00:00
English has just singular and plural: one car, two cars, three cars (and zero cars).

Some languages have more variations. E.g. Czech, Slovene and Russian has 1, 2-4 and 5 as different cases.

Personally I think the syntax is too brittle. It looks too much like TeX code and it has the lisp like deal with lines ending with too many } braces.

I would separate it into two cases: simple strings with just simple interpolation and then a more fuller markup language, more like a simplified xml.

There are more example code at https://github.com/unicode-org/message-format-wg/blob/main/d...
by wiseowise | 2026-02-16 11:31:22+00:00
> This weaker neighbor is aided and funded by a block of countries with a total population of 1b, 6 times that of Russia.

'Aided and funded' literally a fractional percent of their economies over five years.

> The same block is doing all it can to crash the Russian economy

I severely doubt about "all it can" part.

> Nevertheless, this union of a weak neighbor + 1b block is steadily loosing land.

Less than percent a year since 2023. This is a shockingly bad performance for a country to that considered themselves rival to China/Europe/US.

As to "+ 1b block" it's like that joke goes: "Russia v NATO war. Russian status: 1 mil casualties. NATO status: hasn't arrived yet."
by Mumps | 2026-02-16 11:31:38+00:00
Thanks for sharing!

Like OP, I've been similarly struggling to get as much value from CC (grok et c) as "everyone" else seems to be.

I'm quite curious about the workflow around the spec you link. To me, it looks like quite an extensive amount of work/writing. Comparable or greater than the coding work, by amount, even. Basically trading writing code files for writing .md files. 150 chat sessions is also nothing to sneeze at.

Would you say that the spec work was significantly faster (pure time) than coding up the project would have been? Or perhaps a less taxing cognitive input?
by sspehr | 2026-02-16 11:31:47+00:00
Cool site, I think the fact that bots WILL try to get access to your server as soon as it's publicly available should be mentioned more in basic tutorials etc... I remember panicing when I had set up my first webserver as a teenager and was checking the nginx logs out of curiosity, I thought this was a real threat to the security of the server and almost shut it down lol.
by Chyzwar | 2026-02-16 11:32:16+00:00
As someone that spend many days on performance I will tell you that bundle size have minimal impact on performance. In most cases backend dominate any performance discussion.

Apps are slow because caching is missing, naive pagination, poorly written API calls waterfall, missing db indexes, bad data model, database choice or slow serverless environment. Extra 1MB of bundle add maybe 100ms to one time initial load of app that can mitigated trivially with code splitting.
by exitb | 2026-02-16 11:33:10+00:00
I think it makes sense to try to get down to 34 keys. The two keys that require being pressed with a curled thumb sure don't feel too ergonomic. I can recommend Callum-style mods[1] to get there, which are a sane alternative to home row mods.

[1] https://github.com/callum-oakley/qmk_firmware/tree/master/us...
by ghyfr | 2026-02-16 11:33:40+00:00
Hi HN, I’m Fred.

I built YourFirstShip because I was frustrated with the current state of AI code generators.

Most tools are impressive but often lock you into their ecosystem or charge credits just to fix the bugs they introduced. I call this the "AI Bug Tax."

I wanted a workflow where:

I own the code: The output is standard Python (FastAPI) & React, structured like a human project.

No Black Box: I can see the agents working in the "Mission Control" and intervene.

Exportable: I can take the repo and deploy it on my own VPS/AWS without depending on the platform forever.

It’s currently in early access. I’d love your feedback on the generated code structure and the approach to "no-lock-in" AI development.

Cheers!
by m000 | 2026-02-16 11:34:29+00:00
> To me, if you look closely at (social media) influencers, they are nothing more than people who were popular in high school and managed to extend it for a few years with the use of social media.

That's a very superficial similarity. It's one thing for a kid wishing to be popular in their extended social circle, and a very different thing a young adult being convinced that they can "grind" their way to influencer fame and money.

The young adult may never have heard of or considered the extreme survivorship bias in the stories of successful influencers.
by aurareturn | 2026-02-16 11:34:38+00:00
I was a good dev but I did not love the code itself. I loved the outcome. Other devs would have done better on leetcode and they would have produced better code syntax than me.

I’ve always been more of a product/business person who saw code as a way to get to the end goal.

That elite coder who hates talking to business people and who cares more about the code than the business? Not me. I’m the opposite.

Hence, LLMs have been far better for me in terms of productivity.
by sedan_baklazhan | 2026-02-16 11:35:53+00:00
1) Yes, extensively aided and funded, no matter how you try to avoid this fact
2) Russia has more sanctions applied that any country ever did.
3) Still it is Russia gaining land and NATO ally, which runs on NATO money and NATO weapons, retreating.
4) NATO has arrived indeed.
NATO ally (or protectorate) has huge and obvious manpower loss.
by strogonoff | 2026-02-16 11:36:24+00:00
Does anyone know the status of MessageFormat 2.0? I am aware of the effort since pre-COVID times. I recall that some of the developers behind Mozilla Fluent have been among the people working on MF 2.0, and it’d be great to know whether Fluent and ICU MF are going to be interoperable in foreseeable future.
by BoppreH | 2026-02-16 11:36:28+00:00
Oh, the language aspect gets a lot worse than that. They explicitly have a non-goal of "all grammatical features of all languages", but the "common" cases are hard enough. From https://github.com/unicode-org/message-format-wg/blob/main/s... :

.local $hasCase = {$userName :ns:hasCase}
.match $hasCase
vocative {{Hello, {$userName :ns:person case=vocative}!}}
accusative {{Please welcome {$userName :ns:person case=accusative}!}}
* {{Hello!}}

But if anyone can find a good compromise, it's the Unicode team.
by netdevphoenix | 2026-02-16 11:37:06+00:00
> Google would have to take the lead and implement this in chrome then enough developers would have to build sites using it and force safari and firefox to comply. It just isn't feasible.

This is not something you really want to happen for the health of the web tech ecosystem. I am surprised to see actual developers nonchalantly suggesting this. A type system for the web is not worth an IE 2.0
by frankenstain | 2026-02-16 11:37:17+00:00
> The most devastating fact of life is that physical (and mental) performance drops off at around mid 30s

Different faculties peak at different times. While MIT/Harvard research shows that raw processing speed peaks early, it highlights that social intelligence and crystallized knowledge don't peak until our 40s or 50s [I]. Specifically, the Whitehall II study identifies age 45 as the inflection point for initial reasoning decline [II], while research from Stony Brook found that changes in brain network stability—the metabolic cost of cognitive maintenance—typically don't begin until age 44 [III].

[I] https://journals.sagepub.com/doi/abs/10.1177/095679761456733...

[II] https://www.bmj.com/content/344/bmj.d7622

[III] https://www.pnas.org/doi/10.1073/pnas.2416433122
by Saloc | 2026-02-16 11:38:30+00:00
In some fields its quite common to implement state machines in an imperative style with if-blocks and flags. That should be possible with Copapy by having decorated functions where the decorator parses the AST and replaces if-blocks with cp.iif() to end up with branchless code.

However, from my experience this programming style is ok for simple state machines, but it’s definitely not great, and if things get more complex, it’s getting really hard to keep it comprehensible and correct.

I think the main challenge is the design of an API that fits state machines. Concerning the WCET, branchless code should be on average not worse than branched code.
by Sesse__ | 2026-02-16 11:38:35+00:00
> My counter argument is that games on lichess against stockfish don't imply a human beat stockfish. It could just be that stockfish (or other bots) can sometimes beat stockfish. And some humans surely use bots to play on their behalf in order to cheat in online games.

Also, Lichess' Stockfish runs in the browser (with all the slowdown that entails), plus is limited to one second of thinking time even on the highest level. It also has no tablebases and AFAIK no opening book. Even if you _can_ consistently beat Lichess Stockfish level 8, there's still a very long way from there to saying you can beat Stockfish at its maximum strength, which is generally what people would assume the best humans would be up against in such a duel.

People generally don't play unencumbered engines anymore because the result isn't interesting.
by tkejser | 2026-02-16 11:38:46+00:00
Thank you and yes!

By making the entire architecture of the database visible via system objects - you allow the user to form a mental model of how the database itself works. Instead of it being just a magic box that runs queries - it becomes a fully instrumented data model of itself.

Now, you could say: "The database should just work" and perhaps claim that it is design error when it doesn't. Why do I need instrumentation at this level?

To that I can say: Every database ever made makes query planning mistakes or has places where it misbehaves. That's just the way this field works - because data is fiendishly complicated - particularly at high concurrency of when there is a lot of it. The solution isn't (just) to keep improving and fixing edge cases - it is to make those edge cases easy to detect for all users.
by OJFord | 2026-02-16 11:39:06+00:00
It makes me more inclined to take the OP at face value, genuine interest in working on something similar and making it easier for everyone ('my mum') to use.

It probably also makes him more attractive to OpenAI et al. - he's not just some guy who's going to have all sorts of risks earning a lot of money for the first time.
by coldtea | 2026-02-16 11:39:12+00:00
>It's funny to me how still so many don't realize you don't get hired for the best positions for being a 10x programmer who excels at hackerrank, you get hired for your proven ability to deliver useful products

For a programmer, that's based on them "being a 10x programmer who excels at hackerrank".

For manager types it might be "Creativity, drive, vision, whatever".

>Code is a means to an end

For a business in general.

When hiring developers, code IS the end.
by anvevoice | 2026-02-16 11:41:03+00:00
One thing I don't see discussed enough: the real-time constraint in audio actually works in small labs' favor.

For LLMs, you can throw more compute at the problem and batch requests. For voice, you have a hard latency ceiling — humans notice delays above ~200ms in conversation. That means you can't just scale up a massive model and call it a day. You need lean, efficient architectures that can stream output token-by-token with minimal buffering.

This naturally caps model size in a way that keeps the playing field more level. A 1B parameter speech model running on a single GPU can be competitive with anything a big lab deploys, because the latency constraint prevents them from leveraging their main advantage (scale).

The other piece is domain specificity. A speech model for medical dictation vs. a voice agent for restaurant reservations vs. a podcast transcriber — these benefit enormously from targeted fine-tuning on relatively small, domain-specific datasets. Big labs optimize for generality. Small teams that deeply understand one vertical can build something meaningfully better for that use case with a fraction of the compute budget.

The vladimirralev comment above about GPU utilization being 20-30% for realtime audio is spot on. The serving economics are fundamentally different from text, and that's exactly the kind of problem where clever engineering from a small team beats brute-force scaling.
by Kim_Bruning | 2026-02-16 11:42:11+00:00
> I ask it to redo everything from scratch.

This reminds me of someone who dropped into #java on undernet once upon a time in the 90s. "I can't get it to work" , and we kept trying to debug, and for some reason we kept hitting random new walls. It just never would work! Turns out that they were deleting their .java file and starting over each time. Don't do that.

---

Take it as a sequence of exercises.

Maybe start like this:

Don't use claude code at all to begin with. It's a pair programming exercise, and you start at the keyboard, where you're confident and in control. Have claude open in the web interface alongside, talk through the design with it while working; and ask to google stuff for you, look up the api, maybe ask if it remembers the best way(s) to approach the problem. Once you trust it a bit, maybe ask for code snippets or even entire functions. They can't be 100% correct because it doesn't have context... you might need to paste in some code to begin with. When there's errors, paste them in, maybe you'll get advice.

If you're comfy? Switch seats, start using claude code. Now you're telling claude what to do. And you can still ask the same questions you were asking before. But now you don't need to paste into the web interface anymore, and the AI sure as heck can type faster than you can.

Aren't you getting tired of every iteration where you're telling the AI "this went wrong", " that went wrong"? Maybe make sure there's a way for the AI to test stuff itself, so it can iterate a few cycles automatically. Your LLM can iterate through troubleshooting steps faster than you can type the first one. Still... keep an eye on it.

And, really that's about where I am now.
by tkejser | 2026-02-16 11:43:06+00:00
@da_chicken: You can read more about Snowflake ID in the Wiki page linked in the article.

The short story:

They are bit like UUID in that you can generate them across a system in a distributed way without coordination. Unlike UUID they are only 64-bit.

The first bits of the snowflake ID are structured in such a way that the values end up roughly sequentially ordered on disk. That makes them great for large tables where you need to locate specific values (such a those that store query information).
by hobofan | 2026-02-16 11:43:46+00:00
I can't speak for the status quo, but for at least the first ~5 years (so until 3 years ago when I last attempted to use it), the JS implementation of Fluent was a mess. Constant issues with incomplete API, wrong TS typings (which at that point were external) and build/bundling issues to the point where we opted for a homebrew solution.

I imagine that I probably wasn't the only one driven away by that (and I gave it many attempts!).