MurphyA/hacker-news huggingface dataset:
by chrismorgan | 2026-01-04 16:49:03+00:00
It’s wrapping a somewhat opinionated and mildly bizarre yt-dlp invocation, for each line of a file doing a mkdir/cd and then invoking yt-dlp.

—⁂—

From the “Features” section of the README:

> • Organized Structure: Creates separate directories for each channel.

… depending on you mentioning that name in your playlists.txt file, so that if you were writing a script you’d just be doing a mkdir/cd yourself, trivial.

> • Smart Sync: Skips files that have already been downloaded (--no-overwrites).

That’s not really what --no-overwrites does. The default of --no-force-overwrites is probably actually what you want: “do not overwrite the video, but overwrite related files”. You probably do want metadata files to be updated on subsequent runs.

> • Clean Naming: Saves files as Playlist Title/Video Title.mp4 (no numeric prefixes).

This is an Opinion.

> • Batch Processing: Reads multiple playlists from a playlists.txt file.

Meh, you’re invoking a script, putting the stuff in the script would be at least as easy.

—⁂—

From the script itself, going through the arguments passed to yt-dlp:

--cookies "$COOKIES_FILE"

My impression is that this is discouraged unless necessary. And if you need it, --cookies-from-browser will be more convenient.

-f "bv*+ba/b"

That’s equivalent to the default.

--merge-output-format mp4

This is an Opinion.

--no-overwrites

I’m not convinced this is desirable. Videos already won’t be overwritten by default, this just stops metadata from being updated on subsequent runs, though I’m not sure what things might be updated.

-o "%(playlist_title)s/%(title)s.%(ext)s"

This is an Opinion.

—⁂—

Instead of having a playlists.txt file containing `Channel Name|https://www.youtube.com/playlist?list=x` and having a separate 73-line file download_playlists.sh, you might as well have just one download_playlists.sh file containing:

dl() {
mkdir -p "$1"
pushd "$1"
yt-dlp -o "%(playlist_title)s/%(title)s.%(ext)s" "$2"
popd
}

dl 'Channel Name' 'https://www.youtube.com/playlist?list=x'

By dint of its simplicity, easier to work with and tweak to your own requirements (such as dropping `--merge-output-format mp4` as I did here). Also more obvious how to invoke it just once. (Aside: use pushd/popd instead of `cd "$channel_name"` and `cd ..`, because then $channel_name containing a slash won’t bork it.)
by cmrdporcupine | 2026-01-04 16:49:58+00:00
They might have caught the mistakes but I think the resulting product would have been a flop.

If IBM hadn't done what it did somebody else would have dominated the market with a product to fit the same niche. Perhaps somebody "downmarket" in the more consumer space who managed to punch upwards -- maybe Apple who had some business success with the Apple II + VisiCalc, etc. or maybe Kaypro or somebody in the CP/M space. Or perhaps somebody else "upmarket" like DEC, who came too late the personal computer space with products that nobody really bought (DEC Rainbow, etc) but maybe they'd have had more success if IBM hadn't gotten in there.

The market wanted a relatively open product to innovate in. When the PS/2 came along a few years later with proprietary bus, etc and tried to put the genie back in the bottle, it flopped.
by dahart | 2026-01-04 16:50:53+00:00
Reading the rest of this thread, it sounds like moderation truly was SO’s downfall, and almost everyone involved seems to agree the site became extremely anti-social. Not sure I’ve ever seen the word ‘toxic’ this many times in one thread before.

Anyway, that is a good question you asked, one that they didn’t figure out. But if there are enough people to ask questions and search for answers, then aren’t there enough people to manage the answers? SO already had serious community effort, it just wasn’t properly focused by the UX options they offer. Obviously you need to crowd-source the decisions that can’t scale to mods, while figuring out the incentive system to reduce gaming. I’m not claiming this is easy, in fact I’m absolutely certain this is not easy to do, but SO brought too little too late to a serious problem that fundamentally limited and reduced the utility of the site over time.

Moderation should have been aimed squarely at making the site friendly, and community should be moderating the content entirely, for exactly the reasons you point out - mods aren’t the experts on the content.

