MurphyA/hacker-news huggingface dataset:
A tiny tool that generates config examples, docs, and JSON Schema from one file
by arbopa | 2026-01-04 15:25:06+00:00
Config drift keeps biting me.

Example configs, JSON Schema, and docs inevitably fall out of sync as projects grow. Being “careful” doesn’t scale.

So I built a small compiler-based tool that takes one explicit config definition and generates:

a human-readable example config

reference documentation

a JSON Schema (draft 2020-12)

No inference, no guessing, no branching logic. Everything is explicit — even commas — so the output is deterministic.

The package is called config-schema, built on top of a minimal templating compiler called arb. It’s intentionally boring and constrained, but that’s why it stays correct.

This repo also includes:

a CLI generator example (nested subcommands)

a docs-suite example (full project documentation)

config-schema is the smallest, clearest example of the approach.

Not trying to replace existing tools — this scratched a very specific itch for me. Curious if others have run into the same config drift problem.

Open Source REPO here: https://github.com/abstractrenderblocks/arb
by aaronkwhite | 2026-01-04 15:25:06+00:00
Started messing with Gemini 3 Pro image generation over the holidays. First tried having Claude interact with the Gemini CLI — worked fine, but burned through tokens fast.

Built a UI instead. Hits the Batch API directly, which is half the cost of real-time: text-to-image, image-to-image, and queue management. NextJS, SQLite, everything local, bring your own API key.

~$0.02/image at 1K, $0.07 at 2K, $0.12 at 4K.

Built it with Claude. Codebase is simple enough that any agent can help iterate on it. Planning to add Veo 3 when Google opens batch access for video. Feedback welcome.
by g947o | 2026-01-04 15:25:07+00:00
If I had kept a list of such questions I would have posted it (which would be a very long one). But no, I don't have that list.

> use the meta site if you think something has been done poorly.

Respectfully, no. It is meaningless. If you just look at comments in this thread (and 20 other previous HN posts on this topic) you should know how dysfunctional stackoverflow management and moderation is. This (question being incorrectly closed) is a common complaint, and the situation has not changed for a very long time. Nobody should waste their time and expect anything to be different.
by filoeleven | 2026-01-04 15:25:12+00:00
The bigger point I take from this is that the purpose of comments and good names are all attempts to help the developer grasp "the context of this code". The article uses "context switch" repeatedly, and in fact never uses the word "context" any other way. Since the author acknowledged they're starting a friendly flame war, I'll go ahead and add that the biggest problem with the example code is that it's object-oriented and mutable, which forces a sprawling context on the developers working with it.

When I read the replace() method, I was immediately confused because it has no arguments. stringToReplace and alreadyReplaced are properties of the class, so you must look elsewhere (meaning, outside of the function) for their definitions. You also don't know what other bits of the class are doing with those properties when you're not looking. Both of these facts inflate the context you have to carry around in your head.

Why is this a class? In the replace() method, there is a call to translate(symbolName). Why isn't there also a SymbolNameTranslator class with a translate() method? Who decided one was simple enough to use a function while the other warrants a class?

SymbolReplacer surely could also be done with a function. I understand that this is illustration code, so the usage and purpose is not clear (and the original Bob Martin article does not help). Is there a reason we want these half-replaced strings made available every time we call SymbolReplacer.replace()? If there is, we can get the same data by using a reduce function and returning all of the iterations in a list.

A plain, immutable function necessarily contains within it the entire scope of its behavior. It accepts and returns plain data that has no baggage attached to it about the data's purpose. It does one thing only.
by scottlamb | 2026-01-04 15:25:34+00:00
This is tangential to the article's point, but that `replace` function is a complete WTF in a way both authors completely ignore. Because it replaces things in the entire string in a loop, it will translate symbols recursively or not depending on ordering. Imagine you have the following dictionary:

a=$b
b=oops

if your input string just has one of these, it will just be translated once as the programmer was probably expecting:

