MurphyA/hacker-news huggingface dataset:
Show HN: Open-Source 8-Ch BCI Board (ESP32 and ADS1299 and OpenBCI GUI)
by simontheHWguy | 2026-01-05 17:46:51+00:00
Hi HN, I recently shared this on r/BCI and wanted to see what the engineering community here thinks.

A while back, I got frustrated with the state of accessible BCI hardware. Research gear was wildly unaffordable. So, I spent a ton of time designing a custom board, software and firmware to bridge that gap. I call it the Cerelog ESP-EEG. It is open-source (Firmware + Schematics), and I designed it specifically to fix the signal integrity issues found in most DIY hardware.

I believe in sharing the work. You can find the Schematics, Firmware, and Software setup on the GitHub repo:
GITHUB LINK: https://github.com/Cerelog-ESP-EEG/ESP-EEG

For those who don't want to deal with BGA soldering or sourcing components, I do have assembled units available: https://www.cerelog.com/eeg_researchers.html

The major features: Forked/modified OpenBCI GUI Compatibility as well as Brainflow API, and LSL Compatibility. I know a lot of us rely on the OpenBCI GUI for visualization because it just works. I didn't want to reinvent the wheel, so I ensured this board supports it natively.

It works out of the box: I maintain a forked modified version of the GUI that connects to the board via LSL (Lab Streaming Layer). Zero coding required: You can visualize FFTs, Spectrograms, and EMG widgets immediately without writing a single line of Python.

The "active bias" (why my signal is cleaner): The TI ADS1299 is the gold standard for EEG, but many dev boards implement it incorrectly. They often leave the Bias feedback loop "open" (passive), which makes them terrible at rejecting 60Hz mains hum. I simply followed the datasheet: I implemented a True Closed-Loop Active Bias (Drive Right Leg).

How it works: It measures the common-mode signal, inverts it, and actively drives it back into the body. The result: Cleaner data

Tech stack:

ADC: TI ADS1299 (24-bit, 8-channel).

MCU: ESP32 Chosen to handle high-speed SPI and WiFi/USB streaming