One thing the site could have done is tie questions and answers to specific versions of languages, libraries, tools, or applications. Questions asked where the author wasn’t aware of a version dependency could be later assigned one when a new version changes the correctness of an answer that was right for previous versions. This would make room for new answers to the same question, make room for the same question to be asked again against a new version, and it would be amazing if while searching I could filter out answers that are specific to Python 2, and only see answers that are correct for Python 3, for example.

Some of the answers should be deleted (or just hidden but stay there to be used as defense when someone tries to re-add bad or outdated answers.) The policy of trying to keep all answers no matter how good allowed too much unhelpful noise to accumulate.
by trescenzi | 2026-01-04 16:50:56+00:00
> At scale, even your bugs have users.

First place I worked right out of college had a big training seminar for new hires. One day we were told the story of how they’d improved load times from around 5min to 30seconds, this improvement was in the mid 90s. The negative responses from clients were instant. The load time improvements had destroyed their company culture. Instead of everyone coming into the office, turning on their computers, and spending the next 10min chatting and drinking coffee the software was ready before they’d even stood up from their desk!

The moral of the story, and the quote, isn’t that you shouldn’t improve things. Instead it’s a reminder that the software you’re building doesn’t exist in a PRD or a test suite. It’s a system that people will interact with out there in the world. Habits with form, workarounds will be developed, bugs will be leaned for actual use cases.

This makes it critically important that you, the software engineer, understand the purpose and real world usage of your software. Your job isn’t to complete tickets that fulfill a list of asks from your product manager. Your job is to build software that solves users problems.
by ben_w | 2026-01-04 16:51:09+00:00
I finished off a browser-based modern take on Asteroids, and the game engine to support it. The music synthesiser is definitely still buggy, if I go back to this I'll replace "synthesise this MIDI file" with "loop a pre-rasterised sound file", but TBH it's almost certainly more sensible for my next project to just use an existing engine, this was originally just an experiment to see what GenAI could even do.

Everything else besides the music is basically as I'd like it to be: gameplay progression, achievements, particle effects, game controller support, collision detection, etc. The art assets are also AI-generated.

I also updated my Raspberry Pi webcam interface. It's now 30fps, not 4, and has an acceptable UI. Also made progress with some automated motion detection in there, but I have yet to test that, I won't speak for it actually working until I do.

Couple of other projects too, but now's not the time to reveal them. One might even turn into from project into product.
by malco_2001 | 2026-01-04 16:51:14+00:00
The GTK theme engine from GNUstep can also be used to set a "Rhapsody" theme. It just allows using GTK themes. Here is an example of what that looks like https://github.com/pkgdemon/screenshots/blob/main/yellowbox-... I'd also like to make a native theme for that layout at some point.
Show HN: Moo.md – Mental Models for Claude Code
by saadshahd | 2026-01-04 16:51:22+00:00
Claude Code is fast. But fast at what?

moo.md makes it a thinking partner, not just a task executor. Mental models. Confidence gates. Learnings that persist.

When you're stuck on a decision, it runs a pre-mortem. When debugging, Ishikawa. When you need perspective, it channels Rich Hickey or Paul Graham.

Plugins for decisions, writing, and design.

https://github.com/saadshahd/moo.md
by johnwheeler | 2026-01-04 16:51:28+00:00
No you're absolutely right. One of the things I'm starting to see and I wrote another Hacker News post about this is that more people are starting to come out talking about all the mistakes AI is making even as it gets better. Then You've got people like Karpathy talking about how drastic the landscape is shifting

I've been doing this for 25 years and I can tell you that the AI is a better coder than me, but I know how to use it. I reviewed the code that it puts out and it's better. I'm assuming the developers that are having a hard time with it are just not as experienced with it.

If you think your job is going to stay programmer, I just don't see it. I think you need to start providing value and using coding as just a means to do that, more so than coding being valuable in itself. It's just not as valuable anymore.
by wasmperson | 2026-01-04 16:51:45+00:00
Muratori followers tend to beat around the bush to avoid saying it directly, but the implication here is that anyone who sees value in Rust is simply a bad programmer and will either stay a bad programmer or eventually stop using the language. Same goes for any language with garbage collection.