input: foo $a bar
output: foo $b bar

but if your input string first references $b later, then it will recursively translate $a.

input: foo $a bar $b
output: foo oops bar oops

Sometimes translating recursively is a bizarre behavior and possibly a security hole.

The sane thing would be to loop through building the output string, adding the replacement for each symbol as you go. Using String.replace and the alreadyReplaced map is just a bad idea. Also inefficient, as it throws away strings on each loop iteration.

Feels typical of this whole '90s-era culture of arguing over Java design patterns and ornate styles without ever thinking about if the algorithm is any good.
by libertine | 2026-01-04 15:25:35+00:00
Why is the founding of the UN, at the end of WW2, and the signature of the UN Charter, considered an arbitrary event in modern History for you?

It's the biggest geopolitical event in modern History to prevent the death of millions, by attempting to stop the expansion of borders through military force and making countries recognize the borders of each of its members.

> What about segregation then, is that recent enough for you?

What about segregation? Where? In different European countries? USA? South Africa? India?

Was there a global consensus to end segregation? Or were different events at different points in time, achieved in different manners? Is there still segregation happening in some societies?
by diath | 2026-01-04 15:25:44+00:00
It is normal for KDE. KDE is mockingly called KrashDE in Linux circles for a reason. We're only 4 days into 2026 and there's already dozens of crash-related bugs filled in the bug tracker: https://bugs.kde.org/buglist.cgi?bug_status=UNCONFIRMED&bug_...

Even things as basic as handling the wallpapers was crashing users' desktops up until recently: https://www.phoronix.com/news/Plasma-6.5-Crash-Fixes
by gcanyon | 2026-01-04 15:26:02+00:00
Each level of programming abstraction has taken us a step further from the bare metal, as they used to say. In machine code you specify what goes where at the memory/register level. Assembly gives you human-readable mnemonics. C abstracts away direct control, but you still manually allocate memory. Java and C# abstract away memory management but you still declare types. Python and JavaScript abstract away type declarations but you still define variables and program structure. With AIs define your end goal in plain language and then you either have to understand code to edit, or literally depend on the machine to fix everything.

In a sense it's like SQL or MiniZinc: you define the goal, and the engine takes care of how to achieve it.

Or maybe it's like driving: we don't worry about spark advance, or often manual clutches, anymore, but LLMs are like Waymo where your hands aren't even on the steering wheel and all you do is specify the destination, not even the route to get there.
by bborud | 2026-01-04 15:26:08+00:00
Then you have a much darker view of humanity than I have. What you seem to suggest is that because building a community on volunteers is hard it is not worth doing.

What makes a community worthwhile is its ability to resolve differences productively. I think that if you replace individual responsibility with transactionality you have neither community nor long term viability or scalability.

Then again, we live in times when transactional thinking seems to dominate discourse.
by webdevver | 2026-01-04 15:26:31+00:00
honestly, with LLMs, everything is fun again.

embedded dev with a billion toolchains, GPU development with each vendors bespoke API, ffmpeg with its billion parameters - if anything, you could say LLMs bailed us out of the impending ultra-specialization. without LLMs, we might be facing a world where 30% of the workforce is in software dev.

i am keeping my eyes peeled on vibe-coding PCB layouts and schematics. a lot of eyes in that direction already but its still early.
by rogerbinns | 2026-01-04 15:27:16+00:00
Pelican is what I use, and it works well.

I used to use Nikola, but gave up on that for two reasons. One was it was adding every possible feature which meant an ever growing number of dependencies which gets scary. And that is hard to use - eg how do you embed a youtube video becomes a trawl through documentation, plugins, arbitrary new syntax etc.

But the biggest problem and one that can affect all the SSG is that they try to do incremental builds by default. Nikola of the time was especially bad at that - it didn't realise some changes mattered such as changes to config files, themes, templates etc, and was woolly on timestamps of source files versus output files.

