frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Show HN: Moli P2P – An ephemeral, serverless image gallery (Rust and WebRTC)

https://moli-green.is/
1•ShinyaKoyano•3m ago•0 comments

How I grow my X presence?

https://www.reddit.com/r/GrowthHacking/s/UEc8pAl61b
1•m00dy•5m ago•0 comments

What's the cost of the most expensive Super Bowl ad slot?

https://ballparkguess.com/?id=5b98b1d3-5887-47b9-8a92-43be2ced674b
1•bkls•6m ago•0 comments

What if you just did a startup instead?

https://alexaraki.substack.com/p/what-if-you-just-did-a-startup
1•okaywriting•12m ago•0 comments

Hacking up your own shell completion (2020)

https://www.feltrac.co/environment/2020/01/18/build-your-own-shell-completion.html
1•todsacerdoti•15m ago•0 comments

Show HN: Gorse 0.5 – Open-source recommender system with visual workflow editor

https://github.com/gorse-io/gorse
1•zhenghaoz•16m ago•0 comments

GLM-OCR: Accurate × Fast × Comprehensive

https://github.com/zai-org/GLM-OCR
1•ms7892•17m ago•0 comments

Local Agent Bench: Test 11 small LLMs on tool-calling judgment, on CPU, no GPU

https://github.com/MikeVeerman/tool-calling-benchmark
1•MikeVeerman•18m ago•0 comments

Show HN: AboutMyProject – A public log for developer proof-of-work

https://aboutmyproject.com/
1•Raiplus•18m ago•0 comments

Expertise, AI and Work of Future [video]

https://www.youtube.com/watch?v=wsxWl9iT1XU
1•indiantinker•18m ago•0 comments

So Long to Cheap Books You Could Fit in Your Pocket

https://www.nytimes.com/2026/02/06/books/mass-market-paperback-books.html
3•pseudolus•19m ago•1 comments

PID Controller

https://en.wikipedia.org/wiki/Proportional%E2%80%93integral%E2%80%93derivative_controller
1•tosh•23m ago•0 comments

SpaceX Rocket Generates 100GW of Power, or 20% of US Electricity

https://twitter.com/AlecStapp/status/2019932764515234159
2•bkls•23m ago•0 comments

Kubernetes MCP Server

https://github.com/yindia/rootcause
1•yindia•24m ago•0 comments

I Built a Movie Recommendation Agent to Solve Movie Nights with My Wife

https://rokn.io/posts/building-movie-recommendation-agent
4•roknovosel•24m ago•0 comments

What were the first animals? The fierce sponge–jelly battle that just won't end

https://www.nature.com/articles/d41586-026-00238-z
2•beardyw•33m ago•0 comments

Sidestepping Evaluation Awareness and Anticipating Misalignment

https://alignment.openai.com/prod-evals/
1•taubek•33m ago•0 comments

OldMapsOnline

https://www.oldmapsonline.org/en
1•surprisetalk•35m ago•0 comments

What It's Like to Be a Worm

https://www.asimov.press/p/sentience
2•surprisetalk•35m ago•0 comments

Don't go to physics grad school and other cautionary tales

https://scottlocklin.wordpress.com/2025/12/19/dont-go-to-physics-grad-school-and-other-cautionary...
2•surprisetalk•35m ago•0 comments

Lawyer sets new standard for abuse of AI; judge tosses case

https://arstechnica.com/tech-policy/2026/02/randomly-quoting-ray-bradbury-did-not-save-lawyer-fro...
5•pseudolus•36m ago•0 comments

AI anxiety batters software execs, costing them combined $62B: report

https://nypost.com/2026/02/04/business/ai-anxiety-batters-software-execs-costing-them-62b-report/
1•1vuio0pswjnm7•36m ago•0 comments

Bogus Pipeline

https://en.wikipedia.org/wiki/Bogus_pipeline
1•doener•37m ago•0 comments

Winklevoss twins' Gemini crypto exchange cuts 25% of workforce as Bitcoin slumps