A quote from the linked video starting around 8:30:

> All of the advice you see online pretty much is for people thinking at this level, which is not where you want to be. You're gonna have to go through it at some point to understand what's going on, but your goal is to go from [individual element thinking] to [grouped element thinking], so advice like 'use smart pointers' or the rust borrow checker, all that stuff? Those are for people who are still not very good at programming.

To be clear: I do not agree with this position, but I thought it was important to clarify what I believe to be the intended message of this article (and others that you see coming from this group of people).
Ask HN: Friends Google account hacked, what can he do?
by bosch_mind | 2026-01-04 16:52:00+00:00
My friend has had a rough year (stressful completion to PhD, poor job market, immigration struggles with wife). To top it off, his Google account was just hacked in what seems to be a targeted attack after losing his US number.

All passwords changed, completely lost access and cannot gain any access back to the accounts. All phone number/recovery options changes en masse. Lifetime of photos, etc. have been lost and he is really bummed.

Given that a lot of technies and Googlers exist on this platform, would someone be able to point me in the right direction to help him out? Is he completely out of luck? All the changes happened in a sequence.
by simoncion | 2026-01-04 16:52:20+00:00
> If you're not, it sounds unreasonable for you to need to spin up your own DNS server.

If you're using a SOHO router, you're very likely to already be using dnsmasq; a DNS server. In that configuration, if you're using DHCP then you get your hostnames in DNS for free.

If you're not using DHCP and don't have a DNS server running on your network, then it's on you to select memorable static addresses. [0] This is a long-standing baseline fact of IP addressing for LANs and other private networks.

[0] Nothing prevents you from assigning addresses to your LAN machines in the fd00::/64 prefix starting from 1 (that is, fd00::1) and going up. The fd00::/8 space is for uncoordinated network-local addressing.
by rixed | 2026-01-04 16:52:23+00:00
tagged unions (not enums, sorry) are not a dynamic type system concept. Actually, I would not be able to name a single dynamically typed language that has them.

As for the memory allocation, I can't see why any object should have the size of the largest alternative. When I do the manual equivalent of a tagged union in C (ie. a struct with a tag followed by a union) I malloc only the required size, and a function receiving a pointer to this object has better not assume any size before looking at the tag. Oh you mean when the object is automatically allocated on the stack, or stored in an array? Yes then, sure. But that's going to be small change if it's on the stack and for the array, well there is no way around it ; if it does not suit your design then have only the tags on the array?

Tagged unions are a thing, whether the language helps or not. When I program in a language that has them then it's probably a sizeable fraction of all the types I define. I believe they are fundamental to programming, and I'd prefer the language to help with syntax and some basic sanity checks; Like, with a dynamical sizeof that to reads the tag so it's easier to malloc the right amount, or a syntax that makes it impossible to access the wrong field (ie. any lightweight pattern matching will do).

In other words, I couldn't really figure out the downside you had in mind :)
by tialaramex | 2026-01-04 16:52:25+00:00
WUFFS is an example of a language which just doesn't have any of these "illegal/invalid objects".

Safe Rust doesn't have any either, though presumably you'll say "but unsafe" there.

> It is generally desirable to keep invalid objects properly typed

As written this doesn't mean anything, if the object is properly typed then it is valid, an invalid object can't be properly typed. So more likely you're imagining something like Rust's MaybeUninit<T> type wrapper which says well, either this is a T, or it isn't (yet) and so a programmer will need to tell the compiler once they've arranged that it is a T so then it can be used as a T.

Barry Revzin has (I think) landed the fixes to the C++ type system so that you could reasonably write this in C++ too once you have C++ 26.
by saadshahd | 2026-01-04 16:52:30+00:00
What I actually get from this:

1. No more "good work" fluff. Claude challenges decisions instead of agreeing. The expert simulations come with confidence ratings and citations — if it's channeling Hickey at 7/10, it tells you why.

2. Compaction anxiety is gone. I used to dread long sessions because insights would disappear when context got too long. Now learnings persist in ~/.claude/learnings/ — patterns from last month are still there.

3. Grounded opinions. When I ask "what would Rich Hickey think?", the response cites his actual talks and documented philosophy. Not hallucinated advice.