Software: BrainFlow support (Python, C++, Java, C#) for those who want to build custom ML pipelines, LSL support, and forked version of OpenBCI GUI support

This was a huge project for me. I’m happy to geek out about getting the ESP32 to stream reliably at high sample rates as both the software and firmware for this project proved a lot more challenging than I expected. Let me know what you think!

SAFETY NOTE:
I strongly recommend running this on a LiPo battery via WiFi. If you must use USB, please use a laptop running on battery power, not plugged into the wall.
by bigbuppo | 2026-01-05 17:47:03+00:00
It's because an inline element, like applying italics to text, are expected to behave a certain way. Additionally, it may be inheriting some properties from that cascade thing, and you really don't want it to behave like anything other than an inline element unless you explicity want it to not behave like that.

It's like wondering why this grape doesn't taste like fried catfish. They're both food. Why don't they taste the same?
by lemonwaterlime | 2026-01-05 17:47:07+00:00
The challenge for most people is that HTML and Modern CSS are a declarative programming paradigm. You then selectively sprinkle state on top of that.

I use HTML and Modern CSS for frontend. I sprinkle htmx when I want interactivity and a tiny amount of plain JavaScript. That gives me a mostly declarative frontend.

On the backend I use Haskell, which is also declarative unless you opt into other things.

The challenge with web development is that we’ve learned over the years that asynchronous, stateful programming is the most bug-prone programming yet we reach for it first. We should reach for those things last and where they are appropriate.

The thing about cascading style sheets is that it all cascades by default. A web page naturally resizes. It’s when we add all this other stuff that things start breaking and becoming rigid. The key to CSS is knowing when to let go.
by martythemaniak | 2026-01-05 17:47:16+00:00
I've been playing around with SLAM using a depth camera, so I can't really tell you about LIDAR specifically, but I'd suggest doing some Deep Researches on the topic to get you a good lay of the land. During my searches for example, I came across this great compilation of visual SLAM projects: https://github.com/VSLAM-LAB/VSLAM-LAB

Unless you're a massive operation, you're probably just using an existing academic project, many of which handle a variety of inputs (depth, 2D lidar, 3D lidar etc), ie RTABMAP (what I started with), ORB-SLAM, nVidia Issac ROS SLAM (if you're on Jetson) etc. AMCL is an old-school algorithm for localization with 2D data - I tried it by taking a fake 2D scan from the depth camera and it was pretty terrible, so currently I'm trying to get visual-only SLAM working well enough for me because I don't want to spend $1k on a decent 3D lidar.
by jacobp100 | 2026-01-05 17:47:42+00:00
> Why do you think the padding as a percentage is relative to the width of the parent? Do you think it was a happy accident? I don't think so, it was purposefully put there in the specs so that we could have boxes with fixed aspect ratios. This is just the tip of the iceberg.

It’s because you cannot do a percentage of a height unless your parent’s height is fixed - something that happens naturally maybe 1% of the time. You’d be missing vertical borders in almost every case with your suggestion
by atroon | 2026-01-05 17:47:46+00:00
If you are mapping the lines where each pixel has resistance and capacitance (presumably quite small values) could you add a new pixel type with editable resistance / capacitance and hide it behind a graphic of the schematic representation (i.e. the zigzag of a resistor like --\/\/\-- or capacitor like --|(-- ?

Your current algorithm would need to be able to accept a wider range of values but it seems like it would work from a math standpoint.
Launchie brings back the launchpad to macOS 26 Tahoe
by nickfthedev | 2026-01-05 17:47:55+00:00
Launchie is a Launchpad replacement app for MacOS 26 Tahoe. It offers a lot of customization options and many features.
It is my first Mac app and my first successful side project.
First off, a huge thank you to all the amazing supporters!
I’ve received a ton of feedback and feature requests, and they’re actively shaping the app.
If it were just me coding into the void, this wouldn’t be possible - so thank you all!
Now to the features:
Organizing apps into folders
Sorting apps in the root view and in folders
Rearrange apps
Spaces
Open Launchie with Hot Key
Open via Hot Corner
Searching apps
Topbar with most used, newest and recent used apps
Hide apps
Get apps from different locations
Switch between windowed and fullscreen mode
Customize app icon size, font, grid size, background mode, background tint, …
I am actively developing the app so if you got an idea, found a bug or something else: just send me a mail and I will try to solve it :)
Also if you like this app, please leave a review on the mac app store. It helps a lot!

PS: hand-written, no ai-promo-slop :)
Here is the link:
https://apps.apple.com/app/launchie/id6752657468?mt=12

Or go to: https://www.launchie.app
Ask HN: You get 3 answers to any unknowns in the universe. What do you ask?
by kinj28 | 2026-01-05 17:48:01+00:00
Imagine a magic wand that gives you perfectly accurate answers—no ambiguity, no debate—to any three unanswered questions about reality.

My picks:
1. How did life originate from non-life?
2. What truly exists at the center of the Earth?
3. What (if anything) is the next evolutionary step beyond humans?

What would you ask, and what made you choose those three?
by articsputnik | 2026-01-05 17:48:04+00:00
This is the story of how (Neo)Vim and Markdown unified my data engineering and writing workflow.

As CEO of Obsidian says:
> Obsidian will not exist forever, no app will. However, the files you create in Obsidian are yours, and can hopefully last for generations.

Plaintext files as the foundation, Markdown as the format, and Neovim as the editor. Combined, they will last until the end of days of computers.
by oblio | 2026-01-05 17:48:07+00:00
I was in the same camp until a few months ago. I now think they're valid tools, like compilers. Not in the sense that everyone compares them (compilers made asm development a minuscule niche of development).

But in the sense that even today many people don't use compilers or static analysis tools. But that world is slowly shrinking.

Same for LLMs, the non LLM world will probably shrink.

You might be able to have a long and successful career without touching them for code development. Personally I'd rather check them out since tools are just tools.
by simontheHWguy | 2026-01-05 17:48:29+00:00
If you want an independent look at the specs, CNX Software and Hackster just wrote about the board here:

https://www.cnx-software.com/2025/12/26/cerelog-esp-eeg-a-lo...

And here

https://www.hackster.io/news/this-open-source-eeg-board-brin...
by palata | 2026-01-05 17:48:48+00:00
Whatever you want, really. The default just happens to be Gradle because that's the default on Android.

My point is that the fundamental difference between Flutter and KMP is not at all Gradle.

Last time I checked, Flutter was relying on messaging. KMP leverages FFIs. Flutter is a framework, KMP is not. If all you see is the command line you invoke to run the build, I think you're missing a lot.
by theshrike79 | 2026-01-05 17:49:16+00:00
EDIT: Just made my own. Claude + Opus and about 3-4 prompts.

Looking at the comments here a common pain (that I share) is config and code drift, or just losing your config file and being unable to publish a new version without re-doing everything.

I made a version where everything, including the HTML templates and CSS, is built in to a single static Go executable, no configuration files, everything is hard-coded.

This way as long as I have the specific executable version and the source markdown files, I can deterministically replicate my blog output structure.

The source is a directory in my Obsidian vault and the setup supports Obsidian-style front-matter
by themaninthedark | 2026-01-05 17:49:22+00:00
I work in manufacturing and stamping machines scare the shit out of me, usually because of the forces involved but I did work on some that were not guarded. That was not in the US however.

My first job with a stamping machine was in a company with about 30 production workers. This was early 2000s in the southern US, all the workers were from Latin America and I think that most of them were not here legally(I say this because the company used temp agencies to employ the workers and at one point later they wanted to bring one of them on in a management role so they had me(also a temp) ask if the person wanted too switch the the higher paying but also requiring them to submit legal documents role).

Even under those circumstances, I never saw the company do something that skirted OSHA regs. Their stamping machine was a POS that was annoying as hell to use, mostly because the light curtain and other safetys kept tripping but it was never bypassed.
by ksec | 2026-01-05 17:49:35+00:00
For a long time v8 was the fastest on a set of benchmarks but not on real world work load. That was the time when SpiderMonkey and JSC decided to go on a different path. I believe it was Mozilla that make the move first.

If we believe there is limit to everything, then the only sane conclusion would be v8 and JSC would both perform nearly the same with negligible difference in the long term. So choosing something that is fast, simple to integrate now makes a lot more sense.

Of course that is assuming memory usage, security and others being equal.
Show HN: Context Protocol, a sovereign-first workflow for thinking with LLMs
by zpusmani | 2026-01-05 17:49:37+00:00
I shared DeckBuilder (my local-first slide editor) here last month (https://news.ycombinator.com/item?id=46365332). While using it with LLMs, I kept hitting a bigger problem: context loss, hallucinated instructions, and ideas I'd rejected coming back from the dead.

I realized I was expecting AI to be a partner with memory while it is more of a stateless CPU. Even the latest models reset between sessions.

So I built a protocol where:

Your files are the memory (plain markdown)
Git is the version control
You inject context at session start
AI proposes, you ratify, files record

The system has:

5 commands: CHECKPOINT, SCOPE LOCK, HARD STOP, MODE STRATEGY, MODE EXPLORATION
3 constraint tags for locked decisions, rejected ideas, and hard constraints
Works on Claude, ChatGPT, and Gemini with the same files and same behavior
No vector DBs, LangChain or cloud dependencies

The core insight: LLMs are excellent stateless processors whereas decision memory, auditability, and long-horizon state are human responsibilities. This protocol makes that division explicit.

I tested it across the latest versions of all three platforms and it passed constraint enforcement, rejected idea protection, scope lock compliance, and checkpoint format consistency.

This is intentionally manual and opinionated. It's not for fully autonomous workflows. Friction is the feature.

Repo: https://github.com/zohaibus/context-protocol

Would love feedback, especially from anyone who's tried managing context across long projects with LLMs. What's worked for you? What's failed?
by GuB-42 | 2026-01-05 17:50:02+00:00
Actually we have a way to filter out that crap, that's what Google, Meta, TikTok, etc... have perfected over decades. The internet is huge and full of crap, and we get to see very little of it. Suggestions from, say, YouTube are generally high quality, few AI slop, vacation videos from random people, or penises. I don't mean good as in moral values, but I mean a production value beyond what you can do by writing a few lines in an AI prompt: decent picture and sound, a well written script, etc...

As more and more AI slop floods the internet, people will start to notice more and more and downvote it down to oblivion and really good content will surface. It may or may not be made with the help of AI, but it won't be sloppy. We are already seeing that, active communities don't have much AI slop, dead communities have plenty, kind if like these abandoned forums that are full of spam no one reads.

People are getting tired of AI slop, it is becoming as recognizable as a photoedit made in 5 minutes in MS-Paint, and it has about the same value. Good for over the top memes where being ugly is part of the charm, but not for anything serious.
How do you turn AI-generated images into usable marketing assets?
by apurvsheldiya | 2026-01-05 17:50:27+00:00
I’m a solo founder working on an AI tool that focuses on the post-generation step of images—cleanup, refinement, and making them usable in real marketing workflows.

I’m curious how others here handle this today. Do you rely on manual editing, custom pipelines, or existing tools?

Would appreciate any insights or critiques.
(If useful, I’m building something around this and happy to share.)
by ddingus | 2026-01-05 17:50:30+00:00
Came here to say that.

An while back, another site started with a pile of pirated music, and that was allofmp3.com Remember those peeps?

Their business model was to sell music by selling bandwidth. Basically is was all the music you want charged by the megabit download.

Pop titles were $0.10 to $0.25. A whole album at 256mbps was roughly $3 give or take.

What got me really thinking was how great the UX experience was. At the time, few came close.

The end of that site was packaged up with Russia's entry into the WTO.

I seem to remember hearing about huge torrents out there too. The right infohash can point a person to huge archives of various kinds, books, video, academic papers, music, the WikiLeak insurance files, which is password protected, as perhaps all of these are.
Show HN: We're pitting 9 AI models in a stock portfolio competition
by regnull | 2026-01-05 17:50:54+00:00
Hey HN,

I built Portfolio Genius, a platform where AI models manage investment portfolios and compete on public leaderboards.

The experiment:

On Dec 17, 2025, we gave 9 AI models (GPT-5.1, GPT-5.2, Gemini 2.5 Pro, Gemini 3 Pro, Gemini 3 Flash, Claude Opus 4.5, Claude Haiku 3.5, Claude Haiku 4.5, Grok 4) each $10K to manage across three risk profiles: aggressive, moderate, and conservative. That's 27 portfolios total.

The models analyze market conditions, recommend trades, and execute them. Real pricing, real results, updated daily.

Interesting early finding:

For aggressive portfolios, older models are outperforming newer ones:

- GPT-5.1: +5.82% (1st place)

- Gemini 2.5 Pro: +4.94% (2nd)

- Haiku 3.5: +1.80% (3rd)

- Opus 4.5: +1.25% (7th)

My hypothesis: newer models are more "careful" - they hedge, qualify, and second-guess. For aggressive investing, you need conviction. Sometimes being less sophisticated means making bolder calls.

For moderate/conservative portfolios, the pattern is different - newer models do better where nuance matters.

Tech stack:

- Next.js frontend

- Firebase/Firestore backend

- Python Cloud Functions for AI orchestration

- Real-time market data for pricing

- Each model gets the same market data and prompts

What I'm curious about:

- Will the "dumber = bolder" pattern hold over time?

- How will different models react to the same market events?

- Do AI models have investable "personalities"?

Leaderboards: https://portfoliogenius.ai/leaderboards

Would love feedback from the HN community. Happy to answer questions about the architecture or methodology.
by epolanski | 2026-01-05 17:51:08+00:00
I have a huge beef with AI on YouTube.

It's clear that plenty are doing the following:

- find a random topic tied to their channel, e.g. some battle in Napoleonic wars

- have Perplexity do as much research on the topic

- have AI write a script for 20 minutes of it based on research

- genAI images and video content

- genAI the voiceover

- profit

I hate it.

It's not even terrible content, nor it's not informative, but it's soulless and not very entertaining.

Worst thing is that you're not told it's AI generated so you looking at pictures of the battle thinking they come from real paintings or something, so you maybe want to research more about that painting and it's all fake and not ai labeled.

TikTok has it even worse. I think I've seen the "mother protects child from avalanche on a porch" variation in any goddamn way, with wolves, bears, people, deer, snow tigers..nothing is ai labeled and it all pretends to be genuine.

Most videos about funny pets, which I loved, are also super fake. Labrador saves small child from falling tv, British shorthair chasing mastiff...all of this fake..

None of it labeled. It's slop after slop.
by dpoloncsak | 2026-01-05 17:51:11+00:00
Maybe a dumb question, but is there any reason or incentive for Tailscale to not run something like this for every user, or atleast offer a "scan now" button or something? I love the idea of this tool and will for sure be using it, just would like to see something like this native to the platform itself. Seems on brand for them, and it's not like they offer paid security audits or anything
by WalterBright | 2026-01-05 17:51:52+00:00
Rewrite as:

for (ptr = start; random_condition (*ptr); ptr = ptr->next) { }

Then anyone reading your code will know the empty loop was intentional. BTW, many C compilers warn about the ; on a for loop.

Have you ever discovered this bug:

if (condition);
doThis();

It's a hard one to see in a code review. Yes, that's also disallowed in D.

> I should use %lld for long long, but the printf implementation shipped with the compiler doesn't support that.

Weird that your compiler would support long long, but with a broken Standard library. I don't see that as a feature. You can always cast the argument to long, and at least you won't get undefined behavior.
Why "make money online" advice fails smart people
by makix | 2026-01-05 17:51:54+00:00
Most “make money online” advice is framed like engineering: follow the steps, get the output.

But the online income game is closer to markets + power laws + platform governance than to deterministic systems. The advice is usually written by survivors (or marketers), so it quietly assumes you’ll have (1) above-average distribution, (2) stable platform reach, and (3) enough runway to iterate.

Those assumptions are often false. Revenue is highly skewed in creator/platform ecosystems (a small minority captures most outcomes), and platforms can change incentives overnight via ranking, monetization rules, or policy enforcement. Even outside platforms, base rates for new businesses are brutal: only 34.7% of establishments born in 2013 were stil
l operating in 2023.

So smart people do the “right” things… and still get stuck.
by toomuchtodo | 2026-01-05 17:52:00+00:00
If most jobs won't offer it, that is a problem to fix. These are just arbitrary rules, after all (in the US, the official per week work hours codified in federal statute). They can be changed. It is not an option if most cannot obtain it, or it is not easy to obtain it. We have different mental models on the topic, that's all.
by dogprez | 2026-01-05 17:52:32+00:00
I'm not trying to detract from the OP's point but if the author turned the lens they are using to evaluate whether AI videos are harmful or not onto the videos one usually encountered on the internet pre-AI videos, I think they would find most internet videos are harmful by those same metrics. It's propaganda, rage-baiting, trying to manipulate you into buying something, etc. It's no wonder that's the sort of content we see being generated.
by pingananth | 2026-01-05 17:52:38+00:00
Interesting! I haven't come across any teams communicating to sales on sprint goals. ofcourse this could be an early stage startup but that's exactly my point as well. I provide heuristics and guidelines and not a playbook. The final decision will depend on multiple contexts like - your org, stage of the product, org culture, nature of your sales VP and yours, revenue, and a lot more. This is why it is subjective and not deterministic.
by topspin | 2026-01-05 17:52:41+00:00
Andrew Grove, in his later years, held the same view. He explained essentially everything we had seen till then and since: the decline of US semiconductor manufacturing, the loss of talent, critical dependence on foreign nations and companies, etc.

It turns out you can't cherry pick the intellectual work and fob the rest off on foreign supply and still maintain global leadership and domestic prosperity. The whole stack must be at least competitive domestically. Only trade policy can achieve this.
by granda | 2026-01-05 17:52:46+00:00
Author here! Thanks for checking it out.

On the $210/month VM cost - fair point. For me it's worth it because I'm running multiple parallel agents throughout the day, but you could definitely do this cheaper with a smaller instance or spot pricing.

The real bottleneck isn't typing on mobile - it's reviewing the output. I've found 2-3 parallel agents is my sweet spot before I can't keep up with reviewing PRs. Git worktrees help a lot here since each agent works in isolation with its own containers (including db).

And to the work-life balance concerns - totally valid. For me this isn't about working more, it's about capturing ideas when they strike (usually on walks or waiting in line). The Poke notifications let me stay async rather than glued to a terminal.

Although a little late to the HN post, happy to answer any questions about the setup!
by rjmunro | 2026-01-05 17:53:25+00:00
Not sure if this counts, but someone I know made a javascript interpreter that runs on ESP32, ported it to a smartwatch and wrote a whole open source operating system. He put it on Kickstarter and reached the goal. He now sells the result, and a second one for a different smartwatch: https://www.espruino.com/Bangle.js2

There's an app store here: https://banglejs.com/apps/, but all apps are free and open source in a single github repo.