https://nypost.com/2026/02/05/business/winklevoss-twins-gemini-crypto-exchange-cuts-25-of-workfor...
2•1vuio0pswjnm7•38m ago•0 comments

How AI Is Reshaping Human Reasoning and the Rise of Cognitive Surrender

https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6097646
3•obscurette•38m ago•0 comments

Cycling in France

https://www.sheldonbrown.com/org/france-sheldon.html
2•jackhalford•39m ago•0 comments

Ask HN: What breaks in cross-border healthcare coordination?

1•abhay1633•40m ago•0 comments

Show HN: Simple – a bytecode VM and language stack I built with AI

https://github.com/JJLDonley/Simple
2•tangjiehao•42m ago•0 comments

Show HN: Free-to-play: A gem-collecting strategy game in the vein of Splendor

https://caratria.com/
1•jonrosner•43m ago•1 comments

My Eighth Year as a Bootstrapped Founde

https://mtlynch.io/bootstrapped-founder-year-8/
1•mtlynch•44m ago•0 comments
Open in hackernews

A 16.67 Millisecond Frame

https://koolcodez.com/blog/inside-the-frame/
27•luciodale•4mo ago

Comments

luciodale•4mo ago
How do we even see anything on a browser? How do pixels turn into shapes, color, and movement?

Every time we scroll, hover, or trigger an animation, the browser goes through a whole routine. It calculates styles, figures out layout, paints pixels, and puts everything together on screen. All of that happens in just a few milliseconds.

It’s kind of wild how much is happening behind what feels instant. And the way we write code can make that process either smooth and fluid or heavy and janky.

I wrote an article that walks through this step by step, with a small demo showing exactly how these browser processes work and how a few CSS choices can make a big difference.

johncolanduoni•4mo ago
A lot of these don’t happen on scroll and hover under normal circumstances. For example smooth scrolling on touchscreens is implemented by only re-running the compositor on each frame, and using the existing GPU-resident bitmap of the text being scrolled. That’s why non-passive onscroll callbacks make scrolling suck, especially on mobile.
immibis•4mo ago
What's not stated, is that we used to re-render the text at the bottom each time you scrolled up, and could still do it pretty fast (not quite in 16.67 milliseconds but we could have if computers had been today's speed), and in the meantime, we seem to have forgotten how to do that. Although we also have more pixels now, which probably changes things.
toast0•4mo ago
> we used to re-render the text at the bottom each time you scrolled up, and could still do it pretty fast

If you go back far enough, the IBM graphics cards used a text mode where text was accelerated by the graphics card, software would write a attribute byte and a data byte and the card had a bitmapped font to render text. VGA text mode at least could use hardware windowing so scrolling could also be accelerated; not every system used it, but you can set the start address and a line number where it returns to the start of the data area. That makes it easy to scroll without having to rewrite the screen buffer all at once. (If you set the stride to something that evenly divides the screen buffer and is at least as wide as your lines, it makes things even easier)

vbezhenar•4mo ago
I think that many projects use wrong architecture, when it's a possibility for business code to block animations.

IMO all the "user" code must run in a dedicated thread, completely decoupled from the rendering loop. This code can publish changes to a scene tree, performing changes, starting animations, and so on, but these changes ultimately are asynchronous. You want to delete an element from a webpage, but it'll not be deleted at this JS line, it'll be deleted at the next frame, or may be after that, if rendering thread is a bit busy right now.

Animations must stay fluid and UI must react to the user input instantly. FPS must not drop.

Browser does it wrong. Android GUI API does it wrong. World of Warcraft addons do it wrong.

b_e_n_t_o_n•4mo ago
Multithreading in the browser kinda sucks though, it's too slow to share significant data between workers (threads), and if you try it with SharedArrayBuffer you eat the serialisation costs.
gamer223•4mo ago
I’ve only ever seen competitive video games get the architecture right. They have the natural incentive of needing stable high FPS.

Random GUI apps aren’t incentivized enough and so garbage leaks through. I die a bit every time a random GUI app stutters drawing 2D boxes