The mental models aren't the point. The point is Claude stops being agreeable and starts being useful.
by sdoering | 2026-01-04 16:52:41+00:00
> The pen is meant to slow you down. The words shouldn’t land on paper at the speed of thinking or even talking.

I still, to this day - even with a good typing speed, I write way quicker with a pen. A pen isn't slowing me down. A pen is a force multiplier. At least to me and in my totally subjective experience.

> The writing must hurt your wrist or hand. It must turn into a burden. That pain is a signal telling you that you have written long enough. Maybe you wrote only five lines. Perhaps one thousand.

The author must not have used a pen much in their lifetime. I have written 50 to 80 pages in longhand - never cramped, never felt it to be a burden. No pain.

Overall - from the beginning, to the end, this to me felt so contrived. The "sampled title" (sorry, but I would call it a blatant rip off), the LinkedIn/TED-talk writing style. Making something an uncountable number of people experience every day sound like the holy grail of enlightenment - and the writing style overall - to me it read like Claude being prompted well.

Not my piece of cake. Sorry.
Show HN: Underpriced AI – AI-powered valuations for resellers
by fkratzer | 2026-01-04 16:53:04+00:00
I built this to help resellers (people who buy items at thrift stores/estate sales and flip them on eBay) figure out what things are worth before buying.

You take a photo, the app identifies the item and pulls comparable sales data to estimate value. It also generates listing titles and descriptions.

Tech stack: Next.js 16, React 19, Claude API for vision/analysis, Postgres, hosted on Vercel. iOS app is Capacitor.

The core problem: resellers make money on information asymmetry, but researching every item manually takes forever. A vintage Pyrex bowl might be worth $5 or $50 depending on the pattern—you need to know which before you buy it.

Just launched on iOS. Web app at https://underpricedai.com

Happy to answer questions about the Claude integration or the business model.
by utopiah | 2026-01-04 16:53:13+00:00
It literally changed my life.

A decade ago I was working a boring job paying the bills in a small company. I honestly felt that despite being financially safe I was wasting my life. I didn't believe in the company mission and I wasn't gaining new skills. I was bored out.

I went to a cafe every morning for 30min BEFORE my actual job. I did whatever I wanted, meaning reading, writing, jolting down ideas, being productive or not, but the point was it was MY time to think.

This is so basic. I went with a notebook, a pencil, paid 2€ every morning for a basic black coffee... but what was special was having a dedicated time and place regularly to just inch at it, whatever "it" might be for me.

Well, fast forward ~10 years and I'm HYPED. I'm so excited pretty much every morning that I can't help for the next day to work on more interesting projects.

TL;DR: yes, go to the cafe, alone, for yourself.
Tell HN: Perplexity Has Unspecified Chr Limits for Session Export
by eth0up | 2026-01-04 16:53:14+00:00
Hello all,

I discovered, the hard way, that exporting Perplexity sessions to PDF results in substantial content loss when the page is ~90 pages.

After opening a ticket on the matter, a brief dialogue with a rep proved unhelpful and confusing. It was stated that the Export as PDF feature only exports individual "threads", and that to export an entire session, each so-called thread must be individually selected and exported. This is simply wrong.

In practice, there is no method to select threads through the Top-Right/ 3-dot menu/Export as PDF option. Testing this with various sessions from 1 to 170 page exports showed no indication that threads were relevant.

Exports under 90 pages tend* to retain all content, while a 93-page didn't, but a 95 and 170 page export did. This indicates that the character limit (if that's the cause) is variable, as 170 pages is almost guaranteed to contain more characters than 90.

The fundamental point here, whatever the cause, is that data loss is inevitable under the present UI with its absence of documentation, notices etc.

*I observed changes after submitting the ticket and modifications have already been made. The situation was worse before, and now less worse, but still applies.
by djeastm | 2026-01-04 16:53:26+00:00
>It's writing a sludge of plausible-looking but empty slop that contaminates everything on the web, it's attempting to automate the visual arts, it's generating fake video that's getting harder and harder to distinguish from real one.