This meant it committed the cardinal sin: clean builds produce different output from incremental builds

Pelican has kept it simple.
by trashface | 2026-01-04 15:27:23+00:00
Good riddance. There were some ok answers there, but also many bad or obsolete answers (leading to scrolling down find to find the low-ranked answer that sort of worked), and the moderator toxicity was just another showcase of human failure on top of that. It selected for assholes because they thought they had a captive, eternally renewing audience that did not have any alternative.

And that resulted in the chilling effect of people not asking questions because they didn't want to run the moderation gauntlet, so the site's usefulness went even further down. Its still much less useful for recent tech, than it is for ancient questions about parsing HTML with regex and that sort of thing.

LLMs are simply better in every way, provided they are trained on decent documents. And if I want them to insult me too, just for that SO nostalgia, I can just ask them to do that and they will oblige.

Looking forward to forgetting that site ever existed, my brain's health will improve.
by wilkystyle | 2026-01-04 15:27:42+00:00
Love BJ Fogg's Tiny Habits!

2025 was the first time I have been able to implement and maintain a series of routines for the entire year (still going strong), and the concept of starting tiny was a key epiphany for me. I wrote about my experiences with it recently on my blog[0], but the point you make about good first steps is a great one.

A phrase I heard some time back that has stuck with me is "don't buy something hoping to be someone." In other words, don't buy running shoes hoping to become a runner.

In my personal experience, a good first step is the smallest version of doing the thing you ultimately want to be doing. "Brush one tooth" is a great example. Doing one push-up is another. For running, maybe just getting dressed, walking outside, and doing some stretching. The idea is that it's the stuff you would have to do anyways if you were going to do a more robust/thorough version of the thing you're trying to ultimately do. Buying shoes, on the other hand, is just purchasing more stuff.

[0] https://onebadbit.com/posts/2025/12/year-in-review/
by lovehashbrowns | 2026-01-04 15:27:48+00:00
Which is why LLMs are so much more useful than SO and likely always will be. LLMs do this even. Like trying to write my own queue by scratch and I ask an LLM for feedback I think it’s Gemini that often tells me Python’s deque is better. duh! That’s not the point. So I’ve gotten into the habit of prefacing a lot of my prompts with “this is just for practice” or things of that nature. It actually gets annoying but it’s 1,000x more annoying finding a question on SO that is exactly what you want to know but it’s closed and the replies are like “this isn’t the correct way to do this” or “what you actually want to do is Y”
by codemonkey-zeta | 2026-01-04 15:28:18+00:00
I find that Lisps encourage this behavior more than other languages. Many (most?) of the lisp functions I read have the exact same structure:

(fn some-function [args]
(let [binding (transform args)]
(an-expression binding)))

I find that this makes skimming lisp code much easier, because I can usually skip reading the bindings and just read the function name and ultimate expression and usually get the gist very quickly.

You might wonder how this is different than the example you provided, and the answer is because you could sneakily intersperse anything you wanted between your imperative bindings (like a conditional return statement), so I actually have to read every line of your code, vs in a lisp `let` I know for a fact there is nothing sneaky going on.
by matt_kantor | 2026-01-04 15:28:23+00:00
> The problem is moderation marking unrelated questions as duplicates.

This problem isn't directly solvable (what counts as a "duplicate" is inherently subjective, and therefore mistakes/differences of opinion are inevitable).

I think a deeper problem is that once a question becomes closed (for any reason), it's unlikely that it'll ever be reopened. The factors behind this are social (askers interpret close votes as signals that they should give up), cultural (there's not much training/feedback/guidelines about what "duplicate" means for those with voting privileges), and technical (there's no first-class feature for askers to contest closure, and it takes just as many votes to reopen a question as it does to close it (and the reputation threshold is the same)).
by xen0 | 2026-01-04 15:28:27+00:00
The closed intervals for slices caught my eye as well, but I simply filed that under 'that's a weird quirk' rather than 'wtf?'.