Rohansi•4mo ago
That's basically what React Native does/did and it's generally good but turns into a nightmare when you need to synchronize interactions between the two threads. 16ms is a long time - if your UI manipulations eat up most of that time then there's something wrong. Entire video games can run basically on one thread within that time and they do way more.
vbezhenar•4mo ago
16ms is a long time by C standards.

16ms is not a long time, when interpreted languages like Lua are used.

16ms is not a long time, when GC can suddenly kick in and stop the thread for unspecified amount of time.

16ms is not a long time, when JIT can suddenly kick in and stop the thread for unspecified amount of time.

GC and JIT are good techniques for server-style throughput workloads, when infrequent delays are not noticeable. For GUI, infrequent delays lead to skipped frames and stuttering.

I don't think that it's reasonable to ask the world to develop GUI apps in C or Rust. Probably Swift is a good middle point between usability and predictable performance. But most GUI projects use slow languages and/or languages with GC.

Rohansi•3mo ago
I disagree. Yes, it's less time vs. C but still a long time.

There are plenty of games built with Lua that run very well such as Balatro and Don't Starve. And games are far more sensitive to hitches than GUI projects because they are constantly animating. Your users will not only easily see lag - it can ruin the game for them.

If a basic GUI is performing poorly then the blame almost certainly lies on whoever developed it. Don't blame the language or runtime.

simscitizen•4mo ago
Not really something anyone can change at this point, given that the entire web API presumes an execution model where everything logically happens on the main thread (and code can and does expect to observe those state changes synchronously).
AndriyKunitsyn•4mo ago
Which begs the question - if all of these projects got it "wrong", what's the chance that the "right" thing isn't right at all?

All animation is inherently discrete. No matter how many threads you have, there always has to be the last rendering thread, the thing that actually prepares the calls to the rendering backend. It always has to have frames, and in every frame, in the timestamp T, it will be interested in getting the world state in the timestamp T. So, the things that work on the world state - they have to prepare it as it was in T, not earlier, not later. You cannot completely decouple it.

In one of game projects that I worked on, a physics thread and a game thread actually were pretty decoupled, and what the game thread did was extrapolating the world state from the information provided by physics, because it knew not only the positions of physics objects, but also their velocities. Can we make every web developer to set velocities to the HTML elements explicitly? Probably not.

jezek2•4mo ago
This has been tried, even in the browser. It just leads to buttons that do nothing when clicked, scrolling to unpopulated areas, infinite loading animations and other such artifacts.

It does not help, you have smooth animations but you feel you're disconnected from the program and trust it less. The UI code just needs to not take much time and offload background stuff to another thread, but not the UI logic itself. It also naturally synchronizes events.

And sometimes it's better to briefly block UI thread as the alternatives lead to worse user experience.

vbezhenar•4mo ago
I still feel these issues could be solved one by one.

Button click will automatically disable it, until its handler executed. There could be creative animations translating this state to the user in an intuitive way, so the button does not feel stuck and does not feel doing nothing.

Scroll widget should require some placeholder graphics which will be displayed until loading handler executed and replaced this placeholder with real data. A lot of apps already do exactly that.

AndriyKunitsyn•4mo ago
If that's wild to you, wait until you see video games.
don_neufeld•4mo ago
As an early 2000’s game dev - I weep.

Scrolling? Animations? LOL.

ChuckMcM•4mo ago
This is both informative and kind of amazing that anything works at all. Talk to anyone who did graphics at the turn of the century and you'll hear about "racing the beam" which you had only 16.67 mS before vertical retrace took you back to 0,0. Why double and triple buffering was invented, and how "animation time" is skewed by "frame time" and if you want to keep your animations from jumping or jittering you really needed to know how many milliseconds between the last frame and the one your rendering will take so that all your assets are rendered where they should be at that time.

There is a lot of fun programming to be had in that space.

reactordev•4mo ago
We still race the beam, only on separate command chains. Across threads. With 100x the vertices. It’s still fun. Light, shadows, volumes, SDRs, HDRIs, PBR, so much has been thoroughly researched and standardized. We even have realistic clouds with volume.