These are negative externalities, indeed, but the producer of the "goods" here does not feel those effects.
by jffhn | 2026-01-04 16:53:38+00:00
>where each line is extracted into its own method

As John Carmack said: "if a lot of operations are supposed to happen in a sequential fashion, their code should follow sequentially" (https://cbarrete.com/carmack.html).

A single method with a few lines is easy to read, like the processor reading a single cache line, while having to jump around between methods is distracting and slow, like the processor having to read various RAM locations.

Depending on the language you can also have very good reasons to have many lines, for example in Java a method can't return multiple primitive values, so if you want to stick to primitives for performances you inline it and use curly braces to limit the scope of its internals.
by nirvdrum | 2026-01-04 16:54:07+00:00
It doesn’t have to be like X11. Presumably, it’d be something you could disable if you’d like.

It’d be very handy if we had a performant remote desktop option for Linux. I could resume desktop sessions on my workstation from my laptop and I could pair program with remote colleagues more effectively.

In the past I’d boot into Windows and then boot my Linux system as a raw disk VM just so I could use Windows’s Remote Desktop. Combined with VMware Workstation’s support for multiple monitors, I had a surprisingly smooth remote session. But, it was a lot of ceremony.
by jmkni | 2026-01-04 16:54:08+00:00
I love sitting alone in Wetherspoons, and working, it's actually perfect because:

- None of my colleagues, and nobody in any of my social circles, would ever be seen dead there

- You meet the best people, everyones really nice

- Nobody judges anybody, we're all just there go get a bit pissed, lots of people socialising, some people are there doing a crossword, I'm just a guy sitting on my laptop coding, nobody cares

- I can focus better with lots of background noise

- Cheap beer

If you've not tried it, try it!
by markstos | 2026-01-04 16:54:08+00:00
Linux does not use this split any more. Many of these dirs were merged back together. The "/usr merge" was adopted by Debian, Ubuntu, Fedora, Red Hat, Arch Linux, openSUSE and other major distros:

https://itsfoss.gitlab.io/post/understanding-the-linux--usr-...

`man file-hierarcy` defines modern Linux filesystem layout.

https://www.man7.org/linux/man-pages/man7/file-hierarchy.7.h...
by orblivion | 2026-01-04 16:54:13+00:00
The NSA can't break GPG assuming everything is working properly. This blog post (which to be fair I only skimmed) explains that GPG is a mess which could lead to things not working properly, and also gives real life examples. You may also want to see https://gpg.fail (you can tell they're from the ivory tower by the cat ears). The blog post also mentions bad UX, which you and I can directly appreciate (if anything I might expect ivory tower types to dismiss UX issues).
by spcebar | 2026-01-04 16:54:15+00:00
Tangentially, if you enjoy The Great Gatsby, you might also enjoy All The King's Men, which is a work of fiction that I think similarly richly described a swath of the American experience.

As for Gatsby, I think it's a great piece of fiction that invites a lot of readings, and everyone's invited to that ownership of the text. I think you can come away with the deeply shallow understanding of "the twenties were cool," and still be enriched by Fitzgerald's writing style.

I don't think anyone has made a good film adaptation of Gatsby and I don't know if anyone will, as long as it's adapted literally. The imagery and iconography of wealthy 1920s America eats so much of anything that tries to adapt it, that they tend to come out feeling shallow, and the writing is so dense that dialogue feels stilted and weird spoken out loud. You'd either need to, in my opinion, lean heavily into both, or abandon both, to make a good adaptation (leaning into both immediately feels like a Wes Anderson movie to me).

I think the best adaptation would be to do something like Jobs, where they just take a few scenes from the book and create a movie out of that.
by matt_kantor | 2026-01-04 16:54:24+00:00
The purpose of StackOverflow was never to get askers quick answers to their specific questions. Its purpose is to create a living knowledge repository of problems and solutions which future folk may benefit from. Asking a question on StackOverflow is more like adding an article to Wikipedia than pinging a colleague for help.

If someone doesn't care about contributing to such a repository then they should ask their question elsewhere (this was true even before the rise of LLMs).

StackOverflow itself attempts to explain this in various ways, but obviously not sufficiently as this is an incredibly common misconception.