It would require more thinking on my end to change that to either 'this is an acceptable choice' or 'this is a terrible idea'.

But the array indices being reversed on declaration? I cannot think of an upside to that at all.
by regenschutz | 2026-01-04 15:28:28+00:00
Personally, I believe that you'll get a lot more attention on your online business if you post authentic content. That is to say, written by you, not by an AI.

AI content tends to lack personality, and as a small business you absolutely need personality to survive.

Furthermore, the AI doesn't actually "know" anything that it's spewing out. As e.g. someone trying to understand what your business does, it would be a lot more helpful to read YOUR thoughts, instead of the AI's. Just skip the AI step, even if the content you write doesn't feel as "professional".

Try submitting a link to your online business here, HN is full of fellow business-folk.
by wpietri | 2026-01-04 15:28:50+00:00
Have you considered that the problem here is not insufficient explanation of policy?

There's this thing that some programmers do a lot, where it's the users who are wrong. Using it wrong, approaching it wrong, thinking about it wrong, wanting the wrong thing. Just not understanding enough the masterwork that the programmers created.

What this view misses is that the users are the point. If one user gets it wrong, sure, maybe it's the user. But broadly the point of software is to serve and adapt to users, and developers who forget that are starting an argument that they cannot win in the long term.

It's especially wild to see you talking like this on an article about how Stack Overflow is just about dead. It needed changes a decade ago, but everyone just hunkered down and defended the existing approach. The policies you are somehow still defending are a big part of what doomed the site.
by 01HNNWZ0MV43FF | 2026-01-04 15:29:05+00:00
C is such a Blub language lol

Optional is `Option<T>`

Zero-copy is `&T`

Mutation is `&mut T`

Diehard C programmers have Stockholm Syndrome for the language because they like to show off how they can be productive in a bad language. If they took a few months to learn C++ / Rust / C# / any language that has solved this, they'd have to admit that they staked a lot of their ego on a language that constantly makes them jump through hoops. Because they love showing that they're good hoop-jumpers.

But any noobie who's a year into programming will say "Oh cool, in those languages I don't have null pointer exceptions" and never learn C. Good!
by Dagger2 | 2026-01-04 15:29:07+00:00
They pretty much did. "Just add N bits to v4" is far more work than you're thinking it is, and most of what v6 does is a direct consequence of taking v4 and adding more bits to it.

The amount of work doesn't depend on the number of bits either, so adding fewer bits is a false economy. Deploying a new version of IP is so hard that you only want to be doing it once, not once every time you need an extra few bits.
by nijave | 2026-01-04 15:29:08+00:00
>I don't use IPv6 because it solves a problem that I don't have

At least here in the U.S., my observation has been it's usually a bit faster and has more efficient routes than IPv4. I assume part of that is using newer equipment and architecture than practical for IPv4 and ability to have more granular routes.

I regularly see 1-2ms improvement to first hop outside my ISP network (10ms vs 12ms)

Remembering addresses is a solved problem with DNS.
by _heimdall | 2026-01-04 15:29:18+00:00
This is where I've found Astro to really shine. Most people reached for it because of the whole "islands of interactivity" concept, but IMO the ability to easily build a mostly static site with server APIs when needed is a the killer feature.

I manage multiple Astro sites and eventually they have all needed at least a few small server endpoints. Doing that with Astro is very simple and it can be done without making the static portions of the site a pain to maintain.
by jasode | 2026-01-04 15:29:26+00:00
The repo should mention a warning about usage. Be aware that downloading large playlists with lots of videos from Youtube can get your ip address throttled/banned. The ban could last a week or a month.

It's also not a good idea to use "--cookies" unless you absolutely have to. Just leave out the cookies option unless Youtube forces your ip address to "sign in" which then requires cookies.
by pixl97 | 2026-01-04 15:29:37+00:00
In the past shared media like TV and radio had kind of a forced shared social reality that covered large areas, but typically up to the size of nation states and maybe their allies.