This is why I got into programming to begin with. Fun first, visual second, technical challenges third, money fourth, company last.

jimrandomh•4mo ago
This article says that using `transform` is faster than using `left` and `top` because `transform` is handled on-GPU, while `left` and `top` are not. This is a myth. I tried the demo page in the Firefox profiler; neither the optimized nor the unoptimized version missed frames. I tried it in the Chrome profiler; the unoptimized version missed frames, but the time was clearly labelled by the profiler as being GPU time, not reflow. Neither browser did reflows (or, all reflows were fast enough to not have any profiler-samples associated.)

The reality is that browsers contain large piles of heuristic optimizations which defy simple explanation. You simply have to profile and experiment, every time, separately.

MountDoom•4mo ago
This article is almost certainly AI-generated.
tux3•4mo ago
Same experience here. Both consumed a lot of CPU, but they looked very similar on the perf graph, and neither missed any frames.
b_e_n_t_o_n•4mo ago
Yep. At one point it was probably the case that it always caused reflows but browsers have had so much investment into optimizations that it probably realizes those layout changes don't require reflows and skips them.
pharrington•4mo ago
Moving an absolutely positioned element never caused a reflow, by design. The AI slop is just wrong.
luciodale•4mo ago
Thanks for the input! Indeed, the reflows were incredibly fast because I was using position: absolute, which meant the squares were not affecting anything else in the dom, but just their position (so cheap operation). I will add a note on the article on that... also I am improving the 'bad' example so the shuffle button triggers reflow in a significant way.
AndriyKunitsyn•4mo ago
Correction: an 8.33 ms frame. Screens are 120 Hz now :)
mkhalil•4mo ago
The "demo" is kind of bologna.

1) The code that is running is not what's presented; it executes (non-transpiled) vanilla JS.* Why not just show that?

2) Removing the box shadow massively makes the two closer in performance.

3) The page could just be one sentence: "Reflowing the layout of a page is slower than moving a single item." GPU un-related.

---

*Code that actually is running:

```js

        , u = t => {
        h && clearTimeout(h),
        l.forEach( (e, s) => {
            const {top: o, left: n} = m[r[s]];
            t ? (e.style.transform = "translate(0px, 0px)",
            e.style.opacity = "0.7",
            e.offsetHeight,
            e.style.transform = `translate(${n}px, ${o}px)`) : e.style.transform = `translate(${n}px, ${o}px)`,
            e.style.top = "",
            e.style.left = ""
        }
        ),
        t && (h = window.setTimeout( () => {
            l.forEach(e => e.style.opacity = "1")
        }
        , 500))
    }
        , d = t => {
        y && clearTimeout(y),
        l.forEach( (e, s) => {
            const {top: o, left: n} = m[r[s]];
            e.style.top = `${o}px`,
            e.style.left = `${n}px`,
            e.style.transform = "",
            t && (e.style.boxShadow = "0 14px 28px rgba(239,68,68,0.45)") // REMOVING THIS LINE = BIG DIFFERENCE
        }
        ),
        t && (y = window.setTimeout( () => {
            l.forEach(e => {
                e.style.boxShadow = "none"
            }
            )
        }
        , 500))
    }
           
```
luciodale•4mo ago
Good points.

1) I thought of giving an easier to read example. I just moved the example to react, so the snippets actually match exactly what's going on in the background.

2) It is true! Though, using shadows on the optimized code doesn't slow it down. I added more toggles to test same effects on transform and top/left implementations.

3) I think it's still interesting to start with some thought and then observe that in practice things are different really. In fact, thanks for all the feedback, as it made me go back and do more investigation.

If you don't mind you can give the article a second look now :)

IAmBroom•3mo ago
> The "demo" is kind of bologna.

The word you are looking for is "baloney". They are pronounced differently.

luciodale•4mo ago
For everyone reading, I made some tweaks to the article after reading some key feedback. In fact, thanks to all commenting :)