7 ms·
"Fix" MacBook Neo Cursor Lag: Record 1 Pixel of the Screen Every 10 Seconds
- deleted 3mo ago[deleted]
- m132 3mo agoSteve turning in his grave
- flukas88 3mo ago[flagged]
- InsideOutSanta 3mo agoRelevant quote from https://www.folklore.org/Shut_Up.html https://www.folklore.org/Shut_Up.html: We showed [Gates] how the Macintosh mouse cursor moved smoothly, in a flicker-free fashion. "What kind of hardware do you use to draw the cursor?", he asked. Many current personal computers had special hardware to draw small bitmaps called "sprites", and he thought we might be doing something similar.
- Stitch4223 3mo agoThis quote from 1981 stresses that taking away a responsive cursor is the most arrogant and disrespectful bug. The audacity of developers to restart the discussion whether the mouse should follow user input induces rage on so many levels.
- InsideOutSanta 3mo agoYeah, the cursor is your most direct embodiment in the computer. Messing with it is like somebody pushing your arm when you're trying to cut tomatoes. It's a major determinant in how good it feels to use a computer (and whether you cut your fingers). But there were a lot of things we learned in the 80s and 90s that we have largely forgotten today, like "make clickable things look clickable" and "don't use Yes and No as button labels" and "active windows should look different from inactive windows."
- DonHopkins 3mo agoAlan Dye would disagree. https://daringfireball.net/2025/12/bad_dye_job https://daringfireball.net/2025/12/bad_dye_job
- pmontra 3mo agoI think you forgot the /s Anyway, interesting story. I didn't know what a key window is. I googled. It's the active window.
- xantronix 3mo agoIt's an old NeXTism!
- DonHopkins 3mo agoSssssh!!! I was deadpanning respect for him in the hopes that Meta will keep him long enough to inflict as much damage as possible. TLDR: >It’s rather extraordinary in today’s hyper-partisan world that there’s nearly universal agreement amongst actual practitioners of user-interface design that Alan Dye is a fraud who led the company deeply astray. >My favorite reaction to today’s news is this one-liner from a guy on Twitter/X: “The average IQ of both companies has increased.” https://x.com/shipulin/status/1996318006335401997 https://x.com/shipulin/status/1996318006335401997
- InsideOutSanta 3mo ago> I was deadpanning respect for him in the hopes that Meta will keep him long enough to inflict as much damage as possible. Oh, yes, of course. We all remember the great Alan Dye as the genius who made Apple the global success it is today and made the design of its operating systems beloved worldwide. Truly a giant amongst men, a genius of the sort that hasn't been seen since Leonardo DaVinci, and more beautiful than Brad Pitt in his prime. Meta is lucky to have him and should immediately do everything he says without even a hint of hesitation.
- DonHopkins 3mo agoSGIs and Suns had overlay planes just for that. In fact SGI 4Sight would draw the popup menus in the overlay plane, too, since reading back the color framebuffer to draw cursors or perform xor highlighting or restoring the background after popping down menus was extremely expensive with that hardware. Sun's framebuffers with 8 bit color + 1 bit monochrome + 1 bit enable (like the cgfour / GX aka Lego graphics accelerator) put the cursor in the monochrome layer, and NeWS supported it as an overlay plane, an optimization of xor drawing and undrawing. The enable layer would switch between the color and monochrome layers on a per-pixel basis. With NeWS, I could open up the enable and monochrome layers directly and draw into them with PostScript to perform temporary non-destructive highlighting, and make monochrome overlay windows that didn't damage the color windows underneath. But it was a bit of a hack (much uglier than this cursor lag fix). Here is a window subclass that lifts a monochrome window into the overlay plane so it doesn't damage color windows behind it: https://donhopkins.com/home/archive/psiber/cyber/overlay.ps https://donhopkins.com/home/archive/psiber/cyber/overlay.ps % Overlay plane compatibility hack for cg4 frame buffer. % This is a nebulous layer abstracted from a messy program, to make it run % on generic NeWS servers. It should be rethought and rewritten. Repent! % % Requires the devices /dev/cgfour0, /dev/cgfour0_ovl, and /dev/cgfour0_ove % (which can all be major 39 minor 0, or whatever), and the following patch % to the NeWS 1.1 server sources (but X11/NeWS doesn't need to be patched!), % in order to take advantage of a cg4 under NeWS 1.1 (Otherwise it falls back % to using exclusive-or). [...] % Damn damn damn! X11/NeWS Version 1.0 FCS on a cg4 can open up the % enable plane, but there's a bug that trashes the enable plane color map, % so we can draw in gray scales but we can't draw in white (black?). The "Pseudo Scientific Visualizer" used it by making a PSVisualizerWindow subclass of OverlayWindow: https://donhopkins.com/home/archive/psiber/cyber/mics.ps https://donhopkins.com/home/archive/psiber/cyber/mics.ps And the popup pointing hand shaped callout window also used it so it didn't have to repaint the color window underneath when you moved or dismissed it: https://donhopkins.com/home/archive/psiber/cyber/pointer.ps https://donhopkins.com/home/archive/psiber/cyber/pointer.ps
- ActorNightly 3mo agoOh please. Steve would have made the Mac Book even worse functionally, but it would have had prettier aesthetics. Dude was the definition of narcissism.
- anotherpaul 3mo agoThis is such a nice fix but then you install it's set it up to launch on start and forget about it. 5 years later the bug has been fixed for 4 and I still have tho script record a random pixel every 10 seconds. Never know how to know that the hacky fix is no longer needed
- deleted 3mo ago[deleted]
- TheTon 3mo agoI’m not sure what the bug is, but this is a terrible fix. What this is doing is forcing the WindowServer to composite the cursor rather than treat it as a hardware overlay. I suppose the issue must be pretty bad for OP if this helps, but … ugh.
- nusl 3mo agoTerrible fix but it's a fix that's minimally-invasive and addresses a bug that causes a disproportionate annoyance to the fix. I can imagine your cursor lagging is something that is extremely annoying over time.
- nok22kon 3mo agolinux was plagued for a long time by lagging mouse cursor
- koiueo 3mo agoI've been using Linux every day for the last 17 years, and that's the first time I'm hearing this. I'm genuinely surprised. The way you word it, it looks like a famous ubiquitous problem. Mind sharing any details?
- deleted 3mo ago[deleted]
- jaapz 3mo agoI've also had computers with nvidia, amd (even back when it was still ATI) and intel gpu's, at least since 2006, and can't remember ever having an issue like this. Not saying it's not an issue, but there is such an incredible amount of hardware configurations that linux supports, so it's a bit weird to say that "linux" in general has suffered a bug like this.
- JamesMcMinn 3mo agoThere was a time when it was quite bad, especially if using Wayland and under heavy CPU or I/O loads. I think this has mostly been solved now, but I do recall getting frustrated with the switch to Wayland because of it.
- xnx 3mo agoSometimes the cure is worse than the disease.
- y1n0 3mo ago“It was a brilliant cure, but we lost the patient.”
- inigyou 3mo agoWhat's with "guard !foo else return" instead of "if foo return", is that just how Swift is written?
- deleted 3mo ago[deleted]
- NobodyNada 3mo agoguard is an inverted if statement, with the additional requirement that the branch must exit the parent scope. It's useful sometimes for readability, particularly for avoiding the "pyramid of doom" when you have a lot of preconditions that need to be checked: if fooOK if barOK { if bazOK { // do something } } } can be written as: guard fooOK else { return } guard barOK else { return } guard bazOK else { return } // do something Obviously there are other options (like writing a negated if), but sometimes guard is more readable. It's a style thing. The more important use case for guard is that 'guard let' statements can pattern-match and introduce bindings that are valid for the rest of the scope: guard let foo = someOptional else { return } print(foo); This is useful enough that Rust copied it in the form of 'let ... else {}' statements (but did not bring over boolean guard statements).
- silvestrov 3mo agoPerl has the negated if statement: return unless fooOK; return unless barOK; return unless bazOK; # do something
- adrian_b 3mo agoAlready in 1963, the language CPL introduced "unless ... do ...", besides the "if ... do ..." inherited from ALGOL 60. Perl has just followed the example of CPL and BCPL, decades later. Using "if" or "unless", whichever is more appropriate, is far more readable than "guard". Moreover, there are many languages where an assignment or an initialization can appear in any place where an expression can appear. Such general rules are always better than special rules like allowing new bindings in a "guard", but not in an "if". Pattern matching does not need any special syntax, it should work in the standard alternative program structure of that programming language, regardless whether it is called "select", "case" or "switch". It always annoys me when the creators of new programming languages demonstrate amateurism, by inventing new worse alternatives than those that existed in various older programming language, already many decades ago. There are plenty of new programming languages that claim to be better than C, which may be true, but they fail to match programming languages much older than C.
- swiftcoder 3mo agoIs the fix working because it forces the WindowServer to do a full composition of the cursor overlay, or just because it prevents the system from throttling down into a lower power mode?
- deleted 3mo ago[deleted]
- deleted 3mo ago[deleted]
- adithyassekhar 3mo agoThe duality of TheTon’s and anotherpaul’s comments.
- userbinator 3mo agoBut at the moment when it lags the system switches from hardware cursor to software cursor (CGCursorIsDrawnInFramebuffer() goes from 0 to 1) so maybe that transition is stalled somehow on Macbook Neo. With the disclaimer that I have zero knowledge of the MacBook Neo hardware, but I do know a bit about GPUs in general (including having written some GPU-accelerated drivers for Windows and the associated cursor-handling code), I'm going to make a wild guess: this lag is caused by waiting for the GPU command queue to flush. As a bit of background information: the GPU is fed commands from a queue that the CPU writes to. These commands perform the drawing operations that the GPU is designed to accelerate. A hardware cursor is basically a small bitmap that can be positioned anywhere on the screen and moved around by simply updating position registers (which is normally done per mouse interrupt); the hardware draws it automatically. A software cursor is manually drawn by the graphics stack, which saves what was under it, draws the cursor, and then whenever it needs to be moved, writes the original data back, saves the data at the new position, and then draws the cursor there. Flushing the command queue is necessary when switching to a software cursor, or otherwise doing software writes to the framebuffer, because you need to wait for the GPU to finish drawing what it has queued, or it may end up drawing over what software wants to draw, including the cursor. Or worse, the command is a blit (e.g. scrolling a window) and you end up with remnants of the cursor at its previous position.
- jstanley 3mo agoBut wouldn't the software cursor operations also go in the queue? I don't see the problem.
- userbinator 3mo agoFor something as small as a cursor they could be doing direct framebuffer writes.
- ralferoo 3mo agoModern GPUs usually have multiple command queues, at least one for application use (often separate queues for rendering and compute) and one for OS use. There's a good chance that this wasn't implemented on a chip intended for a phone.
- alvaniss 3mo agoah yes, the famous mac "Just works" OS
- koiueo 3mo agoWhat's the big deal? It's just a simple one-liner curl github.com/trustworthyguy/fix_everything | sh And it all works. Not like recompiling entire kernel to play an mp3. /s obviously
- flyingshelf 3mo agoThat was like 20 years ago. My computer insists on downloading gigabytes of videos at random (correction: specifically when I use the hotspot) because maybe I have a video screensaver enabled. I had to set up a daemon to kill the downloader every 10 seconds.
- nicman23 3mo agohost file nuke?
- libria 3mo agoI think this ^ and the "Steve in his grave" comment should be a red flag for Apple execs. Being flawless and polished at UX, hardware experience, and CX in general are the core of Apple's identity and revenue. Granted, the "hold it like this" thing was a huge gaff. I also think the Neo is a culture miss that is diluting their brand. Their logo is synonymous with "expensive" and "quality" but the Neo is affordable and now it has cursor stutter.
- eviks 3mo ago> Being flawless and polished at UX, hardware experience, and CX in general are the core of Apple's identity and revenue. But since they never had all of that, it can't be at the core, so the execs can continue to wave the green $ flag
- ActorNightly 3mo ago>Being flawless and polished at UX, hardware experience, and CX in general are the core of Apple's identity and revenue. No, and no. Apple is at the Ferrari stage of computer hardware. Ferrari doesn't need to make good cars. They don't even need to make good looking cars (i.e the new Luce). They just need to make cars that are hard to get, with a Ferrari badge. Because the badge carries so much weight, the product is desirable. Apple is the same way. They could release a terrible laptop, and people will still buy it. Don't believe me? Remember that they had an MBP, pre apple silicon, with comparatively shit specs for the money, and a touchbar with a virtual escape key and a terrible arrow key layout. Thing was actually terrible to use. But yet, because Apple, everyone was still praising it.
- zuhsetaqi 3mo agoDoes anyone know if this is fixed in macOS 27?
- vardump 3mo agoEmbedded Swift in a script. That seems like a useful concept for small scripts on macOS. I will definitely steal this idea.
- thewebguyd 3mo agoSwift also has an interpreted mode, you can just #!/usr/bin/evn swift import Foundation print("Hello, world") and chmod +x hello.swift and execute it. Instead of doing swift in bash and calling swiftc, you can always shell out to Process() from inside a Swift script instead.
- vardump 3mo agoThanks! I think both approaches have their uses, neither fully replaces the other.
- zx8080 3mo agoRound rect corners are to blame? The root cause for the issue is probably (I'm not an Apple developer) due to huge round rectangles on the window shape corners. Rendering the window with the corners would include rendering whatever other windows and widgets under the window. (Which will have a lag and some more operations with transparency, which the developers probably want to avoid - while I'm not sure about this part).
- saagarjha 3mo agoNo
- deleted 3mo ago[deleted]
- elicash 3mo agoA fix so amusing and ridiculous it gets the bug enough attention that Apple fixes it for real.
- spectral_beel 3mo agoi hope they can fix it asap
- gcr 3mo agoThis is a great example of how to make a minimal app bundle with Swift. Thank you! All an App needs on MacOS seems to be a binary and a little .plist
- whywhywhywhy 3mo agoCrazy this would be the case when the MacOS cursor has been buttery smooth and only ever lags if the entire system is about to go down even on 800Mhz G4 Titanium Powerbook this was the behavior.
- amelius 3mo agoBonus points if you manage to record the Facebook tracking pixel.
- zetanor 3mo agoThe Meta EULA does NOT allow you to record their tracking pixel.
- ing33k 3mo agois any one here using the neo for any coding work ? how is it ?
- taude 3mo agoNot real work. It's an amazing couch laptop, though. I do have a full CLI tooling pipeline setup, though. I mostly read, research, and write on it. Chrome tabs galore open, Obsidian, etc... It's pretty amazing at the price point. Thought last year the M4 Airs were on sale for $749 -- I'm doubtful we'll see that price again on those....
- hirvi74 3mo agoI do, and I love mine. I program relatively low-resource software, so power is not an issue.
- ActorNightly 3mo agoIf all you need is a coding laptop, any $200 dollar laptop with upgradable ssd and ram with linux installed does just fine.
- taude 3mo agoI'm on a NEO right now, my Chrome has like 25 tabs open. Doom Emacs running in terminal, Obsidian open, Apple Music, Apple NOtes, etc. I have a lot open... AND I'm not seeing this issue. What am I missing? I'm on 26.4. :shrugs: EDIT: I guess I wait to update and install the latest version? Maybe the linked page could have stated there's a new regression in newer MacOS versions that introduced this?
- exogen 3mo agoBefore reading the background info, I was going to recommend a much simpler fix, but they actually already mention it in there: "Also the mouse cursor size can be changed." This was going to be my suggestion because it also fixed a similar CPU/GPU related issue many years ago: Apple's own TV.app would have minuscule color handling differences whenever subtitles would show during a movie. This was driving me nuts while showing a moody black & white film for a movie night - every time a subtitle would pop up, the entire scene's black levels would shift slightly (and it wasn't any kind of adaptive/localized brightness or anything like that, it was the actual rendering). Some online sleuthing revealed it was GPU related (pure GPU video decoding vs. the CPU overlaying subtitles on the screen), and that bumping up the cursor size (even the tiniest amount) in mouse settings would fix it. It worked. It's barely noticeable, but I actually prefer the slightly bigger mouse cursor now anyway, so it's part of my standard macOS setup.
- MontagFTB 3mo agoDo you have links to what you found? That solution sounds plausible in this case.
- exogen 3mo agoNot sure if this is the exact same one, but here's one thread I found: https://discussions.apple.com/thread/6026454?answerId=32731877022&sortBy=rank#32731877022 https://discussions.apple.com/thread/6026454?answerId=327318... The cursor size adjustment is mentioned further down on the page.
- retroplasma 3mo agoYes, however, a small change of the cursor size doesn't work for me for the Neo lag (idk about the TV app). I have to set it to a size that is significantly bigger, to trigger the fix. (edit: Added that side note to the gist)
- exogen 3mo agoOdd, I wonder if it has to do with modern macOS resolution scaling (how there basically is no "native physical resolution" setting anymore). i.e. maybe up to a certain point it's also simply scaling the hardware-rendered cursor, if that's even possible?
- PaulHoule 3mo agoOne of the most damning indictments of current software architecture is the laggy mouse which we've all gotten used to on mainstream OS. The other day my son and I were sitting in front of the XBOX ONE we (try to) use as a Plex client and laughing about how showing a new logo while the machine is doing something meaningless to us is an act of brand destruction and that they should be showing us a Playstation logo instead... And how with the NES you could just hit the power button and start playing. The cursor never lagged like that on the 1984 Mac.
- thewebguyd 3mo agoIts also one of the most immediately visible degradations of user experience. The cursor is your agent to interact with the computer, an extension of your arm basically. It should be one of the most smooth and responsive pieces of an OS. I remember a long time ago, early days of Gnome 3 when doing large file operations would hang the cursor. It made the whole system feel like complete garbage, totally unacceptable. A cursor lagging (or any kind of GUI/user interaction stutters) should be a critical high priority bug, all hands on deck sort of thing. The entire experience of using the damn thing hinges on the responsiveness of the interface and pointing devices.
- fragmede 3mo agoIt's debatable if the cursor working but not being able to interact with any of the screen elements is more or less janky than if the mouse is stuttering but you can interact with the elements on the screen.
- eviks 3mo agoBut since the ability to interact doesn't depend on the cursor, that debate is besides the point
- gorfian_robot 3mo agoreminds of a prank we pulled on a coworker back in the xterminal days. every time he hit a certain key it would invoke the 'melt' screensaver briefly. he was fairly unobservant though and we had to escalate to invoking it for 1s every minute before he finally noticed. the follow on prank was having all the xterminals 'moo' whenever new code was deployed to prod.
- ramses0 3mo agoThat’s amazing! I am just imagining a room full of programmers with slightly divergent crontab start times all playing a "moo" sound effect, seemingly at random... not a bad ambient information radiator, actually!
- gorfian_robot 3mo agoambient information radiator. I like that term and have always been interested in it. for a while we had a system monitoring connected to a speaker that produced fairly consistent tonal patterns. when it started sounding 'weird' it usually meant something was off.
- mproud 3mo agoIs there a Radar open for this?
- da_grift_shift 3mo agoExactly my question. 600 lines of Swift-in-shell-wrapper and Claude couldn't have run sysdiagnose and vibed out a quick report to throw into Feedback Assistant?
- r2vcap 3mo ago[dead]
- bryan_w 3mo agoThis feels like something Steve Jobs would have slapped someone for allowing to be shipped to production