The internet eventually broke that. Social media allows people that don't like sports, for example, to cut their exposure to sports dramatically. At the same time it increases exposure to more random things. There is still big name advertising, but it's not the same as my youth where a stadium would be covered in the same 4 ads.
by CapsAdmin | 2026-01-04 15:31:32+00:00
Somewhat related, in a lot of those developing countries, fakes are so prolific that they become meaningless.

When you go to the market to buy socks, it's a little difficult not to find socks without logos like nike, addidas, gucci, prada, etc.

If you wear the real deal, everyone will think it's fake, or perhaps "worse", they will think nothing of it.

You can buy high quality fakes, or low quality. Or even the real deal, straight from the factory, just without the final stamp of approval.
by 123pie123 | 2026-01-04 15:32:26+00:00
I moved away from SysAdmin around 2010 and I worked with a fair amount of other techies and it really was the wild west in the stuff various people did with: sizeable production systems, Firewall rules (or lack of) network connectivity/ switches, and code changes

Get a cool tool from a magazine? yep just throw it on to production servers - no testing or letting people know what the hell they did (I got burnt a few times from people doing this!)

no change control, no documentation - just reverse the changes, if it doesn't work immediately - although some people never even made back ups of the previous files - crazy shit
by simonw | 2026-01-04 15:32:58+00:00
Something I like about our weird new LLM-assisted world is the number of people I know who are coding again, having mostly stopped as they moved into management roles or lost their personal side project time to becoming parents.

AI assistance means you can get something useful done in half an hour, or even while you are doing other stuff. You don't need to carve out 2-4 hours to ramp up any more.

If you have significant previous coding experience - even if it's a few years stale - you can drive these things extremely effectively. Especially if you have management experience, quite a lot of which transfers to "managing" coding agents (communicate clearly, set achievable goals, provide all relevant context.)
by dxdm | 2026-01-04 15:33:02+00:00
I do not remember any specific examples, but when I still used SO, I've come across many cases personally where a question closely matching a problem I had was closed as a duplicate of another question that asked about a related, but different problem and had an answer that was not appropriate for my problem and the supposedly duplicate question.

This significantly decreased the utility of clicking on SO links for me, to the point where I would avoid going to search results from SO first.

The comments here are teeming with others voicing similar experiences.

It is quite... something to read your response to this, which pretty much comes across as "nu-uh!", garnished with an appeal to "policy".

I think your SO-specific bubble is a little different from most other people's. I've no doubt that overwhelmingly, the dupes are dupes, but on the other hand, the false positives you're discounting are overwhelming the user experience.
by mbesto | 2026-01-04 15:33:10+00:00
Ya this isn't true by any objective measure.

Two pair of shoes on the top rankings: https://runrepeat.com/catalog/running-shoes

The top 10 men's at the Boston Marathon were wearing Adidas, Nike and Asics and Puma.

On shoes rose up because they went grassroots and built "technology" that seemingly performed better and didn't make massive swings in design changes year over year (which is what Nike, Saucony, etc. do and its really annoying for most runners who get comfortable in a shoe). This is like saying Warby Parker made "technically" better glasses - they just made the experience of buying the item better (which is valuable btw).
by amelius | 2026-01-04 15:33:12+00:00
The main reason I could imagine is security.

Right now with X11, IIRC, if one application has access to your display they can read what is going on in other applications running on the same display.

If browser tabs were able to do that, all hell would break loose. So why do we accept it from applications?

Anyway, despite this, I still use X11 instead of Wayland because of all the shortcomings.
by loloquwowndueo | 2026-01-04 15:34:05+00:00
I think it might be unnecessary! Probably fine to just give more context in a comment (it’s what I did heheh).

It being 1971, it might be missing commentary on the Iran-Contras thing and the Panama invasion among others but by then the pattern the book describes was well-established.

Thanks for bringing this interesting book up!